# HG changeset patch # User kleing # Date 969632933 -7200 # Node ID fe82134773dc86f967ad88c83a99792a2318a0d0 # Parent 4522e59b7d8466460d77bd4375d39deae010ce32 added HTML syntax; added spaces in normal syntax for better documents diff -r 4522e59b7d84 -r fe82134773dc src/HOL/MicroJava/J/Conform.thy --- a/src/HOL/MicroJava/J/Conform.thy Fri Sep 22 16:28:04 2000 +0200 +++ b/src/HOL/MicroJava/J/Conform.thy Fri Sep 22 16:28:53 2000 +0200 @@ -12,23 +12,43 @@ constdefs - hext :: "aheap => aheap => bool" ( "_\\|_" [51,51] 50) + hext :: "aheap => aheap => bool" ("_ \\| _" [51,51] 50) "h\\|h' == \\a C fs. h a = Some(C,fs) --> (\\fs'. h' a = Some(C,fs'))" - conf :: "'c prog => aheap => val => ty => bool" ( "_,_\\_::\\_" [51,51,51,51] 50) + conf :: "'c prog => aheap => val => ty => bool" ("_,_ \\ _ ::\\ _" [51,51,51,51] 50) "G,h\\v::\\T == \\T'. typeof (option_map obj_ty o h) v = Some T' \\ G\\T'\\T" lconf :: "'c prog => aheap => ('a \\ val) => ('a \\ ty) => bool" - ("_,_\\_[::\\]_" [51,51,51,51] 50) + ("_,_ \\ _ [::\\] _" [51,51,51,51] 50) "G,h\\vs[::\\]Ts == \\n T. Ts n = Some T --> (\\v. vs n = Some v \\ G,h\\v::\\T)" - oconf :: "'c prog => aheap => obj => bool" ("_,_\\_\\" [51,51,51] 50) + oconf :: "'c prog => aheap => obj => bool" ("_,_ \\ _ \\" [51,51,51] 50) "G,h\\obj\\ == G,h\\snd obj[::\\]map_of (fields (G,fst obj))" - hconf :: "'c prog => aheap => bool" ("_\\h _\\" [51,51] 50) + hconf :: "'c prog => aheap => bool" ("_ \\h _ \\" [51,51] 50) "G\\h h\\ == \\a obj. h a = Some obj --> G,h\\obj\\" - conforms :: "state => java_mb env_ => bool" ("_::\\_" [51,51] 50) + conforms :: "state => java_mb env_ => bool" ("_ ::\\ _" [51,51] 50) "s::\\E == prg E\\h heap s\\ \\ prg E,heap s\\locals s[::\\]localT E" + +syntax (HTML) + hext :: "aheap => aheap => bool" + ("_ <=| _" [51,51] 50) + + conf :: "'c prog => aheap => val => ty => bool" + ("_,_ |- _ ::<= _" [51,51,51,51] 50) + + lconf :: "'c prog => aheap => ('a \\ val) => ('a \\ ty) => bool" + ("_,_ |- _ [::<=] _" [51,51,51,51] 50) + + oconf :: "'c prog => aheap => obj => bool" + ("_,_ |- _ [ok]" [51,51,51] 50) + + hconf :: "'c prog => aheap => bool" + ("_ |-h _ [ok]" [51,51] 50) + + conforms :: "state => java_mb env_ => bool" + ("_ ::<= _" [51,51] 50) + end diff -r 4522e59b7d84 -r fe82134773dc src/HOL/MicroJava/J/Eval.thy --- a/src/HOL/MicroJava/J/Eval.thy Fri Sep 22 16:28:04 2000 +0200 +++ b/src/HOL/MicroJava/J/Eval.thy Fri Sep 22 16:28:53 2000 +0200 @@ -16,12 +16,22 @@ syntax eval :: "[java_mb prog,xstate,expr,val,xstate] => bool " - ("_\\_ -_\\_-> _"[51,82,82,82,82]81) + ("_ \\ _ -_\\_-> _" [51,82,82,82,82] 81) evals:: "[java_mb prog,xstate,expr list, val list,xstate] => bool " - ("_\\_ -_[\\]_-> _"[51,82,51,51,82]81) + ("_ \\ _ -_[\\]_-> _" [51,82,51,51,82] 81) exec :: "[java_mb prog,xstate,stmt, xstate] => bool " - ("_\\_ -_-> _" [51,82,82, 82]81) + ("_ \\ _ -_-> _" [51,82,82,82] 81) + +syntax (HTML) + eval :: "[java_mb prog,xstate,expr,val,xstate] => bool " + ("_ |- _ -_>_-> _" [51,82,82,82,82] 81) + evals:: "[java_mb prog,xstate,expr list, + val list,xstate] => bool " + ("_ |- _ -_[>]_-> _" [51,82,51,51,82] 81) + exec :: "[java_mb prog,xstate,stmt, xstate] => bool " + ("_ |- _ -_-> _" [51,82,82,82] 81) + translations "G\\s -e \\ v-> (x,s')" <= "(s, e, v, x, s') \\ eval G" diff -r 4522e59b7d84 -r fe82134773dc src/HOL/MicroJava/J/State.thy --- a/src/HOL/MicroJava/J/State.thy Fri Sep 22 16:28:04 2000 +0200 +++ b/src/HOL/MicroJava/J/State.thy Fri Sep 22 16:28:53 2000 +0200 @@ -14,7 +14,6 @@ obj = "cname \\ fields_" (* class instance with class name and fields *) constdefs - obj_ty :: "obj => ty" "obj_ty obj == Class (fst obj)" @@ -42,9 +41,9 @@ Norm :: "state => xstate" translations - "heap" => "fst" - "locals" => "snd" - "Norm s" == "(None,s)" + "heap" => "fst" + "locals" => "snd" + "Norm s" == "(None,s)" constdefs diff -r 4522e59b7d84 -r fe82134773dc src/HOL/MicroJava/J/Term.thy --- a/src/HOL/MicroJava/J/Term.thy Fri Sep 22 16:28:04 2000 +0200 +++ b/src/HOL/MicroJava/J/Term.thy Fri Sep 22 16:28:53 2000 +0200 @@ -11,21 +11,23 @@ datatype binop = Eq | Add (* function codes for binary operation *) datatype expr - = NewC cname (* class instance creation *) - | Cast cname expr (* type cast *) - | Lit val (* literal value, also references *) - | BinOp binop expr expr (* binary operation *) - | LAcc vname (* local (incl. parameter) access *) - | LAss vname expr (* local assign *) ("_::=_" [ 90,90]90) - | FAcc cname expr vname (* field access *) ("{_}_.._"[10,90,99 ]90) + = NewC cname (* class instance creation *) + | Cast cname expr (* type cast *) + | Lit val (* literal value, also references *) + | BinOp binop expr expr (* binary operation *) + | LAcc vname (* local (incl. parameter) access *) + | LAss vname expr (* local assign *) ("_::=_" [ 90,90]90) + | FAcc cname expr vname (* field access *) ("{_}_.._" [10,90,99 ]90) | FAss cname expr vname - expr (* field ass. *)("{_}_.._:=_"[10,90,99,90]90) - | Call expr mname (ty list) (expr list)(* method call*) - ("_.._'({_}_')" [90,99,10,10] 90) + expr (* field ass. *) ("{_}_.._:=_" [10,90,99,90]90) + | Call expr mname + (ty list) (expr list) (* method call*) ("_.._'({_}_')" [90,99,10,10] 90) + and stmt - = Skip (* empty statement *) - | Expr expr (* expression statement *) - | Comp stmt stmt ("_;; _" [ 61,60]60) - | Cond expr stmt stmt ("If'(_') _ Else _" [ 80,79,79]70) - | Loop expr stmt ("While'(_') _" [ 80,79]70) + = Skip (* empty statement *) + | Expr expr (* expression statement *) + | Comp stmt stmt ("_;; _" [61,60]60) + | Cond expr stmt stmt ("If '(_') _ Else _" [80,79,79]70) + | Loop expr stmt ("While '(_') _" [80,79]70) + end diff -r 4522e59b7d84 -r fe82134773dc src/HOL/MicroJava/J/Type.thy --- a/src/HOL/MicroJava/J/Type.thy Fri Sep 22 16:28:04 2000 +0200 +++ b/src/HOL/MicroJava/J/Type.thy Fri Sep 22 16:28:53 2000 +0200 @@ -8,32 +8,35 @@ Type = JBasis + -types cname (* class name *) - vnam (* variable or field name *) - mname (* method name *) +types cname (* class name *) + vnam (* variable or field name *) + mname (* method name *) + arities cname, vnam, mname :: term datatype vname (* names for This pointer and local/field variables *) - = This - | VName vnam + = This + | VName vnam -datatype prim_ty (* primitive type, cf. 4.2 *) - = Void (* 'result type' of void methods *) - | Boolean - | Integer +datatype prim_ty (* primitive type, cf. 4.2 *) + = Void (* 'result type' of void methods *) + | Boolean + | Integer datatype ref_ty (* reference type, cf. 4.3 *) - = NullT (* null type, cf. 4.1 *) - | ClassT cname (* class type *) -datatype ty (* any type, cf. 4.1 *) - = PrimT prim_ty (* primitive type *) - | RefT ref_ty (* reference type *) + = NullT (* null type, cf. 4.1 *) + | ClassT cname (* class type *) + +datatype ty (* any type, cf. 4.1 *) + = PrimT prim_ty (* primitive type *) + | RefT ref_ty (* reference type *) syntax - NT :: " ty" - Class :: "cname => ty" + NT :: " ty" + Class :: "cname => ty" + translations - "NT" == "RefT NullT" + "NT" == "RefT NullT" "Class C" == "RefT (ClassT C)" end diff -r 4522e59b7d84 -r fe82134773dc src/HOL/MicroJava/J/TypeRel.thy --- a/src/HOL/MicroJava/J/TypeRel.thy Fri Sep 22 16:28:04 2000 +0200 +++ b/src/HOL/MicroJava/J/TypeRel.thy Fri Sep 22 16:28:53 2000 +0200 @@ -9,21 +9,27 @@ TypeRel = Decl + consts - subcls1 :: "'c prog => (cname \\ cname) set" (* subclass *) - widen :: "'c prog => (ty \\ ty ) set" (* widening *) - cast :: "'c prog => (cname \\ cname) 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 => [cname, cname] => bool" ("_\\_\\? _"[71,71,71] 70) + 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 => [cname, cname] => bool" ("_ \\ _ \\? _" [71,71,71] 70) + +syntax (HTML) + 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 => [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\\C \\? D" == "(C,D) \\ cast G" + "G\\C \\C1 D" == "(C,D) \\ subcls1 G" + "G\\C \\C D" == "(C,D) \\ (subcls1 G)^*" + "G\\S \\ T" == "(S,T) \\ widen G" + "G\\C \\? D" == "(C,D) \\ cast G" defs diff -r 4522e59b7d84 -r fe82134773dc src/HOL/MicroJava/J/Value.thy --- a/src/HOL/MicroJava/J/Value.thy Fri Sep 22 16:28:04 2000 +0200 +++ b/src/HOL/MicroJava/J/Value.thy Fri Sep 22 16:28:53 2000 +0200 @@ -8,44 +8,45 @@ Value = Type + -types loc (* locations, i.e. abstract references on objects *) +types loc (* locations, i.e. abstract references on objects *) arities loc :: term -datatype val_ (* name non 'val' because of clash with ML token *) - = Unit (* dummy result value of void methods *) - | Null (* null reference *) - | Bool bool (* Boolean value *) - | Intg int (* integer value *) (* Name Intg instead of Int because - of clash with HOL/Set.thy *) - | Addr loc (* addresses, i.e. locations of objects *) +datatype val_ (* name non 'val' because of clash with ML token *) + = Unit (* dummy result value of void methods *) + | Null (* null reference *) + | Bool bool (* Boolean value *) + | Intg int (* integer value, name Intg instead of Int because + of clash with HOL/Set.thy *) + | Addr loc (* addresses, i.e. locations of objects *) + types val = val_ translations "val" <= (type) "val_" consts - the_Bool :: "val => bool" - the_Intg :: "val => int" - the_Addr :: "val => loc" + the_Bool :: "val => bool" + the_Intg :: "val => int" + the_Addr :: "val => loc" primrec - "the_Bool (Bool b) = b" + "the_Bool (Bool b) = b" primrec - "the_Intg (Intg i) = i" + "the_Intg (Intg i) = i" primrec - "the_Addr (Addr a) = a" + "the_Addr (Addr a) = a" consts - defpval :: "prim_ty => val" (* default value for primitive types *) - default_val :: "ty => val" (* default value for all types *) + defpval :: "prim_ty => val" (* default value for primitive types *) + default_val :: "ty => val" (* default value for all types *) primrec - "defpval Void = Unit" - "defpval Boolean = Bool False" - "defpval Integer = Intg (#0)" + "defpval Void = Unit" + "defpval Boolean = Bool False" + "defpval Integer = Intg (#0)" primrec - "default_val (PrimT pt) = defpval pt" - "default_val (RefT r ) = Null" + "default_val (PrimT pt) = defpval pt" + "default_val (RefT r ) = Null" end diff -r 4522e59b7d84 -r fe82134773dc src/HOL/MicroJava/J/WellForm.thy --- a/src/HOL/MicroJava/J/WellForm.thy Fri Sep 22 16:28:04 2000 +0200 +++ b/src/HOL/MicroJava/J/WellForm.thy Fri Sep 22 16:28:53 2000 +0200 @@ -19,17 +19,16 @@ types 'c wf_mb = 'c prog => cname => 'c mdecl => bool constdefs - - wf_fdecl :: "'c prog => fdecl => bool" + wf_fdecl :: "'c prog => fdecl => bool" "wf_fdecl G == \\(fn,ft). is_type G ft" - wf_mhead :: "'c prog => sig => ty => bool" + wf_mhead :: "'c prog => sig => ty => bool" "wf_mhead G == \\(mn,pTs) rT. (\\T\\set pTs. is_type G T) \\ is_type G rT" - wf_mdecl :: "'c wf_mb => 'c wf_mb" + wf_mdecl :: "'c wf_mb => 'c wf_mb" "wf_mdecl wf_mb G C == \\(sig,rT,mb). wf_mhead G sig rT \\ wf_mb G C (sig,rT,mb)" - wf_cdecl :: "'c wf_mb => 'c prog => 'c cdecl => bool" + wf_cdecl :: "'c wf_mb => 'c prog => 'c cdecl => bool" "wf_cdecl wf_mb G == \\(C,(sc,fs,ms)). (\\f\\set fs. wf_fdecl G f ) \\ unique fs \\ @@ -40,7 +39,7 @@ (\\(sig,rT,b)\\set ms. \\D' rT' b'. method(G,D) sig = Some(D',rT',b') --> G\\rT\\rT'))" - wf_prog :: "'c wf_mb => 'c prog => bool" + wf_prog :: "'c wf_mb => 'c prog => bool" "wf_prog wf_mb G == let cs = set G in ObjectC \\ cs \\ (\\c\\cs. wf_cdecl wf_mb G c) \\ unique G" diff -r 4522e59b7d84 -r fe82134773dc src/HOL/MicroJava/J/WellType.thy --- a/src/HOL/MicroJava/J/WellType.thy Fri Sep 22 16:28:04 2000 +0200 +++ b/src/HOL/MicroJava/J/WellType.thy Fri Sep 22 16:28:53 2000 +0200 @@ -23,26 +23,22 @@ = "'c prog \\ lenv" syntax - - prg :: "'c env => 'c prog" - localT :: "'c env => (vname \\ ty)" + prg :: "'c env => 'c prog" + localT :: "'c env => (vname \\ ty)" translations - - "prg" => "fst" - "localT" => "snd" + "prg" => "fst" + "localT" => "snd" consts - - more_spec :: "'c prog => (ty \\ 'x) \\ ty list => - (ty \\ 'x) \\ ty list => bool" - appl_methds :: "'c prog => cname => sig => ((ty \\ ty) \\ ty list) set" - max_spec :: "'c prog => cname => sig => ((ty \\ ty) \\ ty list) set" + more_spec :: "'c prog => (ty \\ 'x) \\ ty list => + (ty \\ 'x) \\ ty list => bool" + appl_methds :: "'c prog => cname => sig => ((ty \\ ty) \\ ty list) set" + max_spec :: "'c prog => cname => sig => ((ty \\ ty) \\ ty list) set" defs - - more_spec_def "more_spec G == \\((d,h),pTs). \\((d',h'),pTs'). G\\d\\d' \\ - list_all2 (\\T T'. G\\T\\T') pTs pTs'" + more_spec_def "more_spec G == \\((d,h),pTs). \\((d',h'),pTs'). G\\d\\d' \\ + list_all2 (\\T T'. G\\T\\T') pTs pTs'" (* applicable methods, cf. 15.11.2.1 *) appl_methds_def "appl_methds G C == \\(mn, pTs). @@ -51,11 +47,11 @@ list_all2 (\\T T'. G\\T\\T') pTs pTs'}" (* maximally specific methods, cf. 15.11.2.2 *) - max_spec_def "max_spec G C sig == {m. m \\appl_methds G C sig \\ - (\\m'\\appl_methds G C sig. - more_spec G m' m --> m' = m)}" + max_spec_def "max_spec G C sig == {m. m \\appl_methds G C sig \\ + (\\m'\\appl_methds G C sig. + more_spec G m' m --> m' = m)}" + consts - typeof :: "(loc => ty option) => val => ty option" primrec @@ -70,16 +66,20 @@ (* method body with parameter names, local variables, block, result expression *) consts - ty_expr :: "java_mb env => (expr \\ ty ) set" ty_exprs:: "java_mb env => (expr list \\ ty list) set" wt_stmt :: "java_mb env => stmt set" syntax + ty_expr :: "java_mb env => [expr , ty ] => bool" ("_ \\ _ :: _" [51,51,51]50) + ty_exprs:: "java_mb env => [expr list, ty list] => bool" ("_ \\ _ [::] _" [51,51,51]50) + wt_stmt :: "java_mb env => stmt => bool" ("_ \\ _ \\" [51,51 ]50) -ty_expr :: "java_mb env => [expr , ty ] => bool" ("_\\_::_" [51,51,51]50) -ty_exprs:: "java_mb env => [expr list, ty list] => bool" ("_\\_[::]_"[51,51,51]50) -wt_stmt :: "java_mb env => stmt => bool" ("_\\_ \\" [51,51 ]50) +syntax (HTML) + ty_expr :: "java_mb env => [expr , ty ] => bool" ("_ |- _ :: _" [51,51,51]50) + ty_exprs:: "java_mb env => [expr list, ty list] => bool" ("_ |- _ [::] _" [51,51,51]50) + wt_stmt :: "java_mb env => stmt => bool" ("_ |- _ [ok]" [51,51 ]50) + translations "E\\e :: T" == "(e,T) \\ ty_expr E" @@ -91,84 +91,84 @@ (* well-typed expressions *) (* cf. 15.8 *) - NewC "[|is_class (prg E) C|] ==> - E\\NewC C::Class C" + NewC "[| is_class (prg E) C |] ==> + E\\NewC C::Class C" (* cf. 15.15 *) - Cast "[|E\\e::Class C; - prg E\\C\\? D|] ==> - E\\Cast D e::Class D" + 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|] ==> - E\\Lit x::T" + Lit "[| typeof (\\v. None) x = Some T |] ==> + E\\Lit x::T" (* cf. 15.13.1 *) - LAcc "[|localT E v = Some T; is_type (prg E) T|] ==> - E\\LAcc v::T" + LAcc "[| localT E v = Some T; is_type (prg E) T |] ==> + E\\LAcc v::T" - BinOp "[|E\\e1::T; - E\\e2::T; - if bop = Eq then T' = PrimT Boolean - else T' = T \\ T = PrimT Integer|] ==> - E\\BinOp bop e1 e2::T'" + BinOp "[| E\\e1::T; + E\\e2::T; + if bop = Eq then T' = PrimT Boolean + else T' = T \\ T = PrimT Integer|] ==> + E\\BinOp bop e1 e2::T'" (* cf. 15.25, 15.25.1 *) - LAss "[|E\\LAcc v::T; - E\\e::T'; - prg E\\T'\\T|] ==> - E\\v::=e::T'" + LAss "[| E\\LAcc v::T; + E\\e::T'; + prg E\\T'\\T |] ==> + E\\v::=e::T'" (* cf. 15.10.1 *) - FAcc "[|E\\a::Class C; - field (prg E,C) fn = Some (fd,fT)|] ==> - E\\{fd}a..fn::fT" + FAcc "[| E\\a::Class C; + field (prg E,C) fn = Some (fd,fT) |] ==> + E\\{fd}a..fn::fT" (* cf. 15.25, 15.25.1 *) - FAss "[|E\\{fd}a..fn::T; - E\\v ::T'; - prg E\\T'\\T|] ==> - E\\{fd}a..fn:=v::T'" + FAss "[| E\\{fd}a..fn::T; + E\\v ::T'; + prg E\\T'\\T |] ==> + E\\{fd}a..fn:=v::T'" (* cf. 15.11.1, 15.11.2, 15.11.3 *) - Call "[|E\\a::Class C; - E\\ps[::]pTs; - max_spec (prg E) C (mn, pTs) = {((md,rT),pTs')}|] ==> - E\\a..mn({pTs'}ps)::rT" + Call "[| E\\a::Class C; + E\\ps[::]pTs; + max_spec (prg E) C (mn, pTs) = {((md,rT),pTs')} |] ==> + E\\a..mn({pTs'}ps)::rT" (* well-typed expression lists *) (* cf. 15.11.??? *) - Nil "E\\[][::][]" + Nil "E\\[][::][]" (* cf. 15.11.??? *) - Cons "[|E\\e::T; - E\\es[::]Ts|] ==> - E\\e#es[::]T#Ts" + Cons "[| E\\e::T; + E\\es[::]Ts |] ==> + E\\e#es[::]T#Ts" (* well-typed statements *) - Skip "E\\Skip\\" + Skip "E\\Skip\\" - Expr "[|E\\e::T|] ==> - E\\Expr e\\" + Expr "[| E\\e::T |] ==> + E\\Expr e\\" - Comp "[|E\\s1\\; - E\\s2\\|] ==> - E\\s1;; s2\\" + Comp "[| E\\s1\\; + E\\s2\\ |] ==> + E\\s1;; s2\\" (* cf. 14.8 *) - Cond "[|E\\e::PrimT Boolean; - E\\s1\\; - E\\s2\\|] ==> - E\\If(e) s1 Else s2\\" + Cond "[| E\\e::PrimT Boolean; + E\\s1\\; + E\\s2\\ |] ==> + E\\If(e) s1 Else s2\\" (* cf. 14.10 *) - Loop "[|E\\e::PrimT Boolean; - E\\s\\|] ==> - E\\While(e) s\\" + Loop "[| E\\e::PrimT Boolean; + E\\s\\ |] ==> + E\\While(e) s\\" constdefs