Frama-C禁用wp qed

时间:2014-06-05 15:35:31

标签: frama-c

使用带有-wp-out选项的Frama-C WP时(例如使用swap.c示例): swap.c

// File swap.c:

/*@ requires \valid(a) && \valid(b);
  @ ensures A: *a == \old(*b) ;
  @ ensures B: *b == \old(*a) ;
  @ assigns *a,*b ;
  @*/

void swap(int *a,int *b)
{
  int tmp = *a ;
  *a = *b ;
  *b = tmp ;
  return ;
}  

执行:

$frama-c -wp -wp-out po_out swap.c

并输出:

[jessie3] Loading Why3 configuration...
[jessie3] Why3 environment loaded.
[jessie3] Loading Why3 theories...
[jessie3] Loading Why3 modules...
[jessie3] Looking up module mach.int.Int32
[jessie3] Looking up module mach.int.Int64
[kernel] preprocessing with "clang -C -E -I.  swap.c"
[wp] Running WP plugin...
[wp] Collecting axiomatic usage
[wp] warning: Missing RTE guards
[wp] 5 goals scheduled
[wp] [Qed] Goal typed_swap_post_B : Valid
[wp] [Qed] Goal typed_swap_assign_part1 : Valid
[wp] [Alt-Ergo] Goal typed_swap_assign_part2 : Valid (39ms) (21)
[wp] [Alt-Ergo] Goal typed_swap_post_A : Valid (Qed:1ms) (38ms) (13)
[wp] [Alt-Ergo] Goal typed_swap_assign_part3 : Valid (30ms) (21)
[wp] Proved goals:    5 / 5
     Qed:             2  (0ms-1ms)
     Alt-Ergo:        3  (30ms-39ms) (21)

它证明了属性并生成了一个文件夹,其中包含证明程序属性所需的证明义务,但不是全部,只有发送到Alt-ergo的证据,证明Qed证明不会生成。

我理解Qed的目的是简化,证明琐碎的属性以节省证明者的时间和精力,但是有可能让它产生所有证明义务发送给证明者吗?这是,禁用Qed并让Frama-C产生alt-ergo的所有证明义务?

1 个答案:

答案 0 :(得分:3)

Qed将对每项证明义务所做的工作量有两个主要选项。 -wp-help的输出提供以下提示:

  • -wp-no-simpl阻止简化常量术语和谓词
  • -wp-no-let阻止展开局部变量

如果你同时使用两者,你​​应该能够在你的po_out目录中获得大多数证据义务,因为它们已经由WP计算得更多或更少(注意某些PO可能仍由{{1}排除例如,如果你某处有Qed