4

通常 -lm でコンパイル時に呼び出される関数の仕様を ACSL で sqrt として実装することは可能ですか? Frama-CのプラグインWPに使用しています。

これは、私がやりたいことを説明するための小さな例です。

/*@ requires sqrt_spec: \forall float x; 
             \model(sqrt(x)) * \model(sqrt(x)) == \model(x);  
    ensures [...] */  

void f (...) {
double y = sqrt x;
[...]
}

明らかに、これを行うと、注釈で使用すると sqrt が存在しないため、WP が泣きます。

[カーネル] ユーザー エラー: 注釈内のバインドされていない関数 sqrt

だから私は抽象的なsqrtを定義したいのですが、私のテストはどれもうまくいきませんでした:

#define sqrt(x) (...)

これについては、float sqrt全体を再実装するのではなく、抽象的な定義が必要なため、(...)に何を入れることができるかわかりません。

/*@  axiomatic SqrtSpec {
logic real sqrt (real x);
} */

そして、これは私の問題を解決しません:

関数 sqrt のコードも仕様もなく、プロトタイプからデフォルトの代入を生成します。

4

1 に答える 1