# HG changeset patch # User nipkow # Date 949494398 -3600 # Node ID 59b62e8804b454341baa7ff68d138db35e6ba3f8 # Parent 6b7ef9fc39da959ebd2636f5035f275adb14591b Rduced Class C <= Class D to C <= D. diff -r 6b7ef9fc39da -r 59b62e8804b4 src/HOL/MicroJava/BV/BVSpecTypeSafe.ML --- a/src/HOL/MicroJava/BV/BVSpecTypeSafe.ML Wed Feb 02 12:46:57 2000 +0100 +++ b/src/HOL/MicroJava/BV/BVSpecTypeSafe.ML Wed Feb 02 13:26:38 2000 +0100 @@ -120,7 +120,7 @@ by (Clarify_tac 1); by (asm_full_simp_tac (simpset() addsimps [obj_ty_def]) 1); by (exhaust_tac "v" 1); -by (ALLGOALS (fast_tac (claset() addIs [widen_trans] addss (simpset() addsimps [widen.null])))); +by (ALLGOALS (fast_tac (claset() addIs [rtrancl_trans] addss (simpset() addsimps [widen.null])))); qed "Cast_conf2"; Goal @@ -283,31 +283,31 @@ by (asm_full_simp_tac (simpset()addsimps[raise_xcpt_def]@defs1 addsplits [option.split]) 1); by (Clarify_tac 1); -by (asm_full_simp_tac (simpset() addsimps []@defs1) 1); +by (asm_full_simp_tac (simpset() addsimps defs1) 1); bd approx_stk_append_lemma 1; by (Clarify_tac 1); by (asm_full_simp_tac (simpset() addsimps [approx_val_def]) 1); bd conf_RefTD 1; by (Clarify_tac 1); by(rename_tac "oloc oT ofs T'" 1); -by (asm_full_simp_tac (simpset() addsimps []@defs1) 1); +by (asm_full_simp_tac (simpset() addsimps defs1) 1); bd subtype_widen_methd 1; ba 1; ba 1; be exE 1; by(rename_tac "oT'" 1); by (Clarify_tac 1); -by(subgoal_tac "G \\ Class oT \\ Class oT'" 1); +by(subgoal_tac "G \\ oT \\C oT'" 1); by(forw_inst_tac [("C","oT")](standard(rotate_prems 1 method_wf_mdecl)) 2); ba 2; by(Blast_tac 2); -by (asm_full_simp_tac (simpset() addsimps []@defs1) 1); +by (asm_full_simp_tac (simpset() addsimps defs1) 1); by(forward_tac [method_in_md] 1); ba 1; back(); back(); by (Clarify_tac 1); -by (asm_full_simp_tac (simpset() addsimps []@defs1) 1); +by (asm_full_simp_tac (simpset() addsimps defs1) 1); by (forward_tac [wt_jvm_prog_impl_wt_start] 1); ba 1; back(); diff -r 6b7ef9fc39da -r 59b62e8804b4 src/HOL/MicroJava/J/Conform.ML --- a/src/HOL/MicroJava/J/Conform.ML Wed Feb 02 12:46:57 2000 +0100 +++ b/src/HOL/MicroJava/J/Conform.ML Wed Feb 02 13:26:38 2000 +0100 @@ -55,7 +55,7 @@ (K [Asm_full_simp_tac 1]); val conf_obj_AddrI = prove_goalw thy [conf_def] - "\\G. \\h a = Some (C,fs); G\\Class C\\ Class D\\ \\ G,h\\Addr a\\\\ Class D" + "\\G. \\h a = Some (C,fs); G\\C\\C D\\ \\ G,h\\Addr a\\\\ Class D" (K [Asm_full_simp_tac 1]); Goalw [conf_def] "is_type G T \\ G,h\\default_val T\\\\T"; @@ -98,17 +98,17 @@ safe_tac HOL_cs, Asm_full_simp_tac 1]); -val conf_RefTD = prove_goalw thy [conf_def] "G,h\\a'\\\\RefT T \\ a' = Null | \ -\ (\\a obj T'. a' = Addr a \\ h a = Some obj \\ obj_ty obj = T' \\ G\\T'\\RefT T)" (K [ - induct_tac "a'" 1, - Auto_tac, - REPEAT (etac widen_PrimT_RefT 1)]) RS mp; +Goalw [conf_def] + "G,h\\a'\\\\RefT T \\ a' = Null | \ +\ (\\a obj T'. a' = Addr a \\ h a = Some obj \\ obj_ty obj = T' \\ G\\T'\\RefT T)"; +by(induct_tac "a'" 1); +by(Auto_tac); +qed_spec_mp "conf_RefTD"; val conf_NullTD = prove_goal thy "\\G. G,h\\a'\\\\RefT NullT \\ a' = Null" (K [ dtac conf_RefTD 1, Step_tac 1, - Auto_tac, - etac widen_Class_NullT 1]); + Auto_tac]); val non_npD = prove_goal thy "\\G. \\a' \\ Null; G,h\\a'\\\\RefT t\\ \\ \ \ \\a C fs. a' = Addr a \\ h a = Some (C,fs) \\ G\\Class C\\RefT t" (K [ @@ -117,21 +117,22 @@ Auto_tac]); val non_np_objD = prove_goal thy "\\G. \\a' \\ Null; G,h\\a'\\\\ Class C; C \\ Object\\ \\ \ -\ (\\a C' fs. a' = Addr a \\ h a = Some (C',fs) \\ G\\Class C'\\ Class C)" - (K[fast_tac (HOL_cs addDs [non_npD]) 1]); +\ (\\a C' fs. a' = Addr a \\ h a = Some (C',fs) \\ G\\C'\\C C)" + (K[fast_tac (claset() addDs [non_npD]) 1]); Goal "a' \\ Null \\ wf_prog wf_mb G \\ G,h\\a'\\\\RefT t \\\ \ (\\C. t = ClassT C \\ C \\ Object) \\ \ \ (\\a C fs. a' = Addr a \\ h a = Some (C,fs) \\ G\\Class C\\RefT t)"; -by (rtac impI 1); -by (rtac impI 1); -by (res_inst_tac [("y","t")] ref_ty.exhaust 1); -by (safe_tac HOL_cs); -by (dtac conf_NullTD 1); -by (contr_tac 1); -by (etac non_np_objD 1); -by (atac 1); -by (Fast_tac 1); +by(rtac impI 1); +by(rtac impI 1); +by(res_inst_tac [("y","t")] ref_ty.exhaust 1); + by(Safe_tac); + by(dtac conf_NullTD 1); + by(contr_tac 1); +by(dtac non_np_objD 1); + by(atac 1); + by(Fast_tac 1); +by(Fast_tac 1); qed_spec_mp "non_np_objD'"; Goal "wf_prog wf_mb G \\ \\Ts Ts'. list_all2 (conf G h) vs Ts \\ list_all2 (\\T T'. G\\T\\T') Ts Ts' \\ list_all2 (conf G h) vs Ts'"; diff -r 6b7ef9fc39da -r 59b62e8804b4 src/HOL/MicroJava/J/JTypeSafe.ML --- a/src/HOL/MicroJava/J/JTypeSafe.ML Wed Feb 02 12:46:57 2000 +0100 +++ b/src/HOL/MicroJava/J/JTypeSafe.ML Wed Feb 02 13:26:38 2000 +0100 @@ -204,7 +204,7 @@ (* Level 7 *) -(* 14 NewC *) +(* 13 NewC *) by( dtac new_AddrD 1); by( etac disjE 1); by( Asm_simp_tac 2); @@ -213,20 +213,19 @@ by( rtac conjI 1); by( fast_tac (HOL_cs addSEs [NewC_conforms]) 1); by( rtac conf_obj_AddrI 1); -by( rtac widen.refl 2); -by( Asm_simp_tac 2); +by( rtac rtrancl_refl 2); by( Simp_tac 1); (* for Cast *) by( defer_tac 1); -(* 13 Lit *) +(* 12 Lit *) by( etac conf_litval 1); -(* 12 LAcc *) +(* 11 LAcc *) by( fast_tac (claset() addEs [conforms_localD RS lconfD]) 1); -(* 11 Nil *) +(* 10 Nil *) by( Simp_tac 5); (* for FAss *) @@ -285,8 +284,7 @@ (* Level 45 *) (* 1 Call *) -by( case_tac1 "x = None" 1); -by( dtac (not_None_eq RS iffD1) 2); +by( exhaust_tac "x" 1); by( Clarsimp_tac 2); by( dtac exec_xcpt 2); by( Asm_full_simp_tac 2); diff -r 6b7ef9fc39da -r 59b62e8804b4 src/HOL/MicroJava/J/TypeRel.ML --- a/src/HOL/MicroJava/J/TypeRel.ML Wed Feb 02 12:46:57 2000 +0100 +++ b/src/HOL/MicroJava/J/TypeRel.ML Wed Feb 02 13:26:38 2000 +0100 @@ -74,9 +74,12 @@ val prove_widen_lemma = prove_typerel_lemma [] widen.elim; -val widen_PrimT_RefT = prove_typerel "G\\PrimT x\\RefT tname \\ R" - [ prove_widen_lemma "G\\S\\T \\ S = PrimT x \\ T = RefT tname \\ R"]; - +Goal "(G\\PrimT pT\\RefT rT) = False"; +br iffI 1; +be widen.elim 1; +by(Auto_tac); +qed "widen_PrimT_RefT"; +AddIffs [widen_PrimT_RefT]; val widen_RefT = prove_typerel "G\\RefT R\\T \\ \\t. T=RefT t" [prove_widen_lemma "G\\S\\T \\ S=RefT R \\ (\\t. T=RefT t)"]; @@ -87,16 +90,20 @@ val widen_Class = prove_typerel "G\\Class C\\T \\ \\D. T=Class D" [ prove_widen_lemma "G\\S\\T \\ S = Class C \\ (\\D. T=Class D)"]; -val widen_Class_RefT = prove_typerel - "G\\Class C\\RefT t \\ (\\tname. t=ClassT tname)" - [prove_widen_lemma - "G\\S\\T \\ S=Class C \\ T=RefT t \\ (\\tname. t=ClassT tname)"]; +Goal "(G\\Class C\\RefT NullT) = False"; +br iffI 1; +be widen.elim 1; +by(Auto_tac); +qed "widen_Class_NullT"; +AddIffs [widen_Class_NullT]; -val widen_Class_NullT = prove_typerel "G\\Class C\\RefT NullT \\ R" - [prove_widen_lemma "G\\S\\T \\ S=Class C \\ T=RefT NullT \\ R"]; - -val widen_Class_Class = prove_typerel "G\\Class C\\ Class cm \\ G\\C\\C cm" -[ prove_widen_lemma "G\\S\\T \\ S = Class C \\ T = Class cm \\ G\\C\\C cm"]; +Goal "(G\\Class C\\ Class D) = (G\\C\\C D)"; +br iffI 1; +be widen.elim 1; +by(Auto_tac); +bes widen.intrs 1; +qed "widen_Class_Class"; +AddIffs [widen_Class_Class]; Goal "G\\S\\U \\ \\T. G\\U\\T \\ G\\S\\T"; by( etac widen.induct 1); @@ -104,8 +111,6 @@ by( ALLGOALS (forward_tac [widen_Class, widen_RefT])); by Safe_tac; by( rtac widen.null 2); -by(dtac widen_Class_Class 1); -by(rtac widen.subcls 1); by(eatac rtrancl_trans 1 1); qed_spec_mp "widen_trans"; diff -r 6b7ef9fc39da -r 59b62e8804b4 src/HOL/MicroJava/J/WellForm.ML --- a/src/HOL/MicroJava/J/WellForm.ML Wed Feb 02 12:46:57 2000 +0100 +++ b/src/HOL/MicroJava/J/WellForm.ML Wed Feb 02 13:26:38 2000 +0100 @@ -152,11 +152,6 @@ "\\sig. wf_mhead G sig rT \\ is_type G rT" (K [split_all_tac 1, Auto_tac]); -Goal "\\wf_prog wf_mb G; is_class G C\\ \\ G\\Class C\\ Class Object"; -by(rtac widen.subcls 1); -by(eatac subcls_C_Object 1 1); -qed "widen_Class_Object"; - Goal "\\(C',C)\\(subcls1 G)^+; wf_prog wf_mb G\\ \\ \ \ x \\ set (fields (G,C)) \\ x \\ set (fields (G,C'))"; by(etac trancl_trans_induct 1); @@ -166,7 +161,7 @@ qed_spec_mp "fields_mono"; Goal "\\is_class G C; wf_prog wf_mb G\\ \\ \ -\ \\((fn,fd),fT)\\set (fields (G,C)). G\\Class C\\ Class fd"; +\ \\((fn,fd),fT)\\set (fields (G,C)). G\\C\\C fd"; by( etac subcls1_induct 1); by( atac 1); by( Asm_simp_tac 1); @@ -181,15 +176,14 @@ by( etac UnE 1); by( dtac split_Pair_eq 1); by( SELECT_GOAL (Auto_tac) 1); -by( rtac widen_trans 1); -by( etac (r_into_rtrancl RS widen.subcls) 1); +by( etac (r_into_rtrancl RS rtrancl_trans) 1); by( etac BallE 1); by( contr_tac 1); by( Asm_full_simp_tac 1); qed "widen_fields_defpl'"; Goal "\\is_class G C; wf_prog wf_mb G; ((fn,fd),fT) \\ set (fields (G,C))\\ \\ \ -\ G\\Class C\\ Class fd"; +\ G\\C\\C fd"; by( datac widen_fields_defpl' 1 1); (*###################*) by( dtac bspec 1); @@ -217,7 +211,7 @@ by (EVERY1[dtac widen_fields_defpl, atac, atac]); by( Asm_full_simp_tac 1); by( dtac split_Pair_eq 1); -by( fast_tac (HOL_cs addSDs [widen_Class_Class]) 1); +by( Asm_full_simp_tac 1); qed "unique_fields"; (*####TO Trancl.ML*) @@ -227,9 +221,8 @@ qed "rtranclD"; Goal -"\\wf_prog wf_mb G; G\\Class C'\\ Class C; map_of(fields (G,C )) f = Some ft\\ \\ \ +"\\wf_prog wf_mb G; G\\C'\\C C; map_of(fields (G,C )) f = Some ft\\ \\ \ \ map_of (fields (G,C')) f = Some ft"; -by( dtac widen_Class_Class 1); by( dtac rtranclD 1); by( Auto_tac); by( rtac table_mono 1); @@ -246,11 +239,11 @@ (K [rtac table_map_Some 1, Asm_full_simp_tac 1]); val widen_cfs_fields = prove_goal thy "\\X. \\field (G,C) fn = Some (fd, fT);\ -\ G\\Class C'\\ Class C; wf_prog wf_mb G\\ \\ map_of (fields (G,C')) (fn, fd) = Some fT" (K[ +\ G\\C'\\C C; wf_prog wf_mb G\\ \\ map_of (fields (G,C')) (fn, fd) = Some fT" (K[ fast_tac (HOL_cs addIs [widen_fields_mono, cfs_fields_lemma]) 1]); Goal "wf_prog wf_mb G \\ method (G,C) sig = Some (md,mh,m)\ -\ \\ G\\Class C\\ Class md \\ wf_mdecl wf_mb G md (sig,(mh,m))"; +\ \\ G\\C\\C md \\ wf_mdecl wf_mb G md (sig,(mh,m))"; by( case_tac "is_class G C" 1); by( forw_inst_tac [("C","C")] method_rec 2); by( asm_full_simp_tac (simpset() addsimps [is_class_def] @@ -266,9 +259,8 @@ by( etac disjE 1); by( thin_tac "?P \\ ?Q" 1); by( Clarify_tac 2); -by( rtac widen_trans 2); +by( rtac rtrancl_trans 2); by( atac 3); -by( rtac widen.subcls 2); by( rtac r_into_rtrancl 2); by( fast_tac (HOL_cs addIs [subcls1I]) 2); by( forward_tac [table_mapf_SomeD] 1); @@ -313,11 +305,10 @@ Goal - "\\ G\\Class C\\ Class D; wf_prog wf_mb G; \ + "\\ G\\ C\\C D; wf_prog wf_mb G; \ \ method (G,D) sig = Some (md, rT, b) \\ \ \ \\ \\mD' rT' b'. method (G,C) sig= Some(mD',rT',b') \\ G\\rT'\\rT"; -by(auto_tac (claset() addSDs [widen_Class_Class] - addDs [subcls_widen_methd,method_wf_mdecl], +by(auto_tac (claset() addDs [subcls_widen_methd,method_wf_mdecl], simpset() addsimps [wf_mdecl_def,wf_mhead_def,split_def])); qed "subtype_widen_methd"; diff -r 6b7ef9fc39da -r 59b62e8804b4 src/HOL/MicroJava/J/WellType.ML --- a/src/HOL/MicroJava/J/WellType.ML Wed Feb 02 12:46:57 2000 +0100 +++ b/src/HOL/MicroJava/J/WellType.ML Wed Feb 02 13:26:38 2000 +0100 @@ -5,22 +5,17 @@ *) Goal -"\\ method (G,C) sig = Some (md,rT,b); wf_prog wf_mb G; G\\Class T''\\ Class C\\\ +"\\ method (G,C) sig = Some (md,rT,b); wf_prog wf_mb G; G\\T''\\C C\\\ \ \\ \\md' rT' b'. method (G,T'') sig = Some (md',rT',b') \\ G\\rT'\\rT"; -by( forward_tac [widen_Class_RefT] 1); -by( etac exE 1); -by( asm_full_simp_tac (simpset() delsimps [split_paired_Ex]) 1); -by( strip_tac1 1); -by( dtac widen_Class_Class 1); by( dtac subcls_widen_methd 1); by Auto_tac; qed "widen_methd"; Goal -"\\method (G,C) sig = Some (md,rT,b); G\\Class T''\\ Class C; wf_prog wf_mb G\\ \\ \ +"\\method (G,C) sig = Some (md,rT,b); G\\T''\\C C; wf_prog wf_mb G\\ \\ \ \ \\T' rT' b. method (G,T'') sig = Some (T',rT',b) \\ \ -\ G\\rT'\\rT \\ G\\Class T''\\ Class T' \\ wf_mhead G sig rT' \\ wf_mb G T' (sig,rT',b)"; +\ G\\rT'\\rT \\ G\\T''\\C T' \\ wf_mhead G sig rT' \\ wf_mb G T' (sig,rT',b)"; by( datac widen_methd 2 1); by( Clarsimp_tac 1); by( dtac method_wf_mdecl 1);