如何使用Coq交互式定理证明器运行Frama-c WP插件?

时间:2016-04-13 20:18:05

标签: coq frama-c

这是交换示例表单WP插件教程;

/*@ 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;

  tmp = *a;
  *a = *b;
  *b = tmp;
  return;
}

这是我用coq运行frama-c时的结果;

frama-c -wp -wp-rte -wp-proof coq swap.c
[kernel] Parsing FRAMAC_SHARE/libc/__fc_builtin_for_normalization.i (no preprocessing)
[kernel] Parsing swap.c (with preprocessing)
[rte] annotating function swap
[wp] 9 goals scheduled
[wp] [Coq] Goal typed_swap_assert_rte_mem_access : Unknown
[wp] [Coq] Goal typed_swap_post_A : Unknown
[wp] [Coq] Goal typed_swap_assert_rte_mem_access_3 : Unknown
[wp] Proved goals:    6 / 9
     Qed:             6  (0.13ms-0.71ms-2ms)
     Coq:             0  (unknown: 3)

因此Coq会向Unknown返回所有剩余的证明义务。

这是正常的吗?为什么?

我是否应该手动为他们手动证明?

任何人都可以使用coq运行此示例吗?

版本; Frama-c Magnesium-20151002,Coq 8.4.6,OCaml 4.02.3在MacOS 10.11.4上运行

1 个答案:

答案 0 :(得分:4)

确实,Coq是一个交互式定理证明者。这意味着你必须自己编写证明(可能会尝试一些默认策略,但通常你最终会手动完成)。您可以使用coqide代替coq来查看目标:frama-c -wp -wp-rte -wp-proof coqide swap.c