-- Require Import List. -- Require Import String. -- Require Import ZArith. -- Open Scope list_scope. -- Open Scope string_scope. -- Open Scope Z_scope. -- Require Import ImpSyntax. -- Require Import ImpCommon. -- Require Import ImpEval. -- Inductive step : -- store -> heap -> stmt -> -- store -> heap -> stmt -> Prop := -- | step_set : -- forall s h x e v, -- eval_e s h e v -> -- step -- s h (Sset x e) -- (update s x v) h Snop -- (** -- TODO -- Please write the rules for Salloc and Swrite. -- You may want to use helpers from ImpCommon.v. -- *) -- | step_ifelse_t : -- forall s h e p1 p2, -- eval_e s h e (Vbool true) -> -- step -- s h (Sifelse e p1 p2) -- s h p1 -- | step_ifelse_f : -- forall s h e p1 p2, -- eval_e s h e (Vbool false) -> -- step -- s h (Sifelse e p1 p2) -- s h p2 -- | step_while_t : -- forall s h e p, -- eval_e s h e (Vbool true) -> -- step -- s h (Swhile e p) -- s h (Sseq p (Swhile e p)) -- | step_while_f : -- forall s h e p, -- eval_e s h e (Vbool false) -> -- step -- s h (Swhile e p) -- s h Snop -- | step_seq_nop : -- forall s h p2, -- step -- s h (Sseq Snop p2) -- s h p2 -- | step_seq : -- forall s h p1 p2 s' h' p1', -- step -- s h p1 -- s' h' p1' -> -- step -- s h (Sseq p1 p2) -- s' h' (Sseq p1' p2). -- Inductive step_star : -- store -> heap -> stmt -> -- store -> heap -> stmt -> Prop := -- | step_star_refl : -- forall s h p, -- step_star -- s h p -- s h p -- | step_star_l : -- forall s1 h1 p1 s2 h2 p2 s3 h3 p3, -- step -- s1 h1 p1 -- s2 h2 p2 -> -- step_star -- s2 h2 p2 -- s3 h3 p3 -> -- step_star -- s1 h1 p1 -- s3 h3 p3.