src/HOL/Bali/Example.thy
author nipkow
Fri, 15 Jun 2018 13:02:12 +0200
changeset 68451 c34aa23a1fb6
parent 67613 ce654b0e6d69
child 69597 ff784d5a5bfb
permissions -rw-r--r--
empty -> Map.empty
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12857
a4386cc9b1c3 tuned header;
wenzelm
parents: 12854
diff changeset
     1
(*  Title:      HOL/Bali/Example.thy
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
     2
    Author:     David von Oheimb
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
     3
*)
62042
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 61424
diff changeset
     4
subsection \<open>Example Bali program\<close>
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
     5
33965
f57c11db4ad4 Inl and Inr now with authentic syntax
haftmann
parents: 32960
diff changeset
     6
theory Example
f57c11db4ad4 Inl and Inr now with authentic syntax
haftmann
parents: 32960
diff changeset
     7
imports Eval WellForm
f57c11db4ad4 Inl and Inr now with authentic syntax
haftmann
parents: 32960
diff changeset
     8
begin
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
     9
62042
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 61424
diff changeset
    10
text \<open>
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    11
The following example Bali program includes:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    12
\begin{itemize}
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    13
\item class and interface declarations with inheritance, hiding of fields,
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    14
    overriding of methods (with refined result type), array type,
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    15
\item method call (with dynamic binding), parameter access, return expressions,
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    16
\item expression statements, sequential composition, literal values, 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    17
    local assignment, local access, field assignment, type cast,
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    18
\item exception generation and propagation, try and catch statement, throw 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    19
      statement
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    20
\item instance creation and (default) static initialization
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    21
\end{itemize}
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    22
\begin{verbatim}
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    23
package java_lang
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    24
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    25
public interface HasFoo {
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    26
  public Base foo(Base z);
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    27
}
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    28
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    29
public class Base implements HasFoo {
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    30
  static boolean arr[] = new boolean[2];
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    31
  public HasFoo vee;
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    32
  public Base foo(Base z) {
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    33
    return z;
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    34
  }
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    35
}
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    36
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    37
public class Ext extends Base {
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    38
  public int vee;
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    39
  public Ext foo(Base z) {
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    40
    ((Ext)z).vee = 1;
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    41
    return null;
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    42
  }
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    43
}
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    44
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
    45
public class Main {
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    46
  public static void main(String args[]) throws Throwable {
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    47
    Base e = new Ext();
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    48
    try {e.foo(null); }
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    49
    catch(NullPointerException z) { 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    50
      while(Ext.arr[2]) ;
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    51
    }
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    52
  }
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    53
}
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    54
\end{verbatim}
62042
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 61424
diff changeset
    55
\<close>
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    56
declare widen.null [intro]
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    57
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    58
lemma wf_fdecl_def2: "\<And>fd. wf_fdecl G P fd = is_acc_type G P (type (snd fd))"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    59
apply (unfold wf_fdecl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    60
apply (simp (no_asm))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    61
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    62
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    63
declare wf_fdecl_def2 [iff]
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    64
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    65
58887
38db8ddc0f57 modernized header;
wenzelm
parents: 58310
diff changeset
    66
subsubsection "type and expression names"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    67
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    68
(** unfortunately cannot simply instantiate tnam **)
58310
91ea607a34d8 updated news
blanchet
parents: 58249
diff changeset
    69
datatype tnam'  = HasFoo' | Base' | Ext' | Main'
91ea607a34d8 updated news
blanchet
parents: 58249
diff changeset
    70
datatype vnam'  = arr' | vee' | z' | e'
91ea607a34d8 updated news
blanchet
parents: 58249
diff changeset
    71
datatype label' = lab1'
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    72
37956
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
    73
axiomatization
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
    74
  tnam' :: "tnam'  \<Rightarrow> tnam" and
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
    75
  vnam' :: "vnam'  \<Rightarrow> vname" and
22708
fff918feff45 avoid internal names;
wenzelm
parents: 21404
diff changeset
    76
  label':: "label' \<Rightarrow> label"
37956
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
    77
where
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
    78
  (** tnam', vnam' and label are intended to be isomorphic 
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    79
            to tnam, vname and label **)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    80
37956
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
    81
  inj_tnam'  [simp]: "\<And>x y. (tnam'  x = tnam'  y) = (x = y)" and
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
    82
  inj_vnam'  [simp]: "\<And>x y. (vnam'  x = vnam'  y) = (x = y)" and
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
    83
  inj_label' [simp]: "\<And>x y. (label' x = label' y) = (x = y)" and
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
    84
    
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
    85
  surj_tnam':  "\<And>n. \<exists>m. n = tnam'  m" and
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
    86
  surj_vnam':  "\<And>n. \<exists>m. n = vnam'  m" and
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
    87
  surj_label':" \<And>n. \<exists>m. n = label' m"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
    88
20769
5d538d3d5e2a replaced syntax/translations by abbreviation;
wenzelm
parents: 18576
diff changeset
    89
abbreviation
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 20769
diff changeset
    90
  HasFoo :: qtname where
22708
fff918feff45 avoid internal names;
wenzelm
parents: 21404
diff changeset
    91
  "HasFoo == \<lparr>pid=java_lang,tid=TName (tnam' HasFoo')\<rparr>"
20769
5d538d3d5e2a replaced syntax/translations by abbreviation;
wenzelm
parents: 18576
diff changeset
    92
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 20769
diff changeset
    93
abbreviation
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 20769
diff changeset
    94
  Base :: qtname where
22708
fff918feff45 avoid internal names;
wenzelm
parents: 21404
diff changeset
    95
  "Base == \<lparr>pid=java_lang,tid=TName (tnam' Base')\<rparr>"
20769
5d538d3d5e2a replaced syntax/translations by abbreviation;
wenzelm
parents: 18576
diff changeset
    96
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 20769
diff changeset
    97
abbreviation
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 20769
diff changeset
    98
  Ext :: qtname where
22708
fff918feff45 avoid internal names;
wenzelm
parents: 21404
diff changeset
    99
  "Ext == \<lparr>pid=java_lang,tid=TName (tnam' Ext')\<rparr>"
20769
5d538d3d5e2a replaced syntax/translations by abbreviation;
wenzelm
parents: 18576
diff changeset
   100
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 20769
diff changeset
   101
abbreviation
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 20769
diff changeset
   102
  Main :: qtname where
22708
fff918feff45 avoid internal names;
wenzelm
parents: 21404
diff changeset
   103
  "Main == \<lparr>pid=java_lang,tid=TName (tnam' Main')\<rparr>"
20769
5d538d3d5e2a replaced syntax/translations by abbreviation;
wenzelm
parents: 18576
diff changeset
   104
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 20769
diff changeset
   105
abbreviation
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 20769
diff changeset
   106
  arr :: vname where
22708
fff918feff45 avoid internal names;
wenzelm
parents: 21404
diff changeset
   107
  "arr == (vnam' arr')"
20769
5d538d3d5e2a replaced syntax/translations by abbreviation;
wenzelm
parents: 18576
diff changeset
   108
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 20769
diff changeset
   109
abbreviation
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 20769
diff changeset
   110
  vee :: vname where
22708
fff918feff45 avoid internal names;
wenzelm
parents: 21404
diff changeset
   111
  "vee == (vnam' vee')"
20769
5d538d3d5e2a replaced syntax/translations by abbreviation;
wenzelm
parents: 18576
diff changeset
   112
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 20769
diff changeset
   113
abbreviation
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 20769
diff changeset
   114
  z :: vname where
22708
fff918feff45 avoid internal names;
wenzelm
parents: 21404
diff changeset
   115
  "z == (vnam' z')"
20769
5d538d3d5e2a replaced syntax/translations by abbreviation;
wenzelm
parents: 18576
diff changeset
   116
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 20769
diff changeset
   117
abbreviation
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 20769
diff changeset
   118
  e :: vname where
22708
fff918feff45 avoid internal names;
wenzelm
parents: 21404
diff changeset
   119
  "e == (vnam' e')"
20769
5d538d3d5e2a replaced syntax/translations by abbreviation;
wenzelm
parents: 18576
diff changeset
   120
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 20769
diff changeset
   121
abbreviation
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 20769
diff changeset
   122
  lab1:: label where
22708
fff918feff45 avoid internal names;
wenzelm
parents: 21404
diff changeset
   123
  "lab1 == label' lab1'"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   124
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   125
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   126
lemma neq_Base_Object [simp]: "Base\<noteq>Object"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   127
by (simp add: Object_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   128
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   129
lemma neq_Ext_Object [simp]: "Ext\<noteq>Object"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   130
by (simp add: Object_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   131
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   132
lemma neq_Main_Object [simp]: "Main\<noteq>Object"
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   133
by (simp add: Object_def)
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   134
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   135
lemma neq_Base_SXcpt [simp]: "Base\<noteq>SXcpt xn"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   136
by (simp add: SXcpt_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   137
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   138
lemma neq_Ext_SXcpt [simp]: "Ext\<noteq>SXcpt xn"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   139
by (simp add: SXcpt_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   140
13524
604d0f3622d6 *** empty log message ***
wenzelm
parents: 12925
diff changeset
   141
lemma neq_Main_SXcpt [simp]: "Main\<noteq>SXcpt xn"
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   142
by (simp add: SXcpt_def)
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   143
62145
5b946c81dfbf eliminated old defs;
wenzelm
parents: 62042
diff changeset
   144
58887
38db8ddc0f57 modernized header;
wenzelm
parents: 58310
diff changeset
   145
subsubsection "classes and interfaces"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   146
62145
5b946c81dfbf eliminated old defs;
wenzelm
parents: 62042
diff changeset
   147
overloading
5b946c81dfbf eliminated old defs;
wenzelm
parents: 62042
diff changeset
   148
  Object_mdecls \<equiv> Object_mdecls
5b946c81dfbf eliminated old defs;
wenzelm
parents: 62042
diff changeset
   149
  SXcpt_mdecls \<equiv> SXcpt_mdecls
5b946c81dfbf eliminated old defs;
wenzelm
parents: 62042
diff changeset
   150
begin
5b946c81dfbf eliminated old defs;
wenzelm
parents: 62042
diff changeset
   151
  definition "Object_mdecls \<equiv> []"
5b946c81dfbf eliminated old defs;
wenzelm
parents: 62042
diff changeset
   152
  definition "SXcpt_mdecls  \<equiv> []"
5b946c81dfbf eliminated old defs;
wenzelm
parents: 62042
diff changeset
   153
end
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   154
37956
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   155
axiomatization  
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   156
  foo    :: mname
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   157
37956
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   158
definition
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   159
  foo_sig :: sig
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   160
  where "foo_sig = \<lparr>name=foo,parTs=[Class Base]\<rparr>"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   161
  
37956
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   162
definition
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   163
  foo_mhead :: mhead
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   164
  where "foo_mhead = \<lparr>access=Public,static=False,pars=[z],resT=Class Base\<rparr>"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   165
37956
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   166
definition
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   167
  Base_foo :: mdecl
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   168
  where "Base_foo = (foo_sig, \<lparr>access=Public,static=False,pars=[z],resT=Class Base,
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   169
                        mbody=\<lparr>lcls=[],stmt=Return (!!z)\<rparr>\<rparr>)"
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   170
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35067
diff changeset
   171
definition Ext_foo :: mdecl
37956
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   172
  where "Ext_foo = (foo_sig, 
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   173
              \<lparr>access=Public,static=False,pars=[z],resT=Class Ext,
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32456
diff changeset
   174
               mbody=\<lparr>lcls=[]
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   175
                     ,stmt=Expr({Ext,Ext,False}Cast (Class Ext) (!!z)..vee := 
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32456
diff changeset
   176
                                                             Lit (Intg 1)) ;;
13688
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   177
                                Return (Lit Null)\<rparr>
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32456
diff changeset
   178
              \<rparr>)"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   179
37956
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   180
definition
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   181
  arr_viewed_from :: "qtname \<Rightarrow> qtname \<Rightarrow> var"
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   182
  where "arr_viewed_from accC C = {accC,Base,True}StatRef (ClassT C)..arr"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   183
37956
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   184
definition
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   185
  BaseCl :: "class" where
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   186
  "BaseCl = \<lparr>access=Public,
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   187
           cfields=[(arr, \<lparr>access=Public,static=True ,type=PrimT Boolean.[]\<rparr>),
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32456
diff changeset
   188
                    (vee, \<lparr>access=Public,static=False,type=Iface HasFoo    \<rparr>)],
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   189
           methods=[Base_foo],
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   190
           init=Expr(arr_viewed_from Base Base 
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   191
                     :=New (PrimT Boolean)[Lit (Intg 2)]),
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   192
           super=Object,
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   193
           superIfs=[HasFoo]\<rparr>"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   194
  
37956
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   195
definition
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   196
  ExtCl  :: "class" where
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   197
  "ExtCl = \<lparr>access=Public,
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   198
           cfields=[(vee, \<lparr>access=Public,static=False,type= PrimT Integer\<rparr>)], 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   199
           methods=[Ext_foo],
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   200
           init=Skip,
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   201
           super=Base,
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   202
           superIfs=[]\<rparr>"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   203
37956
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   204
definition
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   205
  MainCl :: "class" where
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   206
  "MainCl = \<lparr>access=Public,
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   207
           cfields=[], 
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   208
           methods=[], 
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   209
           init=Skip,
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   210
           super=Object,
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   211
           superIfs=[]\<rparr>"
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   212
(* The "main" method is modeled seperately (see tprg) *)
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   213
37956
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   214
definition
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   215
  HasFooInt :: iface
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   216
  where "HasFooInt = \<lparr>access=Public,imethods=[(foo_sig, foo_mhead)],isuperIfs=[]\<rparr>"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   217
37956
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   218
definition
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   219
  Ifaces ::"idecl list"
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   220
  where "Ifaces = [(HasFoo,HasFooInt)]"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   221
37956
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   222
definition
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   223
  "Classes" ::"cdecl list"
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   224
  where "Classes = [(Base,BaseCl),(Ext,ExtCl),(Main,MainCl)]@standard_classes"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   225
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   226
lemmas table_classes_defs = 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   227
     Classes_def standard_classes_def ObjectC_def SXcptC_def
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   228
68451
c34aa23a1fb6 empty -> Map.empty
nipkow
parents: 67613
diff changeset
   229
lemma table_ifaces [simp]: "table_of Ifaces = Map.empty(HasFoo\<mapsto>HasFooInt)"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   230
apply (unfold Ifaces_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   231
apply (simp (no_asm))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   232
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   233
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   234
lemma table_classes_Object [simp]: 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   235
 "table_of Classes Object = Some \<lparr>access=Public,cfields=[]
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   236
                                 ,methods=Object_mdecls
28524
644b62cf678f arbitrary is undefined
haftmann
parents: 26480
diff changeset
   237
                                 ,init=Skip,super=undefined,superIfs=[]\<rparr>"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   238
apply (unfold table_classes_defs)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   239
apply (simp (no_asm) add:Object_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   240
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   241
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   242
lemma table_classes_SXcpt [simp]: 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   243
  "table_of Classes (SXcpt xn) 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   244
    = Some \<lparr>access=Public,cfields=[],methods=SXcpt_mdecls,
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   245
            init=Skip,
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   246
            super=if xn = Throwable then Object else SXcpt Throwable,
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   247
            superIfs=[]\<rparr>"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   248
apply (unfold table_classes_defs)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   249
apply (induct_tac xn)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   250
apply (simp add: Object_def SXcpt_def)+
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   251
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   252
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   253
lemma table_classes_HasFoo [simp]: "table_of Classes HasFoo = None"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   254
apply (unfold table_classes_defs)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   255
apply (simp (no_asm) add: Object_def SXcpt_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   256
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   257
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   258
lemma table_classes_Base [simp]: "table_of Classes Base = Some BaseCl"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   259
apply (unfold table_classes_defs )
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   260
apply (simp (no_asm) add: Object_def SXcpt_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   261
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   262
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   263
lemma table_classes_Ext [simp]: "table_of Classes Ext = Some ExtCl"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   264
apply (unfold table_classes_defs )
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   265
apply (simp (no_asm) add: Object_def SXcpt_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   266
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   267
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   268
lemma table_classes_Main [simp]: "table_of Classes Main = Some MainCl"
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   269
apply (unfold table_classes_defs )
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   270
apply (simp (no_asm) add: Object_def SXcpt_def)
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   271
done
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   272
58887
38db8ddc0f57 modernized header;
wenzelm
parents: 58310
diff changeset
   273
subsubsection "program"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   274
20769
5d538d3d5e2a replaced syntax/translations by abbreviation;
wenzelm
parents: 18576
diff changeset
   275
abbreviation
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 20769
diff changeset
   276
  tprg :: prog where
20769
5d538d3d5e2a replaced syntax/translations by abbreviation;
wenzelm
parents: 18576
diff changeset
   277
  "tprg == \<lparr>ifaces=Ifaces,classes=Classes\<rparr>"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   278
37956
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   279
definition
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   280
  test :: "(ty)list \<Rightarrow> stmt" where
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   281
  "test pTs = (e:==NewC Ext;; 
46212
d86ef6b96097 tuned white space;
wenzelm
parents: 39302
diff changeset
   282
           Try Expr({Main,ClassT Base,IntVir}!!e\<cdot>foo({pTs}[Lit Null]))
d86ef6b96097 tuned white space;
wenzelm
parents: 39302
diff changeset
   283
           Catch((SXcpt NullPointer) z)
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   284
           (lab1\<bullet> While(Acc 
37956
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
   285
                        (Acc (arr_viewed_from Main Ext).[Lit (Intg 2)])) Skip))"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   286
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   287
58887
38db8ddc0f57 modernized header;
wenzelm
parents: 58310
diff changeset
   288
subsubsection "well-structuredness"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   289
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 62390
diff changeset
   290
lemma not_Object_subcls_any [elim!]: "(Object, C) \<in> (subcls1 tprg)\<^sup>+ \<Longrightarrow> R"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   291
apply (auto dest!: tranclD subcls1D)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   292
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   293
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   294
lemma not_Throwable_subcls_SXcpt [elim!]: 
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 62390
diff changeset
   295
  "(SXcpt Throwable, SXcpt xn) \<in> (subcls1 tprg)\<^sup>+ \<Longrightarrow> R"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   296
apply (auto dest!: tranclD subcls1D) 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   297
apply (simp add: Object_def SXcpt_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   298
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   299
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   300
lemma not_SXcpt_n_subcls_SXcpt_n [elim!]: 
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 62390
diff changeset
   301
  "(SXcpt xn, SXcpt xn)  \<in> (subcls1 tprg)\<^sup>+ \<Longrightarrow> R"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   302
apply (auto dest!: tranclD subcls1D)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   303
apply (drule rtranclD)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   304
apply auto
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   305
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   306
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 62390
diff changeset
   307
lemma not_Base_subcls_Ext [elim!]: "(Base, Ext) \<in> (subcls1 tprg)\<^sup>+  \<Longrightarrow> R"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   308
apply (auto dest!: tranclD subcls1D simp add: BaseCl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   309
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   310
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   311
lemma not_TName_n_subcls_TName_n [rule_format (no_asm), elim!]: 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   312
  "(\<lparr>pid=java_lang,tid=TName tn\<rparr>, \<lparr>pid=java_lang,tid=TName tn\<rparr>) 
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 62390
diff changeset
   313
   \<in> (subcls1 tprg)\<^sup>+ \<longrightarrow> R"
22708
fff918feff45 avoid internal names;
wenzelm
parents: 21404
diff changeset
   314
apply (rule_tac n1 = "tn" in surj_tnam' [THEN exE])
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   315
apply (erule ssubst)
22708
fff918feff45 avoid internal names;
wenzelm
parents: 21404
diff changeset
   316
apply (rule tnam'.induct)
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   317
apply  safe
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   318
apply (auto dest!: tranclD subcls1D simp add: BaseCl_def ExtCl_def MainCl_def)
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   319
apply (drule rtranclD)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   320
apply auto
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   321
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   322
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   323
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   324
lemma ws_idecl_HasFoo: "ws_idecl tprg HasFoo []"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   325
apply (unfold ws_idecl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   326
apply (simp (no_asm))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   327
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   328
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   329
lemma ws_cdecl_Object: "ws_cdecl tprg Object any"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   330
apply (unfold ws_cdecl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   331
apply auto
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   332
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   333
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   334
lemma ws_cdecl_Throwable: "ws_cdecl tprg (SXcpt Throwable) Object"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   335
apply (unfold ws_cdecl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   336
apply auto
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   337
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   338
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   339
lemma ws_cdecl_SXcpt: "ws_cdecl tprg (SXcpt xn) (SXcpt Throwable)"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   340
apply (unfold ws_cdecl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   341
apply auto
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   342
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   343
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   344
lemma ws_cdecl_Base: "ws_cdecl tprg Base Object"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   345
apply (unfold ws_cdecl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   346
apply auto
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   347
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   348
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   349
lemma ws_cdecl_Ext: "ws_cdecl tprg Ext Base"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   350
apply (unfold ws_cdecl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   351
apply auto
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   352
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   353
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   354
lemma ws_cdecl_Main: "ws_cdecl tprg Main Object"
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   355
apply (unfold ws_cdecl_def)
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   356
apply auto
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   357
done
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   358
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   359
lemmas ws_cdecls = ws_cdecl_SXcpt ws_cdecl_Object ws_cdecl_Throwable
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   360
                   ws_cdecl_Base ws_cdecl_Ext ws_cdecl_Main
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   361
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   362
declare not_Object_subcls_any [rule del]
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   363
          not_Throwable_subcls_SXcpt [rule del] 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   364
          not_SXcpt_n_subcls_SXcpt_n [rule del] 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   365
          not_Base_subcls_Ext [rule del] not_TName_n_subcls_TName_n [rule del]
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   366
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   367
lemma ws_idecl_all: 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   368
 "G=tprg \<Longrightarrow> (\<forall>(I,i)\<in>set Ifaces. ws_idecl G I (isuperIfs i))"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   369
apply (simp (no_asm) add: Ifaces_def HasFooInt_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   370
apply (auto intro!: ws_idecl_HasFoo)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   371
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   372
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   373
lemma ws_cdecl_all: "G=tprg \<Longrightarrow> (\<forall>(C,c)\<in>set Classes. ws_cdecl G C (super c))"
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   374
apply (simp (no_asm) add: Classes_def BaseCl_def ExtCl_def MainCl_def)
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   375
apply (auto intro!: ws_cdecls simp add: standard_classes_def ObjectC_def 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   376
        SXcptC_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   377
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   378
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   379
lemma ws_tprg: "ws_prog tprg"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   380
apply (unfold ws_prog_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   381
apply (auto intro!: ws_idecl_all ws_cdecl_all)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   382
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   383
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   384
58887
38db8ddc0f57 modernized header;
wenzelm
parents: 58310
diff changeset
   385
subsubsection "misc program properties (independent of well-structuredness)"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   386
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   387
lemma single_iface [simp]: "is_iface tprg I = (I = HasFoo)"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   388
apply (unfold Ifaces_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   389
apply (simp (no_asm))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   390
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   391
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   392
lemma empty_subint1 [simp]: "subint1 tprg = {}"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   393
apply (unfold subint1_def Ifaces_def HasFooInt_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   394
apply auto
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   395
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   396
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   397
lemma unique_ifaces: "unique Ifaces"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   398
apply (unfold Ifaces_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   399
apply (simp (no_asm))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   400
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   401
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   402
lemma unique_classes: "unique Classes"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   403
apply (unfold table_classes_defs )
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   404
apply (simp )
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   405
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   406
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   407
lemma SXcpt_subcls_Throwable [simp]: "tprg\<turnstile>SXcpt xn\<preceq>\<^sub>C SXcpt Throwable"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   408
apply (rule SXcpt_subcls_Throwable_lemma)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   409
apply auto
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   410
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   411
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   412
lemma Ext_subclseq_Base [simp]: "tprg\<turnstile>Ext \<preceq>\<^sub>C Base"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   413
apply (rule subcls_direct1)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   414
apply  (simp (no_asm) add: ExtCl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   415
apply  (simp add: Object_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   416
apply (simp (no_asm))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   417
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   418
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   419
lemma Ext_subcls_Base [simp]: "tprg\<turnstile>Ext \<prec>\<^sub>C Base"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   420
apply (rule subcls_direct2)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   421
apply  (simp (no_asm) add: ExtCl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   422
apply  (simp add: Object_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   423
apply (simp (no_asm))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   424
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   425
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   426
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   427
58887
38db8ddc0f57 modernized header;
wenzelm
parents: 58310
diff changeset
   428
subsubsection "fields and method lookup"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   429
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   430
lemma fields_tprg_Object [simp]: "DeclConcepts.fields tprg Object = []"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   431
by (rule ws_tprg [THEN fields_emptyI], force+)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   432
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   433
lemma fields_tprg_Throwable [simp]: 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   434
  "DeclConcepts.fields tprg (SXcpt Throwable) = []"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   435
by (rule ws_tprg [THEN fields_emptyI], force+)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   436
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   437
lemma fields_tprg_SXcpt [simp]: "DeclConcepts.fields tprg (SXcpt xn) = []"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   438
apply (case_tac "xn = Throwable")
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   439
apply  (simp (no_asm_simp))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   440
by (rule ws_tprg [THEN fields_emptyI], force+)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   441
22708
fff918feff45 avoid internal names;
wenzelm
parents: 21404
diff changeset
   442
lemmas fields_rec' = fields_rec [OF _ ws_tprg]
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   443
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   444
lemma fields_Base [simp]: 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   445
"DeclConcepts.fields tprg Base 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   446
  = [((arr,Base), \<lparr>access=Public,static=True ,type=PrimT Boolean.[]\<rparr>),
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   447
     ((vee,Base), \<lparr>access=Public,static=False,type=Iface HasFoo    \<rparr>)]"
22708
fff918feff45 avoid internal names;
wenzelm
parents: 21404
diff changeset
   448
apply (subst fields_rec')
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   449
apply   (auto simp add: BaseCl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   450
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   451
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   452
lemma fields_Ext [simp]: 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   453
 "DeclConcepts.fields tprg Ext  
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   454
  = [((vee,Ext), \<lparr>access=Public,static=False,type= PrimT Integer\<rparr>)] 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   455
    @ DeclConcepts.fields tprg Base"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   456
apply (rule trans)
22708
fff918feff45 avoid internal names;
wenzelm
parents: 21404
diff changeset
   457
apply (rule fields_rec')
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   458
apply   (auto simp add: ExtCl_def Object_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   459
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   460
22708
fff918feff45 avoid internal names;
wenzelm
parents: 21404
diff changeset
   461
lemmas imethds_rec' = imethds_rec [OF _ ws_tprg]
fff918feff45 avoid internal names;
wenzelm
parents: 21404
diff changeset
   462
lemmas methd_rec'  = methd_rec  [OF _ ws_tprg]
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   463
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   464
lemma imethds_HasFoo [simp]: 
68451
c34aa23a1fb6 empty -> Map.empty
nipkow
parents: 67613
diff changeset
   465
  "imethds tprg HasFoo = set_option \<circ> Map.empty(foo_sig\<mapsto>(HasFoo, foo_mhead))"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   466
apply (rule trans)
22708
fff918feff45 avoid internal names;
wenzelm
parents: 21404
diff changeset
   467
apply (rule imethds_rec')
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   468
apply  (auto simp add: HasFooInt_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   469
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   470
68451
c34aa23a1fb6 empty -> Map.empty
nipkow
parents: 67613
diff changeset
   471
lemma methd_tprg_Object [simp]: "methd tprg Object = Map.empty"
22708
fff918feff45 avoid internal names;
wenzelm
parents: 21404
diff changeset
   472
apply (subst methd_rec')
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   473
apply (auto simp add: Object_mdecls_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   474
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   475
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   476
lemma methd_Base [simp]: 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   477
  "methd tprg Base = table_of [(\<lambda>(s,m). (s, Base, m)) Base_foo]"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   478
apply (rule trans)
22708
fff918feff45 avoid internal names;
wenzelm
parents: 21404
diff changeset
   479
apply (rule methd_rec')
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   480
apply   (auto simp add: BaseCl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   481
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   482
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   483
lemma memberid_Base_foo_simp [simp]:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   484
 "memberid (mdecl Base_foo) = mid foo_sig"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   485
by (simp add: Base_foo_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   486
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   487
lemma memberid_Ext_foo_simp [simp]:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   488
 "memberid (mdecl Ext_foo) = mid foo_sig"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   489
by (simp add: Ext_foo_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   490
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   491
lemma Base_declares_foo:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   492
  "tprg\<turnstile>mdecl Base_foo declared_in Base"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   493
by (auto simp add: declared_in_def cdeclaredmethd_def BaseCl_def Base_foo_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   494
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   495
lemma foo_sig_not_undeclared_in_Base:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   496
  "\<not> tprg\<turnstile>mid foo_sig undeclared_in Base"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   497
proof -
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   498
  from Base_declares_foo
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   499
  show ?thesis
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   500
    by (auto dest!: declared_not_undeclared )
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   501
qed
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   502
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   503
lemma Ext_declares_foo:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   504
  "tprg\<turnstile>mdecl Ext_foo declared_in Ext"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   505
by (auto simp add: declared_in_def cdeclaredmethd_def ExtCl_def Ext_foo_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   506
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   507
lemma foo_sig_not_undeclared_in_Ext:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   508
  "\<not> tprg\<turnstile>mid foo_sig undeclared_in Ext"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   509
proof -
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   510
  from Ext_declares_foo
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   511
  show ?thesis
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   512
    by (auto dest!: declared_not_undeclared )
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   513
qed
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   514
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   515
lemma Base_foo_not_inherited_in_Ext:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   516
 "\<not> tprg \<turnstile> Ext inherits (Base,mdecl Base_foo)"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   517
by (auto simp add: inherits_def foo_sig_not_undeclared_in_Ext)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   518
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   519
lemma Ext_method_inheritance:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   520
 "filter_tab (\<lambda>sig m. tprg \<turnstile> Ext inherits method sig m)
68451
c34aa23a1fb6 empty -> Map.empty
nipkow
parents: 67613
diff changeset
   521
     (Map.empty(fst ((\<lambda>(s, m). (s, Base, m)) Base_foo)\<mapsto>
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   522
      snd ((\<lambda>(s, m). (s, Base, m)) Base_foo)))
68451
c34aa23a1fb6 empty -> Map.empty
nipkow
parents: 67613
diff changeset
   523
  = Map.empty"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   524
proof -
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   525
  from Base_foo_not_inherited_in_Ext
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   526
  show ?thesis
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   527
    by (auto intro: filter_tab_all_False simp add: Base_foo_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   528
qed
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   529
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   530
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   531
lemma methd_Ext [simp]: "methd tprg Ext =   
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   532
  table_of [(\<lambda>(s,m). (s, Ext, m)) Ext_foo]"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   533
apply (rule trans)
22708
fff918feff45 avoid internal names;
wenzelm
parents: 21404
diff changeset
   534
apply (rule methd_rec')
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   535
apply   (auto simp add: ExtCl_def Object_def Ext_method_inheritance)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   536
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   537
58887
38db8ddc0f57 modernized header;
wenzelm
parents: 58310
diff changeset
   538
subsubsection "accessibility"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   539
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   540
lemma classesDefined: 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   541
 "\<lbrakk>class tprg C = Some c; C\<noteq>Object\<rbrakk> \<Longrightarrow> \<exists> sc. class tprg (super c) = Some sc"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   542
apply (auto simp add: Classes_def standard_classes_def 
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   543
                      BaseCl_def ExtCl_def MainCl_def
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   544
                      SXcptC_def ObjectC_def) 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   545
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   546
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   547
lemma superclassesBase [simp]: "superclasses tprg Base={Object}"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   548
proof -
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   549
  have ws: "ws_prog tprg" by (rule ws_tprg)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   550
  then show ?thesis
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   551
    by (auto simp add: superclasses_rec  BaseCl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   552
qed
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   553
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   554
lemma superclassesExt [simp]: "superclasses tprg Ext={Base,Object}"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   555
proof -
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   556
  have ws: "ws_prog tprg" by (rule ws_tprg)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   557
  then show ?thesis
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   558
    by (auto simp add: superclasses_rec  ExtCl_def BaseCl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   559
qed
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   560
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   561
lemma superclassesMain [simp]: "superclasses tprg Main={Object}"
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   562
proof -
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   563
  have ws: "ws_prog tprg" by (rule ws_tprg)
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   564
  then show ?thesis
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   565
    by (auto simp add: superclasses_rec  MainCl_def)
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   566
qed
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   567
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   568
lemma HasFoo_accessible[simp]:"tprg\<turnstile>(Iface HasFoo) accessible_in P" 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   569
by (simp add: accessible_in_RefT_simp is_public_def HasFooInt_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   570
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   571
lemma HasFoo_is_acc_iface[simp]: "is_acc_iface tprg P HasFoo"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   572
by (simp add: is_acc_iface_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   573
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   574
lemma HasFoo_is_acc_type[simp]: "is_acc_type tprg P (Iface HasFoo)"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   575
by (simp add: is_acc_type_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   576
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   577
lemma Base_accessible[simp]:"tprg\<turnstile>(Class Base) accessible_in P" 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   578
by (simp add: accessible_in_RefT_simp is_public_def BaseCl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   579
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   580
lemma Base_is_acc_class[simp]: "is_acc_class tprg P Base"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   581
by (simp add: is_acc_class_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   582
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   583
lemma Base_is_acc_type[simp]: "is_acc_type tprg P (Class Base)"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   584
by (simp add: is_acc_type_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   585
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   586
lemma Ext_accessible[simp]:"tprg\<turnstile>(Class Ext) accessible_in P" 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   587
by (simp add: accessible_in_RefT_simp is_public_def ExtCl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   588
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   589
lemma Ext_is_acc_class[simp]: "is_acc_class tprg P Ext"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   590
by (simp add: is_acc_class_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   591
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   592
lemma Ext_is_acc_type[simp]: "is_acc_type tprg P (Class Ext)"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   593
by (simp add: is_acc_type_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   594
68451
c34aa23a1fb6 empty -> Map.empty
nipkow
parents: 67613
diff changeset
   595
lemma accmethd_tprg_Object [simp]: "accmethd tprg S Object = Map.empty"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   596
apply (unfold accmethd_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   597
apply (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   598
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   599
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   600
lemma  snd_special_simp: "snd ((\<lambda>(s, m). (s, a, m)) x) = (a,snd x)"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   601
by (cases x) (auto)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   602
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   603
lemma  fst_special_simp: "fst ((\<lambda>(s, m). (s, a, m)) x) = fst x"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   604
by (cases x) (auto)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   605
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   606
lemma foo_sig_undeclared_in_Object:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   607
  "tprg\<turnstile>mid foo_sig undeclared_in Object"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   608
by (auto simp add: undeclared_in_def cdeclaredmethd_def Object_mdecls_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   609
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   610
lemma unique_sig_Base_foo:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   611
 "tprg\<turnstile> mdecl (sig, snd Base_foo) declared_in Base \<Longrightarrow> sig=foo_sig"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   612
by (auto simp add: declared_in_def cdeclaredmethd_def 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   613
                   Base_foo_def BaseCl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   614
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   615
lemma Base_foo_no_override:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   616
 "tprg,sig\<turnstile>(Base,(snd Base_foo)) overrides old \<Longrightarrow> P"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   617
apply (drule overrides_commonD)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   618
apply (clarsimp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   619
apply (frule subclsEval)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   620
apply    (rule ws_tprg)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   621
apply    (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   622
apply    (rule classesDefined) 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   623
apply    assumption+
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   624
apply (frule unique_sig_Base_foo) 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   625
apply (auto dest!: declared_not_undeclared intro: foo_sig_undeclared_in_Object
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   626
            dest: unique_sig_Base_foo)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   627
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   628
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   629
lemma Base_foo_no_stat_override:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   630
 "tprg,sig\<turnstile>(Base,(snd Base_foo)) overrides\<^sub>S old \<Longrightarrow> P"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   631
apply (drule stat_overrides_commonD)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   632
apply (clarsimp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   633
apply (frule subclsEval)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   634
apply    (rule ws_tprg)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   635
apply    (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   636
apply    (rule classesDefined) 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   637
apply    assumption+
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   638
apply (frule unique_sig_Base_foo) 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   639
apply (auto dest!: declared_not_undeclared intro: foo_sig_undeclared_in_Object
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   640
            dest: unique_sig_Base_foo)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   641
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   642
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   643
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   644
lemma Base_foo_no_hide:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   645
 "tprg,sig\<turnstile>(Base,(snd Base_foo)) hides old \<Longrightarrow> P"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   646
by (auto dest: hidesD simp add: Base_foo_def member_is_static_simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   647
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   648
lemma Ext_foo_no_hide:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   649
 "tprg,sig\<turnstile>(Ext,(snd Ext_foo)) hides old \<Longrightarrow> P"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   650
by (auto dest: hidesD simp add: Ext_foo_def member_is_static_simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   651
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   652
lemma unique_sig_Ext_foo:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   653
 "tprg\<turnstile> mdecl (sig, snd Ext_foo) declared_in Ext \<Longrightarrow> sig=foo_sig"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   654
by (auto simp add: declared_in_def cdeclaredmethd_def 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   655
                   Ext_foo_def ExtCl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   656
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   657
lemma Ext_foo_override:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   658
 "tprg,sig\<turnstile>(Ext,(snd Ext_foo)) overrides old 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   659
  \<Longrightarrow> old = (Base,(snd Base_foo))"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   660
apply (drule overrides_commonD)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   661
apply (clarsimp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   662
apply (frule subclsEval)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   663
apply    (rule ws_tprg)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   664
apply    (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   665
apply    (rule classesDefined) 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   666
apply    assumption+
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   667
apply (frule unique_sig_Ext_foo) 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   668
apply (case_tac "old")
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   669
apply (insert Base_declares_foo foo_sig_undeclared_in_Object) 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   670
apply (auto simp add: ExtCl_def Ext_foo_def
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   671
                      BaseCl_def Base_foo_def Object_mdecls_def
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   672
                      split_paired_all
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   673
                      member_is_static_simp
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   674
           dest: declared_not_undeclared unique_declaration)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   675
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   676
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   677
lemma Ext_foo_stat_override:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   678
 "tprg,sig\<turnstile>(Ext,(snd Ext_foo)) overrides\<^sub>S old 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   679
  \<Longrightarrow> old = (Base,(snd Base_foo))"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   680
apply (drule stat_overrides_commonD)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   681
apply (clarsimp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   682
apply (frule subclsEval)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   683
apply    (rule ws_tprg)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   684
apply    (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   685
apply    (rule classesDefined) 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   686
apply    assumption+
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   687
apply (frule unique_sig_Ext_foo) 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   688
apply (case_tac "old")
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   689
apply (insert Base_declares_foo foo_sig_undeclared_in_Object) 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   690
apply (auto simp add: ExtCl_def Ext_foo_def
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   691
                      BaseCl_def Base_foo_def Object_mdecls_def
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   692
                      split_paired_all
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   693
                      member_is_static_simp
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   694
           dest: declared_not_undeclared unique_declaration)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   695
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   696
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   697
lemma Base_foo_member_of_Base: 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   698
  "tprg\<turnstile>(Base,mdecl Base_foo) member_of Base"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   699
by (auto intro!: members.Immediate Base_declares_foo)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   700
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   701
lemma Base_foo_member_in_Base: 
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   702
  "tprg\<turnstile>(Base,mdecl Base_foo) member_in Base"
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   703
by (rule member_of_to_member_in [OF Base_foo_member_of_Base])
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   704
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   705
lemma Ext_foo_member_of_Ext: 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   706
  "tprg\<turnstile>(Ext,mdecl Ext_foo) member_of Ext"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   707
by (auto intro!: members.Immediate Ext_declares_foo)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   708
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   709
lemma Ext_foo_member_in_Ext: 
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   710
  "tprg\<turnstile>(Ext,mdecl Ext_foo) member_in Ext"
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   711
by (rule member_of_to_member_in [OF Ext_foo_member_of_Ext])
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   712
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   713
lemma Base_foo_permits_acc:
14030
cd928c0ac225 Adapted to changes in Map.thy
schirmer
parents: 13688
diff changeset
   714
 "tprg \<turnstile> (Base, mdecl Base_foo) in Base permits_acc_from S"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   715
by ( simp add: permits_acc_def Base_foo_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   716
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   717
lemma Base_foo_accessible [simp]:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   718
 "tprg\<turnstile>(Base,mdecl Base_foo) of Base accessible_from S"
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   719
by (auto intro: accessible_fromR.Immediate 
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   720
                Base_foo_member_of_Base Base_foo_permits_acc)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   721
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   722
lemma Base_foo_dyn_accessible [simp]:
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   723
 "tprg\<turnstile>(Base,mdecl Base_foo) in Base dyn_accessible_from S"
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   724
apply (rule dyn_accessible_fromR.Immediate)
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   725
apply   (rule Base_foo_member_in_Base)
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   726
apply   (rule Base_foo_permits_acc)
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   727
done
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   728
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   729
lemma accmethd_Base [simp]: 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   730
  "accmethd tprg S Base = methd tprg Base"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   731
apply (simp add: accmethd_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   732
apply (rule filter_tab_all_True)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   733
apply (simp add: snd_special_simp fst_special_simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   734
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   735
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   736
lemma Ext_foo_permits_acc:
14030
cd928c0ac225 Adapted to changes in Map.thy
schirmer
parents: 13688
diff changeset
   737
 "tprg \<turnstile> (Ext, mdecl Ext_foo) in Ext permits_acc_from S"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   738
by ( simp add: permits_acc_def Ext_foo_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   739
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   740
lemma Ext_foo_accessible [simp]:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   741
 "tprg\<turnstile>(Ext,mdecl Ext_foo) of Ext accessible_from S"
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   742
by (auto intro: accessible_fromR.Immediate 
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   743
                Ext_foo_member_of_Ext Ext_foo_permits_acc)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   744
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   745
lemma Ext_foo_dyn_accessible [simp]:
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   746
 "tprg\<turnstile>(Ext,mdecl Ext_foo) in Ext dyn_accessible_from S"
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   747
apply (rule dyn_accessible_fromR.Immediate) 
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   748
apply   (rule Ext_foo_member_in_Ext)
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   749
apply   (rule Ext_foo_permits_acc)
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   750
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   751
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   752
lemma Ext_foo_overrides_Base_foo:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   753
 "tprg\<turnstile>(Ext,Ext_foo) overrides (Base,Base_foo)"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   754
proof (rule overridesR.Direct, simp_all)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   755
  show "\<not> is_static Ext_foo" 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   756
    by (simp add: member_is_static_simp Ext_foo_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   757
  show "\<not> is_static Base_foo"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   758
    by (simp add: member_is_static_simp Base_foo_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   759
  show "accmodi Ext_foo \<noteq> Private"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   760
    by (simp add: Ext_foo_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   761
  show "msig (Ext, Ext_foo) = msig (Base, Base_foo)"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   762
    by (simp add: Ext_foo_def Base_foo_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   763
  show "tprg\<turnstile>mdecl Ext_foo declared_in Ext"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   764
    by (auto intro: Ext_declares_foo)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   765
  show "tprg\<turnstile>mdecl Base_foo declared_in Base"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   766
    by (auto intro: Base_declares_foo)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   767
  show "tprg \<turnstile>(Base, mdecl Base_foo) inheritable_in java_lang"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   768
    by (simp add: inheritable_in_def Base_foo_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   769
  show "tprg\<turnstile>resTy Ext_foo\<preceq>resTy Base_foo"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   770
    by (simp add: Ext_foo_def Base_foo_def mhead_resTy_simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   771
qed
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   772
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   773
lemma accmethd_Ext [simp]: 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   774
  "accmethd tprg S Ext = methd tprg Ext"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   775
apply (simp add: accmethd_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   776
apply (rule filter_tab_all_True)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   777
apply (auto simp add: snd_special_simp fst_special_simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   778
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   779
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   780
lemma cls_Ext: "class tprg Ext = Some ExtCl"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   781
by simp
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   782
lemma dynmethd_Ext_foo:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   783
 "dynmethd tprg Base Ext \<lparr>name = foo, parTs = [Class Base]\<rparr> 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   784
  = Some (Ext,snd Ext_foo)"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   785
proof -
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   786
  have "methd tprg Base \<lparr>name = foo, parTs = [Class Base]\<rparr> 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   787
          = Some (Base,snd Base_foo)" and
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   788
       "methd tprg Ext \<lparr>name = foo, parTs = [Class Base]\<rparr> 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   789
          = Some (Ext,snd Ext_foo)" 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   790
    by (auto simp add: Ext_foo_def Base_foo_def foo_sig_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   791
  with cls_Ext ws_tprg Ext_foo_overrides_Base_foo
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   792
  show ?thesis
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   793
    by (auto simp add: dynmethd_rec simp add: Ext_foo_def Base_foo_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   794
qed
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   795
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   796
lemma Base_fields_accessible[simp]:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   797
 "accfield tprg S Base 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   798
  = table_of((map (\<lambda>((n,d),f).(n,(d,f)))) (DeclConcepts.fields tprg Base))"
39302
d7728f65b353 renamed lemmas: ext_iff -> fun_eq_iff, set_ext_iff -> set_eq_iff, set_ext -> set_eqI
nipkow
parents: 39198
diff changeset
   799
apply (auto simp add: accfield_def fun_eq_iff Let_def 
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   800
                      accessible_in_RefT_simp
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   801
                      is_public_def
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   802
                      BaseCl_def
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   803
                      permits_acc_def
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   804
                      declared_in_def 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   805
                      cdeclaredfield_def
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   806
               intro!: filter_tab_all_True_Some filter_tab_None
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   807
                       accessible_fromR.Immediate
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   808
               intro: members.Immediate)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   809
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   810
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   811
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   812
lemma arr_member_of_Base:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   813
  "tprg\<turnstile>(Base, fdecl (arr, 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   814
                 \<lparr>access = Public, static = True, type = PrimT Boolean.[]\<rparr>))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   815
          member_of Base"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   816
by (auto intro: members.Immediate 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   817
       simp add: declared_in_def cdeclaredfield_def BaseCl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   818
 
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   819
lemma arr_member_in_Base:
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   820
  "tprg\<turnstile>(Base, fdecl (arr, 
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   821
                 \<lparr>access = Public, static = True, type = PrimT Boolean.[]\<rparr>))
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   822
          member_in Base"
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   823
by (rule member_of_to_member_in [OF arr_member_of_Base])
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   824
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   825
lemma arr_member_of_Ext:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   826
  "tprg\<turnstile>(Base, fdecl (arr, 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   827
                    \<lparr>access = Public, static = True, type = PrimT Boolean.[]\<rparr>))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   828
             member_of Ext"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   829
apply (rule members.Inherited)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   830
apply   (simp add: inheritable_in_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   831
apply   (simp add: undeclared_in_def cdeclaredfield_def ExtCl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   832
apply   (auto intro: arr_member_of_Base simp add: subcls1_def ExtCl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   833
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   834
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   835
lemma arr_member_in_Ext:
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   836
  "tprg\<turnstile>(Base, fdecl (arr, 
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   837
                 \<lparr>access = Public, static = True, type = PrimT Boolean.[]\<rparr>))
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   838
          member_in Ext"
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   839
by (rule member_of_to_member_in [OF arr_member_of_Ext])
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   840
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   841
lemma Ext_fields_accessible[simp]:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   842
"accfield tprg S Ext 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   843
  = table_of((map (\<lambda>((n,d),f).(n,(d,f)))) (DeclConcepts.fields tprg Ext))"
39302
d7728f65b353 renamed lemmas: ext_iff -> fun_eq_iff, set_ext_iff -> set_eq_iff, set_ext -> set_eqI
nipkow
parents: 39198
diff changeset
   844
apply (auto simp add: accfield_def fun_eq_iff Let_def 
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   845
                      accessible_in_RefT_simp
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   846
                      is_public_def
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   847
                      BaseCl_def
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   848
                      ExtCl_def
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   849
                      permits_acc_def
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   850
               intro!: filter_tab_all_True_Some filter_tab_None
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   851
                       accessible_fromR.Immediate)
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   852
apply (auto intro: members.Immediate arr_member_of_Ext
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   853
            simp add: declared_in_def cdeclaredfield_def ExtCl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   854
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   855
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   856
lemma arr_Base_dyn_accessible [simp]:
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   857
"tprg\<turnstile>(Base, fdecl (arr, \<lparr>access=Public,static=True ,type=PrimT Boolean.[]\<rparr>)) 
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   858
       in Base dyn_accessible_from S"
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   859
apply (rule dyn_accessible_fromR.Immediate)
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   860
apply   (rule arr_member_in_Base)
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   861
apply   (simp add: permits_acc_def)
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   862
done
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   863
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   864
lemma arr_Ext_dyn_accessible[simp]:
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   865
"tprg\<turnstile>(Base, fdecl (arr, \<lparr>access=Public,static=True ,type=PrimT Boolean.[]\<rparr>)) 
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   866
       in Ext dyn_accessible_from S"
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   867
apply (rule dyn_accessible_fromR.Immediate)
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   868
apply   (rule arr_member_in_Ext)
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   869
apply   (simp add: permits_acc_def)
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   870
done
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   871
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   872
lemma array_of_PrimT_acc [simp]:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   873
 "is_acc_type tprg java_lang (PrimT t.[])"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   874
apply (simp add: is_acc_type_def accessible_in_RefT_simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   875
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   876
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   877
lemma PrimT_acc [simp]: 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   878
 "is_acc_type tprg java_lang (PrimT t)"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   879
apply (simp add: is_acc_type_def accessible_in_RefT_simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   880
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   881
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   882
lemma Object_acc [simp]:
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   883
 "is_acc_class tprg java_lang Object"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   884
apply (auto simp add: is_acc_class_def accessible_in_RefT_simp is_public_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   885
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   886
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   887
58887
38db8ddc0f57 modernized header;
wenzelm
parents: 58310
diff changeset
   888
subsubsection "well-formedness"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   889
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   890
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   891
lemma wf_HasFoo: "wf_idecl tprg (HasFoo, HasFooInt)"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   892
apply (unfold wf_idecl_def HasFooInt_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   893
apply (auto intro!: wf_mheadI ws_idecl_HasFoo 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   894
            simp add: foo_sig_def foo_mhead_def mhead_resTy_simp
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   895
                      member_is_static_simp )
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   896
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   897
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   898
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
   899
declare member_is_static_simp [simp]
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   900
declare wt.Skip [rule del] wt.Init [rule del]
62042
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 61424
diff changeset
   901
ML \<open>ML_Thms.bind_thms ("wt_intros", map (rewrite_rule @{context} @{thms id_def}) @{thms wt.intros})\<close>
13688
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   902
lemmas wtIs = wt_Call wt_Super wt_FVar wt_StatRef wt_intros
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   903
lemmas daIs = assigned.select_convs da_Skip da_NewC da_Lit da_Super da.intros
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   904
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   905
lemmas Base_foo_defs = Base_foo_def foo_sig_def foo_mhead_def
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   906
lemmas Ext_foo_defs  = Ext_foo_def  foo_sig_def
13688
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   907
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   908
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   909
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   910
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   911
lemma wf_Base_foo: "wf_mdecl tprg Base Base_foo"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   912
apply (unfold Base_foo_defs )
13688
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   913
apply (auto intro!: wf_mdeclI wf_mheadI intro!: wtIs 
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   914
            simp add: mhead_resTy_simp)
13688
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   915
(* for definite assignment *)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   916
apply (rule exI)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   917
apply (simp add: parameters_def)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   918
apply (rule conjI)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   919
apply  (rule da.Comp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   920
apply     (rule da.Expr)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   921
apply     (rule da.AssLVar)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   922
apply       (rule da.AccLVar)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   923
apply         (simp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   924
apply        (rule assigned.select_convs)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   925
apply       (simp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   926
apply      (rule assigned.select_convs)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   927
apply     (simp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   928
apply    (simp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   929
apply    (rule da.Jmp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   930
apply      (simp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   931
apply     (rule assigned.select_convs)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   932
apply    (simp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   933
apply   (rule assigned.select_convs)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   934
apply  (simp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   935
apply (simp)
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   936
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   937
13688
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   938
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   939
lemma wf_Ext_foo: "wf_mdecl tprg Ext Ext_foo"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   940
apply (unfold Ext_foo_defs )
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   941
apply (auto intro!: wf_mdeclI wf_mheadI intro!: wtIs 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   942
            simp add: mhead_resTy_simp )
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   943
apply  (rule wt.Cast)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   944
prefer 2
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   945
apply    simp
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   946
apply   (rule_tac [2] narrow.subcls [THEN cast.narrow])
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   947
apply   (auto intro!: wtIs)
13688
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   948
(* for definite assignment *)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   949
apply (rule exI)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   950
apply (simp add: parameters_def)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   951
apply (rule conjI)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   952
apply  (rule da.Comp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   953
apply     (rule da.Expr)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   954
apply     (rule da.Ass)   
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   955
apply       simp
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   956
apply      (rule da.FVar)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   957
apply      (rule da.Cast)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   958
apply      (rule da.AccLVar)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   959
apply        simp
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   960
apply       (rule assigned.select_convs)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   961
apply      simp
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   962
apply     (rule da_Lit)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   963
apply     (simp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   964
apply    (rule da.Comp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   965
apply       (rule da.Expr)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   966
apply       (rule da.AssLVar)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   967
apply         (rule da.Lit)                  
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   968
apply        (rule assigned.select_convs)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   969
apply       simp
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   970
apply      (rule da.Jmp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   971
apply        simp
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   972
apply       (rule assigned.select_convs)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   973
apply      simp
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   974
apply     (rule assigned.select_convs)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   975
apply    (simp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   976
apply   (rule assigned.select_convs)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   977
apply  simp
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   978
apply simp
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   979
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   980
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   981
declare mhead_resTy_simp [simp add]
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   982
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   983
lemma wf_BaseC: "wf_cdecl tprg (Base,BaseCl)"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   984
apply (unfold wf_cdecl_def BaseCl_def arr_viewed_from_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   985
apply (auto intro!: wf_Base_foo)
13688
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   986
apply        (auto intro!: ws_cdecl_Base simp add: Base_foo_def foo_mhead_def)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   987
apply   (auto intro!: wtIs)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   988
(* for definite assignment *)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   989
apply   (rule exI)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   990
apply   (rule da.Expr)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   991
apply  (rule da.Ass)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   992
apply    (simp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   993
apply   (rule da.FVar)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   994
apply   (rule da.Cast)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   995
apply   (rule da_Lit)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   996
apply   simp
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   997
apply  (rule da.NewA)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
   998
apply  (rule da.Lit)
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
   999
apply (auto simp add: Base_foo_defs entails_def Let_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1000
apply   (insert Base_foo_no_stat_override, simp add: Base_foo_def,blast)+
13688
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1001
apply (insert Base_foo_no_hide         , simp add: Base_foo_def,blast)
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1002
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1003
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1004
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1005
lemma wf_ExtC: "wf_cdecl tprg (Ext,ExtCl)"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1006
apply (unfold wf_cdecl_def ExtCl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1007
apply (auto intro!: wf_Ext_foo ws_cdecl_Ext)
13688
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1008
apply  (auto simp add: entails_def snd_special_simp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1009
apply      (insert Ext_foo_stat_override)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1010
apply      (rule exI,rule da.Skip)      
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1011
apply     (force simp add: qmdecl_def Ext_foo_def Base_foo_def)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1012
apply    (force simp add: qmdecl_def Ext_foo_def Base_foo_def)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1013
apply   (force simp add: qmdecl_def Ext_foo_def Base_foo_def)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1014
apply  (insert Ext_foo_no_hide)
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1015
apply  (simp_all add: qmdecl_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1016
apply  blast+
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1017
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1018
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
  1019
lemma wf_MainC: "wf_cdecl tprg (Main,MainCl)"
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
  1020
apply (unfold wf_cdecl_def MainCl_def)
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
  1021
apply (auto intro: ws_cdecl_Main)
13688
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1022
apply (rule exI,rule da.Skip)
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
  1023
done
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
  1024
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1025
lemma wf_idecl_all: "p=tprg \<Longrightarrow> Ball (set Ifaces) (wf_idecl p)"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1026
apply (simp (no_asm) add: Ifaces_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1027
apply (simp (no_asm_simp))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1028
apply (rule wf_HasFoo)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1029
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1030
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1031
lemma wf_cdecl_all_standard_classes: 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1032
  "Ball (set standard_classes) (wf_cdecl tprg)"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1033
apply (unfold standard_classes_def Let_def 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1034
       ObjectC_def SXcptC_def Object_mdecls_def SXcpt_mdecls_def)
18576
8d98b7711e47 Reversed Larry's option/iff change.
nipkow
parents: 18551
diff changeset
  1035
apply (simp (no_asm) add: wf_cdecl_def ws_cdecls)
13688
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1036
apply (auto simp add:is_acc_class_def accessible_in_RefT_simp SXcpt_def 
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1037
            intro: da.Skip)
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1038
apply (auto simp add: Object_def Classes_def standard_classes_def 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1039
                      SXcptC_def SXcpt_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1040
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1041
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1042
lemma wf_cdecl_all: "p=tprg \<Longrightarrow> Ball (set Classes) (wf_cdecl p)"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1043
apply (simp (no_asm) add: Classes_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1044
apply (simp (no_asm_simp))
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
  1045
apply    (rule wf_BaseC [THEN conjI])
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
  1046
apply   (rule wf_ExtC [THEN conjI])
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
  1047
apply  (rule wf_MainC [THEN conjI])
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1048
apply (rule wf_cdecl_all_standard_classes)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1049
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1050
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1051
theorem wf_tprg: "wf_prog tprg"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1052
apply (unfold wf_prog_def Let_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1053
apply (simp (no_asm) add: unique_ifaces unique_classes)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1054
apply (rule conjI)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1055
apply  ((simp (no_asm) add: Classes_def standard_classes_def))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1056
apply (rule conjI)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1057
apply (simp add: Object_mdecls_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1058
apply safe
13688
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1059
apply  (cut_tac xn_cases)   
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1060
apply  (simp (no_asm_simp) add: Classes_def standard_classes_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1061
apply  (insert wf_idecl_all)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1062
apply  (insert wf_cdecl_all)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1063
apply  auto
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1064
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1065
58887
38db8ddc0f57 modernized header;
wenzelm
parents: 58310
diff changeset
  1066
subsubsection "max spec"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1067
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1068
lemma appl_methds_Base_foo: 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1069
"appl_methds tprg S (ClassT Base) \<lparr>name=foo, parTs=[NT]\<rparr> =  
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1070
  {((ClassT Base, \<lparr>access=Public,static=False,pars=[z],resT=Class Base\<rparr>)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1071
    ,[Class Base])}"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1072
apply (unfold appl_methds_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1073
apply (simp (no_asm))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1074
apply (subgoal_tac "tprg\<turnstile>NT\<preceq> Class Base")
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1075
apply  (auto simp add: cmheads_def Base_foo_defs)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1076
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1077
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1078
lemma max_spec_Base_foo: "max_spec tprg S (ClassT Base) \<lparr>name=foo,parTs=[NT]\<rparr> = 
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1079
  {((ClassT Base, \<lparr>access=Public,static=False,pars=[z],resT=Class Base\<rparr>)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1080
   , [Class Base])}"
31197
c1c163ec6c44 fine-tuned elimination of comprehensions involving x=t.
nipkow
parents: 31166
diff changeset
  1081
by (simp add: max_spec_def appl_methds_Base_foo Collect_conv_if)
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1082
58887
38db8ddc0f57 modernized header;
wenzelm
parents: 58310
diff changeset
  1083
subsubsection "well-typedness"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1084
68451
c34aa23a1fb6 empty -> Map.empty
nipkow
parents: 67613
diff changeset
  1085
schematic_goal wt_test: "\<lparr>prg=tprg,cls=Main,lcl=Map.empty(VName e\<mapsto>Class Base)\<rparr>\<turnstile>test ?pTs\<Colon>\<surd>"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1086
apply (unfold test_def arr_viewed_from_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1087
(* ?pTs = [Class Base] *)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1088
apply (rule wtIs (* ;; *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1089
apply  (rule wtIs (* Ass *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1090
apply  (rule wtIs (* NewC *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1091
apply     (rule wtIs (* LVar *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1092
apply      (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1093
apply     (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1094
apply    (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1095
apply   (rule wtIs (* NewC *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1096
apply   (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1097
apply  (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1098
apply (rule wtIs (* Try *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1099
prefer 4
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1100
apply    (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1101
defer
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1102
apply    (rule wtIs (* Expr *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1103
apply    (rule wtIs (* Call *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1104
apply       (rule wtIs (* Acc *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1105
apply       (rule wtIs (* LVar *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1106
apply        (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1107
apply       (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1108
apply      (rule wtIs (* Cons *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1109
apply       (rule wtIs (* Lit *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1110
apply       (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1111
apply      (rule wtIs (* Nil *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1112
apply     (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1113
apply     (rule max_spec_Base_foo)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1114
apply    (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1115
apply   (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1116
apply  (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1117
apply  (simp)
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
  1118
apply  (simp)
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1119
apply (rule wtIs (* While *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1120
apply  (rule wtIs (* Acc *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1121
apply   (rule wtIs (* AVar *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1122
apply   (rule wtIs (* Acc *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1123
apply   (rule wtIs (* FVar *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1124
apply    (rule wtIs (* StatRef *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1125
apply    (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1126
apply   (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1127
apply   (simp )
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1128
apply   (simp)
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
  1129
apply   (simp)
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1130
apply  (rule wtIs (* LVar *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1131
apply  (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1132
apply (rule wtIs (* Skip *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1133
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1134
58887
38db8ddc0f57 modernized header;
wenzelm
parents: 58310
diff changeset
  1135
subsubsection "definite assignment"
13688
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1136
68451
c34aa23a1fb6 empty -> Map.empty
nipkow
parents: 67613
diff changeset
  1137
schematic_goal da_test: "\<lparr>prg=tprg,cls=Main,lcl=Map.empty(VName e\<mapsto>Class Base)\<rparr>
13688
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1138
                  \<turnstile>{} \<guillemotright>\<langle>test ?pTs\<rangle>\<guillemotright> \<lparr>nrm={VName e},brk=\<lambda> l. UNIV\<rparr>"
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1139
apply (unfold test_def arr_viewed_from_def)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1140
apply (rule da.Comp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1141
apply    (rule da.Expr)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1142
apply    (rule da.AssLVar)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1143
apply      (rule da.NewC)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1144
apply     (rule assigned.select_convs)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1145
apply    (simp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1146
apply   (rule da.Try)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1147
apply      (rule da.Expr)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1148
apply      (rule da.Call)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1149
apply       (rule da.AccLVar)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1150
apply         (simp)   
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1151
apply        (rule assigned.select_convs)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1152
apply       (simp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1153
apply      (rule da.Cons)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1154
apply       (rule da.Lit)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1155
apply      (rule da.Nil)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1156
apply     (rule da.Loop)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1157
apply        (rule da.Acc)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1158
apply         (simp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1159
apply        (rule da.AVar)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1160
apply         (rule da.Acc)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1161
apply          simp
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1162
apply         (rule da.FVar)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1163
apply         (rule da.Cast)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1164
apply         (rule da.Lit)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1165
apply        (rule da.Lit)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1166
apply       (rule da_Skip)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1167
apply       (simp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1168
apply      (simp,rule assigned.select_convs)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1169
apply     (simp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1170
apply    (simp,rule assigned.select_convs)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1171
apply   (simp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1172
apply  simp
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1173
apply simp
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1174
apply (simp add: intersect_ts_def)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1175
done
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1176
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1177
58887
38db8ddc0f57 modernized header;
wenzelm
parents: 58310
diff changeset
  1178
subsubsection "execution"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1179
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1180
lemma alloc_one: "\<And>a obj. \<lbrakk>the (new_Addr h) = a; atleast_free h (Suc n)\<rbrakk> \<Longrightarrow>  
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1181
  new_Addr h = Some a \<and> atleast_free (h(a\<mapsto>obj)) n"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1182
apply (frule atleast_free_SucD)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1183
apply (drule atleast_free_Suc [THEN iffD1])
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1184
apply clarsimp
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1185
apply (frule new_Addr_SomeI)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1186
apply force
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1187
done
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1188
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1189
declare fvar_def2 [simp] avar_def2 [simp] init_lvars_def2 [simp]
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1190
declare init_obj_def [simp] var_tys_def [simp] fields_table_def [simp]
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1191
declare BaseCl_def [simp] ExtCl_def [simp] Ext_foo_def [simp]
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1192
        Base_foo_defs  [simp]
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1193
62042
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 61424
diff changeset
  1194
ML \<open>ML_Thms.bind_thms ("eval_intros", map 
51717
9e7d1c139569 simplifier uses proper Proof.context instead of historic type simpset;
wenzelm
parents: 46714
diff changeset
  1195
        (simplify (@{context} delsimps @{thms Skip_eq} addsimps @{thms lvar_def}) o 
62042
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 61424
diff changeset
  1196
         rewrite_rule @{context} [@{thm assign_def}, @{thm Let_def}]) @{thms eval.intros})\<close>
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1197
lemmas eval_Is = eval_Init eval_StatRef AbruptIs eval_intros
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1198
37956
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
  1199
axiomatization
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
  1200
  a :: loc and
ee939247b2fb modernized/unified some specifications;
wenzelm
parents: 36319
diff changeset
  1201
  b :: loc and
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1202
  c :: loc
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1203
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 20769
diff changeset
  1204
abbreviation "one == Suc 0"
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 20769
diff changeset
  1205
abbreviation "two == Suc one"
35067
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1206
abbreviation "three == Suc two"
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1207
abbreviation "four == Suc three"
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1208
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1209
abbreviation
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1210
  "obj_a == \<lparr>tag=Arr (PrimT Boolean) 2
68451
c34aa23a1fb6 empty -> Map.empty
nipkow
parents: 67613
diff changeset
  1211
                ,values= Map.empty(Inr 0\<mapsto>Bool False)(Inr 1\<mapsto>Bool False)\<rparr>"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1212
35067
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1213
abbreviation
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1214
  "obj_b == \<lparr>tag=CInst Ext
68451
c34aa23a1fb6 empty -> Map.empty
nipkow
parents: 67613
diff changeset
  1215
                ,values=(Map.empty(Inl (vee, Base)\<mapsto>Null   )
35067
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1216
                              (Inl (vee, Ext )\<mapsto>Intg 0))\<rparr>"
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1217
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1218
abbreviation
68451
c34aa23a1fb6 empty -> Map.empty
nipkow
parents: 67613
diff changeset
  1219
  "obj_c == \<lparr>tag=CInst (SXcpt NullPointer),values=CONST Map.empty\<rparr>"
35067
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1220
68451
c34aa23a1fb6 empty -> Map.empty
nipkow
parents: 67613
diff changeset
  1221
abbreviation "arr_N == Map.empty(Inl (arr, Base)\<mapsto>Null)"
c34aa23a1fb6 empty -> Map.empty
nipkow
parents: 67613
diff changeset
  1222
abbreviation "arr_a == Map.empty(Inl (arr, Base)\<mapsto>Addr a)"
35067
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1223
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1224
abbreviation
68451
c34aa23a1fb6 empty -> Map.empty
nipkow
parents: 67613
diff changeset
  1225
  "globs1 == Map.empty(Inr Ext   \<mapsto>\<lparr>tag=undefined, values=Map.empty\<rparr>)
35067
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1226
                     (Inr Base  \<mapsto>\<lparr>tag=undefined, values=arr_N\<rparr>)
68451
c34aa23a1fb6 empty -> Map.empty
nipkow
parents: 67613
diff changeset
  1227
                     (Inr Object\<mapsto>\<lparr>tag=undefined, values=Map.empty\<rparr>)"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1228
35067
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1229
abbreviation
68451
c34aa23a1fb6 empty -> Map.empty
nipkow
parents: 67613
diff changeset
  1230
  "globs2 == Map.empty(Inr Ext   \<mapsto>\<lparr>tag=undefined, values=Map.empty\<rparr>)
c34aa23a1fb6 empty -> Map.empty
nipkow
parents: 67613
diff changeset
  1231
                     (Inr Object\<mapsto>\<lparr>tag=undefined, values=Map.empty\<rparr>)
35067
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1232
                     (Inl a\<mapsto>obj_a)
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1233
                     (Inr Base  \<mapsto>\<lparr>tag=undefined, values=arr_a\<rparr>)"
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1234
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1235
abbreviation "globs3 == globs2(Inl b\<mapsto>obj_b)"
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1236
abbreviation "globs8 == globs3(Inl c\<mapsto>obj_c)"
68451
c34aa23a1fb6 empty -> Map.empty
nipkow
parents: 67613
diff changeset
  1237
abbreviation "locs3 == Map.empty(VName e\<mapsto>Addr b)"
35067
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1238
abbreviation "locs8 == locs3(VName z\<mapsto>Addr c)"
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1239
68451
c34aa23a1fb6 empty -> Map.empty
nipkow
parents: 67613
diff changeset
  1240
abbreviation "s0 == st Map.empty Map.empty"
35067
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1241
abbreviation "s0' == Norm  s0"
68451
c34aa23a1fb6 empty -> Map.empty
nipkow
parents: 67613
diff changeset
  1242
abbreviation "s1 == st globs1 Map.empty"
35067
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1243
abbreviation "s1' == Norm s1"
68451
c34aa23a1fb6 empty -> Map.empty
nipkow
parents: 67613
diff changeset
  1244
abbreviation "s2 == st globs2 Map.empty"
35067
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1245
abbreviation "s2' == Norm s2"
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1246
abbreviation "s3 == st globs3 locs3"
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1247
abbreviation "s3' == Norm s3"
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1248
abbreviation "s7' == (Some (Xcpt (Std NullPointer)), s3)"
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1249
abbreviation "s8 == st globs8 locs8"
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1250
abbreviation "s8' == Norm s8"
af4c18c30593 modernized syntax translations, using mostly abbreviation/notation;
wenzelm
parents: 33965
diff changeset
  1251
abbreviation "s9' == (Some (Xcpt (Std IndOutBound)), s8)"
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1252
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1253
61424
c3658c18b7bc prod_case as canonical name for product type eliminator
haftmann
parents: 61337
diff changeset
  1254
declare prod.inject [simp del]
61337
4645502c3c64 fewer aliases for toplevel theorem statements;
wenzelm
parents: 59807
diff changeset
  1255
schematic_goal exec_test: 
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1256
"\<lbrakk>the (new_Addr (heap  s1)) = a;  
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1257
  the (new_Addr (heap ?s2)) = b;  
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1258
  the (new_Addr (heap ?s3)) = c\<rbrakk> \<Longrightarrow>  
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1259
  atleast_free  (heap s0) four \<Longrightarrow>  
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1260
  tprg\<turnstile>s0' \<midarrow>test [Class Base]\<rightarrow> ?s9'"
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1261
apply (unfold test_def arr_viewed_from_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1262
(* ?s9' = s9' *)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1263
apply (simp (no_asm_use))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1264
apply (drule (1) alloc_one,clarsimp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1265
apply (rule eval_Is (* ;; *))
59807
22bc39064290 prefer local fixes;
wenzelm
parents: 58887
diff changeset
  1266
apply  (erule_tac V = "the (new_Addr _) = c" in thin_rl)
22bc39064290 prefer local fixes;
wenzelm
parents: 58887
diff changeset
  1267
apply  (erule_tac [2] V = "new_Addr _ = Some a" in thin_rl)
22bc39064290 prefer local fixes;
wenzelm
parents: 58887
diff changeset
  1268
apply  (erule_tac [2] V = "atleast_free _ four" in thin_rl)
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1269
apply  (rule eval_Is (* Expr *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1270
apply  (rule eval_Is (* Ass *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1271
apply   (rule eval_Is (* LVar *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1272
apply  (rule eval_Is (* NewC *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1273
      (* begin init Ext *)
59807
22bc39064290 prefer local fixes;
wenzelm
parents: 58887
diff changeset
  1274
apply   (erule_tac V = "the (new_Addr _) = b" in thin_rl)
22bc39064290 prefer local fixes;
wenzelm
parents: 58887
diff changeset
  1275
apply   (erule_tac V = "atleast_free _ three" in thin_rl)
22bc39064290 prefer local fixes;
wenzelm
parents: 58887
diff changeset
  1276
apply   (erule_tac [2] V = "atleast_free _ four" in thin_rl)
22bc39064290 prefer local fixes;
wenzelm
parents: 58887
diff changeset
  1277
apply   (erule_tac [2] V = "new_Addr _ = Some a" in thin_rl)
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1278
apply   (rule eval_Is (* Init Ext *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1279
apply   (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1280
apply   (rule conjI)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1281
prefer 2 apply (rule conjI HOL.refl)+
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1282
apply   (rule eval_Is (* Init Base *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1283
apply   (simp add: arr_viewed_from_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1284
apply   (rule conjI)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1285
apply    (rule eval_Is (* Init Object *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1286
apply    (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1287
apply   (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1288
apply   (rule conjI, rule_tac [2] HOL.refl)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1289
apply   (rule eval_Is (* Expr *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1290
apply   (rule eval_Is (* Ass *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1291
apply    (rule eval_Is (* FVar *))
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
  1292
apply         (rule init_done, simp)
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
  1293
apply        (rule eval_Is (* StatRef *))
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
  1294
apply       (simp)
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
  1295
apply     (simp add: check_field_access_def Let_def) 
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1296
apply   (rule eval_Is (* NewA *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1297
apply     (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1298
apply    (rule eval_Is (* Lit *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1299
apply   (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1300
apply   (rule halloc.New)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1301
apply    (simp (no_asm_simp))
13688
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1302
apply   (drule atleast_free_weaken,drule atleast_free_weaken)
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1303
apply   (simp (no_asm_simp))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1304
apply  (simp add: upd_gobj_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1305
      (* end init Ext *)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1306
apply  (rule halloc.New)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1307
apply   (drule alloc_one)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1308
prefer 2 apply fast
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1309
apply   (simp (no_asm_simp))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1310
apply  (drule atleast_free_weaken)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1311
apply  force
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1312
apply (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1313
apply (drule alloc_one)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1314
apply  (simp (no_asm_simp))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1315
apply clarsimp
59807
22bc39064290 prefer local fixes;
wenzelm
parents: 58887
diff changeset
  1316
apply (erule_tac V = "atleast_free _ three" in thin_rl)
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1317
apply (drule_tac x = "a" in new_AddrD2 [THEN spec])
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1318
apply (simp (no_asm_use))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1319
apply (rule eval_Is (* Try *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1320
apply   (rule eval_Is (* Expr *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1321
      (* begin method call *)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1322
apply   (rule eval_Is (* Call *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1323
apply      (rule eval_Is (* Acc *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1324
apply      (rule eval_Is (* LVar *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1325
apply     (rule eval_Is (* Cons *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1326
apply      (rule eval_Is (* Lit *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1327
apply     (rule eval_Is (* Nil *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1328
apply    (simp)
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
  1329
apply    (simp)
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
  1330
apply    (subgoal_tac
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
  1331
             "tprg\<turnstile>(Ext,mdecl Ext_foo) in Ext dyn_accessible_from Main")
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
  1332
apply      (simp add: check_method_access_def Let_def
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
  1333
                      invocation_declclass_def dynlookup_def dynmethd_Ext_foo)
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
  1334
apply      (rule Ext_foo_dyn_accessible)
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1335
apply   (rule eval_Is (* Methd *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1336
apply   (simp add: body_def Let_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1337
apply   (rule eval_Is (* Body *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1338
apply     (rule init_done, simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1339
apply       (simp add: invocation_declclass_def dynlookup_def dynmethd_Ext_foo)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1340
apply    (simp add: invocation_declclass_def dynlookup_def dynmethd_Ext_foo)
13688
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1341
apply    (rule eval_Is (* Comp *))
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1342
apply     (rule eval_Is (* Expr *))
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1343
apply     (rule eval_Is (* Ass *))
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1344
apply      (rule eval_Is (* FVar *))
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1345
apply         (rule init_done, simp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1346
apply        (rule eval_Is (* Cast *))
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1347
apply         (rule eval_Is (* Acc *))
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1348
apply         (rule eval_Is (* LVar *))
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1349
apply        (simp)
62390
842917225d56 more canonical names
nipkow
parents: 62145
diff changeset
  1350
apply       (simp split del: if_split)
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
  1351
apply      (simp add: check_field_access_def Let_def)
13688
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1352
apply     (rule eval_Is (* XcptE *))
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1353
apply    (simp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1354
apply    (rule conjI)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1355
apply     (simp)
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1356
apply    (rule eval_Is (* Comp *))
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1357
apply   (simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1358
      (* end method call *)
13688
a0b16d42d489 "Definite Assignment Analysis" included, with proof of correctness. Large adjustments of type safety proof and soundness proof of the axiomatic semantics were necessary. Completeness proof of the loop rule of the axiomatic semantic was altered. So the additional polymorphic variants of some rules could be removed.
schirmer
parents: 13524
diff changeset
  1359
apply  simp
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1360
apply  (rule sxalloc.intros)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1361
apply  (rule halloc.New)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1362
apply   (erule alloc_one [THEN conjunct1])
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1363
apply   (simp (no_asm_simp))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1364
apply  (simp (no_asm_simp))
62390
842917225d56 more canonical names
nipkow
parents: 62145
diff changeset
  1365
apply (simp add: gupd_def lupd_def obj_ty_def split del: if_split)
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1366
apply (drule alloc_one [THEN conjunct1])
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1367
apply  (simp (no_asm_simp))
59807
22bc39064290 prefer local fixes;
wenzelm
parents: 58887
diff changeset
  1368
apply (erule_tac V = "atleast_free _ two" in thin_rl)
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1369
apply (drule_tac x = "a" in new_AddrD2 [THEN spec])
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1370
apply simp
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1371
apply (rule eval_Is (* While *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1372
apply  (rule eval_Is (* Acc *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1373
apply  (rule eval_Is (* AVar *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1374
apply    (rule eval_Is (* Acc *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1375
apply    (rule eval_Is (* FVar *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1376
apply      (rule init_done, simp)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1377
apply     (rule eval_Is (* StatRef *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1378
apply    (simp)
12925
99131847fb93 Added check for field/method access to operational semantics and proved the acesses valid.
schirmer
parents: 12858
diff changeset
  1379
apply    (simp add: check_field_access_def Let_def)
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1380
apply   (rule eval_Is (* Lit *))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1381
apply  (simp (no_asm_simp))
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1382
apply (auto simp add: in_bounds_def)
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1383
done
61424
c3658c18b7bc prod_case as canonical name for product type eliminator
haftmann
parents: 61337
diff changeset
  1384
declare prod.inject [simp]
12854
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1385
00d4a435777f Isabelle/Bali sources;
schirmer
parents:
diff changeset
  1386
end