6 Weak possibilities mapping (abstraction) |
6 Weak possibilities mapping (abstraction) |
7 *) |
7 *) |
8 |
8 |
9 open Solve; |
9 open Solve; |
10 |
10 |
11 val SS = SS addsimps [mk_trace_thm,trans_in_actions]; |
11 Addsimps [mk_trace_thm,trans_in_actions]; |
12 |
12 |
13 goalw Solve.thy [is_weak_pmap_def,traces_def] |
13 goalw Solve.thy [is_weak_pmap_def,traces_def] |
14 "!!f. [| IOA(C); IOA(A); externals(asig_of(C)) = externals(asig_of(A)); \ |
14 "!!f. [| IOA(C); IOA(A); externals(asig_of(C)) = externals(asig_of(A)); \ |
15 \ is_weak_pmap f C A |] ==> traces(C) <= traces(A)"; |
15 \ is_weak_pmap f C A |] ==> traces(C) <= traces(A)"; |
16 |
16 |
17 by (simp_tac(SS addsimps [has_trace_def])1); |
17 by (simp_tac(!simpset addsimps [has_trace_def])1); |
18 by (safe_tac set_cs); |
18 by (safe_tac set_cs); |
19 |
19 |
20 (* choose same trace, therefore same NF *) |
20 (* choose same trace, therefore same NF *) |
21 by (res_inst_tac[("x","mk_trace C (fst ex)")] exI 1); |
21 by (res_inst_tac[("x","mk_trace C (fst ex)")] exI 1); |
22 by (asm_full_simp_tac set_ss 1); |
22 by (Asm_full_simp_tac 1); |
23 |
23 |
24 (* give execution of abstract automata *) |
24 (* give execution of abstract automata *) |
25 by (res_inst_tac[("x","(mk_trace A (fst ex),%i.f(snd ex i))")] bexI 1); |
25 by (res_inst_tac[("x","(mk_trace A (fst ex),%i.f(snd ex i))")] bexI 1); |
26 |
26 |
27 (* Traces coincide *) |
27 (* Traces coincide *) |
28 by (asm_simp_tac (SS addsimps [mk_trace_def,filter_oseq_idemp])1); |
28 by (asm_simp_tac (!simpset addsimps [mk_trace_def,filter_oseq_idemp])1); |
29 |
29 |
30 (* Use lemma *) |
30 (* Use lemma *) |
31 by (forward_tac [states_of_exec_reachable] 1); |
31 by (forward_tac [states_of_exec_reachable] 1); |
32 |
32 |
33 (* Now show that it's an execution *) |
33 (* Now show that it's an execution *) |
34 by (asm_full_simp_tac(SS addsimps [executions_def]) 1); |
34 by (asm_full_simp_tac(!simpset addsimps [executions_def]) 1); |
35 by (safe_tac set_cs); |
35 by (safe_tac set_cs); |
36 |
36 |
37 (* Start states map to start states *) |
37 (* Start states map to start states *) |
38 by (dtac bspec 1); |
38 by (dtac bspec 1); |
39 by (atac 1); |
39 by (atac 1); |
40 |
40 |
41 (* Show that it's an execution fragment *) |
41 (* Show that it's an execution fragment *) |
42 by (asm_full_simp_tac (SS addsimps [is_execution_fragment_def])1); |
42 by (asm_full_simp_tac (!simpset addsimps [is_execution_fragment_def])1); |
43 by (safe_tac HOL_cs); |
43 by (safe_tac HOL_cs); |
44 |
44 |
45 by (eres_inst_tac [("x","snd ex n")] allE 1); |
45 by (eres_inst_tac [("x","snd ex n")] allE 1); |
46 by (eres_inst_tac [("x","snd ex (Suc n)")] allE 1); |
46 by (eres_inst_tac [("x","snd ex (Suc n)")] allE 1); |
47 by (eres_inst_tac [("x","a")] allE 1); |
47 by (eres_inst_tac [("x","a")] allE 1); |
48 by (asm_full_simp_tac SS 1); |
48 by (Asm_full_simp_tac 1); |
49 qed "trace_inclusion"; |
49 qed "trace_inclusion"; |
50 |
50 |
51 (* Lemmata *) |
51 (* Lemmata *) |
52 |
52 |
53 val prems = goal HOL.thy "(P ==> Q-->R) ==> P&Q --> R"; |
53 val prems = goal HOL.thy "(P ==> Q-->R) ==> P&Q --> R"; |
58 (* fist_order_tautology of externals_of_par *) |
58 (* fist_order_tautology of externals_of_par *) |
59 goal IOA.thy "a:externals(asig_of(A1||A2)) = \ |
59 goal IOA.thy "a:externals(asig_of(A1||A2)) = \ |
60 \ (a:externals(asig_of(A1)) & a:externals(asig_of(A2)) | \ |
60 \ (a:externals(asig_of(A1)) & a:externals(asig_of(A2)) | \ |
61 \ a:externals(asig_of(A1)) & a~:externals(asig_of(A2)) | \ |
61 \ a:externals(asig_of(A1)) & a~:externals(asig_of(A2)) | \ |
62 \ a~:externals(asig_of(A1)) & a:externals(asig_of(A2)))"; |
62 \ a~:externals(asig_of(A1)) & a:externals(asig_of(A2)))"; |
63 by (asm_full_simp_tac (SS addsimps [externals_def,asig_of_par,asig_comp_def,asig_inputs_def,asig_outputs_def]) 1); |
63 by (asm_full_simp_tac (!simpset addsimps [externals_def,asig_of_par,asig_comp_def,asig_inputs_def,asig_outputs_def]) 1); |
64 by (fast_tac set_cs 1); |
64 by (fast_tac set_cs 1); |
65 val externals_of_par_extra = result(); |
65 val externals_of_par_extra = result(); |
66 |
66 |
67 goal Solve.thy "!!s.[| reachable (C1||C2) s |] ==> reachable C1 (fst s)"; |
67 goal Solve.thy "!!s.[| reachable (C1||C2) s |] ==> reachable C1 (fst s)"; |
68 by (asm_full_simp_tac (SS addsimps [reachable_def]) 1); |
68 by (asm_full_simp_tac (!simpset addsimps [reachable_def]) 1); |
69 by (etac bexE 1); |
69 by (etac bexE 1); |
70 by (res_inst_tac [("x", |
70 by (res_inst_tac [("x", |
71 "(filter_oseq (%a.a:actions(asig_of(C1))) \ |
71 "(filter_oseq (%a.a:actions(asig_of(C1))) \ |
72 \ (fst ex), \ |
72 \ (fst ex), \ |
73 \ %i.fst (snd ex i))")] bexI 1); |
73 \ %i.fst (snd ex i))")] bexI 1); |
74 (* fst(s) is in projected execution *) |
74 (* fst(s) is in projected execution *) |
75 by (simp_tac SS 1); |
75 by (Simp_tac 1); |
76 by (fast_tac HOL_cs 1); |
76 by (fast_tac HOL_cs 1); |
77 (* projected execution is indeed an execution *) |
77 (* projected execution is indeed an execution *) |
78 by (asm_full_simp_tac (SS addsimps [executions_def,is_execution_fragment_def, |
78 by (asm_full_simp_tac (!simpset addsimps [executions_def,is_execution_fragment_def, |
79 par_def, starts_of_def,trans_of_def]) 1); |
79 par_def, starts_of_def,trans_of_def]) 1); |
80 by (simp_tac (SS addsimps [filter_oseq_def]) 1); |
80 by (simp_tac (!simpset addsimps [filter_oseq_def]) 1); |
81 by (REPEAT(rtac allI 1)); |
81 by (REPEAT(rtac allI 1)); |
82 by (cut_inst_tac [("x","fst ex n")] opt_cases 1); |
82 by (cut_inst_tac [("x","fst ex n")] opt_cases 1); |
83 by (etac disjE 1); |
83 by (etac disjE 1); |
84 (* case 1: action sequence of || had already a None *) |
84 (* case 1: action sequence of || had already a None *) |
85 by (asm_full_simp_tac SS 1); |
85 by (Asm_full_simp_tac 1); |
86 by (REPEAT(etac exE 1)); |
86 by (REPEAT(etac exE 1)); |
87 by (case_tac "y:actions(asig_of(C1))" 1); |
87 by (case_tac "y:actions(asig_of(C1))" 1); |
88 (* case 2: action sequence of || had Some(a) and |
88 (* case 2: action sequence of || had Some(a) and |
89 filtered sequence also *) |
89 filtered sequence also *) |
90 by (asm_full_simp_tac SS 1); |
90 by (Asm_full_simp_tac 1); |
91 by (rtac impI 1); |
91 by (rtac impI 1); |
92 by (REPEAT(hyp_subst_tac 1)); |
92 by (REPEAT(hyp_subst_tac 1)); |
93 by (asm_full_simp_tac SS 1); |
93 by (Asm_full_simp_tac 1); |
94 (* case 3: action sequence pf || had Some(a) but |
94 (* case 3: action sequence pf || had Some(a) but |
95 filtered sequence has None *) |
95 filtered sequence has None *) |
96 by (asm_full_simp_tac SS 1); |
96 by (Asm_full_simp_tac 1); |
97 qed"comp1_reachable"; |
97 qed"comp1_reachable"; |
98 |
98 |
99 |
99 |
100 (* Exact copy of proof of comp1_reachable for the second |
100 (* Exact copy of proof of comp1_reachable for the second |
101 component of a parallel composition. *) |
101 component of a parallel composition. *) |
102 goal Solve.thy "!!s.[| reachable (C1||C2) s|] ==> reachable C2 (snd s)"; |
102 goal Solve.thy "!!s.[| reachable (C1||C2) s|] ==> reachable C2 (snd s)"; |
103 by (asm_full_simp_tac (SS addsimps [reachable_def]) 1); |
103 by (asm_full_simp_tac (!simpset addsimps [reachable_def]) 1); |
104 by (etac bexE 1); |
104 by (etac bexE 1); |
105 by (res_inst_tac [("x", |
105 by (res_inst_tac [("x", |
106 "(filter_oseq (%a.a:actions(asig_of(C2)))\ |
106 "(filter_oseq (%a.a:actions(asig_of(C2)))\ |
107 \ (fst ex), \ |
107 \ (fst ex), \ |
108 \ %i.snd (snd ex i))")] bexI 1); |
108 \ %i.snd (snd ex i))")] bexI 1); |
109 (* fst(s) is in projected execution *) |
109 (* fst(s) is in projected execution *) |
110 by (simp_tac list_ss 1); |
110 by (Simp_tac 1); |
111 by (fast_tac HOL_cs 1); |
111 by (fast_tac HOL_cs 1); |
112 (* projected execution is indeed an execution *) |
112 (* projected execution is indeed an execution *) |
113 by (asm_full_simp_tac (SS addsimps [executions_def,is_execution_fragment_def, |
113 by (asm_full_simp_tac (!simpset addsimps [executions_def,is_execution_fragment_def, |
114 par_def, starts_of_def,trans_of_def]) 1); |
114 par_def, starts_of_def,trans_of_def]) 1); |
115 by (simp_tac (SS addsimps [filter_oseq_def]) 1); |
115 by (simp_tac (!simpset addsimps [filter_oseq_def]) 1); |
116 by (REPEAT(rtac allI 1)); |
116 by (REPEAT(rtac allI 1)); |
117 by (cut_inst_tac [("x","fst ex n")] opt_cases 1); |
117 by (cut_inst_tac [("x","fst ex n")] opt_cases 1); |
118 by (etac disjE 1); |
118 by (etac disjE 1); |
119 by (asm_full_simp_tac SS 1); |
119 by (Asm_full_simp_tac 1); |
120 by (REPEAT(etac exE 1)); |
120 by (REPEAT(etac exE 1)); |
121 by (case_tac "y:actions(asig_of(C2))" 1); |
121 by (case_tac "y:actions(asig_of(C2))" 1); |
122 by (asm_full_simp_tac SS 1); |
122 by (Asm_full_simp_tac 1); |
123 by (rtac impI 1); |
123 by (rtac impI 1); |
124 by (REPEAT(hyp_subst_tac 1)); |
124 by (REPEAT(hyp_subst_tac 1)); |
125 by (asm_full_simp_tac SS 1); |
125 by (Asm_full_simp_tac 1); |
126 by (asm_full_simp_tac SS 1); |
126 by (Asm_full_simp_tac 1); |
127 qed"comp2_reachable"; |
127 qed"comp2_reachable"; |
128 |
128 |
129 |
129 |
130 (* Composition of possibility-mappings *) |
130 (* Composition of possibility-mappings *) |
131 |
131 |
135 \ externals(asig_of(A2))=externals(asig_of(C2)) & \ |
135 \ externals(asig_of(A2))=externals(asig_of(C2)) & \ |
136 \ compat_ioas C1 C2 & compat_ioas A1 A2 |] \ |
136 \ compat_ioas C1 C2 & compat_ioas A1 A2 |] \ |
137 \ ==> is_weak_pmap (%p.(f(fst(p)),g(snd(p)))) (C1||C2) (A1||A2)"; |
137 \ ==> is_weak_pmap (%p.(f(fst(p)),g(snd(p)))) (C1||C2) (A1||A2)"; |
138 by (rtac conjI 1); |
138 by (rtac conjI 1); |
139 (* start_states *) |
139 (* start_states *) |
140 by (asm_full_simp_tac (SS addsimps [par_def, starts_of_def]) 1); |
140 by (asm_full_simp_tac (!simpset addsimps [par_def, starts_of_def]) 1); |
141 by (fast_tac set_cs 1); |
141 by (fast_tac set_cs 1); |
142 (* transitions *) |
142 (* transitions *) |
143 by (REPEAT (rtac allI 1)); |
143 by (REPEAT (rtac allI 1)); |
144 by (rtac imp_conj_lemma 1); |
144 by (rtac imp_conj_lemma 1); |
145 by (REPEAT(etac conjE 1)); |
145 by (REPEAT(etac conjE 1)); |
146 by (simp_tac (SS addsimps [externals_of_par_extra]) 1); |
146 by (simp_tac (!simpset addsimps [externals_of_par_extra]) 1); |
147 by (simp_tac (SS addsimps [par_def]) 1); |
147 by (simp_tac (!simpset addsimps [par_def]) 1); |
148 by (asm_full_simp_tac (SS addsimps [trans_of_def]) 1); |
148 by (asm_full_simp_tac (!simpset addsimps [trans_of_def]) 1); |
149 by (rtac (expand_if RS ssubst) 1); |
149 by (rtac (expand_if RS ssubst) 1); |
150 by (rtac conjI 1); |
150 by (rtac conjI 1); |
151 by (rtac impI 1); |
151 by (rtac impI 1); |
152 by (etac disjE 1); |
152 by (etac disjE 1); |
153 (* case 1 a:e(A1) | a:e(A2) *) |
153 (* case 1 a:e(A1) | a:e(A2) *) |
154 by (asm_full_simp_tac (SS addsimps [comp1_reachable,comp2_reachable, |
154 by (asm_full_simp_tac (!simpset addsimps [comp1_reachable,comp2_reachable, |
155 ext_is_act]) 1); |
155 ext_is_act]) 1); |
156 by (etac disjE 1); |
156 by (etac disjE 1); |
157 (* case 2 a:e(A1) | a~:e(A2) *) |
157 (* case 2 a:e(A1) | a~:e(A2) *) |
158 by (asm_full_simp_tac (SS addsimps [comp1_reachable,comp2_reachable, |
158 by (asm_full_simp_tac (!simpset addsimps [comp1_reachable,comp2_reachable, |
159 ext_is_act,ext1_ext2_is_not_act2]) 1); |
159 ext_is_act,ext1_ext2_is_not_act2]) 1); |
160 (* case 3 a:~e(A1) | a:e(A2) *) |
160 (* case 3 a:~e(A1) | a:e(A2) *) |
161 by (asm_full_simp_tac (SS addsimps [comp1_reachable,comp2_reachable, |
161 by (asm_full_simp_tac (!simpset addsimps [comp1_reachable,comp2_reachable, |
162 ext_is_act,ext1_ext2_is_not_act1]) 1); |
162 ext_is_act,ext1_ext2_is_not_act1]) 1); |
163 (* case 4 a:~e(A1) | a~:e(A2) *) |
163 (* case 4 a:~e(A1) | a~:e(A2) *) |
164 by (rtac impI 1); |
164 by (rtac impI 1); |
165 by (subgoal_tac "a~:externals(asig_of(A1)) & a~:externals(asig_of(A2))" 1); |
165 by (subgoal_tac "a~:externals(asig_of(A1)) & a~:externals(asig_of(A2))" 1); |
166 (* delete auxiliary subgoal *) |
166 (* delete auxiliary subgoal *) |
167 by (asm_full_simp_tac SS 2); |
167 by (Asm_full_simp_tac 2); |
168 by (fast_tac HOL_cs 2); |
168 by (fast_tac HOL_cs 2); |
169 by (simp_tac (SS addsimps [conj_disj_distribR] addcongs [conj_cong] |
169 by (simp_tac (!simpset addsimps [conj_disj_distribR] addcongs [conj_cong] |
170 setloop (split_tac [expand_if])) 1); |
170 setloop (split_tac [expand_if])) 1); |
171 by(REPEAT((resolve_tac [conjI,impI] 1 ORELSE etac conjE 1) THEN |
171 by(REPEAT((resolve_tac [conjI,impI] 1 ORELSE etac conjE 1) THEN |
172 asm_full_simp_tac(SS addsimps[comp1_reachable, |
172 asm_full_simp_tac(!simpset addsimps[comp1_reachable, |
173 comp2_reachable])1)); |
173 comp2_reachable])1)); |
174 qed"fxg_is_weak_pmap_of_product_IOA"; |
174 qed"fxg_is_weak_pmap_of_product_IOA"; |
175 |
175 |
176 |
176 |
177 goal Solve.thy "!!s.[| reachable (rename C g) s |] ==> reachable C s"; |
177 goal Solve.thy "!!s.[| reachable (rename C g) s |] ==> reachable C s"; |
178 by (asm_full_simp_tac (SS addsimps [reachable_def]) 1); |
178 by (asm_full_simp_tac (!simpset addsimps [reachable_def]) 1); |
179 by (etac bexE 1); |
179 by (etac bexE 1); |
180 by (res_inst_tac [("x", |
180 by (res_inst_tac [("x", |
181 "((%i. case (fst ex i) \ |
181 "((%i. case (fst ex i) \ |
182 \ of None => None\ |
182 \ of None => None\ |
183 \ | Some(x) => g x) ,snd ex)")] bexI 1); |
183 \ | Some(x) => g x) ,snd ex)")] bexI 1); |
184 by (simp_tac SS 1); |
184 by (Simp_tac 1); |
185 (* execution is indeed an execution of C *) |
185 (* execution is indeed an execution of C *) |
186 by (asm_full_simp_tac (SS addsimps [executions_def,is_execution_fragment_def, |
186 by (asm_full_simp_tac (!simpset addsimps [executions_def,is_execution_fragment_def, |
187 par_def, starts_of_def,trans_of_def,rename_def]) 1); |
187 par_def, starts_of_def,trans_of_def,rename_def]) 1); |
188 by (REPEAT(rtac allI 1)); |
188 by (REPEAT(rtac allI 1)); |
189 by (cut_inst_tac [("x","fst ex n")] opt_cases 1); |
189 by (cut_inst_tac [("x","fst ex n")] opt_cases 1); |
190 by (etac disjE 1); |
190 by (etac disjE 1); |
191 (* case 1: action sequence of rename C had already a None *) |
191 (* case 1: action sequence of rename C had already a None *) |
192 by (asm_full_simp_tac SS 1); |
192 by (Asm_full_simp_tac 1); |
193 (* case 2 *) |
193 (* case 2 *) |
194 by (REPEAT(etac exE 1)); |
194 by (REPEAT(etac exE 1)); |
195 by (etac conjE 1); |
195 by (etac conjE 1); |
196 by (eres_inst_tac [("x","n")] allE 1); |
196 by (eres_inst_tac [("x","n")] allE 1); |
197 by (eres_inst_tac [("x","y")] allE 1); |
197 by (eres_inst_tac [("x","y")] allE 1); |
198 by (asm_full_simp_tac SS 1); |
198 by (Asm_full_simp_tac 1); |
199 by (etac exE 1); |
199 by (etac exE 1); |
200 by (etac conjE 1); |
200 by (etac conjE 1); |
201 by (dtac sym 1); |
201 by (dtac sym 1); |
202 by (dtac sym 1); |
202 by (dtac sym 1); |
203 by (dtac sym 1); |
203 by (dtac sym 1); |
204 by (asm_full_simp_tac SS 1); |
204 by (Asm_full_simp_tac 1); |
205 by (safe_tac HOL_cs); |
205 by (safe_tac HOL_cs); |
206 qed"reachable_rename_ioa"; |
206 qed"reachable_rename_ioa"; |
207 |
207 |
208 |
208 |
209 (* HOL Lemmata - must already exist ! *) |
209 (* HOL Lemmata - must already exist ! *) |
218 val neg_ex = result(); |
218 val neg_ex = result(); |
219 |
219 |
220 |
220 |
221 goal Solve.thy "!!f.[| is_weak_pmap f C A |]\ |
221 goal Solve.thy "!!f.[| is_weak_pmap f C A |]\ |
222 \ ==> (is_weak_pmap f (rename C g) (rename A g))"; |
222 \ ==> (is_weak_pmap f (rename C g) (rename A g))"; |
223 by (asm_full_simp_tac (SS addsimps [is_weak_pmap_def]) 1); |
223 by (asm_full_simp_tac (!simpset addsimps [is_weak_pmap_def]) 1); |
224 by (rtac conjI 1); |
224 by (rtac conjI 1); |
225 by (asm_full_simp_tac (SS addsimps [rename_def,starts_of_def]) 1); |
225 by (asm_full_simp_tac (!simpset addsimps [rename_def,starts_of_def]) 1); |
226 by (fast_tac set_cs 1); |
226 by (fast_tac set_cs 1); |
227 by (REPEAT (rtac allI 1)); |
227 by (REPEAT (rtac allI 1)); |
228 by (rtac imp_conj_lemma 1); |
228 by (rtac imp_conj_lemma 1); |
229 by (simp_tac (SS addsimps [rename_def]) 1); |
229 by (simp_tac (!simpset addsimps [rename_def]) 1); |
230 by (asm_full_simp_tac (SS addsimps [externals_def,asig_inputs_def,asig_outputs_def,asig_of_def,trans_of_def]) 1); |
230 by (asm_full_simp_tac (!simpset addsimps [externals_def,asig_inputs_def,asig_outputs_def,asig_of_def,trans_of_def]) 1); |
231 by (safe_tac set_cs); |
231 by (safe_tac set_cs); |
232 by (rtac (expand_if RS ssubst) 1); |
232 by (rtac (expand_if RS ssubst) 1); |
233 by (rtac conjI 1); |
233 by (rtac conjI 1); |
234 by (rtac impI 1); |
234 by (rtac impI 1); |
235 by (etac disjE 1); |
235 by (etac disjE 1); |
236 by (etac exE 1); |
236 by (etac exE 1); |
237 by (etac conjE 1); |
237 by (etac conjE 1); |
238 (* x is input *) |
238 (* x is input *) |
239 by (dtac sym 1); |
239 by (dtac sym 1); |
240 by (dtac sym 1); |
240 by (dtac sym 1); |
241 by (asm_full_simp_tac SS 1); |
241 by (Asm_full_simp_tac 1); |
242 by (REPEAT (hyp_subst_tac 1)); |
242 by (REPEAT (hyp_subst_tac 1)); |
243 by (cut_inst_tac [("C","C"),("g","g"),("s","s")] reachable_rename_ioa 1); |
243 by (cut_inst_tac [("C","C"),("g","g"),("s","s")] reachable_rename_ioa 1); |
244 by (assume_tac 1); |
244 by (assume_tac 1); |
245 by (asm_full_simp_tac SS 1); |
245 by (Asm_full_simp_tac 1); |
246 (* x is output *) |
246 (* x is output *) |
247 by (etac exE 1); |
247 by (etac exE 1); |
248 by (etac conjE 1); |
248 by (etac conjE 1); |
249 by (dtac sym 1); |
249 by (dtac sym 1); |
250 by (dtac sym 1); |
250 by (dtac sym 1); |
251 by (asm_full_simp_tac SS 1); |
251 by (Asm_full_simp_tac 1); |
252 by (REPEAT (hyp_subst_tac 1)); |
252 by (REPEAT (hyp_subst_tac 1)); |
253 by (cut_inst_tac [("C","C"),("g","g"),("s","s")] reachable_rename_ioa 1); |
253 by (cut_inst_tac [("C","C"),("g","g"),("s","s")] reachable_rename_ioa 1); |
254 by (assume_tac 1); |
254 by (assume_tac 1); |
255 by (asm_full_simp_tac SS 1); |
255 by (Asm_full_simp_tac 1); |
256 (* x is internal *) |
256 (* x is internal *) |
257 by (simp_tac (SS addsimps [disj_demorgan,neg_ex,conj_demorgan] addcongs [conj_cong]) 1); |
257 by (simp_tac (!simpset addsimps [disj_demorgan,neg_ex,conj_demorgan] addcongs [conj_cong]) 1); |
258 by (rtac impI 1); |
258 by (rtac impI 1); |
259 by (etac conjE 1); |
259 by (etac conjE 1); |
260 by (cut_inst_tac [("C","C"),("g","g"),("s","s")] reachable_rename_ioa 1); |
260 by (cut_inst_tac [("C","C"),("g","g"),("s","s")] reachable_rename_ioa 1); |
261 by (assume_tac 1); |
261 by (assume_tac 1); |
262 by (eres_inst_tac [("x","s")] allE 1); |
262 by (eres_inst_tac [("x","s")] allE 1); |
263 by (eres_inst_tac [("x","t")] allE 1); |
263 by (eres_inst_tac [("x","t")] allE 1); |
264 by (eres_inst_tac [("x","x")] allE 1); |
264 by (eres_inst_tac [("x","x")] allE 1); |
265 by (eres_inst_tac [("x","x")] allE 1); |
265 by (eres_inst_tac [("x","x")] allE 1); |
266 by (asm_full_simp_tac SS 1); |
266 by (Asm_full_simp_tac 1); |
267 qed"rename_through_pmap"; |
267 qed"rename_through_pmap"; |
268 |
268 |
269 |
269 |
270 |
270 |