src/HOL/MicroJava/J/WellForm.ML
changeset 10996 74e970389def
parent 10925 5ffe7ed8899a
equal deleted inserted replaced
10995:ef0b521698b7 10996:74e970389def
    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);