diff -r 720b0add5206 -r 89275a3ed7be src/HOL/Bali/DefiniteAssignment.thy --- a/src/HOL/Bali/DefiniteAssignment.thy Mon Dec 11 12:28:16 2006 +0100 +++ b/src/HOL/Bali/DefiniteAssignment.thy Mon Dec 11 16:06:14 2006 +0100 @@ -513,25 +513,6 @@ brk :: "breakass" --{* Definetly assigned variables for abrupt completion with a break *} -consts da :: "(env \ lname set \ term \ assigned) set" -text {* The environment @{term env} is only needed for the - conditional @{text "_ ? _ : _"}. - The definite assignment rules refer to the typing rules here to - distinguish boolean and other expressions. - *} - -syntax -da :: "env \ lname set \ term \ assigned \ bool" - ("_\ _ \_\ _" [65,65,65,65] 71) - -translations - "E\ B \t\ A" == "(E,B,t,A) \ da" - -text {* @{text B}: the ''assigned'' variables before evaluating term @{text t}; - @{text A}: the ''assigned'' variables after evaluating term @{text t} -*} - - constdefs rmlab :: "'a \ ('a,'b) tables \ ('a,'b) tables" "rmlab k A \ \ x. if x=k then UNIV else A x" @@ -543,35 +524,45 @@ constdefs range_inter_ts :: "('a,'b) tables \ 'b set" ("\\_" 80) "\\A \ {x |x. \ k. x \ A k}" -inductive "da" intros - - Skip: "Env\ B \\Skip\\ \nrm=B,brk=\ l. UNIV\" +text {* +In @{text "E\ B \t\ A"}, +@{text B} denotes the ''assigned'' variables before evaluating term @{text t}, +whereas @{text A} denotes the ''assigned'' variables after evaluating term @{text t}. +The environment @{term E} is only needed for the conditional @{text "_ ? _ : _"}. +The definite assignment rules refer to the typing rules here to +distinguish boolean and other expressions. +*} - Expr: "Env\ B \\e\\ A - \ - Env\ B \\Expr e\\ A" - Lab: "\Env\ B \\c\\ C; nrm A = nrm C \ (brk C) l; brk A = rmlab l (brk C)\ - \ - Env\ B \\Break l\ c\\ A" +inductive2 + da :: "env \ lname set \ term \ assigned \ bool" ("_\ _ \_\ _" [65,65,65,65] 71) +where + Skip: "Env\ B \\Skip\\ \nrm=B,brk=\ l. UNIV\" - Comp: "\Env\ B \\c1\\ C1; Env\ nrm C1 \\c2\\ C2; - nrm A = nrm C2; brk A = (brk C1) \\ (brk C2)\ - \ - Env\ B \\c1;; c2\\ A" +| Expr: "Env\ B \\e\\ A + \ + Env\ B \\Expr e\\ A" +| Lab: "\Env\ B \\c\\ C; nrm A = nrm C \ (brk C) l; brk A = rmlab l (brk C)\ + \ + Env\ B \\Break l\ c\\ A" - If: "\Env\ B \\e\\ E; - Env\ (B \ assigns_if True e) \\c1\\ C1; - Env\ (B \ assigns_if False e) \\c2\\ C2; - nrm A = nrm C1 \ nrm C2; - brk A = brk C1 \\ brk C2 \ - \ - Env\ B \\If(e) c1 Else c2\\ A" +| Comp: "\Env\ B \\c1\\ C1; Env\ nrm C1 \\c2\\ C2; + nrm A = nrm C2; brk A = (brk C1) \\ (brk C2)\ + \ + Env\ B \\c1;; c2\\ A" + +| If: "\Env\ B \\e\\ E; + Env\ (B \ assigns_if True e) \\c1\\ C1; + Env\ (B \ assigns_if False e) \\c2\\ C2; + nrm A = nrm C1 \ nrm C2; + brk A = brk C1 \\ brk C2 \ + \ + Env\ B \\If(e) c1 Else c2\\ A" --{* Note that @{term E} is not further used, because we take the specialized sets that also consider if the expression evaluates to true or false. Inside of @{term e} there is no {\tt break} or {\tt finally}, so the break map of @{term E} will be the trivial one. So - @{term "Env\B \\e\\ E"} is just used to enshure the definite assignment in + @{term "Env\B \\e\\ E"} is just used to ensure the definite assignment in expression @{term e}. Notice the implicit analysis of a constant boolean expression @{term e} in this rule. For example, if @{term e} is constantly @{term True} then @@ -585,12 +576,12 @@ contribution. *} - Loop: "\Env\ B \\e\\ E; - Env\ (B \ assigns_if True e) \\c\\ C; - nrm A = nrm C \ (B \ assigns_if False e); - brk A = brk C\ - \ - Env\ B \\l\ While(e) c\\ A" +| Loop: "\Env\ B \\e\\ E; + Env\ (B \ assigns_if True e) \\c\\ C; + nrm A = nrm C \ (B \ assigns_if False e); + brk A = brk C\ + \ + Env\ B \\l\ While(e) c\\ A" --{* The @{text Loop} rule resembles some of the ideas of the @{text If} rule. For the @{term "nrm A"} the set @{term "B \ assigns_if False e"} will be @{term UNIV} if the condition is constantly true. To normally exit @@ -602,14 +593,14 @@ handle the breaks specially. *} - Jmp: "\jump=Ret \ Result \ B; - nrm A = UNIV; - brk A = (case jump of - Break l \ \ k. if k=l then B else UNIV - | Cont l \ \ k. UNIV - | Ret \ \ k. UNIV)\ - \ - Env\ B \\Jmp jump\\ A" +| Jmp: "\jump=Ret \ Result \ B; + nrm A = UNIV; + brk A = (case jump of + Break l \ \ k. if k=l then B else UNIV + | Cont l \ \ k. UNIV + | Ret \ \ k. UNIV)\ + \ + Env\ B \\Jmp jump\\ A" --{* In case of a break to label @{term l} the corresponding break set is all variables assigned before the break. The assigned variables for normal completion of the @{term Jmp} is @{term UNIV}, because the statement will @@ -618,21 +609,21 @@ assigned. *} - Throw: "\Env\ B \\e\\ E; nrm A = UNIV; brk A = (\ l. UNIV)\ - \ Env\ B \\Throw e\\ A" +| Throw: "\Env\ B \\e\\ E; nrm A = UNIV; brk A = (\ l. UNIV)\ + \ Env\ B \\Throw e\\ A" - Try: "\Env\ B \\c1\\ C1; - Env\lcl := lcl Env(VName vn\Class C)\\ (B \ {VName vn}) \\c2\\ C2; - nrm A = nrm C1 \ nrm C2; - brk A = brk C1 \\ brk C2\ - \ Env\ B \\Try c1 Catch(C vn) c2\\ A" +| Try: "\Env\ B \\c1\\ C1; + Env\lcl := lcl Env(VName vn\Class C)\\ (B \ {VName vn}) \\c2\\ C2; + nrm A = nrm C1 \ nrm C2; + brk A = brk C1 \\ brk C2\ + \ Env\ B \\Try c1 Catch(C vn) c2\\ A" - Fin: "\Env\ B \\c1\\ C1; - Env\ B \\c2\\ C2; - nrm A = nrm C1 \ nrm C2; - brk A = ((brk C1) \\\<^sub>\ (nrm C2)) \\ (brk C2)\ - \ - Env\ B \\c1 Finally c2\\ A" +| Fin: "\Env\ B \\c1\\ C1; + Env\ B \\c2\\ C2; + nrm A = nrm C1 \ nrm C2; + brk A = ((brk C1) \\\<^sub>\ (nrm C2)) \\ (brk C2)\ + \ + Env\ B \\c1 Finally c2\\ A" --{* The set of assigned variables before execution @{term c2} are the same as before execution @{term c1}, because @{term c1} could throw an exception and so we can't guarantee that any variable will be assigned in @{term c1}. @@ -671,7 +662,7 @@ and @{text NewA} *} - Init: "Env\ B \\Init C\\ \nrm=B,brk=\ l. UNIV\" +| Init: "Env\ B \\Init C\\ \nrm=B,brk=\ l. UNIV\" --{* Wellformedness of a program will ensure, that every static initialiser is definetly assigned and the jumps are nested correctly. The case here for @{term Init} is just for convenience, to get a proper precondition @@ -679,91 +670,91 @@ expand the initialisation on every point where it is triggerred by the evaluation rules. *} - NewC: "Env\ B \\NewC C\\ \nrm=B,brk=\ l. UNIV\" +| NewC: "Env\ B \\NewC C\\ \nrm=B,brk=\ l. UNIV\" + +| NewA: "Env\ B \\e\\ A + \ + Env\ B \\New T[e]\\ A" - NewA: "Env\ B \\e\\ A - \ - Env\ B \\New T[e]\\ A" +| Cast: "Env\ B \\e\\ A + \ + Env\ B \\Cast T e\\ A" - Cast: "Env\ B \\e\\ A - \ - Env\ B \\Cast T e\\ A" +| Inst: "Env\ B \\e\\ A + \ + Env\ B \\e InstOf T\\ A" - Inst: "Env\ B \\e\\ A - \ - Env\ B \\e InstOf T\\ A" +| Lit: "Env\ B \\Lit v\\ \nrm=B,brk=\ l. UNIV\" - Lit: "Env\ B \\Lit v\\ \nrm=B,brk=\ l. UNIV\" +| UnOp: "Env\ B \\e\\ A + \ + Env\ B \\UnOp unop e\\ A" - UnOp: "Env\ B \\e\\ A - \ - Env\ B \\UnOp unop e\\ A" +| CondAnd: "\Env\ B \\e1\\ E1; Env\ (B \ assigns_if True e1) \\e2\\ E2; + nrm A = B \ (assigns_if True (BinOp CondAnd e1 e2) \ + assigns_if False (BinOp CondAnd e1 e2)); + brk A = (\ l. UNIV) \ + \ + Env\ B \\BinOp CondAnd e1 e2\\ A" - CondAnd: "\Env\ B \\e1\\ E1; Env\ (B \ assigns_if True e1) \\e2\\ E2; - nrm A = B \ (assigns_if True (BinOp CondAnd e1 e2) \ - assigns_if False (BinOp CondAnd e1 e2)); +| CondOr: "\Env\ B \\e1\\ E1; Env\ (B \ assigns_if False e1) \\e2\\ E2; + nrm A = B \ (assigns_if True (BinOp CondOr e1 e2) \ + assigns_if False (BinOp CondOr e1 e2)); brk A = (\ l. UNIV) \ - \ - Env\ B \\BinOp CondAnd e1 e2\\ A" + \ + Env\ B \\BinOp CondOr e1 e2\\ A" - CondOr: "\Env\ B \\e1\\ E1; Env\ (B \ assigns_if False e1) \\e2\\ E2; - nrm A = B \ (assigns_if True (BinOp CondOr e1 e2) \ - assigns_if False (BinOp CondOr e1 e2)); - brk A = (\ l. UNIV) \ - \ - Env\ B \\BinOp CondOr e1 e2\\ A" +| BinOp: "\Env\ B \\e1\\ E1; Env\ nrm E1 \\e2\\ A; + binop \ CondAnd; binop \ CondOr\ + \ + Env\ B \\BinOp binop e1 e2\\ A" - BinOp: "\Env\ B \\e1\\ E1; Env\ nrm E1 \\e2\\ A; - binop \ CondAnd; binop \ CondOr\ - \ - Env\ B \\BinOp binop e1 e2\\ A" +| Super: "This \ B + \ + Env\ B \\Super\\ \nrm=B,brk=\ l. UNIV\" - Super: "This \ B - \ - Env\ B \\Super\\ \nrm=B,brk=\ l. UNIV\" - - AccLVar: "\vn \ B; - nrm A = B; brk A = (\ k. UNIV)\ - \ - Env\ B \\Acc (LVar vn)\\ A" +| AccLVar: "\vn \ B; + nrm A = B; brk A = (\ k. UNIV)\ + \ + Env\ B \\Acc (LVar vn)\\ A" --{* To properly access a local variable we have to test the definite assignment here. The variable must occur in the set @{term B} *} - Acc: "\\ vn. v \ LVar vn; - Env\ B \\v\\ A\ - \ - Env\ B \\Acc v\\ A" +| Acc: "\\ vn. v \ LVar vn; + Env\ B \\v\\ A\ + \ + Env\ B \\Acc v\\ A" - AssLVar: "\Env\ B \\e\\ E; nrm A = nrm E \ {vn}; brk A = brk E\ - \ - Env\ B \\(LVar vn) := e\\ A" +| AssLVar: "\Env\ B \\e\\ E; nrm A = nrm E \ {vn}; brk A = brk E\ + \ + Env\ B \\(LVar vn) := e\\ A" - Ass: "\\ vn. v \ LVar vn; Env\ B \\v\\ V; Env\ nrm V \\e\\ A\ - \ - Env\ B \\v := e\\ A" +| Ass: "\\ vn. v \ LVar vn; Env\ B \\v\\ V; Env\ nrm V \\e\\ A\ + \ + Env\ B \\v := e\\ A" - CondBool: "\Env\(c ? e1 : e2)\-(PrimT Boolean); - Env\ B \\c\\ C; - Env\ (B \ assigns_if True c) \\e1\\ E1; - Env\ (B \ assigns_if False c) \\e2\\ E2; - nrm A = B \ (assigns_if True (c ? e1 : e2) \ - assigns_if False (c ? e1 : e2)); - brk A = (\ l. UNIV)\ - \ - Env\ B \\c ? e1 : e2\\ A" +| CondBool: "\Env\(c ? e1 : e2)\-(PrimT Boolean); + Env\ B \\c\\ C; + Env\ (B \ assigns_if True c) \\e1\\ E1; + Env\ (B \ assigns_if False c) \\e2\\ E2; + nrm A = B \ (assigns_if True (c ? e1 : e2) \ + assigns_if False (c ? e1 : e2)); + brk A = (\ l. UNIV)\ + \ + Env\ B \\c ? e1 : e2\\ A" - Cond: "\\ Env\(c ? e1 : e2)\-(PrimT Boolean); - Env\ B \\c\\ C; - Env\ (B \ assigns_if True c) \\e1\\ E1; - Env\ (B \ assigns_if False c) \\e2\\ E2; - nrm A = nrm E1 \ nrm E2; brk A = (\ l. UNIV)\ - \ - Env\ B \\c ? e1 : e2\\ A" +| Cond: "\\ Env\(c ? e1 : e2)\-(PrimT Boolean); + Env\ B \\c\\ C; + Env\ (B \ assigns_if True c) \\e1\\ E1; + Env\ (B \ assigns_if False c) \\e2\\ E2; + nrm A = nrm E1 \ nrm E2; brk A = (\ l. UNIV)\ + \ + Env\ B \\c ? e1 : e2\\ A" - Call: "\Env\ B \\e\\ E; Env\ nrm E \\args\\ A\ - \ - Env\ B \\{accC,statT,mode}e\mn({pTs}args)\\ A" +| Call: "\Env\ B \\e\\ E; Env\ nrm E \\args\\ A\ + \ + Env\ B \\{accC,statT,mode}e\mn({pTs}args)\\ A" -- {* The interplay of @{term Call}, @{term Methd} and @{term Body}: Why rules for @{term Methd} and @{term Body} at all? Note that a @@ -786,16 +777,16 @@ also a precondition for type-safety and so we can omit some assertion that are already ensured by well-typedness. *} - Methd: "\methd (prg Env) D sig = Some m; - Env\ B \\Body (declclass m) (stmt (mbody (mthd m)))\\ A - \ +| Methd: "\methd (prg Env) D sig = Some m; + Env\ B \\Body (declclass m) (stmt (mbody (mthd m)))\\ A + \ + \ + Env\ B \\Methd D sig\\ A" + +| Body: "\Env\ B \\c\\ C; jumpNestingOkS {Ret} c; Result \ nrm C; + nrm A = B; brk A = (\ l. UNIV)\ \ - Env\ B \\Methd D sig\\ A" - - Body: "\Env\ B \\c\\ C; jumpNestingOkS {Ret} c; Result \ nrm C; - nrm A = B; brk A = (\ l. UNIV)\ - \ - Env\ B \\Body D c\\ A" + Env\ B \\Body D c\\ A" -- {* Note that @{term A} is not correlated to @{term C}. If the body statement returns abruptly with return, evaluation of @{term Body} will absorb this return and complete normally. So we cannot trivially @@ -809,21 +800,21 @@ set and then this information must be carried over to the @{term Body} rule by the conformance predicate of the state. *} - LVar: "Env\ B \\LVar vn\\ \nrm=B, brk=\ l. UNIV\" +| LVar: "Env\ B \\LVar vn\\ \nrm=B, brk=\ l. UNIV\" - FVar: "Env\ B \\e\\ A - \ - Env\ B \\{accC,statDeclC,stat}e..fn\\ A" - - AVar: "\Env\ B \\e1\\ E1; Env\ nrm E1 \\e2\\ A\ +| FVar: "Env\ B \\e\\ A \ - Env\ B \\e1.[e2]\\ A" + Env\ B \\{accC,statDeclC,stat}e..fn\\ A" - Nil: "Env\ B \\[]::expr list\\ \nrm=B, brk=\ l. UNIV\" +| AVar: "\Env\ B \\e1\\ E1; Env\ nrm E1 \\e2\\ A\ + \ + Env\ B \\e1.[e2]\\ A" - Cons: "\Env\ B \\e::expr\\ E; Env\ nrm E \\es\\ A\ - \ - Env\ B \\e#es\\ A" +| Nil: "Env\ B \\[]::expr list\\ \nrm=B, brk=\ l. UNIV\" + +| Cons: "\Env\ B \\e::expr\\ E; Env\ nrm E \\es\\ A\ + \ + Env\ B \\e#es\\ A" declare inj_term_sym_simps [simp] @@ -832,7 +823,7 @@ ML_setup {* change_simpset (fn ss => ss delloop "split_all_tac"); *} -inductive_cases da_elim_cases [cases set]: +inductive_cases2 da_elim_cases [cases set]: "Env\ B \\Skip\\ A" "Env\ B \In1r Skip\ A" "Env\ B \\Expr e\\ A" @@ -1076,7 +1067,7 @@ from Expr.prems Expr.hyps show ?case by cases simp next - case (Lab A B C Env c l B' A') + case (Lab Env B c C A l B' A') have A: "nrm A = nrm C \ brk C l" "brk A = rmlab l (brk C)" . have "PROP ?Hyp Env B \c\ C" . moreover @@ -1102,7 +1093,7 @@ ultimately show ?case by simp next - case (Comp A B C1 C2 Env c1 c2 B' A') + case (Comp Env B c1 C1 c2 C2 A B' A') have A: "nrm A = nrm C2" "brk A = brk C1 \\ brk C2" . have "Env\ B' \\c1;; c2\\ A'" . then obtain C1' C2' @@ -1123,7 +1114,7 @@ show ?case by auto next - case (If A B C1 C2 E Env c1 c2 e B' A') + case (If Env B e E c1 C1 c2 C2 A B' A') have A: "nrm A = nrm C1 \ nrm C2" "brk A = brk C1 \\ brk C2" . have "Env\ B' \\If(e) c1 Else c2\\ A'" . then obtain C1' C2' @@ -1144,7 +1135,7 @@ show ?case by auto next - case (Loop A B C E Env c e l B' A') + case (Loop Env B e E c C A l B' A') have A: "nrm A = nrm C \ (B \ assigns_if False e)" "brk A = brk C" . have "Env\ B' \\l\ While(e) c\\ A'" . @@ -1180,12 +1171,12 @@ ultimately show ?case by auto next - case (Jmp A B Env jump B' A') + case (Jmp jump B A Env B' A') thus ?case by (elim da_elim_cases) (auto split: jump.splits) next case Throw thus ?case by - (erule da_elim_cases, auto) next - case (Try A B C C1 C2 Env c1 c2 vn B' A') + case (Try Env B c1 C1 vn C c2 C2 A B' A') have A: "nrm A = nrm C1 \ nrm C2" "brk A = brk C1 \\ brk C2" . have "Env\ B' \\Try c1 Catch(C vn) c2\\ A'" . @@ -1210,7 +1201,7 @@ show ?case by auto next - case (Fin A B C1 C2 Env c1 c2 B' A') + case (Fin Env B c1 C1 c2 C2 A B' A') have A: "nrm A = nrm C1 \ nrm C2" "brk A = (brk C1 \\\<^sub>\ nrm C2) \\ (brk C2)" . have "Env\ B' \\c1 Finally c2\\ A'" . @@ -1247,7 +1238,7 @@ next case UnOp thus ?case by - (erule da_elim_cases, auto) next - case (CondAnd A B E1 E2 Env e1 e2 B' A') + case (CondAnd Env B e1 E1 e2 E2 A B' A') have A: "nrm A = B \ assigns_if True (BinOp CondAnd e1 e2) \ assigns_if False (BinOp CondAnd e1 e2)" @@ -1276,7 +1267,7 @@ next case Ass thus ?case by - (erule da_elim_cases, auto) next - case (CondBool A B C E1 E2 Env c e1 e2 B' A') + case (CondBool Env c e1 e2 B C E1 E2 A B' A') have A: "nrm A = B \ assigns_if True (c ? e1 : e2) \ assigns_if False (c ? e1 : e2)" @@ -1295,7 +1286,7 @@ with A A' show ?case by auto next - case (Cond A B C E1 E2 Env c e1 e2 B' A') + case (Cond Env c e1 e2 B C E1 E2 A B' A') have A: "nrm A = nrm E1 \ nrm E2" "brk A = (\l. UNIV)" . have not_bool: "\ Env\ (c ? e1 : e2)\- (PrimT Boolean)" . @@ -1354,7 +1345,7 @@ next case Expr thus ?case by (iprover intro: da.Expr) next - case (Lab A B C Env c l B') + case (Lab Env B c C A l B') have "PROP ?Hyp Env B \c\" . moreover have B': "B \ B'" . @@ -1364,7 +1355,7 @@ by (iprover intro: da.Lab) thus ?case .. next - case (Comp A B C1 C2 Env c1 c2 B') + case (Comp Env B c1 C1 c2 C2 A B') have da_c1: "Env\ B \\c1\\ C1" . have "PROP ?Hyp Env B \c1\" . moreover @@ -1383,7 +1374,7 @@ by (iprover intro: da.Comp) thus ?case .. next - case (If A B C1 C2 E Env c1 c2 e B') + case (If Env B e E c1 C1 c2 C2 A B') have B': "B \ B'" . obtain E' where "Env\ B' \\e\\ E'" proof - @@ -1417,7 +1408,7 @@ by (iprover intro: da.If) thus ?case .. next - case (Loop A B C E Env c e l B') + case (Loop Env B e E c C A l B') have B': "B \ B'" . obtain E' where "Env\ B' \\e\\ E'" proof - @@ -1441,7 +1432,7 @@ by (iprover intro: da.Loop ) thus ?case .. next - case (Jmp A B Env jump B') + case (Jmp jump B A Env B') have B': "B \ B'" . with Jmp.hyps have "jump = Ret \ Result \ B' " by auto @@ -1460,7 +1451,7 @@ next case Throw thus ?case by (iprover intro: da.Throw ) next - case (Try A B C C1 C2 Env c1 c2 vn B') + case (Try Env B c1 C1 vn C c2 C2 A B') have B': "B \ B'" . obtain C1' where "Env\ B' \\c1\\ C1'" proof - @@ -1485,7 +1476,7 @@ by (iprover intro: da.Try ) thus ?case .. next - case (Fin A B C1 C2 Env c1 c2 B') + case (Fin Env B c1 C1 c2 C2 A B') have B': "B \ B'" . obtain C1' where C1': "Env\ B' \\c1\\ C1'" proof - @@ -1519,7 +1510,7 @@ next case UnOp thus ?case by (iprover intro: da.UnOp) next - case (CondAnd A B E1 E2 Env e1 e2 B') + case (CondAnd Env B e1 E1 e2 E2 A B') have B': "B \ B'" . obtain E1' where "Env\ B' \\e1\\ E1'" proof - @@ -1541,7 +1532,7 @@ by (iprover intro: da.CondAnd) thus ?case .. next - case (CondOr A B E1 E2 Env e1 e2 B') + case (CondOr Env B e1 E1 e2 E2 A B') have B': "B \ B'" . obtain E1' where "Env\ B' \\e1\\ E1'" proof - @@ -1563,7 +1554,7 @@ by (iprover intro: da.CondOr) thus ?case .. next - case (BinOp A B E1 Env binop e1 e2 B') + case (BinOp Env B e1 E1 e2 A binop B') have B': "B \ B'" . obtain E1' where E1': "Env\ B' \\e1\\ E1'" proof - @@ -1593,7 +1584,7 @@ by auto thus ?case by (iprover intro: da.Super) next - case (AccLVar A B Env vn B') + case (AccLVar vn B A Env B') have "vn \ B" . moreover have "B \ B'" . @@ -1602,7 +1593,7 @@ next case Acc thus ?case by (iprover intro: da.Acc) next - case (AssLVar A B E Env e vn B') + case (AssLVar Env B e E A vn B') have B': "B \ B'" . then obtain E' where "Env\ B' \\e\\ E'" by (rule AssLVar.hyps [elim_format]) iprover @@ -1611,7 +1602,7 @@ by (iprover intro: da.AssLVar) thus ?case .. next - case (Ass A B Env V e v B') + case (Ass v Env B V e A B') have B': "B \ B'" . have "\vn. v \ LVar vn". moreover @@ -1637,7 +1628,7 @@ by (iprover intro: da.Ass) thus ?case .. next - case (CondBool A B C E1 E2 Env c e1 e2 B') + case (CondBool Env c e1 e2 B C E1 E2 A B') have B': "B \ B'" . have "Env\(c ? e1 : e2)\-(PrimT Boolean)" . moreover obtain C' where C': "Env\ B' \\c\\ C'" @@ -1673,7 +1664,7 @@ by (iprover intro: da.CondBool) thus ?case .. next - case (Cond A B C E1 E2 Env c e1 e2 B') + case (Cond Env c e1 e2 B C E1 E2 A B') have B': "B \ B'" . have "\ Env\(c ? e1 : e2)\-(PrimT Boolean)" . moreover obtain C' where C': "Env\ B' \\c\\ C'" @@ -1709,7 +1700,7 @@ by (iprover intro: da.Cond) thus ?case .. next - case (Call A B E Env accC args e mn mode pTs statT B') + case (Call Env B e E args A accC statT mode mn pTs B') have B': "B \ B'" . obtain E' where E': "Env\ B' \\e\\ E'" proof - @@ -1735,7 +1726,7 @@ next case Methd thus ?case by (iprover intro: da.Methd) next - case (Body A B C D Env c B') + case (Body Env B c C A D B') have B': "B \ B'" . obtain C' where C': "Env\ B' \\c\\ C'" and nrm_C': "nrm C \ nrm C'" proof - @@ -1763,7 +1754,7 @@ next case FVar thus ?case by (iprover intro: da.FVar) next - case (AVar A B E1 Env e1 e2 B') + case (AVar Env B e1 E1 e2 A B') have B': "B \ B'" . obtain E1' where E1': "Env\ B' \\e1\\ E1'" proof - @@ -1789,7 +1780,7 @@ next case Nil thus ?case by (iprover intro: da.Nil) next - case (Cons A B E Env e es B') + case (Cons Env B e E es A B') have B': "B \ B'" . obtain E' where E': "Env\ B' \\e\\ E'" proof -