我有一个功能
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'"
成立。我怎样才能做到这一点?我尝试过归纳,auto
,blast
,sledgehammer
。但似乎需要采用不同的方法。
引理说存在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⇒”。