src/HOL/MicroJava/J/WellForm.thy
author nipkow
Mon, 02 Oct 2000 12:35:48 +0200
changeset 10119 20c9590bb5f5
parent 10069 c7226e6f9625
child 10613 78b1d6c3ee9c
permissions -rw-r--r--
separated expr and stmt
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     1
(*  Title:      HOL/MicroJava/J/WellForm.thy
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     2
    ID:         $Id$
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     3
    Author:     David von Oheimb
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     4
    Copyright   1999 Technische Universitaet Muenchen
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     5
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     6
Well-formedness of Java programs
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     7
for static checks on expressions and statements, see WellType.thy
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     8
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     9
improvements over Java Specification 1.0 (cf. 8.4.6.3, 8.4.6.4, 9.4.1):
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    10
* a method implementing or overwriting another method may have a result type 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    11
  that widens to the result type of the other method (instead of identical type)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    12
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    13
simplifications:
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    14
* for uniformity, Object is assumed to be declared like any other class
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    15
*)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    16
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    17
WellForm = TypeRel +
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    18
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
    19
types 'c wf_mb = 'c prog => cname => 'c mdecl => bool
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    20
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    21
constdefs
10069
c7226e6f9625 untabified for HTML
kleing
parents: 10061
diff changeset
    22
 wf_fdecl :: "'c prog => fdecl => bool"
10042
7164dc0d24d8 unsymbolized
kleing
parents: 8106
diff changeset
    23
"wf_fdecl G == \\<lambda>(fn,ft). is_type G ft"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    24
10069
c7226e6f9625 untabified for HTML
kleing
parents: 10061
diff changeset
    25
 wf_mhead :: "'c prog => sig => ty => bool"
10042
7164dc0d24d8 unsymbolized
kleing
parents: 8106
diff changeset
    26
"wf_mhead G == \\<lambda>(mn,pTs) rT. (\\<forall>T\\<in>set pTs. is_type G T) \\<and> is_type G rT"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    27
10061
fe82134773dc added HTML syntax; added spaces in normal syntax for better documents
kleing
parents: 10042
diff changeset
    28
 wf_mdecl :: "'c wf_mb => 'c wf_mb"
10042
7164dc0d24d8 unsymbolized
kleing
parents: 8106
diff changeset
    29
"wf_mdecl wf_mb G C == \\<lambda>(sig,rT,mb). wf_mhead G sig rT \\<and> wf_mb G C (sig,rT,mb)"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    30
10061
fe82134773dc added HTML syntax; added spaces in normal syntax for better documents
kleing
parents: 10042
diff changeset
    31
 wf_cdecl :: "'c wf_mb => 'c prog => 'c cdecl => bool"
10042
7164dc0d24d8 unsymbolized
kleing
parents: 8106
diff changeset
    32
"wf_cdecl wf_mb G ==
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    33
   \\<lambda>(C,(sc,fs,ms)).
10069
c7226e6f9625 untabified for HTML
kleing
parents: 10061
diff changeset
    34
  (\\<forall>f\\<in>set fs. wf_fdecl G   f    ) \\<and>  unique fs \\<and>
c7226e6f9625 untabified for HTML
kleing
parents: 10061
diff changeset
    35
  (\\<forall>m\\<in>set ms. wf_mdecl wf_mb G C m) \\<and>  unique ms \\<and>
c7226e6f9625 untabified for HTML
kleing
parents: 10061
diff changeset
    36
  (case sc of None => C = Object
10042
7164dc0d24d8 unsymbolized
kleing
parents: 8106
diff changeset
    37
         | Some D =>
8106
de9fae0cdfde improved symbol for subcls relation
oheimb
parents: 8082
diff changeset
    38
             is_class G D \\<and>  \\<not>  G\\<turnstile>D\\<preceq>C C \\<and>
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    39
             (\\<forall>(sig,rT,b)\\<in>set ms. \\<forall>D' rT' b'.
10042
7164dc0d24d8 unsymbolized
kleing
parents: 8106
diff changeset
    40
                 method(G,D) sig = Some(D',rT',b') --> G\\<turnstile>rT\\<preceq>rT'))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    41
10061
fe82134773dc added HTML syntax; added spaces in normal syntax for better documents
kleing
parents: 10042
diff changeset
    42
 wf_prog :: "'c wf_mb => 'c prog => bool"
10042
7164dc0d24d8 unsymbolized
kleing
parents: 8106
diff changeset
    43
"wf_prog wf_mb G ==
8082
381716a86fcb removed inj_eq from the default simpset again
oheimb
parents: 8034
diff changeset
    44
   let cs = set G in ObjectC \\<in> cs \\<and> (\\<forall>c\\<in>cs. wf_cdecl wf_mb G c) \\<and> unique G"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    45
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    46
end