我对最后一个Frama-C版本的ACSL规范有一些问题 我尝试了很多东西来宣布一对实物,但没有一个能够奏效。 这是一个很小的例子说明问题:
/*@ type real_pair = (real, real); */
给出了:
[kernel]用户错误:意外令牌'('
最后,我希望附近有一个代码:
/*@ axiomatic RealPairs {
type real_pair = (real, real);
logic real Norm ( real_pair p ) =
\let (x,y) = p;
\sqrt(x*x + y*y);
} */
有人看到错误的位置吗?我发现ACSL文档对类型声明非常模糊......
非常感谢您的回答。
致以最诚挚的问候,
Nilexys。
答案 0 :(得分:2)
关于ACSL手册,您所写的内容是正确的。但是,正如您在ACSL 实施手册中看到的那样
(http://frama-c.com/download/frama-c-acsl-implementation.pdf),在Frama-C的当前ACSL实现中不支持对。事实上,ACSL这个领域唯一部分支持的是和类型。更确切地说,您可以定义和类型,但Frama-C不支持\match
构造,这意味着您必须求助于公理。在目前的情况下,Frama-C应该接受以下内容(尽管未经过测试):
/*@ type real_pair = RPCons(real, real); */
/*@ axiomatic Real_pair {
logic real rp_fst(real_pair p);
logic real rp_snd(real_pair p);
axiom rp_fst_def: \forall real x, y; rp_fst(RPCons(x,y)) == x;
axiom rp_snd_def: \forall real x,y; rp_snd(RPCons(x,y)) == y;
*/