src/HOL/Bali/Evaln.thy
changeset 62390 842917225d56
parent 62042 6c6ccf573479
child 67443 3abf6a722518
equal deleted inserted replaced
62380:29800666e526 62390:842917225d56
   191                  G\<turnstile>Norm s0 \<midarrow>Init C\<midarrow>n\<rightarrow> s3"
   191                  G\<turnstile>Norm s0 \<midarrow>Init C\<midarrow>n\<rightarrow> s3"
   192 monos
   192 monos
   193   if_bool_eq_conj
   193   if_bool_eq_conj
   194 
   194 
   195 
   195 
   196 declare split_if     [split del] split_if_asm     [split del]
   196 declare if_split     [split del] if_split_asm     [split del]
   197         option.split [split del] option.split_asm [split del]
   197         option.split [split del] option.split_asm [split del]
   198         not_None_eq [simp del] 
   198         not_None_eq [simp del] 
   199         split_paired_All [simp del] split_paired_Ex [simp del]
   199         split_paired_All [simp del] split_paired_Ex [simp del]
   200 setup \<open>map_theory_simpset (fn ctxt => ctxt delloop "split_all_tac")\<close>
   200 setup \<open>map_theory_simpset (fn ctxt => ctxt delloop "split_all_tac")\<close>
   201 
   201 
   232         "G\<turnstile>Norm s \<midarrow>In2  ({accC,statDeclC,stat}e..fn) \<succ>\<midarrow>n\<rightarrow> (v, s')"
   232         "G\<turnstile>Norm s \<midarrow>In2  ({accC,statDeclC,stat}e..fn) \<succ>\<midarrow>n\<rightarrow> (v, s')"
   233         "G\<turnstile>Norm s \<midarrow>In2  (e1.[e2])                 \<succ>\<midarrow>n\<rightarrow> (v, s')"
   233         "G\<turnstile>Norm s \<midarrow>In2  (e1.[e2])                 \<succ>\<midarrow>n\<rightarrow> (v, s')"
   234         "G\<turnstile>Norm s \<midarrow>In1l ({accC,statT,mode}e\<cdot>mn({pT}p)) \<succ>\<midarrow>n\<rightarrow> (v, s')"
   234         "G\<turnstile>Norm s \<midarrow>In1l ({accC,statT,mode}e\<cdot>mn({pT}p)) \<succ>\<midarrow>n\<rightarrow> (v, s')"
   235         "G\<turnstile>Norm s \<midarrow>In1r (Init C)                  \<succ>\<midarrow>n\<rightarrow> (x, s')"
   235         "G\<turnstile>Norm s \<midarrow>In1r (Init C)                  \<succ>\<midarrow>n\<rightarrow> (x, s')"
   236 
   236 
   237 declare split_if     [split] split_if_asm     [split] 
   237 declare if_split     [split] if_split_asm     [split] 
   238         option.split [split] option.split_asm [split]
   238         option.split [split] option.split_asm [split]
   239         not_None_eq [simp] 
   239         not_None_eq [simp] 
   240         split_paired_All [simp] split_paired_Ex [simp]
   240         split_paired_All [simp] split_paired_Ex [simp]
   241 declaration \<open>K (Simplifier.map_ss (fn ss => ss addloop ("split_all_tac", split_all_tac)))\<close>
   241 declaration \<open>K (Simplifier.map_ss (fn ss => ss addloop ("split_all_tac", split_all_tac)))\<close>
   242 
   242 
   451 apply (tactic \<open>ALLGOALS (EVERY' [strip_tac @{context},
   451 apply (tactic \<open>ALLGOALS (EVERY' [strip_tac @{context},
   452   TRY o eresolve_tac @{context} @{thms Suc_le_D_lemma},
   452   TRY o eresolve_tac @{context} @{thms Suc_le_D_lemma},
   453   REPEAT o smp_tac @{context} 1, 
   453   REPEAT o smp_tac @{context} 1, 
   454   resolve_tac @{context} @{thms evaln.intros} THEN_ALL_NEW TRY o assume_tac @{context}])\<close>)
   454   resolve_tac @{context} @{thms evaln.intros} THEN_ALL_NEW TRY o assume_tac @{context}])\<close>)
   455 (* 3 subgoals *)
   455 (* 3 subgoals *)
   456 apply (auto split del: split_if)
   456 apply (auto split del: if_split)
   457 done
   457 done
   458 
   458 
   459 lemmas evaln_nonstrict_Suc = evaln_nonstrict [OF _ le_refl [THEN le_SucI]]
   459 lemmas evaln_nonstrict_Suc = evaln_nonstrict [OF _ le_refl [THEN le_SucI]]
   460 
   460 
   461 lemma evaln_max2: "\<lbrakk>G\<turnstile>s1 \<midarrow>t1\<succ>\<midarrow>n1\<rightarrow> (w1, s1'); G\<turnstile>s2 \<midarrow>t2\<succ>\<midarrow>n2\<rightarrow> (w2, s2')\<rbrakk> \<Longrightarrow> 
   461 lemma evaln_max2: "\<lbrakk>G\<turnstile>s1 \<midarrow>t1\<succ>\<midarrow>n1\<rightarrow> (w1, s1'); G\<turnstile>s2 \<midarrow>t2\<succ>\<midarrow>n2\<rightarrow> (w2, s2')\<rbrakk> \<Longrightarrow>