src/HOL/MicroJava/J/Type.thy
author wenzelm
Sun, 13 Sep 2015 22:56:52 +0200
changeset 61169 4de9ff3ea29a
parent 58886 8a6cac7c7247
child 61361 8b5f00202e1a
permissions -rw-r--r--
tuned proofs -- less legacy;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     1
(*  Title:      HOL/MicroJava/J/Type.thy
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     2
    Author:     David von Oheimb
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     3
    Copyright   1999 Technische Universitaet Muenchen
11070
cc421547e744 improved document (added headers etc)
oheimb
parents: 11026
diff changeset
     4
*)
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     5
58886
8a6cac7c7247 modernized header;
wenzelm
parents: 58310
diff changeset
     6
section {* Java types *}
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     7
16417
9bc16273c2d4 migrated theory headers to new format
haftmann
parents: 12951
diff changeset
     8
theory Type imports JBasis begin
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     9
12517
360e3215f029 exception merge, cleanup, tuned
kleing
parents: 12338
diff changeset
    10
typedecl cnam 
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    11
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    12
instantiation cnam :: equal
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    13
begin
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    14
44035
322d1657c40c replace old SML code generator by new code generator in MicroJava/JVM and /BV
Andreas Lochbihler
parents: 35102
diff changeset
    15
definition "HOL.equal (cn :: cnam) cn' \<longleftrightarrow> cn = cn'"
61169
4de9ff3ea29a tuned proofs -- less legacy;
wenzelm
parents: 58886
diff changeset
    16
instance by standard (simp add: equal_cnam_def)
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    17
44035
322d1657c40c replace old SML code generator by new code generator in MicroJava/JVM and /BV
Andreas Lochbihler
parents: 35102
diff changeset
    18
end
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    19
44037
25011c3a5c3d replace old SML code generator by new code generator in MicroJava/J
Andreas Lochbihler
parents: 44035
diff changeset
    20
text {* These instantiations only ensure that the merge in theory @{text "MicroJava"} succeeds. FIXME *}
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    21
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    22
instantiation cnam :: typerep
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    23
begin
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    24
44037
25011c3a5c3d replace old SML code generator by new code generator in MicroJava/J
Andreas Lochbihler
parents: 44035
diff changeset
    25
definition "typerep_class.typerep \<equiv> \<lambda>_ :: cnam itself. Typerep.Typerep (STR ''Type.cnam'') []"
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    26
instance ..
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    27
44037
25011c3a5c3d replace old SML code generator by new code generator in MicroJava/J
Andreas Lochbihler
parents: 44035
diff changeset
    28
end
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    29
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    30
instantiation cnam :: term_of
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    31
begin
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    32
44037
25011c3a5c3d replace old SML code generator by new code generator in MicroJava/J
Andreas Lochbihler
parents: 44035
diff changeset
    33
definition "term_of_class.term_of (C :: cnam) \<equiv> 
25011c3a5c3d replace old SML code generator by new code generator in MicroJava/J
Andreas Lochbihler
parents: 44035
diff changeset
    34
  Code_Evaluation.Const (STR ''dummy_cnam'') (Typerep.Typerep (STR ''Type.cnam'') [])"
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    35
instance ..
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    36
44037
25011c3a5c3d replace old SML code generator by new code generator in MicroJava/J
Andreas Lochbihler
parents: 44035
diff changeset
    37
end
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    38
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    39
instantiation cnam :: partial_term_of
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    40
begin
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    41
44037
25011c3a5c3d replace old SML code generator by new code generator in MicroJava/J
Andreas Lochbihler
parents: 44035
diff changeset
    42
definition "partial_term_of_class.partial_term_of (C :: cnam itself) n = undefined"
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    43
instance ..
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    44
44037
25011c3a5c3d replace old SML code generator by new code generator in MicroJava/J
Andreas Lochbihler
parents: 44035
diff changeset
    45
end
12517
360e3215f029 exception merge, cleanup, tuned
kleing
parents: 12338
diff changeset
    46
360e3215f029 exception merge, cleanup, tuned
kleing
parents: 12338
diff changeset
    47
 -- "exceptions"
58310
91ea607a34d8 updated news
blanchet
parents: 58249
diff changeset
    48
datatype 
12517
360e3215f029 exception merge, cleanup, tuned
kleing
parents: 12338
diff changeset
    49
  xcpt   
360e3215f029 exception merge, cleanup, tuned
kleing
parents: 12338
diff changeset
    50
  = NullPointer
360e3215f029 exception merge, cleanup, tuned
kleing
parents: 12338
diff changeset
    51
  | ClassCast
360e3215f029 exception merge, cleanup, tuned
kleing
parents: 12338
diff changeset
    52
  | OutOfMemory
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    53
12517
360e3215f029 exception merge, cleanup, tuned
kleing
parents: 12338
diff changeset
    54
-- "class names"
58310
91ea607a34d8 updated news
blanchet
parents: 58249
diff changeset
    55
datatype cname  
12517
360e3215f029 exception merge, cleanup, tuned
kleing
parents: 12338
diff changeset
    56
  = Object 
360e3215f029 exception merge, cleanup, tuned
kleing
parents: 12338
diff changeset
    57
  | Xcpt xcpt 
12951
a9fdcb71d252 introduces SystemClasses and BVExample
kleing
parents: 12911
diff changeset
    58
  | Cname cnam 
12517
360e3215f029 exception merge, cleanup, tuned
kleing
parents: 12338
diff changeset
    59
360e3215f029 exception merge, cleanup, tuned
kleing
parents: 12338
diff changeset
    60
typedecl vnam   -- "variable or field name"
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    61
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    62
instantiation vnam :: equal
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    63
begin
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    64
44035
322d1657c40c replace old SML code generator by new code generator in MicroJava/JVM and /BV
Andreas Lochbihler
parents: 35102
diff changeset
    65
definition "HOL.equal (vn :: vnam) vn' \<longleftrightarrow> vn = vn'"
61169
4de9ff3ea29a tuned proofs -- less legacy;
wenzelm
parents: 58886
diff changeset
    66
instance by standard (simp add: equal_vnam_def)
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    67
44035
322d1657c40c replace old SML code generator by new code generator in MicroJava/JVM and /BV
Andreas Lochbihler
parents: 35102
diff changeset
    68
end
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    69
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    70
instantiation vnam :: typerep
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    71
begin
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    72
44037
25011c3a5c3d replace old SML code generator by new code generator in MicroJava/J
Andreas Lochbihler
parents: 44035
diff changeset
    73
definition "typerep_class.typerep \<equiv> \<lambda>_ :: vnam itself. Typerep.Typerep (STR ''Type.vnam'') []"
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    74
instance ..
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    75
44037
25011c3a5c3d replace old SML code generator by new code generator in MicroJava/J
Andreas Lochbihler
parents: 44035
diff changeset
    76
end
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    77
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    78
instantiation vnam :: term_of
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    79
begin
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    80
44037
25011c3a5c3d replace old SML code generator by new code generator in MicroJava/J
Andreas Lochbihler
parents: 44035
diff changeset
    81
definition "term_of_class.term_of (V :: vnam) \<equiv> 
25011c3a5c3d replace old SML code generator by new code generator in MicroJava/J
Andreas Lochbihler
parents: 44035
diff changeset
    82
  Code_Evaluation.Const (STR ''dummy_vnam'') (Typerep.Typerep (STR ''Type.vnam'') [])"
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    83
instance ..
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    84
44037
25011c3a5c3d replace old SML code generator by new code generator in MicroJava/J
Andreas Lochbihler
parents: 44035
diff changeset
    85
end
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    86
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    87
instantiation vnam :: partial_term_of
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    88
begin
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    89
44037
25011c3a5c3d replace old SML code generator by new code generator in MicroJava/J
Andreas Lochbihler
parents: 44035
diff changeset
    90
definition "partial_term_of_class.partial_term_of (V :: vnam itself) n = undefined"
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    91
instance ..
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    92
44037
25011c3a5c3d replace old SML code generator by new code generator in MicroJava/J
Andreas Lochbihler
parents: 44035
diff changeset
    93
end
44035
322d1657c40c replace old SML code generator by new code generator in MicroJava/JVM and /BV
Andreas Lochbihler
parents: 35102
diff changeset
    94
12517
360e3215f029 exception merge, cleanup, tuned
kleing
parents: 12338
diff changeset
    95
typedecl mname  -- "method name"
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    96
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    97
instantiation mname :: equal
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    98
begin
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
    99
44035
322d1657c40c replace old SML code generator by new code generator in MicroJava/JVM and /BV
Andreas Lochbihler
parents: 35102
diff changeset
   100
definition "HOL.equal (M :: mname) M' \<longleftrightarrow> M = M'"
61169
4de9ff3ea29a tuned proofs -- less legacy;
wenzelm
parents: 58886
diff changeset
   101
instance by standard (simp add: equal_mname_def)
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
   102
44035
322d1657c40c replace old SML code generator by new code generator in MicroJava/JVM and /BV
Andreas Lochbihler
parents: 35102
diff changeset
   103
end
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
   104
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
   105
instantiation mname :: typerep
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
   106
begin
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
   107
44037
25011c3a5c3d replace old SML code generator by new code generator in MicroJava/J
Andreas Lochbihler
parents: 44035
diff changeset
   108
definition "typerep_class.typerep \<equiv> \<lambda>_ :: mname itself. Typerep.Typerep (STR ''Type.mname'') []"
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
   109
instance ..
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
   110
44037
25011c3a5c3d replace old SML code generator by new code generator in MicroJava/J
Andreas Lochbihler
parents: 44035
diff changeset
   111
end
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
   112
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
   113
instantiation mname :: term_of
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
   114
begin
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
   115
44037
25011c3a5c3d replace old SML code generator by new code generator in MicroJava/J
Andreas Lochbihler
parents: 44035
diff changeset
   116
definition "term_of_class.term_of (M :: mname) \<equiv> 
25011c3a5c3d replace old SML code generator by new code generator in MicroJava/J
Andreas Lochbihler
parents: 44035
diff changeset
   117
  Code_Evaluation.Const (STR ''dummy_mname'') (Typerep.Typerep (STR ''Type.mname'') [])"
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
   118
instance ..
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
   119
44037
25011c3a5c3d replace old SML code generator by new code generator in MicroJava/J
Andreas Lochbihler
parents: 44035
diff changeset
   120
end
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
   121
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
   122
instantiation mname :: partial_term_of
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
   123
begin
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
   124
44037
25011c3a5c3d replace old SML code generator by new code generator in MicroJava/J
Andreas Lochbihler
parents: 44035
diff changeset
   125
definition "partial_term_of_class.partial_term_of (M :: mname itself) n = undefined"
47394
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
   126
instance ..
a360406f1fcb tuned proofs;
wenzelm
parents: 44037
diff changeset
   127
44037
25011c3a5c3d replace old SML code generator by new code generator in MicroJava/J
Andreas Lochbihler
parents: 44035
diff changeset
   128
end
12517
360e3215f029 exception merge, cleanup, tuned
kleing
parents: 12338
diff changeset
   129
360e3215f029 exception merge, cleanup, tuned
kleing
parents: 12338
diff changeset
   130
-- "names for @{text This} pointer and local/field variables"
58310
91ea607a34d8 updated news
blanchet
parents: 58249
diff changeset
   131
datatype vname 
10061
fe82134773dc added HTML syntax; added spaces in normal syntax for better documents
kleing
parents: 10042
diff changeset
   132
  = This
fe82134773dc added HTML syntax; added spaces in normal syntax for better documents
kleing
parents: 10042
diff changeset
   133
  | VName vnam
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   134
12517
360e3215f029 exception merge, cleanup, tuned
kleing
parents: 12338
diff changeset
   135
-- "primitive type, cf. 4.2"
58310
91ea607a34d8 updated news
blanchet
parents: 58249
diff changeset
   136
datatype prim_ty 
12517
360e3215f029 exception merge, cleanup, tuned
kleing
parents: 12338
diff changeset
   137
  = Void          -- "'result type' of void methods"
10061
fe82134773dc added HTML syntax; added spaces in normal syntax for better documents
kleing
parents: 10042
diff changeset
   138
  | Boolean
fe82134773dc added HTML syntax; added spaces in normal syntax for better documents
kleing
parents: 10042
diff changeset
   139
  | Integer
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   140
12517
360e3215f029 exception merge, cleanup, tuned
kleing
parents: 12338
diff changeset
   141
-- "reference type, cf. 4.3"
58310
91ea607a34d8 updated news
blanchet
parents: 58249
diff changeset
   142
datatype ref_ty   
12517
360e3215f029 exception merge, cleanup, tuned
kleing
parents: 12338
diff changeset
   143
  = NullT         -- "null type, cf. 4.1"
360e3215f029 exception merge, cleanup, tuned
kleing
parents: 12338
diff changeset
   144
  | ClassT cname  -- "class type"
10061
fe82134773dc added HTML syntax; added spaces in normal syntax for better documents
kleing
parents: 10042
diff changeset
   145
12517
360e3215f029 exception merge, cleanup, tuned
kleing
parents: 12338
diff changeset
   146
-- "any type, cf. 4.1"
58310
91ea607a34d8 updated news
blanchet
parents: 58249
diff changeset
   147
datatype ty 
12517
360e3215f029 exception merge, cleanup, tuned
kleing
parents: 12338
diff changeset
   148
  = PrimT prim_ty -- "primitive type"
360e3215f029 exception merge, cleanup, tuned
kleing
parents: 12338
diff changeset
   149
  | RefT  ref_ty  -- "reference type"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   150
35102
cc7a0b9f938c modernized translations;
wenzelm
parents: 16417
diff changeset
   151
abbreviation NT :: ty
cc7a0b9f938c modernized translations;
wenzelm
parents: 16417
diff changeset
   152
  where "NT == RefT NullT"
10061
fe82134773dc added HTML syntax; added spaces in normal syntax for better documents
kleing
parents: 10042
diff changeset
   153
35102
cc7a0b9f938c modernized translations;
wenzelm
parents: 16417
diff changeset
   154
abbreviation Class :: "cname  => ty"
cc7a0b9f938c modernized translations;
wenzelm
parents: 16417
diff changeset
   155
  where "Class C == RefT (ClassT C)"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   156
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   157
end