theory Def_Init_Small imports Star Def_Init_Exp Def_Init begin
subsection"Initialization-Sensitive Small Step Semantics"
inductive
small_step :: "(com \ state) \ (com \ state) \ bool" (infix‹→› 55) where
Assign: "aval a s = Some i \ (x ::= a, s) \ (SKIP, s(x := Some i))" |
IfTrue: "bval b s = Some True \ (IF b THEN c\<^sub>1 ELSE c\<^sub>2,s) \ (c\<^sub>1,s)" |
IfFalse: "bval b s = Some False \ (IF b THEN c\<^sub>1 ELSE c\<^sub>2,s) \ (c\<^sub>2,s)" |
While: "(WHILE b DO c,s) \ (IF b THEN c;; WHILE b DO c ELSE SKIP,s)"
abbreviation small_steps :: "com * state \ com * state \ bool" (infix‹→*› 55) where"x \* y == star small_step x y"
subsection"Soundness wrt Small Steps"
theorem progress: "D (dom s) c A' \ c \ SKIP \ \cs'. (c,s) \ cs'" proof (induction c arbitrary: s A') case Assign thus ?caseby auto (metis aval_Some small_step.Assign) next case (If b c1 c2) thenobtain bv where"bval b s = Some bv"by (auto dest!:bval_Some) thenshow ?case by(cases bv)(auto intro: small_step.IfTrue small_step.IfFalse) qed (fastforce intro: small_step.intros)+
lemma D_mono: "D A c M \ A \ A' \ \M'. D A' c M' & M <= M'" proof (induction c arbitrary: A A' M) case Seq thus ?caseby auto (metis D.intros(3)) next case (If b c1 c2) thenobtain M1 M2 where"vars b \ A""D A c1 M1""D A c2 M2""M = M1 \ M2" by auto withIf.IH ‹A ⊆ A'\ obtain M1' M2' where"D A' c1 M1'""D A' c2 M2'"and"M1 \ M1'""M2 \ M2'"by metis hence"D A' (IF b THEN c1 ELSE c2) (M1' \ M2')"and"M \ M1' \ M2'" using‹vars b ⊆ A›‹A ⊆ A'\ \M = M1 \ M2\ by(fastforce intro: D.intros)+ thus ?caseby metis next case While thus ?caseby auto (metis D.intros(5) subset_trans) qed (auto intro: D.intros)
theorem D_preservation: "(c,s) \ (c',s') \ D (dom s) c A \ \A'. D (dom s') c' A' & A <= A'" proof (induction arbitrary: A rule: small_step_induct) case (While b c s) thenobtain A' where A': "vars b \ dom s""A = dom s""D (dom s) c A'"by blast thenobtain A''where"D A' c A''"by (metis D_incr D_mono) with A' have "D (dom s) (IF b THEN c;; WHILE b DO c ELSE SKIP) (dom s)" by (metis D.If[OF ‹vars b ⊆ dom s› D.Seq[OF ‹D (dom s) c A'\ D.While[OF _ \D A' c A''›]] D.Skip] D_incr Int_absorb1 subset_trans) thus ?caseby (metis D_incr ‹A = dom s›) next case Seq2 thus ?caseby auto (metis D_mono D.intros(3)) qed (auto intro: D.intros)
theorem D_sound: "(c,s) \* (c',s') \ D (dom s) c A' ==> (∃cs''. (c',s') → cs'') ∨ c' = SKIP" apply(induction arbitrary: A' rule:star_induct) apply (metis progress) by (metis D_preservation)
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.