58 lemma the_var_AVar_simp: |
58 lemma the_var_AVar_simp: |
59 "the_var G s ((Lit a).[Lit i]) = avar G i a s" |
59 "the_var G s ((Lit a).[Lit i]) = avar G i a s" |
60 by (simp) |
60 by (simp) |
61 declare the_var_AVar_def [simp del] |
61 declare the_var_AVar_def [simp del] |
62 |
62 |
63 consts |
63 syntax (xsymbols) |
64 step :: "prog \<Rightarrow> ((term \<times> state) \<times> (term \<times> state)) set" |
|
65 |
|
66 syntax (symbols) |
|
67 step :: "[prog,term \<times> state,term \<times> state] \<Rightarrow> bool" ("_\<turnstile>_ \<mapsto>1 _"[61,82,82] 81) |
|
68 stepn:: "[prog, term \<times> state,nat,term \<times> state] \<Rightarrow> bool" |
|
69 ("_\<turnstile>_ \<mapsto>_ _"[61,82,82] 81) |
|
70 "step*":: "[prog,term \<times> state,term \<times> state] \<Rightarrow> bool" ("_\<turnstile>_ \<mapsto>* _"[61,82,82] 81) |
|
71 Ref :: "loc \<Rightarrow> expr" |
64 Ref :: "loc \<Rightarrow> expr" |
72 SKIP :: "expr" |
65 SKIP :: "expr" |
73 |
66 |
74 translations |
67 translations |
75 "G\<turnstile>p \<mapsto>1 p' " == "(p,p') \<in> step G" |
|
76 "G\<turnstile>p \<mapsto>n p' " == "(p,p') \<in> (step G)^n" |
|
77 "G\<turnstile>p \<mapsto>* p' " == "(p,p') \<in> (step G)\<^sup>*" |
|
78 "Ref a" == "Lit (Addr a)" |
68 "Ref a" == "Lit (Addr a)" |
79 "SKIP" == "Lit Unit" |
69 "SKIP" == "Lit Unit" |
80 |
70 |
81 inductive "step G" intros |
71 inductive2 |
|
72 step :: "[prog,term \<times> state,term \<times> state] \<Rightarrow> bool" ("_\<turnstile>_ \<mapsto>1 _"[61,82,82] 81) |
|
73 for G :: prog |
|
74 where |
82 |
75 |
83 (* evaluation of expression *) |
76 (* evaluation of expression *) |
84 (* cf. 15.5 *) |
77 (* cf. 15.5 *) |
85 Abrupt: "\<lbrakk>\<forall>v. t \<noteq> \<langle>Lit v\<rangle>; |
78 Abrupt: "\<lbrakk>\<forall>v. t \<noteq> \<langle>Lit v\<rangle>; |
86 \<forall> t. t \<noteq> \<langle>l\<bullet> Skip\<rangle>; |
79 \<forall> t. t \<noteq> \<langle>l\<bullet> Skip\<rangle>; |
87 \<forall> C vn c. t \<noteq> \<langle>Try Skip Catch(C vn) c\<rangle>; |
80 \<forall> C vn c. t \<noteq> \<langle>Try Skip Catch(C vn) c\<rangle>; |
88 \<forall> x c. t \<noteq> \<langle>Skip Finally c\<rangle> \<and> xc \<noteq> Xcpt x; |
81 \<forall> x c. t \<noteq> \<langle>Skip Finally c\<rangle> \<and> xc \<noteq> Xcpt x; |
89 \<forall> a c. t \<noteq> \<langle>FinA a c\<rangle>\<rbrakk> |
82 \<forall> a c. t \<noteq> \<langle>FinA a c\<rangle>\<rbrakk> |
90 \<Longrightarrow> |
83 \<Longrightarrow> |
91 G\<turnstile>(t,Some xc,s) \<mapsto>1 (\<langle>Lit arbitrary\<rangle>,Some xc,s)" |
84 G\<turnstile>(t,Some xc,s) \<mapsto>1 (\<langle>Lit arbitrary\<rangle>,Some xc,s)" |
92 |
85 |
93 InsInitE: "\<lbrakk>G\<turnstile>(\<langle>c\<rangle>,Norm s) \<mapsto>1 (\<langle>c'\<rangle>, s')\<rbrakk> |
86 | InsInitE: "\<lbrakk>G\<turnstile>(\<langle>c\<rangle>,Norm s) \<mapsto>1 (\<langle>c'\<rangle>, s')\<rbrakk> |
94 \<Longrightarrow> |
87 \<Longrightarrow> |
95 G\<turnstile>(\<langle>InsInitE c e\<rangle>,Norm s) \<mapsto>1 (\<langle>InsInitE c' e\<rangle>, s')" |
88 G\<turnstile>(\<langle>InsInitE c e\<rangle>,Norm s) \<mapsto>1 (\<langle>InsInitE c' e\<rangle>, s')" |
96 |
89 |
97 (* SeqE: "G\<turnstile>(\<langle>Seq Skip e\<rangle>,Norm s) \<mapsto>1 (\<langle>e\<rangle>, Norm s)" *) |
90 (* SeqE: "G\<turnstile>(\<langle>Seq Skip e\<rangle>,Norm s) \<mapsto>1 (\<langle>e\<rangle>, Norm s)" *) |
98 (* Specialised rules to evaluate: |
91 (* Specialised rules to evaluate: |
99 InsInitE Skip (NewC C), InisInitE Skip (NewA T[e]) *) |
92 InsInitE Skip (NewC C), InisInitE Skip (NewA T[e]) *) |
100 |
93 |
101 (* cf. 15.8.1 *) |
94 (* cf. 15.8.1 *) |
102 NewC: "G\<turnstile>(\<langle>NewC C\<rangle>,Norm s) \<mapsto>1 (\<langle>InsInitE (Init C) (NewC C)\<rangle>, Norm s)" |
95 | NewC: "G\<turnstile>(\<langle>NewC C\<rangle>,Norm s) \<mapsto>1 (\<langle>InsInitE (Init C) (NewC C)\<rangle>, Norm s)" |
103 NewCInited: "\<lbrakk>G\<turnstile> Norm s \<midarrow>halloc (CInst C)\<succ>a\<rightarrow> s'\<rbrakk> |
96 | NewCInited: "\<lbrakk>G\<turnstile> Norm s \<midarrow>halloc (CInst C)\<succ>a\<rightarrow> s'\<rbrakk> |
104 \<Longrightarrow> |
97 \<Longrightarrow> |
105 G\<turnstile>(\<langle>InsInitE Skip (NewC C)\<rangle>,Norm s) \<mapsto>1 (\<langle>Ref a\<rangle>, s')" |
98 G\<turnstile>(\<langle>InsInitE Skip (NewC C)\<rangle>,Norm s) \<mapsto>1 (\<langle>Ref a\<rangle>, s')" |
106 |
99 |
107 |
100 |
108 |
101 |
109 (* Alternative when rule SeqE is present |
102 (* Alternative when rule SeqE is present |
110 NewCInited: "\<lbrakk>inited C (globs s); |
103 NewCInited: "\<lbrakk>inited C (globs s); |
117 \<Longrightarrow> |
110 \<Longrightarrow> |
118 G\<turnstile>(\<langle>NewC C\<rangle>,Norm s) \<mapsto>1 (\<langle>Seq (Init C) (NewC C)\<rangle>, Norm s)" |
111 G\<turnstile>(\<langle>NewC C\<rangle>,Norm s) \<mapsto>1 (\<langle>Seq (Init C) (NewC C)\<rangle>, Norm s)" |
119 |
112 |
120 *) |
113 *) |
121 (* cf. 15.9.1 *) |
114 (* cf. 15.9.1 *) |
122 NewA: |
115 | NewA: |
123 "G\<turnstile>(\<langle>New T[e]\<rangle>,Norm s) \<mapsto>1 (\<langle>InsInitE (init_comp_ty T) (New T[e])\<rangle>,Norm s)" |
116 "G\<turnstile>(\<langle>New T[e]\<rangle>,Norm s) \<mapsto>1 (\<langle>InsInitE (init_comp_ty T) (New T[e])\<rangle>,Norm s)" |
124 InsInitNewAIdx: |
117 | InsInitNewAIdx: |
125 "\<lbrakk>G\<turnstile>(\<langle>e\<rangle>,Norm s) \<mapsto>1 (\<langle>e'\<rangle>, s')\<rbrakk> |
118 "\<lbrakk>G\<turnstile>(\<langle>e\<rangle>,Norm s) \<mapsto>1 (\<langle>e'\<rangle>, s')\<rbrakk> |
126 \<Longrightarrow> |
119 \<Longrightarrow> |
127 G\<turnstile>(\<langle>InsInitE Skip (New T[e])\<rangle>,Norm s) \<mapsto>1 (\<langle>InsInitE Skip (New T[e'])\<rangle>,s')" |
120 G\<turnstile>(\<langle>InsInitE Skip (New T[e])\<rangle>,Norm s) \<mapsto>1 (\<langle>InsInitE Skip (New T[e'])\<rangle>,s')" |
128 InsInitNewA: |
121 | InsInitNewA: |
129 "\<lbrakk>G\<turnstile>abupd (check_neg i) (Norm s) \<midarrow>halloc (Arr T (the_Intg i))\<succ>a\<rightarrow> s' \<rbrakk> |
122 "\<lbrakk>G\<turnstile>abupd (check_neg i) (Norm s) \<midarrow>halloc (Arr T (the_Intg i))\<succ>a\<rightarrow> s' \<rbrakk> |
130 \<Longrightarrow> |
123 \<Longrightarrow> |
131 G\<turnstile>(\<langle>InsInitE Skip (New T[Lit i])\<rangle>,Norm s) \<mapsto>1 (\<langle>Ref a\<rangle>,s')" |
124 G\<turnstile>(\<langle>InsInitE Skip (New T[Lit i])\<rangle>,Norm s) \<mapsto>1 (\<langle>Ref a\<rangle>,s')" |
132 |
125 |
133 (* cf. 15.15 *) |
126 (* cf. 15.15 *) |
134 CastE: |
127 | CastE: |
135 "\<lbrakk>G\<turnstile>(\<langle>e\<rangle>,Norm s) \<mapsto>1 (\<langle>e'\<rangle>,s')\<rbrakk> |
128 "\<lbrakk>G\<turnstile>(\<langle>e\<rangle>,Norm s) \<mapsto>1 (\<langle>e'\<rangle>,s')\<rbrakk> |
136 \<Longrightarrow> |
129 \<Longrightarrow> |
137 G\<turnstile>(\<langle>Cast T e\<rangle>,None,s) \<mapsto>1 (\<langle>Cast T e'\<rangle>,s')" |
130 G\<turnstile>(\<langle>Cast T e\<rangle>,None,s) \<mapsto>1 (\<langle>Cast T e'\<rangle>,s')" |
138 Cast: |
131 | Cast: |
139 "\<lbrakk>s' = abupd (raise_if (\<not>G,s\<turnstile>v fits T) ClassCast) (Norm s)\<rbrakk> |
132 "\<lbrakk>s' = abupd (raise_if (\<not>G,s\<turnstile>v fits T) ClassCast) (Norm s)\<rbrakk> |
140 \<Longrightarrow> |
133 \<Longrightarrow> |
141 G\<turnstile>(\<langle>Cast T (Lit v)\<rangle>,Norm s) \<mapsto>1 (\<langle>Lit v\<rangle>,s')" |
134 G\<turnstile>(\<langle>Cast T (Lit v)\<rangle>,Norm s) \<mapsto>1 (\<langle>Lit v\<rangle>,s')" |
142 (* can be written without abupd, since we know Norm s *) |
135 (* can be written without abupd, since we know Norm s *) |
143 |
136 |
144 |
137 |
145 InstE: "\<lbrakk>G\<turnstile>(\<langle>e\<rangle>,Norm s) \<mapsto>1 (\<langle>e'::expr\<rangle>,s')\<rbrakk> |
138 | InstE: "\<lbrakk>G\<turnstile>(\<langle>e\<rangle>,Norm s) \<mapsto>1 (\<langle>e'::expr\<rangle>,s')\<rbrakk> |
146 \<Longrightarrow> |
139 \<Longrightarrow> |
147 G\<turnstile>(\<langle>e InstOf T\<rangle>,Norm s) \<mapsto>1 (\<langle>e'\<rangle>,s')" |
140 G\<turnstile>(\<langle>e InstOf T\<rangle>,Norm s) \<mapsto>1 (\<langle>e'\<rangle>,s')" |
148 Inst: "\<lbrakk>b = (v\<noteq>Null \<and> G,s\<turnstile>v fits RefT T)\<rbrakk> |
141 | Inst: "\<lbrakk>b = (v\<noteq>Null \<and> G,s\<turnstile>v fits RefT T)\<rbrakk> |
149 \<Longrightarrow> |
142 \<Longrightarrow> |
150 G\<turnstile>(\<langle>(Lit v) InstOf T\<rangle>,Norm s) \<mapsto>1 (\<langle>Lit (Bool b)\<rangle>,s')" |
143 G\<turnstile>(\<langle>(Lit v) InstOf T\<rangle>,Norm s) \<mapsto>1 (\<langle>Lit (Bool b)\<rangle>,s')" |
151 |
144 |
152 (* cf. 15.7.1 *) |
145 (* cf. 15.7.1 *) |
153 (*Lit "G\<turnstile>(Lit v,None,s) \<mapsto>1 (Lit v,None,s)"*) |
146 (*Lit "G\<turnstile>(Lit v,None,s) \<mapsto>1 (Lit v,None,s)"*) |
154 |
147 |
155 UnOpE: "\<lbrakk>G\<turnstile>(\<langle>e\<rangle>,Norm s) \<mapsto>1 (\<langle>e'\<rangle>,s') \<rbrakk> |
148 | UnOpE: "\<lbrakk>G\<turnstile>(\<langle>e\<rangle>,Norm s) \<mapsto>1 (\<langle>e'\<rangle>,s') \<rbrakk> |
156 \<Longrightarrow> |
149 \<Longrightarrow> |
157 G\<turnstile>(\<langle>UnOp unop e\<rangle>,Norm s) \<mapsto>1 (\<langle>UnOp unop e'\<rangle>,s')" |
150 G\<turnstile>(\<langle>UnOp unop e\<rangle>,Norm s) \<mapsto>1 (\<langle>UnOp unop e'\<rangle>,s')" |
158 UnOp: "G\<turnstile>(\<langle>UnOp unop (Lit v)\<rangle>,Norm s) \<mapsto>1 (\<langle>Lit (eval_unop unop v)\<rangle>,Norm s)" |
151 | UnOp: "G\<turnstile>(\<langle>UnOp unop (Lit v)\<rangle>,Norm s) \<mapsto>1 (\<langle>Lit (eval_unop unop v)\<rangle>,Norm s)" |
159 |
152 |
160 BinOpE1: "\<lbrakk>G\<turnstile>(\<langle>e1\<rangle>,Norm s) \<mapsto>1 (\<langle>e1'\<rangle>,s') \<rbrakk> |
153 | BinOpE1: "\<lbrakk>G\<turnstile>(\<langle>e1\<rangle>,Norm s) \<mapsto>1 (\<langle>e1'\<rangle>,s') \<rbrakk> |
161 \<Longrightarrow> |
154 \<Longrightarrow> |
162 G\<turnstile>(\<langle>BinOp binop e1 e2\<rangle>,Norm s) \<mapsto>1 (\<langle>BinOp binop e1' e2\<rangle>,s')" |
155 G\<turnstile>(\<langle>BinOp binop e1 e2\<rangle>,Norm s) \<mapsto>1 (\<langle>BinOp binop e1' e2\<rangle>,s')" |
163 BinOpE2: "\<lbrakk>need_second_arg binop v1; G\<turnstile>(\<langle>e2\<rangle>,Norm s) \<mapsto>1 (\<langle>e2'\<rangle>,s') \<rbrakk> |
156 | BinOpE2: "\<lbrakk>need_second_arg binop v1; G\<turnstile>(\<langle>e2\<rangle>,Norm s) \<mapsto>1 (\<langle>e2'\<rangle>,s') \<rbrakk> |
164 \<Longrightarrow> |
|
165 G\<turnstile>(\<langle>BinOp binop (Lit v1) e2\<rangle>,Norm s) |
|
166 \<mapsto>1 (\<langle>BinOp binop (Lit v1) e2'\<rangle>,s')" |
|
167 BinOpTerm: "\<lbrakk>\<not> need_second_arg binop v1\<rbrakk> |
|
168 \<Longrightarrow> |
157 \<Longrightarrow> |
169 G\<turnstile>(\<langle>BinOp binop (Lit v1) e2\<rangle>,Norm s) |
158 G\<turnstile>(\<langle>BinOp binop (Lit v1) e2\<rangle>,Norm s) |
170 \<mapsto>1 (\<langle>Lit v1\<rangle>,Norm s)" |
159 \<mapsto>1 (\<langle>BinOp binop (Lit v1) e2'\<rangle>,s')" |
171 BinOp: "G\<turnstile>(\<langle>BinOp binop (Lit v1) (Lit v2)\<rangle>,Norm s) |
160 | BinOpTerm: "\<lbrakk>\<not> need_second_arg binop v1\<rbrakk> |
172 \<mapsto>1 (\<langle>Lit (eval_binop binop v1 v2)\<rangle>,Norm s)" |
161 \<Longrightarrow> |
|
162 G\<turnstile>(\<langle>BinOp binop (Lit v1) e2\<rangle>,Norm s) |
|
163 \<mapsto>1 (\<langle>Lit v1\<rangle>,Norm s)" |
|
164 | BinOp: "G\<turnstile>(\<langle>BinOp binop (Lit v1) (Lit v2)\<rangle>,Norm s) |
|
165 \<mapsto>1 (\<langle>Lit (eval_binop binop v1 v2)\<rangle>,Norm s)" |
173 (* Maybe its more convenient to add: need_second_arg as precondition to BinOp |
166 (* Maybe its more convenient to add: need_second_arg as precondition to BinOp |
174 to make the choice between BinOpTerm and BinOp deterministic *) |
167 to make the choice between BinOpTerm and BinOp deterministic *) |
175 |
168 |
176 Super: "G\<turnstile>(\<langle>Super\<rangle>,Norm s) \<mapsto>1 (\<langle>Lit (val_this s)\<rangle>,Norm s)" |
169 | Super: "G\<turnstile>(\<langle>Super\<rangle>,Norm s) \<mapsto>1 (\<langle>Lit (val_this s)\<rangle>,Norm s)" |
177 |
170 |
178 AccVA: "\<lbrakk>G\<turnstile>(\<langle>va\<rangle>,Norm s) \<mapsto>1 (\<langle>va'\<rangle>,s') \<rbrakk> |
171 | AccVA: "\<lbrakk>G\<turnstile>(\<langle>va\<rangle>,Norm s) \<mapsto>1 (\<langle>va'\<rangle>,s') \<rbrakk> |
179 \<Longrightarrow> |
172 \<Longrightarrow> |
180 G\<turnstile>(\<langle>Acc va\<rangle>,Norm s) \<mapsto>1 (\<langle>Acc va'\<rangle>,s')" |
173 G\<turnstile>(\<langle>Acc va\<rangle>,Norm s) \<mapsto>1 (\<langle>Acc va'\<rangle>,s')" |
181 Acc: "\<lbrakk>groundVar va; ((v,vf),s') = the_var G (Norm s) va\<rbrakk> |
174 | Acc: "\<lbrakk>groundVar va; ((v,vf),s') = the_var G (Norm s) va\<rbrakk> |
182 \<Longrightarrow> |
175 \<Longrightarrow> |
183 G\<turnstile>(\<langle>Acc va\<rangle>,Norm s) \<mapsto>1 (\<langle>Lit v\<rangle>,s')" |
176 G\<turnstile>(\<langle>Acc va\<rangle>,Norm s) \<mapsto>1 (\<langle>Lit v\<rangle>,s')" |
184 |
177 |
185 (* |
178 (* |
186 AccLVar: "G\<turnstile>(\<langle>Acc (LVar vn)\<rangle>,Norm s) \<mapsto>1 (\<langle>Lit (fst (lvar vn s))\<rangle>,Norm s)" |
179 AccLVar: "G\<turnstile>(\<langle>Acc (LVar vn)\<rangle>,Norm s) \<mapsto>1 (\<langle>Lit (fst (lvar vn s))\<rangle>,Norm s)" |
187 AccFVar: "\<lbrakk>((v,vf),s') = fvar statDeclC stat fn a (Norm s)\<rbrakk> |
180 AccFVar: "\<lbrakk>((v,vf),s') = fvar statDeclC stat fn a (Norm s)\<rbrakk> |
188 \<Longrightarrow> |
181 \<Longrightarrow> |
190 \<mapsto>1 (\<langle>Lit v\<rangle>,s')" |
183 \<mapsto>1 (\<langle>Lit v\<rangle>,s')" |
191 AccAVar: "\<lbrakk>((v,vf),s') = avar G i a (Norm s)\<rbrakk> |
184 AccAVar: "\<lbrakk>((v,vf),s') = avar G i a (Norm s)\<rbrakk> |
192 \<Longrightarrow> |
185 \<Longrightarrow> |
193 G\<turnstile>(\<langle>Acc ((Lit a).[Lit i])\<rangle>,Norm s) \<mapsto>1 (\<langle>Lit v\<rangle>,s')" |
186 G\<turnstile>(\<langle>Acc ((Lit a).[Lit i])\<rangle>,Norm s) \<mapsto>1 (\<langle>Lit v\<rangle>,s')" |
194 *) |
187 *) |
195 AssVA: "\<lbrakk>G\<turnstile>(\<langle>va\<rangle>,Norm s) \<mapsto>1 (\<langle>va'\<rangle>,s')\<rbrakk> |
188 | AssVA: "\<lbrakk>G\<turnstile>(\<langle>va\<rangle>,Norm s) \<mapsto>1 (\<langle>va'\<rangle>,s')\<rbrakk> |
196 \<Longrightarrow> |
189 \<Longrightarrow> |
197 G\<turnstile>(\<langle>va:=e\<rangle>,Norm s) \<mapsto>1 (\<langle>va':=e\<rangle>,s')" |
190 G\<turnstile>(\<langle>va:=e\<rangle>,Norm s) \<mapsto>1 (\<langle>va':=e\<rangle>,s')" |
198 AssE: "\<lbrakk>groundVar va; G\<turnstile>(\<langle>e\<rangle>,Norm s) \<mapsto>1 (\<langle>e'\<rangle>,s')\<rbrakk> |
191 | AssE: "\<lbrakk>groundVar va; G\<turnstile>(\<langle>e\<rangle>,Norm s) \<mapsto>1 (\<langle>e'\<rangle>,s')\<rbrakk> |
199 \<Longrightarrow> |
192 \<Longrightarrow> |
200 G\<turnstile>(\<langle>va:=e\<rangle>,Norm s) \<mapsto>1 (\<langle>va:=e'\<rangle>,s')" |
193 G\<turnstile>(\<langle>va:=e\<rangle>,Norm s) \<mapsto>1 (\<langle>va:=e'\<rangle>,s')" |
201 Ass: "\<lbrakk>groundVar va; ((w,f),s') = the_var G (Norm s) va\<rbrakk> |
194 | Ass: "\<lbrakk>groundVar va; ((w,f),s') = the_var G (Norm s) va\<rbrakk> |
202 \<Longrightarrow> |
195 \<Longrightarrow> |
203 G\<turnstile>(\<langle>va:=(Lit v)\<rangle>,Norm s) \<mapsto>1 (\<langle>Lit v\<rangle>,assign f v s')" |
196 G\<turnstile>(\<langle>va:=(Lit v)\<rangle>,Norm s) \<mapsto>1 (\<langle>Lit v\<rangle>,assign f v s')" |
204 |
197 |
205 CondC: "\<lbrakk>G\<turnstile>(\<langle>e0\<rangle>,Norm s) \<mapsto>1 (\<langle>e0'\<rangle>,s')\<rbrakk> |
198 | CondC: "\<lbrakk>G\<turnstile>(\<langle>e0\<rangle>,Norm s) \<mapsto>1 (\<langle>e0'\<rangle>,s')\<rbrakk> |
206 \<Longrightarrow> |
199 \<Longrightarrow> |
207 G\<turnstile>(\<langle>e0? e1:e2\<rangle>,Norm s) \<mapsto>1 (\<langle>e0'? e1:e2\<rangle>,s')" |
200 G\<turnstile>(\<langle>e0? e1:e2\<rangle>,Norm s) \<mapsto>1 (\<langle>e0'? e1:e2\<rangle>,s')" |
208 Cond: "G\<turnstile>(\<langle>Lit b? e1:e2\<rangle>,Norm s) \<mapsto>1 (\<langle>if the_Bool b then e1 else e2\<rangle>,Norm s)" |
201 | Cond: "G\<turnstile>(\<langle>Lit b? e1:e2\<rangle>,Norm s) \<mapsto>1 (\<langle>if the_Bool b then e1 else e2\<rangle>,Norm s)" |
209 |
202 |
210 |
203 |
211 CallTarget: "\<lbrakk>G\<turnstile>(\<langle>e\<rangle>,Norm s) \<mapsto>1 (\<langle>e'\<rangle>,s')\<rbrakk> |
204 | CallTarget: "\<lbrakk>G\<turnstile>(\<langle>e\<rangle>,Norm s) \<mapsto>1 (\<langle>e'\<rangle>,s')\<rbrakk> |
212 \<Longrightarrow> |
205 \<Longrightarrow> |
213 G\<turnstile>(\<langle>{accC,statT,mode}e\<cdot>mn({pTs}args)\<rangle>,Norm s) |
206 G\<turnstile>(\<langle>{accC,statT,mode}e\<cdot>mn({pTs}args)\<rangle>,Norm s) |
214 \<mapsto>1 (\<langle>{accC,statT,mode}e'\<cdot>mn({pTs}args)\<rangle>,s')" |
207 \<mapsto>1 (\<langle>{accC,statT,mode}e'\<cdot>mn({pTs}args)\<rangle>,s')" |
215 CallArgs: "\<lbrakk>G\<turnstile>(\<langle>args\<rangle>,Norm s) \<mapsto>1 (\<langle>args'\<rangle>,s')\<rbrakk> |
208 | CallArgs: "\<lbrakk>G\<turnstile>(\<langle>args\<rangle>,Norm s) \<mapsto>1 (\<langle>args'\<rangle>,s')\<rbrakk> |
216 \<Longrightarrow> |
209 \<Longrightarrow> |
217 G\<turnstile>(\<langle>{accC,statT,mode}Lit a\<cdot>mn({pTs}args)\<rangle>,Norm s) |
210 G\<turnstile>(\<langle>{accC,statT,mode}Lit a\<cdot>mn({pTs}args)\<rangle>,Norm s) |
218 \<mapsto>1 (\<langle>{accC,statT,mode}Lit a\<cdot>mn({pTs}args')\<rangle>,s')" |
211 \<mapsto>1 (\<langle>{accC,statT,mode}Lit a\<cdot>mn({pTs}args')\<rangle>,s')" |
219 Call: "\<lbrakk>groundExprs args; vs = map the_val args; |
212 | Call: "\<lbrakk>groundExprs args; vs = map the_val args; |
220 D = invocation_declclass G mode s a statT \<lparr>name=mn,parTs=pTs\<rparr>; |
213 D = invocation_declclass G mode s a statT \<lparr>name=mn,parTs=pTs\<rparr>; |
221 s'=init_lvars G D \<lparr>name=mn,parTs=pTs\<rparr> mode a' vs (Norm s)\<rbrakk> |
214 s'=init_lvars G D \<lparr>name=mn,parTs=pTs\<rparr> mode a' vs (Norm s)\<rbrakk> |
222 \<Longrightarrow> |
215 \<Longrightarrow> |
223 G\<turnstile>(\<langle>{accC,statT,mode}Lit a\<cdot>mn({pTs}args)\<rangle>,Norm s) |
216 G\<turnstile>(\<langle>{accC,statT,mode}Lit a\<cdot>mn({pTs}args)\<rangle>,Norm s) |
224 \<mapsto>1 (\<langle>Callee (locals s) (Methd D \<lparr>name=mn,parTs=pTs\<rparr>)\<rangle>,s')" |
217 \<mapsto>1 (\<langle>Callee (locals s) (Methd D \<lparr>name=mn,parTs=pTs\<rparr>)\<rangle>,s')" |
225 |
218 |
226 Callee: "\<lbrakk>G\<turnstile>(\<langle>e\<rangle>,Norm s) \<mapsto>1 (\<langle>e'::expr\<rangle>,s')\<rbrakk> |
219 | Callee: "\<lbrakk>G\<turnstile>(\<langle>e\<rangle>,Norm s) \<mapsto>1 (\<langle>e'::expr\<rangle>,s')\<rbrakk> |
227 \<Longrightarrow> |
220 \<Longrightarrow> |
228 G\<turnstile>(\<langle>Callee lcls_caller e\<rangle>,Norm s) \<mapsto>1 (\<langle>e'\<rangle>,s')" |
221 G\<turnstile>(\<langle>Callee lcls_caller e\<rangle>,Norm s) \<mapsto>1 (\<langle>e'\<rangle>,s')" |
229 |
222 |
230 CalleeRet: "G\<turnstile>(\<langle>Callee lcls_caller (Lit v)\<rangle>,Norm s) |
223 | CalleeRet: "G\<turnstile>(\<langle>Callee lcls_caller (Lit v)\<rangle>,Norm s) |
231 \<mapsto>1 (\<langle>Lit v\<rangle>,(set_lvars lcls_caller (Norm s)))" |
224 \<mapsto>1 (\<langle>Lit v\<rangle>,(set_lvars lcls_caller (Norm s)))" |
232 |
225 |
233 Methd: "G\<turnstile>(\<langle>Methd D sig\<rangle>,Norm s) \<mapsto>1 (\<langle>body G D sig\<rangle>,Norm s)" |
226 | Methd: "G\<turnstile>(\<langle>Methd D sig\<rangle>,Norm s) \<mapsto>1 (\<langle>body G D sig\<rangle>,Norm s)" |
234 |
227 |
235 Body: "G\<turnstile>(\<langle>Body D c\<rangle>,Norm s) \<mapsto>1 (\<langle>InsInitE (Init D) (Body D c)\<rangle>,Norm s)" |
228 | Body: "G\<turnstile>(\<langle>Body D c\<rangle>,Norm s) \<mapsto>1 (\<langle>InsInitE (Init D) (Body D c)\<rangle>,Norm s)" |
236 |
229 |
237 InsInitBody: |
230 | InsInitBody: |
238 "\<lbrakk>G\<turnstile>(\<langle>c\<rangle>,Norm s) \<mapsto>1 (\<langle>c'\<rangle>,s')\<rbrakk> |
231 "\<lbrakk>G\<turnstile>(\<langle>c\<rangle>,Norm s) \<mapsto>1 (\<langle>c'\<rangle>,s')\<rbrakk> |
239 \<Longrightarrow> |
232 \<Longrightarrow> |
240 G\<turnstile>(\<langle>InsInitE Skip (Body D c)\<rangle>,Norm s) \<mapsto>1(\<langle>InsInitE Skip (Body D c')\<rangle>,s')" |
233 G\<turnstile>(\<langle>InsInitE Skip (Body D c)\<rangle>,Norm s) \<mapsto>1(\<langle>InsInitE Skip (Body D c')\<rangle>,s')" |
241 InsInitBodyRet: |
234 | InsInitBodyRet: |
242 "G\<turnstile>(\<langle>InsInitE Skip (Body D Skip)\<rangle>,Norm s) |
235 "G\<turnstile>(\<langle>InsInitE Skip (Body D Skip)\<rangle>,Norm s) |
243 \<mapsto>1 (\<langle>Lit (the ((locals s) Result))\<rangle>,abupd (absorb Ret) (Norm s))" |
236 \<mapsto>1 (\<langle>Lit (the ((locals s) Result))\<rangle>,abupd (absorb Ret) (Norm s))" |
244 |
237 |
245 (* LVar: "G\<turnstile>(LVar vn,Norm s)" is already evaluated *) |
238 (* LVar: "G\<turnstile>(LVar vn,Norm s)" is already evaluated *) |
246 |
239 |
247 FVar: "\<lbrakk>\<not> inited statDeclC (globs s)\<rbrakk> |
240 | FVar: "\<lbrakk>\<not> inited statDeclC (globs s)\<rbrakk> |
248 \<Longrightarrow> |
241 \<Longrightarrow> |
249 G\<turnstile>(\<langle>{accC,statDeclC,stat}e..fn\<rangle>,Norm s) |
242 G\<turnstile>(\<langle>{accC,statDeclC,stat}e..fn\<rangle>,Norm s) |
250 \<mapsto>1 (\<langle>InsInitV (Init statDeclC) ({accC,statDeclC,stat}e..fn)\<rangle>,Norm s)" |
243 \<mapsto>1 (\<langle>InsInitV (Init statDeclC) ({accC,statDeclC,stat}e..fn)\<rangle>,Norm s)" |
251 InsInitFVarE: |
244 | InsInitFVarE: |
252 "\<lbrakk>G\<turnstile>(\<langle>e\<rangle>,Norm s) \<mapsto>1 (\<langle>e'\<rangle>,s')\<rbrakk> |
245 "\<lbrakk>G\<turnstile>(\<langle>e\<rangle>,Norm s) \<mapsto>1 (\<langle>e'\<rangle>,s')\<rbrakk> |
253 \<Longrightarrow> |
246 \<Longrightarrow> |
254 G\<turnstile>(\<langle>InsInitV Skip ({accC,statDeclC,stat}e..fn)\<rangle>,Norm s) |
247 G\<turnstile>(\<langle>InsInitV Skip ({accC,statDeclC,stat}e..fn)\<rangle>,Norm s) |
255 \<mapsto>1 (\<langle>InsInitV Skip ({accC,statDeclC,stat}e'..fn)\<rangle>,s')" |
248 \<mapsto>1 (\<langle>InsInitV Skip ({accC,statDeclC,stat}e'..fn)\<rangle>,s')" |
256 InsInitFVar: |
249 | InsInitFVar: |
257 "G\<turnstile>(\<langle>InsInitV Skip ({accC,statDeclC,stat}Lit a..fn)\<rangle>,Norm s) |
250 "G\<turnstile>(\<langle>InsInitV Skip ({accC,statDeclC,stat}Lit a..fn)\<rangle>,Norm s) |
258 \<mapsto>1 (\<langle>{accC,statDeclC,stat}Lit a..fn\<rangle>,Norm s)" |
251 \<mapsto>1 (\<langle>{accC,statDeclC,stat}Lit a..fn\<rangle>,Norm s)" |
259 -- {* Notice, that we do not have literal values for @{text vars}. |
252 -- {* Notice, that we do not have literal values for @{text vars}. |
260 The rules for accessing variables (@{text Acc}) and assigning to variables |
253 The rules for accessing variables (@{text Acc}) and assigning to variables |
261 (@{text Ass}), test this with the predicate @{text groundVar}. After |
254 (@{text Ass}), test this with the predicate @{text groundVar}. After |
264 cases of @{text New} or @{text NewC}. Instead we just return the evaluated |
257 cases of @{text New} or @{text NewC}. Instead we just return the evaluated |
265 @{text FVar} and test for initialisation in the rule @{text FVar}. |
258 @{text FVar} and test for initialisation in the rule @{text FVar}. |
266 *} |
259 *} |
267 |
260 |
268 |
261 |
269 AVarE1: "\<lbrakk>G\<turnstile>(\<langle>e1\<rangle>,Norm s) \<mapsto>1 (\<langle>e1'\<rangle>,s')\<rbrakk> |
262 | AVarE1: "\<lbrakk>G\<turnstile>(\<langle>e1\<rangle>,Norm s) \<mapsto>1 (\<langle>e1'\<rangle>,s')\<rbrakk> |
|
263 \<Longrightarrow> |
|
264 G\<turnstile>(\<langle>e1.[e2]\<rangle>,Norm s) \<mapsto>1 (\<langle>e1'.[e2]\<rangle>,s')" |
|
265 |
|
266 | AVarE2: "G\<turnstile>(\<langle>e2\<rangle>,Norm s) \<mapsto>1 (\<langle>e2'\<rangle>,s') |
|
267 \<Longrightarrow> |
|
268 G\<turnstile>(\<langle>Lit a.[e2]\<rangle>,Norm s) \<mapsto>1 (\<langle>Lit a.[e2']\<rangle>,s')" |
|
269 |
|
270 (* AVar: \<langle>(Lit a).[Lit i]\<rangle> is fully evaluated *) |
|
271 |
|
272 (* evaluation of expression lists *) |
|
273 |
|
274 -- {* @{text Nil} is fully evaluated *} |
|
275 |
|
276 | ConsHd: "\<lbrakk>G\<turnstile>(\<langle>e::expr\<rangle>,Norm s) \<mapsto>1 (\<langle>e'::expr\<rangle>,s')\<rbrakk> |
|
277 \<Longrightarrow> |
|
278 G\<turnstile>(\<langle>e#es\<rangle>,Norm s) \<mapsto>1 (\<langle>e'#es\<rangle>,s')" |
|
279 |
|
280 | ConsTl: "\<lbrakk>G\<turnstile>(\<langle>es\<rangle>,Norm s) \<mapsto>1 (\<langle>es'\<rangle>,s')\<rbrakk> |
|
281 \<Longrightarrow> |
|
282 G\<turnstile>(\<langle>(Lit v)#es\<rangle>,Norm s) \<mapsto>1 (\<langle>(Lit v)#es'\<rangle>,s')" |
|
283 |
|
284 (* execution of statements *) |
|
285 |
|
286 (* cf. 14.5 *) |
|
287 | Skip: "G\<turnstile>(\<langle>Skip\<rangle>,Norm s) \<mapsto>1 (\<langle>SKIP\<rangle>,Norm s)" |
|
288 |
|
289 | ExprE: "\<lbrakk>G\<turnstile>(\<langle>e\<rangle>,Norm s) \<mapsto>1 (\<langle>e'\<rangle>,s')\<rbrakk> |
|
290 \<Longrightarrow> |
|
291 G\<turnstile>(\<langle>Expr e\<rangle>,Norm s) \<mapsto>1 (\<langle>Expr e'\<rangle>,s')" |
|
292 | Expr: "G\<turnstile>(\<langle>Expr (Lit v)\<rangle>,Norm s) \<mapsto>1 (\<langle>Skip\<rangle>,Norm s)" |
|
293 |
|
294 |
|
295 | LabC: "\<lbrakk>G\<turnstile>(\<langle>c\<rangle>,Norm s) \<mapsto>1 (\<langle>c'\<rangle>,s')\<rbrakk> |
|
296 \<Longrightarrow> |
|
297 G\<turnstile>(\<langle>l\<bullet> c\<rangle>,Norm s) \<mapsto>1 (\<langle>l\<bullet> c'\<rangle>,s')" |
|
298 | Lab: "G\<turnstile>(\<langle>l\<bullet> Skip\<rangle>,s) \<mapsto>1 (\<langle>Skip\<rangle>, abupd (absorb l) s)" |
|
299 |
|
300 (* cf. 14.2 *) |
|
301 | CompC1: "\<lbrakk>G\<turnstile>(\<langle>c1\<rangle>,Norm s) \<mapsto>1 (\<langle>c1'\<rangle>,s')\<rbrakk> |
|
302 \<Longrightarrow> |
|
303 G\<turnstile>(\<langle>c1;; c2\<rangle>,Norm s) \<mapsto>1 (\<langle>c1';; c2\<rangle>,s')" |
|
304 |
|
305 | Comp: "G\<turnstile>(\<langle>Skip;; c2\<rangle>,Norm s) \<mapsto>1 (\<langle>c2\<rangle>,Norm s)" |
|
306 |
|
307 (* cf. 14.8.2 *) |
|
308 | IfE: "\<lbrakk>G\<turnstile>(\<langle>e\<rangle> ,Norm s) \<mapsto>1 (\<langle>e'\<rangle>,s')\<rbrakk> |
|
309 \<Longrightarrow> |
|
310 G\<turnstile>(\<langle>If(e) s1 Else s2\<rangle>,Norm s) \<mapsto>1 (\<langle>If(e') s1 Else s2\<rangle>,s')" |
|
311 | If: "G\<turnstile>(\<langle>If(Lit v) s1 Else s2\<rangle>,Norm s) |
|
312 \<mapsto>1 (\<langle>if the_Bool v then s1 else s2\<rangle>,Norm s)" |
|
313 |
|
314 (* cf. 14.10, 14.10.1 *) |
|
315 | Loop: "G\<turnstile>(\<langle>l\<bullet> While(e) c\<rangle>,Norm s) |
|
316 \<mapsto>1 (\<langle>If(e) (Cont l\<bullet>c;; l\<bullet> While(e) c) Else Skip\<rangle>,Norm s)" |
|
317 |
|
318 | Jmp: "G\<turnstile>(\<langle>Jmp j\<rangle>,Norm s) \<mapsto>1 (\<langle>Skip\<rangle>,(Some (Jump j), s))" |
|
319 |
|
320 | ThrowE: "\<lbrakk>G\<turnstile>(\<langle>e\<rangle>,Norm s) \<mapsto>1 (\<langle>e'\<rangle>,s')\<rbrakk> |
|
321 \<Longrightarrow> |
|
322 G\<turnstile>(\<langle>Throw e\<rangle>,Norm s) \<mapsto>1 (\<langle>Throw e'\<rangle>,s')" |
|
323 | Throw: "G\<turnstile>(\<langle>Throw (Lit a)\<rangle>,Norm s) \<mapsto>1 (\<langle>Skip\<rangle>,abupd (throw a) (Norm s))" |
|
324 |
|
325 | TryC1: "\<lbrakk>G\<turnstile>(\<langle>c1\<rangle>,Norm s) \<mapsto>1 (\<langle>c1'\<rangle>,s')\<rbrakk> |
|
326 \<Longrightarrow> |
|
327 G\<turnstile>(\<langle>Try c1 Catch(C vn) c2\<rangle>, Norm s) \<mapsto>1 (\<langle>Try c1' Catch(C vn) c2\<rangle>,s')" |
|
328 | Try: "\<lbrakk>G\<turnstile>s \<midarrow>sxalloc\<rightarrow> s'\<rbrakk> |
|
329 \<Longrightarrow> |
|
330 G\<turnstile>(\<langle>Try Skip Catch(C vn) c2\<rangle>, s) |
|
331 \<mapsto>1 (if G,s'\<turnstile>catch C then (\<langle>c2\<rangle>,new_xcpt_var vn s') |
|
332 else (\<langle>Skip\<rangle>,s'))" |
|
333 |
|
334 | FinC1: "\<lbrakk>G\<turnstile>(\<langle>c1\<rangle>,Norm s) \<mapsto>1 (\<langle>c1'\<rangle>,s')\<rbrakk> |
|
335 \<Longrightarrow> |
|
336 G\<turnstile>(\<langle>c1 Finally c2\<rangle>,Norm s) \<mapsto>1 (\<langle>c1' Finally c2\<rangle>,s')" |
|
337 |
|
338 | Fin: "G\<turnstile>(\<langle>Skip Finally c2\<rangle>,(a,s)) \<mapsto>1 (\<langle>FinA a c2\<rangle>,Norm s)" |
|
339 |
|
340 | FinAC: "\<lbrakk>G\<turnstile>(\<langle>c\<rangle>,s) \<mapsto>1 (\<langle>c'\<rangle>,s')\<rbrakk> |
|
341 \<Longrightarrow> |
|
342 G\<turnstile>(\<langle>FinA a c\<rangle>,s) \<mapsto>1 (\<langle>FinA a c'\<rangle>,s')" |
|
343 | FinA: "G\<turnstile>(\<langle>FinA a Skip\<rangle>,s) \<mapsto>1 (\<langle>Skip\<rangle>,abupd (abrupt_if (a\<noteq>None) a) s)" |
|
344 |
|
345 |
|
346 | Init1: "\<lbrakk>inited C (globs s)\<rbrakk> |
|
347 \<Longrightarrow> |
|
348 G\<turnstile>(\<langle>Init C\<rangle>,Norm s) \<mapsto>1 (\<langle>Skip\<rangle>,Norm s)" |
|
349 | Init: "\<lbrakk>the (class G C)=c; \<not> inited C (globs s)\<rbrakk> |
270 \<Longrightarrow> |
350 \<Longrightarrow> |
271 G\<turnstile>(\<langle>e1.[e2]\<rangle>,Norm s) \<mapsto>1 (\<langle>e1'.[e2]\<rangle>,s')" |
351 G\<turnstile>(\<langle>Init C\<rangle>,Norm s) |
272 |
352 \<mapsto>1 (\<langle>(if C = Object then Skip else (Init (super c)));; |
273 AVarE2: "G\<turnstile>(\<langle>e2\<rangle>,Norm s) \<mapsto>1 (\<langle>e2'\<rangle>,s') |
353 Expr (Callee (locals s) (InsInitE (init c) SKIP))\<rangle> |
274 \<Longrightarrow> |
354 ,Norm (init_class_obj G C s))" |
275 G\<turnstile>(\<langle>Lit a.[e2]\<rangle>,Norm s) \<mapsto>1 (\<langle>Lit a.[e2']\<rangle>,s')" |
|
276 |
|
277 (* AVar: \<langle>(Lit a).[Lit i]\<rangle> is fully evaluated *) |
|
278 |
|
279 (* evaluation of expression lists *) |
|
280 |
|
281 -- {* @{text Nil} is fully evaluated *} |
|
282 |
|
283 ConsHd: "\<lbrakk>G\<turnstile>(\<langle>e::expr\<rangle>,Norm s) \<mapsto>1 (\<langle>e'::expr\<rangle>,s')\<rbrakk> |
|
284 \<Longrightarrow> |
|
285 G\<turnstile>(\<langle>e#es\<rangle>,Norm s) \<mapsto>1 (\<langle>e'#es\<rangle>,s')" |
|
286 |
|
287 ConsTl: "\<lbrakk>G\<turnstile>(\<langle>es\<rangle>,Norm s) \<mapsto>1 (\<langle>es'\<rangle>,s')\<rbrakk> |
|
288 \<Longrightarrow> |
|
289 G\<turnstile>(\<langle>(Lit v)#es\<rangle>,Norm s) \<mapsto>1 (\<langle>(Lit v)#es'\<rangle>,s')" |
|
290 |
|
291 (* execution of statements *) |
|
292 |
|
293 (* cf. 14.5 *) |
|
294 Skip: "G\<turnstile>(\<langle>Skip\<rangle>,Norm s) \<mapsto>1 (\<langle>SKIP\<rangle>,Norm s)" |
|
295 |
|
296 ExprE: "\<lbrakk>G\<turnstile>(\<langle>e\<rangle>,Norm s) \<mapsto>1 (\<langle>e'\<rangle>,s')\<rbrakk> |
|
297 \<Longrightarrow> |
|
298 G\<turnstile>(\<langle>Expr e\<rangle>,Norm s) \<mapsto>1 (\<langle>Expr e'\<rangle>,s')" |
|
299 Expr: "G\<turnstile>(\<langle>Expr (Lit v)\<rangle>,Norm s) \<mapsto>1 (\<langle>Skip\<rangle>,Norm s)" |
|
300 |
|
301 |
|
302 LabC: "\<lbrakk>G\<turnstile>(\<langle>c\<rangle>,Norm s) \<mapsto>1 (\<langle>c'\<rangle>,s')\<rbrakk> |
|
303 \<Longrightarrow> |
|
304 G\<turnstile>(\<langle>l\<bullet> c\<rangle>,Norm s) \<mapsto>1 (\<langle>l\<bullet> c'\<rangle>,s')" |
|
305 Lab: "G\<turnstile>(\<langle>l\<bullet> Skip\<rangle>,s) \<mapsto>1 (\<langle>Skip\<rangle>, abupd (absorb l) s)" |
|
306 |
|
307 (* cf. 14.2 *) |
|
308 CompC1: "\<lbrakk>G\<turnstile>(\<langle>c1\<rangle>,Norm s) \<mapsto>1 (\<langle>c1'\<rangle>,s')\<rbrakk> |
|
309 \<Longrightarrow> |
|
310 G\<turnstile>(\<langle>c1;; c2\<rangle>,Norm s) \<mapsto>1 (\<langle>c1';; c2\<rangle>,s')" |
|
311 |
|
312 Comp: "G\<turnstile>(\<langle>Skip;; c2\<rangle>,Norm s) \<mapsto>1 (\<langle>c2\<rangle>,Norm s)" |
|
313 |
|
314 (* cf. 14.8.2 *) |
|
315 IfE: "\<lbrakk>G\<turnstile>(\<langle>e\<rangle> ,Norm s) \<mapsto>1 (\<langle>e'\<rangle>,s')\<rbrakk> |
|
316 \<Longrightarrow> |
|
317 G\<turnstile>(\<langle>If(e) s1 Else s2\<rangle>,Norm s) \<mapsto>1 (\<langle>If(e') s1 Else s2\<rangle>,s')" |
|
318 If: "G\<turnstile>(\<langle>If(Lit v) s1 Else s2\<rangle>,Norm s) |
|
319 \<mapsto>1 (\<langle>if the_Bool v then s1 else s2\<rangle>,Norm s)" |
|
320 |
|
321 (* cf. 14.10, 14.10.1 *) |
|
322 Loop: "G\<turnstile>(\<langle>l\<bullet> While(e) c\<rangle>,Norm s) |
|
323 \<mapsto>1 (\<langle>If(e) (Cont l\<bullet>c;; l\<bullet> While(e) c) Else Skip\<rangle>,Norm s)" |
|
324 |
|
325 Jmp: "G\<turnstile>(\<langle>Jmp j\<rangle>,Norm s) \<mapsto>1 (\<langle>Skip\<rangle>,(Some (Jump j), s))" |
|
326 |
|
327 ThrowE: "\<lbrakk>G\<turnstile>(\<langle>e\<rangle>,Norm s) \<mapsto>1 (\<langle>e'\<rangle>,s')\<rbrakk> |
|
328 \<Longrightarrow> |
|
329 G\<turnstile>(\<langle>Throw e\<rangle>,Norm s) \<mapsto>1 (\<langle>Throw e'\<rangle>,s')" |
|
330 Throw: "G\<turnstile>(\<langle>Throw (Lit a)\<rangle>,Norm s) \<mapsto>1 (\<langle>Skip\<rangle>,abupd (throw a) (Norm s))" |
|
331 |
|
332 TryC1: "\<lbrakk>G\<turnstile>(\<langle>c1\<rangle>,Norm s) \<mapsto>1 (\<langle>c1'\<rangle>,s')\<rbrakk> |
|
333 \<Longrightarrow> |
|
334 G\<turnstile>(\<langle>Try c1 Catch(C vn) c2\<rangle>, Norm s) \<mapsto>1 (\<langle>Try c1' Catch(C vn) c2\<rangle>,s')" |
|
335 Try: "\<lbrakk>G\<turnstile>s \<midarrow>sxalloc\<rightarrow> s'\<rbrakk> |
|
336 \<Longrightarrow> |
|
337 G\<turnstile>(\<langle>Try Skip Catch(C vn) c2\<rangle>, s) |
|
338 \<mapsto>1 (if G,s'\<turnstile>catch C then (\<langle>c2\<rangle>,new_xcpt_var vn s') |
|
339 else (\<langle>Skip\<rangle>,s'))" |
|
340 |
|
341 FinC1: "\<lbrakk>G\<turnstile>(\<langle>c1\<rangle>,Norm s) \<mapsto>1 (\<langle>c1'\<rangle>,s')\<rbrakk> |
|
342 \<Longrightarrow> |
|
343 G\<turnstile>(\<langle>c1 Finally c2\<rangle>,Norm s) \<mapsto>1 (\<langle>c1' Finally c2\<rangle>,s')" |
|
344 |
|
345 Fin: "G\<turnstile>(\<langle>Skip Finally c2\<rangle>,(a,s)) \<mapsto>1 (\<langle>FinA a c2\<rangle>,Norm s)" |
|
346 |
|
347 FinAC: "\<lbrakk>G\<turnstile>(\<langle>c\<rangle>,s) \<mapsto>1 (\<langle>c'\<rangle>,s')\<rbrakk> |
|
348 \<Longrightarrow> |
|
349 G\<turnstile>(\<langle>FinA a c\<rangle>,s) \<mapsto>1 (\<langle>FinA a c'\<rangle>,s')" |
|
350 FinA: "G\<turnstile>(\<langle>FinA a Skip\<rangle>,s) \<mapsto>1 (\<langle>Skip\<rangle>,abupd (abrupt_if (a\<noteq>None) a) s)" |
|
351 |
|
352 |
|
353 Init1: "\<lbrakk>inited C (globs s)\<rbrakk> |
|
354 \<Longrightarrow> |
|
355 G\<turnstile>(\<langle>Init C\<rangle>,Norm s) \<mapsto>1 (\<langle>Skip\<rangle>,Norm s)" |
|
356 Init: "\<lbrakk>the (class G C)=c; \<not> inited C (globs s)\<rbrakk> |
|
357 \<Longrightarrow> |
|
358 G\<turnstile>(\<langle>Init C\<rangle>,Norm s) |
|
359 \<mapsto>1 (\<langle>(if C = Object then Skip else (Init (super c)));; |
|
360 Expr (Callee (locals s) (InsInitE (init c) SKIP))\<rangle> |
|
361 ,Norm (init_class_obj G C s))" |
|
362 -- {* @{text InsInitE} is just used as trick to embed the statement |
355 -- {* @{text InsInitE} is just used as trick to embed the statement |
363 @{text "init c"} into an expression*} |
356 @{text "init c"} into an expression*} |
364 InsInitESKIP: |
357 | InsInitESKIP: |
365 "G\<turnstile>(\<langle>InsInitE Skip SKIP\<rangle>,Norm s) \<mapsto>1 (\<langle>SKIP\<rangle>,Norm s)" |
358 "G\<turnstile>(\<langle>InsInitE Skip SKIP\<rangle>,Norm s) \<mapsto>1 (\<langle>SKIP\<rangle>,Norm s)" |
|
359 |
|
360 abbreviation |
|
361 stepn:: "[prog, term \<times> state,nat,term \<times> state] \<Rightarrow> bool" ("_\<turnstile>_ \<mapsto>_ _"[61,82,82] 81) |
|
362 where "G\<turnstile>p \<mapsto>n p' \<equiv> (p,p') \<in> {(x, y). step G x y}^n" |
|
363 |
|
364 abbreviation |
|
365 steptr:: "[prog,term \<times> state,term \<times> state] \<Rightarrow> bool" ("_\<turnstile>_ \<mapsto>* _"[61,82,82] 81) |
|
366 where "G\<turnstile>p \<mapsto>* p' \<equiv> (p,p') \<in> {(x, y). step G x y}\<^sup>*" |
366 |
367 |
367 (* Equivalenzen: |
368 (* Equivalenzen: |
368 Bigstep zu Smallstep komplett. |
369 Bigstep zu Smallstep komplett. |
369 Smallstep zu Bigstep, nur wenn nicht die Ausdrücke Callee, FinA ,\<dots> |
370 Smallstep zu Bigstep, nur wenn nicht die Ausdrücke Callee, FinA ,\<dots> |
370 *) |
371 *) |