与Aorai的LTL配方

时间:2015-06-11 08:43:42

标签: frama-c

我试图找到一个关于LTL操作符_F_的例子,这意味着Aorai致命,但我无法弄清楚这个操作员的目标是什么,并且存储库中没有例子"测试&#34 ;奥拉 例如,我写了这个公式

CALL(main) && _X_ (CALL(a) && _X_(RETURN(a) && _F_ (RETURN(b) && _X_ (RETURN(main)) ) ))

这说明在我的程序主程序中,我必须调用函数a(),然后我不明白操作员会发生什么致命的事情,但它似乎需要并接受我们在函数后调用的任何内容a()没有来自Aorai的警告或错误。如果有人可以帮助我,或者可以提供一个正确的例子。 例如,我有这个程序,我想用上面的公式测试

void a() 
{}
void b() 
{}
int main() 
{ a();
  a();
  b();
  b();
  a();
  return 0;}

我输入frama-c -aorai-ltl test.ltl test.c 通常,Aorai应该有错误或警告。否?

1 个答案:

答案 0 :(得分:1)

你的问题更多是关于时间逻辑而不是Frama-C / Aorai本身,但这个公式的含义是main必须调用a,然后做任何想做的事情,然后再调用{{1}之后就回来了。

注意:注意Aorai只跟踪呼叫和返回事件,例如“就在这之后”这意味着b在上次调用main后无法调用任何函数,但仍然可以执行某些操作,例如b

<强>更新 我在Frama-C上运行了完整的例子。实际上,Aorai生成的x++;合同中缺少后置条件,即mainmain)末尾生成的自动机的状态应该是接受的,这不是这种情况。这是一个错误。如果您用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,这确实表明该函数不符合自动机,Aoraï警告说。

但请注意,在一般情况下,Aoraï不会发出任何警告。它生成的合同如果满足,则意味着整个程序符合自动机。合同证明必须由另一个插件(例如WP或价值分析)

完成