Tests/abacus.thy
changeset 224 68324a8566c1
parent 223 db6ba2232945
child 230 49dcc0b9b0b3
equal deleted inserted replaced
223:db6ba2232945 224:68324a8566c1
     1 header {* 
     1 header {* 
     2  {\em abacus} a kind of register machine
     2  {\em abacus} a kind of register machine
     3 *}
     3 *}
     4 
     4 
     5 theory abacus
     5 theory abacus
     6 imports Main "~~/src/HOL/Algebra/IntRing" 
     6 imports Main
     7 begin
     7 begin
     8 
     8 
     9 text {*
     9 text {*
    10   {\em Abacus} instructions:
    10   {\em Abacus} instructions:
    11 *}
    11 *}
   157 *)
   157 *)
   158 
   158 
   159 lemma frame: "{p} c {q} \<Longrightarrow> \<forall> r. {p * r} c {q * r}"
   159 lemma frame: "{p} c {q} \<Longrightarrow> \<forall> r. {p * r} c {q * r}"
   160 apply (unfold Hoare_abc_def, clarify)
   160 apply (unfold Hoare_abc_def, clarify)
   161 apply (erule_tac x = "(a, aa, ab, b)" in allE)
   161 apply (erule_tac x = "(a, aa, ab, b)" in allE)
   162 apply (erule_tac x = "r*ra" in allE) 
   162 apply (erule_tac x = "r * ra" in allE) 
   163 apply(simp add: stimes_ac)
   163 apply(simp add: stimes_ac)
   164 done
   164 done
   165 
   165 
   166 lemma code_extension: "\<lbrakk>{p} c {q}\<rbrakk> \<Longrightarrow> (\<forall> e. {p} c * e {q})"
   166 lemma code_extension: "\<lbrakk>{p} c {q}\<rbrakk> \<Longrightarrow> (\<forall> e. {p} c * e {q})"
   167   apply (unfold Hoare_abc_def, clarify)
   167   apply (unfold Hoare_abc_def, clarify)