证明伊莎贝尔的引理

时间:2014-11-17 18:03:07

标签: proof isabelle

我有一个功能

 fun exec :: "com ⇒ state ⇒ nat ⇒ state option" where
   "exec _ s 0 = None" 
 | "exec SKIP s (Suc f) = Some s" 
 | "exec (x::=v) s (Suc f) = Some (s(x:=aval v s))" 
 | "exec (c1;;c2) s (Suc f) = (
     case (exec c1 s f) of None ⇒ None | Some s' ⇒ exec c2 s' f)" 
 | "exec (IF b THEN c1 ELSE c2) s (Suc f) = 
     (if bval b s then exec c1 s f else exec c2 s f)" 
 | "exec (WHILE b DO c) s (Suc f) = (
     if bval b s then 
       (case (exec c s f) of 
         None ⇒ None | 
          Some s' ⇒ exec (WHILE b DO c) s' f) 
     else Some s)"

我需要证明

lemma exec_imp_bigstep: "exec c s f = Some s' ⟹ (c,s) ⇒ s'"

成立。我怎样才能做到这一点?我尝试过归纳,autoblastsledgehammer。但似乎需要采用不同的方法。


引理说存在c和s的值,因此存在一个s',它是函数f的结果,其值为c和s。我想知道你为什么在定义中需要c和s,为什么你不能只写

引理exec_imp_bigstep:“exec c f = Somes'⟹c⇒s'”

至于证据,我的想法是显示

引理exec_imp_bigstep:“exec c s f = Some s'⟹(c,s)⇒s'”如果

引理exec_imp_bigstep:“exec c f = Somes'⟹c⇒s'” 和 引理exec_imp_bigstep:“exec s f = Some s's'ss⇒”。

0 个答案:

没有答案