スワップの例のフォームWPプラグインのチュートリアルです。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のは、それに残った3つのすべての証明義務のためUnknown
を返します。
正常ですか?なぜ?
手動で証明書を手動で証明するはずですか?
誰でもこの例をcoqで正常に実行できますか?
バージョン; Frama-cマグネシウム-20151002、Coq8.4.6、MacOS1011.4で動作するOCaml4.02.3
alt-ergoでうまくいきます –