fact: Fixpoint ceval_step2 (st : state) (c : com) (i : nat) : state := match i with | O => empty_st | S i' => match c with | <{ skip }> => st | <{ l := a1 }> => (l !-> aeval st a1 ; st) | <{ c1 ; c2 }> => let st' := ceval_step2 st c1 i' in ceval_step2 st' c2 i' | <{ if b then c1 else c2 end }> => if (beval st b) then ceval_step2 st c1 i' else ceval_step2 st c2 i' | <{ while b1 do c1 end }> => if (beval st b1) then let st' := ceval_step2 st c1 i' in ceval_step2 st' c i' else st end end.
imports: Coq(Lia) Coq(Arith.Arith) Coq(Arith.PeanoNat) Coq(Arith.EqNat) LF(Imp Maps)