# HG changeset patch # User haftmann # Date 1272282211 -7200 # Node ID 85ee44388f7bcfac5e9ca4f7ca90797455063eeb # Parent 3cbce59ed78dc3992bed7187e2ad03f35f330f2f# Parent bc7982c54e377f9de13d4ebc28ebd64d3958ae09 merged diff -r 3cbce59ed78d -r 85ee44388f7b NEWS --- a/NEWS Mon Apr 26 11:20:18 2010 +0200 +++ b/NEWS Mon Apr 26 13:43:31 2010 +0200 @@ -119,8 +119,12 @@ *** HOL *** * Abstract algebra: - * class division_by_zero includes division_ring; + * classes division_ring_inverse_zero, field_inverse_zero, linordered_field_inverse_zero + include rule inverse 0 = 0 -- subsumes former division_by_zero class. * numerous lemmas have been ported from field to division_ring; + * dropped theorem group group_simps, use algebra_simps instead; + * dropped theorem group ring_simps, use field_simps instead; + * proper theorem collection field_simps subsumes former theorem groups field_eq_simps and field_simps; * dropped lemma eq_minus_self_iff which is a duplicate for equal_neg_zero. INCOMPATIBILITY. diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Big_Operators.thy --- a/src/HOL/Big_Operators.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Big_Operators.thy Mon Apr 26 13:43:31 2010 +0200 @@ -1033,12 +1033,12 @@ by (erule finite_induct) (auto simp add: insert_Diff_if) lemma setprod_inversef: - fixes f :: "'b \ 'a::{field,division_by_zero}" + fixes f :: "'b \ 'a::{field,division_ring_inverse_zero}" shows "finite A ==> setprod (inverse \ f) A = inverse (setprod f A)" by (erule finite_induct) auto lemma setprod_dividef: - fixes f :: "'b \ 'a::{field,division_by_zero}" + fixes f :: "'b \ 'a::{field,division_ring_inverse_zero}" shows "finite A ==> setprod (%x. f x / g x) A = setprod f A / setprod g A" apply (subgoal_tac @@ -1140,7 +1140,7 @@ using setprod_Un_disjoint[OF fAB dj, of ?f, unfolded eq[symmetric]] by simp then have ?thesis using a cA - by (simp add: fA1 ring_simps cong add: setprod_cong cong del: if_weak_cong)} + by (simp add: fA1 field_simps cong add: setprod_cong cong del: if_weak_cong)} ultimately show ?thesis by blast qed diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Complex.thy --- a/src/HOL/Complex.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Complex.thy Mon Apr 26 13:43:31 2010 +0200 @@ -99,7 +99,7 @@ subsection {* Multiplication and Division *} -instantiation complex :: "{field, division_by_zero}" +instantiation complex :: "{field, division_ring_inverse_zero}" begin definition diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Decision_Procs/Decision_Procs.thy --- a/src/HOL/Decision_Procs/Decision_Procs.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Decision_Procs/Decision_Procs.thy Mon Apr 26 13:43:31 2010 +0200 @@ -8,4 +8,4 @@ "ex/Commutative_Ring_Ex" "ex/Approximation_Ex" "ex/Dense_Linear_Order_Ex" begin -end \ No newline at end of file +end diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Decision_Procs/Parametric_Ferrante_Rackoff.thy --- a/src/HOL/Decision_Procs/Parametric_Ferrante_Rackoff.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Decision_Procs/Parametric_Ferrante_Rackoff.thy Mon Apr 26 13:43:31 2010 +0200 @@ -27,7 +27,7 @@ "tmsize (CNP n c a) = 3 + polysize c + tmsize a " (* Semantics of terms tm *) -consts Itm :: "'a::{ring_char_0,division_by_zero,field} list \ 'a list \ tm \ 'a" +consts Itm :: "'a::{ring_char_0,division_ring_inverse_zero,field} list \ 'a list \ tm \ 'a" primrec "Itm vs bs (CP c) = (Ipoly vs c)" "Itm vs bs (Bound n) = bs!n" @@ -239,7 +239,7 @@ lemma tmadd[simp]: "Itm vs bs (tmadd (t,s)) = Itm vs bs (Add t s)" apply (induct t s rule: tmadd.induct, simp_all add: Let_def) apply (case_tac "c1 +\<^sub>p c2 = 0\<^sub>p",case_tac "n1 \ n2", simp_all) -apply (case_tac "n1 = n2", simp_all add: ring_simps) +apply (case_tac "n1 = n2", simp_all add: field_simps) apply (simp only: right_distrib[symmetric]) by (auto simp del: polyadd simp add: polyadd[symmetric]) @@ -259,7 +259,7 @@ "tmmul t = (\ i. Mul i t)" lemma tmmul[simp]: "Itm vs bs (tmmul t i) = Itm vs bs (Mul i t)" -by (induct t arbitrary: i rule: tmmul.induct, simp_all add: ring_simps) +by (induct t arbitrary: i rule: tmmul.induct, simp_all add: field_simps) lemma tmmul_nb0[simp]: "tmbound0 t \ tmbound0 (tmmul t i)" by (induct t arbitrary: i rule: tmmul.induct, auto ) @@ -270,7 +270,7 @@ by (induct t arbitrary: i rule: tmmul.induct, auto simp add: Let_def) lemma tmmul_allpolys_npoly[simp]: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero, field})" + assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero, field})" shows "allpolys isnpoly t \ isnpoly c \ allpolys isnpoly (tmmul t c)" by (induct t rule: tmmul.induct, simp_all add: Let_def polymul_norm) definition tmneg :: "tm \ tm" where @@ -296,7 +296,7 @@ using tmneg_def by simp lemma [simp]: "isnpoly (C (-1,1))" unfolding isnpoly_def by simp lemma tmneg_allpolys_npoly[simp]: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero, field})" + assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero, field})" shows "allpolys isnpoly t \ allpolys isnpoly (tmneg t)" unfolding tmneg_def by auto @@ -310,7 +310,7 @@ lemma tmsub_blt[simp]: "\tmboundslt n t ; tmboundslt n s\ \ tmboundslt n (tmsub t s )" using tmsub_def by simp lemma tmsub_allpolys_npoly[simp]: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero, field})" + assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero, field})" shows "allpolys isnpoly t \ allpolys isnpoly s \ allpolys isnpoly (tmsub t s)" unfolding tmsub_def by (simp add: isnpoly_def) @@ -324,8 +324,8 @@ "simptm (CNP n c t) = (let c' = polynate c in if c' = 0\<^sub>p then simptm t else tmadd (CNP n c' (CP 0\<^sub>p ), simptm t))" lemma polynate_stupid: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero, field})" - shows "polynate t = 0\<^sub>p \ Ipoly bs t = (0::'a::{ring_char_0,division_by_zero, field})" + assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero, field})" + shows "polynate t = 0\<^sub>p \ Ipoly bs t = (0::'a::{ring_char_0,division_ring_inverse_zero, field})" apply (subst polynate[symmetric]) apply simp done @@ -345,7 +345,7 @@ lemma [simp]: "isnpoly 0\<^sub>p" and [simp]: "isnpoly (C(1,1))" by (simp_all add: isnpoly_def) lemma simptm_allpolys_npoly[simp]: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero, field})" + assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero, field})" shows "allpolys isnpoly (simptm p)" by (induct p rule: simptm.induct, auto simp add: Let_def) @@ -369,14 +369,14 @@ "tmbound 0 (snd (split0 t)) \ (Itm vs bs (CNP 0 (fst (split0 t)) (snd (split0 t))) = Itm vs bs t)" apply (induct t rule: split0.induct) apply simp - apply (simp add: Let_def split_def ring_simps) - apply (simp add: Let_def split_def ring_simps) - apply (simp add: Let_def split_def ring_simps) - apply (simp add: Let_def split_def ring_simps) - apply (simp add: Let_def split_def ring_simps) + apply (simp add: Let_def split_def field_simps) + apply (simp add: Let_def split_def field_simps) + apply (simp add: Let_def split_def field_simps) + apply (simp add: Let_def split_def field_simps) + apply (simp add: Let_def split_def field_simps) apply (simp add: Let_def split_def mult_assoc right_distrib[symmetric]) - apply (simp add: Let_def split_def ring_simps) - apply (simp add: Let_def split_def ring_simps) + apply (simp add: Let_def split_def field_simps) + apply (simp add: Let_def split_def field_simps) done lemma split0_ci: "split0 t = (c',t') \ Itm vs bs t = Itm vs bs (CNP 0 c' t')" @@ -387,7 +387,7 @@ qed lemma split0_nb0: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero, field})" + assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero, field})" shows "split0 t = (c',t') \ tmbound 0 t'" proof- fix c' t' @@ -395,7 +395,7 @@ with conjunct1[OF split0[where t="t"]] show "tmbound 0 t'" by simp qed -lemma split0_nb0'[simp]: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero, field})" +lemma split0_nb0'[simp]: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero, field})" shows "tmbound0 (snd (split0 t))" using split0_nb0[of t "fst (split0 t)" "snd (split0 t)"] by (simp add: tmbound0_tmbound_iff) @@ -418,7 +418,7 @@ lemma allpolys_split0: "allpolys isnpoly p \ allpolys isnpoly (snd (split0 p))" by (induct p rule: split0.induct, auto simp add: isnpoly_def Let_def split_def split0_stupid) -lemma isnpoly_fst_split0: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero, field})" +lemma isnpoly_fst_split0: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero, field})" shows "allpolys isnpoly p \ isnpoly (fst (split0 p))" by (induct p rule: split0.induct, @@ -447,7 +447,7 @@ by (induct p rule: fmsize.induct) simp_all (* Semantics of formulae (fm) *) -consts Ifm ::"'a::{division_by_zero,linordered_field} list \ 'a list \ fm \ bool" +consts Ifm ::"'a::{division_ring_inverse_zero,linordered_field} list \ 'a list \ fm \ bool" primrec "Ifm vs bs T = True" "Ifm vs bs F = False" @@ -969,24 +969,24 @@ definition "simpeq t = (let (c,s) = split0 (simptm t) in if c= 0\<^sub>p then eq s else Eq (CNP 0 c s))" definition "simpneq t = (let (c,s) = split0 (simptm t) in if c= 0\<^sub>p then neq s else NEq (CNP 0 c s))" -lemma simplt_islin[simp]: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" +lemma simplt_islin[simp]: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" shows "islin (simplt t)" unfolding simplt_def using split0_nb0' by (auto simp add: lt_lin Let_def split_def isnpoly_fst_split0[OF simptm_allpolys_npoly] islin_stupid allpolys_split0[OF simptm_allpolys_npoly]) -lemma simple_islin[simp]: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" +lemma simple_islin[simp]: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" shows "islin (simple t)" unfolding simple_def using split0_nb0' by (auto simp add: Let_def split_def isnpoly_fst_split0[OF simptm_allpolys_npoly] islin_stupid allpolys_split0[OF simptm_allpolys_npoly] le_lin) -lemma simpeq_islin[simp]: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" +lemma simpeq_islin[simp]: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" shows "islin (simpeq t)" unfolding simpeq_def using split0_nb0' by (auto simp add: Let_def split_def isnpoly_fst_split0[OF simptm_allpolys_npoly] islin_stupid allpolys_split0[OF simptm_allpolys_npoly] eq_lin) -lemma simpneq_islin[simp]: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" +lemma simpneq_islin[simp]: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" shows "islin (simpneq t)" unfolding simpneq_def using split0_nb0' @@ -994,7 +994,7 @@ lemma really_stupid: "\ (\c1 s'. (c1, s') \ split0 s)" by (cases "split0 s", auto) -lemma split0_npoly: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" +lemma split0_npoly: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" and n: "allpolys isnpoly t" shows "isnpoly (fst (split0 t))" and "allpolys isnpoly (snd (split0 t))" using n @@ -1083,7 +1083,7 @@ apply (case_tac poly, auto) done -lemma simplt_nb[simp]: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" +lemma simplt_nb[simp]: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" shows "tmbound0 t \ bound0 (simplt t)" using split0 [of "simptm t" vs bs] proof(simp add: simplt_def Let_def split_def) @@ -1100,7 +1100,7 @@ fst (split0 (simptm t)) = 0\<^sub>p" by (simp add: simplt_def Let_def split_def lt_nb) qed -lemma simple_nb[simp]: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" +lemma simple_nb[simp]: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" shows "tmbound0 t \ bound0 (simple t)" using split0 [of "simptm t" vs bs] proof(simp add: simple_def Let_def split_def) @@ -1117,7 +1117,7 @@ fst (split0 (simptm t)) = 0\<^sub>p" by (simp add: simplt_def Let_def split_def le_nb) qed -lemma simpeq_nb[simp]: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" +lemma simpeq_nb[simp]: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" shows "tmbound0 t \ bound0 (simpeq t)" using split0 [of "simptm t" vs bs] proof(simp add: simpeq_def Let_def split_def) @@ -1134,7 +1134,7 @@ fst (split0 (simptm t)) = 0\<^sub>p" by (simp add: simpeq_def Let_def split_def eq_nb) qed -lemma simpneq_nb[simp]: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" +lemma simpneq_nb[simp]: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" shows "tmbound0 t \ bound0 (simpneq t)" using split0 [of "simptm t" vs bs] proof(simp add: simpneq_def Let_def split_def) @@ -1267,7 +1267,7 @@ lemma simpfm[simp]: "Ifm vs bs (simpfm p) = Ifm vs bs p" by(induct p arbitrary: bs rule: simpfm.induct, auto) -lemma simpfm_bound0: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" +lemma simpfm_bound0: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" shows "bound0 p \ bound0 (simpfm p)" by (induct p rule: simpfm.induct, auto) @@ -1296,7 +1296,7 @@ lemma disj_lin: "islin p \ islin q \ islin (disj p q)" by (simp add: disj_def) lemma conj_lin: "islin p \ islin q \ islin (conj p q)" by (simp add: conj_def) -lemma assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" +lemma assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" shows "qfree p \ islin (simpfm p)" apply (induct p rule: simpfm.induct) apply (simp_all add: conj_lin disj_lin) @@ -1698,11 +1698,11 @@ {assume c: "?N c > 0" from px pos_less_divide_eq[OF c, where a="x" and b="-?Nt x s"] have px': "x < - ?Nt x s / ?N c" - by (auto simp add: not_less ring_simps) + by (auto simp add: not_less field_simps) {assume y: "y < - ?Nt x s / ?N c" hence "y * ?N c < - ?Nt x s" by (simp add: pos_less_divide_eq[OF c, where a="y" and b="-?Nt x s", symmetric]) - hence "?N c * y + ?Nt x s < 0" by (simp add: ring_simps) + hence "?N c * y + ?Nt x s < 0" by (simp add: field_simps) hence ?case using tmbound0_I[OF lin(3), where bs="bs" and b="x" and b'="y"] by simp} moreover {assume y: "y > -?Nt x s / ?N c" @@ -1715,11 +1715,11 @@ {assume c: "?N c < 0" from px neg_divide_less_eq[OF c, where a="x" and b="-?Nt x s"] have px': "x > - ?Nt x s / ?N c" - by (auto simp add: not_less ring_simps) + by (auto simp add: not_less field_simps) {assume y: "y > - ?Nt x s / ?N c" hence "y * ?N c < - ?Nt x s" by (simp add: neg_divide_less_eq[OF c, where a="y" and b="-?Nt x s", symmetric]) - hence "?N c * y + ?Nt x s < 0" by (simp add: ring_simps) + hence "?N c * y + ?Nt x s < 0" by (simp add: field_simps) hence ?case using tmbound0_I[OF lin(3), where bs="bs" and b="x" and b'="y"] by simp} moreover {assume y: "y < -?Nt x s / ?N c" @@ -1743,11 +1743,11 @@ moreover {assume c: "?N c > 0" from px pos_le_divide_eq[OF c, where a="x" and b="-?Nt x s"] - have px': "x <= - ?Nt x s / ?N c" by (simp add: not_less ring_simps) + have px': "x <= - ?Nt x s / ?N c" by (simp add: not_less field_simps) {assume y: "y < - ?Nt x s / ?N c" hence "y * ?N c < - ?Nt x s" by (simp add: pos_less_divide_eq[OF c, where a="y" and b="-?Nt x s", symmetric]) - hence "?N c * y + ?Nt x s < 0" by (simp add: ring_simps) + hence "?N c * y + ?Nt x s < 0" by (simp add: field_simps) hence ?case using tmbound0_I[OF lin(3), where bs="bs" and b="x" and b'="y"] by simp} moreover {assume y: "y > -?Nt x s / ?N c" @@ -1759,11 +1759,11 @@ moreover {assume c: "?N c < 0" from px neg_divide_le_eq[OF c, where a="x" and b="-?Nt x s"] - have px': "x >= - ?Nt x s / ?N c" by (simp add: ring_simps) + have px': "x >= - ?Nt x s / ?N c" by (simp add: field_simps) {assume y: "y > - ?Nt x s / ?N c" hence "y * ?N c < - ?Nt x s" by (simp add: neg_divide_less_eq[OF c, where a="y" and b="-?Nt x s", symmetric]) - hence "?N c * y + ?Nt x s < 0" by (simp add: ring_simps) + hence "?N c * y + ?Nt x s < 0" by (simp add: field_simps) hence ?case using tmbound0_I[OF lin(3), where bs="bs" and b="x" and b'="y"] by simp} moreover {assume y: "y < -?Nt x s / ?N c" @@ -1787,7 +1787,7 @@ moreover {assume c: "?N c > 0" hence cnz: "?N c \ 0" by simp from px eq_divide_eq[of "x" "-?Nt x s" "?N c"] cnz - have px': "x = - ?Nt x s / ?N c" by (simp add: ring_simps) + have px': "x = - ?Nt x s / ?N c" by (simp add: field_simps) {assume y: "y < -?Nt x s / ?N c" with ly have eu: "l < - ?Nt x s / ?N c" by auto with noS ly yu have th: "- ?Nt x s / ?N c \ u" by (cases "- ?Nt x s / ?N c < u", auto) @@ -1802,7 +1802,7 @@ moreover {assume c: "?N c < 0" hence cnz: "?N c \ 0" by simp from px eq_divide_eq[of "x" "-?Nt x s" "?N c"] cnz - have px': "x = - ?Nt x s / ?N c" by (simp add: ring_simps) + have px': "x = - ?Nt x s / ?N c" by (simp add: field_simps) {assume y: "y < -?Nt x s / ?N c" with ly have eu: "l < - ?Nt x s / ?N c" by auto with noS ly yu have th: "- ?Nt x s / ?N c \ u" by (cases "- ?Nt x s / ?N c < u", auto) @@ -1829,7 +1829,7 @@ moreover {assume c: "?N c \ 0" from yne c eq_divide_eq[of "y" "- ?Nt x s" "?N c"] have ?case - by (simp add: ring_simps tmbound0_I[OF lin(3), of vs x bs y] sum_eq[symmetric]) } + by (simp add: field_simps tmbound0_I[OF lin(3), of vs x bs y] sum_eq[symmetric]) } ultimately show ?case by blast qed (auto simp add: nth_pos2 tmbound0_I[where vs=vs and bs="bs" and b="y" and b'="x"] bound0_I[where vs=vs and bs="bs" and b="y" and b'="x"]) @@ -1844,7 +1844,7 @@ lemma half_sum_eq: "(u + u) / (1+1) = (u::'a::{linordered_field})" proof- - have "(u + u) = (1 + 1) * u" by (simp add: ring_simps) + have "(u + u) = (1 + 1) * u" by (simp add: field_simps) hence "(u + u) / (1+1) = (1 + 1)*u / (1 + 1)" by simp with nonzero_mult_divide_cancel_left[OF one_plus_one_nonzero, of u] show ?thesis by simp qed @@ -1987,7 +1987,7 @@ also have "\ \ (1 + 1)*?d * (?a * (-?s / ((1 + 1)*?d)) + ?r) = 0" using d mult_cancel_left[of "(1 + 1)*?d" "(?a * (-?s / ((1 + 1)*?d)) + ?r)" 0] by simp also have "\ \ (- ?a * ?s) * ((1 + 1)*?d / ((1 + 1)*?d)) + (1 + 1)*?d*?r= 0" - by (simp add: ring_simps right_distrib[of "(1 + 1)*?d"] del: right_distrib) + by (simp add: field_simps right_distrib[of "(1 + 1)*?d"] del: right_distrib) also have "\ \ - (?a * ?s) + (1 + 1)*?d*?r = 0" using d by simp finally have ?thesis using c d @@ -2003,7 +2003,7 @@ also have "\ \ (1 + 1)*?c * (?a * (-?t / ((1 + 1)*?c)) + ?r) = 0" using c mult_cancel_left[of "(1 + 1)*?c" "(?a * (-?t / ((1 + 1)*?c)) + ?r)" 0] by simp also have "\ \ (?a * -?t)* ((1 + 1)*?c) / ((1 + 1)*?c) + (1 + 1)*?c*?r= 0" - by (simp add: ring_simps right_distrib[of "(1 + 1)*?c"] del: right_distrib) + by (simp add: field_simps right_distrib[of "(1 + 1)*?c"] del: right_distrib) also have "\ \ - (?a * ?t) + (1 + 1)*?c*?r = 0" using c by simp finally have ?thesis using c d apply (simp add: r[of "- (?t/ ((1 + 1)*?c))"] msubsteq_def Let_def evaldjf_ex del: one_add_one_is_two) @@ -2014,19 +2014,19 @@ {assume c: "?c \ 0" and d: "?d\0" hence dc: "?c * ?d *(1 + 1) \ 0" by simp from add_frac_eq[OF c d, of "- ?t" "- ?s"] have th: "(- ?t / ?c + - ?s / ?d)/(1 + 1) = - (?d * ?t + ?c* ?s )/ ((1 + 1)*?c*?d)" - by (simp add: ring_simps) + by (simp add: field_simps) have "?rhs \ Ifm vs (- (?d * ?t + ?c* ?s )/ ((1 + 1)*?c*?d) # bs) (Eq (CNP 0 a r))" by (simp only: th) also have "\ \ ?a * (- (?d * ?t + ?c* ?s )/ ((1 + 1)*?c*?d)) + ?r = 0" by (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / ((1 + 1) * ?c * ?d)"]) also have "\ \ ((1 + 1) * ?c * ?d) * (?a * (- (?d * ?t + ?c* ?s )/ ((1 + 1)*?c*?d)) + ?r) =0 " using c d mult_cancel_left[of "(1 + 1) * ?c * ?d" "?a * (- (?d * ?t + ?c* ?s)/ ((1 + 1)*?c*?d)) + ?r" 0] by simp also have "\ \ ?a * (- (?d * ?t + ?c* ?s )) + (1 + 1)*?c*?d*?r =0" - using nonzero_mult_divide_cancel_left[OF dc] c d - by (simp add: ring_simps diff_divide_distrib del: left_distrib) + using nonzero_mult_divide_cancel_left [OF dc] c d + by (simp add: algebra_simps diff_divide_distrib del: left_distrib) finally have ?thesis using c d - apply (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / ((1 + 1) * ?c * ?d)"] msubsteq_def Let_def evaldjf_ex ring_simps) + apply (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / ((1 + 1) * ?c * ?d)"] msubsteq_def Let_def evaldjf_ex field_simps) apply (simp only: one_add_one_is_two[symmetric] of_int_add) - apply (simp add: ring_simps) + apply (simp add: field_simps) done } ultimately show ?thesis by blast qed @@ -2075,7 +2075,7 @@ also have "\ \ (1 + 1)*?d * (?a * (-?s / ((1 + 1)*?d)) + ?r) \ 0" using d mult_cancel_left[of "(1 + 1)*?d" "(?a * (-?s / ((1 + 1)*?d)) + ?r)" 0] by simp also have "\ \ (- ?a * ?s) * ((1 + 1)*?d / ((1 + 1)*?d)) + (1 + 1)*?d*?r\ 0" - by (simp add: ring_simps right_distrib[of "(1 + 1)*?d"] del: right_distrib) + by (simp add: field_simps right_distrib[of "(1 + 1)*?d"] del: right_distrib) also have "\ \ - (?a * ?s) + (1 + 1)*?d*?r \ 0" using d by simp finally have ?thesis using c d @@ -2091,7 +2091,7 @@ also have "\ \ (1 + 1)*?c * (?a * (-?t / ((1 + 1)*?c)) + ?r) \ 0" using c mult_cancel_left[of "(1 + 1)*?c" "(?a * (-?t / ((1 + 1)*?c)) + ?r)" 0] by simp also have "\ \ (?a * -?t)* ((1 + 1)*?c) / ((1 + 1)*?c) + (1 + 1)*?c*?r \ 0" - by (simp add: ring_simps right_distrib[of "(1 + 1)*?c"] del: right_distrib) + by (simp add: field_simps right_distrib[of "(1 + 1)*?c"] del: right_distrib) also have "\ \ - (?a * ?t) + (1 + 1)*?c*?r \ 0" using c by simp finally have ?thesis using c d apply (simp add: r[of "- (?t/ ((1 + 1)*?c))"] msubstneq_def Let_def evaldjf_ex del: one_add_one_is_two) @@ -2102,7 +2102,7 @@ {assume c: "?c \ 0" and d: "?d\0" hence dc: "?c * ?d *(1 + 1) \ 0" by simp from add_frac_eq[OF c d, of "- ?t" "- ?s"] have th: "(- ?t / ?c + - ?s / ?d)/(1 + 1) = - (?d * ?t + ?c* ?s )/ ((1 + 1)*?c*?d)" - by (simp add: ring_simps) + by (simp add: field_simps) have "?rhs \ Ifm vs (- (?d * ?t + ?c* ?s )/ ((1 + 1)*?c*?d) # bs) (NEq (CNP 0 a r))" by (simp only: th) also have "\ \ ?a * (- (?d * ?t + ?c* ?s )/ ((1 + 1)*?c*?d)) + ?r \ 0" by (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / ((1 + 1) * ?c * ?d)"]) @@ -2110,11 +2110,11 @@ using c d mult_cancel_left[of "(1 + 1) * ?c * ?d" "?a * (- (?d * ?t + ?c* ?s)/ ((1 + 1)*?c*?d)) + ?r" 0] by simp also have "\ \ ?a * (- (?d * ?t + ?c* ?s )) + (1 + 1)*?c*?d*?r \ 0" using nonzero_mult_divide_cancel_left[OF dc] c d - by (simp add: ring_simps diff_divide_distrib del: left_distrib) + by (simp add: algebra_simps diff_divide_distrib del: left_distrib) finally have ?thesis using c d - apply (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / ((1 + 1) * ?c * ?d)"] msubstneq_def Let_def evaldjf_ex ring_simps) + apply (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / ((1 + 1) * ?c * ?d)"] msubstneq_def Let_def evaldjf_ex field_simps) apply (simp only: one_add_one_is_two[symmetric] of_int_add) - apply (simp add: ring_simps) + apply (simp add: field_simps) done } ultimately show ?thesis by blast qed @@ -2169,7 +2169,7 @@ from dc' have dc'': "\ (1 + 1)*?c *?d < 0" by simp from add_frac_eq[OF c d, of "- ?t" "- ?s"] have th: "(- ?t / ?c + - ?s / ?d)/(1 + 1) = - (?d * ?t + ?c* ?s )/ ((1 + 1)*?c*?d)" - by (simp add: ring_simps) + by (simp add: field_simps) have "?rhs \ Ifm vs (- (?d * ?t + ?c* ?s )/ ((1 + 1)*?c*?d) # bs) (Lt (CNP 0 a r))" by (simp only: th) also have "\ \ ?a * (- (?d * ?t + ?c* ?s )/ ((1 + 1)*?c*?d)) + ?r < 0" by (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / ((1 + 1) * ?c * ?d)"]) @@ -2178,11 +2178,11 @@ using dc' dc'' mult_less_cancel_left_disj[of "(1 + 1) * ?c * ?d" "?a * (- (?d * ?t + ?c* ?s)/ ((1 + 1)*?c*?d)) + ?r" 0] by simp also have "\ \ ?a * (- (?d * ?t + ?c* ?s )) + (1 + 1)*?c*?d*?r < 0" using nonzero_mult_divide_cancel_left[of "(1 + 1)*?c*?d"] c d - by (simp add: ring_simps diff_divide_distrib del: left_distrib) + by (simp add: algebra_simps diff_divide_distrib del: left_distrib) finally have ?thesis using dc c d nc nd dc' - apply (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / ((1 + 1) * ?c * ?d)"] msubstlt_def Let_def evaldjf_ex ring_simps lt polyneg_norm polymul_norm) + apply (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / ((1 + 1) * ?c * ?d)"] msubstlt_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm) apply (simp only: one_add_one_is_two[symmetric] of_int_add) - by (simp add: ring_simps order_less_not_sym[OF dc])} + by (simp add: field_simps order_less_not_sym[OF dc])} moreover {assume dc: "?c*?d < 0" @@ -2191,7 +2191,7 @@ hence c:"?c \ 0" and d: "?d\ 0" by auto from add_frac_eq[OF c d, of "- ?t" "- ?s"] have th: "(- ?t / ?c + - ?s / ?d)/(1 + 1) = - (?d * ?t + ?c* ?s )/ ((1 + 1)*?c*?d)" - by (simp add: ring_simps) + by (simp add: field_simps) have "?rhs \ Ifm vs (- (?d * ?t + ?c* ?s )/ ((1 + 1)*?c*?d) # bs) (Lt (CNP 0 a r))" by (simp only: th) also have "\ \ ?a * (- (?d * ?t + ?c* ?s )/ ((1 + 1)*?c*?d)) + ?r < 0" by (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / ((1 + 1) * ?c * ?d)"]) @@ -2201,78 +2201,78 @@ using dc' order_less_not_sym[OF dc'] mult_less_cancel_left_disj[of "(1 + 1) * ?c * ?d" 0 "?a * (- (?d * ?t + ?c* ?s)/ ((1 + 1)*?c*?d)) + ?r"] by simp also have "\ \ ?a * ((?d * ?t + ?c* ?s )) - (1 + 1)*?c*?d*?r < 0" using nonzero_mult_divide_cancel_left[of "(1 + 1)*?c*?d"] c d - by (simp add: ring_simps diff_divide_distrib del: left_distrib) + by (simp add: algebra_simps diff_divide_distrib del: left_distrib) finally have ?thesis using dc c d nc nd - apply (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / ((1 + 1) * ?c * ?d)"] msubstlt_def Let_def evaldjf_ex ring_simps lt polyneg_norm polymul_norm) + apply (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / ((1 + 1) * ?c * ?d)"] msubstlt_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm) apply (simp only: one_add_one_is_two[symmetric] of_int_add) - by (simp add: ring_simps order_less_not_sym[OF dc]) } + by (simp add: field_simps order_less_not_sym[OF dc]) } moreover {assume c: "?c > 0" and d: "?d=0" from c have c'': "(1 + 1)*?c > 0" by (simp add: zero_less_mult_iff) from c have c': "(1 + 1)*?c \ 0" by simp - from d have th: "(- ?t / ?c + - ?s / ?d)/(1 + 1) = - ?t / ((1 + 1)*?c)" by (simp add: ring_simps) + from d have th: "(- ?t / ?c + - ?s / ?d)/(1 + 1) = - ?t / ((1 + 1)*?c)" by (simp add: field_simps) have "?rhs \ Ifm vs (- ?t / ((1 + 1)*?c) # bs) (Lt (CNP 0 a r))" by (simp only: th) also have "\ \ ?a* (- ?t / ((1 + 1)*?c))+ ?r < 0" by (simp add: r[of "- (?t / ((1 + 1)*?c))"]) also have "\ \ (1 + 1)*?c * (?a* (- ?t / ((1 + 1)*?c))+ ?r) < 0" using c mult_less_cancel_left_disj[of "(1 + 1) * ?c" "?a* (- ?t / ((1 + 1)*?c))+ ?r" 0] c' c'' order_less_not_sym[OF c''] by simp also have "\ \ - ?a*?t+ (1 + 1)*?c *?r < 0" using nonzero_mult_divide_cancel_left[OF c'] c - by (simp add: ring_simps diff_divide_distrib less_le del: left_distrib) + by (simp add: algebra_simps diff_divide_distrib less_le del: left_distrib) finally have ?thesis using c d nc nd - apply(simp add: r[of "- (?t / ((1 + 1)*?c))"] msubstlt_def Let_def evaldjf_ex ring_simps lt polyneg_norm polymul_norm) + apply(simp add: r[of "- (?t / ((1 + 1)*?c))"] msubstlt_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm) apply (simp only: one_add_one_is_two[symmetric] of_int_add) using c order_less_not_sym[OF c] less_imp_neq[OF c] - by (simp add: ring_simps ) } + by (simp add: field_simps ) } moreover {assume c: "?c < 0" and d: "?d=0" hence c': "(1 + 1)*?c \ 0" by simp from c have c'': "(1 + 1)*?c < 0" by (simp add: mult_less_0_iff) - from d have th: "(- ?t / ?c + - ?s / ?d)/(1 + 1) = - ?t / ((1 + 1)*?c)" by (simp add: ring_simps) + from d have th: "(- ?t / ?c + - ?s / ?d)/(1 + 1) = - ?t / ((1 + 1)*?c)" by (simp add: field_simps) have "?rhs \ Ifm vs (- ?t / ((1 + 1)*?c) # bs) (Lt (CNP 0 a r))" by (simp only: th) also have "\ \ ?a* (- ?t / ((1 + 1)*?c))+ ?r < 0" by (simp add: r[of "- (?t / ((1 + 1)*?c))"]) also have "\ \ (1 + 1)*?c * (?a* (- ?t / ((1 + 1)*?c))+ ?r) > 0" using c order_less_not_sym[OF c''] less_imp_neq[OF c''] c'' mult_less_cancel_left_disj[of "(1 + 1) * ?c" 0 "?a* (- ?t / ((1 + 1)*?c))+ ?r"] by simp also have "\ \ ?a*?t - (1 + 1)*?c *?r < 0" using nonzero_mult_divide_cancel_left[OF c'] c order_less_not_sym[OF c''] less_imp_neq[OF c''] c'' - by (simp add: ring_simps diff_divide_distrib del: left_distrib) + by (simp add: algebra_simps diff_divide_distrib del: left_distrib) finally have ?thesis using c d nc nd - apply(simp add: r[of "- (?t / ((1 + 1)*?c))"] msubstlt_def Let_def evaldjf_ex ring_simps lt polyneg_norm polymul_norm) + apply(simp add: r[of "- (?t / ((1 + 1)*?c))"] msubstlt_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm) apply (simp only: one_add_one_is_two[symmetric] of_int_add) using c order_less_not_sym[OF c] less_imp_neq[OF c] - by (simp add: ring_simps ) } + by (simp add: field_simps ) } moreover moreover {assume c: "?c = 0" and d: "?d>0" from d have d'': "(1 + 1)*?d > 0" by (simp add: zero_less_mult_iff) from d have d': "(1 + 1)*?d \ 0" by simp - from c have th: "(- ?t / ?c + - ?s / ?d)/(1 + 1) = - ?s / ((1 + 1)*?d)" by (simp add: ring_simps) + from c have th: "(- ?t / ?c + - ?s / ?d)/(1 + 1) = - ?s / ((1 + 1)*?d)" by (simp add: field_simps) have "?rhs \ Ifm vs (- ?s / ((1 + 1)*?d) # bs) (Lt (CNP 0 a r))" by (simp only: th) also have "\ \ ?a* (- ?s / ((1 + 1)*?d))+ ?r < 0" by (simp add: r[of "- (?s / ((1 + 1)*?d))"]) also have "\ \ (1 + 1)*?d * (?a* (- ?s / ((1 + 1)*?d))+ ?r) < 0" using d mult_less_cancel_left_disj[of "(1 + 1) * ?d" "?a* (- ?s / ((1 + 1)*?d))+ ?r" 0] d' d'' order_less_not_sym[OF d''] by simp also have "\ \ - ?a*?s+ (1 + 1)*?d *?r < 0" using nonzero_mult_divide_cancel_left[OF d'] d - by (simp add: ring_simps diff_divide_distrib less_le del: left_distrib) + by (simp add: algebra_simps diff_divide_distrib less_le del: left_distrib) finally have ?thesis using c d nc nd - apply(simp add: r[of "- (?s / ((1 + 1)*?d))"] msubstlt_def Let_def evaldjf_ex ring_simps lt polyneg_norm polymul_norm) + apply(simp add: r[of "- (?s / ((1 + 1)*?d))"] msubstlt_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm) apply (simp only: one_add_one_is_two[symmetric] of_int_add) using d order_less_not_sym[OF d] less_imp_neq[OF d] - by (simp add: ring_simps ) } + by (simp add: field_simps) } moreover {assume c: "?c = 0" and d: "?d<0" hence d': "(1 + 1)*?d \ 0" by simp from d have d'': "(1 + 1)*?d < 0" by (simp add: mult_less_0_iff) - from c have th: "(- ?t / ?c + - ?s / ?d)/(1 + 1) = - ?s / ((1 + 1)*?d)" by (simp add: ring_simps) + from c have th: "(- ?t / ?c + - ?s / ?d)/(1 + 1) = - ?s / ((1 + 1)*?d)" by (simp add: field_simps) have "?rhs \ Ifm vs (- ?s / ((1 + 1)*?d) # bs) (Lt (CNP 0 a r))" by (simp only: th) also have "\ \ ?a* (- ?s / ((1 + 1)*?d))+ ?r < 0" by (simp add: r[of "- (?s / ((1 + 1)*?d))"]) also have "\ \ (1 + 1)*?d * (?a* (- ?s / ((1 + 1)*?d))+ ?r) > 0" using d order_less_not_sym[OF d''] less_imp_neq[OF d''] d'' mult_less_cancel_left_disj[of "(1 + 1) * ?d" 0 "?a* (- ?s / ((1 + 1)*?d))+ ?r"] by simp also have "\ \ ?a*?s - (1 + 1)*?d *?r < 0" using nonzero_mult_divide_cancel_left[OF d'] d order_less_not_sym[OF d''] less_imp_neq[OF d''] d'' - by (simp add: ring_simps diff_divide_distrib del: left_distrib) + by (simp add: algebra_simps diff_divide_distrib del: left_distrib) finally have ?thesis using c d nc nd - apply(simp add: r[of "- (?s / ((1 + 1)*?d))"] msubstlt_def Let_def evaldjf_ex ring_simps lt polyneg_norm polymul_norm) + apply(simp add: r[of "- (?s / ((1 + 1)*?d))"] msubstlt_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm) apply (simp only: one_add_one_is_two[symmetric] of_int_add) using d order_less_not_sym[OF d] less_imp_neq[OF d] - by (simp add: ring_simps ) } + by (simp add: field_simps ) } ultimately show ?thesis by blast qed @@ -2325,7 +2325,7 @@ from dc' have dc'': "\ (1 + 1)*?c *?d < 0" by simp from add_frac_eq[OF c d, of "- ?t" "- ?s"] have th: "(- ?t / ?c + - ?s / ?d)/(1 + 1) = - (?d * ?t + ?c* ?s )/ ((1 + 1)*?c*?d)" - by (simp add: ring_simps) + by (simp add: field_simps) have "?rhs \ Ifm vs (- (?d * ?t + ?c* ?s )/ ((1 + 1)*?c*?d) # bs) (Le (CNP 0 a r))" by (simp only: th) also have "\ \ ?a * (- (?d * ?t + ?c* ?s )/ ((1 + 1)*?c*?d)) + ?r <= 0" by (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / ((1 + 1) * ?c * ?d)"]) @@ -2334,11 +2334,11 @@ using dc' dc'' mult_le_cancel_left[of "(1 + 1) * ?c * ?d" "?a * (- (?d * ?t + ?c* ?s)/ ((1 + 1)*?c*?d)) + ?r" 0] by simp also have "\ \ ?a * (- (?d * ?t + ?c* ?s )) + (1 + 1)*?c*?d*?r <= 0" using nonzero_mult_divide_cancel_left[of "(1 + 1)*?c*?d"] c d - by (simp add: ring_simps diff_divide_distrib del: left_distrib) + by (simp add: algebra_simps diff_divide_distrib del: left_distrib) finally have ?thesis using dc c d nc nd dc' - apply (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / ((1 + 1) * ?c * ?d)"] msubstle_def Let_def evaldjf_ex ring_simps lt polyneg_norm polymul_norm) + apply (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / ((1 + 1) * ?c * ?d)"] msubstle_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm) apply (simp only: one_add_one_is_two[symmetric] of_int_add) - by (simp add: ring_simps order_less_not_sym[OF dc])} + by (simp add: field_simps order_less_not_sym[OF dc])} moreover {assume dc: "?c*?d < 0" @@ -2347,7 +2347,7 @@ hence c:"?c \ 0" and d: "?d\ 0" by auto from add_frac_eq[OF c d, of "- ?t" "- ?s"] have th: "(- ?t / ?c + - ?s / ?d)/(1 + 1) = - (?d * ?t + ?c* ?s )/ ((1 + 1)*?c*?d)" - by (simp add: ring_simps) + by (simp add: field_simps) have "?rhs \ Ifm vs (- (?d * ?t + ?c* ?s )/ ((1 + 1)*?c*?d) # bs) (Le (CNP 0 a r))" by (simp only: th) also have "\ \ ?a * (- (?d * ?t + ?c* ?s )/ ((1 + 1)*?c*?d)) + ?r <= 0" by (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / ((1 + 1) * ?c * ?d)"]) @@ -2357,78 +2357,78 @@ using dc' order_less_not_sym[OF dc'] mult_le_cancel_left[of "(1 + 1) * ?c * ?d" 0 "?a * (- (?d * ?t + ?c* ?s)/ ((1 + 1)*?c*?d)) + ?r"] by simp also have "\ \ ?a * ((?d * ?t + ?c* ?s )) - (1 + 1)*?c*?d*?r <= 0" using nonzero_mult_divide_cancel_left[of "(1 + 1)*?c*?d"] c d - by (simp add: ring_simps diff_divide_distrib del: left_distrib) + by (simp add: algebra_simps diff_divide_distrib del: left_distrib) finally have ?thesis using dc c d nc nd - apply (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / ((1 + 1) * ?c * ?d)"] msubstle_def Let_def evaldjf_ex ring_simps lt polyneg_norm polymul_norm) + apply (simp add: r[of "(- (?d * ?t) + - (?c *?s)) / ((1 + 1) * ?c * ?d)"] msubstle_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm) apply (simp only: one_add_one_is_two[symmetric] of_int_add) - by (simp add: ring_simps order_less_not_sym[OF dc]) } + by (simp add: field_simps order_less_not_sym[OF dc]) } moreover {assume c: "?c > 0" and d: "?d=0" from c have c'': "(1 + 1)*?c > 0" by (simp add: zero_less_mult_iff) from c have c': "(1 + 1)*?c \ 0" by simp - from d have th: "(- ?t / ?c + - ?s / ?d)/(1 + 1) = - ?t / ((1 + 1)*?c)" by (simp add: ring_simps) + from d have th: "(- ?t / ?c + - ?s / ?d)/(1 + 1) = - ?t / ((1 + 1)*?c)" by (simp add: field_simps) have "?rhs \ Ifm vs (- ?t / ((1 + 1)*?c) # bs) (Le (CNP 0 a r))" by (simp only: th) also have "\ \ ?a* (- ?t / ((1 + 1)*?c))+ ?r <= 0" by (simp add: r[of "- (?t / ((1 + 1)*?c))"]) also have "\ \ (1 + 1)*?c * (?a* (- ?t / ((1 + 1)*?c))+ ?r) <= 0" using c mult_le_cancel_left[of "(1 + 1) * ?c" "?a* (- ?t / ((1 + 1)*?c))+ ?r" 0] c' c'' order_less_not_sym[OF c''] by simp also have "\ \ - ?a*?t+ (1 + 1)*?c *?r <= 0" using nonzero_mult_divide_cancel_left[OF c'] c - by (simp add: ring_simps diff_divide_distrib less_le del: left_distrib) + by (simp add: algebra_simps diff_divide_distrib less_le del: left_distrib) finally have ?thesis using c d nc nd - apply(simp add: r[of "- (?t / ((1 + 1)*?c))"] msubstle_def Let_def evaldjf_ex ring_simps lt polyneg_norm polymul_norm) + apply(simp add: r[of "- (?t / ((1 + 1)*?c))"] msubstle_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm) apply (simp only: one_add_one_is_two[symmetric] of_int_add) using c order_less_not_sym[OF c] less_imp_neq[OF c] - by (simp add: ring_simps ) } + by (simp add: field_simps ) } moreover {assume c: "?c < 0" and d: "?d=0" hence c': "(1 + 1)*?c \ 0" by simp from c have c'': "(1 + 1)*?c < 0" by (simp add: mult_less_0_iff) - from d have th: "(- ?t / ?c + - ?s / ?d)/(1 + 1) = - ?t / ((1 + 1)*?c)" by (simp add: ring_simps) + from d have th: "(- ?t / ?c + - ?s / ?d)/(1 + 1) = - ?t / ((1 + 1)*?c)" by (simp add: field_simps) have "?rhs \ Ifm vs (- ?t / ((1 + 1)*?c) # bs) (Le (CNP 0 a r))" by (simp only: th) also have "\ \ ?a* (- ?t / ((1 + 1)*?c))+ ?r <= 0" by (simp add: r[of "- (?t / ((1 + 1)*?c))"]) also have "\ \ (1 + 1)*?c * (?a* (- ?t / ((1 + 1)*?c))+ ?r) >= 0" using c order_less_not_sym[OF c''] less_imp_neq[OF c''] c'' mult_le_cancel_left[of "(1 + 1) * ?c" 0 "?a* (- ?t / ((1 + 1)*?c))+ ?r"] by simp also have "\ \ ?a*?t - (1 + 1)*?c *?r <= 0" using nonzero_mult_divide_cancel_left[OF c'] c order_less_not_sym[OF c''] less_imp_neq[OF c''] c'' - by (simp add: ring_simps diff_divide_distrib del: left_distrib) + by (simp add: algebra_simps diff_divide_distrib del: left_distrib) finally have ?thesis using c d nc nd - apply(simp add: r[of "- (?t / ((1 + 1)*?c))"] msubstle_def Let_def evaldjf_ex ring_simps lt polyneg_norm polymul_norm) + apply(simp add: r[of "- (?t / ((1 + 1)*?c))"] msubstle_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm) apply (simp only: one_add_one_is_two[symmetric] of_int_add) using c order_less_not_sym[OF c] less_imp_neq[OF c] - by (simp add: ring_simps ) } + by (simp add: field_simps ) } moreover moreover {assume c: "?c = 0" and d: "?d>0" from d have d'': "(1 + 1)*?d > 0" by (simp add: zero_less_mult_iff) from d have d': "(1 + 1)*?d \ 0" by simp - from c have th: "(- ?t / ?c + - ?s / ?d)/(1 + 1) = - ?s / ((1 + 1)*?d)" by (simp add: ring_simps) + from c have th: "(- ?t / ?c + - ?s / ?d)/(1 + 1) = - ?s / ((1 + 1)*?d)" by (simp add: field_simps) have "?rhs \ Ifm vs (- ?s / ((1 + 1)*?d) # bs) (Le (CNP 0 a r))" by (simp only: th) also have "\ \ ?a* (- ?s / ((1 + 1)*?d))+ ?r <= 0" by (simp add: r[of "- (?s / ((1 + 1)*?d))"]) also have "\ \ (1 + 1)*?d * (?a* (- ?s / ((1 + 1)*?d))+ ?r) <= 0" using d mult_le_cancel_left[of "(1 + 1) * ?d" "?a* (- ?s / ((1 + 1)*?d))+ ?r" 0] d' d'' order_less_not_sym[OF d''] by simp also have "\ \ - ?a*?s+ (1 + 1)*?d *?r <= 0" using nonzero_mult_divide_cancel_left[OF d'] d - by (simp add: ring_simps diff_divide_distrib less_le del: left_distrib) + by (simp add: algebra_simps diff_divide_distrib less_le del: left_distrib) finally have ?thesis using c d nc nd - apply(simp add: r[of "- (?s / ((1 + 1)*?d))"] msubstle_def Let_def evaldjf_ex ring_simps lt polyneg_norm polymul_norm) + apply(simp add: r[of "- (?s / ((1 + 1)*?d))"] msubstle_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm) apply (simp only: one_add_one_is_two[symmetric] of_int_add) using d order_less_not_sym[OF d] less_imp_neq[OF d] - by (simp add: ring_simps ) } + by (simp add: field_simps ) } moreover {assume c: "?c = 0" and d: "?d<0" hence d': "(1 + 1)*?d \ 0" by simp from d have d'': "(1 + 1)*?d < 0" by (simp add: mult_less_0_iff) - from c have th: "(- ?t / ?c + - ?s / ?d)/(1 + 1) = - ?s / ((1 + 1)*?d)" by (simp add: ring_simps) + from c have th: "(- ?t / ?c + - ?s / ?d)/(1 + 1) = - ?s / ((1 + 1)*?d)" by (simp add: field_simps) have "?rhs \ Ifm vs (- ?s / ((1 + 1)*?d) # bs) (Le (CNP 0 a r))" by (simp only: th) also have "\ \ ?a* (- ?s / ((1 + 1)*?d))+ ?r <= 0" by (simp add: r[of "- (?s / ((1 + 1)*?d))"]) also have "\ \ (1 + 1)*?d * (?a* (- ?s / ((1 + 1)*?d))+ ?r) >= 0" using d order_less_not_sym[OF d''] less_imp_neq[OF d''] d'' mult_le_cancel_left[of "(1 + 1) * ?d" 0 "?a* (- ?s / ((1 + 1)*?d))+ ?r"] by simp also have "\ \ ?a*?s - (1 + 1)*?d *?r <= 0" using nonzero_mult_divide_cancel_left[OF d'] d order_less_not_sym[OF d''] less_imp_neq[OF d''] d'' - by (simp add: ring_simps diff_divide_distrib del: left_distrib) + by (simp add: algebra_simps diff_divide_distrib del: left_distrib) finally have ?thesis using c d nc nd - apply(simp add: r[of "- (?s / ((1 + 1)*?d))"] msubstle_def Let_def evaldjf_ex ring_simps lt polyneg_norm polymul_norm) + apply(simp add: r[of "- (?s / ((1 + 1)*?d))"] msubstle_def Let_def evaldjf_ex field_simps lt polyneg_norm polymul_norm) apply (simp only: one_add_one_is_two[symmetric] of_int_add) using d order_less_not_sym[OF d] less_imp_neq[OF d] - by (simp add: ring_simps ) } + by (simp add: field_simps ) } ultimately show ?thesis by blast qed @@ -2519,7 +2519,7 @@ lemma remdps_set[simp]: "set (remdps xs) = set xs" by (induct xs rule: remdps.induct, auto) -lemma simpfm_lin: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" +lemma simpfm_lin: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" shows "qfree p \ islin (simpfm p)" by (induct p rule: simpfm.induct, auto simp add: conj_lin disj_lin) @@ -2551,7 +2551,7 @@ {fix c t d s assume ctU: "(c,t) \ set ?U" and dsU: "(d,s) \ set ?U" from U_l ctU dsU have norm: "isnpoly c" "isnpoly d" by auto from msubst_I[OF lq norm, of vs x bs t s] msubst_I[OF lq norm(2,1), of vs x bs s t] - have "?I (msubst ?q ((c,t),(d,s))) = ?I (msubst ?q ((d,s),(c,t)))" by (simp add: ring_simps)} + have "?I (msubst ?q ((c,t),(d,s))) = ?I (msubst ?q ((d,s),(c,t)))" by (simp add: field_simps)} hence th0: "\x \ set ?U. \y \ set ?U. ?I (msubst ?q (x, y)) \ ?I (msubst ?q (y, x))" by clarsimp {fix x assume xUp: "x \ set ?Up" then obtain c t d s where ctU: "(c,t) \ set ?U" and dsU: "(d,s) \ set ?U" @@ -2616,7 +2616,7 @@ let ?s = "Itm vs (x # bs) s" let ?t = "Itm vs (x # bs) t" have eq2: "\(x::'a). x + x = (1 + 1) * x" - by (simp add: ring_simps) + by (simp add: field_simps) {assume "?c = 0 \ ?d = 0" with ct have ?D by simp} moreover @@ -2747,12 +2747,12 @@ using lp tnb by (induct p c t rule: msubstpos.induct, auto simp add: msubsteq2_nb msubstltpos_nb msubstlepos_nb) -lemma msubstneg_nb: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" and lp: "islin p" and tnb: "tmbound0 t" +lemma msubstneg_nb: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" and lp: "islin p" and tnb: "tmbound0 t" shows "bound0 (msubstneg p c t)" using lp tnb by (induct p c t rule: msubstneg.induct, auto simp add: msubsteq2_nb msubstltneg_nb msubstleneg_nb) -lemma msubst2_nb: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" and lp: "islin p" and tnb: "tmbound0 t" +lemma msubst2_nb: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" and lp: "islin p" and tnb: "tmbound0 t" shows "bound0 (msubst2 p c t)" using lp tnb by (simp add: msubst2_def msubstneg_nb msubstpos_nb conj_nb disj_nb lt_nb simpfm_bound0) @@ -2899,14 +2899,14 @@ by (auto simp add: msubst2_def lt[OF stupid(3)] lt[OF stupid(1)] mult_less_0_iff zero_less_mult_iff) from msubst2[OF lq norm2(1) z(1), of x bs] msubst2[OF lq norm2(2) z(2), of x bs] H - show ?rhs by (simp add: ring_simps) + show ?rhs by (simp add: field_simps) next assume H: ?rhs hence z: "\C (-2, 1) *\<^sub>p b *\<^sub>p d\\<^sub>p\<^bsup>vs\<^esup> \ 0" "\C (-2, 1) *\<^sub>p d *\<^sub>p b\\<^sub>p\<^bsup>vs\<^esup> \ 0" by (auto simp add: msubst2_def lt[OF stupid(4)] lt[OF stupid(2)] mult_less_0_iff zero_less_mult_iff) from msubst2[OF lq norm2(1) z(1), of x bs] msubst2[OF lq norm2(2) z(2), of x bs] H - show ?lhs by (simp add: ring_simps) + show ?lhs by (simp add: field_simps) qed} hence th0: "\x \ set ?U. \y \ set ?U. ?I (?s (x, y)) \ ?I (?s (y, x))" by clarsimp @@ -3156,54 +3156,54 @@ *} "Parametric QE for linear Arithmetic over fields, Version 2" -lemma "\(x::'a::{division_by_zero,linordered_field,number_ring}). y \ -1 \ (y + 1)*x < 0" - apply (frpar type: "'a::{division_by_zero,linordered_field,number_ring}" pars: "y::'a::{division_by_zero,linordered_field,number_ring}") - apply (simp add: ring_simps) +lemma "\(x::'a::{linordered_field, division_ring_inverse_zero, number_ring}). y \ -1 \ (y + 1)*x < 0" + apply (frpar type: "'a::{linordered_field, division_ring_inverse_zero, number_ring}" pars: "y::'a::{linordered_field, division_ring_inverse_zero, number_ring}") + apply (simp add: field_simps) apply (rule spec[where x=y]) - apply (frpar type: "'a::{division_by_zero,linordered_field,number_ring}" pars: "z::'a::{division_by_zero,linordered_field,number_ring}") + apply (frpar type: "'a::{linordered_field, division_ring_inverse_zero, number_ring}" pars: "z::'a::{linordered_field, division_ring_inverse_zero, number_ring}") by simp text{* Collins/Jones Problem *} (* -lemma "\(r::'a::{division_by_zero,linordered_field,number_ring}). 0 < r \ r < 1 \ 0 < (2 - 3*r) *(a^2 + b^2) + (2*a)*r \ (2 - 3*r) *(a^2 + b^2) + 4*a*r - 2*a - r < 0" +lemma "\(r::'a::{linordered_field, division_ring_inverse_zero, number_ring}). 0 < r \ r < 1 \ 0 < (2 - 3*r) *(a^2 + b^2) + (2*a)*r \ (2 - 3*r) *(a^2 + b^2) + 4*a*r - 2*a - r < 0" proof- - have "(\(r::'a::{division_by_zero,linordered_field,number_ring}). 0 < r \ r < 1 \ 0 < (2 - 3*r) *(a^2 + b^2) + (2*a)*r \ (2 - 3*r) *(a^2 + b^2) + 4*a*r - 2*a - r < 0) \ (\(r::'a::{division_by_zero,linordered_field,number_ring}). 0 < r \ r < 1 \ 0 < 2 *(a^2 + b^2) - (3*(a^2 + b^2)) * r + (2*a)*r \ 2*(a^2 + b^2) - (3*(a^2 + b^2) - 4*a + 1)*r - 2*a < 0)" (is "?lhs \ ?rhs") -by (simp add: ring_simps) + have "(\(r::'a::{linordered_field, division_ring_inverse_zero, number_ring}). 0 < r \ r < 1 \ 0 < (2 - 3*r) *(a^2 + b^2) + (2*a)*r \ (2 - 3*r) *(a^2 + b^2) + 4*a*r - 2*a - r < 0) \ (\(r::'a::{linordered_field, division_ring_inverse_zero, number_ring}). 0 < r \ r < 1 \ 0 < 2 *(a^2 + b^2) - (3*(a^2 + b^2)) * r + (2*a)*r \ 2*(a^2 + b^2) - (3*(a^2 + b^2) - 4*a + 1)*r - 2*a < 0)" (is "?lhs \ ?rhs") +by (simp add: field_simps) have "?rhs" - apply (frpar type: "'a::{division_by_zero,linordered_field,number_ring}" pars: "a::'a::{division_by_zero,linordered_field,number_ring}" "b::'a::{division_by_zero,linordered_field,number_ring}") - apply (simp add: ring_simps) + apply (frpar type: "'a::{linordered_field, division_ring_inverse_zero, number_ring}" pars: "a::'a::{linordered_field, division_ring_inverse_zero, number_ring}" "b::'a::{linordered_field, division_ring_inverse_zero, number_ring}") + apply (simp add: field_simps) oops *) (* -lemma "ALL (x::'a::{division_by_zero,linordered_field,number_ring}) y. (1 - t)*x \ (1+t)*y \ (1 - t)*y \ (1+t)*x --> 0 \ y" -apply (frpar type: "'a::{division_by_zero,linordered_field,number_ring}" pars: "t::'a::{division_by_zero,linordered_field,number_ring}") +lemma "ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y. (1 - t)*x \ (1+t)*y \ (1 - t)*y \ (1+t)*x --> 0 \ y" +apply (frpar type: "'a::{linordered_field, division_ring_inverse_zero, number_ring}" pars: "t::'a::{linordered_field, division_ring_inverse_zero, number_ring}") oops *) -lemma "\(x::'a::{division_by_zero,linordered_field,number_ring}). y \ -1 \ (y + 1)*x < 0" - apply (frpar2 type: "'a::{division_by_zero,linordered_field,number_ring}" pars: "y::'a::{division_by_zero,linordered_field,number_ring}") - apply (simp add: ring_simps) +lemma "\(x::'a::{linordered_field, division_ring_inverse_zero, number_ring}). y \ -1 \ (y + 1)*x < 0" + apply (frpar2 type: "'a::{linordered_field, division_ring_inverse_zero, number_ring}" pars: "y::'a::{linordered_field, division_ring_inverse_zero, number_ring}") + apply (simp add: field_simps) apply (rule spec[where x=y]) - apply (frpar2 type: "'a::{division_by_zero,linordered_field,number_ring}" pars: "z::'a::{division_by_zero,linordered_field,number_ring}") + apply (frpar2 type: "'a::{linordered_field, division_ring_inverse_zero, number_ring}" pars: "z::'a::{linordered_field, division_ring_inverse_zero, number_ring}") by simp text{* Collins/Jones Problem *} (* -lemma "\(r::'a::{division_by_zero,linordered_field,number_ring}). 0 < r \ r < 1 \ 0 < (2 - 3*r) *(a^2 + b^2) + (2*a)*r \ (2 - 3*r) *(a^2 + b^2) + 4*a*r - 2*a - r < 0" +lemma "\(r::'a::{linordered_field, division_ring_inverse_zero, number_ring}). 0 < r \ r < 1 \ 0 < (2 - 3*r) *(a^2 + b^2) + (2*a)*r \ (2 - 3*r) *(a^2 + b^2) + 4*a*r - 2*a - r < 0" proof- - have "(\(r::'a::{division_by_zero,linordered_field,number_ring}). 0 < r \ r < 1 \ 0 < (2 - 3*r) *(a^2 + b^2) + (2*a)*r \ (2 - 3*r) *(a^2 + b^2) + 4*a*r - 2*a - r < 0) \ (\(r::'a::{division_by_zero,linordered_field,number_ring}). 0 < r \ r < 1 \ 0 < 2 *(a^2 + b^2) - (3*(a^2 + b^2)) * r + (2*a)*r \ 2*(a^2 + b^2) - (3*(a^2 + b^2) - 4*a + 1)*r - 2*a < 0)" (is "?lhs \ ?rhs") -by (simp add: ring_simps) + have "(\(r::'a::{linordered_field, division_ring_inverse_zero, number_ring}). 0 < r \ r < 1 \ 0 < (2 - 3*r) *(a^2 + b^2) + (2*a)*r \ (2 - 3*r) *(a^2 + b^2) + 4*a*r - 2*a - r < 0) \ (\(r::'a::{linordered_field, division_ring_inverse_zero, number_ring}). 0 < r \ r < 1 \ 0 < 2 *(a^2 + b^2) - (3*(a^2 + b^2)) * r + (2*a)*r \ 2*(a^2 + b^2) - (3*(a^2 + b^2) - 4*a + 1)*r - 2*a < 0)" (is "?lhs \ ?rhs") +by (simp add: field_simps) have "?rhs" - apply (frpar2 type: "'a::{division_by_zero,linordered_field,number_ring}" pars: "a::'a::{division_by_zero,linordered_field,number_ring}" "b::'a::{division_by_zero,linordered_field,number_ring}") + apply (frpar2 type: "'a::{linordered_field, division_ring_inverse_zero, number_ring}" pars: "a::'a::{linordered_field, division_ring_inverse_zero, number_ring}" "b::'a::{linordered_field, division_ring_inverse_zero, number_ring}") apply simp oops *) (* -lemma "ALL (x::'a::{division_by_zero,linordered_field,number_ring}) y. (1 - t)*x \ (1+t)*y \ (1 - t)*y \ (1+t)*x --> 0 \ y" -apply (frpar2 type: "'a::{division_by_zero,linordered_field,number_ring}" pars: "t::'a::{division_by_zero,linordered_field,number_ring}") +lemma "ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y. (1 - t)*x \ (1+t)*y \ (1 - t)*y \ (1+t)*x --> 0 \ y" +apply (frpar2 type: "'a::{linordered_field, division_ring_inverse_zero, number_ring}" pars: "t::'a::{linordered_field, division_ring_inverse_zero, number_ring}") apply (simp add: field_simps linorder_neq_iff[symmetric]) apply ferrack oops diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Decision_Procs/Polynomial_List.thy --- a/src/HOL/Decision_Procs/Polynomial_List.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Decision_Procs/Polynomial_List.thy Mon Apr 26 13:43:31 2010 +0200 @@ -283,11 +283,11 @@ apply (drule_tac x = "%m. if m = Suc n then a else i m" in spec, safe) apply (drule poly_mult_eq_zero_disj [THEN iffD1], safe) apply (drule_tac x = "Suc (length q)" in spec) -apply (auto simp add: ring_simps) +apply (auto simp add: field_simps) apply (drule_tac x = xa in spec) -apply (clarsimp simp add: ring_simps) +apply (clarsimp simp add: field_simps) apply (drule_tac x = m in spec) -apply (auto simp add:ring_simps) +apply (auto simp add:field_simps) done lemmas poly_roots_index_lemma1 = conjI [THEN poly_roots_index_lemma0, standard] @@ -327,7 +327,7 @@ apply (drule_tac x = "a#i" in spec) apply (auto simp only: poly_mult List.list.size) apply (drule_tac x = xa in spec) -apply (clarsimp simp add: ring_simps) +apply (clarsimp simp add: field_simps) done lemmas poly_roots_index_lemma2 = conjI [THEN poly_roots_index_lemma, standard] @@ -413,7 +413,7 @@ by (auto intro!: ext) lemma poly_add_minus_zero_iff: "(poly (p +++ -- q) = poly []) = (poly p = poly q)" -by (auto simp add: ring_simps poly_add poly_minus_def fun_eq poly_cmult) +by (auto simp add: field_simps poly_add poly_minus_def fun_eq poly_cmult) lemma poly_add_minus_mult_eq: "poly (p *** q +++ --(p *** r)) = poly (p *** (q +++ -- r))" by (auto simp add: poly_add poly_minus_def fun_eq poly_mult poly_cmult right_distrib) diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Decision_Procs/Reflected_Multivariate_Polynomial.thy --- a/src/HOL/Decision_Procs/Reflected_Multivariate_Polynomial.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Decision_Procs/Reflected_Multivariate_Polynomial.thy Mon Apr 26 13:43:31 2010 +0200 @@ -230,7 +230,7 @@ subsection{* Semantics of the polynomial representation *} -consts Ipoly :: "'a list \ poly \ 'a::{ring_char_0,power,division_by_zero,field}" +consts Ipoly :: "'a list \ poly \ 'a::{ring_char_0,power,division_ring_inverse_zero,field}" primrec "Ipoly bs (C c) = INum c" "Ipoly bs (Bound n) = bs!n" @@ -241,7 +241,7 @@ "Ipoly bs (Pw t n) = (Ipoly bs t) ^ n" "Ipoly bs (CN c n p) = (Ipoly bs c) + (bs!n)*(Ipoly bs p)" abbreviation - Ipoly_syntax :: "poly \ 'a list \'a::{ring_char_0,power,division_by_zero,field}" ("\_\\<^sub>p\<^bsup>_\<^esup>") + Ipoly_syntax :: "poly \ 'a list \'a::{ring_char_0,power,division_ring_inverse_zero,field}" ("\_\\<^sub>p\<^bsup>_\<^esup>") where "\p\\<^sub>p\<^bsup>bs\<^esup> \ Ipoly bs p" lemma Ipoly_CInt: "Ipoly bs (C (i,1)) = of_int i" @@ -322,7 +322,7 @@ qed auto lemma polyadd[simp]: "Ipoly bs (polyadd (p,q)) = (Ipoly bs p) + (Ipoly bs q)" -by (induct p q rule: polyadd.induct, auto simp add: Let_def ring_simps right_distrib[symmetric] simp del: right_distrib) +by (induct p q rule: polyadd.induct, auto simp add: Let_def field_simps right_distrib[symmetric] simp del: right_distrib) lemma polyadd_norm: "\ isnpoly p ; isnpoly q\ \ isnpoly (polyadd(p,q))" using polyadd_normh[of "p" "0" "q" "0"] isnpoly_def by simp @@ -394,7 +394,7 @@ qed simp_all lemma polymul_properties: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{field, division_ring_inverse_zero, ring_char_0})" and np: "isnpolyh p n0" and nq: "isnpolyh q n1" and m: "m \ min n0 n1" shows "isnpolyh (p *\<^sub>p q) (min n0 n1)" and "(p *\<^sub>p q = 0\<^sub>p) = (p = 0\<^sub>p \ q = 0\<^sub>p)" @@ -565,22 +565,22 @@ qed auto lemma polymul[simp]: "Ipoly bs (p *\<^sub>p q) = (Ipoly bs p) * (Ipoly bs q)" -by(induct p q rule: polymul.induct, auto simp add: ring_simps) +by(induct p q rule: polymul.induct, auto simp add: field_simps) lemma polymul_normh: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{field, division_ring_inverse_zero, ring_char_0})" shows "\isnpolyh p n0 ; isnpolyh q n1\ \ isnpolyh (p *\<^sub>p q) (min n0 n1)" using polymul_properties(1) by blast lemma polymul_eq0_iff: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{field, division_ring_inverse_zero, ring_char_0})" shows "\ isnpolyh p n0 ; isnpolyh q n1\ \ (p *\<^sub>p q = 0\<^sub>p) = (p = 0\<^sub>p \ q = 0\<^sub>p) " using polymul_properties(2) by blast lemma polymul_degreen: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{field, division_ring_inverse_zero, ring_char_0})" shows "\ isnpolyh p n0 ; isnpolyh q n1 ; m \ min n0 n1\ \ degreen (p *\<^sub>p q) m = (if (p = 0\<^sub>p \ q = 0\<^sub>p) then 0 else degreen p m + degreen q m)" using polymul_properties(3) by blast lemma polymul_norm: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{field, division_ring_inverse_zero, ring_char_0})" shows "\ isnpoly p; isnpoly q\ \ isnpoly (polymul (p,q))" using polymul_normh[of "p" "0" "q" "0"] isnpoly_def by simp @@ -591,7 +591,7 @@ by (induct p arbitrary: n0, auto) lemma monic_eqI: assumes np: "isnpolyh p n0" - shows "INum (headconst p) * Ipoly bs (fst (monic p)) = (Ipoly bs p ::'a::{ring_char_0,power,division_by_zero,field})" + shows "INum (headconst p) * Ipoly bs (fst (monic p)) = (Ipoly bs p ::'a::{ring_char_0,power,division_ring_inverse_zero,field})" unfolding monic_def Let_def proof(cases "headconst p = 0\<^sub>N", simp_all add: headconst_zero[OF np]) let ?h = "headconst p" @@ -629,13 +629,13 @@ lemma polysub_norm: "\ isnpoly p; isnpoly q\ \ isnpoly (polysub(p,q))" using polyadd_norm polyneg_norm by (simp add: polysub_def) -lemma polysub_same_0[simp]: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" +lemma polysub_same_0[simp]: assumes "SORT_CONSTRAINT('a::{field, division_ring_inverse_zero, ring_char_0})" shows "isnpolyh p n0 \ polysub (p, p) = 0\<^sub>p" unfolding polysub_def split_def fst_conv snd_conv by (induct p arbitrary: n0,auto simp add: Let_def Nsub0[simplified Nsub_def]) lemma polysub_0: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{field, division_ring_inverse_zero, ring_char_0})" shows "\ isnpolyh p n0 ; isnpolyh q n1\ \ (p -\<^sub>p q = 0\<^sub>p) = (p = q)" unfolding polysub_def split_def fst_conv snd_conv apply (induct p q arbitrary: n0 n1 rule:polyadd.induct, simp_all add: Nsub0[simplified Nsub_def]) @@ -657,7 +657,7 @@ done text{* polypow is a power function and preserves normal forms *} -lemma polypow[simp]: "Ipoly bs (polypow n p) = ((Ipoly bs p :: 'a::{ring_char_0,division_by_zero,field})) ^ n" +lemma polypow[simp]: "Ipoly bs (polypow n p) = ((Ipoly bs p :: 'a::{field, division_ring_inverse_zero, ring_char_0})) ^ n" proof(induct n rule: polypow.induct) case 1 thus ?case by simp next @@ -688,7 +688,7 @@ qed lemma polypow_normh: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{field, division_ring_inverse_zero, ring_char_0})" shows "isnpolyh p n \ isnpolyh (polypow k p) n" proof (induct k arbitrary: n rule: polypow.induct) case (2 k n) @@ -701,17 +701,17 @@ qed auto lemma polypow_norm: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{field, division_ring_inverse_zero, ring_char_0})" shows "isnpoly p \ isnpoly (polypow k p)" by (simp add: polypow_normh isnpoly_def) text{* Finally the whole normalization*} -lemma polynate[simp]: "Ipoly bs (polynate p) = (Ipoly bs p :: 'a ::{ring_char_0,division_by_zero,field})" +lemma polynate[simp]: "Ipoly bs (polynate p) = (Ipoly bs p :: 'a ::{field, division_ring_inverse_zero, ring_char_0})" by (induct p rule:polynate.induct, auto) lemma polynate_norm[simp]: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{field, division_ring_inverse_zero, ring_char_0})" shows "isnpoly (polynate p)" by (induct p rule: polynate.induct, simp_all add: polyadd_norm polymul_norm polysub_norm polyneg_norm polypow_norm) (simp_all add: isnpoly_def) @@ -736,29 +736,29 @@ shows "isnpolyh (funpow k f p) n" using f np by (induct k arbitrary: p, auto) -lemma funpow_shift1: "(Ipoly bs (funpow n shift1 p) :: 'a :: {ring_char_0,division_by_zero,field}) = Ipoly bs (Mul (Pw (Bound 0) n) p)" +lemma funpow_shift1: "(Ipoly bs (funpow n shift1 p) :: 'a :: {field, division_ring_inverse_zero, ring_char_0}) = Ipoly bs (Mul (Pw (Bound 0) n) p)" by (induct n arbitrary: p, simp_all add: shift1_isnpoly shift1 power_Suc ) lemma shift1_isnpolyh: "isnpolyh p n0 \ p\ 0\<^sub>p \ isnpolyh (shift1 p) 0" using isnpolyh_mono[where n="n0" and n'="0" and p="p"] by (simp add: shift1_def) lemma funpow_shift1_1: - "(Ipoly bs (funpow n shift1 p) :: 'a :: {ring_char_0,division_by_zero,field}) = Ipoly bs (funpow n shift1 1\<^sub>p *\<^sub>p p)" + "(Ipoly bs (funpow n shift1 p) :: 'a :: {field, division_ring_inverse_zero, ring_char_0}) = Ipoly bs (funpow n shift1 1\<^sub>p *\<^sub>p p)" by (simp add: funpow_shift1) lemma poly_cmul[simp]: "Ipoly bs (poly_cmul c p) = Ipoly bs (Mul (C c) p)" -by (induct p arbitrary: n0 rule: poly_cmul.induct, auto simp add: ring_simps) +by (induct p arbitrary: n0 rule: poly_cmul.induct, auto simp add: field_simps) lemma behead: assumes np: "isnpolyh p n" - shows "Ipoly bs (Add (Mul (head p) (Pw (Bound 0) (degree p))) (behead p)) = (Ipoly bs p :: 'a :: {ring_char_0,division_by_zero,field})" + shows "Ipoly bs (Add (Mul (head p) (Pw (Bound 0) (degree p))) (behead p)) = (Ipoly bs p :: 'a :: {field, division_ring_inverse_zero, ring_char_0})" using np proof (induct p arbitrary: n rule: behead.induct) case (1 c p n) hence pn: "isnpolyh p n" by simp from prems(2)[OF pn] have th:"Ipoly bs (Add (Mul (head p) (Pw (Bound 0) (degree p))) (behead p)) = Ipoly bs p" . then show ?case using "1.hyps" apply (simp add: Let_def,cases "behead p = 0\<^sub>p") - by (simp_all add: th[symmetric] ring_simps power_Suc) + by (simp_all add: th[symmetric] field_simps power_Suc) qed (auto simp add: Let_def) lemma behead_isnpolyh: @@ -981,7 +981,7 @@ by (simp add: head_eq_headn0) lemma isnpolyh_zero_iff: - assumes nq: "isnpolyh p n0" and eq :"\bs. wf_bs bs p \ \p\\<^sub>p\<^bsup>bs\<^esup> = (0::'a::{ring_char_0,power,division_by_zero,field})" + assumes nq: "isnpolyh p n0" and eq :"\bs. wf_bs bs p \ \p\\<^sub>p\<^bsup>bs\<^esup> = (0::'a::{ring_char_0,power,division_ring_inverse_zero,field})" shows "p = 0\<^sub>p" using nq eq proof (induct "maxindex p" arbitrary: p n0 rule: less_induct) @@ -1033,7 +1033,7 @@ lemma isnpolyh_unique: assumes np:"isnpolyh p n0" and nq: "isnpolyh q n1" - shows "(\bs. \p\\<^sub>p\<^bsup>bs\<^esup> = (\q\\<^sub>p\<^bsup>bs\<^esup> :: 'a::{ring_char_0,power,division_by_zero,field})) \ p = q" + shows "(\bs. \p\\<^sub>p\<^bsup>bs\<^esup> = (\q\\<^sub>p\<^bsup>bs\<^esup> :: 'a::{ring_char_0,power,division_ring_inverse_zero,field})) \ p = q" proof(auto) assume H: "\bs. (\p\\<^sub>p\<^bsup>bs\<^esup> ::'a)= \q\\<^sub>p\<^bsup>bs\<^esup>" hence "\bs.\p -\<^sub>p q\\<^sub>p\<^bsup>bs\<^esup>= (0::'a)" by simp @@ -1046,50 +1046,50 @@ text{* consequenses of unicity on the algorithms for polynomial normalization *} -lemma polyadd_commute: assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" +lemma polyadd_commute: assumes "SORT_CONSTRAINT('a::{field, division_ring_inverse_zero, ring_char_0})" and np: "isnpolyh p n0" and nq: "isnpolyh q n1" shows "p +\<^sub>p q = q +\<^sub>p p" using isnpolyh_unique[OF polyadd_normh[OF np nq] polyadd_normh[OF nq np]] by simp lemma zero_normh: "isnpolyh 0\<^sub>p n" by simp lemma one_normh: "isnpolyh 1\<^sub>p n" by simp lemma polyadd_0[simp]: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{field, division_ring_inverse_zero, ring_char_0})" and np: "isnpolyh p n0" shows "p +\<^sub>p 0\<^sub>p = p" and "0\<^sub>p +\<^sub>p p = p" using isnpolyh_unique[OF polyadd_normh[OF np zero_normh] np] isnpolyh_unique[OF polyadd_normh[OF zero_normh np] np] by simp_all lemma polymul_1[simp]: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{field, division_ring_inverse_zero, ring_char_0})" and np: "isnpolyh p n0" shows "p *\<^sub>p 1\<^sub>p = p" and "1\<^sub>p *\<^sub>p p = p" using isnpolyh_unique[OF polymul_normh[OF np one_normh] np] isnpolyh_unique[OF polymul_normh[OF one_normh np] np] by simp_all lemma polymul_0[simp]: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{field, division_ring_inverse_zero, ring_char_0})" and np: "isnpolyh p n0" shows "p *\<^sub>p 0\<^sub>p = 0\<^sub>p" and "0\<^sub>p *\<^sub>p p = 0\<^sub>p" using isnpolyh_unique[OF polymul_normh[OF np zero_normh] zero_normh] isnpolyh_unique[OF polymul_normh[OF zero_normh np] zero_normh] by simp_all lemma polymul_commute: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{field, division_ring_inverse_zero, ring_char_0})" and np:"isnpolyh p n0" and nq: "isnpolyh q n1" shows "p *\<^sub>p q = q *\<^sub>p p" -using isnpolyh_unique[OF polymul_normh[OF np nq] polymul_normh[OF nq np], where ?'a = "'a\{ring_char_0,power,division_by_zero,field}"] by simp +using isnpolyh_unique[OF polymul_normh[OF np nq] polymul_normh[OF nq np], where ?'a = "'a\{ring_char_0,power,division_ring_inverse_zero,field}"] by simp declare polyneg_polyneg[simp] lemma isnpolyh_polynate_id[simp]: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{field, division_ring_inverse_zero, ring_char_0})" and np:"isnpolyh p n0" shows "polynate p = p" - using isnpolyh_unique[where ?'a= "'a::{ring_char_0,division_by_zero,field}", OF polynate_norm[of p, unfolded isnpoly_def] np] polynate[where ?'a = "'a::{ring_char_0,division_by_zero,field}"] by simp + using isnpolyh_unique[where ?'a= "'a::{field, division_ring_inverse_zero, ring_char_0}", OF polynate_norm[of p, unfolded isnpoly_def] np] polynate[where ?'a = "'a::{field, division_ring_inverse_zero, ring_char_0}"] by simp lemma polynate_idempotent[simp]: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{field, division_ring_inverse_zero, ring_char_0})" shows "polynate (polynate p) = polynate p" using isnpolyh_polynate_id[OF polynate_norm[of p, unfolded isnpoly_def]] . lemma poly_nate_polypoly': "poly_nate bs p = polypoly' bs (polynate p)" unfolding poly_nate_def polypoly'_def .. -lemma poly_nate_poly: shows "poly (poly_nate bs p) = (\x:: 'a ::{ring_char_0,division_by_zero,field}. \p\\<^sub>p\<^bsup>x # bs\<^esup>)" +lemma poly_nate_poly: shows "poly (poly_nate bs p) = (\x:: 'a ::{field, division_ring_inverse_zero, ring_char_0}. \p\\<^sub>p\<^bsup>x # bs\<^esup>)" using polypoly'_poly[OF polynate_norm[unfolded isnpoly_def], symmetric, of bs p] unfolding poly_nate_polypoly' by (auto intro: ext) @@ -1116,7 +1116,7 @@ qed lemma degree_polysub_samehead: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{field, division_ring_inverse_zero, ring_char_0})" and np: "isnpolyh p n0" and nq: "isnpolyh q n1" and h: "head p = head q" and d: "degree p = degree q" shows "degree (p -\<^sub>p q) < degree p \ (p -\<^sub>p q = 0\<^sub>p)" @@ -1226,7 +1226,7 @@ done lemma polymul_head_polyeq: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{field, division_ring_inverse_zero, ring_char_0})" shows "\isnpolyh p n0; isnpolyh q n1 ; p \ 0\<^sub>p ; q \ 0\<^sub>p \ \ head (p *\<^sub>p q) = head p *\<^sub>p head q" proof (induct p q arbitrary: n0 n1 rule: polymul.induct) case (2 a b c' n' p' n0 n1) @@ -1300,7 +1300,7 @@ by (induct p arbitrary: n0 rule: polyneg.induct, auto) lemma degree_polymul: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{field, division_ring_inverse_zero, ring_char_0})" and np: "isnpolyh p n0" and nq: "isnpolyh q n1" shows "degree (p *\<^sub>p q) \ degree p + degree q" using polymul_degreen[OF np nq, where m="0"] degree_eq_degreen0 by simp @@ -1344,7 +1344,7 @@ qed lemma polydivide_aux_properties: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{field, division_ring_inverse_zero, ring_char_0})" and np: "isnpolyh p n0" and ns: "isnpolyh s n1" and ap: "head p = a" and ndp: "degree p = n" and pnz: "p \ 0\<^sub>p" shows "polydivide_aux_dom (a,n,p,k,s) \ @@ -1415,19 +1415,19 @@ from polyadd_normh[OF polymul_normh[OF np polyadd_normh[OF polymul_normh[OF nakk' nxdn] nq]] nr'] have nqr': "isnpolyh (p *\<^sub>p (?akk' *\<^sub>p ?xdn +\<^sub>p q) +\<^sub>p r) 0" by simp - from asp have "\ (bs:: 'a::{ring_char_0,division_by_zero,field} list). Ipoly bs (a^\<^sub>p (k' - k) *\<^sub>p (s -\<^sub>p ?p')) = + from asp have "\ (bs:: 'a::{field, division_ring_inverse_zero, ring_char_0} list). Ipoly bs (a^\<^sub>p (k' - k) *\<^sub>p (s -\<^sub>p ?p')) = Ipoly bs (p *\<^sub>p q +\<^sub>p r)" by simp - hence " \(bs:: 'a::{ring_char_0,division_by_zero,field} list). Ipoly bs (a^\<^sub>p (k' - k)*\<^sub>p s) = + hence " \(bs:: 'a::{field, division_ring_inverse_zero, ring_char_0} list). Ipoly bs (a^\<^sub>p (k' - k)*\<^sub>p s) = Ipoly bs (a^\<^sub>p (k' - k)) * Ipoly bs ?p' + Ipoly bs p * Ipoly bs q + Ipoly bs r" - by (simp add: ring_simps) - hence " \(bs:: 'a::{ring_char_0,division_by_zero,field} list). Ipoly bs (a ^\<^sub>p (k' - k) *\<^sub>p s) = + by (simp add: field_simps) + hence " \(bs:: 'a::{field, division_ring_inverse_zero, ring_char_0} list). Ipoly bs (a ^\<^sub>p (k' - k) *\<^sub>p s) = Ipoly bs (a^\<^sub>p (k' - k)) * Ipoly bs (funpow (degree s - n) shift1 1\<^sub>p *\<^sub>p p) + Ipoly bs p * Ipoly bs q + Ipoly bs r" by (auto simp only: funpow_shift1_1) - hence "\(bs:: 'a::{ring_char_0,division_by_zero,field} list). Ipoly bs (a ^\<^sub>p (k' - k) *\<^sub>p s) = + hence "\(bs:: 'a::{field, division_ring_inverse_zero, ring_char_0} list). Ipoly bs (a ^\<^sub>p (k' - k) *\<^sub>p s) = Ipoly bs p * (Ipoly bs (a^\<^sub>p (k' - k)) * Ipoly bs (funpow (degree s - n) shift1 1\<^sub>p) - + Ipoly bs q) + Ipoly bs r" by (simp add: ring_simps) - hence "\(bs:: 'a::{ring_char_0,division_by_zero,field} list). Ipoly bs (a ^\<^sub>p (k' - k) *\<^sub>p s) = + + Ipoly bs q) + Ipoly bs r" by (simp add: field_simps) + hence "\(bs:: 'a::{field, division_ring_inverse_zero, ring_char_0} list). Ipoly bs (a ^\<^sub>p (k' - k) *\<^sub>p s) = Ipoly bs (p *\<^sub>p ((a^\<^sub>p (k' - k)) *\<^sub>p (funpow (degree s - n) shift1 1\<^sub>p) +\<^sub>p q) +\<^sub>p r)" by simp with isnpolyh_unique[OF nakks' nqr'] have "a ^\<^sub>p (k' - k) *\<^sub>p s = @@ -1444,9 +1444,9 @@ apply (simp) by (rule polydivide_aux_real_domintros, simp_all) have dom: ?dths apply (rule polydivide_aux_real_domintros) using ba dn' domsp by simp_all - from spz isnpolyh_unique[OF polysub_normh[OF ns np'], where q="0\<^sub>p", symmetric, where ?'a = "'a::{ring_char_0,division_by_zero,field}"] - have " \(bs:: 'a::{ring_char_0,division_by_zero,field} list). Ipoly bs s = Ipoly bs ?p'" by simp - hence "\(bs:: 'a::{ring_char_0,division_by_zero,field} list). Ipoly bs s = Ipoly bs (?xdn *\<^sub>p p)" using np nxdn apply simp + from spz isnpolyh_unique[OF polysub_normh[OF ns np'], where q="0\<^sub>p", symmetric, where ?'a = "'a::{field, division_ring_inverse_zero, ring_char_0}"] + have " \(bs:: 'a::{field, division_ring_inverse_zero, ring_char_0} list). Ipoly bs s = Ipoly bs ?p'" by simp + hence "\(bs:: 'a::{field, division_ring_inverse_zero, ring_char_0} list). Ipoly bs s = Ipoly bs (?xdn *\<^sub>p p)" using np nxdn apply simp by (simp only: funpow_shift1_1) simp hence sp': "s = ?xdn *\<^sub>p p" using isnpolyh_unique[OF ns polymul_normh[OF nxdn np]] by blast {assume h1: "polydivide_aux (a,n,p,k,s) = (k',r)" @@ -1501,17 +1501,17 @@ and dr: "degree r = 0 \ degree r < degree p" and qr: "a ^\<^sub>p (k' - Suc k) *\<^sub>p ((a *\<^sub>p s) -\<^sub>p (?b *\<^sub>p ?p')) = p *\<^sub>p q +\<^sub>p r" by auto from kk' have kk'':"Suc (k' - Suc k) = k' - k" by arith - {fix bs:: "'a::{ring_char_0,division_by_zero,field} list" + {fix bs:: "'a::{field, division_ring_inverse_zero, ring_char_0} list" from qr isnpolyh_unique[OF polypow_normh[OF head_isnpolyh[OF np], where k="k' - Suc k", simplified ap] nasbp', symmetric] have "Ipoly bs (a ^\<^sub>p (k' - Suc k) *\<^sub>p ((a *\<^sub>p s) -\<^sub>p (?b *\<^sub>p ?p'))) = Ipoly bs (p *\<^sub>p q +\<^sub>p r)" by simp hence "Ipoly bs a ^ (Suc (k' - Suc k)) * Ipoly bs s = Ipoly bs p * Ipoly bs q + Ipoly bs a ^ (k' - Suc k) * Ipoly bs ?b * Ipoly bs ?p' + Ipoly bs r" - by (simp add: ring_simps power_Suc) + by (simp add: field_simps power_Suc) hence "Ipoly bs a ^ (k' - k) * Ipoly bs s = Ipoly bs p * Ipoly bs q + Ipoly bs a ^ (k' - Suc k) * Ipoly bs ?b * Ipoly bs ?xdn * Ipoly bs p + Ipoly bs r" by (simp add:kk'' funpow_shift1_1[where n="degree s - n" and p="p"]) hence "Ipoly bs (a ^\<^sub>p (k' - k) *\<^sub>p s) = Ipoly bs p * (Ipoly bs q + Ipoly bs a ^ (k' - Suc k) * Ipoly bs ?b * Ipoly bs ?xdn) + Ipoly bs r" - by (simp add: ring_simps)} - hence ieq:"\(bs :: 'a::{ring_char_0,division_by_zero,field} list). Ipoly bs (a ^\<^sub>p (k' - k) *\<^sub>p s) = + by (simp add: field_simps)} + hence ieq:"\(bs :: 'a::{field, division_ring_inverse_zero, ring_char_0} list). Ipoly bs (a ^\<^sub>p (k' - k) *\<^sub>p s) = Ipoly bs (p *\<^sub>p (q +\<^sub>p (a ^\<^sub>p (k' - Suc k) *\<^sub>p ?b *\<^sub>p ?xdn)) +\<^sub>p r)" by auto let ?q = "q +\<^sub>p (a ^\<^sub>p (k' - Suc k) *\<^sub>p ?b *\<^sub>p ?xdn)" from polyadd_normh[OF nq polymul_normh[OF polymul_normh[OF polypow_normh[OF head_isnpolyh[OF np], where k="k' - Suc k"] head_isnpolyh[OF ns], simplified ap ] nxdn]] @@ -1532,17 +1532,17 @@ apply (simp) by (rule polydivide_aux_real_domintros, simp_all) have dom: ?dths using sz ba dn' domsp by - (rule polydivide_aux_real_domintros, simp_all) - {fix bs :: "'a::{ring_char_0,division_by_zero,field} list" + {fix bs :: "'a::{field, division_ring_inverse_zero, ring_char_0} list" from isnpolyh_unique[OF nth, where ?'a="'a" and q="0\<^sub>p",simplified,symmetric] spz have "Ipoly bs (a*\<^sub>p s) = Ipoly bs ?b * Ipoly bs ?p'" by simp hence "Ipoly bs (a*\<^sub>p s) = Ipoly bs (?b *\<^sub>p ?xdn) * Ipoly bs p" by (simp add: funpow_shift1_1[where n="degree s - n" and p="p"]) hence "Ipoly bs (a*\<^sub>p s) = Ipoly bs (p *\<^sub>p (?b *\<^sub>p ?xdn))" by simp } - hence hth: "\ (bs:: 'a::{ring_char_0,division_by_zero,field} list). Ipoly bs (a*\<^sub>p s) = Ipoly bs (p *\<^sub>p (?b *\<^sub>p ?xdn))" .. + hence hth: "\ (bs:: 'a::{field, division_ring_inverse_zero, ring_char_0} list). Ipoly bs (a*\<^sub>p s) = Ipoly bs (p *\<^sub>p (?b *\<^sub>p ?xdn))" .. from hth have asq: "a *\<^sub>p s = p *\<^sub>p (?b *\<^sub>p ?xdn)" - using isnpolyh_unique[where ?'a = "'a::{ring_char_0,division_by_zero,field}", OF polymul_normh[OF head_isnpolyh[OF np] ns] + using isnpolyh_unique[where ?'a = "'a::{field, division_ring_inverse_zero, ring_char_0}", OF polymul_normh[OF head_isnpolyh[OF np] ns] polymul_normh[OF np polymul_normh[OF head_isnpolyh[OF ns] nxdn]], simplified ap] by simp {assume h1: "polydivide_aux (a,n,p,k,s) = (k', r)" @@ -1566,7 +1566,7 @@ qed lemma polydivide_properties: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{field, division_ring_inverse_zero, ring_char_0})" and np: "isnpolyh p n0" and ns: "isnpolyh s n1" and pnz: "p \ 0\<^sub>p" shows "(\ k r. polydivide s p = (k,r) \ (\nr. isnpolyh r nr) \ (degree r = 0 \ degree r < degree p) \ (\q n1. isnpolyh q n1 \ ((polypow k (head p)) *\<^sub>p s = p *\<^sub>p q +\<^sub>p r)))" @@ -1698,11 +1698,11 @@ definition "swapnorm n m t = polynate (swap n m t)" lemma swapnorm: assumes nbs: "n < length bs" and mbs: "m < length bs" - shows "((Ipoly bs (swapnorm n m t) :: 'a\{ring_char_0,division_by_zero,field})) = Ipoly ((bs[n:= bs!m])[m:= bs!n]) t" + shows "((Ipoly bs (swapnorm n m t) :: 'a\{field, division_ring_inverse_zero, ring_char_0})) = Ipoly ((bs[n:= bs!m])[m:= bs!n]) t" using swap[OF prems] swapnorm_def by simp lemma swapnorm_isnpoly[simp]: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{field, division_ring_inverse_zero, ring_char_0})" shows "isnpoly (swapnorm n m p)" unfolding swapnorm_def by simp diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Decision_Procs/ex/Dense_Linear_Order_Ex.thy --- a/src/HOL/Decision_Procs/ex/Dense_Linear_Order_Ex.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Decision_Procs/ex/Dense_Linear_Order_Ex.thy Mon Apr 26 13:43:31 2010 +0200 @@ -7,147 +7,147 @@ begin lemma - "\(y::'a::{linordered_field,number_ring, division_by_zero}) <2. x + 3* y < 0 \ x - y >0" + "\(y::'a::{linordered_field, division_ring_inverse_zero, number_ring}) <2. x + 3* y < 0 \ x - y >0" by ferrack -lemma "~ (ALL x (y::'a::{linordered_field,number_ring, division_by_zero}). x < y --> 10*x < 11*y)" +lemma "~ (ALL x (y::'a::{linordered_field, division_ring_inverse_zero, number_ring}). x < y --> 10*x < 11*y)" by ferrack -lemma "ALL (x::'a::{linordered_field,number_ring, division_by_zero}) y. x < y --> (10*(x + 5*y + -1) < 60*y)" +lemma "ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y. x < y --> (10*(x + 5*y + -1) < 60*y)" by ferrack -lemma "EX (x::'a::{linordered_field,number_ring, division_by_zero}) y. x ~= y --> x < y" +lemma "EX (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y. x ~= y --> x < y" by ferrack -lemma "EX (x::'a::{linordered_field,number_ring, division_by_zero}) y. (x ~= y & 10*x ~= 9*y & 10*x < y) --> x < y" +lemma "EX (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y. (x ~= y & 10*x ~= 9*y & 10*x < y) --> x < y" by ferrack -lemma "ALL (x::'a::{linordered_field,number_ring, division_by_zero}) y. (x ~= y & 5*x <= y) --> 500*x <= 100*y" +lemma "ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y. (x ~= y & 5*x <= y) --> 500*x <= 100*y" by ferrack -lemma "ALL (x::'a::{linordered_field,number_ring, division_by_zero}). (EX (y::'a::{linordered_field,number_ring, division_by_zero}). 4*x + 3*y <= 0 & 4*x + 3*y >= -1)" +lemma "ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}). (EX (y::'a::{linordered_field, division_ring_inverse_zero, number_ring}). 4*x + 3*y <= 0 & 4*x + 3*y >= -1)" by ferrack -lemma "ALL (x::'a::{linordered_field,number_ring, division_by_zero}) < 0. (EX (y::'a::{linordered_field,number_ring, division_by_zero}) > 0. 7*x + y > 0 & x - y <= 9)" +lemma "ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) < 0. (EX (y::'a::{linordered_field, division_ring_inverse_zero, number_ring}) > 0. 7*x + y > 0 & x - y <= 9)" by ferrack -lemma "EX (x::'a::{linordered_field,number_ring, division_by_zero}). (0 < x & x < 1) --> (ALL y > 1. x + y ~= 1)" +lemma "EX (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}). (0 < x & x < 1) --> (ALL y > 1. x + y ~= 1)" by ferrack -lemma "EX x. (ALL (y::'a::{linordered_field,number_ring, division_by_zero}). y < 2 --> 2*(y - x) \ 0 )" +lemma "EX x. (ALL (y::'a::{linordered_field, division_ring_inverse_zero, number_ring}). y < 2 --> 2*(y - x) \ 0 )" by ferrack -lemma "ALL (x::'a::{linordered_field,number_ring, division_by_zero}). x < 10 | x > 20 | (EX y. y>= 0 & y <= 10 & x+y = 20)" +lemma "ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}). x < 10 | x > 20 | (EX y. y>= 0 & y <= 10 & x+y = 20)" by ferrack -lemma "ALL (x::'a::{linordered_field,number_ring, division_by_zero}) y z. x + y < z --> y >= z --> x < 0" +lemma "ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y z. x + y < z --> y >= z --> x < 0" by ferrack -lemma "EX (x::'a::{linordered_field,number_ring, division_by_zero}) y z. x + 7*y < 5* z & 5*y >= 7*z & x < 0" +lemma "EX (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y z. x + 7*y < 5* z & 5*y >= 7*z & x < 0" by ferrack -lemma "ALL (x::'a::{linordered_field,number_ring, division_by_zero}) y z. abs (x + y) <= z --> (abs z = z)" +lemma "ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y z. abs (x + y) <= z --> (abs z = z)" by ferrack -lemma "EX (x::'a::{linordered_field,number_ring, division_by_zero}) y z. x + 7*y - 5* z < 0 & 5*y + 7*z + 3*x < 0" +lemma "EX (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y z. x + 7*y - 5* z < 0 & 5*y + 7*z + 3*x < 0" by ferrack -lemma "ALL (x::'a::{linordered_field,number_ring, division_by_zero}) y z. (abs (5*x+3*y+z) <= 5*x+3*y+z & abs (5*x+3*y+z) >= - (5*x+3*y+z)) | (abs (5*x+3*y+z) >= 5*x+3*y+z & abs (5*x+3*y+z) <= - (5*x+3*y+z))" +lemma "ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y z. (abs (5*x+3*y+z) <= 5*x+3*y+z & abs (5*x+3*y+z) >= - (5*x+3*y+z)) | (abs (5*x+3*y+z) >= 5*x+3*y+z & abs (5*x+3*y+z) <= - (5*x+3*y+z))" by ferrack -lemma "ALL (x::'a::{linordered_field,number_ring, division_by_zero}) y. x < y --> (EX z>0. x+z = y)" +lemma "ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y. x < y --> (EX z>0. x+z = y)" by ferrack -lemma "ALL (x::'a::{linordered_field,number_ring, division_by_zero}) y. x < y --> (EX z>0. x+z = y)" +lemma "ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y. x < y --> (EX z>0. x+z = y)" by ferrack -lemma "ALL (x::'a::{linordered_field,number_ring, division_by_zero}) y. (EX z>0. abs (x - y) <= z )" +lemma "ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y. (EX z>0. abs (x - y) <= z )" by ferrack -lemma "EX (x::'a::{linordered_field,number_ring, division_by_zero}) y. (ALL z<0. (z < x --> z <= y) & (z > y --> z >= x))" +lemma "EX (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y. (ALL z<0. (z < x --> z <= y) & (z > y --> z >= x))" by ferrack -lemma "EX (x::'a::{linordered_field,number_ring, division_by_zero}) y. (ALL z>=0. abs (3*x+7*y) <= 2*z + 1)" +lemma "EX (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y. (ALL z>=0. abs (3*x+7*y) <= 2*z + 1)" by ferrack -lemma "EX (x::'a::{linordered_field,number_ring, division_by_zero}) y. (ALL z<0. (z < x --> z <= y) & (z > y --> z >= x))" +lemma "EX (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y. (ALL z<0. (z < x --> z <= y) & (z > y --> z >= x))" by ferrack -lemma "EX (x::'a::{linordered_field,number_ring, division_by_zero})>0. (ALL y. (EX z. 13* abs z \ abs (12*y - x) & 5*x - 3*(abs y) <= 7*z))" +lemma "EX (x::'a::{linordered_field, division_ring_inverse_zero, number_ring})>0. (ALL y. (EX z. 13* abs z \ abs (12*y - x) & 5*x - 3*(abs y) <= 7*z))" by ferrack -lemma "EX (x::'a::{linordered_field,number_ring, division_by_zero}). abs (4*x + 17) < 4 & (ALL y . abs (x*34 - 34*y - 9) \ 0 \ (EX z. 5*x - 3*abs y <= 7*z))" +lemma "EX (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}). abs (4*x + 17) < 4 & (ALL y . abs (x*34 - 34*y - 9) \ 0 \ (EX z. 5*x - 3*abs y <= 7*z))" by ferrack -lemma "ALL (x::'a::{linordered_field,number_ring, division_by_zero}). (EX y > abs (23*x - 9). (ALL z > abs (3*y - 19* abs x). x+z > 2*y))" +lemma "ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}). (EX y > abs (23*x - 9). (ALL z > abs (3*y - 19* abs x). x+z > 2*y))" by ferrack -lemma "ALL (x::'a::{linordered_field,number_ring, division_by_zero}). (EX y< abs (3*x - 1). (ALL z >= (3*abs x - 1). abs (12*x - 13*y + 19*z) > abs (23*x) ))" +lemma "ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}). (EX y< abs (3*x - 1). (ALL z >= (3*abs x - 1). abs (12*x - 13*y + 19*z) > abs (23*x) ))" by ferrack -lemma "EX (x::'a::{linordered_field,number_ring, division_by_zero}). abs x < 100 & (ALL y > x. (EX z<2*y - x. 5*x - 3*y <= 7*z))" +lemma "EX (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}). abs x < 100 & (ALL y > x. (EX z<2*y - x. 5*x - 3*y <= 7*z))" by ferrack -lemma "ALL (x::'a::{linordered_field,number_ring, division_by_zero}) y z w. 7*x<3*y --> 5*y < 7*z --> z < 2*w --> 7*(2*w-x) > 2*y" +lemma "ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y z w. 7*x<3*y --> 5*y < 7*z --> z < 2*w --> 7*(2*w-x) > 2*y" by ferrack -lemma "EX (x::'a::{linordered_field,number_ring, division_by_zero}) y z w. 5*x + 3*z - 17*w + abs (y - 8*x + z) <= 89" +lemma "EX (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y z w. 5*x + 3*z - 17*w + abs (y - 8*x + z) <= 89" by ferrack -lemma "EX (x::'a::{linordered_field,number_ring, division_by_zero}) y z w. 5*x + 3*z - 17*w + 7* (y - 8*x + z) <= max y (7*z - x + w)" +lemma "EX (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y z w. 5*x + 3*z - 17*w + 7* (y - 8*x + z) <= max y (7*z - x + w)" by ferrack -lemma "EX (x::'a::{linordered_field,number_ring, division_by_zero}) y z w. min (5*x + 3*z) (17*w) + 5* abs (y - 8*x + z) <= max y (7*z - x + w)" +lemma "EX (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y z w. min (5*x + 3*z) (17*w) + 5* abs (y - 8*x + z) <= max y (7*z - x + w)" by ferrack -lemma "ALL (x::'a::{linordered_field,number_ring, division_by_zero}) y z. (EX w >= (x+y+z). w <= abs x + abs y + abs z)" +lemma "ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y z. (EX w >= (x+y+z). w <= abs x + abs y + abs z)" by ferrack -lemma "~(ALL (x::'a::{linordered_field,number_ring, division_by_zero}). (EX y z w. 3* x + z*4 = 3*y & x + y < z & x> w & 3*x < w + y))" +lemma "~(ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}). (EX y z w. 3* x + z*4 = 3*y & x + y < z & x> w & 3*x < w + y))" by ferrack -lemma "ALL (x::'a::{linordered_field,number_ring, division_by_zero}) y. (EX z w. abs (x-y) = (z-w) & z*1234 < 233*x & w ~= y)" +lemma "ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y. (EX z w. abs (x-y) = (z-w) & z*1234 < 233*x & w ~= y)" by ferrack -lemma "ALL (x::'a::{linordered_field,number_ring, division_by_zero}). (EX y z w. min (5*x + 3*z) (17*w) + 5* abs (y - 8*x + z) <= max y (7*z - x + w))" +lemma "ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}). (EX y z w. min (5*x + 3*z) (17*w) + 5* abs (y - 8*x + z) <= max y (7*z - x + w))" by ferrack -lemma "EX (x::'a::{linordered_field,number_ring, division_by_zero}) y z. (ALL w >= abs (x+y+z). w >= abs x + abs y + abs z)" +lemma "EX (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y z. (ALL w >= abs (x+y+z). w >= abs x + abs y + abs z)" by ferrack -lemma "EX z. (ALL (x::'a::{linordered_field,number_ring, division_by_zero}) y. (EX w >= (x+y+z). w <= abs x + abs y + abs z))" +lemma "EX z. (ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y. (EX w >= (x+y+z). w <= abs x + abs y + abs z))" by ferrack -lemma "EX z. (ALL (x::'a::{linordered_field,number_ring, division_by_zero}) < abs z. (EX y w. x< y & x < z & x> w & 3*x < w + y))" +lemma "EX z. (ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) < abs z. (EX y w. x< y & x < z & x> w & 3*x < w + y))" by ferrack -lemma "ALL (x::'a::{linordered_field,number_ring, division_by_zero}) y. (EX z. (ALL w. abs (x-y) = abs (z-w) --> z < x & w ~= y))" +lemma "ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y. (EX z. (ALL w. abs (x-y) = abs (z-w) --> z < x & w ~= y))" by ferrack -lemma "EX y. (ALL (x::'a::{linordered_field,number_ring, division_by_zero}). (EX z w. min (5*x + 3*z) (17*w) + 5* abs (y - 8*x + z) <= max y (7*z - x + w)))" +lemma "EX y. (ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}). (EX z w. min (5*x + 3*z) (17*w) + 5* abs (y - 8*x + z) <= max y (7*z - x + w)))" by ferrack -lemma "EX (x::'a::{linordered_field,number_ring, division_by_zero}) z. (ALL w >= 13*x - 4*z. (EX y. w >= abs x + abs y + z))" +lemma "EX (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) z. (ALL w >= 13*x - 4*z. (EX y. w >= abs x + abs y + z))" by ferrack -lemma "EX (x::'a::{linordered_field,number_ring, division_by_zero}). (ALL y < x. (EX z > (x+y). +lemma "EX (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}). (ALL y < x. (EX z > (x+y). (ALL w. 5*w + 10*x - z >= y --> w + 7*x + 3*z >= 2*y)))" by ferrack -lemma "EX (x::'a::{linordered_field,number_ring, division_by_zero}). (ALL y. (EX z > y. +lemma "EX (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}). (ALL y. (EX z > y. (ALL w . w < 13 --> w + 10*x - z >= y --> 5*w + 7*x + 13*z >= 2*y)))" by ferrack -lemma "EX (x::'a::{linordered_field,number_ring, division_by_zero}) y z w. min (5*x + 3*z) (17*w) + 5* abs (y - 8*x + z) <= max y (7*z - x + w)" +lemma "EX (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}) y z w. min (5*x + 3*z) (17*w) + 5* abs (y - 8*x + z) <= max y (7*z - x + w)" by ferrack -lemma "ALL (x::'a::{linordered_field,number_ring, division_by_zero}). (EX y. (ALL z>19. y <= x + z & (EX w. abs (y - x) < w)))" +lemma "ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}). (EX y. (ALL z>19. y <= x + z & (EX w. abs (y - x) < w)))" by ferrack -lemma "ALL (x::'a::{linordered_field,number_ring, division_by_zero}). (EX y. (ALL z>19. y <= x + z & (EX w. abs (x + z) < w - y)))" +lemma "ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}). (EX y. (ALL z>19. y <= x + z & (EX w. abs (x + z) < w - y)))" by ferrack -lemma "ALL (x::'a::{linordered_field,number_ring, division_by_zero}). (EX y. abs y ~= abs x & (ALL z> max x y. (EX w. w ~= y & w ~= z & 3*w - z >= x + y)))" +lemma "ALL (x::'a::{linordered_field, division_ring_inverse_zero, number_ring}). (EX y. abs y ~= abs x & (ALL z> max x y. (EX w. w ~= y & w ~= z & 3*w - z >= x + y)))" by ferrack end diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Fields.thy --- a/src/HOL/Fields.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Fields.thy Mon Apr 26 13:43:31 2010 +0200 @@ -13,20 +13,6 @@ imports Rings begin -text{* Lemmas @{text field_simps} multiply with denominators in (in)equations -if they can be proved to be non-zero (for equations) or positive/negative -(for inequations). Can be too aggressive and is therefore separate from the -more benign @{text algebra_simps}. *} - -ML {* -structure Field_Simps = Named_Thms( - val name = "field_simps" - val description = "algebra simplification rules for fields" -) -*} - -setup Field_Simps.setup - class field = comm_ring_1 + inverse + assumes field_inverse: "a \ 0 \ inverse a * a = 1" assumes field_divide_inverse: "a / b = a * inverse b" @@ -110,51 +96,45 @@ "\b \ 0; c \ 0\ \ (a * c) / (c * b) = a / b" using nonzero_mult_divide_mult_cancel_right [of b c a] by (simp add: mult_ac) -lemma add_divide_eq_iff: +lemma add_divide_eq_iff [field_simps]: "z \ 0 \ x + y / z = (z * x + y) / z" by (simp add: add_divide_distrib) -lemma divide_add_eq_iff: +lemma divide_add_eq_iff [field_simps]: "z \ 0 \ x / z + y = (x + z * y) / z" by (simp add: add_divide_distrib) -lemma diff_divide_eq_iff: +lemma diff_divide_eq_iff [field_simps]: "z \ 0 \ x - y / z = (z * x - y) / z" by (simp add: diff_divide_distrib) -lemma divide_diff_eq_iff: +lemma divide_diff_eq_iff [field_simps]: "z \ 0 \ x / z - y = (x - z * y) / z" by (simp add: diff_divide_distrib) -lemmas field_eq_simps [field_simps, no_atp] = algebra_simps - (* pull / out*) - add_divide_eq_iff divide_add_eq_iff - diff_divide_eq_iff divide_diff_eq_iff - (* multiply eqn *) - nonzero_eq_divide_eq nonzero_divide_eq_eq - times_divide_eq_left times_divide_eq_right - -text{*An example:*} -lemma "\a\b; c\d; e\f\ \ ((a-b)*(c-d)*(e-f))/((c-d)*(e-f)*(a-b)) = 1" -apply(subgoal_tac "(c-d)*(e-f)*(a-b) \ 0") - apply(simp add:field_eq_simps) -apply(simp) -done - lemma diff_frac_eq: "y \ 0 \ z \ 0 \ x / y - w / z = (x * z - w * y) / (y * z)" - by (simp add: field_eq_simps times_divide_eq) + by (simp add: field_simps) lemma frac_eq_eq: "y \ 0 \ z \ 0 \ (x / y = w / z) = (x * z = w * y)" - by (simp add: field_eq_simps times_divide_eq) + by (simp add: field_simps) + +end + +class field_inverse_zero = field + + assumes field_inverse_zero: "inverse 0 = 0" +begin + +subclass division_ring_inverse_zero proof +qed (fact field_inverse_zero) end text{*This version builds in division by zero while also re-orienting the right-hand side.*} lemma inverse_mult_distrib [simp]: - "inverse(a*b) = inverse(a) * inverse(b::'a::{field,division_by_zero})" + "inverse(a*b) = inverse(a) * inverse(b::'a::{field,division_ring_inverse_zero})" proof cases assume "a \ 0 & b \ 0" thus ?thesis by (simp add: nonzero_inverse_mult_distrib mult_ac) @@ -164,7 +144,7 @@ qed lemma inverse_divide [simp]: - "inverse (a/b) = b / (a::'a::{field,division_by_zero})" + "inverse (a/b) = b / (a::'a::{field,division_ring_inverse_zero})" by (simp add: divide_inverse mult_commute) @@ -175,85 +155,85 @@ because the latter are covered by a simproc. *} lemma mult_divide_mult_cancel_left: - "c\0 ==> (c*a) / (c*b) = a / (b::'a::{field,division_by_zero})" + "c\0 ==> (c*a) / (c*b) = a / (b::'a::{field,division_ring_inverse_zero})" apply (cases "b = 0") apply simp_all done lemma mult_divide_mult_cancel_right: - "c\0 ==> (a*c) / (b*c) = a / (b::'a::{field,division_by_zero})" + "c\0 ==> (a*c) / (b*c) = a / (b::'a::{field,division_ring_inverse_zero})" apply (cases "b = 0") apply simp_all done lemma divide_divide_eq_right [simp,no_atp]: - "a / (b/c) = (a*c) / (b::'a::{field,division_by_zero})" + "a / (b/c) = (a*c) / (b::'a::{field,division_ring_inverse_zero})" by (simp add: divide_inverse mult_ac) lemma divide_divide_eq_left [simp,no_atp]: - "(a / b) / (c::'a::{field,division_by_zero}) = a / (b*c)" + "(a / b) / (c::'a::{field,division_ring_inverse_zero}) = a / (b*c)" by (simp add: divide_inverse mult_assoc) text {*Special Cancellation Simprules for Division*} lemma mult_divide_mult_cancel_left_if[simp,no_atp]: -fixes c :: "'a :: {field,division_by_zero}" +fixes c :: "'a :: {field,division_ring_inverse_zero}" shows "(c*a) / (c*b) = (if c=0 then 0 else a/b)" by (simp add: mult_divide_mult_cancel_left) text {* Division and Unary Minus *} -lemma minus_divide_right: "- (a/b) = a / -(b::'a::{field,division_by_zero})" +lemma minus_divide_right: "- (a/b) = a / -(b::'a::{field,division_ring_inverse_zero})" by (simp add: divide_inverse) lemma divide_minus_right [simp, no_atp]: - "a / -(b::'a::{field,division_by_zero}) = -(a / b)" + "a / -(b::'a::{field,division_ring_inverse_zero}) = -(a / b)" by (simp add: divide_inverse) lemma minus_divide_divide: - "(-a)/(-b) = a / (b::'a::{field,division_by_zero})" + "(-a)/(-b) = a / (b::'a::{field,division_ring_inverse_zero})" apply (cases "b=0", simp) apply (simp add: nonzero_minus_divide_divide) done lemma eq_divide_eq: - "((a::'a::{field,division_by_zero}) = b/c) = (if c\0 then a*c = b else a=0)" + "((a::'a::{field,division_ring_inverse_zero}) = b/c) = (if c\0 then a*c = b else a=0)" by (simp add: nonzero_eq_divide_eq) lemma divide_eq_eq: - "(b/c = (a::'a::{field,division_by_zero})) = (if c\0 then b = a*c else a=0)" + "(b/c = (a::'a::{field,division_ring_inverse_zero})) = (if c\0 then b = a*c else a=0)" by (force simp add: nonzero_divide_eq_eq) lemma inverse_eq_1_iff [simp]: - "(inverse x = 1) = (x = (1::'a::{field,division_by_zero}))" + "(inverse x = 1) = (x = (1::'a::{field,division_ring_inverse_zero}))" by (insert inverse_eq_iff_eq [of x 1], simp) lemma divide_eq_0_iff [simp,no_atp]: - "(a/b = 0) = (a=0 | b=(0::'a::{field,division_by_zero}))" + "(a/b = 0) = (a=0 | b=(0::'a::{field,division_ring_inverse_zero}))" by (simp add: divide_inverse) lemma divide_cancel_right [simp,no_atp]: - "(a/c = b/c) = (c = 0 | a = (b::'a::{field,division_by_zero}))" + "(a/c = b/c) = (c = 0 | a = (b::'a::{field,division_ring_inverse_zero}))" apply (cases "c=0", simp) apply (simp add: divide_inverse) done lemma divide_cancel_left [simp,no_atp]: - "(c/a = c/b) = (c = 0 | a = (b::'a::{field,division_by_zero}))" + "(c/a = c/b) = (c = 0 | a = (b::'a::{field,division_ring_inverse_zero}))" apply (cases "c=0", simp) apply (simp add: divide_inverse) done lemma divide_eq_1_iff [simp,no_atp]: - "(a/b = 1) = (b \ 0 & a = (b::'a::{field,division_by_zero}))" + "(a/b = 1) = (b \ 0 & a = (b::'a::{field,division_ring_inverse_zero}))" apply (cases "b=0", simp) apply (simp add: right_inverse_eq) done lemma one_eq_divide_iff [simp,no_atp]: - "(1 = a/b) = (b \ 0 & a = (b::'a::{field,division_by_zero}))" + "(1 = a/b) = (b \ 0 & a = (b::'a::{field,division_ring_inverse_zero}))" by (simp add: eq_commute [of 1]) @@ -405,7 +385,7 @@ "a < 0 \ b < 0 \ inverse a \ inverse b \ b \ a" by (blast intro: le_imp_inverse_le_neg dest: inverse_le_imp_le_neg) -lemma pos_le_divide_eq: "0 < c ==> (a \ b/c) = (a*c \ b)" +lemma pos_le_divide_eq [field_simps]: "0 < c ==> (a \ b/c) = (a*c \ b)" proof - assume less: "0 b/c) = (a*c \ (b/c)*c)" @@ -415,7 +395,7 @@ finally show ?thesis . qed -lemma neg_le_divide_eq: "c < 0 ==> (a \ b/c) = (b \ a*c)" +lemma neg_le_divide_eq [field_simps]: "c < 0 ==> (a \ b/c) = (b \ a*c)" proof - assume less: "c<0" hence "(a \ b/c) = ((b/c)*c \ a*c)" @@ -425,7 +405,7 @@ finally show ?thesis . qed -lemma pos_less_divide_eq: +lemma pos_less_divide_eq [field_simps]: "0 < c ==> (a < b/c) = (a*c < b)" proof - assume less: "0 (a < b/c) = (b < a*c)" proof - assume less: "c<0" @@ -447,7 +427,7 @@ finally show ?thesis . qed -lemma pos_divide_less_eq: +lemma pos_divide_less_eq [field_simps]: "0 < c ==> (b/c < a) = (b < a*c)" proof - assume less: "0 (b/c < a) = (a*c < b)" proof - assume less: "c<0" @@ -469,7 +449,7 @@ finally show ?thesis . qed -lemma pos_divide_le_eq: "0 < c ==> (b/c \ a) = (b \ a*c)" +lemma pos_divide_le_eq [field_simps]: "0 < c ==> (b/c \ a) = (b \ a*c)" proof - assume less: "0 a) = ((b/c)*c \ a*c)" @@ -479,7 +459,7 @@ finally show ?thesis . qed -lemma neg_divide_le_eq: "c < 0 ==> (b/c \ a) = (a*c \ b)" +lemma neg_divide_le_eq [field_simps]: "c < 0 ==> (b/c \ a) = (a*c \ b)" proof - assume less: "c<0" hence "(b/c \ a) = (a*c \ (b/c)*c)" @@ -489,19 +469,15 @@ finally show ?thesis . qed -lemmas [field_simps, no_atp] = - (* multiply ineqn *) - pos_divide_less_eq neg_divide_less_eq - pos_less_divide_eq neg_less_divide_eq - pos_divide_le_eq neg_divide_le_eq - pos_le_divide_eq neg_le_divide_eq - text{* Lemmas @{text sign_simps} is a first attempt to automate proofs of positivity/negativity needed for @{text field_simps}. Have not added @{text sign_simps} to @{text field_simps} because the former can lead to case explosions. *} -lemmas sign_simps[no_atp] = group_simps +lemmas sign_simps [no_atp] = algebra_simps + zero_less_mult_iff mult_less_0_iff + +lemmas (in -) sign_simps [no_atp] = algebra_simps zero_less_mult_iff mult_less_0_iff (* Only works once linear arithmetic is installed: @@ -667,37 +643,46 @@ end +class linordered_field_inverse_zero = linordered_field + + assumes linordered_field_inverse_zero: "inverse 0 = 0" +begin + +subclass field_inverse_zero proof +qed (fact linordered_field_inverse_zero) + +end + lemma le_divide_eq: "(a \ b/c) = (if 0 < c then a*c \ b else if c < 0 then b \ a*c - else a \ (0::'a::{linordered_field,division_by_zero}))" + else a \ (0::'a::{linordered_field,division_ring_inverse_zero}))" apply (cases "c=0", simp) apply (force simp add: pos_le_divide_eq neg_le_divide_eq linorder_neq_iff) done lemma inverse_positive_iff_positive [simp]: - "(0 < inverse a) = (0 < (a::'a::{linordered_field,division_by_zero}))" + "(0 < inverse a) = (0 < (a::'a::{linordered_field,division_ring_inverse_zero}))" apply (cases "a = 0", simp) apply (blast intro: inverse_positive_imp_positive positive_imp_inverse_positive) done lemma inverse_negative_iff_negative [simp]: - "(inverse a < 0) = (a < (0::'a::{linordered_field,division_by_zero}))" + "(inverse a < 0) = (a < (0::'a::{linordered_field,division_ring_inverse_zero}))" apply (cases "a = 0", simp) apply (blast intro: inverse_negative_imp_negative negative_imp_inverse_negative) done lemma inverse_nonnegative_iff_nonnegative [simp]: - "(0 \ inverse a) = (0 \ (a::'a::{linordered_field,division_by_zero}))" + "(0 \ inverse a) = (0 \ (a::'a::{linordered_field,division_ring_inverse_zero}))" by (simp add: linorder_not_less [symmetric]) lemma inverse_nonpositive_iff_nonpositive [simp]: - "(inverse a \ 0) = (a \ (0::'a::{linordered_field,division_by_zero}))" + "(inverse a \ 0) = (a \ (0::'a::{linordered_field,division_ring_inverse_zero}))" by (simp add: linorder_not_less [symmetric]) lemma one_less_inverse_iff: - "(1 < inverse x) = (0 < x & x < (1::'a::{linordered_field,division_by_zero}))" + "(1 < inverse x) = (0 < x & x < (1::'a::{linordered_field,division_ring_inverse_zero}))" proof cases assume "0 < x" with inverse_less_iff_less [OF zero_less_one, of x] @@ -715,22 +700,22 @@ qed lemma one_le_inverse_iff: - "(1 \ inverse x) = (0 < x & x \ (1::'a::{linordered_field,division_by_zero}))" + "(1 \ inverse x) = (0 < x & x \ (1::'a::{linordered_field,division_ring_inverse_zero}))" by (force simp add: order_le_less one_less_inverse_iff) lemma inverse_less_1_iff: - "(inverse x < 1) = (x \ 0 | 1 < (x::'a::{linordered_field,division_by_zero}))" + "(inverse x < 1) = (x \ 0 | 1 < (x::'a::{linordered_field,division_ring_inverse_zero}))" by (simp add: linorder_not_le [symmetric] one_le_inverse_iff) lemma inverse_le_1_iff: - "(inverse x \ 1) = (x \ 0 | 1 \ (x::'a::{linordered_field,division_by_zero}))" + "(inverse x \ 1) = (x \ 0 | 1 \ (x::'a::{linordered_field,division_ring_inverse_zero}))" by (simp add: linorder_not_less [symmetric] one_less_inverse_iff) lemma divide_le_eq: "(b/c \ a) = (if 0 < c then b \ a*c else if c < 0 then a*c \ b - else 0 \ (a::'a::{linordered_field,division_by_zero}))" + else 0 \ (a::'a::{linordered_field,division_ring_inverse_zero}))" apply (cases "c=0", simp) apply (force simp add: pos_divide_le_eq neg_divide_le_eq linorder_neq_iff) done @@ -739,7 +724,7 @@ "(a < b/c) = (if 0 < c then a*c < b else if c < 0 then b < a*c - else a < (0::'a::{linordered_field,division_by_zero}))" + else a < (0::'a::{linordered_field,division_ring_inverse_zero}))" apply (cases "c=0", simp) apply (force simp add: pos_less_divide_eq neg_less_divide_eq linorder_neq_iff) done @@ -748,7 +733,7 @@ "(b/c < a) = (if 0 < c then b < a*c else if c < 0 then a*c < b - else 0 < (a::'a::{linordered_field,division_by_zero}))" + else 0 < (a::'a::{linordered_field,division_ring_inverse_zero}))" apply (cases "c=0", simp) apply (force simp add: pos_divide_less_eq neg_divide_less_eq linorder_neq_iff) done @@ -756,21 +741,21 @@ text {*Division and Signs*} lemma zero_less_divide_iff: - "((0::'a::{linordered_field,division_by_zero}) < a/b) = (0 < a & 0 < b | a < 0 & b < 0)" + "((0::'a::{linordered_field,division_ring_inverse_zero}) < a/b) = (0 < a & 0 < b | a < 0 & b < 0)" by (simp add: divide_inverse zero_less_mult_iff) lemma divide_less_0_iff: - "(a/b < (0::'a::{linordered_field,division_by_zero})) = + "(a/b < (0::'a::{linordered_field,division_ring_inverse_zero})) = (0 < a & b < 0 | a < 0 & 0 < b)" by (simp add: divide_inverse mult_less_0_iff) lemma zero_le_divide_iff: - "((0::'a::{linordered_field,division_by_zero}) \ a/b) = + "((0::'a::{linordered_field,division_ring_inverse_zero}) \ a/b) = (0 \ a & 0 \ b | a \ 0 & b \ 0)" by (simp add: divide_inverse zero_le_mult_iff) lemma divide_le_0_iff: - "(a/b \ (0::'a::{linordered_field,division_by_zero})) = + "(a/b \ (0::'a::{linordered_field,division_ring_inverse_zero})) = (0 \ a & b \ 0 | a \ 0 & 0 \ b)" by (simp add: divide_inverse mult_le_0_iff) @@ -779,13 +764,13 @@ text{*Simplify expressions equated with 1*} lemma zero_eq_1_divide_iff [simp,no_atp]: - "((0::'a::{linordered_field,division_by_zero}) = 1/a) = (a = 0)" + "((0::'a::{linordered_field,division_ring_inverse_zero}) = 1/a) = (a = 0)" apply (cases "a=0", simp) apply (auto simp add: nonzero_eq_divide_eq) done lemma one_divide_eq_0_iff [simp,no_atp]: - "(1/a = (0::'a::{linordered_field,division_by_zero})) = (a = 0)" + "(1/a = (0::'a::{linordered_field,division_ring_inverse_zero})) = (a = 0)" apply (cases "a=0", simp) apply (insert zero_neq_one [THEN not_sym]) apply (auto simp add: nonzero_divide_eq_eq) @@ -803,16 +788,16 @@ declare divide_le_0_1_iff [simp,no_atp] lemma divide_right_mono: - "[|a \ b; 0 \ c|] ==> a/c \ b/(c::'a::{linordered_field,division_by_zero})" + "[|a \ b; 0 \ c|] ==> a/c \ b/(c::'a::{linordered_field,division_ring_inverse_zero})" by (force simp add: divide_strict_right_mono order_le_less) -lemma divide_right_mono_neg: "(a::'a::{linordered_field,division_by_zero}) <= b +lemma divide_right_mono_neg: "(a::'a::{linordered_field,division_ring_inverse_zero}) <= b ==> c <= 0 ==> b / c <= a / c" apply (drule divide_right_mono [of _ _ "- c"]) apply auto done -lemma divide_left_mono_neg: "(a::'a::{linordered_field,division_by_zero}) <= b +lemma divide_left_mono_neg: "(a::'a::{linordered_field,division_ring_inverse_zero}) <= b ==> c <= 0 ==> 0 < a * b ==> c / a <= c / b" apply (drule divide_left_mono [of _ _ "- c"]) apply (auto simp add: mult_commute) @@ -823,22 +808,22 @@ text{*Simplify quotients that are compared with the value 1.*} lemma le_divide_eq_1 [no_atp]: - fixes a :: "'a :: {linordered_field,division_by_zero}" + fixes a :: "'a :: {linordered_field,division_ring_inverse_zero}" shows "(1 \ b / a) = ((0 < a & a \ b) | (a < 0 & b \ a))" by (auto simp add: le_divide_eq) lemma divide_le_eq_1 [no_atp]: - fixes a :: "'a :: {linordered_field,division_by_zero}" + fixes a :: "'a :: {linordered_field,division_ring_inverse_zero}" shows "(b / a \ 1) = ((0 < a & b \ a) | (a < 0 & a \ b) | a=0)" by (auto simp add: divide_le_eq) lemma less_divide_eq_1 [no_atp]: - fixes a :: "'a :: {linordered_field,division_by_zero}" + fixes a :: "'a :: {linordered_field,division_ring_inverse_zero}" shows "(1 < b / a) = ((0 < a & a < b) | (a < 0 & b < a))" by (auto simp add: less_divide_eq) lemma divide_less_eq_1 [no_atp]: - fixes a :: "'a :: {linordered_field,division_by_zero}" + fixes a :: "'a :: {linordered_field,division_ring_inverse_zero}" shows "(b / a < 1) = ((0 < a & b < a) | (a < 0 & a < b) | a=0)" by (auto simp add: divide_less_eq) @@ -846,76 +831,76 @@ text {*Conditional Simplification Rules: No Case Splits*} lemma le_divide_eq_1_pos [simp,no_atp]: - fixes a :: "'a :: {linordered_field,division_by_zero}" + fixes a :: "'a :: {linordered_field,division_ring_inverse_zero}" shows "0 < a \ (1 \ b/a) = (a \ b)" by (auto simp add: le_divide_eq) lemma le_divide_eq_1_neg [simp,no_atp]: - fixes a :: "'a :: {linordered_field,division_by_zero}" + fixes a :: "'a :: {linordered_field,division_ring_inverse_zero}" shows "a < 0 \ (1 \ b/a) = (b \ a)" by (auto simp add: le_divide_eq) lemma divide_le_eq_1_pos [simp,no_atp]: - fixes a :: "'a :: {linordered_field,division_by_zero}" + fixes a :: "'a :: {linordered_field,division_ring_inverse_zero}" shows "0 < a \ (b/a \ 1) = (b \ a)" by (auto simp add: divide_le_eq) lemma divide_le_eq_1_neg [simp,no_atp]: - fixes a :: "'a :: {linordered_field,division_by_zero}" + fixes a :: "'a :: {linordered_field,division_ring_inverse_zero}" shows "a < 0 \ (b/a \ 1) = (a \ b)" by (auto simp add: divide_le_eq) lemma less_divide_eq_1_pos [simp,no_atp]: - fixes a :: "'a :: {linordered_field,division_by_zero}" + fixes a :: "'a :: {linordered_field,division_ring_inverse_zero}" shows "0 < a \ (1 < b/a) = (a < b)" by (auto simp add: less_divide_eq) lemma less_divide_eq_1_neg [simp,no_atp]: - fixes a :: "'a :: {linordered_field,division_by_zero}" + fixes a :: "'a :: {linordered_field,division_ring_inverse_zero}" shows "a < 0 \ (1 < b/a) = (b < a)" by (auto simp add: less_divide_eq) lemma divide_less_eq_1_pos [simp,no_atp]: - fixes a :: "'a :: {linordered_field,division_by_zero}" + fixes a :: "'a :: {linordered_field,division_ring_inverse_zero}" shows "0 < a \ (b/a < 1) = (b < a)" by (auto simp add: divide_less_eq) lemma divide_less_eq_1_neg [simp,no_atp]: - fixes a :: "'a :: {linordered_field,division_by_zero}" + fixes a :: "'a :: {linordered_field,division_ring_inverse_zero}" shows "a < 0 \ b/a < 1 <-> a < b" by (auto simp add: divide_less_eq) lemma eq_divide_eq_1 [simp,no_atp]: - fixes a :: "'a :: {linordered_field,division_by_zero}" + fixes a :: "'a :: {linordered_field,division_ring_inverse_zero}" shows "(1 = b/a) = ((a \ 0 & a = b))" by (auto simp add: eq_divide_eq) lemma divide_eq_eq_1 [simp,no_atp]: - fixes a :: "'a :: {linordered_field,division_by_zero}" + fixes a :: "'a :: {linordered_field,division_ring_inverse_zero}" shows "(b/a = 1) = ((a \ 0 & a = b))" by (auto simp add: divide_eq_eq) lemma abs_inverse [simp]: - "\inverse (a::'a::{linordered_field,division_by_zero})\ = + "\inverse (a::'a::{linordered_field,division_ring_inverse_zero})\ = inverse \a\" apply (cases "a=0", simp) apply (simp add: nonzero_abs_inverse) done lemma abs_divide [simp]: - "\a / (b::'a::{linordered_field,division_by_zero})\ = \a\ / \b\" + "\a / (b::'a::{linordered_field,division_ring_inverse_zero})\ = \a\ / \b\" apply (cases "b=0", simp) apply (simp add: nonzero_abs_divide) done -lemma abs_div_pos: "(0::'a::{linordered_field,division_by_zero}) < y ==> +lemma abs_div_pos: "(0::'a::{linordered_field,division_ring_inverse_zero}) < y ==> \x\ / y = \x / y\" apply (subst abs_divide) apply (simp add: order_less_imp_le) done lemma field_le_mult_one_interval: - fixes x :: "'a\{linordered_field,division_by_zero}" + fixes x :: "'a\{linordered_field,division_ring_inverse_zero}" assumes *: "\z. \ 0 < z ; z < 1 \ \ z * x \ y" shows "x \ y" proof (cases "0 < x") diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/GCD.thy --- a/src/HOL/GCD.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/GCD.thy Mon Apr 26 13:43:31 2010 +0200 @@ -1034,11 +1034,11 @@ thus "fst (bezw m n) * int m + snd (bezw m n) * int n = int (gcd m n)" apply (simp add: bezw_non_0 gcd_non_0_nat) apply (erule subst) - apply (simp add: ring_simps) + apply (simp add: field_simps) apply (subst mod_div_equality [of m n, symmetric]) (* applying simp here undoes the last substitution! what is procedure cancel_div_mod? *) - apply (simp only: ring_simps zadd_int [symmetric] + apply (simp only: field_simps zadd_int [symmetric] zmult_int [symmetric]) done qed @@ -1389,7 +1389,7 @@ show "lcm (lcm n m) p = lcm n (lcm m p)" by (rule lcm_unique_nat [THEN iffD1]) (metis dvd.order_trans lcm_unique_nat) show "lcm m n = lcm n m" - by (simp add: lcm_nat_def gcd_commute_nat ring_simps) + by (simp add: lcm_nat_def gcd_commute_nat field_simps) qed interpretation lcm_int!: abel_semigroup "lcm :: int \ int \ int" diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Groebner_Basis.thy --- a/src/HOL/Groebner_Basis.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Groebner_Basis.thy Mon Apr 26 13:43:31 2010 +0200 @@ -474,20 +474,20 @@ fieldgb "op +" "op *" "op ^" "0::'a::{field,number_ring}" "1" "op -" "uminus" "op /" "inverse" apply (unfold_locales) by (simp_all add: divide_inverse) lemma divide_Numeral1: "(x::'a::{field,number_ring}) / Numeral1 = x" by simp -lemma divide_Numeral0: "(x::'a::{field,number_ring, division_by_zero}) / Numeral0 = 0" +lemma divide_Numeral0: "(x::'a::{field,number_ring, division_ring_inverse_zero}) / Numeral0 = 0" by simp -lemma mult_frac_frac: "((x::'a::{field,division_by_zero}) / y) * (z / w) = (x*z) / (y*w)" +lemma mult_frac_frac: "((x::'a::{field,division_ring_inverse_zero}) / y) * (z / w) = (x*z) / (y*w)" by simp -lemma mult_frac_num: "((x::'a::{field, division_by_zero}) / y) * z = (x*z) / y" +lemma mult_frac_num: "((x::'a::{field, division_ring_inverse_zero}) / y) * z = (x*z) / y" by simp -lemma mult_num_frac: "((x::'a::{field, division_by_zero}) / y) * z = (x*z) / y" +lemma mult_num_frac: "((x::'a::{field, division_ring_inverse_zero}) / y) * z = (x*z) / y" by simp lemma Numeral1_eq1_nat: "(1::nat) = Numeral1" by simp -lemma add_frac_num: "y\ 0 \ (x::'a::{field, division_by_zero}) / y + z = (x + z*y) / y" +lemma add_frac_num: "y\ 0 \ (x::'a::{field, division_ring_inverse_zero}) / y + z = (x + z*y) / y" by (simp add: add_divide_distrib) -lemma add_num_frac: "y\ 0 \ z + (x::'a::{field, division_by_zero}) / y = (x + z*y) / y" +lemma add_num_frac: "y\ 0 \ z + (x::'a::{field, division_ring_inverse_zero}) / y = (x + z*y) / y" by (simp add: add_divide_distrib) ML {* diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Groups.thy --- a/src/HOL/Groups.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Groups.thy Mon Apr 26 13:43:31 2010 +0200 @@ -20,6 +20,15 @@ setup Ac_Simps.setup +text{* The rewrites accumulated in @{text algebra_simps} deal with the +classical algebraic structures of groups, rings and family. They simplify +terms by multiplying everything out (in case of a ring) and bringing sums and +products into a canonical form (by ordered rewriting). As a result it decides +group and ring equalities but also helps with inequalities. + +Of course it also works for fields, but it knows nothing about multiplicative +inverses or division. This is catered for by @{text field_simps}. *} + ML {* structure Algebra_Simps = Named_Thms( val name = "algebra_simps" @@ -29,14 +38,19 @@ setup Algebra_Simps.setup -text{* The rewrites accumulated in @{text algebra_simps} deal with the -classical algebraic structures of groups, rings and family. They simplify -terms by multiplying everything out (in case of a ring) and bringing sums and -products into a canonical form (by ordered rewriting). As a result it decides -group and ring equalities but also helps with inequalities. +text{* Lemmas @{text field_simps} multiply with denominators in (in)equations +if they can be proved to be non-zero (for equations) or positive/negative +(for inequations). Can be too aggressive and is therefore separate from the +more benign @{text algebra_simps}. *} -Of course it also works for fields, but it knows nothing about multiplicative -inverses or division. This is catered for by @{text field_simps}. *} +ML {* +structure Field_Simps = Named_Thms( + val name = "field_simps" + val description = "algebra simplification rules for fields" +) +*} + +setup Field_Simps.setup subsection {* Abstract structures *} @@ -138,13 +152,13 @@ subsection {* Semigroups and Monoids *} class semigroup_add = plus + - assumes add_assoc [algebra_simps]: "(a + b) + c = a + (b + c)" + assumes add_assoc [algebra_simps, field_simps]: "(a + b) + c = a + (b + c)" sublocale semigroup_add < add!: semigroup plus proof qed (fact add_assoc) class ab_semigroup_add = semigroup_add + - assumes add_commute [algebra_simps]: "a + b = b + a" + assumes add_commute [algebra_simps, field_simps]: "a + b = b + a" sublocale ab_semigroup_add < add!: abel_semigroup plus proof qed (fact add_commute) @@ -152,7 +166,7 @@ context ab_semigroup_add begin -lemmas add_left_commute [algebra_simps] = add.left_commute +lemmas add_left_commute [algebra_simps, field_simps] = add.left_commute theorems add_ac = add_assoc add_commute add_left_commute @@ -161,13 +175,13 @@ theorems add_ac = add_assoc add_commute add_left_commute class semigroup_mult = times + - assumes mult_assoc [algebra_simps]: "(a * b) * c = a * (b * c)" + assumes mult_assoc [algebra_simps, field_simps]: "(a * b) * c = a * (b * c)" sublocale semigroup_mult < mult!: semigroup times proof qed (fact mult_assoc) class ab_semigroup_mult = semigroup_mult + - assumes mult_commute [algebra_simps]: "a * b = b * a" + assumes mult_commute [algebra_simps, field_simps]: "a * b = b * a" sublocale ab_semigroup_mult < mult!: abel_semigroup times proof qed (fact mult_commute) @@ -175,7 +189,7 @@ context ab_semigroup_mult begin -lemmas mult_left_commute [algebra_simps] = mult.left_commute +lemmas mult_left_commute [algebra_simps, field_simps] = mult.left_commute theorems mult_ac = mult_assoc mult_commute mult_left_commute @@ -370,7 +384,7 @@ lemma add_diff_cancel: "a + b - b = a" by (simp add: diff_minus add_assoc) -declare diff_minus[symmetric, algebra_simps] +declare diff_minus[symmetric, algebra_simps, field_simps] lemma eq_neg_iff_add_eq_0: "a = - b \ a + b = 0" proof @@ -401,7 +415,7 @@ then show "b = c" by simp qed -lemma uminus_add_conv_diff[algebra_simps]: +lemma uminus_add_conv_diff[algebra_simps, field_simps]: "- a + b = b - a" by (simp add:diff_minus add_commute) @@ -413,22 +427,22 @@ "- (a - b) = b - a" by (simp add: diff_minus add_commute) -lemma add_diff_eq[algebra_simps]: "a + (b - c) = (a + b) - c" +lemma add_diff_eq[algebra_simps, field_simps]: "a + (b - c) = (a + b) - c" by (simp add: diff_minus add_ac) -lemma diff_add_eq[algebra_simps]: "(a - b) + c = (a + c) - b" +lemma diff_add_eq[algebra_simps, field_simps]: "(a - b) + c = (a + c) - b" by (simp add: diff_minus add_ac) -lemma diff_eq_eq[algebra_simps]: "a - b = c \ a = c + b" +lemma diff_eq_eq[algebra_simps, field_simps]: "a - b = c \ a = c + b" by (auto simp add: diff_minus add_assoc) -lemma eq_diff_eq[algebra_simps]: "a = c - b \ a + b = c" +lemma eq_diff_eq[algebra_simps, field_simps]: "a = c - b \ a + b = c" by (auto simp add: diff_minus add_assoc) -lemma diff_diff_eq[algebra_simps]: "(a - b) - c = a - (b + c)" +lemma diff_diff_eq[algebra_simps, field_simps]: "(a - b) - c = a - (b + c)" by (simp add: diff_minus add_ac) -lemma diff_diff_eq2[algebra_simps]: "a - (b - c) = (a + c) - b" +lemma diff_diff_eq2[algebra_simps, field_simps]: "a - (b - c) = (a + c) - b" by (simp add: diff_minus add_ac) lemma eq_iff_diff_eq_0: "a = b \ a - b = 0" @@ -749,35 +763,29 @@ finally show ?thesis . qed -lemma diff_less_eq[algebra_simps]: "a - b < c \ a < c + b" +lemma diff_less_eq[algebra_simps, field_simps]: "a - b < c \ a < c + b" apply (subst less_iff_diff_less_0 [of a]) apply (rule less_iff_diff_less_0 [of _ c, THEN ssubst]) apply (simp add: diff_minus add_ac) done -lemma less_diff_eq[algebra_simps]: "a < c - b \ a + b < c" +lemma less_diff_eq[algebra_simps, field_simps]: "a < c - b \ a + b < c" apply (subst less_iff_diff_less_0 [of "a + b"]) apply (subst less_iff_diff_less_0 [of a]) apply (simp add: diff_minus add_ac) done -lemma diff_le_eq[algebra_simps]: "a - b \ c \ a \ c + b" +lemma diff_le_eq[algebra_simps, field_simps]: "a - b \ c \ a \ c + b" by (auto simp add: le_less diff_less_eq diff_add_cancel add_diff_cancel) -lemma le_diff_eq[algebra_simps]: "a \ c - b \ a + b \ c" +lemma le_diff_eq[algebra_simps, field_simps]: "a \ c - b \ a + b \ c" by (auto simp add: le_less less_diff_eq diff_add_cancel add_diff_cancel) lemma le_iff_diff_le_0: "a \ b \ a - b \ 0" by (simp add: algebra_simps) -text{*Legacy - use @{text algebra_simps} *} -lemmas group_simps[no_atp] = algebra_simps - end -text{*Legacy - use @{text algebra_simps} *} -lemmas group_simps[no_atp] = algebra_simps - class linordered_ab_semigroup_add = linorder + ordered_ab_semigroup_add diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Import/HOL/real.imp --- a/src/HOL/Import/HOL/real.imp Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Import/HOL/real.imp Mon Apr 26 13:43:31 2010 +0200 @@ -251,7 +251,7 @@ "REAL_INV_INV" > "Rings.inverse_inverse_eq" "REAL_INV_EQ_0" > "Rings.inverse_nonzero_iff_nonzero" "REAL_INV_1OVER" > "Rings.inverse_eq_divide" - "REAL_INV_0" > "Rings.division_by_zero_class.inverse_zero" + "REAL_INV_0" > "Rings.division_ring_inverse_zero_class.inverse_zero" "REAL_INVINV" > "Rings.nonzero_inverse_inverse_eq" "REAL_INV1" > "Rings.inverse_1" "REAL_INJ" > "RealDef.real_of_nat_inject" diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Import/HOL/realax.imp --- a/src/HOL/Import/HOL/realax.imp Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Import/HOL/realax.imp Mon Apr 26 13:43:31 2010 +0200 @@ -101,7 +101,7 @@ "REAL_LT_MUL" > "Rings.mult_pos_pos" "REAL_LT_IADD" > "Groups.add_strict_left_mono" "REAL_LDISTRIB" > "Rings.ring_eq_simps_2" - "REAL_INV_0" > "Rings.division_by_zero_class.inverse_zero" + "REAL_INV_0" > "Rings.division_ring_inverse_zero_class.inverse_zero" "REAL_ADD_SYM" > "Finite_Set.AC_add.f.AC_2" "REAL_ADD_LINV" > "HOL4Compat.REAL_ADD_LINV" "REAL_ADD_LID" > "Finite_Set.AC_add.f_e.left_ident" diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Int.thy --- a/src/HOL/Int.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Int.thy Mon Apr 26 13:43:31 2010 +0200 @@ -1995,15 +1995,15 @@ text{*Division By @{text "-1"}*} lemma divide_minus1 [simp]: - "x/-1 = -(x::'a::{field,division_by_zero,number_ring})" + "x/-1 = -(x::'a::{field,division_ring_inverse_zero,number_ring})" by simp lemma minus1_divide [simp]: - "-1 / (x::'a::{field,division_by_zero,number_ring}) = - (1/x)" + "-1 / (x::'a::{field,division_ring_inverse_zero,number_ring}) = - (1/x)" by (simp add: divide_inverse) lemma half_gt_zero_iff: - "(0 < r/2) = (0 < (r::'a::{linordered_field,division_by_zero,number_ring}))" + "(0 < r/2) = (0 < (r::'a::{linordered_field,division_ring_inverse_zero,number_ring}))" by auto lemmas half_gt_zero [simp] = half_gt_zero_iff [THEN iffD2, standard] diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Library/Abstract_Rat.thy --- a/src/HOL/Library/Abstract_Rat.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Library/Abstract_Rat.thy Mon Apr 26 13:43:31 2010 +0200 @@ -184,7 +184,7 @@ lemma isnormNum_unique[simp]: assumes na: "isnormNum x" and nb: "isnormNum y" - shows "((INum x ::'a::{ring_char_0,field, division_by_zero}) = INum y) = (x = y)" (is "?lhs = ?rhs") + shows "((INum x ::'a::{ring_char_0,field, division_ring_inverse_zero}) = INum y) = (x = y)" (is "?lhs = ?rhs") proof have "\ a b a' b'. x = (a,b) \ y = (a',b')" by auto then obtain a b a' b' where xy[simp]: "x = (a,b)" "y=(a',b')" by blast @@ -217,7 +217,7 @@ qed -lemma isnormNum0[simp]: "isnormNum x \ (INum x = (0::'a::{ring_char_0, field,division_by_zero})) = (x = 0\<^sub>N)" +lemma isnormNum0[simp]: "isnormNum x \ (INum x = (0::'a::{ring_char_0, field,division_ring_inverse_zero})) = (x = 0\<^sub>N)" unfolding INum_int(2)[symmetric] by (rule isnormNum_unique, simp_all) @@ -245,7 +245,7 @@ done -lemma normNum[simp]: "INum (normNum x) = (INum x :: 'a::{ring_char_0,field, division_by_zero})" +lemma normNum[simp]: "INum (normNum x) = (INum x :: 'a::{ring_char_0,field, division_ring_inverse_zero})" proof- have "\ a b. x = (a,b)" by auto then obtain a b where x[simp]: "x = (a,b)" by blast @@ -260,7 +260,7 @@ ultimately show ?thesis by blast qed -lemma INum_normNum_iff: "(INum x ::'a::{field, division_by_zero, ring_char_0}) = INum y \ normNum x = normNum y" (is "?lhs = ?rhs") +lemma INum_normNum_iff: "(INum x ::'a::{field, division_ring_inverse_zero, ring_char_0}) = INum y \ normNum x = normNum y" (is "?lhs = ?rhs") proof - have "normNum x = normNum y \ (INum (normNum x) :: 'a) = INum (normNum y)" by (simp del: normNum) @@ -268,7 +268,7 @@ finally show ?thesis by simp qed -lemma Nadd[simp]: "INum (x +\<^sub>N y) = INum x + (INum y :: 'a :: {ring_char_0,division_by_zero,field})" +lemma Nadd[simp]: "INum (x +\<^sub>N y) = INum x + (INum y :: 'a :: {ring_char_0,division_ring_inverse_zero,field})" proof- let ?z = "0:: 'a" have " \ a b. x = (a,b)" " \ a' b'. y = (a',b')" by auto @@ -300,7 +300,7 @@ ultimately show ?thesis by blast qed -lemma Nmul[simp]: "INum (x *\<^sub>N y) = INum x * (INum y:: 'a :: {ring_char_0,division_by_zero,field}) " +lemma Nmul[simp]: "INum (x *\<^sub>N y) = INum x * (INum y:: 'a :: {ring_char_0,division_ring_inverse_zero,field}) " proof- let ?z = "0::'a" have " \ a b. x = (a,b)" " \ a' b'. y = (a',b')" by auto @@ -323,16 +323,16 @@ lemma Nneg[simp]: "INum (~\<^sub>N x) = - (INum x ::'a:: field)" by (simp add: Nneg_def split_def INum_def) -lemma Nsub[simp]: shows "INum (x -\<^sub>N y) = INum x - (INum y:: 'a :: {ring_char_0,division_by_zero,field})" +lemma Nsub[simp]: shows "INum (x -\<^sub>N y) = INum x - (INum y:: 'a :: {ring_char_0,division_ring_inverse_zero,field})" by (simp add: Nsub_def split_def) -lemma Ninv[simp]: "INum (Ninv x) = (1::'a :: {division_by_zero,field}) / (INum x)" +lemma Ninv[simp]: "INum (Ninv x) = (1::'a :: {division_ring_inverse_zero,field}) / (INum x)" by (simp add: Ninv_def INum_def split_def) -lemma Ndiv[simp]: "INum (x \
\<^sub>N y) = INum x / (INum y ::'a :: {ring_char_0, division_by_zero,field})" by (simp add: Ndiv_def) +lemma Ndiv[simp]: "INum (x \
\<^sub>N y) = INum x / (INum y ::'a :: {ring_char_0, division_ring_inverse_zero,field})" by (simp add: Ndiv_def) lemma Nlt0_iff[simp]: assumes nx: "isnormNum x" - shows "((INum x :: 'a :: {ring_char_0,division_by_zero,linordered_field})< 0) = 0>\<^sub>N x " + shows "((INum x :: 'a :: {ring_char_0,division_ring_inverse_zero,linordered_field})< 0) = 0>\<^sub>N x " proof- have " \ a b. x = (a,b)" by simp then obtain a b where x[simp]:"x = (a,b)" by blast @@ -345,7 +345,7 @@ qed lemma Nle0_iff[simp]:assumes nx: "isnormNum x" - shows "((INum x :: 'a :: {ring_char_0,division_by_zero,linordered_field}) \ 0) = 0\\<^sub>N x" + shows "((INum x :: 'a :: {ring_char_0,division_ring_inverse_zero,linordered_field}) \ 0) = 0\\<^sub>N x" proof- have " \ a b. x = (a,b)" by simp then obtain a b where x[simp]:"x = (a,b)" by blast @@ -357,7 +357,7 @@ ultimately show ?thesis by blast qed -lemma Ngt0_iff[simp]:assumes nx: "isnormNum x" shows "((INum x :: 'a :: {ring_char_0,division_by_zero,linordered_field})> 0) = 0<\<^sub>N x" +lemma Ngt0_iff[simp]:assumes nx: "isnormNum x" shows "((INum x :: 'a :: {ring_char_0,division_ring_inverse_zero,linordered_field})> 0) = 0<\<^sub>N x" proof- have " \ a b. x = (a,b)" by simp then obtain a b where x[simp]:"x = (a,b)" by blast @@ -369,7 +369,7 @@ ultimately show ?thesis by blast qed lemma Nge0_iff[simp]:assumes nx: "isnormNum x" - shows "((INum x :: 'a :: {ring_char_0,division_by_zero,linordered_field}) \ 0) = 0\\<^sub>N x" + shows "((INum x :: 'a :: {ring_char_0,division_ring_inverse_zero,linordered_field}) \ 0) = 0\\<^sub>N x" proof- have " \ a b. x = (a,b)" by simp then obtain a b where x[simp]:"x = (a,b)" by blast @@ -382,7 +382,7 @@ qed lemma Nlt_iff[simp]: assumes nx: "isnormNum x" and ny: "isnormNum y" - shows "((INum x :: 'a :: {ring_char_0,division_by_zero,linordered_field}) < INum y) = (x <\<^sub>N y)" + shows "((INum x :: 'a :: {ring_char_0,division_ring_inverse_zero,linordered_field}) < INum y) = (x <\<^sub>N y)" proof- let ?z = "0::'a" have "((INum x ::'a) < INum y) = (INum (x -\<^sub>N y) < ?z)" using nx ny by simp @@ -391,7 +391,7 @@ qed lemma Nle_iff[simp]: assumes nx: "isnormNum x" and ny: "isnormNum y" - shows "((INum x :: 'a :: {ring_char_0,division_by_zero,linordered_field})\ INum y) = (x \\<^sub>N y)" + shows "((INum x :: 'a :: {ring_char_0,division_ring_inverse_zero,linordered_field})\ INum y) = (x \\<^sub>N y)" proof- have "((INum x ::'a) \ INum y) = (INum (x -\<^sub>N y) \ (0::'a))" using nx ny by simp also have "\ = (0\\<^sub>N (x -\<^sub>N y))" using Nle0_iff[OF Nsub_normN[OF ny]] by simp @@ -399,7 +399,7 @@ qed lemma Nadd_commute: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" shows "x +\<^sub>N y = y +\<^sub>N x" proof- have n: "isnormNum (x +\<^sub>N y)" "isnormNum (y +\<^sub>N x)" by simp_all @@ -408,7 +408,7 @@ qed lemma [simp]: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" shows "(0, b) +\<^sub>N y = normNum y" and "(a, 0) +\<^sub>N y = normNum y" and "x +\<^sub>N (0, b) = normNum x" @@ -420,7 +420,7 @@ done lemma normNum_nilpotent_aux[simp]: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" assumes nx: "isnormNum x" shows "normNum x = x" proof- @@ -432,7 +432,7 @@ qed lemma normNum_nilpotent[simp]: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" shows "normNum (normNum x) = normNum x" by simp @@ -440,11 +440,11 @@ by (simp_all add: normNum_def) lemma normNum_Nadd: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" shows "normNum (x +\<^sub>N y) = x +\<^sub>N y" by simp lemma Nadd_normNum1[simp]: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" shows "normNum x +\<^sub>N y = x +\<^sub>N y" proof- have n: "isnormNum (normNum x +\<^sub>N y)" "isnormNum (x +\<^sub>N y)" by simp_all @@ -454,7 +454,7 @@ qed lemma Nadd_normNum2[simp]: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" shows "x +\<^sub>N normNum y = x +\<^sub>N y" proof- have n: "isnormNum (x +\<^sub>N normNum y)" "isnormNum (x +\<^sub>N y)" by simp_all @@ -464,7 +464,7 @@ qed lemma Nadd_assoc: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" shows "x +\<^sub>N y +\<^sub>N z = x +\<^sub>N (y +\<^sub>N z)" proof- have n: "isnormNum (x +\<^sub>N y +\<^sub>N z)" "isnormNum (x +\<^sub>N (y +\<^sub>N z))" by simp_all @@ -476,7 +476,7 @@ by (simp add: Nmul_def split_def Let_def gcd_commute_int mult_commute) lemma Nmul_assoc: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" assumes nx: "isnormNum x" and ny:"isnormNum y" and nz:"isnormNum z" shows "x *\<^sub>N y *\<^sub>N z = x *\<^sub>N (y *\<^sub>N z)" proof- @@ -487,7 +487,7 @@ qed lemma Nsub0: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" assumes x: "isnormNum x" and y:"isnormNum y" shows "(x -\<^sub>N y = 0\<^sub>N) = (x = y)" proof- { fix h :: 'a @@ -502,7 +502,7 @@ by (simp_all add: Nmul_def Let_def split_def) lemma Nmul_eq0[simp]: - assumes "SORT_CONSTRAINT('a::{ring_char_0,division_by_zero,field})" + assumes "SORT_CONSTRAINT('a::{ring_char_0,division_ring_inverse_zero,field})" assumes nx:"isnormNum x" and ny: "isnormNum y" shows "(x*\<^sub>N y = 0\<^sub>N) = (x = 0\<^sub>N \ y = 0\<^sub>N)" proof- diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Library/Binomial.thy --- a/src/HOL/Library/Binomial.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Library/Binomial.thy Mon Apr 26 13:43:31 2010 +0200 @@ -236,10 +236,10 @@ have th1: "(\n\{1\nat..n}. a + of_nat n) = (\n\{0\nat..n - 1}. a + 1 + of_nat n)" apply (rule setprod_reindex_cong[where f = "Suc"]) - using n0 by (auto simp add: expand_fun_eq ring_simps) + using n0 by (auto simp add: expand_fun_eq field_simps) have ?thesis apply (simp add: pochhammer_def) unfolding setprod_insert[OF th0, unfolded eq] - using th1 by (simp add: ring_simps)} + using th1 by (simp add: field_simps)} ultimately show ?thesis by blast qed @@ -378,10 +378,10 @@ by simp from n h th0 have "fact k * fact (n - k) * (n choose k) = k * (fact h * fact (m - h) * (m choose h)) + (m - h) * (fact k * fact (m - k) * (m choose k))" - by (simp add: ring_simps) + by (simp add: field_simps) also have "\ = (k + (m - h)) * fact m" using H[rule_format, OF mn hm'] H[rule_format, OF mn km] - by (simp add: ring_simps) + by (simp add: field_simps) finally have ?ths using h n km by simp} moreover have "n=0 \ k = 0 \ k = n \ (EX m h. n=Suc m \ k = Suc h \ h < m)" using kn by presburger ultimately show ?ths by blast @@ -391,13 +391,13 @@ assumes kn: "k \ n" shows "(of_nat (n choose k) :: 'a::field_char_0) = of_nat (fact n) / (of_nat (fact k) * of_nat (fact (n - k)))" using binomial_fact_lemma[OF kn] - by (simp add: field_eq_simps of_nat_mult [symmetric]) + by (simp add: field_simps of_nat_mult [symmetric]) lemma binomial_gbinomial: "of_nat (n choose k) = of_nat n gchoose k" proof- {assume kn: "k > n" from kn binomial_eq_0[OF kn] have ?thesis - by (simp add: gbinomial_pochhammer field_eq_simps + by (simp add: gbinomial_pochhammer field_simps pochhammer_of_nat_eq_0_iff)} moreover {assume "k=0" then have ?thesis by simp} @@ -414,13 +414,13 @@ apply clarsimp apply (presburger) apply presburger - by (simp add: expand_fun_eq ring_simps of_nat_add[symmetric] del: of_nat_add) + by (simp add: expand_fun_eq field_simps of_nat_add[symmetric] del: of_nat_add) have th0: "finite {1..n - Suc h}" "finite {n - h .. n}" "{1..n - Suc h} \ {n - h .. n} = {}" and eq3: "{1..n - Suc h} \ {n - h .. n} = {1..n}" using h kn by auto from eq[symmetric] have ?thesis using kn apply (simp add: binomial_fact[OF kn, where ?'a = 'a] - gbinomial_pochhammer field_eq_simps pochhammer_Suc_setprod) + gbinomial_pochhammer field_simps pochhammer_Suc_setprod) apply (simp add: pochhammer_Suc_setprod fact_altdef_nat h of_nat_setprod setprod_timesf[symmetric] eq' del: One_nat_def power_Suc) unfolding setprod_Un_disjoint[OF th0, unfolded eq3, of "of_nat:: nat \ 'a"] eq[unfolded h] unfolding mult_assoc[symmetric] @@ -449,9 +449,9 @@ have "?r = ((- 1) ^n * pochhammer (- a) n / of_nat (fact n)) * (of_nat n - (- a + of_nat n))" unfolding gbinomial_pochhammer pochhammer_Suc fact_Suc of_nat_mult right_diff_distrib power_Suc - by (simp add: field_eq_simps del: of_nat_Suc) + by (simp add: field_simps del: of_nat_Suc) also have "\ = ?l" unfolding gbinomial_pochhammer - by (simp add: ring_simps) + by (simp add: field_simps) finally show ?thesis .. qed @@ -482,17 +482,17 @@ have "of_nat (fact (Suc k)) * (a gchoose k + (a gchoose (Suc k))) = ((a gchoose Suc h) * of_nat (fact (Suc h)) * of_nat (Suc k)) + (\i\{0\nat..Suc h}. a - of_nat i)" unfolding h - apply (simp add: ring_simps del: fact_Suc) + apply (simp add: field_simps del: fact_Suc) unfolding gbinomial_mult_fact' apply (subst fact_Suc) unfolding of_nat_mult apply (subst mult_commute) unfolding mult_assoc unfolding gbinomial_mult_fact - by (simp add: ring_simps) + by (simp add: field_simps) also have "\ = (\i\{0..h}. a - of_nat i) * (a + 1)" unfolding gbinomial_mult_fact' setprod_nat_ivl_Suc - by (simp add: ring_simps h) + by (simp add: field_simps h) also have "\ = (\i\{0..k}. (a + 1) - of_nat i)" using eq0 unfolding h setprod_nat_ivl_1_Suc diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Library/Bit.thy --- a/src/HOL/Library/Bit.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Library/Bit.thy Mon Apr 26 13:43:31 2010 +0200 @@ -49,7 +49,7 @@ subsection {* Type @{typ bit} forms a field *} -instantiation bit :: "{field, division_by_zero}" +instantiation bit :: "{field, division_ring_inverse_zero}" begin definition plus_bit_def: diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Library/Formal_Power_Series.thy --- a/src/HOL/Library/Formal_Power_Series.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Library/Formal_Power_Series.thy Mon Apr 26 13:43:31 2010 +0200 @@ -588,7 +588,7 @@ from k have "real k > - log y x" by simp then have "ln y * real k > - ln x" unfolding log_def using ln_gt_zero_iff[OF yp] y1 - by (simp add: minus_divide_left field_simps field_eq_simps del:minus_divide_left[symmetric]) + by (simp add: minus_divide_left field_simps del:minus_divide_left[symmetric]) then have "ln y * real k + ln x > 0" by simp then have "exp (real k * ln y + ln x) > exp 0" by (simp add: mult_ac) @@ -596,7 +596,7 @@ unfolding exp_zero exp_add exp_real_of_nat_mult exp_ln[OF xp] exp_ln[OF yp] by simp then have "x > (1/y)^k" using yp - by (simp add: field_simps field_eq_simps nonzero_power_divide) + by (simp add: field_simps nonzero_power_divide) then show ?thesis using kp by blast qed lemma X_nth[simp]: "X$n = (if n = 1 then 1 else 0)" by (simp add: X_def) @@ -693,7 +693,7 @@ from th0[symmetric, unfolded nonzero_divide_eq_eq[OF f0]] have th1: "setsum (\i. f$i * natfun_inverse f (n - i)) {1..n} = - (f$0) * (inverse f)$n" - by (simp add: ring_simps) + by (simp add: field_simps) have "(f * inverse f) $ n = (\i = 0..n. f $i * natfun_inverse f (n - i))" unfolding fps_mult_nth ifn .. also have "\ = f$0 * natfun_inverse f n @@ -766,7 +766,7 @@ lemma fps_deriv_nth[simp]: "fps_deriv f $ n = of_nat (n +1) * f $ (n+1)" by (simp add: fps_deriv_def) lemma fps_deriv_linear[simp]: "fps_deriv (fps_const (a::'a::comm_semiring_1) * f + fps_const b * g) = fps_const a * fps_deriv f + fps_const b * fps_deriv g" - unfolding fps_eq_iff fps_add_nth fps_const_mult_left fps_deriv_nth by (simp add: ring_simps) + unfolding fps_eq_iff fps_add_nth fps_const_mult_left fps_deriv_nth by (simp add: field_simps) lemma fps_deriv_mult[simp]: fixes f :: "('a :: comm_ring_1) fps" @@ -817,7 +817,7 @@ unfolding s0 s1 unfolding setsum_addf[symmetric] setsum_right_distrib apply (rule setsum_cong2) - by (auto simp add: of_nat_diff ring_simps) + by (auto simp add: of_nat_diff field_simps) finally have "(f * ?D g + ?D f * g) $ n = ?D (f*g) $ n" .} then show ?thesis unfolding fps_eq_iff by auto qed @@ -878,7 +878,7 @@ proof- have "fps_deriv f = fps_deriv g \ fps_deriv (f - g) = 0" by simp also have "\ \ f - g = fps_const ((f-g)$0)" unfolding fps_deriv_eq_0_iff .. - finally show ?thesis by (simp add: ring_simps) + finally show ?thesis by (simp add: field_simps) qed lemma fps_deriv_eq_iff_ex: "(fps_deriv f = fps_deriv g) \ (\(c::'a::{idom,semiring_char_0}). f = fps_const c + g)" @@ -929,7 +929,7 @@ qed lemma fps_deriv_maclauren_0: "(fps_nth_deriv k (f:: ('a::comm_semiring_1) fps)) $ 0 = of_nat (fact k) * f$(k)" - by (induct k arbitrary: f) (auto simp add: ring_simps of_nat_mult) + by (induct k arbitrary: f) (auto simp add: field_simps of_nat_mult) subsection {* Powers*} @@ -943,7 +943,7 @@ case (Suc n) note h = Suc.hyps[OF `a$0 = 1`] show ?case unfolding power_Suc fps_mult_nth - using h `a$0 = 1` fps_power_zeroth_eq_one[OF `a$0=1`] by (simp add: ring_simps) + using h `a$0 = 1` fps_power_zeroth_eq_one[OF `a$0=1`] by (simp add: field_simps) qed lemma startsby_one_power:"a $ 0 = (1::'a::comm_ring_1) \ a^n $ 0 = 1" @@ -1005,7 +1005,7 @@ case 0 thus ?case by (simp add: power_0) next case (Suc n) - have "a ^ Suc n $ (Suc n) = (a^n * a)$(Suc n)" by (simp add: ring_simps power_Suc) + have "a ^ Suc n $ (Suc n) = (a^n * a)$(Suc n)" by (simp add: field_simps power_Suc) also have "\ = setsum (\i. a^n$i * a $ (Suc n - i)) {0.. Suc n}" by (simp add: fps_mult_nth) also have "\ = setsum (\i. a^n$i * a $ (Suc n - i)) {n .. Suc n}" apply (rule setsum_mono_zero_right) @@ -1045,8 +1045,8 @@ qed lemma fps_deriv_power: "fps_deriv (a ^ n) = fps_const (of_nat n :: 'a:: comm_ring_1) * fps_deriv a * a ^ (n - 1)" - apply (induct n, auto simp add: power_Suc ring_simps fps_const_add[symmetric] simp del: fps_const_add) - by (case_tac n, auto simp add: power_Suc ring_simps) + apply (induct n, auto simp add: power_Suc field_simps fps_const_add[symmetric] simp del: fps_const_add) + by (case_tac n, auto simp add: power_Suc field_simps) lemma fps_inverse_deriv: fixes a:: "('a :: field) fps" @@ -1060,11 +1060,11 @@ with inverse_mult_eq_1[OF a0] have "inverse a ^ 2 * fps_deriv a + fps_deriv (inverse a) = 0" unfolding power2_eq_square - apply (simp add: ring_simps) + apply (simp add: field_simps) by (simp add: mult_assoc[symmetric]) hence "inverse a ^ 2 * fps_deriv a + fps_deriv (inverse a) - fps_deriv a * inverse a ^ 2 = 0 - fps_deriv a * inverse a ^ 2" by simp - then show "fps_deriv (inverse a) = - fps_deriv a * inverse a ^ 2" by (simp add: ring_simps) + then show "fps_deriv (inverse a) = - fps_deriv a * inverse a ^ 2" by (simp add: field_simps) qed lemma fps_inverse_mult: @@ -1084,7 +1084,7 @@ from inverse_mult_eq_1[OF ab0] have "inverse (a*b) * (a*b) * inverse a * inverse b = 1 * inverse a * inverse b" by simp then have "inverse (a*b) * (inverse a * a) * (inverse b * b) = inverse a * inverse b" - by (simp add: ring_simps) + by (simp add: field_simps) then have ?thesis using inverse_mult_eq_1[OF a0] inverse_mult_eq_1[OF b0] by simp} ultimately show ?thesis by blast qed @@ -1105,7 +1105,7 @@ assumes a0: "b$0 \ 0" shows "fps_deriv (a / b) = (fps_deriv a * b - a * fps_deriv b) / b ^ 2" using fps_inverse_deriv[OF a0] - by (simp add: fps_divide_def ring_simps power2_eq_square fps_inverse_mult inverse_mult_eq_1'[OF a0]) + by (simp add: fps_divide_def field_simps power2_eq_square fps_inverse_mult inverse_mult_eq_1'[OF a0]) lemma fps_inverse_gp': "inverse (Abs_fps(\n. (1::'a::field))) @@ -1121,7 +1121,7 @@ proof- have eq: "(1 + X) * ?r = 1" unfolding minus_one_power_iff - by (auto simp add: ring_simps fps_eq_iff) + by (auto simp add: field_simps fps_eq_iff) show ?thesis by (auto simp add: eq intro: fps_inverse_unique) qed @@ -1185,7 +1185,7 @@ next case (Suc k) note th = Suc.hyps[symmetric] - have "(Abs_fps a - setsum (\i. fps_const (a i :: 'a) * X^i) {0 .. Suc k})$n = (Abs_fps a - setsum (\i. fps_const (a i :: 'a) * X^i) {0 .. k} - fps_const (a (Suc k)) * X^ Suc k) $ n" by (simp add: ring_simps) + have "(Abs_fps a - setsum (\i. fps_const (a i :: 'a) * X^i) {0 .. Suc k})$n = (Abs_fps a - setsum (\i. fps_const (a i :: 'a) * X^i) {0 .. k} - fps_const (a (Suc k)) * X^ Suc k) $ n" by (simp add: field_simps) also have "\ = (if n < Suc k then 0 else a n) - (fps_const (a (Suc k)) * X^ Suc k)$n" using th unfolding fps_sub_nth by simp @@ -1209,10 +1209,10 @@ definition "XD = op * X o fps_deriv" lemma XD_add[simp]:"XD (a + b) = XD a + XD (b :: ('a::comm_ring_1) fps)" - by (simp add: XD_def ring_simps) + by (simp add: XD_def field_simps) lemma XD_mult_const[simp]:"XD (fps_const (c::'a::comm_ring_1) * a) = fps_const c * XD a" - by (simp add: XD_def ring_simps) + by (simp add: XD_def field_simps) lemma XD_linear[simp]: "XD (fps_const c * a + fps_const d * b) = fps_const c * XD a + fps_const d * XD (b :: ('a::comm_ring_1) fps)" by simp @@ -1226,7 +1226,7 @@ lemma fps_mult_XD_shift: "(XD ^^ k) (a:: ('a::{comm_ring_1}) fps) = Abs_fps (\n. (of_nat n ^ k) * a$n)" - by (induct k arbitrary: a) (simp_all add: power_Suc XD_def fps_eq_iff ring_simps del: One_nat_def) + by (induct k arbitrary: a) (simp_all add: power_Suc XD_def fps_eq_iff field_simps del: One_nat_def) subsubsection{* Rule 3 is trivial and is given by @{text fps_times_def}*} subsubsection{* Rule 5 --- summation and "division" by (1 - X)*} @@ -1688,7 +1688,7 @@ then have "setsum ?f ?Pnkn = of_nat (k+1) * ?r $ n * r (Suc k) (a $ 0) ^ k" by (simp add: natpermute_max_card[OF nz, simplified]) also have "\ = a$n - setsum ?f ?Pnknn" - unfolding n1 using r00 a0 by (simp add: field_eq_simps fps_radical_def del: of_nat_Suc) + unfolding n1 using r00 a0 by (simp add: field_simps fps_radical_def del: of_nat_Suc) finally have fn: "setsum ?f ?Pnkn = a$n - setsum ?f ?Pnknn" . have "(?r ^ Suc k)$n = setsum ?f ?Pnkn + setsum ?f ?Pnknn" unfolding fps_power_nth_Suc setsum_Un_disjoint[OF f d, unfolded eq] .. @@ -1764,7 +1764,7 @@ shows "a = b / c" proof- from eq have "a * c * inverse c = b * inverse c" by simp - hence "a * (inverse c * c) = b/c" by (simp only: field_eq_simps divide_inverse) + hence "a * (inverse c * c) = b/c" by (simp only: field_simps divide_inverse) then show "a = b/c" unfolding field_inverse[OF c0] by simp qed @@ -1837,7 +1837,7 @@ show "a$(xs !i) = ?r$(xs!i)" . qed have th00: "\(x::'a). of_nat (Suc k) * (x * inverse (of_nat (Suc k))) = x" - by (simp add: field_eq_simps del: of_nat_Suc) + by (simp add: field_simps del: of_nat_Suc) from H have "b$n = a^Suc k $ n" by (simp add: fps_eq_iff) also have "a ^ Suc k$n = setsum ?g ?Pnkn + setsum ?g ?Pnknn" unfolding fps_power_nth_Suc @@ -1854,7 +1854,7 @@ then have "a$n = ?r $n" apply (simp del: of_nat_Suc) unfolding fps_radical_def n1 - by (simp add: field_eq_simps n1 th00 del: of_nat_Suc)} + by (simp add: field_simps n1 th00 del: of_nat_Suc)} ultimately show "a$n = ?r $ n" by (cases n, auto) qed} then have "a = ?r" by (simp add: fps_eq_iff)} @@ -2018,11 +2018,11 @@ proof- {fix n have "(fps_deriv (a oo b))$n = setsum (\i. a $ i * (fps_deriv (b^i))$n) {0.. Suc n}" - by (simp add: fps_compose_def ring_simps setsum_right_distrib del: of_nat_Suc) + by (simp add: fps_compose_def field_simps setsum_right_distrib del: of_nat_Suc) also have "\ = setsum (\i. a$i * ((fps_const (of_nat i)) * (fps_deriv b * (b^(i - 1))))$n) {0.. Suc n}" - by (simp add: ring_simps fps_deriv_power del: fps_mult_left_const_nth of_nat_Suc) + by (simp add: field_simps fps_deriv_power del: fps_mult_left_const_nth of_nat_Suc) also have "\ = setsum (\i. of_nat i * a$i * (((b^(i - 1)) * fps_deriv b))$n) {0.. Suc n}" - unfolding fps_mult_left_const_nth by (simp add: ring_simps) + unfolding fps_mult_left_const_nth by (simp add: field_simps) also have "\ = setsum (\i. of_nat i * a$i * (setsum (\j. (b^ (i - 1))$j * (fps_deriv b)$(n - j)) {0..n})) {0.. Suc n}" unfolding fps_mult_nth .. also have "\ = setsum (\i. of_nat i * a$i * (setsum (\j. (b^ (i - 1))$j * (fps_deriv b)$(n - j)) {0..n})) {1.. Suc n}" @@ -2170,7 +2170,7 @@ by (auto simp add: fps_eq_iff fps_compose_nth power_0_left setsum_0') lemma fps_compose_add_distrib: "(a + b) oo c = (a oo c) + (b oo c)" - by (simp add: fps_eq_iff fps_compose_nth ring_simps setsum_addf) + by (simp add: fps_eq_iff fps_compose_nth field_simps setsum_addf) lemma fps_compose_setsum_distrib: "(setsum f S) oo a = setsum (\i. f i oo a) S" proof- @@ -2212,7 +2212,7 @@ apply (simp add: fps_mult_nth setsum_right_distrib) apply (subst setsum_commute) apply (rule setsum_cong2) - by (auto simp add: ring_simps) + by (auto simp add: field_simps) also have "\ = ?l" apply (simp add: fps_mult_nth fps_compose_nth setsum_product) apply (rule setsum_cong2) @@ -2312,7 +2312,7 @@ qed lemma fps_compose_uminus: "- (a::'a::ring_1 fps) oo c = - (a oo c)" - by (simp add: fps_eq_iff fps_compose_nth ring_simps setsum_negf[symmetric]) + by (simp add: fps_eq_iff fps_compose_nth field_simps setsum_negf[symmetric]) lemma fps_compose_sub_distrib: shows "(a - b) oo (c::'a::ring_1 fps) = (a oo c) - (b oo c)" @@ -2469,7 +2469,7 @@ proof- let ?r = "fps_inv" have ra0: "?r a $ 0 = 0" by (simp add: fps_inv_def) - from a1 have ra1: "?r a $ 1 \ 0" by (simp add: fps_inv_def field_eq_simps) + from a1 have ra1: "?r a $ 1 \ 0" by (simp add: fps_inv_def field_simps) have X0: "X$0 = 0" by simp from fps_inv[OF ra0 ra1] have "?r (?r a) oo ?r a = X" . then have "?r (?r a) oo ?r a oo a = X oo a" by simp @@ -2486,7 +2486,7 @@ proof- let ?r = "fps_ginv" from c0 have rca0: "?r c a $0 = 0" by (simp add: fps_ginv_def) - from a1 c1 have rca1: "?r c a $ 1 \ 0" by (simp add: fps_ginv_def field_eq_simps) + from a1 c1 have rca1: "?r c a $ 1 \ 0" by (simp add: fps_ginv_def field_simps) from fps_ginv[OF rca0 rca1] have "?r b (?r c a) oo ?r c a = b" . then have "?r b (?r c a) oo ?r c a oo a = b oo a" by simp @@ -2534,8 +2534,8 @@ proof- {fix n have "?l$n = ?r $ n" - apply (auto simp add: E_def field_eq_simps power_Suc[symmetric]simp del: fact_Suc of_nat_Suc power_Suc) - by (simp add: of_nat_mult ring_simps)} + apply (auto simp add: E_def field_simps power_Suc[symmetric]simp del: fact_Suc of_nat_Suc power_Suc) + by (simp add: of_nat_mult field_simps)} then show ?thesis by (simp add: fps_eq_iff) qed @@ -2545,15 +2545,15 @@ proof- {assume d: ?lhs from d have th: "\n. a $ Suc n = c * a$n / of_nat (Suc n)" - by (simp add: fps_deriv_def fps_eq_iff field_eq_simps del: of_nat_Suc) + by (simp add: fps_deriv_def fps_eq_iff field_simps del: of_nat_Suc) {fix n have "a$n = a$0 * c ^ n/ (of_nat (fact n))" apply (induct n) apply simp unfolding th using fact_gt_zero_nat - apply (simp add: field_eq_simps del: of_nat_Suc fact_Suc) + apply (simp add: field_simps del: of_nat_Suc fact_Suc) apply (drule sym) - by (simp add: ring_simps of_nat_mult power_Suc)} + by (simp add: field_simps of_nat_mult power_Suc)} note th' = this have ?rhs by (auto simp add: fps_eq_iff fps_const_mult_left E_def intro : th')} @@ -2570,7 +2570,7 @@ lemma E_add_mult: "E (a + b) = E (a::'a::field_char_0) * E b" (is "?l = ?r") proof- have "fps_deriv (?r) = fps_const (a+b) * ?r" - by (simp add: fps_const_add[symmetric] ring_simps del: fps_const_add) + by (simp add: fps_const_add[symmetric] field_simps del: fps_const_add) then have "?r = ?l" apply (simp only: E_unique_ODE) by (simp add: fps_mult_nth E_def) then show ?thesis .. @@ -2618,13 +2618,13 @@ (is "inverse ?l = ?r") proof- have th: "?l * ?r = 1" - by (auto simp add: ring_simps fps_eq_iff minus_one_power_iff) + by (auto simp add: field_simps fps_eq_iff minus_one_power_iff) have th': "?l $ 0 \ 0" by (simp add: ) from fps_inverse_unique[OF th' th] show ?thesis . qed lemma E_power_mult: "(E (c::'a::field_char_0))^n = E (of_nat n * c)" - by (induct n, auto simp add: ring_simps E_add_mult power_Suc) + by (induct n, auto simp add: field_simps E_add_mult power_Suc) lemma radical_E: assumes r: "r (Suc k) 1 = 1" @@ -2649,18 +2649,18 @@ text{* The generalized binomial theorem as a consequence of @{thm E_add_mult} *} lemma gbinomial_theorem: - "((a::'a::{field_char_0, division_by_zero})+b) ^ n = (\k=0..n. of_nat (n choose k) * a^k * b^(n-k))" + "((a::'a::{field_char_0, division_ring_inverse_zero})+b) ^ n = (\k=0..n. of_nat (n choose k) * a^k * b^(n-k))" proof- from E_add_mult[of a b] have "(E (a + b)) $ n = (E a * E b)$n" by simp then have "(a + b) ^ n = (\i\nat = 0\nat..n. a ^ i * b ^ (n - i) * (of_nat (fact n) / of_nat (fact i * fact (n - i))))" - by (simp add: field_eq_simps fps_mult_nth of_nat_mult[symmetric] setsum_right_distrib) + by (simp add: field_simps fps_mult_nth of_nat_mult[symmetric] setsum_right_distrib) then show ?thesis apply simp apply (rule setsum_cong2) apply simp apply (frule binomial_fact[where ?'a = 'a, symmetric]) - by (simp add: field_eq_simps of_nat_mult) + by (simp add: field_simps of_nat_mult) qed text{* And the nat-form -- also available from Binomial.thy *} @@ -2683,7 +2683,7 @@ by (simp add: L_def fps_eq_iff del: of_nat_Suc) lemma L_nth: "L c $ n = (if n=0 then 0 else 1/c * ((- 1) ^ (n - 1) / of_nat n))" - by (simp add: L_def field_eq_simps) + by (simp add: L_def field_simps) lemma L_0[simp]: "L c $ 0 = 0" by (simp add: L_def) lemma L_E_inv: @@ -2694,9 +2694,9 @@ have b0: "?b $ 0 = 0" by simp have b1: "?b $ 1 \ 0" by (simp add: a) have "fps_deriv (E a - 1) oo fps_inv (E a - 1) = (fps_const a * (E a - 1) + fps_const a) oo fps_inv (E a - 1)" - by (simp add: ring_simps) + by (simp add: field_simps) also have "\ = fps_const a * (X + 1)" apply (simp add: fps_compose_add_distrib fps_const_mult_apply_left[symmetric] fps_inv_right[OF b0 b1]) - by (simp add: ring_simps) + by (simp add: field_simps) finally have eq: "fps_deriv (E a - 1) oo fps_inv (E a - 1) = fps_const a * (X + 1)" . from fps_inv_deriv[OF b0 b1, unfolded eq] have "fps_deriv (fps_inv ?b) = fps_const (inverse a) / (X + 1)" @@ -2713,7 +2713,7 @@ shows "L c + L d = fps_const (c+d) * L (c*d)" (is "?r = ?l") proof- - from c0 d0 have eq: "1/c + 1/d = (c+d)/(c*d)" by (simp add: field_eq_simps) + from c0 d0 have eq: "1/c + 1/d = (c+d)/(c*d)" by (simp add: field_simps) have "fps_deriv ?r = fps_const (1/c + 1/d) * inverse (1 + X)" by (simp add: fps_deriv_L fps_const_add[symmetric] algebra_simps del: fps_const_add) also have "\ = fps_deriv ?l" @@ -2743,7 +2743,7 @@ have "?l = ?r \ inverse ?x1 * ?l = inverse ?x1 * ?r" by simp also have "\ \ ?da = (fps_const c * a) / ?x1" apply (simp only: fps_divide_def mult_assoc[symmetric] inverse_mult_eq_1[OF x10]) - by (simp add: ring_simps) + by (simp add: field_simps) finally have eq: "?l = ?r \ ?lhs" by simp moreover {assume h: "?l = ?r" @@ -2752,8 +2752,8 @@ from lrn have "a$ Suc n = ((c - of_nat n) / of_nat (Suc n)) * a $n" - apply (simp add: ring_simps del: of_nat_Suc) - by (cases n, simp_all add: field_eq_simps del: of_nat_Suc) + apply (simp add: field_simps del: of_nat_Suc) + by (cases n, simp_all add: field_simps del: of_nat_Suc) } note th0 = this {fix n have "a$n = (c gchoose n) * a$0" @@ -2762,24 +2762,24 @@ next case (Suc m) thus ?case unfolding th0 - apply (simp add: field_eq_simps del: of_nat_Suc) + apply (simp add: field_simps del: of_nat_Suc) unfolding mult_assoc[symmetric] gbinomial_mult_1 - by (simp add: ring_simps) + by (simp add: field_simps) qed} note th1 = this have ?rhs apply (simp add: fps_eq_iff) apply (subst th1) - by (simp add: ring_simps)} + by (simp add: field_simps)} moreover {assume h: ?rhs have th00:"\x y. x * (a$0 * y) = a$0 * (x*y)" by (simp add: mult_commute) have "?l = ?r" apply (subst h) apply (subst (2) h) - apply (clarsimp simp add: fps_eq_iff ring_simps) + apply (clarsimp simp add: fps_eq_iff field_simps) unfolding mult_assoc[symmetric] th00 gbinomial_mult_1 - by (simp add: ring_simps gbinomial_mult_1)} + by (simp add: field_simps gbinomial_mult_1)} ultimately show ?thesis by blast qed @@ -2798,9 +2798,9 @@ have "fps_deriv ?P = ?db c * ?b d + ?b c * ?db d - ?db (c + d)" by simp also have "\ = inverse (1 + X) * (fps_const c * ?b c * ?b d + fps_const d * ?b c * ?b d - fps_const (c+d) * ?b (c + d))" unfolding fps_binomial_deriv - by (simp add: fps_divide_def ring_simps) + by (simp add: fps_divide_def field_simps) also have "\ = (fps_const (c + d)/ (1 + X)) * ?P" - by (simp add: ring_simps fps_divide_def fps_const_add[symmetric] del: fps_const_add) + by (simp add: field_simps fps_divide_def fps_const_add[symmetric] del: fps_const_add) finally have th0: "fps_deriv ?P = fps_const (c+d) * ?P / (1 + X)" by (simp add: fps_divide_def) have "?P = fps_const (?P$0) * ?b (c + d)" @@ -2880,7 +2880,7 @@ using kn pochhammer_minus'[where k=k and n=n and b=b] apply (simp add: pochhammer_same) using bn0 - by (simp add: field_eq_simps power_add[symmetric])} + by (simp add: field_simps power_add[symmetric])} moreover {assume nk: "k \ n" have m1nk: "?m1 n = setprod (%i. - 1) {0..m}" @@ -2905,7 +2905,7 @@ unfolding m1nk unfolding m h pochhammer_Suc_setprod - apply (simp add: field_eq_simps del: fact_Suc id_def) + apply (simp add: field_simps del: fact_Suc id_def) unfolding fact_altdef_nat id_def unfolding of_nat_setprod unfolding setprod_timesf[symmetric] @@ -2942,10 +2942,10 @@ apply auto done then have th2: "(?m1 n * ?p b n)/pochhammer (b - of_nat n + 1) k = setprod (%i. b - of_nat i) {0.. n - k - 1}" - using nz' by (simp add: field_eq_simps) + using nz' by (simp add: field_simps) have "(?m1 n * ?p b n * ?m1 k * ?p (of_nat n) k) / (?f n * pochhammer (b - of_nat n + 1) k) = ((?m1 k * ?p (of_nat n) k) / ?f n) * ((?m1 n * ?p b n)/pochhammer (b - of_nat n + 1) k)" using bnz0 - by (simp add: field_eq_simps) + by (simp add: field_simps) also have "\ = b gchoose (n - k)" unfolding th1 th2 using kn' by (simp add: gbinomial_def) @@ -2959,15 +2959,15 @@ note th00 = this have "?r = ((a + b) gchoose n) * (of_nat (fact n)/ (?m1 n * pochhammer (- b) n))" unfolding gbinomial_pochhammer - using bn0 by (auto simp add: field_eq_simps) + using bn0 by (auto simp add: field_simps) also have "\ = ?l" unfolding gbinomial_Vandermonde[symmetric] apply (simp add: th00) unfolding gbinomial_pochhammer - using bn0 apply (simp add: setsum_left_distrib setsum_right_distrib field_eq_simps) + using bn0 apply (simp add: setsum_left_distrib setsum_right_distrib field_simps) apply (rule setsum_cong2) apply (drule th00(2)) - by (simp add: field_eq_simps power_add[symmetric]) + by (simp add: field_simps power_add[symmetric]) finally show ?thesis by simp qed @@ -2992,7 +2992,7 @@ have nz: "pochhammer c n \ 0" using c by (simp add: pochhammer_eq_0_iff) from Vandermonde_pochhammer_lemma[where a = "?a" and b="?b" and n=n, OF h, unfolded th0 th1] - show ?thesis using nz by (simp add: field_eq_simps setsum_right_distrib) + show ?thesis using nz by (simp add: field_simps setsum_right_distrib) qed subsubsection{* Formal trigonometric functions *} @@ -3014,11 +3014,11 @@ using en by (simp add: fps_sin_def) also have "\ = (- 1)^(n div 2) * c^Suc n * (of_nat (n+1) / (of_nat (Suc n) * of_nat (fact n)))" unfolding fact_Suc of_nat_mult - by (simp add: field_eq_simps del: of_nat_add of_nat_Suc) + by (simp add: field_simps del: of_nat_add of_nat_Suc) also have "\ = (- 1)^(n div 2) *c^Suc n / of_nat (fact n)" - by (simp add: field_eq_simps del: of_nat_add of_nat_Suc) + by (simp add: field_simps del: of_nat_add of_nat_Suc) finally have "?lhs $n = ?rhs$n" using en - by (simp add: fps_cos_def ring_simps power_Suc )} + by (simp add: fps_cos_def field_simps power_Suc )} then show "?lhs $ n = ?rhs $ n" by (cases "even n", simp_all add: fps_deriv_def fps_sin_def fps_cos_def) qed @@ -3038,13 +3038,13 @@ using en by (simp add: fps_cos_def) also have "\ = (- 1)^((n + 1) div 2)*c^Suc n * (of_nat (n+1) / (of_nat (Suc n) * of_nat (fact n)))" unfolding fact_Suc of_nat_mult - by (simp add: field_eq_simps del: of_nat_add of_nat_Suc) + by (simp add: field_simps del: of_nat_add of_nat_Suc) also have "\ = (- 1)^((n + 1) div 2) * c^Suc n / of_nat (fact n)" - by (simp add: field_eq_simps del: of_nat_add of_nat_Suc) + by (simp add: field_simps del: of_nat_add of_nat_Suc) also have "\ = (- ((- 1)^((n - 1) div 2))) * c^Suc n / of_nat (fact n)" unfolding th0 unfolding th1[OF en] by simp finally have "?lhs $n = ?rhs$n" using en - by (simp add: fps_sin_def ring_simps power_Suc)} + by (simp add: fps_sin_def field_simps power_Suc)} then show "?lhs $ n = ?rhs $ n" by (cases "even n", simp_all add: fps_deriv_def fps_sin_def fps_cos_def) @@ -3055,7 +3055,7 @@ proof- have "fps_deriv ?lhs = 0" apply (simp add: fps_deriv_power fps_sin_deriv fps_cos_deriv power_Suc) - by (simp add: ring_simps fps_const_neg[symmetric] del: fps_const_neg) + by (simp add: field_simps fps_const_neg[symmetric] del: fps_const_neg) then have "?lhs = fps_const (?lhs $ 0)" unfolding fps_deriv_eq_0_iff . also have "\ = 1" @@ -3177,7 +3177,7 @@ have th0: "fps_cos c $ 0 \ 0" by (simp add: fps_cos_def) show ?thesis using fps_sin_cos_sum_of_squares[of c] - apply (simp add: fps_tan_def fps_divide_deriv[OF th0] fps_sin_deriv fps_cos_deriv add: fps_const_neg[symmetric] ring_simps power2_eq_square del: fps_const_neg) + apply (simp add: fps_tan_def fps_divide_deriv[OF th0] fps_sin_deriv fps_cos_deriv add: fps_const_neg[symmetric] field_simps power2_eq_square del: fps_const_neg) unfolding right_distrib[symmetric] by simp qed @@ -3252,7 +3252,7 @@ subsection {* Hypergeometric series *} -definition "F as bs (c::'a::{field_char_0, division_by_zero}) = Abs_fps (%n. (foldl (%r a. r* pochhammer a n) 1 as * c^n)/ (foldl (%r b. r * pochhammer b n) 1 bs * of_nat (fact n)))" +definition "F as bs (c::'a::{field_char_0, division_ring_inverse_zero}) = Abs_fps (%n. (foldl (%r a. r* pochhammer a n) 1 as * c^n)/ (foldl (%r b. r * pochhammer b n) 1 bs * of_nat (fact n)))" lemma F_nth[simp]: "F as bs c $ n = (foldl (%r a. r* pochhammer a n) 1 as * c^n)/ (foldl (%r b. r * pochhammer b n) 1 bs * of_nat (fact n))" by (simp add: F_def) @@ -3321,9 +3321,9 @@ by (simp add: fps_eq_iff fps_integral_def) lemma F_minus_nat: - "F [- of_nat n] [- of_nat (n + m)] (c::'a::{field_char_0, division_by_zero}) $ k = (if k <= n then pochhammer (- of_nat n) k * c ^ k / + "F [- of_nat n] [- of_nat (n + m)] (c::'a::{field_char_0, division_ring_inverse_zero}) $ k = (if k <= n then pochhammer (- of_nat n) k * c ^ k / (pochhammer (- of_nat (n + m)) k * of_nat (fact k)) else 0)" - "F [- of_nat m] [- of_nat (m + n)] (c::'a::{field_char_0, division_by_zero}) $ k = (if k <= m then pochhammer (- of_nat m) k * c ^ k / + "F [- of_nat m] [- of_nat (m + n)] (c::'a::{field_char_0, division_ring_inverse_zero}) $ k = (if k <= m then pochhammer (- of_nat m) k * c ^ k / (pochhammer (- of_nat (m + n)) k * of_nat (fact k)) else 0)" by (auto simp add: pochhammer_eq_0_iff) diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Library/Fraction_Field.thy --- a/src/HOL/Library/Fraction_Field.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Library/Fraction_Field.thy Mon Apr 26 13:43:31 2010 +0200 @@ -267,7 +267,7 @@ end -instance fract :: (idom) division_by_zero +instance fract :: (idom) division_ring_inverse_zero proof show "inverse 0 = (0:: 'a fract)" by (simp add: fract_expand) (simp add: fract_collapse) @@ -450,7 +450,7 @@ by simp with F have "(a * d) * (b * d) * ?F * ?F \ (c * b) * (b * d) * ?F * ?F" by (simp add: mult_le_cancel_right) - with neq show ?thesis by (simp add: ring_simps) + with neq show ?thesis by (simp add: field_simps) qed qed show "q < r ==> 0 < s ==> s * q < s * r" diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Library/Numeral_Type.thy --- a/src/HOL/Library/Numeral_Type.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Library/Numeral_Type.thy Mon Apr 26 13:43:31 2010 +0200 @@ -213,7 +213,7 @@ lemma comm_ring_1: "OFCLASS('a, comm_ring_1_class)" apply (intro_classes, unfold definitions) -apply (simp_all add: Rep_simps zmod_simps ring_simps) +apply (simp_all add: Rep_simps zmod_simps field_simps) done end diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Library/Polynomial.thy --- a/src/HOL/Library/Polynomial.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Library/Polynomial.thy Mon Apr 26 13:43:31 2010 +0200 @@ -1093,10 +1093,10 @@ apply (cases "r = 0") apply (cases "r' = 0") apply (simp add: pdivmod_rel_def) -apply (simp add: pdivmod_rel_def ring_simps degree_mult_eq) +apply (simp add: pdivmod_rel_def field_simps degree_mult_eq) apply (cases "r' = 0") apply (simp add: pdivmod_rel_def degree_mult_eq) -apply (simp add: pdivmod_rel_def ring_simps) +apply (simp add: pdivmod_rel_def field_simps) apply (simp add: degree_mult_eq degree_add_less) done diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Library/Sum_Of_Squares/sum_of_squares.ML --- a/src/HOL/Library/Sum_Of_Squares/sum_of_squares.ML Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Library/Sum_Of_Squares/sum_of_squares.ML Mon Apr 26 13:43:31 2010 +0200 @@ -1282,9 +1282,9 @@ fun simple_cterm_ord t u = Term_Ord.fast_term_ord (term_of t, term_of u) = LESS val concl = Thm.dest_arg o cprop_of val shuffle1 = - fconv_rule (rewr_conv @{lemma "(a + x == y) == (x == y - (a::real))" by (atomize (full)) (simp add: ring_simps) }) + fconv_rule (rewr_conv @{lemma "(a + x == y) == (x == y - (a::real))" by (atomize (full)) (simp add: field_simps) }) val shuffle2 = - fconv_rule (rewr_conv @{lemma "(x + a == y) == (x == y - (a::real))" by (atomize (full)) (simp add: ring_simps)}) + fconv_rule (rewr_conv @{lemma "(x + a == y) == (x == y - (a::real))" by (atomize (full)) (simp add: field_simps)}) fun substitutable_monomial fvs tm = case term_of tm of Free(_,@{typ real}) => if not (member (op aconvc) fvs tm) then (Rat.one,tm) else raise Failure "substitutable_monomial" diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Multivariate_Analysis/Brouwer_Fixpoint.thy --- a/src/HOL/Multivariate_Analysis/Brouwer_Fixpoint.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Multivariate_Analysis/Brouwer_Fixpoint.thy Mon Apr 26 13:43:31 2010 +0200 @@ -1383,7 +1383,7 @@ apply(rule_tac x=x in bexI) apply assumption+ apply(rule continuous_on_intros)+ unfolding frontier_cball subset_eq Ball_def image_iff apply(rule,rule,erule bexE) unfolding vector_dist_norm apply(simp add: * norm_minus_commute) . note x = this - hence "scaleR 2 a = scaleR 1 x + scaleR 1 x" by(auto simp add:group_simps) + hence "scaleR 2 a = scaleR 1 x + scaleR 1 x" by(auto simp add:algebra_simps) hence "a = x" unfolding scaleR_left_distrib[THEN sym] by auto thus False using x using assms by auto qed @@ -1396,7 +1396,7 @@ "interval_bij (a,b) (u,v) = (\x. (\ i. (v$i - u$i) / (b$i - a$i) * x$i) + (\ i. u$i - (v$i - u$i) / (b$i - a$i) * a$i))" apply rule unfolding Cart_eq interval_bij_def vector_component_simps - by(auto simp add:group_simps field_simps add_divide_distrib[THEN sym]) + by(auto simp add: field_simps add_divide_distrib[THEN sym]) lemma continuous_interval_bij: "continuous (at x) (interval_bij (a,b::real^'n) (u,v))" diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Multivariate_Analysis/Convex_Euclidean_Space.thy --- a/src/HOL/Multivariate_Analysis/Convex_Euclidean_Space.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Multivariate_Analysis/Convex_Euclidean_Space.thy Mon Apr 26 13:43:31 2010 +0200 @@ -646,7 +646,7 @@ using assms(1)[unfolded convex_on_def, THEN bspec[where x=x], THEN bspec[where x=y], THEN spec[where x=u]] using assms(2)[unfolded convex_on_def, THEN bspec[where x=x], THEN bspec[where x=y], THEN spec[where x=u]] apply - apply(rule add_mono) by auto - hence "f (u *\<^sub>R x + v *\<^sub>R y) + g (u *\<^sub>R x + v *\<^sub>R y) \ u * (f x + g x) + v * (f y + g y)" by (simp add: ring_simps) } + hence "f (u *\<^sub>R x + v *\<^sub>R y) + g (u *\<^sub>R x + v *\<^sub>R y) \ u * (f x + g x) + v * (f y + g y)" by (simp add: field_simps) } thus ?thesis unfolding convex_on_def by auto qed @@ -654,7 +654,7 @@ assumes "0 \ (c::real)" "convex_on s f" shows "convex_on s (\x. c * f x)" proof- - have *:"\u c fx v fy ::real. u * (c * fx) + v * (c * fy) = c * (u * fx + v * fy)" by (simp add: ring_simps) + have *:"\u c fx v fy ::real. u * (c * fx) + v * (c * fy) = c * (u * fx + v * fy)" by (simp add: field_simps) show ?thesis using assms(2) and mult_mono1[OF _ assms(1)] unfolding convex_on_def and * by auto qed @@ -1060,7 +1060,7 @@ proof- have fin:"finite {a,b,c}" "finite {b,c}" "finite {c}" by auto have *:"\x y z ::real. x + y + z = 1 \ x = 1 - y - z" - "\x y z ::real^_. x + y + z = 1 \ x = 1 - y - z" by (auto simp add: ring_simps) + "\x y z ::real^_. x + y + z = 1 \ x = 1 - y - z" by (auto simp add: field_simps) show ?thesis unfolding convex_hull_finite[OF fin(1)] and Collect_def and convex_hull_finite_step[OF fin(2)] and * unfolding convex_hull_finite_step[OF fin(3)] apply(rule ext) apply simp apply auto apply(rule_tac x=va in exI) apply (rule_tac x="u c" in exI) apply simp @@ -2310,7 +2310,7 @@ } moreover { fix a b assume "\ u * a + v * b \ a" hence "v * b > (1 - u) * a" unfolding not_le using as(4) by(auto simp add: field_simps) - hence "a < b" unfolding * using as(4) apply(rule_tac mult_left_less_imp_less) by(auto simp add: ring_simps) + hence "a < b" unfolding * using as(4) apply(rule_tac mult_left_less_imp_less) by(auto simp add: field_simps) hence "u * a + v * b \ b" unfolding ** using **(2) as(3) by(auto simp add: field_simps intro!:mult_right_mono) } ultimately show "u *\<^sub>R x + v *\<^sub>R y \ s" apply- apply(rule assms[unfolded is_interval_def, rule_format, OF as(1,2)]) using as(3-) dimindex_ge_1 apply- by(auto simp add: vector_component) qed diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Multivariate_Analysis/Derivative.thy --- a/src/HOL/Multivariate_Analysis/Derivative.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Multivariate_Analysis/Derivative.thy Mon Apr 26 13:43:31 2010 +0200 @@ -1,11 +1,12 @@ -(* Title: HOL/Library/Convex_Euclidean_Space.thy - Author: John Harrison - Translation from HOL light: Robert Himmelmann, TU Muenchen *) +(* Title: HOL/Multivariate_Analysis/Derivative.thy + Author: John Harrison + Translation from HOL Light: Robert Himmelmann, TU Muenchen +*) header {* Multivariate calculus in Euclidean space. *} theory Derivative - imports Brouwer_Fixpoint RealVector +imports Brouwer_Fixpoint RealVector begin @@ -40,7 +41,7 @@ show ?l unfolding deriv_def LIM_def apply safe apply(drule as,safe) apply(rule_tac x=d in exI,safe) apply(erule_tac x="xa + x" in allE) unfolding vector_dist_norm diff_0_right norm_scaleR - unfolding vector_dist_norm netlimit_at[of x] by(auto simp add:group_simps *) qed + unfolding vector_dist_norm netlimit_at[of x] by(auto simp add:algebra_simps *) qed lemma FDERIV_conv_has_derivative:"FDERIV f (x::'a::{real_normed_vector,perfect_space}) :> f' = (f has_derivative f') (at x)" (is "?l = ?r") proof assume ?l note as = this[unfolded fderiv_def] @@ -50,14 +51,14 @@ thus "\d>0. \xa. 0 < dist xa x \ dist xa x < d \ dist ((1 / norm (xa - netlimit (at x))) *\<^sub>R (f xa - (f (netlimit (at x)) + f' (xa - netlimit (at x))))) (0) < e" apply(rule_tac x=d in exI) apply(erule conjE,rule,assumption) apply rule apply(erule_tac x="xa - x" in allE) - unfolding vector_dist_norm netlimit_at[of x] by(auto simp add:group_simps) qed next + unfolding vector_dist_norm netlimit_at[of x] by (auto simp add: diff_diff_eq) qed next assume ?r note as = this[unfolded has_derivative_def] show ?l unfolding fderiv_def LIM_def apply-apply(rule,rule as[THEN conjunct1]) proof(rule,rule) fix e::real assume "e>0" guess d using as[THEN conjunct2,unfolded Lim_at,rule_format,OF`e>0`] .. thus "\s>0. \xa. xa \ 0 \ dist xa 0 < s \ dist (norm (f (x + xa) - f x - f' xa) / norm xa) 0 < e" apply- apply(rule_tac x=d in exI) apply(erule conjE,rule,assumption) apply rule apply(erule_tac x="xa + x" in allE) - unfolding vector_dist_norm netlimit_at[of x] by(auto simp add:group_simps) qed qed + unfolding vector_dist_norm netlimit_at[of x] by (auto simp add: diff_diff_eq add.commute) qed qed subsection {* These are the only cases we'll care about, probably. *} @@ -76,7 +77,7 @@ (\e>0. \d>0. \x'\s. 0 < norm(x' - x) \ norm(x' - x) < d \ norm(f x' - f x - f'(x' - x)) / norm(x' - x) < e)" unfolding has_derivative_within Lim_within vector_dist_norm - unfolding diff_0_right norm_mul by(simp add: group_simps) + unfolding diff_0_right norm_mul by (simp add: diff_diff_eq) lemma has_derivative_at': "(f has_derivative f') (at x) \ bounded_linear f' \ @@ -186,14 +187,14 @@ note as = assms[unfolded has_derivative_def] show ?thesis unfolding has_derivative_def apply(rule,rule bounded_linear_add) using Lim_add[OF as(1)[THEN conjunct2] as(2)[THEN conjunct2]] and as - by(auto simp add:group_simps scaleR_right_diff_distrib scaleR_right_distrib) qed + by (auto simp add:algebra_simps scaleR_right_diff_distrib scaleR_right_distrib) qed lemma has_derivative_add_const:"(f has_derivative f') net \ ((\x. f x + c) has_derivative f') net" apply(drule has_derivative_add) apply(rule has_derivative_const) by auto lemma has_derivative_sub: "(f has_derivative f') net \ (g has_derivative g') net \ ((\x. f(x) - g(x)) has_derivative (\h. f'(h) - g'(h))) net" - apply(drule has_derivative_add) apply(drule has_derivative_neg,assumption) by(simp add:group_simps) + apply(drule has_derivative_add) apply(drule has_derivative_neg,assumption) by(simp add:algebra_simps) lemma has_derivative_setsum: assumes "finite s" "\a\s. ((f a) has_derivative (f' a)) net" shows "((\x. setsum (\a. f a x) s) has_derivative (\h. setsum (\a. f' a h) s)) net" @@ -391,8 +392,8 @@ case False hence "norm (f y - (f x + f' (y - x))) < e * norm (y - x)" using as(4)[rule_format, OF `y\s`] unfolding vector_dist_norm diff_0_right norm_mul using as(3) using pos_divide_less_eq[OF False[unfolded dist_nz], unfolded vector_dist_norm] - by(auto simp add:linear_0 linear_sub group_simps) - thus ?thesis by(auto simp add:group_simps) qed qed next + by (auto simp add: linear_0 linear_sub) + thus ?thesis by(auto simp add:algebra_simps) qed qed next assume ?rhs thus ?lhs unfolding has_derivative_within Lim_within apply-apply(erule conjE,rule,assumption) apply(rule,erule_tac x="e/2" in allE,rule,erule impE) defer apply(erule exE,rule_tac x=d in exI) apply(erule conjE,rule,assumption,rule,rule) unfolding vector_dist_norm diff_0_right norm_scaleR @@ -400,7 +401,7 @@ fix e d y assume "bounded_linear f'" "0 < e" "0 < d" "y \ s" "0 < norm (y - x) \ norm (y - x) < d" "norm (f y - f x - f' (y - x)) \ e / 2 * norm (y - x)" thus "\1 / norm (y - x)\ * norm (f y - (f x + f' (y - x))) < e" - apply(rule_tac le_less_trans[of _ "e/2"]) by(auto intro!:mult_imp_div_pos_le simp add:group_simps) qed auto qed + apply(rule_tac le_less_trans[of _ "e/2"]) by(auto intro!:mult_imp_div_pos_le simp add:algebra_simps) qed auto qed lemma has_derivative_at_alt: "(f has_derivative f') (at x) \ bounded_linear f' \ @@ -435,8 +436,8 @@ hence 1:"norm (f y - f x - f' (y - x)) \ min (norm (y - x)) (e / 2 / B2 * norm (y - x))" using d1 d2 d by auto have "norm (f y - f x) \ norm (f y - f x - f' (y - x)) + norm (f' (y - x))" - using norm_triangle_sub[of "f y - f x" "f' (y - x)"] by(auto simp add:group_simps) - also have "\ \ norm (f y - f x - f' (y - x)) + B1 * norm (y - x)" apply(rule add_left_mono) using B1 by(auto simp add:group_simps) + using norm_triangle_sub[of "f y - f x" "f' (y - x)"] by(auto simp add:algebra_simps) + also have "\ \ norm (f y - f x - f' (y - x)) + B1 * norm (y - x)" apply(rule add_left_mono) using B1 by(auto simp add:algebra_simps) also have "\ \ min (norm (y - x)) (e / 2 / B2 * norm (y - x)) + B1 * norm (y - x)" apply(rule add_right_mono) using d1 d2 d as by auto also have "\ \ norm (y - x) + B1 * norm (y - x)" by auto also have "\ = norm (y - x) * (1 + B1)" by(auto simp add:field_simps) @@ -453,8 +454,8 @@ interpret g': bounded_linear g' using assms(2) by auto interpret f': bounded_linear f' using assms(1) by auto have "norm (- g' (f' (y - x)) + g' (f y - f x)) = norm (g' (f y - f x - f' (y - x)))" - by(auto simp add:group_simps f'.diff g'.diff g'.add) - also have "\ \ B2 * norm (f y - f x - f' (y - x))" using B2 by(auto simp add:group_simps) + by(auto simp add:algebra_simps f'.diff g'.diff g'.add) + also have "\ \ B2 * norm (f y - f x - f' (y - x))" using B2 by(auto simp add:algebra_simps) also have "\ \ B2 * (e / 2 / B2 * norm (y - x))" apply(rule mult_left_mono) using as d1 d2 d B2 by auto also have "\ \ e / 2 * norm (y - x)" using B2 by auto finally have 5:"norm (- g' (f' (y - x)) + g' (f y - f x)) \ e / 2 * norm (y - x)" by auto @@ -535,7 +536,7 @@ unfolding scaleR_right_distrib by auto also have "\ = norm ((1 / abs c) *\<^sub>R (c *\<^sub>R (- (f' (basis i)) + f'' (basis i))))" unfolding f'.scaleR f''.scaleR unfolding scaleR_right_distrib scaleR_minus_right by auto - also have "\ = e" unfolding e_def norm_mul using c[THEN conjunct1] using norm_minus_cancel[of "f' (basis i) - f'' (basis i)"] by(auto simp add:group_simps) + also have "\ = e" unfolding e_def norm_mul using c[THEN conjunct1] using norm_minus_cancel[of "f' (basis i) - f'' (basis i)"] by (auto simp add: add.commute ab_diff_minus) finally show False using c using d[THEN conjunct2,rule_format,of "x + c *\<^sub>R basis i"] using norm_basis[of i] unfolding vector_dist_norm unfolding f'.scaleR f''.scaleR f'.add f''.add f'.diff f''.diff scaleR_scaleR scaleR_right_diff_distrib scaleR_right_distrib by auto qed qed @@ -623,7 +624,7 @@ have ***:"\y y1 y2 d dx::real. (y1\y\y2\y) \ (y\y1\y\y2) \ d < abs dx \ abs(y1 - y - - dx) \ d \ (abs (y2 - y - dx) \ d) \ False" by arith show False apply(rule ***[OF **, where dx="d * D $ k $ j" and d="\D $ k $ j\ / 2 * \d\"]) using *[of "-d"] and *[of d] and d[THEN conjunct1] and j unfolding mult_minus_left - unfolding abs_mult diff_minus_eq_add scaleR.minus_left unfolding group_simps by (auto intro: mult_pos_pos) + unfolding abs_mult diff_minus_eq_add scaleR.minus_left unfolding algebra_simps by (auto intro: mult_pos_pos) qed subsection {* In particular if we have a mapping into @{typ "real^1"}. *} @@ -727,7 +728,7 @@ shows "norm(f x - f y) \ B * norm(x - y)" proof- let ?p = "\u. x + u *\<^sub>R (y - x)" have *:"\u. u\{0..1} \ x + u *\<^sub>R (y - x) \ s" - using assms(1)[unfolded convex_alt,rule_format,OF x y] unfolding scaleR_left_diff_distrib scaleR_right_diff_distrib by(auto simp add:group_simps) + using assms(1)[unfolded convex_alt,rule_format,OF x y] unfolding scaleR_left_diff_distrib scaleR_right_diff_distrib by(auto simp add:algebra_simps) hence 1:"continuous_on {0..1} (f \ ?p)" apply- apply(rule continuous_on_intros continuous_on_vmul)+ unfolding continuous_on_eq_continuous_within apply(rule,rule differentiable_imp_continuous_within) unfolding differentiable_def apply(rule_tac x="f' xa" in exI) @@ -862,7 +863,7 @@ assumes "compact t" "convex t" "t \ {}" "continuous_on t f" "\x\s. \y\t. x + (y - f y) \ t" "x\s" shows "\y\t. f y = x" proof- - have *:"\x y. f y = x \ x + (y - f y) = y" by(auto simp add:group_simps) + have *:"\x y. f y = x \ x + (y - f y) = y" by(auto simp add:algebra_simps) show ?thesis unfolding * apply(rule brouwer[OF assms(1-3), of "\y. x + (y - f y)"]) apply(rule continuous_on_intros assms)+ using assms(4-6) by auto qed @@ -907,8 +908,8 @@ finally have *:"norm (x + g' (z - f x) - x) < e0" by auto have **:"f x + f' (x + g' (z - f x) - x) = z" using assms(6)[unfolded o_def id_def,THEN cong] by auto have "norm (f x - (y + (z - f (x + g' (z - f x))))) \ norm (f (x + g' (z - f x)) - z) + norm (f x - y)" - using norm_triangle_ineq[of "f (x + g'(z - f x)) - z" "f x - y"] by(auto simp add:group_simps) - also have "\ \ 1 / (B * 2) * norm (g' (z - f x)) + norm (f x - y)" using e0[THEN conjunct2,rule_format,OF *] unfolding group_simps ** by auto + using norm_triangle_ineq[of "f (x + g'(z - f x)) - z" "f x - y"] by(auto simp add:algebra_simps) + also have "\ \ 1 / (B * 2) * norm (g' (z - f x)) + norm (f x - y)" using e0[THEN conjunct2,rule_format,OF *] unfolding algebra_simps ** by auto also have "\ \ 1 / (B * 2) * norm (g' (z - f x)) + e/2" using as(1)[unfolded mem_cball vector_dist_norm] by auto also have "\ \ 1 / (B * 2) * B * norm (z - f x) + e/2" using * and B by(auto simp add:field_simps) also have "\ \ 1 / 2 * norm (z - f x) + e/2" by auto @@ -983,7 +984,7 @@ (* we know for some other reason that the inverse function exists, it's OK. *} lemma bounded_linear_sub: "bounded_linear f \ bounded_linear g ==> bounded_linear (\x. f x - g x)" - using bounded_linear_add[of f "\x. - g x"] bounded_linear_minus[of g] by(auto simp add:group_simps) + using bounded_linear_add[of f "\x. - g x"] bounded_linear_minus[of g] by(auto simp add:algebra_simps) lemma has_derivative_locally_injective: fixes f::"real^'n \ real^'m" assumes "a \ s" "open s" "bounded_linear g'" "g' o f'(a) = id" @@ -1004,7 +1005,7 @@ show "\x\ball a d. \x'\ball a d. f x' = f x \ x' = x" proof(intro strip) fix x y assume as:"x\ball a d" "y\ball a d" "f x = f y" def ph \ "\w. w - g'(f w - f x)" have ph':"ph = g' \ (\w. f' a w - (f w - f x))" - unfolding ph_def o_def unfolding diff using f'g' by(auto simp add:group_simps) + unfolding ph_def o_def unfolding diff using f'g' by(auto simp add:algebra_simps) have "norm (ph x - ph y) \ (1/2) * norm (x - y)" apply(rule differentiable_bound[OF convex_ball _ _ as(1-2), where f'="\x v. v - g'(f' x v)"]) apply(rule_tac[!] ballI) proof- fix u assume u:"u \ ball a d" hence "u\s" using d d2 by auto @@ -1020,7 +1021,7 @@ unfolding linear_conv_bounded_linear by(rule assms(3) **)+ also have "\ \ onorm g' * k" apply(rule mult_left_mono) using d1[THEN conjunct2,rule_format,of u] using onorm_neg[OF **(1)[unfolded linear_linear]] - using d and u and onorm_pos_le[OF assms(3)[unfolded linear_linear]] by(auto simp add:group_simps) + using d and u and onorm_pos_le[OF assms(3)[unfolded linear_linear]] by(auto simp add:algebra_simps) also have "\ \ 1/2" unfolding k_def by auto finally show "onorm (\v. v - g' (f' u v)) \ 1 / 2" by assumption qed moreover have "norm (ph y - ph x) = norm (y - x)" apply(rule arg_cong[where f=norm]) @@ -1039,7 +1040,7 @@ fix x assume "x\s" show "((\a. f m a - f n a) has_derivative (\h. f' m x h - f' n x h)) (at x within s)" by(rule has_derivative_intros assms(2)[rule_format] `x\s`)+ { fix h have "norm (f' m x h - f' n x h) \ norm (f' m x h - g' x h) + norm (f' n x h - g' x h)" - using norm_triangle_ineq[of "f' m x h - g' x h" "- f' n x h + g' x h"] unfolding norm_minus_commute by(auto simp add:group_simps) + using norm_triangle_ineq[of "f' m x h - g' x h" "- f' n x h + g' x h"] unfolding norm_minus_commute by(auto simp add:algebra_simps) also have "\ \ e * norm h+ e * norm h" using assms(3)[rule_format,OF `N\m` `x\s`, of h] assms(3)[rule_format,OF `N\n` `x\s`, of h] by(auto simp add:field_simps) finally have "norm (f' m x h - f' n x h) \ 2 * e * norm h" by auto } @@ -1083,7 +1084,7 @@ have "eventually (\xa. norm (f n x - f n y - (f xa x - f xa y)) \ e * norm (x - y)) sequentially" unfolding eventually_sequentially apply(rule_tac x=N in exI) proof(rule,rule) fix m assume "N\m" thus "norm (f n x - f n y - (f m x - f m y)) \ e * norm (x - y)" - using N[rule_format, of n m x y] and as by(auto simp add:group_simps) qed + using N[rule_format, of n m x y] and as by(auto simp add:algebra_simps) qed thus "norm (f n x - f n y - (g x - g y)) \ e * norm (x - y)" apply- apply(rule Lim_norm_ubound[OF trivial_limit_sequentially, where f="\m. (f n x - f n y) - (f m x - f m y)"]) apply(rule Lim_sub Lim_const g[rule_format] as)+ by assumption qed qed @@ -1120,10 +1121,10 @@ have "norm (f ?N y - f ?N x - f' ?N x (y - x)) \ e / 3 * norm (y - x)" using d1 and as by auto ultimately have "norm (g y - g x - f' ?N x (y - x)) \ 2 * e / 3 * norm (y - x)" using norm_triangle_le[of "g y - g x - (f ?N y - f ?N x)" "f ?N y - f ?N x - f' ?N x (y - x)" "2 * e / 3 * norm (y - x)"] - by (auto simp add:group_simps) moreover + by (auto simp add:algebra_simps) moreover have " norm (f' ?N x (y - x) - g' x (y - x)) \ e / 3 * norm (y - x)" using N1 `x\s` by auto ultimately show "norm (g y - g x - g' x (y - x)) \ e * norm (y - x)" - using norm_triangle_le[of "g y - g x - f' (max N1 N2) x (y - x)" "f' (max N1 N2) x (y - x) - g' x (y - x)"] by(auto simp add:group_simps) + using norm_triangle_le[of "g y - g x - f' (max N1 N2) x (y - x)" "f' (max N1 N2) x (y - x) - g' x (y - x)"] by(auto simp add:algebra_simps) qed qed qed qed subsection {* Can choose to line up antiderivatives if we want. *} @@ -1274,7 +1275,7 @@ unfolding has_vector_derivative_def using has_derivative_id by auto lemma has_vector_derivative_cmul: "(f has_vector_derivative f') net \ ((\x. c *\<^sub>R f x) has_vector_derivative (c *\<^sub>R f')) net" - unfolding has_vector_derivative_def apply(drule has_derivative_cmul) by(auto simp add:group_simps) + unfolding has_vector_derivative_def apply(drule has_derivative_cmul) by(auto simp add:algebra_simps) lemma has_vector_derivative_cmul_eq: assumes "c \ 0" shows "(((\x. c *\<^sub>R f x) has_vector_derivative (c *\<^sub>R f')) net \ (f has_vector_derivative f') net)" diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Multivariate_Analysis/Determinants.thy --- a/src/HOL/Multivariate_Analysis/Determinants.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Multivariate_Analysis/Determinants.thy Mon Apr 26 13:43:31 2010 +0200 @@ -55,7 +55,7 @@ done (* FIXME: In Finite_Set there is a useless further assumption *) -lemma setprod_inversef: "finite A ==> setprod (inverse \ f) A = (inverse (setprod f A) :: 'a:: {division_by_zero, field})" +lemma setprod_inversef: "finite A ==> setprod (inverse \ f) A = (inverse (setprod f A) :: 'a:: {division_ring_inverse_zero, field})" apply (erule finite_induct) apply (simp) apply simp @@ -352,13 +352,13 @@ apply (rule setprod_insert) apply simp by blast - also have "\ = (a k $ p k * setprod (\i. ?f i $ p i) ?Uk) + (b k$ p k * setprod (\i. ?f i $ p i) ?Uk)" by (simp add: ring_simps) + also have "\ = (a k $ p k * setprod (\i. ?f i $ p i) ?Uk) + (b k$ p k * setprod (\i. ?f i $ p i) ?Uk)" by (simp add: field_simps) also have "\ = (a k $ p k * setprod (\i. ?g i $ p i) ?Uk) + (b k$ p k * setprod (\i. ?h i $ p i) ?Uk)" by (metis th1 th2) also have "\ = setprod (\i. ?g i $ p i) (insert k ?Uk) + setprod (\i. ?h i $ p i) (insert k ?Uk)" unfolding setprod_insert[OF th3] by simp finally have "setprod (\i. ?f i $ p i) ?U = setprod (\i. ?g i $ p i) ?U + setprod (\i. ?h i $ p i) ?U" unfolding kU[symmetric] . then show "of_int (sign p) * setprod (\i. ?f i $ p i) ?U = of_int (sign p) * setprod (\i. ?g i $ p i) ?U + of_int (sign p) * setprod (\i. ?h i $ p i) ?U" - by (simp add: ring_simps) + by (simp add: field_simps) qed lemma det_row_mul: @@ -389,14 +389,14 @@ apply (rule setprod_insert) apply simp by blast - also have "\ = (c*s a k) $ p k * setprod (\i. ?f i $ p i) ?Uk" by (simp add: ring_simps) + also have "\ = (c*s a k) $ p k * setprod (\i. ?f i $ p i) ?Uk" by (simp add: field_simps) also have "\ = c* (a k $ p k * setprod (\i. ?g i $ p i) ?Uk)" unfolding th1 by (simp add: mult_ac) also have "\ = c* (setprod (\i. ?g i $ p i) (insert k ?Uk))" unfolding setprod_insert[OF th3] by simp finally have "setprod (\i. ?f i $ p i) ?U = c* (setprod (\i. ?g i $ p i) ?U)" unfolding kU[symmetric] . then show "of_int (sign p) * setprod (\i. ?f i $ p i) ?U = c * (of_int (sign p) * setprod (\i. ?g i $ p i) ?U)" - by (simp add: ring_simps) + by (simp add: field_simps) qed lemma det_row_0: @@ -604,7 +604,7 @@ have "setprod (\i. c i * a i $ p i) ?U = setprod c ?U * setprod (\i. a i $ p i) ?U" unfolding setprod_timesf .. then show "?s * (\xa\?U. c xa * a xa $ p xa) = - setprod c ?U * (?s* (\xa\?U. a xa $ p xa))" by (simp add: ring_simps) + setprod c ?U * (?s* (\xa\?U. a xa $ p xa))" by (simp add: field_simps) qed lemma det_mul: @@ -681,7 +681,7 @@ using permutes_in_image[OF q] by vector show "?s q * setprod (\i. (((\ i. A$i$p i *s B$p i) :: 'a^'n^'n)$i$q i)) ?U = ?s p * (setprod (\i. A$i$p i) ?U) * (?s (q o inv p) * setprod (\i. B$i$(q o inv p) i) ?U)" using ths thp pp pq permutation_inverse[OF pp] sign_inverse[OF pp] - by (simp add: sign_nz th00 ring_simps sign_idempotent sign_compose) + by (simp add: sign_nz th00 field_simps sign_idempotent sign_compose) qed } then have th2: "setsum (\f. det (\ i. A$i$f i *s B$f i)) ?PU = det A * det B" @@ -772,7 +772,7 @@ have fUk: "finite ?Uk" by simp have kUk: "k \ ?Uk" by simp have th00: "\k s. x$k *s row k A + s = (x$k - 1) *s row k A + row k A + s" - by (vector ring_simps) + by (vector field_simps) have th001: "\f k . (\x. if x = k then f k else f x) = f" by (auto intro: ext) have "(\ i. row i A) = A" by (vector row_def) then have thd1: "det (\ i. row i A) = det A" by simp @@ -793,7 +793,7 @@ unfolding thd0 unfolding det_row_mul unfolding th001[of k "\i. row i A"] - unfolding thd1 by (simp add: ring_simps) + unfolding thd1 by (simp add: field_simps) qed lemma cramer_lemma: @@ -901,7 +901,7 @@ have th: "\x::'a. x = 1 \ x = - 1 \ x*x = 1" (is "\x::'a. ?ths x") proof- fix x:: 'a - have th0: "x*x - 1 = (x - 1)*(x + 1)" by (simp add: ring_simps) + have th0: "x*x - 1 = (x - 1)*(x + 1)" by (simp add: field_simps) have th1: "\(x::'a) y. x = - y \ x + y = 0" apply (subst eq_iff_diff_eq_0) by simp have "x*x = 1 \ x*x - 1 = 0" by simp @@ -929,7 +929,7 @@ unfolding dot_norm_neg dist_norm[symmetric] unfolding th0 fd[rule_format] by (simp add: power2_eq_square field_simps)} note fc = this - show ?thesis unfolding linear_def vector_eq smult_conv_scaleR by (simp add: inner_simps fc ring_simps) + show ?thesis unfolding linear_def vector_eq smult_conv_scaleR by (simp add: inner_simps fc field_simps) qed lemma isometry_linear: @@ -980,7 +980,7 @@ using H(5-9) apply (simp add: norm_eq norm_eq_1) apply (simp add: inner_simps smult_conv_scaleR) unfolding * - by (simp add: ring_simps) } + by (simp add: field_simps) } note th0 = this let ?g = "\x. if x = 0 then 0 else norm x *s f (inverse (norm x) *s x)" {fix x:: "real ^'n" assume nx: "norm x = 1" @@ -1079,7 +1079,7 @@ unfolding permutes_sing apply (simp add: sign_swap_id permutation_swap_id sign_compose sign_id swap_id_eq) apply (simp add: arith_simps(31)[symmetric] of_int_minus of_int_1 del: arith_simps(31)) - by (simp add: ring_simps) + by (simp add: field_simps) qed end diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Multivariate_Analysis/Euclidean_Space.thy --- a/src/HOL/Multivariate_Analysis/Euclidean_Space.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Multivariate_Analysis/Euclidean_Space.thy Mon Apr 26 13:43:31 2010 +0200 @@ -257,14 +257,14 @@ | "vector_power x (Suc n) = x * vector_power x n" instance cart :: (semiring,finite) semiring - apply (intro_classes) by (vector ring_simps)+ + apply (intro_classes) by (vector field_simps)+ instance cart :: (semiring_0,finite) semiring_0 - apply (intro_classes) by (vector ring_simps)+ + apply (intro_classes) by (vector field_simps)+ instance cart :: (semiring_1,finite) semiring_1 apply (intro_classes) by vector instance cart :: (comm_semiring,finite) comm_semiring - apply (intro_classes) by (vector ring_simps)+ + apply (intro_classes) by (vector field_simps)+ instance cart :: (comm_semiring_0,finite) comm_semiring_0 by (intro_classes) instance cart :: (cancel_comm_monoid_add, finite) cancel_comm_monoid_add .. @@ -278,7 +278,7 @@ instance cart :: (real_algebra,finite) real_algebra apply intro_classes - apply (simp_all add: vector_scaleR_def ring_simps) + apply (simp_all add: vector_scaleR_def field_simps) apply vector apply vector done @@ -318,19 +318,19 @@ lemma vector_smult_assoc: "a *s (b *s x) = ((a::'a::semigroup_mult) * b) *s x" by (vector mult_assoc) lemma vector_sadd_rdistrib: "((a::'a::semiring) + b) *s x = a *s x + b *s x" - by (vector ring_simps) + by (vector field_simps) lemma vector_add_ldistrib: "(c::'a::semiring) *s (x + y) = c *s x + c *s y" - by (vector ring_simps) + by (vector field_simps) lemma vector_smult_lzero[simp]: "(0::'a::mult_zero) *s x = 0" by vector lemma vector_smult_lid[simp]: "(1::'a::monoid_mult) *s x = x" by vector lemma vector_ssub_ldistrib: "(c::'a::ring) *s (x - y) = c *s x - c *s y" - by (vector ring_simps) + by (vector field_simps) lemma vector_smult_rneg: "(c::'a::ring) *s -x = -(c *s x)" by vector lemma vector_smult_lneg: "- (c::'a::ring) *s x = -(c *s x)" by vector lemma vector_sneg_minus1: "-x = (- (1::'a::ring_1)) *s x" by vector lemma vector_smult_rzero[simp]: "c *s 0 = (0::'a::mult_zero ^ 'n)" by vector lemma vector_sub_rdistrib: "((a::'a::ring) - b) *s x = a *s x - b *s x" - by (vector ring_simps) + by (vector field_simps) lemma vec_eq[simp]: "(vec m = vec n) \ (m = n)" by (simp add: Cart_eq) @@ -752,7 +752,7 @@ lemma square_bound_lemma: "(x::real) < (1 + x) * (1 + x)" proof- have "(x + 1/2)^2 + 3/4 > 0" using zero_le_power2[of "x+1/2"] by arith - thus ?thesis by (simp add: ring_simps power2_eq_square) + thus ?thesis by (simp add: field_simps power2_eq_square) qed lemma square_continuous: "0 < (e::real) ==> \d. 0 < d \ (\y. abs(y - x) < d \ abs(y * y - x * x) < e)" @@ -828,7 +828,7 @@ lemma norm_triangle_sub: fixes x y :: "'a::real_normed_vector" shows "norm x \ norm y + norm (x - y)" - using norm_triangle_ineq[of "y" "x - y"] by (simp add: ring_simps) + using norm_triangle_ineq[of "y" "x - y"] by (simp add: field_simps) lemma component_le_norm: "\x$i\ <= norm x" apply (simp add: norm_vector_def) @@ -867,7 +867,7 @@ lemma real_abs_le_square_iff: "\x\ \ \y\ \ (x::real)^2 \ y^2" proof- - have "x^2 \ y^2 \ (x -y) * (y + x) \ 0" by (simp add: ring_simps power2_eq_square) + have "x^2 \ y^2 \ (x -y) * (y + x) \ 0" by (simp add: field_simps power2_eq_square) also have "\ \ \x\ \ \y\" apply (simp add: zero_compare_simps real_abs_def not_less) by arith finally show ?thesis .. qed @@ -898,7 +898,7 @@ unfolding power2_norm_eq_inner inner_simps inner_commute by auto lemma dot_norm_neg: "x \ y = ((norm x ^ 2 + norm y ^ 2) - norm(x - y) ^ 2) / 2" - unfolding power2_norm_eq_inner inner_simps inner_commute by(auto simp add:group_simps) + unfolding power2_norm_eq_inner inner_simps inner_commute by(auto simp add:algebra_simps) text{* Equality of vectors in terms of @{term "op \"} products. *} @@ -909,7 +909,7 @@ assume ?rhs then have "x \ x - x \ y = 0 \ x \ y - y \ y = 0" by simp hence "x \ (x - y) = 0 \ y \ (x - y) = 0" by (simp add: inner_simps inner_commute) - then have "(x - y) \ (x - y) = 0" by (simp add: ring_simps inner_simps inner_commute) + then have "(x - y) \ (x - y) = 0" by (simp add: field_simps inner_simps inner_commute) then show "x = y" by (simp) qed @@ -930,7 +930,7 @@ by (rule order_trans [OF norm_triangle_ineq add_mono]) lemma ge_iff_diff_ge_0: "(a::'a::linordered_ring) \ b == a - b \ 0" - by (simp add: ring_simps) + by (simp add: field_simps) lemma pth_1: fixes x :: "'a::real_normed_vector" @@ -1430,15 +1430,15 @@ shows "linear f" using assms unfolding linear_def by auto lemma linear_compose_cmul: "linear f ==> linear (\x. (c::'a::comm_semiring) *s f x)" - by (vector linear_def Cart_eq ring_simps) + by (vector linear_def Cart_eq field_simps) lemma linear_compose_neg: "linear (f :: 'a ^'n \ 'a::comm_ring ^'m) ==> linear (\x. -(f(x)))" by (vector linear_def Cart_eq) lemma linear_compose_add: "linear (f :: 'a ^'n \ 'a::semiring_1 ^'m) \ linear g ==> linear (\x. f(x) + g(x))" - by (vector linear_def Cart_eq ring_simps) + by (vector linear_def Cart_eq field_simps) lemma linear_compose_sub: "linear (f :: 'a ^'n \ 'a::ring_1 ^'m) \ linear g ==> linear (\x. f x - g x)" - by (vector linear_def Cart_eq ring_simps) + by (vector linear_def Cart_eq field_simps) lemma linear_compose: "linear f \ linear g ==> linear (g o f)" by (simp add: linear_def) @@ -1460,7 +1460,7 @@ shows "linear (\x. f x $ k *s v)" using lf apply (auto simp add: linear_def ) - by (vector ring_simps)+ + by (vector field_simps)+ lemma linear_0: "linear f ==> f 0 = (0::'a::semiring_1 ^'n)" unfolding linear_def @@ -1536,7 +1536,7 @@ unfolding norm_mul apply (simp only: mult_commute) apply (rule mult_mono) - by (auto simp add: ring_simps norm_ge_zero) } + by (auto simp add: field_simps norm_ge_zero) } then have th: "\i\ ?S. norm ((x$i) *s f (basis i :: real ^'m)) \ norm (f (basis i)) * norm x" by metis from real_setsum_norm_le[OF fS, of "\i. (x$i) *s (f (basis i))", OF th] have "norm (f x) \ ?B * norm x" unfolding th0 setsum_left_distrib by metis} @@ -1562,7 +1562,7 @@ {fix x::"real ^ 'n" have "norm (f x) \ ?K * norm x" using B[rule_format, of x] norm_ge_zero[of x] norm_ge_zero[of "f x"] Bp - apply (auto simp add: ring_simps split add: abs_split) + apply (auto simp add: field_simps split add: abs_split) apply (erule order_trans, simp) done } @@ -1631,12 +1631,12 @@ lemma bilinear_lzero: fixes h :: "'a::ring^'n \ _" assumes bh: "bilinear h" shows "h 0 x = 0" using bilinear_ladd[OF bh, of 0 0 x] - by (simp add: eq_add_iff ring_simps) + by (simp add: eq_add_iff field_simps) lemma bilinear_rzero: fixes h :: "'a::ring^_ \ _" assumes bh: "bilinear h" shows "h x 0 = 0" using bilinear_radd[OF bh, of x 0 0 ] - by (simp add: eq_add_iff ring_simps) + by (simp add: eq_add_iff field_simps) lemma bilinear_lsub: "bilinear h ==> h (x - (y:: 'a::ring_1 ^ _)) z = h x z - h y z" by (simp add: diff_def bilinear_ladd bilinear_lneg) @@ -1677,7 +1677,7 @@ apply (rule real_setsum_norm_le) using fN fM apply simp - apply (auto simp add: bilinear_rmul[OF bh] bilinear_lmul[OF bh] norm_mul ring_simps) + apply (auto simp add: bilinear_rmul[OF bh] bilinear_lmul[OF bh] norm_mul field_simps) apply (rule mult_mono) apply (auto simp add: norm_ge_zero zero_le_mult_iff component_le_norm) apply (rule mult_mono) @@ -1767,7 +1767,7 @@ by (simp add: linear_cmul[OF lf]) finally have "f x \ y = x \ ?w" apply (simp only: ) - apply (simp add: inner_vector_def setsum_left_distrib setsum_right_distrib setsum_commute[of _ ?M ?N] ring_simps) + apply (simp add: inner_vector_def setsum_left_distrib setsum_right_distrib setsum_commute[of _ ?M ?N] field_simps) done} } then show ?thesis unfolding adjoint_def @@ -1832,7 +1832,7 @@ lemma mat_0[simp]: "mat 0 = 0" by (vector mat_def) lemma matrix_add_ldistrib: "(A ** (B + C)) = (A ** B) + (A ** C)" - by (vector matrix_matrix_mult_def setsum_addf[symmetric] ring_simps) + by (vector matrix_matrix_mult_def setsum_addf[symmetric] field_simps) lemma matrix_mul_lid: fixes A :: "'a::semiring_1 ^ 'm ^ 'n" @@ -1951,7 +1951,7 @@ where "matrix f = (\ i j. (f(basis j))$i)" lemma matrix_vector_mul_linear: "linear(\x. A *v (x::'a::comm_semiring_1 ^ _))" - by (simp add: linear_def matrix_vector_mult_def Cart_eq ring_simps setsum_right_distrib setsum_addf) + by (simp add: linear_def matrix_vector_mult_def Cart_eq field_simps setsum_right_distrib setsum_addf) lemma matrix_works: assumes lf: "linear f" shows "matrix f *v x = f (x::'a::comm_ring_1 ^ 'n)" apply (simp add: matrix_def matrix_vector_mult_def Cart_eq mult_commute) @@ -2005,7 +2005,7 @@ proof- have uv': "u = 0 \ v \ 0" using u v uv by arith have "a = a * (u + v)" unfolding uv by simp - hence th: "u * a + v * a = a" by (simp add: ring_simps) + hence th: "u * a + v * a = a" by (simp add: field_simps) from xa u have "u \ 0 \ u*x < u*a" by (simp add: mult_compare_simps) from ya v have "v \ 0 \ v * y < v * a" by (simp add: mult_compare_simps) from xa ya u v have "u * x + v * y < u * a + v * a" @@ -2028,7 +2028,7 @@ shows "u * x + v * y \ a" proof- from xa ya u v have "u * x + v * y \ u * a + v * a" by (simp add: add_mono mult_left_mono) - also have "\ \ (u + v) * a" by (simp add: ring_simps) + also have "\ \ (u + v) * a" by (simp add: field_simps) finally show ?thesis unfolding uv by simp qed @@ -2049,7 +2049,7 @@ shows "x <= y + z" proof- have "y^2 + z^2 \ y^2 + 2*y*z + z^2" using z y by (simp add: zero_compare_simps) - with xy have th: "x ^2 \ (y+z)^2" by (simp add: power2_eq_square ring_simps) + with xy have th: "x ^2 \ (y+z)^2" by (simp add: power2_eq_square field_simps) from y z have yz: "y + z \ 0" by arith from power2_le_imp_le[OF th yz] show ?thesis . qed @@ -2534,9 +2534,9 @@ from h have p: "1 \ (1 + x) ^ n" using Suc.prems by simp from h have "1 + real n * x + x \ (1 + x) ^ n + x" by simp also have "\ \ (1 + x) ^ Suc n" apply (subst diff_le_0_iff_le[symmetric]) - apply (simp add: ring_simps) + apply (simp add: field_simps) using mult_left_mono[OF p Suc.prems] by simp - finally show ?case by (simp add: real_of_nat_Suc ring_simps) + finally show ?case by (simp add: real_of_nat_Suc field_simps) qed lemma real_arch_pow: assumes x: "1 < (x::real)" shows "\n. y < x^n" @@ -2602,10 +2602,10 @@ from geometric_sum[OF x1, of "Suc n", unfolded x1'] have "(- (1 - x)) * setsum (\i. x^i) {0 .. n} = - (1 - x^(Suc n))" unfolding atLeastLessThanSuc_atLeastAtMost - using x1' apply (auto simp only: field_eq_simps) - apply (simp add: ring_simps) + using x1' apply (auto simp only: field_simps) + apply (simp add: field_simps) done - then have ?thesis by (simp add: ring_simps) } + then have ?thesis by (simp add: field_simps) } ultimately show ?thesis by metis qed @@ -2624,7 +2624,7 @@ from setsum_reindex[OF i, of "op ^ x", unfolded f th setsum_right_distrib[symmetric]] have "?lhs = x^m * ((1 - x) * setsum (op ^ x) {0..n - m})" by simp then show ?thesis unfolding sum_gp_basic using mn - by (simp add: ring_simps power_add[symmetric]) + by (simp add: field_simps power_add[symmetric]) qed lemma sum_gp: "setsum (op ^ (x::'a::{field})) {m .. n} = @@ -2637,7 +2637,7 @@ {assume x: "x = 1" hence ?thesis by simp} moreover {assume x: "x \ 1" hence nz: "1 - x \ 0" by simp - from sum_gp_multiplied[OF nm, of x] nz have ?thesis by (simp add: field_eq_simps)} + from sum_gp_multiplied[OF nm, of x] nz have ?thesis by (simp add: field_simps)} ultimately have ?thesis by metis } ultimately show ?thesis by metis @@ -2646,7 +2646,7 @@ lemma sum_gp_offset: "setsum (op ^ (x::'a::{field})) {m .. m+n} = (if x = 1 then of_nat n + 1 else x^m * (1 - x^Suc n) / (1 - x))" unfolding sum_gp[of x m "m + n"] power_Suc - by (simp add: ring_simps power_add) + by (simp add: field_simps power_add) subsection{* A bit of linear algebra. *} @@ -2920,14 +2920,14 @@ apply (simp only: ) apply (rule span_add[unfolded mem_def]) apply assumption+ - apply (vector ring_simps) + apply (vector field_simps) apply (clarsimp simp add: mem_def) apply (rule_tac x= "c*k" in exI) apply (subgoal_tac "c *s x - (c * k) *s b = c*s (x - k*s b)") apply (simp only: ) apply (rule span_mul[unfolded mem_def]) apply assumption - by (vector ring_simps) + by (vector field_simps) ultimately show "?P a" using aS span_induct[where S=S and P= "?P"] by metis qed @@ -3073,7 +3073,7 @@ setsum_clauses(2)[OF fS] cong del: if_weak_cong) also have "\ = (\v\S. u v *s v) + c *s x" apply (simp add: setsum_Un_disjoint[OF Sss, unfolded S1[symmetric]]) - by (vector ring_simps) + by (vector field_simps) also have "\ = c*s x + y" by (simp add: add_commute u) finally have "setsum (\v. ?u v *s v) ?S = c*s x + y" . @@ -3110,7 +3110,7 @@ from fS SP aP have th0: "finite ?S" "?S \ P" "?v \ ?S" "?u ?v \ 0" by auto have s0: "setsum (\v. ?u v *s v) ?S = 0" using fS aS - apply (simp add: vector_smult_lneg vector_smult_lid setsum_clauses ring_simps ) + apply (simp add: vector_smult_lneg vector_smult_lid setsum_clauses field_simps ) apply (subst (2) ua[symmetric]) apply (rule setsum_cong2) by auto @@ -3643,7 +3643,7 @@ from C(1) have fC: "finite ?C" by simp from fB aB C(1,2) have cC: "card ?C \ card (insert a B)" by (simp add: card_insert_if) {fix x k - have th0: "\(a::'b::comm_ring) b c. a - (b - c) = c + (a - b)" by (simp add: ring_simps) + have th0: "\(a::'b::comm_ring) b c. a - (b - c) = c + (a - b)" by (simp add: field_simps) have "x - k *s (a - (\x\C. (x \ a / (x \ x)) *s x)) \ span C \ x - k *s a \ span C" apply (simp only: vector_ssub_ldistrib th0) apply (rule span_add_eq) @@ -3863,7 +3863,7 @@ using z . {fix k assume k: "z - k *s a \ span b" have eq: "z - ?h z *s a - (z - k*s a) = (k - ?h z) *s a" - by (simp add: ring_simps vector_sadd_rdistrib[symmetric]) + by (simp add: field_simps vector_sadd_rdistrib[symmetric]) from span_sub[OF th0 k] have khz: "(k - ?h z) *s a \ span b" by (simp add: eq) {assume "k \ ?h z" hence k0: "k - ?h z \ 0" by simp @@ -3877,7 +3877,7 @@ let ?g = "\z. ?h z *s f a + g (z - ?h z *s a)" {fix x y assume x: "x \ span (insert a b)" and y: "y \ span (insert a b)" have tha: "\(x::'a^'n) y a k l. (x + y) - (k + l) *s a = (x - k *s a) + (y - l *s a)" - by (vector ring_simps) + by (vector field_simps) have addh: "?h (x + y) = ?h x + ?h y" apply (rule conjunct2[OF h, rule_format, symmetric]) apply (rule span_add[OF x y]) @@ -3890,14 +3890,14 @@ moreover {fix x:: "'a^'n" and c:: 'a assume x: "x \ span (insert a b)" have tha: "\(x::'a^'n) c k a. c *s x - (c * k) *s a = c *s (x - k *s a)" - by (vector ring_simps) + by (vector field_simps) have hc: "?h (c *s x) = c * ?h x" apply (rule conjunct2[OF h, rule_format, symmetric]) apply (metis span_mul x) by (metis tha span_mul x conjunct1[OF h]) have "?g (c *s x) = c*s ?g x" unfolding hc tha g(2)[rule_format, OF conjunct1[OF h, OF x]] - by (vector ring_simps)} + by (vector field_simps)} moreover {fix x assume x: "x \ (insert a b)" {assume xa: "x = a" @@ -4276,7 +4276,7 @@ fix j have th: "\xa \ ?U. (if xa = i then (c + (x$i)) * ((column xa A)$j) else (x$xa) * ((column xa A$j))) = (if xa = i then c * ((column i A)$j) else 0) + ((x$xa) * ((column xa A)$j))" using i(1) - by (simp add: ring_simps) + by (simp add: field_simps) have "setsum (\xa. if xa = i then (c + (x$i)) * ((column xa A)$j) else (x$xa) * ((column xa A$j))) ?U = setsum (\xa. (if xa = i then c * ((column i A)$j) else 0) + ((x$xa) * ((column xa A)$j))) ?U" apply (rule setsum_cong[OF refl]) @@ -4619,7 +4619,7 @@ from infnorm_triangle[of "x - y" " y"] infnorm_triangle[of "x - y" "-x"] have ths: "infnorm x \ infnorm (x - y) + infnorm y" "infnorm y \ infnorm (x - y) + infnorm x" - by (simp_all add: ring_simps infnorm_neg diff_def[symmetric]) + by (simp_all add: field_simps infnorm_neg diff_def[symmetric]) from th[OF ths] show ?thesis . qed @@ -4718,9 +4718,9 @@ using x y unfolding inner_simps smult_conv_scaleR unfolding power2_norm_eq_inner[symmetric] power2_eq_square diff_eq_0_iff_eq apply (simp add: inner_commute) - apply (simp add: ring_simps) by metis + apply (simp add: field_simps) by metis also have "\ \ (2 * norm x * norm y * (norm x * norm y - x \ y) = 0)" using x y - by (simp add: ring_simps inner_commute) + by (simp add: field_simps inner_commute) also have "\ \ ?lhs" using x y apply simp by metis @@ -4766,7 +4766,7 @@ also have "\ \ norm x *s y = norm y *s x" unfolding norm_cauchy_schwarz_eq[symmetric] unfolding power2_norm_eq_inner inner_simps - by (simp add: power2_norm_eq_inner[symmetric] power2_eq_square inner_commute ring_simps) + by (simp add: power2_norm_eq_inner[symmetric] power2_eq_square inner_commute field_simps) finally have ?thesis .} ultimately show ?thesis by blast qed @@ -4852,10 +4852,10 @@ unfolding vector_smult_assoc unfolding norm_mul apply (subgoal_tac "norm x * c = \c\ * norm x \ norm x * c = - \c\ * norm x") -apply (case_tac "c <= 0", simp add: ring_simps) -apply (simp add: ring_simps) -apply (case_tac "c <= 0", simp add: ring_simps) -apply (simp add: ring_simps) +apply (case_tac "c <= 0", simp add: field_simps) +apply (simp add: field_simps) +apply (case_tac "c <= 0", simp add: field_simps) +apply (simp add: field_simps) apply simp apply simp done diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Multivariate_Analysis/Integration.thy --- a/src/HOL/Multivariate_Analysis/Integration.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Multivariate_Analysis/Integration.thy Mon Apr 26 13:43:31 2010 +0200 @@ -1131,7 +1131,7 @@ guess d2 by(rule has_integralD[OF goal1(2) e]) note d2=this guess p by(rule fine_division_exists[OF gauge_inter[OF d1(1) d2(1)],of a b]) note p=this let ?c = "(\(x, k)\p. content k *\<^sub>R f x)" have "norm (k1 - k2) \ norm (?c - k2) + norm (?c - k1)" - using norm_triangle_ineq4[of "k1 - ?c" "k2 - ?c"] by(auto simp add:group_simps norm_minus_commute) + using norm_triangle_ineq4[of "k1 - ?c" "k2 - ?c"] by(auto simp add:algebra_simps norm_minus_commute) also have "\ < norm (k1 - k2) / 2 + norm (k1 - k2) / 2" apply(rule add_strict_mono) apply(rule_tac[!] d2(2) d1(2)) using p unfolding fine_def by auto finally show False by auto @@ -1244,7 +1244,7 @@ unfolding scaleR_right_distrib setsum_addf[of "\(x,k). content k *\<^sub>R f x" "\(x,k). content k *\<^sub>R g x" p,THEN sym] by(rule setsum_cong2,auto) have "norm ((\(x, k)\p. content k *\<^sub>R (f x + g x)) - (k + l)) = norm (((\(x, k)\p. content k *\<^sub>R f x) - k) + ((\(x, k)\p. content k *\<^sub>R g x) - l))" - unfolding * by(auto simp add:group_simps) also let ?res = "\" + unfolding * by(auto simp add:algebra_simps) also let ?res = "\" from as have *:"d1 fine p" "d2 fine p" unfolding fine_inter by auto have "?res < e/2 + e/2" apply(rule le_less_trans[OF norm_triangle_ineq]) apply(rule add_strict_mono) using d1(2)[OF as(1) *(1)] and d2(2)[OF as(1) *(2)] by auto @@ -1268,7 +1268,7 @@ lemma has_integral_sub: shows "(f has_integral k) s \ (g has_integral l) s \ ((\x. f(x) - g(x)) has_integral (k - l)) s" - using has_integral_add[OF _ has_integral_neg,of f k s g l] unfolding group_simps by auto + using has_integral_add[OF _ has_integral_neg,of f k s g l] unfolding algebra_simps by auto lemma integral_0: "integral s (\x::real^'n. 0::real^'m) = 0" by(rule integral_unique has_integral_0)+ @@ -1703,7 +1703,7 @@ proof- guess p using fine_division_exists[OF d(1), of a' b] . note p=this show ?thesis using norm_triangle_half_l[OF d(2)[of p1 p] d(2)[of p2 p]] using as unfolding interval_split b'_def[symmetric] a'_def[symmetric] - using p using assms by(auto simp add:group_simps) + using p using assms by(auto simp add:algebra_simps) qed qed show "?P {x. x $ k \ c}" apply(rule_tac x=d in exI) apply(rule,rule d) apply(rule,rule,rule) proof- fix p1 p2 assume as:"p1 tagged_division_of {a..b} \ {x. x $ k \ c} \ d fine p1 \ p2 tagged_division_of {a..b} \ {x. x $ k \ c} \ d fine p2" @@ -1711,7 +1711,7 @@ proof- guess p using fine_division_exists[OF d(1), of a b'] . note p=this show ?thesis using norm_triangle_half_l[OF d(2)[of p p1] d(2)[of p p2]] using as unfolding interval_split b'_def[symmetric] a'_def[symmetric] - using p using assms by(auto simp add:group_simps) qed qed qed qed + using p using assms by(auto simp add:algebra_simps) qed qed qed qed subsection {* Generalized notion of additivity. *} @@ -1848,7 +1848,7 @@ lemma monoidal_monoid[intro]: shows "monoidal ((op +)::('a::comm_monoid_add) \ 'a \ 'a)" - unfolding monoidal_def neutral_monoid by(auto simp add: group_simps) + unfolding monoidal_def neutral_monoid by(auto simp add: algebra_simps) lemma operative_integral: fixes f::"real^'n \ 'a::banach" shows "operative (lifted(op +)) (\i. if f integrable_on i then Some(integral i f) else None)" @@ -2381,8 +2381,8 @@ have lem2:"\s1 s2 i1 i2. norm(s2 - s1) \ e/2 \ norm(s1 - i1) < e / 4 \ norm(s2 - i2) < e / 4 \norm(i1 - i2) < e" proof- case goal1 have "norm (i1 - i2) \ norm (i1 - s1) + norm (s1 - s2) + norm (s2 - i2)" using norm_triangle_ineq[of "i1 - s1" "s1 - i2"] - using norm_triangle_ineq[of "s1 - s2" "s2 - i2"] by(auto simp add:group_simps) - also have "\ < e" using goal1 unfolding norm_minus_commute by(auto simp add:group_simps) + using norm_triangle_ineq[of "s1 - s2" "s2 - i2"] by(auto simp add:algebra_simps) + also have "\ < e" using goal1 unfolding norm_minus_commute by(auto simp add:algebra_simps) finally show ?case . qed show ?case unfolding vector_dist_norm apply(rule lem2) defer @@ -2399,7 +2399,7 @@ also have "\ = 2 / real M" unfolding real_divide_def by auto finally show "norm (g n x - g m x) \ 2 / real M" using norm_triangle_le[of "g n x - f x" "f x - g m x" "2 / real M"] - by(auto simp add:group_simps simp add:norm_minus_commute) + by(auto simp add:algebra_simps simp add:norm_minus_commute) qed qed qed from this[unfolded convergent_eq_cauchy[THEN sym]] guess s .. note s=this @@ -2413,8 +2413,8 @@ have lem:"\sf sg i. norm(sf - sg) \ e / 3 \ norm(i - s) < e / 3 \ norm(sg - i) < e / 3 \ norm(sf - s) < e" proof- case goal1 have "norm (sf - s) \ norm (sf - sg) + norm (sg - i) + norm (i - s)" using norm_triangle_ineq[of "sf - sg" "sg - s"] - using norm_triangle_ineq[of "sg - i" " i - s"] by(auto simp add:group_simps) - also have "\ < e" using goal1 unfolding norm_minus_commute by(auto simp add:group_simps) + using norm_triangle_ineq[of "sg - i" " i - s"] by(auto simp add:algebra_simps) + also have "\ < e" using goal1 unfolding norm_minus_commute by(auto simp add:algebra_simps) finally show ?case . qed show ?case apply(rule_tac x=g' in exI) apply(rule,rule g') @@ -2956,7 +2956,7 @@ have ball:"\xa\k. xa \ ball x (d (dest_vec1 x))" using as(2)[unfolded fine_def,rule_format,OF `(x,k)\p`,unfolded split_conv subset_eq] . have "norm ((v$1 - u$1) *\<^sub>R f' x - (f v - f u)) \ norm (f u - f x - (u$1 - x$1) *\<^sub>R f' x) + norm (f v - f x - (v$1 - x$1) *\<^sub>R f' x)" apply(rule order_trans[OF _ norm_triangle_ineq4]) apply(rule eq_refl) apply(rule arg_cong[where f=norm]) - unfolding scaleR.diff_left by(auto simp add:group_simps) + unfolding scaleR.diff_left by(auto simp add:algebra_simps) also have "... \ e * norm (dest_vec1 u - dest_vec1 x) + e * norm (dest_vec1 v - dest_vec1 x)" apply(rule add_mono) apply(rule d(2)[of "x$1" "u$1",unfolded o_def vec1_dest_vec1]) prefer 4 apply(rule d(2)[of "x$1" "v$1",unfolded o_def vec1_dest_vec1]) @@ -3098,7 +3098,7 @@ proof(rule,rule,rule d,safe) case goal1 show ?case proof(cases "y < x") case False have "f \ dest_vec1 integrable_on {vec1 a..vec1 y}" apply(rule integrable_subinterval,rule integrable_continuous) apply(rule continuous_on_o_dest_vec1 assms)+ unfolding not_less using assms(2) goal1 by auto - hence *:"?I a y - ?I a x = ?I x y" unfolding group_simps apply(subst eq_commute) apply(rule integral_combine) + hence *:"?I a y - ?I a x = ?I x y" unfolding algebra_simps apply(subst eq_commute) apply(rule integral_combine) using False unfolding not_less using assms(2) goal1 by auto have **:"norm (y - x) = content {vec1 x..vec1 y}" apply(subst content_1) using False unfolding not_less by auto show ?thesis unfolding ** apply(rule has_integral_bound[where f="(\u. f u - f x) o dest_vec1"]) unfolding * unfolding o_def @@ -3112,7 +3112,7 @@ qed(insert e,auto) next case True have "f \ dest_vec1 integrable_on {vec1 a..vec1 x}" apply(rule integrable_subinterval,rule integrable_continuous) apply(rule continuous_on_o_dest_vec1 assms)+ unfolding not_less using assms(2) goal1 by auto - hence *:"?I a x - ?I a y = ?I y x" unfolding group_simps apply(subst eq_commute) apply(rule integral_combine) + hence *:"?I a x - ?I a y = ?I y x" unfolding algebra_simps apply(subst eq_commute) apply(rule integral_combine) using True using assms(2) goal1 by auto have **:"norm (y - x) = content {vec1 y..vec1 x}" apply(subst content_1) using True unfolding not_less by auto have ***:"\fy fx c::'a. fx - fy - (y - x) *\<^sub>R c = -(fy - fx - (x - y) *\<^sub>R c)" unfolding scaleR_left.diff by auto @@ -3194,7 +3194,7 @@ apply(rule_tac X="g ` X" in UnionI) defer apply(rule_tac x="h x" in image_eqI) using X(2) assms(3)[rule_format,of x] by auto qed note ** = d(2)[OF this] have *:"inj_on (\(x, k). (g x, g ` k)) p" using inj(1) unfolding inj_on_def by fastsimp - have "(\(x, k)\(\(x, k). (g x, g ` k)) ` p. content k *\<^sub>R f x) - i = r *\<^sub>R (\(x, k)\p. content k *\<^sub>R f (g x)) - i" (is "?l = _") unfolding group_simps add_left_cancel + have "(\(x, k)\(\(x, k). (g x, g ` k)) ` p. content k *\<^sub>R f x) - i = r *\<^sub>R (\(x, k)\p. content k *\<^sub>R f (g x)) - i" (is "?l = _") unfolding algebra_simps add_left_cancel unfolding setsum_reindex[OF *] apply(subst scaleR_right.setsum) defer apply(rule setsum_cong2) unfolding o_def split_paired_all split_conv apply(drule p(4)) apply safe unfolding assms(7)[rule_format] using p by auto also have "... = r *\<^sub>R ((\(x, k)\p. content k *\<^sub>R f (g x)) - (1 / r) *\<^sub>R i)" (is "_ = ?r") unfolding scaleR.diff_right scaleR.scaleR_left[THEN sym] @@ -3332,7 +3332,7 @@ lemma norm_triangle_le_sub: "norm x + norm y \ e \ norm (x - y) \ e" apply(subst(asm)(2) norm_minus_cancel[THEN sym]) - apply(drule norm_triangle_le) by(auto simp add:group_simps) + apply(drule norm_triangle_le) by(auto simp add:algebra_simps) lemma fundamental_theorem_of_calculus_interior: assumes"a \ b" "continuous_on {a..b} f" "\x\{a<.. t" "t$1 < c$1 + ?d" have *:"integral{a..c} f = integral{a..b} f - integral{c..b} f" - "integral{a..t} f = integral{a..b} f - integral{t..b} f" unfolding group_simps + "integral{a..t} f = integral{a..b} f - integral{t..b} f" unfolding algebra_simps apply(rule_tac[!] integral_combine) using assms as unfolding Cart_simps by auto have "(- c)$1 - d < (- t)$1 \ - t \ - c" using as by auto note d(2)[rule_format,OF this] thus "norm (integral {a..c} f - integral {a..t} f) < e" unfolding * - unfolding integral_reflect apply-apply(subst norm_minus_commute) by(auto simp add:group_simps) qed qed + unfolding integral_reflect apply-apply(subst norm_minus_commute) by(auto simp add:algebra_simps) qed qed declare dest_vec1_eq[simp del] not_less[simp] not_le[simp] @@ -3715,7 +3715,7 @@ apply safe apply(rule conv) using assms(4,7) by auto have *:"\t xa. (1 - t) *\<^sub>R c + t *\<^sub>R x = (1 - xa) *\<^sub>R c + xa *\<^sub>R x \ t = xa" proof- case goal1 hence "(t - xa) *\<^sub>R x = (t - xa) *\<^sub>R c" - unfolding scaleR_simps by(auto simp add:group_simps) + unfolding scaleR_simps by(auto simp add:algebra_simps) thus ?case using `x\c` by auto qed have as2:"finite {t. ((1 - t) *\<^sub>R c + t *\<^sub>R x) \ k}" using assms(2) apply(rule finite_surj[where f="\z. SOME t. (1-t) *\<^sub>R c + t *\<^sub>R x = z"]) @@ -4390,7 +4390,7 @@ have *:"\ir ip i cr cp. norm((cp + cr) - i) < e \ norm(cr - ir) < k \ ip + ir = i \ norm(cp - ip) \ e + k" proof- case goal1 thus ?case using norm_triangle_le[of "cp + cr - i" "- (cr - ir)"] - unfolding goal1(3)[THEN sym] norm_minus_cancel by(auto simp add:group_simps) qed + unfolding goal1(3)[THEN sym] norm_minus_cancel by(auto simp add:algebra_simps) qed have "?x = norm ((\(x, k)\p. content k *\<^sub>R f x) - (\(x, k)\p. integral k f))" unfolding split_def setsum_subtractf .. @@ -4501,7 +4501,7 @@ norm(c - d) < e / 4 \ norm(a - d) < e" proof safe case goal1 thus ?case using norm_triangle_lt[of "a - b" "b - c" "3* e/4"] norm_triangle_lt[of "a - b + (b - c)" "c - d" e] unfolding norm_minus_cancel - by(auto simp add:group_simps) qed + by(auto simp add:algebra_simps) qed show "norm ((\(x, k)\p. content k *\<^sub>R g x) - i) < e" apply(rule *[rule_format,where b="\(x, k)\p. content k *\<^sub>R f (m x) x" and c="\(x, k)\p. integral k (f (m x))"]) proof safe case goal1 @@ -5152,7 +5152,7 @@ assumes "f absolutely_integrable_on s" "g absolutely_integrable_on s" shows "(\x. f(x) - g(x)) absolutely_integrable_on s" using absolutely_integrable_add[OF assms(1) absolutely_integrable_neg[OF assms(2)]] - unfolding group_simps . + unfolding algebra_simps . lemma absolutely_integrable_linear: fixes f::"real^'m \ real^'n" and h::"real^'n \ real^'p" assumes "f absolutely_integrable_on s" "bounded_linear h" diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Multivariate_Analysis/Topology_Euclidean_Space.thy --- a/src/HOL/Multivariate_Analysis/Topology_Euclidean_Space.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Multivariate_Analysis/Topology_Euclidean_Space.thy Mon Apr 26 13:43:31 2010 +0200 @@ -4442,7 +4442,7 @@ let ?D = "{norm (x - y) |x y. x \ s \ y \ s}" obtain a where a:"\x\s. norm x \ a" using assms[unfolded bounded_iff] by auto { fix x y assume "x \ s" "y \ s" - hence "norm (x - y) \ 2 * a" using norm_triangle_ineq[of x "-y", unfolded norm_minus_cancel] a[THEN bspec[where x=x]] a[THEN bspec[where x=y]] by (auto simp add: ring_simps) } + hence "norm (x - y) \ 2 * a" using norm_triangle_ineq[of x "-y", unfolded norm_minus_cancel] a[THEN bspec[where x=x]] a[THEN bspec[where x=y]] by (auto simp add: field_simps) } note * = this { fix x y assume "x\s" "y\s" hence "s \ {}" by auto have "norm(x - y) \ diameter s" unfolding diameter_def using `s\{}` *[OF `x\s` `y\s`] `x\s` `y\s` @@ -5752,7 +5752,7 @@ shows "m *s x + c = y \ x = inverse m *s y + -(inverse m *s c)" proof assume h: "m *s x + c = y" - hence "m *s x = y - c" by (simp add: ring_simps) + hence "m *s x = y - c" by (simp add: field_simps) hence "inverse m *s (m *s x) = inverse m *s (y - c)" by simp then show "x = inverse m *s y + - (inverse m *s c)" using m0 by (simp add: vector_smult_assoc vector_ssub_ldistrib) @@ -5854,11 +5854,11 @@ also have "\ \ (1 - c) * (dist (z m) (z (m + k)) + c ^ (m + k) * d)" using cf_z[of "m + k"] and c by auto also have "\ \ c ^ m * d * (1 - c ^ k) + (1 - c) * c ^ (m + k) * d" - using Suc by (auto simp add: ring_simps) + using Suc by (auto simp add: field_simps) also have "\ = (c ^ m) * (d * (1 - c ^ k) + (1 - c) * c ^ k * d)" - unfolding power_add by (auto simp add: ring_simps) + unfolding power_add by (auto simp add: field_simps) also have "\ \ (c ^ m) * d * (1 - c ^ Suc k)" - using c by (auto simp add: ring_simps) + using c by (auto simp add: field_simps) finally show ?case by auto qed } note cf_z2 = this @@ -6015,7 +6015,7 @@ apply(erule_tac x="Na+Nb+n" in allE) apply simp using dist_triangle_add_half[of a "f (r (Na + Nb + n)) x" "dist a b - dist (f n x) (f n y)" "-b" "- f (r (Na + Nb + n)) y"] - unfolding ** unfolding group_simps(12) by (auto simp add: dist_commute) + unfolding ** by (auto simp add: algebra_simps dist_commute) moreover have "dist (f (r (Na + Nb + n)) x - f (r (Na + Nb + n)) y) (a - b) \ dist a b - dist (f n x) (f n y)" using distf[of n "r (Na+Nb+n)", OF _ `x\s` `y\s`] diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/NSA/HyperDef.thy --- a/src/HOL/NSA/HyperDef.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/NSA/HyperDef.thy Mon Apr 26 13:43:31 2010 +0200 @@ -140,12 +140,12 @@ lemma of_hypreal_inverse [simp]: "\x. of_hypreal (inverse x) = - inverse (of_hypreal x :: 'a::{real_div_algebra,division_by_zero} star)" + inverse (of_hypreal x :: 'a::{real_div_algebra,division_ring_inverse_zero} star)" by transfer (rule of_real_inverse) lemma of_hypreal_divide [simp]: "\x y. of_hypreal (x / y) = - (of_hypreal x / of_hypreal y :: 'a::{real_field,division_by_zero} star)" + (of_hypreal x / of_hypreal y :: 'a::{real_field,division_ring_inverse_zero} star)" by transfer (rule of_real_divide) lemma of_hypreal_eq_iff [simp]: @@ -454,7 +454,7 @@ by transfer (rule field_power_not_zero) lemma hyperpow_inverse: - "\r n. r \ (0::'a::{division_by_zero,field} star) + "\r n. r \ (0::'a::{division_ring_inverse_zero,field} star) \ inverse (r pow n) = (inverse r) pow n" by transfer (rule power_inverse) diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/NSA/NSA.thy --- a/src/HOL/NSA/NSA.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/NSA/NSA.thy Mon Apr 26 13:43:31 2010 +0200 @@ -145,12 +145,12 @@ by transfer (rule nonzero_norm_inverse) lemma hnorm_inverse: - "\a::'a::{real_normed_div_algebra,division_by_zero} star. + "\a::'a::{real_normed_div_algebra,division_ring_inverse_zero} star. hnorm (inverse a) = inverse (hnorm a)" by transfer (rule norm_inverse) lemma hnorm_divide: - "\a b::'a::{real_normed_field,division_by_zero} star. + "\a b::'a::{real_normed_field,division_ring_inverse_zero} star. hnorm (a / b) = hnorm a / hnorm b" by transfer (rule norm_divide) diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/NSA/StarDef.thy --- a/src/HOL/NSA/StarDef.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/NSA/StarDef.thy Mon Apr 26 13:43:31 2010 +0200 @@ -902,7 +902,7 @@ apply (transfer, rule divide_inverse) done -instance star :: (division_by_zero) division_by_zero +instance star :: (division_ring_inverse_zero) division_ring_inverse_zero by (intro_classes, transfer, rule inverse_zero) instance star :: (ordered_semiring) ordered_semiring diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Number_Theory/Binomial.thy --- a/src/HOL/Number_Theory/Binomial.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Number_Theory/Binomial.thy Mon Apr 26 13:43:31 2010 +0200 @@ -208,7 +208,7 @@ have "fact (k + 1) * fact (n - k) * (n + 1 choose (k + 1)) = fact (k + 1) * fact (n - k) * (n choose (k + 1)) + fact (k + 1) * fact (n - k) * (n choose k)" - by (subst choose_reduce_nat, auto simp add: ring_simps) + by (subst choose_reduce_nat, auto simp add: field_simps) also note one also note two also with less have "(n - k) * fact n + (k + 1) * fact n= fact (n + 1)" @@ -279,7 +279,7 @@ also have "... = (SUM k=0..n. of_nat (n choose k) * a^k * b^(n+1-k)) + (SUM k=1..n+1. of_nat (n choose (k - 1)) * a^k * b^(n+1-k))" by (simp add:setsum_shift_bounds_cl_Suc_ivl Suc_diff_le - power_Suc ring_simps One_nat_def del:setsum_cl_ivl_Suc) + power_Suc field_simps One_nat_def del:setsum_cl_ivl_Suc) also have "... = a^(n+1) + b^(n+1) + (SUM k=1..n. of_nat (n choose (k - 1)) * a^k * b^(n+1-k)) + (SUM k=1..n. of_nat (n choose k) * a^k * b^(n+1-k))" @@ -287,10 +287,10 @@ also have "... = a^(n+1) + b^(n+1) + (SUM k=1..n. of_nat(n+1 choose k) * a^k * b^(n+1-k))" - by (auto simp add: ring_simps setsum_addf [symmetric] + by (auto simp add: field_simps setsum_addf [symmetric] choose_reduce_nat) also have "... = (SUM k=0..n+1. of_nat (n+1 choose k) * a^k * b^(n+1-k))" - using decomp by (simp add: ring_simps) + using decomp by (simp add: field_simps) finally show "?P (n + 1)" by simp qed diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Number_Theory/Cong.thy --- a/src/HOL/Number_Theory/Cong.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Number_Theory/Cong.thy Mon Apr 26 13:43:31 2010 +0200 @@ -350,7 +350,7 @@ apply (subst prime_dvd_mult_eq_int [symmetric], assumption) (* any way around this? *) apply (subgoal_tac "a * a - 1 = (a - 1) * (a - -1)") - apply (auto simp add: ring_simps) + apply (auto simp add: field_simps) done lemma cong_mult_rcancel_int: @@ -416,7 +416,7 @@ done lemma cong_iff_lin_int: "([(a::int) = b] (mod m)) = (\k. b = a + m * k)" - apply (auto simp add: cong_altdef_int dvd_def ring_simps) + apply (auto simp add: cong_altdef_int dvd_def field_simps) apply (rule_tac [!] x = "-k" in exI, auto) done @@ -428,14 +428,14 @@ apply (unfold dvd_def, auto) apply (rule_tac x = k in exI) apply (rule_tac x = 0 in exI) - apply (auto simp add: ring_simps) + apply (auto simp add: field_simps) apply (subst (asm) cong_sym_eq_nat) apply (subst (asm) cong_altdef_nat) apply force apply (unfold dvd_def, auto) apply (rule_tac x = 0 in exI) apply (rule_tac x = k in exI) - apply (auto simp add: ring_simps) + apply (auto simp add: field_simps) apply (unfold cong_nat_def) apply (subgoal_tac "a mod m = (a + k2 * m) mod m") apply (erule ssubst)back @@ -533,7 +533,7 @@ apply (auto simp add: cong_iff_lin_nat dvd_def) apply (rule_tac x="k1 * k" in exI) apply (rule_tac x="k2 * k" in exI) - apply (simp add: ring_simps) + apply (simp add: field_simps) done lemma cong_dvd_modulus_int: "[(x::int) = y] (mod m) \ n dvd m \ @@ -559,7 +559,7 @@ lemma neg_cong_int: "([(a::int) = b] (mod m)) = ([-a = -b] (mod m))" apply (simp add: cong_altdef_int) apply (subst dvd_minus_iff [symmetric]) - apply (simp add: ring_simps) + apply (simp add: field_simps) done lemma cong_modulus_neg_int: "([(a::int) = b] (mod m)) = ([a = b] (mod -m))" @@ -603,7 +603,7 @@ apply (unfold dvd_def) apply auto [1] apply (rule_tac x = k in exI) - apply (auto simp add: ring_simps) [1] + apply (auto simp add: field_simps) [1] apply (subst cong_altdef_nat) apply (auto simp add: dvd_def) done @@ -611,7 +611,7 @@ lemma cong_le_nat: "(y::nat) <= x \ [x = y] (mod n) \ (\q. x = q * n + y)" apply (subst cong_altdef_nat) apply assumption - apply (unfold dvd_def, auto simp add: ring_simps) + apply (unfold dvd_def, auto simp add: field_simps) apply (rule_tac x = k in exI) apply auto done diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Number_Theory/Fib.thy --- a/src/HOL/Number_Theory/Fib.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Number_Theory/Fib.thy Mon Apr 26 13:43:31 2010 +0200 @@ -143,9 +143,9 @@ apply (induct n rule: fib_induct_nat) apply auto apply (subst fib_reduce_nat) - apply (auto simp add: ring_simps) + apply (auto simp add: field_simps) apply (subst (1 3 5) fib_reduce_nat) - apply (auto simp add: ring_simps Suc_eq_plus1) + apply (auto simp add: field_simps Suc_eq_plus1) (* hmmm. Why doesn't "n + (1 + (1 + k))" simplify to "n + k + 2"? *) apply (subgoal_tac "n + (k + 2) = n + (1 + (1 + k))") apply (erule ssubst) back back @@ -184,7 +184,7 @@ lemma fib_Cassini_aux_int: "fib (int n + 2) * fib (int n) - (fib (int n + 1))^2 = (-1)^(n + 1)" apply (induct n) - apply (auto simp add: ring_simps power2_eq_square fib_reduce_int + apply (auto simp add: field_simps power2_eq_square fib_reduce_int power_add) done @@ -222,7 +222,7 @@ apply (subst (2) fib_reduce_nat) apply (auto simp add: Suc_eq_plus1) (* again, natdiff_cancel *) apply (subst add_commute, auto) - apply (subst gcd_commute_nat, auto simp add: ring_simps) + apply (subst gcd_commute_nat, auto simp add: field_simps) done lemma coprime_fib_Suc_nat: "coprime (fib n) (fib (Suc n))" @@ -305,7 +305,7 @@ theorem fib_mult_eq_setsum_nat: "fib ((n::nat) + 1) * fib n = (\k \ {..n}. fib k * fib k)" apply (induct n) - apply (auto simp add: atMost_plus_one_nat fib_plus_2_nat ring_simps) + apply (auto simp add: atMost_plus_one_nat fib_plus_2_nat field_simps) done theorem fib_mult_eq_setsum'_nat: diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Number_Theory/Residues.thy --- a/src/HOL/Number_Theory/Residues.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Number_Theory/Residues.thy Mon Apr 26 13:43:31 2010 +0200 @@ -69,7 +69,7 @@ apply (subst mod_add_eq [symmetric]) apply (subst mult_commute) apply (subst zmod_zmult1_eq [symmetric]) - apply (simp add: ring_simps) + apply (simp add: field_simps) done end diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Power.thy --- a/src/HOL/Power.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Power.thy Mon Apr 26 13:43:31 2010 +0200 @@ -400,7 +400,7 @@ text{*Perhaps these should be simprules.*} lemma power_inverse: - fixes a :: "'a::{division_ring,division_by_zero,power}" + fixes a :: "'a::{division_ring,division_ring_inverse_zero,power}" shows "inverse (a ^ n) = (inverse a) ^ n" apply (cases "a = 0") apply (simp add: power_0_left) @@ -408,11 +408,11 @@ done (* TODO: reorient or rename to inverse_power *) lemma power_one_over: - "1 / (a::'a::{field,division_by_zero, power}) ^ n = (1 / a) ^ n" + "1 / (a::'a::{field,division_ring_inverse_zero, power}) ^ n = (1 / a) ^ n" by (simp add: divide_inverse) (rule power_inverse) lemma power_divide: - "(a / b) ^ n = (a::'a::{field,division_by_zero}) ^ n / b ^ n" + "(a / b) ^ n = (a::'a::{field,division_ring_inverse_zero}) ^ n / b ^ n" apply (cases "b = 0") apply (simp add: power_0_left) apply (rule nonzero_power_divide) diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Rat.thy --- a/src/HOL/Rat.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Rat.thy Mon Apr 26 13:43:31 2010 +0200 @@ -444,7 +444,7 @@ end -instance rat :: division_by_zero proof +instance rat :: division_ring_inverse_zero proof qed (simp add: rat_number_expand, simp add: rat_number_collapse) @@ -818,7 +818,7 @@ done lemma of_rat_inverse: - "(of_rat (inverse a)::'a::{field_char_0,division_by_zero}) = + "(of_rat (inverse a)::'a::{field_char_0,division_ring_inverse_zero}) = inverse (of_rat a)" by (cases "a = 0", simp_all add: nonzero_of_rat_inverse) @@ -827,7 +827,7 @@ by (simp add: divide_inverse of_rat_mult nonzero_of_rat_inverse) lemma of_rat_divide: - "(of_rat (a / b)::'a::{field_char_0,division_by_zero}) + "(of_rat (a / b)::'a::{field_char_0,division_ring_inverse_zero}) = of_rat a / of_rat b" by (cases "b = 0") (simp_all add: nonzero_of_rat_divide) @@ -968,7 +968,7 @@ done lemma Rats_inverse [simp]: - fixes a :: "'a::{field_char_0,division_by_zero}" + fixes a :: "'a::{field_char_0,division_ring_inverse_zero}" shows "a \ Rats \ inverse a \ Rats" apply (auto simp add: Rats_def) apply (rule range_eqI) @@ -984,7 +984,7 @@ done lemma Rats_divide [simp]: - fixes a b :: "'a::{field_char_0,division_by_zero}" + fixes a b :: "'a::{field_char_0,division_ring_inverse_zero}" shows "\a \ Rats; b \ Rats\ \ a / b \ Rats" apply (auto simp add: Rats_def) apply (rule range_eqI) diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/RealDef.thy --- a/src/HOL/RealDef.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/RealDef.thy Mon Apr 26 13:43:31 2010 +0200 @@ -279,7 +279,7 @@ lemma INVERSE_ZERO: "inverse 0 = (0::real)" by (simp add: real_inverse_def) -instance real :: division_by_zero +instance real :: division_ring_inverse_zero proof show "inverse 0 = (0::real)" by (rule INVERSE_ZERO) qed diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/RealVector.thy --- a/src/HOL/RealVector.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/RealVector.thy Mon Apr 26 13:43:31 2010 +0200 @@ -207,7 +207,7 @@ by (rule inverse_unique, simp) lemma inverse_scaleR_distrib: - fixes x :: "'a::{real_div_algebra,division_by_zero}" + fixes x :: "'a::{real_div_algebra,division_ring_inverse_zero}" shows "inverse (scaleR a x) = scaleR (inverse a) (inverse x)" apply (case_tac "a = 0", simp) apply (case_tac "x = 0", simp) @@ -250,7 +250,7 @@ lemma of_real_inverse [simp]: "of_real (inverse x) = - inverse (of_real x :: 'a::{real_div_algebra,division_by_zero})" + inverse (of_real x :: 'a::{real_div_algebra,division_ring_inverse_zero})" by (simp add: of_real_def inverse_scaleR_distrib) lemma nonzero_of_real_divide: @@ -260,7 +260,7 @@ lemma of_real_divide [simp]: "of_real (x / y) = - (of_real x / of_real y :: 'a::{real_field,division_by_zero})" + (of_real x / of_real y :: 'a::{real_field,division_ring_inverse_zero})" by (simp add: divide_inverse) lemma of_real_power [simp]: @@ -370,7 +370,7 @@ done lemma Reals_inverse [simp]: - fixes a :: "'a::{real_div_algebra,division_by_zero}" + fixes a :: "'a::{real_div_algebra,division_ring_inverse_zero}" shows "a \ Reals \ inverse a \ Reals" apply (auto simp add: Reals_def) apply (rule range_eqI) @@ -386,7 +386,7 @@ done lemma Reals_divide [simp]: - fixes a b :: "'a::{real_field,division_by_zero}" + fixes a b :: "'a::{real_field,division_ring_inverse_zero}" shows "\a \ Reals; b \ Reals\ \ a / b \ Reals" apply (auto simp add: Reals_def) apply (rule range_eqI) @@ -726,7 +726,7 @@ done lemma norm_inverse: - fixes a :: "'a::{real_normed_div_algebra,division_by_zero}" + fixes a :: "'a::{real_normed_div_algebra,division_ring_inverse_zero}" shows "norm (inverse a) = inverse (norm a)" apply (case_tac "a = 0", simp) apply (erule nonzero_norm_inverse) @@ -738,7 +738,7 @@ by (simp add: divide_inverse norm_mult nonzero_norm_inverse) lemma norm_divide: - fixes a b :: "'a::{real_normed_field,division_by_zero}" + fixes a b :: "'a::{real_normed_field,division_ring_inverse_zero}" shows "norm (a / b) = norm a / norm b" by (simp add: divide_inverse norm_mult norm_inverse) diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Rings.thy --- a/src/HOL/Rings.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Rings.thy Mon Apr 26 13:43:31 2010 +0200 @@ -14,8 +14,8 @@ begin class semiring = ab_semigroup_add + semigroup_mult + - assumes left_distrib[algebra_simps]: "(a + b) * c = a * c + b * c" - assumes right_distrib[algebra_simps]: "a * (b + c) = a * b + a * c" + assumes left_distrib[algebra_simps, field_simps]: "(a + b) * c = a * c + b * c" + assumes right_distrib[algebra_simps, field_simps]: "a * (b + c) = a * b + a * c" begin text{*For the @{text combine_numerals} simproc*} @@ -230,18 +230,15 @@ lemma minus_mult_commute: "- a * b = a * - b" by simp -lemma right_diff_distrib[algebra_simps]: "a * (b - c) = a * b - a * c" +lemma right_diff_distrib[algebra_simps, field_simps]: "a * (b - c) = a * b - a * c" by (simp add: right_distrib diff_minus) -lemma left_diff_distrib[algebra_simps]: "(a - b) * c = a * c - b * c" +lemma left_diff_distrib[algebra_simps, field_simps]: "(a - b) * c = a * c - b * c" by (simp add: left_distrib diff_minus) lemmas ring_distribs[no_atp] = right_distrib left_distrib left_diff_distrib right_diff_distrib -text{*Legacy - use @{text algebra_simps} *} -lemmas ring_simps[no_atp] = algebra_simps - lemma eq_add_iff1: "a * e + c = b * e + d \ (a - b) * e + c = d" by (simp add: algebra_simps) @@ -536,7 +533,7 @@ lemma diff_divide_distrib: "(a - b) / c = a / c - b / c" by (simp add: diff_minus add_divide_distrib) -lemma nonzero_eq_divide_eq: "c \ 0 \ a = b / c \ a * c = b" +lemma nonzero_eq_divide_eq [field_simps]: "c \ 0 \ a = b / c \ a * c = b" proof - assume [simp]: "c \ 0" have "a = b / c \ a * c = (b / c) * c" by simp @@ -544,7 +541,7 @@ finally show ?thesis . qed -lemma nonzero_divide_eq_eq: "c \ 0 \ b / c = a \ b = a * c" +lemma nonzero_divide_eq_eq [field_simps]: "c \ 0 \ b / c = a \ b = a * c" proof - assume [simp]: "c \ 0" have "b / c = a \ (b / c) * c = a * c" by simp @@ -560,7 +557,7 @@ end -class division_by_zero = division_ring + +class division_ring_inverse_zero = division_ring + assumes inverse_zero [simp]: "inverse 0 = 0" begin @@ -861,9 +858,6 @@ subclass ordered_ab_group_add .. -text{*Legacy - use @{text algebra_simps} *} -lemmas ring_simps[no_atp] = algebra_simps - lemma less_add_iff1: "a * e + c < b * e + d \ (a - b) * e + c < d" by (simp add: algebra_simps) @@ -1068,9 +1062,6 @@ end -text{*Legacy - use @{text algebra_simps} *} -lemmas ring_simps[no_atp] = algebra_simps - lemmas mult_sign_intros = mult_nonneg_nonneg mult_nonneg_nonpos mult_nonpos_nonneg mult_nonpos_nonpos diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/SMT/Tools/z3_proof_rules.ML --- a/src/HOL/SMT/Tools/z3_proof_rules.ML Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/SMT/Tools/z3_proof_rules.ML Mon Apr 26 13:43:31 2010 +0200 @@ -1137,7 +1137,8 @@ handle THM _ => NONE in val z3_simpset = HOL_ss addsimps @{thms array_rules} - addsimps @{thms ring_distribs} addsimps @{thms field_eq_simps} + addsimps @{thms ring_distribs} addsimps @{thms field_simps} + addsimps [@{thm times_divide_eq_right}, @{thm times_divide_eq_left}] addsimps @{thms arith_special} addsimps @{thms less_bin_simps} addsimps @{thms le_bin_simps} addsimps @{thms eq_bin_simps} addsimps @{thms add_bin_simps} addsimps @{thms succ_bin_simps} diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/SMT/Z3.thy --- a/src/HOL/SMT/Z3.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/SMT/Z3.thy Mon Apr 26 13:43:31 2010 +0200 @@ -19,7 +19,7 @@ lemmas [z3_rewrite] = refl eq_commute conj_commute disj_commute simp_thms nnf_simps - ring_distribs field_eq_simps if_True if_False + ring_distribs field_simps times_divide_eq_right times_divide_eq_left if_True if_False lemma [z3_rewrite]: "(P \ Q) = (Q = (\P))" by fast diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Series.thy --- a/src/HOL/Series.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Series.thy Mon Apr 26 13:43:31 2010 +0200 @@ -381,7 +381,7 @@ shows "norm x < 1 \ summable (\n. x ^ n)" by (rule geometric_sums [THEN sums_summable]) -lemma half: "0 < 1 / (2::'a::{number_ring,division_by_zero,linordered_field})" +lemma half: "0 < 1 / (2::'a::{number_ring,division_ring_inverse_zero,linordered_field})" by arith lemma power_half_series: "(\n. (1/2::real)^Suc n) sums 1" diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/SetInterval.thy --- a/src/HOL/SetInterval.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/SetInterval.thy Mon Apr 26 13:43:31 2010 +0200 @@ -1095,7 +1095,7 @@ next case (Suc n) moreover with `y \ 0` have "(1 + y) ^ n = (y * inverse y) * (1 + y) ^ n" by simp - ultimately show ?case by (simp add: field_eq_simps divide_inverse) + ultimately show ?case by (simp add: field_simps divide_inverse) qed ultimately show ?thesis by simp qed diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/Tools/numeral_simprocs.ML --- a/src/HOL/Tools/numeral_simprocs.ML Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/Tools/numeral_simprocs.ML Mon Apr 26 13:43:31 2010 +0200 @@ -332,8 +332,8 @@ val field_combine_numerals = Arith_Data.prep_simproc @{theory} ("field_combine_numerals", - ["(i::'a::{number_ring,field,division_by_zero}) + j", - "(i::'a::{number_ring,field,division_by_zero}) - j"], + ["(i::'a::{number_ring,field,division_ring_inverse_zero}) + j", + "(i::'a::{number_ring,field,division_ring_inverse_zero}) - j"], K FieldCombineNumerals.proc); (** Constant folding for multiplication in semirings **) @@ -442,9 +442,9 @@ "(l::'a::{semiring_div,number_ring}) div (m * n)"], K DivCancelNumeralFactor.proc), ("divide_cancel_numeral_factor", - ["((l::'a::{division_by_zero,field,number_ring}) * m) / n", - "(l::'a::{division_by_zero,field,number_ring}) / (m * n)", - "((number_of v)::'a::{division_by_zero,field,number_ring}) / (number_of w)"], + ["((l::'a::{division_ring_inverse_zero,field,number_ring}) * m) / n", + "(l::'a::{division_ring_inverse_zero,field,number_ring}) / (m * n)", + "((number_of v)::'a::{division_ring_inverse_zero,field,number_ring}) / (number_of w)"], K DivideCancelNumeralFactor.proc)]; val field_cancel_numeral_factors = @@ -454,9 +454,9 @@ "(l::'a::{field,number_ring}) = m * n"], K EqCancelNumeralFactor.proc), ("field_cancel_numeral_factor", - ["((l::'a::{division_by_zero,field,number_ring}) * m) / n", - "(l::'a::{division_by_zero,field,number_ring}) / (m * n)", - "((number_of v)::'a::{division_by_zero,field,number_ring}) / (number_of w)"], + ["((l::'a::{division_ring_inverse_zero,field,number_ring}) * m) / n", + "(l::'a::{division_ring_inverse_zero,field,number_ring}) / (m * n)", + "((number_of v)::'a::{division_ring_inverse_zero,field,number_ring}) / (number_of w)"], K DivideCancelNumeralFactor.proc)] @@ -598,8 +598,8 @@ ["((l::'a::idom) * m) dvd n", "(l::'a::idom) dvd (m * n)"], K DvdCancelFactor.proc), ("divide_cancel_factor", - ["((l::'a::{division_by_zero,field}) * m) / n", - "(l::'a::{division_by_zero,field}) / (m * n)"], + ["((l::'a::{division_ring_inverse_zero,field}) * m) / n", + "(l::'a::{division_ring_inverse_zero,field}) / (m * n)"], K DivideCancelFactor.proc)]; end; diff -r 3cbce59ed78d -r 85ee44388f7b src/HOL/ex/Lagrange.thy --- a/src/HOL/ex/Lagrange.thy Mon Apr 26 11:20:18 2010 +0200 +++ b/src/HOL/ex/Lagrange.thy Mon Apr 26 13:43:31 2010 +0200 @@ -34,7 +34,7 @@ sq (x1*y2 + x2*y1 + x3*y4 - x4*y3) + sq (x1*y3 - x2*y4 + x3*y1 + x4*y2) + sq (x1*y4 + x2*y3 - x3*y2 + x4*y1)" -by (simp only: sq_def ring_simps) +by (simp only: sq_def field_simps) text {* A challenge by John Harrison. Takes about 12s on a 1.6GHz machine. *} @@ -50,6 +50,6 @@ sq (p1*u2 + q1*t2 - r1*w2 + s1*v2 - t1*q2 + u1*p2 - v1*s2 + w1*r2) + sq (p1*v2 + q1*w2 + r1*t2 - s1*u2 - t1*r2 + u1*s2 + v1*p2 - w1*q2) + sq (p1*w2 - q1*v2 + r1*u2 + s1*t2 - t1*s2 - u1*r2 + v1*q2 + w1*p2)" -by (simp only: sq_def ring_simps) +by (simp only: sq_def field_simps) end