src/HOLCF/IOA/meta_theory/RefCorrectness.thy
changeset 27208 5fe899199f85
parent 26359 6d437bde2f1d
child 35174 e15040ae75d7
equal deleted inserted replaced
27207:548e2d3105b9 27208:5fe899199f85
   179 lemma lemma_1:
   179 lemma lemma_1:
   180   "[|is_ref_map f C A; ext C = ext A|] ==>
   180   "[|is_ref_map f C A; ext C = ext A|] ==>
   181          !s. reachable C s & is_exec_frag C (s,xs) -->
   181          !s. reachable C s & is_exec_frag C (s,xs) -->
   182              mk_trace C$xs = mk_trace A$(snd (corresp_ex A f (s,xs)))"
   182              mk_trace C$xs = mk_trace A$(snd (corresp_ex A f (s,xs)))"
   183 apply (unfold corresp_ex_def)
   183 apply (unfold corresp_ex_def)
   184 apply (tactic {* pair_induct_tac "xs" [thm "is_exec_frag_def"] 1 *})
   184 apply (tactic {* pair_induct_tac @{context} "xs" [@{thm is_exec_frag_def}] 1 *})
   185 (* cons case *)
   185 (* cons case *)
   186 apply (auto simp add: mk_traceConc)
   186 apply (auto simp add: mk_traceConc)
   187 apply (frule reachable.reachable_n)
   187 apply (frule reachable.reachable_n)
   188 apply assumption
   188 apply assumption
   189 apply (erule_tac x = "y" in allE)
   189 apply (erule_tac x = "y" in allE)
   208  (!s .is_exec_frag A (s,xs) & is_exec_frag A (t,ys) &
   208  (!s .is_exec_frag A (s,xs) & is_exec_frag A (t,ys) &
   209       t = laststate (s,xs)
   209       t = laststate (s,xs)
   210   --> is_exec_frag A (s,xs @@ ys))"
   210   --> is_exec_frag A (s,xs @@ ys))"
   211 
   211 
   212 apply (rule impI)
   212 apply (rule impI)
   213 apply (tactic {* Seq_Finite_induct_tac 1 *})
   213 apply (tactic {* Seq_Finite_induct_tac @{context} 1 *})
   214 (* main case *)
   214 (* main case *)
   215 apply (auto simp add: split_paired_all)
   215 apply (auto simp add: split_paired_all)
   216 done
   216 done
   217 
   217 
   218 
   218 
   228   --> is_exec_frag A (corresp_ex A f (s,xs))"
   228   --> is_exec_frag A (corresp_ex A f (s,xs))"
   229 
   229 
   230 apply (unfold corresp_ex_def)
   230 apply (unfold corresp_ex_def)
   231 
   231 
   232 apply simp
   232 apply simp
   233 apply (tactic {* pair_induct_tac "xs" [thm "is_exec_frag_def"] 1 *})
   233 apply (tactic {* pair_induct_tac @{context} "xs" [@{thm is_exec_frag_def}] 1 *})
   234 (* main case *)
   234 (* main case *)
   235 apply auto
   235 apply auto
   236 apply (rule_tac t = "f y" in lemma_2_1)
   236 apply (rule_tac t = "f y" in lemma_2_1)
   237 
   237 
   238 (* Finite *)
   238 (* Finite *)
   271 
   271 
   272   (* give execution of abstract automata *)
   272   (* give execution of abstract automata *)
   273   apply (rule_tac x = "corresp_ex A f ex" in bexI)
   273   apply (rule_tac x = "corresp_ex A f ex" in bexI)
   274 
   274 
   275   (* Traces coincide, Lemma 1 *)
   275   (* Traces coincide, Lemma 1 *)
   276   apply (tactic {* pair_tac "ex" 1 *})
   276   apply (tactic {* pair_tac @{context} "ex" 1 *})
   277   apply (erule lemma_1 [THEN spec, THEN mp])
   277   apply (erule lemma_1 [THEN spec, THEN mp])
   278   apply assumption+
   278   apply assumption+
   279   apply (simp add: executions_def reachable.reachable_0)
   279   apply (simp add: executions_def reachable.reachable_0)
   280 
   280 
   281   (* corresp_ex is execution, Lemma 2 *)
   281   (* corresp_ex is execution, Lemma 2 *)
   282   apply (tactic {* pair_tac "ex" 1 *})
   282   apply (tactic {* pair_tac @{context} "ex" 1 *})
   283   apply (simp add: executions_def)
   283   apply (simp add: executions_def)
   284   (* start state *)
   284   (* start state *)
   285   apply (rule conjI)
   285   apply (rule conjI)
   286   apply (simp add: is_ref_map_def corresp_ex_def)
   286   apply (simp add: is_ref_map_def corresp_ex_def)
   287   (* is-execution-fragment *)
   287   (* is-execution-fragment *)
   322 apply auto
   322 apply auto
   323 apply (rule_tac x = "corresp_ex A f ex" in exI)
   323 apply (rule_tac x = "corresp_ex A f ex" in exI)
   324 apply auto
   324 apply auto
   325 
   325 
   326   (* Traces coincide, Lemma 1 *)
   326   (* Traces coincide, Lemma 1 *)
   327   apply (tactic {* pair_tac "ex" 1 *})
   327   apply (tactic {* pair_tac @{context} "ex" 1 *})
   328   apply (erule lemma_1 [THEN spec, THEN mp])
   328   apply (erule lemma_1 [THEN spec, THEN mp])
   329   apply assumption+
   329   apply assumption+
   330   apply (simp add: executions_def reachable.reachable_0)
   330   apply (simp add: executions_def reachable.reachable_0)
   331 
   331 
   332   (* corresp_ex is execution, Lemma 2 *)
   332   (* corresp_ex is execution, Lemma 2 *)
   333   apply (tactic {* pair_tac "ex" 1 *})
   333   apply (tactic {* pair_tac @{context} "ex" 1 *})
   334   apply (simp add: executions_def)
   334   apply (simp add: executions_def)
   335   (* start state *)
   335   (* start state *)
   336   apply (rule conjI)
   336   apply (rule conjI)
   337   apply (simp add: is_ref_map_def corresp_ex_def)
   337   apply (simp add: is_ref_map_def corresp_ex_def)
   338   (* is-execution-fragment *)
   338   (* is-execution-fragment *)
   349 apply auto
   349 apply auto
   350 apply (rule_tac x = "corresp_ex A f ex" in exI)
   350 apply (rule_tac x = "corresp_ex A f ex" in exI)
   351 apply auto
   351 apply auto
   352 
   352 
   353   (* Traces coincide, Lemma 1 *)
   353   (* Traces coincide, Lemma 1 *)
   354   apply (tactic {* pair_tac "ex" 1 *})
   354   apply (tactic {* pair_tac @{context} "ex" 1 *})
   355   apply (erule lemma_1 [THEN spec, THEN mp])
   355   apply (erule lemma_1 [THEN spec, THEN mp])
   356   apply (simp (no_asm) add: externals_def)
   356   apply (simp (no_asm) add: externals_def)
   357   apply (auto)[1]
   357   apply (auto)[1]
   358   apply (simp add: executions_def reachable.reachable_0)
   358   apply (simp add: executions_def reachable.reachable_0)
   359 
   359 
   360   (* corresp_ex is execution, Lemma 2 *)
   360   (* corresp_ex is execution, Lemma 2 *)
   361   apply (tactic {* pair_tac "ex" 1 *})
   361   apply (tactic {* pair_tac @{context} "ex" 1 *})
   362   apply (simp add: executions_def)
   362   apply (simp add: executions_def)
   363   (* start state *)
   363   (* start state *)
   364   apply (rule conjI)
   364   apply (rule conjI)
   365   apply (simp add: is_ref_map_def corresp_ex_def)
   365   apply (simp add: is_ref_map_def corresp_ex_def)
   366   (* is-execution-fragment *)
   366   (* is-execution-fragment *)
   367   apply (erule lemma_2 [THEN spec, THEN mp])
   367   apply (erule lemma_2 [THEN spec, THEN mp])
   368   apply (simp add: reachable.reachable_0)
   368   apply (simp add: reachable.reachable_0)
   369 
   369 
   370 done
   370 done
   371 
   371 
   372 
       
   373 end
   372 end