# HG changeset patch # User wenzelm # Date 1375717927 -7200 # Node ID 438f578ef1d9b28eff83d1c0ff0bce14702db830 # Parent 02a7e7180ee57f2bd391dbb060bcad6eb2f7418b tuned proofs; diff -r 02a7e7180ee5 -r 438f578ef1d9 src/HOL/MicroJava/BV/BVExample.thy --- a/src/HOL/MicroJava/BV/BVExample.thy Mon Aug 05 17:14:02 2013 +0200 +++ b/src/HOL/MicroJava/BV/BVExample.thy Mon Aug 05 17:52:07 2013 +0200 @@ -422,7 +422,7 @@ apply (rule subsetI) apply (erule UN_E) apply (case_tac "\ stable r step ss p") - apply simp+ + apply simp_all done also have "\f. (UN p:{.. ind. length pre \ ind \ (pre @ a # post) ! (Suc ind) = (pre @ post) ! ind" -apply (induct "pre") +lemma app_nth_greater_len [simp]: + "length pre \ ind \ (pre @ a # post) ! (Suc ind) = (pre @ post) ! ind" +apply (induct pre arbitrary: ind) apply auto apply (case_tac ind) apply auto done lemma length_takeWhile: "v \ set xs \ length (takeWhile (%z. z~=v) xs) < length xs" -by (induct xs, auto) +by (induct xs) auto lemma nth_length_takeWhile [simp]: "v \ set xs \ xs ! (length (takeWhile (%z. z~=v) xs)) = v" -by (induct xs, auto) +by (induct xs) auto lemma map_list_update [simp]: diff -r 02a7e7180ee5 -r 438f578ef1d9 src/HOL/MicroJava/Comp/CorrComp.thy --- a/src/HOL/MicroJava/Comp/CorrComp.thy Mon Aug 05 17:14:02 2013 +0200 +++ b/src/HOL/MicroJava/Comp/CorrComp.thy Mon Aug 05 17:52:07 2013 +0200 @@ -16,7 +16,7 @@ "(G \ xs -ex\val-> xs' \ gx xs' = None \ gx xs = None) \ (G \ xs -exs[\]vals-> xs' \ gx xs' = None \ gx xs = None) \ (G \ xs -st-> xs' \ gx xs' = None \ gx xs = None)" -by (induct rule: eval_evals_exec.induct, auto) +by (induct rule: eval_evals_exec.induct) auto (* instance of eval_evals_exec_xcpt for eval *) diff -r 02a7e7180ee5 -r 438f578ef1d9 src/HOL/MicroJava/Comp/TypeInf.thy --- a/src/HOL/MicroJava/Comp/TypeInf.thy Mon Aug 05 17:14:02 2013 +0200 +++ b/src/HOL/MicroJava/Comp/TypeInf.thy Mon Aug 05 17:52:07 2013 +0200 @@ -15,67 +15,85 @@ (*** Inversion of typing rules -- to be moved into WellType.thy Also modify the wtpd_expr_\ proofs in CorrComp.thy ***) -lemma NewC_invers: "E\NewC C::T - \ T = Class C \ is_class (prg E) C" -by (erule ty_expr.cases, auto) +lemma NewC_invers: + assumes "E\NewC C::T" + shows "T = Class C \ is_class (prg E) C" + using assms by cases auto -lemma Cast_invers: "E\Cast D e::T - \ \ C. T = Class D \ E\e::C \ is_class (prg E) D \ prg E\C\? Class D" -by (erule ty_expr.cases, auto) +lemma Cast_invers: + assumes "E\Cast D e::T" + shows "\C. T = Class D \ E\e::C \ is_class (prg E) D \ prg E\C\? Class D" + using assms by cases auto -lemma Lit_invers: "E\Lit x::T - \ typeof (\v. None) x = Some T" -by (erule ty_expr.cases, auto) +lemma Lit_invers: + assumes "E\Lit x::T" + shows "typeof (\v. None) x = Some T" + using assms by cases auto -lemma LAcc_invers: "E\LAcc v::T - \ localT E v = Some T \ is_type (prg E) T" -by (erule ty_expr.cases, auto) +lemma LAcc_invers: + assumes "E\LAcc v::T" + shows "localT E v = Some T \ is_type (prg E) T" + using assms by cases auto -lemma BinOp_invers: "E\BinOp bop e1 e2::T' - \ \ T. E\e1::T \ E\e2::T \ +lemma BinOp_invers: + assumes "E\BinOp bop e1 e2::T'" + shows "\T. E\e1::T \ E\e2::T \ (if bop = Eq then T' = PrimT Boolean else T' = T \ T = PrimT Integer)" -by (erule ty_expr.cases, auto) + using assms by cases auto -lemma LAss_invers: "E\v::=e::T' - \ \ T. v ~= This \ E\LAcc v::T \ E\e::T' \ prg E\T'\T" -by (erule ty_expr.cases, auto) +lemma LAss_invers: + assumes "E\v::=e::T'" + shows "\T. v ~= This \ E\LAcc v::T \ E\e::T' \ prg E\T'\T" + using assms by cases auto -lemma FAcc_invers: "E\{fd}a..fn::fT - \ \ C. E\a::Class C \ field (prg E,C) fn = Some (fd,fT)" -by (erule ty_expr.cases, auto) +lemma FAcc_invers: + assumes "E\{fd}a..fn::fT" + shows "\C. E\a::Class C \ field (prg E,C) fn = Some (fd, fT)" + using assms by cases auto -lemma FAss_invers: "E\{fd}a..fn:=v::T' -\ \ T. E\{fd}a..fn::T \ E\v ::T' \ prg E\T'\T" -by (erule ty_expr.cases, auto) +lemma FAss_invers: + assumes "E\{fd}a..fn:=v::T'" + shows "\T. E\{fd}a..fn::T \ E\v ::T' \ prg E\T'\T" + using assms by cases auto -lemma Call_invers: "E\{C}a..mn({pTs'}ps)::rT - \ \ pTs md. - E\a::Class C \ E\ps[::]pTs \ max_spec (prg E) C (mn, pTs) = {((md,rT),pTs')}" -by (erule ty_expr.cases, auto) +lemma Call_invers: + assumes "E\{C}a..mn({pTs'}ps)::rT" + shows "\pTs md. + E\a::Class C \ E\ps[::]pTs \ max_spec (prg E) C (mn, pTs) = {((md,rT),pTs')}" + using assms by cases auto -lemma Nil_invers: "E\[] [::] Ts \ Ts = []" -by (erule ty_exprs.cases, auto) +lemma Nil_invers: + assumes "E\[] [::] Ts" + shows "Ts = []" + using assms by cases auto -lemma Cons_invers: "E\e#es[::]Ts \ - \ T Ts'. Ts = T#Ts' \ E \e::T \ E \es[::]Ts'" -by (erule ty_exprs.cases, auto) +lemma Cons_invers: + assumes "E\e#es[::]Ts" + shows "\T Ts'. Ts = T#Ts' \ E \e::T \ E \es[::]Ts'" + using assms by cases auto -lemma Expr_invers: "E\Expr e\ \ \ T. E\e::T" -by (erule wt_stmt.cases, auto) +lemma Expr_invers: + assumes "E\Expr e\" + shows "\ T. E\e::T" + using assms by cases auto -lemma Comp_invers: "E\s1;; s2\ \ E\s1\ \ E\s2\" -by (erule wt_stmt.cases, auto) +lemma Comp_invers: + assumes "E\s1;; s2\" + shows "E\s1\ \ E\s2\" + using assms by cases auto -lemma Cond_invers: "E\If(e) s1 Else s2\ - \ E\e::PrimT Boolean \ E\s1\ \ E\s2\" -by (erule wt_stmt.cases, auto) +lemma Cond_invers: + assumes "E\If(e) s1 Else s2\" + shows "E\e::PrimT Boolean \ E\s1\ \ E\s2\" + using assms by cases auto -lemma Loop_invers: "E\While(e) s\ - \ E\e::PrimT Boolean \ E\s\" -by (erule wt_stmt.cases, auto) +lemma Loop_invers: + assumes "E\While(e) s\" + shows "E\e::PrimT Boolean \ E\s\" + using assms by cases auto (**********************************************************************)