# HG changeset patch # User oheimb # Date 963600431 -7200 # Node ID f495dba0cb07b23d7594942cbcb58c5755edf11e # Parent 1791a62b33e714bc85b9ef807dabe7630a78c127 corrections (cast relation, Prog.ML -> Decl.ML) diff -r 1791a62b33e7 -r f495dba0cb07 src/HOL/MicroJava/BV/BVSpecTypeSafe.ML --- a/src/HOL/MicroJava/BV/BVSpecTypeSafe.ML Fri Jul 14 17:49:56 2000 +0200 +++ b/src/HOL/MicroJava/BV/BVSpecTypeSafe.ML Fri Jul 14 20:47:11 2000 +0200 @@ -108,8 +108,8 @@ (**** CH ****) Goalw [cast_ok_def] - "\\ wf_prog ok G; G,h\\v\\\\RefT rt; cast_ok G (ClassT C) h v ; G\\(Class C)\\T'; is_class G C \\ \ -\ \\ G,h\\v\\\\T'"; + "\\ wf_prog ok G; G,h\\v\\\\RefT rt; cast_ok G C h v ; G\\Class C\\T; is_class G C \\ \ +\ \\ G,h\\v\\\\T"; by (forward_tac [widen_Class] 1); by (Clarify_tac 1); be disjE 1; @@ -135,7 +135,6 @@ addss (simpset() addsimps [map_eq_Cons,approx_val_def])) 1); qed "Checkcast_correct"; - Goal "\\ wt_jvm_prog G phi; \ \ method (G,C) sig = Some (C,rT,maxl,ins); \ diff -r 1791a62b33e7 -r f495dba0cb07 src/HOL/MicroJava/J/Decl.ML --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/HOL/MicroJava/J/Decl.ML Fri Jul 14 20:47:11 2000 +0200 @@ -0,0 +1,15 @@ +(* Title: HOL/MicroJava/J/Decl.ML + ID: $Id$ + Author: David von Oheimb + Copyright 1999 Technische Universitaet Muenchen +*) + +val finite_is_class = prove_goalw thy [is_class_def,class_def,o_def] "finite {C. is_class G C}" (K [ + rtac finite_map_of 1]); + +val is_classI = prove_goalw thy [is_class_def] +"\\G. class G C = Some c \\ is_class G C" (K [Auto_tac]); + +val is_classD = prove_goalw thy [is_class_def] +"\\G. is_class G C \\ \\sc fs ms. class G C = Some (sc,fs,ms)" (K [ + not_None_tac 1, pair_tac "y" 1, pair_tac "ya" 1, Auto_tac]); diff -r 1791a62b33e7 -r f495dba0cb07 src/HOL/MicroJava/J/Eval.thy --- a/src/HOL/MicroJava/J/Eval.thy Fri Jul 14 17:49:56 2000 +0200 +++ b/src/HOL/MicroJava/J/Eval.thy Fri Jul 14 20:47:11 2000 +0200 @@ -42,8 +42,8 @@ (* cf. 15.15 *) Cast "\\G\\Norm s0 -e\\v\\ (x1,s1); - x2=raise_if (\\ cast_ok G T (heap s1) v) ClassCast x1\\ \\ - G\\Norm s0 -Cast T e\\v\\ (x2,s1)" + x2=raise_if (\\ cast_ok G C (heap s1) v) ClassCast x1\\ \\ + G\\Norm s0 -Cast C e\\v\\ (x2,s1)" (* cf. 15.7.1 *) Lit "G\\Norm s -Lit v\\v\\ Norm s" diff -r 1791a62b33e7 -r f495dba0cb07 src/HOL/MicroJava/J/Example.ML --- a/src/HOL/MicroJava/J/Example.ML Fri Jul 14 17:49:56 2000 +0200 +++ b/src/HOL/MicroJava/J/Example.ML Fri Jul 14 20:47:11 2000 +0200 @@ -260,4 +260,4 @@ by (Simp_tac 1); by (Simp_tac 1); by e; (* XcptE *) -qed "exec_test"; +bind_thm ("exec_test", simplify (simpset()) (result())); diff -r 1791a62b33e7 -r f495dba0cb07 src/HOL/MicroJava/J/Example.thy --- a/src/HOL/MicroJava/J/Example.thy Fri Jul 14 17:49:56 2000 +0200 +++ b/src/HOL/MicroJava/J/Example.thy Fri Jul 14 20:47:11 2000 +0200 @@ -80,8 +80,8 @@ BaseC_def "BaseC \\ (Base, (Some Object, [(vee, PrimT Boolean)], [((foo,[Class Base]),Class Base,foo_Base)]))" - foo_Ext_def "foo_Ext \\ ([x],[],Expr( {Ext}Cast (ClassT Ext) - (LAcc x)..vee:=Lit (Intg #1)), + foo_Ext_def "foo_Ext \\ ([x],[],Expr( {Ext}Cast Ext + (LAcc x)..vee:=Lit (Intg #1)), Lit Null)" ExtC_def "ExtC \\ (Ext, (Some Base , [(vee, PrimT Integer)], @@ -113,5 +113,5 @@ "s0" == " Norm (empty   ,empty     )" "s1" == " Norm (empty(a\\obj1),empty(e\\Addr a)   )" "s2" == " Norm (empty(a\\obj1),empty(x\\Null)(This\\Addr a))" - "s3" == "(Some NP, empty(a\\obj1),empty(x\\Null)(This\\Addr a))" + "s3" == "(Some NP, empty(a\\obj1),empty(e\\Addr a))" end diff -r 1791a62b33e7 -r f495dba0cb07 src/HOL/MicroJava/J/JTypeSafe.ML --- a/src/HOL/MicroJava/J/JTypeSafe.ML Fri Jul 14 17:49:56 2000 +0200 +++ b/src/HOL/MicroJava/J/JTypeSafe.ML Fri Jul 14 20:47:11 2000 +0200 @@ -17,24 +17,15 @@ qed "NewC_conforms"; Goalw [cast_ok_def] - "\\ wf_prog wf_mb G; G,h\\v\\\\Tb; G\\Tb\\? RefT T'; cast_ok G T' h v\\ \ -\ \\ G,h\\v\\\\RefT T'"; + "\\ wf_prog wf_mb G; G,h\\v\\\\Class C; G\\C\\? D; cast_ok G D h v\\ \ +\ \\ G,h\\v\\\\Class D"; by( case_tac1 "v = Null" 1); by( Asm_full_simp_tac 1); by( dtac widen_RefT 1); by( Clarify_tac 1); -by( forward_tac [cast_RefT] 1); -by( Clarify_tac 1); by( rtac widen.null 1); -by( Asm_full_simp_tac 1); -by( forward_tac [cast_RefT2] 1); -by( strip_tac1 1); -by( dtac non_npD 1); -by( atac 1); -by( rewrite_goals_tac [obj_ty_def]); -by Auto_tac ; -by( ALLGOALS (rtac conf_AddrI)); -by Auto_tac; +by( datac non_npD 1 1); +by( auto_tac (claset() addSIs [conf_AddrI], simpset() addsimps [obj_ty_def])); qed "Cast_conf"; Goal "\\ wf_prog wf_mb G; field (G,C) fn = Some (fd, ft); (h,l)\\\\(G,lT); \ @@ -283,7 +274,7 @@ by( SELECT_GOAL (etac FAss_type_sound 1 THEN rtac refl 1 THEN ALLGOALS atac) 1); by prune_params_tac; -(* Level 45 *) +(* Level 51 *) (* 1 Call *) by( case_tac "x" 1); @@ -303,7 +294,8 @@ by( dtac eval_xcpt 1); by( Asm_full_simp_tac 1); by( fast_tac (HOL_cs addEs [hext_trans]) 1); -by( (rtac (rewrite_rule[wf_java_prog_def]Call_type_sound) THEN_ALL_NEW Asm_simp_tac) 1); +by( (rtac (rewrite_rule[wf_java_prog_def]Call_type_sound) + THEN_ALL_NEW Asm_simp_tac) 1); qed "eval_evals_exec_type_sound"; Goal "\\E s s'. \ diff -r 1791a62b33e7 -r f495dba0cb07 src/HOL/MicroJava/J/Prog.ML --- a/src/HOL/MicroJava/J/Prog.ML Fri Jul 14 17:49:56 2000 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -(* Title: HOL/MicroJava/J/Prog.ML - ID: $Id$ - Author: David von Oheimb - Copyright 1999 Technische Universitaet Muenchen -*) - -val finite_is_class = prove_goalw thy [is_class_def,class_def,o_def] "finite {C. is_class G C}" (K [ - rtac finite_map_of 1]); - -val is_classI = prove_goalw thy [is_class_def] -"\\G. class G C = Some c \\ is_class G C" (K [Auto_tac]); - -val is_classD = prove_goalw thy [is_class_def] -"\\G. is_class G C \\ \\sc fs ms. class G C = Some (sc,fs,ms)" (K [ - not_None_tac 1, pair_tac "y" 1, pair_tac "ya" 1, Auto_tac]); diff -r 1791a62b33e7 -r f495dba0cb07 src/HOL/MicroJava/J/State.ML --- a/src/HOL/MicroJava/J/State.ML Fri Jul 14 17:49:56 2000 +0200 +++ b/src/HOL/MicroJava/J/State.ML Fri Jul 14 20:47:11 2000 +0200 @@ -65,6 +65,11 @@ (fn _ => [Auto_tac ]); Addsimps[np_None, np_Some,np_Null,np_Addr]; +Goalw [raise_if_def] "(np Null (raise_if c xc None)) = \ +\ Some (if c then xc else NullPointer)"; +by (Simp_tac 1); +qed "np_raise_if"; +Addsimps[np_raise_if]; diff -r 1791a62b33e7 -r f495dba0cb07 src/HOL/MicroJava/J/State.thy --- a/src/HOL/MicroJava/J/State.thy Fri Jul 14 17:49:56 2000 +0200 +++ b/src/HOL/MicroJava/J/State.thy Fri Jul 14 20:47:11 2000 +0200 @@ -60,7 +60,7 @@ c_hupd :: "aheap \\ xstate \\ xstate" "c_hupd h'\\ \\(xo,(h,l)). if xo = None then (None,(h',l)) else (xo,(h,l))" - cast_ok :: "'c prog \\ ref_ty \\ aheap \\ val \\ bool" - "cast_ok G T h v \\ (v=Null) | G\\obj_ty (the (h (the_Addr v)))\\RefT T" + cast_ok :: "'c prog \\ cname \\ aheap \\ val \\ bool" + "cast_ok G C h v \\ v = Null \\ G\\obj_ty (the (h (the_Addr v)))\\ Class C" end diff -r 1791a62b33e7 -r f495dba0cb07 src/HOL/MicroJava/J/Term.thy --- a/src/HOL/MicroJava/J/Term.thy Fri Jul 14 17:49:56 2000 +0200 +++ b/src/HOL/MicroJava/J/Term.thy Fri Jul 14 20:47:11 2000 +0200 @@ -12,7 +12,7 @@ datatype expr = NewC cname (* class instance creation *) - | Cast ref_ty expr (* type cast *) + | Cast cname expr (* type cast *) | Lit val (* literal value, also references *) | BinOp binop expr expr (* binary operation *) | LAcc vname (* local (incl. parameter) access *) diff -r 1791a62b33e7 -r f495dba0cb07 src/HOL/MicroJava/J/TypeRel.ML --- a/src/HOL/MicroJava/J/TypeRel.ML Fri Jul 14 17:49:56 2000 +0200 +++ b/src/HOL/MicroJava/J/TypeRel.ML Fri Jul 14 20:47:11 2000 +0200 @@ -113,18 +113,3 @@ by( rtac widen.null 2); by(eatac rtrancl_trans 1 1); qed_spec_mp "widen_trans"; - - -val prove_cast_lemma = prove_typerel_lemma [] cast.elim; - -val cast_RefT = prove_typerel "G\\RefT R\\? T \\ \\t. T=RefT t" - [prove_typerel_lemma [widen_RefT] cast.elim - "G\\S\\? T \\ S=RefT R \\ (\\t. T=RefT t)"]; - -val cast_RefT2 = prove_typerel "G\\S\\? RefT R \\ \\t. S=RefT t" - [prove_typerel_lemma [widen_RefT2] cast.elim - "G\\S\\? T \\ T=RefT R \\ (\\t. S=RefT t)"]; - -val cast_PrimT2 = prove_typerel "G\\S\\? PrimT pt \\ G\\S\\PrimT pt" - [prove_cast_lemma "G\\S\\? T \\ T=PrimT pt \\ G\\S\\PrimT pt"]; - diff -r 1791a62b33e7 -r f495dba0cb07 src/HOL/MicroJava/J/TypeRel.thy --- a/src/HOL/MicroJava/J/TypeRel.thy Fri Jul 14 17:49:56 2000 +0200 +++ b/src/HOL/MicroJava/J/TypeRel.thy Fri Jul 14 20:47:11 2000 +0200 @@ -9,21 +9,21 @@ TypeRel = Decl + consts - subcls1 :: "'c prog \\ (cname \\ cname) set" (* subclass *) - widen, (* widening *) - cast :: "'c prog \\ (ty \\ ty) set" (* casting *) + subcls1 :: "'c prog \\ (cname \\ cname) set" (* subclass *) + widen :: "'c prog \\ (ty \\ ty ) set" (* widening *) + cast :: "'c prog \\ (cname \\ cname) set" (* casting *) syntax subcls1 :: "'c prog \\ [cname, cname] \\ bool" ("_\\_\\C1_" [71,71,71] 70) subcls :: "'c prog \\ [cname, cname] \\ bool" ("_\\_\\C _" [71,71,71] 70) - widen :: "'c prog \\ [ty, ty] \\ bool" ("_\\_\\_" [71,71,71] 70) - cast :: "'c prog \\ [ty, ty] \\ bool" ("_\\_\\? _"[71,71,71] 70) + widen :: "'c prog \\ [ty , ty ] \\ bool" ("_\\_\\_" [71,71,71] 70) + cast :: "'c prog \\ [cname, cname] \\ bool" ("_\\_\\? _"[71,71,71] 70) translations "G\\C \\C1 D" == "(C,D) \\ subcls1 G" "G\\C \\C D" == "(C,D) \\ (subcls1 G)^*" "G\\S \\ T" == "(S,T) \\ widen G" - "G\\S \\? T" == "(S,T) \\ cast G" + "G\\C \\? D" == "(C,D) \\ cast G" defs @@ -65,12 +65,13 @@ inductive "widen G" intrs (*widening, viz. method invocation conversion, cf. 5.3 i.e. sort of syntactic subtyping *) - refl "G\\ T \\ T" (* identity conv., cf. 5.1.1 *) + refl "G\\ T \\ T" (* identity conv., cf. 5.1.1 *) subcls "G\\C\\C D \\ G\\Class C \\ Class D" - null "G\\ NT \\ RefT R" + null "G\\ NT \\ RefT R" inductive "cast G" intrs (* casting conversion, cf. 5.5 / 5.1.5 *) - widen "G\\S\\T \\ G\\ S \\? T" - subcls "G\\C\\C D \\ G\\Class D \\? Class C" + (* left out casts on primitve types *) + widen "G\\C\\C D \\ G\\C \\? D" + subcls "G\\D\\C C \\ G\\C \\? D" end diff -r 1791a62b33e7 -r f495dba0cb07 src/HOL/MicroJava/J/WellType.thy --- a/src/HOL/MicroJava/J/WellType.thy Fri Jul 14 17:49:56 2000 +0200 +++ b/src/HOL/MicroJava/J/WellType.thy Fri Jul 14 20:47:11 2000 +0200 @@ -95,9 +95,9 @@ E\\NewC C\\Class C" (* cf. 15.15 *) - Cast "\\E\\e\\T; - prg E\\T\\? RefT rt\\ \\ - E\\Cast rt e\\RefT rt" + Cast "\\E\\e\\Class C; + prg E\\C\\? D\\ \\ + E\\Cast D e\\Class D" (* cf. 15.7.1 *) Lit "\\typeof (\\v. None) x = Some T\\ \\ diff -r 1791a62b33e7 -r f495dba0cb07 src/HOL/MicroJava/JVM/Object.thy --- a/src/HOL/MicroJava/JVM/Object.thy Fri Jul 14 17:49:56 2000 +0200 +++ b/src/HOL/MicroJava/JVM/Object.thy Fri Jul 14 20:47:11 2000 +0200 @@ -65,7 +65,7 @@ primrec "exec_ch (Checkcast C) G hp stk pc = (let oref = hd stk; - xp' = raise_xcpt (\\ cast_ok G (ClassT C) hp oref) ClassCast; + xp' = raise_xcpt (\\ cast_ok G C hp oref) ClassCast; stk' = if xp'=None then stk else tl stk in (xp' , stk' , pc+1))"