src/HOL/MicroJava/J/Type.thy
author wenzelm
Sat, 02 Jan 2016 18:48:45 +0100
changeset 62042 6c6ccf573479
parent 61361 8b5f00202e1a
child 67443 3abf6a722518
permissions -rw-r--r--
isabelle update_cartouches -c -t;
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
61361
8b5f00202e1a isabelle update_cartouches;
wenzelm
parents: 61169
diff changeset
     6
section \<open>Java types\<close>
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
62042
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 61361
diff changeset
    20
text \<open>These instantiations only ensure that the merge in theory \<open>MicroJava\<close> succeeds. FIXME\<close>
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
62042
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 61361
diff changeset
    47
 \<comment> "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
62042
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 61361
diff changeset
    54
\<comment> "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
62042
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 61361
diff changeset
    60
typedecl vnam   \<comment> "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
62042
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 61361
diff changeset
    95
typedecl mname  \<comment> "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
62042
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 61361
diff changeset
   130
\<comment> "names for \<open>This\<close> 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
62042
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 61361
diff changeset
   135
\<comment> "primitive type, cf. 4.2"
58310
91ea607a34d8 updated news
blanchet
parents: 58249
diff changeset
   136
datatype prim_ty 
62042
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 61361
diff changeset
   137
  = Void          \<comment> "'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
62042
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 61361
diff changeset
   141
\<comment> "reference type, cf. 4.3"
58310
91ea607a34d8 updated news
blanchet
parents: 58249
diff changeset
   142
datatype ref_ty   
62042
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 61361
diff changeset
   143
  = NullT         \<comment> "null type, cf. 4.1"
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 61361
diff changeset
   144
  | ClassT cname  \<comment> "class type"
10061
fe82134773dc added HTML syntax; added spaces in normal syntax for better documents
kleing
parents: 10042
diff changeset
   145
62042
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 61361
diff changeset
   146
\<comment> "any type, cf. 4.1"
58310
91ea607a34d8 updated news
blanchet
parents: 58249
diff changeset
   147
datatype ty 
62042
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 61361
diff changeset
   148
  = PrimT prim_ty \<comment> "primitive type"
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 61361
diff changeset
   149
  | RefT  ref_ty  \<comment> "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