Frama c 具有Aorai的LTL公式
我试图找到一个关于LTL运营商的例子,这意味着Aorai的致命性,但我不能确切地理解这个运营商的目的,而且Aorai的存储库“测试”中没有任何例子 例如,我写了这个公式Frama c 具有Aorai的LTL公式,frama-c,Frama C,我试图找到一个关于LTL运营商的例子,这意味着Aorai的致命性,但我不能确切地理解这个运营商的目的,而且Aorai的存储库“测试”中没有任何例子 例如,我写了这个公式 CALL(main) && _X_ (CALL(a) && _X_(RETURN(a) && _F_ (RETURN(b) && _X_ (RETURN(main)) ) )) 也就是说,在我的程序main中,我必须调用函数a(),在此之后,我不知道操作符会发生什
CALL(main) && _X_ (CALL(a) && _X_(RETURN(a) && _F_ (RETURN(b) && _X_ (RETURN(main)) ) ))
也就是说,在我的程序main中,我必须调用函数a(),在此之后,我不知道操作符会发生什么,但它似乎接受并接受我们在函数a()之后调用的任何东西,而没有来自Aorai的警告或错误。如果有人能帮我,或者能举个正确的例子。
例如,我有一个程序,下面我想用上面的公式进行测试
void a()
{}
void b()
{}
int main()
{ a();
a();
b();
b();
a();
return 0;}
I型frama-c-aorai ltl test.ltl test.c
通常,Aorai会发出错误或警告。不是吗?你的问题更多的是关于时态逻辑,而不是Frama-C/Aorai本身,但是这个公式的意思是,
main
必须调用a
,然后在调用b
之后返回之前,做它想做的任何事情
注意:注意Aorai只跟踪调用和返回事件,因此这里的“just after”意味着main
在最后一次调用b
后不能调用任何函数,但仍然可以执行一些操作,例如x++代码>
更新
我已经在Frama-C上运行了您的完整示例。事实上,Aorai生成的main
合同中缺少一个post条件,即main
末尾生成的自动机的状态(T0_S4
)应该是可接受的,这里的情况并非如此。这是一个错误。如果用ya
语言明确地编写一个等价的自动机,如下所示
%init: S0;
%accept: Sf;
S0: { CALL(main) } -> S1;
S1: { [ a() ] } -> S2;
S2: { RETURN(b) } -> S3
| other -> S2;
S3: { RETURN(main) } -> Sf;
Sf: -> Sf;
然后为main
生成的合同包含requires\false代码>,这确实表明函数不符合自动机,Aoraï对此发出警告
但请注意,在一般情况下,Aoraï不会发出任何警告。它生成合同,如果履行合同,则意味着整个程序符合自动机。合同证明必须由另一个插件完成(例如WP或价值分析)很抱歉,但我不知道该在哪里问这个问题。我知道我们必须调用a,在这之后我可以调用我想调用的任何函数,但问题恰恰是当我用这个公式调用b时,通常在它之后,我不能调用任何函数,否则会有错误,事实并非如此,我在b之后调用了其他函数,Aorai没有报告任何错误。。。我使用frama-c钠-20150201。这个版本已经实现了吗?可能是一个错误……如果您的问题是关于使用Aoraï分析特定程序,那么为了帮助您,我们需要所述程序和您使用的确切命令行。感谢您的回答,在您的时间里,我注意到了您关于post条件(主)的意思