src/HOL/NanoJava/Decl.thy
author avigad
Fri, 17 Jul 2009 13:12:18 -0400
changeset 32047 c141f139ce26
parent 18551 be0705186ff5
child 32960 69916a850301
permissions -rw-r--r--
Changed fact_Suc_nat back to fact_Suc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11376
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
     1
(*  Title:      HOL/NanoJava/Decl.thy
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
     2
    ID:         $Id$
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
     3
    Author:     David von Oheimb
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
     4
    Copyright   2001 Technische Universitaet Muenchen
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
     5
*)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
     6
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
     7
header "Types, class Declarations, and whole programs"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
     8
16417
9bc16273c2d4 migrated theory headers to new format
haftmann
parents: 14134
diff changeset
     9
theory Decl imports Term begin
11376
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    10
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    11
datatype ty
11558
6539627881e8 simplified vnam/vname, introduced fname, improved comments
oheimb
parents: 11486
diff changeset
    12
  = NT           --{* null type  *}
6539627881e8 simplified vnam/vname, introduced fname, improved comments
oheimb
parents: 11486
diff changeset
    13
  | Class cname  --{* class type *}
11376
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    14
11565
ab004c0ecc63 Minor improvements, added Example
oheimb
parents: 11558
diff changeset
    15
text{* Field declaration *}
11558
6539627881e8 simplified vnam/vname, introduced fname, improved comments
oheimb
parents: 11486
diff changeset
    16
types	fdecl		
6539627881e8 simplified vnam/vname, introduced fname, improved comments
oheimb
parents: 11486
diff changeset
    17
	= "fname \<times> ty"
11376
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    18
11558
6539627881e8 simplified vnam/vname, introduced fname, improved comments
oheimb
parents: 11486
diff changeset
    19
record  methd		
11376
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    20
	= par :: ty 
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    21
          res :: ty 
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    22
          lcl ::"(vname \<times> ty) list"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    23
          bdy :: stmt
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    24
11565
ab004c0ecc63 Minor improvements, added Example
oheimb
parents: 11558
diff changeset
    25
text{* Method declaration *}
11558
6539627881e8 simplified vnam/vname, introduced fname, improved comments
oheimb
parents: 11486
diff changeset
    26
types	mdecl
11376
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    27
        = "mname \<times> methd"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    28
18551
be0705186ff5 class now an keyword, quoted where necessary
haftmann
parents: 16417
diff changeset
    29
record	"class"
11376
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    30
	= super   :: cname
12264
9c356e2da72f renamed "fields" to "flds" (avoid clash with new "fields" operation);
wenzelm
parents: 11565
diff changeset
    31
          flds    ::"fdecl list"
11376
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    32
          methods ::"mdecl list"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    33
11565
ab004c0ecc63 Minor improvements, added Example
oheimb
parents: 11558
diff changeset
    34
text{* Class declaration *}
11558
6539627881e8 simplified vnam/vname, introduced fname, improved comments
oheimb
parents: 11486
diff changeset
    35
types	cdecl
11376
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    36
	= "cname \<times> class"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    37
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    38
types   prog
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    39
        = "cdecl list"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    40
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    41
translations
11558
6539627881e8 simplified vnam/vname, introduced fname, improved comments
oheimb
parents: 11486
diff changeset
    42
  "fdecl" \<leftharpoondown> (type)"fname \<times> ty"
11376
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    43
  "mdecl" \<leftharpoondown> (type)"mname \<times> ty \<times> ty \<times> stmt"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    44
  "class" \<leftharpoondown> (type)"cname \<times> fdecl list \<times> mdecl list"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    45
  "cdecl" \<leftharpoondown> (type)"cname \<times> class"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    46
  "prog " \<leftharpoondown> (type)"cdecl list"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    47
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    48
consts
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    49
11558
6539627881e8 simplified vnam/vname, introduced fname, improved comments
oheimb
parents: 11486
diff changeset
    50
  Prog    :: prog	--{* program as a global value *}
6539627881e8 simplified vnam/vname, introduced fname, improved comments
oheimb
parents: 11486
diff changeset
    51
  Object  :: cname	--{* name of root class *}
11376
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    52
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    53
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    54
constdefs
18551
be0705186ff5 class now an keyword, quoted where necessary
haftmann
parents: 16417
diff changeset
    55
  "class"	     :: "cname \<rightharpoonup> class"
11376
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    56
 "class      \<equiv> map_of Prog"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    57
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    58
  is_class   :: "cname => bool"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    59
 "is_class C \<equiv> class C \<noteq> None"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    60
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    61
lemma finite_is_class: "finite {C. is_class C}"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    62
apply (unfold is_class_def class_def)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    63
apply (fold dom_def)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    64
apply (rule finite_dom_map_of)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    65
done
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    66
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    67
end