# HG changeset patch # User webertj # Date 1154372800 -7200 # Node ID 0ca998e83447b6efb261ba0cb63ed7315513a415 # Parent e76e77e0d615fe447ebf6aefac50ce4c52ac39f2 lin_arith_prover splits certain operators (e.g. min, max, abs) diff -r e76e77e0d615 -r 0ca998e83447 src/HOL/HoareParallel/RG_Hoare.thy --- a/src/HOL/HoareParallel/RG_Hoare.thy Mon Jul 31 20:56:49 2006 +0200 +++ b/src/HOL/HoareParallel/RG_Hoare.thy Mon Jul 31 21:06:40 2006 +0200 @@ -329,7 +329,7 @@ apply(rule_tac x=0 in exI,simp) done -lemma Basic_sound: +lemma Basic_sound: " \pre \ {s. f s \ post}; {(s, t). s \ pre \ t = f s} \ guar; stable pre rely; stable post rely\ \ \ Basic f sat [pre, rely, guar, post]" @@ -369,16 +369,15 @@ apply(drule_tac s="Some (Basic f)" in sym,simp) apply(case_tac "x!Suc j",simp) apply(rule ctran.elims,simp) -apply(simp_all) + apply(simp_all) apply(drule_tac c=sa in subsetD,simp) apply clarify apply(frule_tac j="Suc j" and k="length x - 1" and p=post in stability,simp_all) - apply(case_tac x,simp+) + apply(case_tac x,simp+) apply(erule_tac x=i in allE) -apply(erule_tac i=j and f=f in unique_ctran_Basic,simp_all) - apply arith+ + apply(erule_tac i=j and f=f in unique_ctran_Basic,simp_all) apply(case_tac x) -apply(simp add:last_length)+ + apply(simp add:last_length)+ done subsubsection{* Soundness of the Await rule *} @@ -497,7 +496,7 @@ apply(drule_tac s="Some (Await b P)" in sym,simp) apply(case_tac "x!Suc j",simp) apply(rule ctran.elims,simp) -apply(simp_all) + apply(simp_all) apply(drule Star_imp_cptn) apply clarify apply(erule_tac x=sa in allE) @@ -511,16 +510,17 @@ apply simp apply clarify apply(frule_tac j="Suc j" and k="length x - 1" and p=post in stability,simp_all) - apply(case_tac x,simp+) + apply(case_tac x,simp+) apply(erule_tac x=i in allE) -apply(erule_tac i=j in unique_ctran_Await,force,simp_all) - apply arith+ + apply(erule_tac i=j in unique_ctran_Await,force,simp_all) apply(case_tac x) -apply(simp add:last_length)+ + apply(simp add:last_length)+ done subsubsection{* Soundness of the Conditional rule *} +ML {* fast_arith_split_limit := 0; *} (* FIXME: rewrite proof *) + lemma Cond_sound: "\ stable pre rely; \ P1 sat [pre \ b, rely, guar, post]; \ P2 sat [pre \ - b, rely, guar, post]; \s. (s,s)\guar\ @@ -537,6 +537,7 @@ apply(simp add:assum_def) apply(simp add:assum_def) apply(erule_tac m="length x" in etran_or_ctran,simp+) + apply(case_tac x,simp+) apply(case_tac x, (simp add:last_length)+) apply(erule exE) apply(drule_tac n=i and P="\i. ?H i \ (?J i,?I i)\ ctran" in Ex_first_occurrence) @@ -548,7 +549,18 @@ apply(erule_tac x="sa" in allE) apply(drule_tac c="drop (Suc m) x" in subsetD) apply simp + apply(rule conjI) + apply force apply clarify + apply(subgoal_tac "(Suc m) + i \ length x") + apply(subgoal_tac "(Suc m) + (Suc i) \ length x") + apply(rotate_tac -2) + apply simp + apply(erule_tac x="Suc (m + i)" and P="\j. ?H j \ ?J j \ ?I j" in allE) + apply(subgoal_tac "Suc (Suc (m + i)) < length x",simp) + apply arith + apply arith + apply arith apply simp apply clarify apply(case_tac "i\m") @@ -557,34 +569,52 @@ apply(erule_tac x=i in allE, erule impE, assumption) apply simp+ apply(erule_tac x="i - (Suc m)" and P="\j. ?H j \ ?J j \ (?I j)\guar" in allE) - apply(subgoal_tac "(Suc m)+(i - Suc m) \ length x") - apply(subgoal_tac "(Suc m)+Suc (i - Suc m) \ length x") - apply(rotate_tac -2) + apply(subgoal_tac "(Suc m)+(i - Suc m) \ length x") + apply(subgoal_tac "(Suc m)+Suc (i - Suc m) \ length x") + apply(rotate_tac -2) + apply simp + apply(erule mp) + apply arith + apply arith + apply arith + apply(case_tac "length (drop (Suc m) x)",simp) + apply(erule_tac x="sa" in allE) + back + apply(drule_tac c="drop (Suc m) x" in subsetD,simp) + apply(rule conjI) + apply force + apply clarify + apply(subgoal_tac "(Suc m) + i \ length x") + apply(subgoal_tac "(Suc m) + (Suc i) \ length x") + apply(rotate_tac -2) + apply simp + apply(erule_tac x="Suc (m + i)" and P="\j. ?H j \ ?J j \ ?I j" in allE) + apply(subgoal_tac "Suc (Suc (m + i)) < length x") + apply simp + apply arith + apply arith + apply arith + apply simp + apply clarify + apply(case_tac "i\m") + apply(drule le_imp_less_or_eq) + apply(erule disjE) + apply(erule_tac x=i in allE, erule impE, assumption) + apply simp apply simp + apply(erule_tac x="i - (Suc m)" and P="\j. ?H j \ ?J j \ (?I j)\guar" in allE) + apply(subgoal_tac "(Suc m)+(i - Suc m) \ length x") + apply(subgoal_tac "(Suc m)+Suc (i - Suc m) \ length x") + apply(rotate_tac -2) + apply simp + apply(erule mp) + apply arith apply arith apply arith -apply(case_tac "length (drop (Suc m) x)",simp) -apply(erule_tac x="sa" in allE) -back -apply(drule_tac c="drop (Suc m) x" in subsetD,simp) - apply clarify -apply simp -apply clarify -apply(case_tac "i\m") - apply(drule le_imp_less_or_eq) - apply(erule disjE) - apply(erule_tac x=i in allE, erule impE, assumption) - apply simp - apply simp -apply(erule_tac x="i - (Suc m)" and P="\j. ?H j \ ?J j \ (?I j)\guar" in allE) -apply(subgoal_tac "(Suc m)+(i - Suc m) \ length x") - apply(subgoal_tac "(Suc m)+Suc (i - Suc m) \ length x") - apply(rotate_tac -2) - apply simp - apply arith -apply arith done +ML {* fast_arith_split_limit := 9; *} (* FIXME *) + subsubsection{* Soundness of the Sequential rule *} inductive_cases Seq_cases [elim!]: "(Some (Seq P Q), s) -c\ t" @@ -626,6 +656,7 @@ apply(simp add:lift_def) apply simp done + declare map_eq_Cons_conv [simp del] Cons_eq_map_conv [simp del] lemma Seq_sound2 [rule_format]: @@ -683,6 +714,7 @@ apply simp+ apply(simp add:lift_def) done + (* lemma last_lift_not_None3: "fst (last (map (lift Q) (x#xs))) \ None" apply(simp only:last_length [THEN sym]) @@ -705,6 +737,8 @@ apply simp done +ML {* fast_arith_split_limit := 0; *} (* FIXME: rewrite proof *) + lemma Seq_sound: "\\ P sat [pre, rely, guar, mid]; \ Q sat [mid, rely, guar, post]\ \ \ Seq P Q sat [pre, rely, guar, post]" @@ -828,6 +862,8 @@ apply simp apply(erule mp) apply(case_tac ys,simp+) + apply arith + apply arith apply force apply arith apply force @@ -841,6 +877,8 @@ apply(case_tac ys,simp+) done +ML {* fast_arith_split_limit := 9; *} (* FIXME *) + subsubsection{* Soundness of the While rule *} lemma last_append[rule_format]: @@ -886,6 +924,8 @@ apply(simp add:Cons_lift_append nth_append snd_lift del:map.simps) done +ML {* fast_arith_split_limit := 0; *} (* FIXME: rewrite proof *) + lemma While_sound_aux [rule_format]: "\ pre \ - b \ post; \ P sat [pre \ b, rely, guar, pre]; \s. (s, s) \ guar; stable pre rely; stable post rely; x \ cptn_mod \ @@ -1052,6 +1092,8 @@ apply simp done +ML {* fast_arith_split_limit := 9; *} (* FIXME *) + lemma While_sound: "\stable pre rely; pre \ - b \ post; stable post rely; \ P sat [pre \ b, rely, guar, pre]; \s. (s,s)\guar\ diff -r e76e77e0d615 -r 0ca998e83447 src/HOL/Isar_examples/HoareEx.thy --- a/src/HOL/Isar_examples/HoareEx.thy Mon Jul 31 20:56:49 2006 +0200 +++ b/src/HOL/Isar_examples/HoareEx.thy Mon Jul 31 21:06:40 2006 +0200 @@ -317,7 +317,6 @@ apply simp apply clarsimp apply clarsimp - apply arith prefer 2 apply clarsimp apply (clarsimp simp: nat_distrib) diff -r e76e77e0d615 -r 0ca998e83447 src/HOL/MicroJava/Comp/CorrComp.thy --- a/src/HOL/MicroJava/Comp/CorrComp.thy Mon Jul 31 20:56:49 2006 +0200 +++ b/src/HOL/MicroJava/Comp/CorrComp.thy Mon Jul 31 21:06:40 2006 +0200 @@ -968,14 +968,14 @@ apply fast apply (rule_tac ?instrs1.0 = "[]" in jump_fwd_progression) apply (simp, rule conjI, (rule HOL.refl)+) -apply simp apply (rule conjI, simp) apply (simp add: nat_add_distrib) +apply simp apply (rule progression_refl) (* case b= False *) apply simp apply (rule_tac ?instrs1.0 = "compStmt (gmb G CL S) c2" in jump_fwd_progression) apply (simp, rule conjI, (rule HOL.refl)+) -apply (simp, rule conjI, rule HOL.refl, simp add: nat_add_distrib) +apply simp apply fast (* case exit Loop *) @@ -1003,7 +1003,7 @@ apply fast apply (rule_tac ?instrs1.0 = "[]" in jump_fwd_progression) apply (simp, rule conjI, rule HOL.refl, rule HOL.refl) -apply (simp, rule conjI, rule HOL.refl, simp add: nat_add_distrib) +apply simp apply (rule progression_refl) diff -r e76e77e0d615 -r 0ca998e83447 src/HOL/MicroJava/Comp/CorrCompTp.thy --- a/src/HOL/MicroJava/Comp/CorrCompTp.thy Mon Jul 31 20:56:49 2006 +0200 +++ b/src/HOL/MicroJava/Comp/CorrCompTp.thy Mon Jul 31 21:06:40 2006 +0200 @@ -663,7 +663,7 @@ (* show P x of bspec *) apply simp apply (subgoal_tac "length mt_pre \ pc'") - apply (simp add: nth_append) apply arith + apply (simp add: nth_append) (* subgoals *) apply (simp add: eff_def xcpt_eff_def) @@ -965,7 +965,6 @@ apply (simp only:) apply (rule check_type_mono) apply assumption apply (simp (no_asm_simp) add: max_ssize_def max_of_list_append max_ac) -apply arith apply (simp add: nth_append) apply (erule conjE)+ @@ -1283,6 +1282,7 @@ apply auto done +ML {* fast_arith_split_limit := 0; *} (* FIXME: rewrite proof *) lemma bc_mt_corresp_Invoke: "\ wf_prog wf_mb G; max_spec G cname (mname, pTsa) = {((md, T), fpTs)}; @@ -1319,6 +1319,7 @@ apply (simp add: max_def) done +ML {* fast_arith_split_limit := 9; *} (* FIXME *) lemma wt_instr_Ifcmpeq: "\Suc pc < max_pc; 0 \ (int pc + i); nat (int pc + i) < max_pc; @@ -1643,7 +1644,7 @@ done - +ML {* fast_arith_split_limit := 0; *} (* FIXME: rewrite proof *) lemma wt_method_compTpExpr_Exprs_corresp: " \ jmb = (pns,lvars,blk,res); @@ -1922,6 +1923,7 @@ done +ML {* fast_arith_split_limit := 9; *} (* FIXME *) lemmas wt_method_compTpExpr_corresp [rule_format (no_asm)] = wt_method_compTpExpr_Exprs_corresp [THEN conjunct1] diff -r e76e77e0d615 -r 0ca998e83447 src/HOL/NumberTheory/Chinese.thy --- a/src/HOL/NumberTheory/Chinese.thy Mon Jul 31 20:56:49 2006 +0200 +++ b/src/HOL/NumberTheory/Chinese.thy Mon Jul 31 21:06:40 2006 +0200 @@ -175,11 +175,6 @@ apply (rule_tac [!] funprod_zgcd) apply safe apply simp_all - apply (subgoal_tac "i D ==> x \ (p - 1) div 2" by (auto simp add: D_eq) -ML {* fast_arith_split_limit := 0; *} (*FIXME*) - lemma (in GAUSS) F_ge: "x \ F ==> x \ (p - 1) div 2" apply (auto simp add: F_eq A_def) proof - @@ -270,8 +268,6 @@ using zless_add1_eq [of "p - StandardRes p (y * a)" "(p - 1) div 2"] by auto qed -ML {* fast_arith_split_limit := 9; *} (*FIXME*) - lemma (in GAUSS) all_A_relprime: "\x \ A. zgcd(x, p) = 1" using p_prime p_minus_one_l by (auto simp add: A_def zless_zprime_imp_zrelprime)