我正在學習使用Verified Software Toolchain(VST)。我被困在證明一個簡單的「if-then-else」塊。已驗證的軟件工具鏈:if-then-else proof
這裏是.c文件:
int iftest(int a){
int r=0;
if(a==2){
r=0;
else{
r=0;
}
return r;
}
我寫一個關於iftest()
如下規格:
Definition if_spec :=`
DECLARE _iftest`
WITH a0:int
PRE [_a OF tint]
PROP()
LOCAL (`(eq (Vint a0)) (eval_id _a))
SEP()
POST [tint]
PROP()
LOCAL ((`(eq (Vint (Int.repr 0))) retval))
SEP().`
的證明步驟是:
Lemma body_iftest : semax_body Vprog Gtot f_iftest if_spec.Proof. start_function. name a _a. name r _r. forward. (*r=0*) simplify_typed_comparison. forward. (*if(E)*). go_lower. subst. normalize.
它產生一個假設:Post := EX x : ?214, ?215 x : environ -> mpred
並且「then」子句不能通過「go_lower」和「normalize」繼續。
我從來沒有使用過VST(實際上這是我第一次聽說它)。您可能會在自己的郵件列表或Coq郵件列表中獲得更多反饋:https://sympa.inria.fr/sympa/arc/coq-club。 – Vinz
@Vinz VST現在還沒有郵件列表,但他們最近爲SO – Necto