equal
deleted
inserted
replaced
25 by( forward_tac [r_into_trancl] 1); |
25 by( forward_tac [r_into_trancl] 1); |
26 by( dtac subcls1D 1); |
26 by( dtac subcls1D 1); |
27 by(Clarify_tac 1); |
27 by(Clarify_tac 1); |
28 by( datac class_wf 1 1); |
28 by( datac class_wf 1 1); |
29 by( rewtac wf_cdecl_def); |
29 by( rewtac wf_cdecl_def); |
30 by(force_tac (claset(), simpset() addsimps [reflcl_trancl RS sym] |
30 by(force_tac (claset(), simpset() addsimps [thm"reflcl_trancl" RS sym] |
31 delsimps [reflcl_trancl]) 1); |
31 delsimps [thm"reflcl_trancl"]) 1); |
32 qed "subcls1_wfD"; |
32 qed "subcls1_wfD"; |
33 |
33 |
34 Goalw [wf_cdecl_def] |
34 Goalw [wf_cdecl_def] |
35 "!!r. \\<lbrakk>wf_cdecl wf_mb G (C,D,r); C \\<noteq> Object\\<rbrakk> \\<Longrightarrow> is_class G D"; |
35 "!!r. \\<lbrakk>wf_cdecl wf_mb G (C,D,r); C \\<noteq> Object\\<rbrakk> \\<Longrightarrow> is_class G D"; |
36 by (auto_tac (claset(), simpset() addsplits [option.split_asm])); |
36 by (auto_tac (claset(), simpset() addsplits [option.split_asm])); |
232 |
232 |
233 Goal |
233 Goal |
234 "[|field (G,C) fn = Some (fd, fT); G\\<turnstile>D\\<preceq>C C; wf_prog wf_mb G|]==> \ |
234 "[|field (G,C) fn = Some (fd, fT); G\\<turnstile>D\\<preceq>C C; wf_prog wf_mb G|]==> \ |
235 \ map_of (fields (G,D)) (fn, fd) = Some fT"; |
235 \ map_of (fields (G,D)) (fn, fd) = Some fT"; |
236 by (dtac field_fields 1); |
236 by (dtac field_fields 1); |
237 by (dtac rtranclD 1); |
237 by (dtac (thm"rtranclD") 1); |
238 by Safe_tac; |
238 by Safe_tac; |
239 by (ftac subcls_is_class 1); |
239 by (ftac subcls_is_class 1); |
240 by (dtac trancl_into_rtrancl 1); |
240 by (dtac trancl_into_rtrancl 1); |
241 by (fast_tac (HOL_cs addDs [fields_mono]) 1); |
241 by (fast_tac (HOL_cs addDs [fields_mono]) 1); |
242 qed "widen_cfs_fields"; |
242 qed "widen_cfs_fields"; |
266 qed_spec_mp "method_wf_mdecl"; |
266 qed_spec_mp "method_wf_mdecl"; |
267 |
267 |
268 Goal "[|G\\<turnstile>T\\<preceq>C T'; wf_prog wf_mb G|] ==> \ |
268 Goal "[|G\\<turnstile>T\\<preceq>C T'; wf_prog wf_mb G|] ==> \ |
269 \ \\<forall>D rT b. method (G,T') sig = Some (D,rT ,b) -->\ |
269 \ \\<forall>D rT b. method (G,T') sig = Some (D,rT ,b) -->\ |
270 \ (\\<exists>D' rT' b'. method (G,T) sig = Some (D',rT',b') \\<and> G\\<turnstile>rT'\\<preceq>rT)"; |
270 \ (\\<exists>D' rT' b'. method (G,T) sig = Some (D',rT',b') \\<and> G\\<turnstile>rT'\\<preceq>rT)"; |
271 by( dtac rtranclD 1); |
271 by( dtac (thm"rtranclD") 1); |
272 by( etac disjE 1); |
272 by( etac disjE 1); |
273 by( Fast_tac 1); |
273 by( Fast_tac 1); |
274 by( etac conjE 1); |
274 by( etac conjE 1); |
275 by( etac trancl_trans_induct 1); |
275 by( etac trancl_trans_induct 1); |
276 by( Clarify_tac 2); |
276 by( Clarify_tac 2); |