# HG changeset patch # User nipkow # Date 1515174102 -3600 # Node ID df79ef3b3a41d973ad02e70c130f56a5dd145f97 # Parent 150d40a2562272cb997dca6690489123ddaf156f Renamed (^) to [^] in preparation of the move from "op X" to (X) diff -r 150d40a25622 -r df79ef3b3a41 NEWS --- a/NEWS Fri Jan 05 15:24:57 2018 +0100 +++ b/NEWS Fri Jan 05 18:41:42 2018 +0100 @@ -166,6 +166,8 @@ * Predicate pairwise_coprime abolished, use "pairwise coprime" instead. INCOMPATIBILITY. +* HOL-Algebra: renamed (^) to [^] + * Session HOL-Analysis: Moebius functions and the Riemann mapping theorem. diff -r 150d40a25622 -r df79ef3b3a41 src/HOL/Algebra/FiniteProduct.thy --- a/src/HOL/Algebra/FiniteProduct.thy Fri Jan 05 15:24:57 2018 +0100 +++ b/src/HOL/Algebra/FiniteProduct.thy Fri Jan 05 18:41:42 2018 +0100 @@ -502,12 +502,12 @@ lemma finprod_const: assumes a [simp]: "a : carrier G" - shows "finprod G (%x. a) A = a (^) card A" + shows "finprod G (%x. a) A = a [^] card A" proof (induct A rule: infinite_finite_induct) case (insert b A) show ?case proof (subst finprod_insert[OF insert(1-2)]) - show "a \ (\x\A. a) = a (^) card (insert b A)" + show "a \ (\x\A. a) = a [^] card (insert b A)" by (insert insert, auto, subst m_comm, auto) qed auto qed auto diff -r 150d40a25622 -r df79ef3b3a41 src/HOL/Algebra/Group.thy --- a/src/HOL/Algebra/Group.thy Fri Jan 05 15:24:57 2018 +0100 +++ b/src/HOL/Algebra/Group.thy Fri Jan 05 18:41:42 2018 +0100 @@ -30,7 +30,7 @@ where "Units G = {y. y \ carrier G \ (\x \ carrier G. x \\<^bsub>G\<^esub> y = \\<^bsub>G\<^esub> \ y \\<^bsub>G\<^esub> x = \\<^bsub>G\<^esub>)}" consts - pow :: "[('a, 'm) monoid_scheme, 'a, 'b::semiring_1] => 'a" (infixr "'(^')\" 75) + pow :: "[('a, 'm) monoid_scheme, 'a, 'b::semiring_1] => 'a" (infixr "[^]\" 75) overloading nat_pow == "pow :: [_, 'a, nat] => 'a" begin @@ -44,7 +44,7 @@ in if z < 0 then inv\<^bsub>G\<^esub> (p (nat (-z))) else p (nat z))" end -lemma int_pow_int: "x (^)\<^bsub>G\<^esub> (int n) = x (^)\<^bsub>G\<^esub> n" +lemma int_pow_int: "x [^]\<^bsub>G\<^esub> (int n) = x [^]\<^bsub>G\<^esub> n" by(simp add: int_pow_def nat_pow_def) locale monoid = @@ -196,27 +196,27 @@ text \Power\ lemma (in monoid) nat_pow_closed [intro, simp]: - "x \ carrier G ==> x (^) (n::nat) \ carrier G" + "x \ carrier G ==> x [^] (n::nat) \ carrier G" by (induct n) (simp_all add: nat_pow_def) lemma (in monoid) nat_pow_0 [simp]: - "x (^) (0::nat) = \" + "x [^] (0::nat) = \" by (simp add: nat_pow_def) lemma (in monoid) nat_pow_Suc [simp]: - "x (^) (Suc n) = x (^) n \ x" + "x [^] (Suc n) = x [^] n \ x" by (simp add: nat_pow_def) lemma (in monoid) nat_pow_one [simp]: - "\ (^) (n::nat) = \" + "\ [^] (n::nat) = \" by (induct n) simp_all lemma (in monoid) nat_pow_mult: - "x \ carrier G ==> x (^) (n::nat) \ x (^) m = x (^) (n + m)" + "x \ carrier G ==> x [^] (n::nat) \ x [^] m = x [^] (n + m)" by (induct m) (simp_all add: m_assoc [THEN sym]) lemma (in monoid) nat_pow_pow: - "x \ carrier G ==> (x (^) n) (^) m = x (^) (n * m::nat)" + "x \ carrier G ==> (x [^] n) [^] m = x [^] (n * m::nat)" by (induct m) (simp, simp add: nat_pow_mult add.commute) @@ -406,33 +406,33 @@ text \Power\ lemma (in group) int_pow_def2: - "a (^) (z::int) = (if z < 0 then inv (a (^) (nat (-z))) else a (^) (nat z))" + "a [^] (z::int) = (if z < 0 then inv (a [^] (nat (-z))) else a [^] (nat z))" by (simp add: int_pow_def nat_pow_def Let_def) lemma (in group) int_pow_0 [simp]: - "x (^) (0::int) = \" + "x [^] (0::int) = \" by (simp add: int_pow_def2) lemma (in group) int_pow_one [simp]: - "\ (^) (z::int) = \" + "\ [^] (z::int) = \" by (simp add: int_pow_def2) (* The following are contributed by Joachim Breitner *) lemma (in group) int_pow_closed [intro, simp]: - "x \ carrier G ==> x (^) (i::int) \ carrier G" + "x \ carrier G ==> x [^] (i::int) \ carrier G" by (simp add: int_pow_def2) lemma (in group) int_pow_1 [simp]: - "x \ carrier G \ x (^) (1::int) = x" + "x \ carrier G \ x [^] (1::int) = x" by (simp add: int_pow_def2) lemma (in group) int_pow_neg: - "x \ carrier G \ x (^) (-i::int) = inv (x (^) i)" + "x \ carrier G \ x [^] (-i::int) = inv (x [^] i)" by (simp add: int_pow_def2) lemma (in group) int_pow_mult: - "x \ carrier G \ x (^) (i + j::int) = x (^) i \ x (^) j" + "x \ carrier G \ x [^] (i + j::int) = x [^] i \ x [^] j" proof - have [simp]: "-i - j = -j - i" by simp assume "x : carrier G" then @@ -441,7 +441,7 @@ qed lemma (in group) int_pow_diff: - "x \ carrier G \ x (^) (n - m :: int) = x (^) n \ inv (x (^) m)" + "x \ carrier G \ x [^] (n - m :: int) = x [^] n \ inv (x [^] m)" by(simp only: diff_conv_add_uminus int_pow_mult int_pow_neg) lemma (in group) inj_on_multc: "c \ carrier G \ inj_on (\x. x \ c) (carrier G)" @@ -676,7 +676,7 @@ (* Contributed by Joachim Breitner *) lemma (in group) int_pow_is_hom: - "x \ carrier G \ (op(^) x) \ hom \ carrier = UNIV, mult = op +, one = 0::int \ G " + "x \ carrier G \ (op[^] x) \ hom \ carrier = UNIV, mult = op +, one = 0::int \ G " unfolding hom_def by (simp add: int_pow_mult) @@ -737,7 +737,7 @@ lemma (in comm_monoid) nat_pow_distr: "[| x \ carrier G; y \ carrier G |] ==> - (x \ y) (^) (n::nat) = x (^) n \ y (^) n" + (x \ y) [^] (n::nat) = x [^] n \ y [^] n" by (induct n) (simp, simp add: m_ac) locale comm_group = comm_monoid + group diff -r 150d40a25622 -r df79ef3b3a41 src/HOL/Algebra/More_Finite_Product.thy --- a/src/HOL/Algebra/More_Finite_Product.thy Fri Jan 05 15:24:57 2018 +0100 +++ b/src/HOL/Algebra/More_Finite_Product.thy Fri Jan 05 18:41:42 2018 +0100 @@ -82,14 +82,14 @@ lemma (in monoid) units_of_pow: fixes n :: nat - shows "x \ Units G \ x (^)\<^bsub>units_of G\<^esub> n = x (^)\<^bsub>G\<^esub> n" + shows "x \ Units G \ x [^]\<^bsub>units_of G\<^esub> n = x [^]\<^bsub>G\<^esub> n" apply (induct n) apply (auto simp add: units_group group.is_monoid monoid.nat_pow_0 monoid.nat_pow_Suc units_of_one units_of_mult) done lemma (in cring) units_power_order_eq_one: - "finite (Units R) \ a \ Units R \ a (^) card(Units R) = \" + "finite (Units R) \ a \ Units R \ a [^] card(Units R) = \" apply (subst units_of_carrier [symmetric]) apply (subst units_of_one [symmetric]) apply (subst units_of_pow [symmetric]) diff -r 150d40a25622 -r df79ef3b3a41 src/HOL/Algebra/More_Group.thy --- a/src/HOL/Algebra/More_Group.thy Fri Jan 05 15:24:57 2018 +0100 +++ b/src/HOL/Algebra/More_Group.thy Fri Jan 05 18:41:42 2018 +0100 @@ -113,14 +113,14 @@ lemma (in comm_group) power_order_eq_one: assumes fin [simp]: "finite (carrier G)" and a [simp]: "a \ carrier G" - shows "a (^) card(carrier G) = one G" + shows "a [^] card(carrier G) = one G" proof - have "(\x\carrier G. x) = (\x\carrier G. a \ x)" by (subst (2) finprod_reindex [symmetric], auto simp add: Pi_def inj_on_const_mult surj_const_mult) also have "\ = (\x\carrier G. a) \ (\x\carrier G. x)" by (auto simp add: finprod_multf Pi_def) - also have "(\x\carrier G. a) = a (^) card(carrier G)" + also have "(\x\carrier G. a) = a [^] card(carrier G)" by (auto simp add: finprod_const) finally show ?thesis (* uses the preceeding lemma *) diff -r 150d40a25622 -r df79ef3b3a41 src/HOL/Algebra/Multiplicative_Group.thy --- a/src/HOL/Algebra/Multiplicative_Group.thy Fri Jan 05 15:24:57 2018 +0100 +++ b/src/HOL/Algebra/Multiplicative_Group.thy Fri Jan 05 18:41:42 2018 +0100 @@ -84,7 +84,7 @@ lemma evalRR_monom: assumes a: "a \ carrier R" and x: "x \ carrier R" - shows "eval R R id x (monom P a d) = a \ x (^) d" + shows "eval R R id x (monom P a d) = a \ x [^] d" proof - interpret UP_pre_univ_prop R R id by unfold_locales simp show ?thesis using assms by (simp add: eval_monom) @@ -271,33 +271,33 @@ lemma pow_eq_div2 : fixes m n :: nat assumes x_car: "x \ carrier G" - assumes pow_eq: "x (^) m = x (^) n" - shows "x (^) (m - n) = \" + assumes pow_eq: "x [^] m = x [^] n" + shows "x [^] (m - n) = \" proof (cases "m < n") case False - have "\ \ x (^) m = x (^) m" by (simp add: x_car) - also have "\ = x (^) (m - n) \ x (^) n" + have "\ \ x [^] m = x [^] m" by (simp add: x_car) + also have "\ = x [^] (m - n) \ x [^] n" using False by (simp add: nat_pow_mult x_car) - also have "\ = x (^) (m - n) \ x (^) m" + also have "\ = x [^] (m - n) \ x [^] m" by (simp add: pow_eq) finally show ?thesis by (simp add: x_car) qed simp -definition ord where "ord a = Min {d \ {1 .. order G} . a (^) d = \}" +definition ord where "ord a = Min {d \ {1 .. order G} . a [^] d = \}" lemma assumes finite:"finite (carrier G)" assumes a:"a \ carrier G" shows ord_ge_1: "1 \ ord a" and ord_le_group_order: "ord a \ order G" - and pow_ord_eq_1: "a (^) ord a = \" + and pow_ord_eq_1: "a [^] ord a = \" proof - - have "\inj_on (\x. a (^) x) {0 .. order G}" + have "\inj_on (\x. a [^] x) {0 .. order G}" proof (rule notI) - assume A: "inj_on (\x. a (^) x) {0 .. order G}" + assume A: "inj_on (\x. a [^] x) {0 .. order G}" have "order G + 1 = card {0 .. order G}" by simp - also have "\ = card ((\x. a (^) x) ` {0 .. order G})" (is "_ = card ?S") + also have "\ = card ((\x. a [^] x) ` {0 .. order G})" (is "_ = card ?S") using A by (simp add: card_image) - also have "?S = {a (^) x | x. x \ {0 .. order G}}" by blast + also have "?S = {a [^] x | x. x \ {0 .. order G}}" by blast also have "\ \ carrier G" (is "?S \ _") using a by blast then have "card ?S \ order G" unfolding order_def by (rule card_mono[OF finite]) @@ -305,8 +305,8 @@ qed then obtain x y where x_y:"x \ y" "x \ {0 .. order G}" "y \ {0 .. order G}" - "a (^) x = a (^) y" unfolding inj_on_def by blast - obtain d where "1 \ d" "a (^) d = \" "d \ order G" + "a [^] x = a [^] y" unfolding inj_on_def by blast + obtain d where "1 \ d" "a [^] d = \" "d \ order G" proof cases assume "y < x" with x_y show ?thesis by (intro that[where d="x - y"]) (auto simp add: pow_eq_div2[OF a]) @@ -314,22 +314,22 @@ assume "\y < x" with x_y show ?thesis by (intro that[where d="y - x"]) (auto simp add: pow_eq_div2[OF a]) qed - hence "ord a \ {d \ {1 .. order G} . a (^) d = \}" - unfolding ord_def using Min_in[of "{d \ {1 .. order G} . a (^) d = \}"] + hence "ord a \ {d \ {1 .. order G} . a [^] d = \}" + unfolding ord_def using Min_in[of "{d \ {1 .. order G} . a [^] d = \}"] by fastforce - then show "1 \ ord a" and "ord a \ order G" and "a (^) ord a = \" + then show "1 \ ord a" and "ord a \ order G" and "a [^] ord a = \" by (auto simp: order_def) qed lemma finite_group_elem_finite_ord : assumes "finite (carrier G)" "x \ carrier G" - shows "\ d::nat. d \ 1 \ x (^) d = \" + shows "\ d::nat. d \ 1 \ x [^] d = \" using assms ord_ge_1 pow_ord_eq_1 by auto lemma ord_min: - assumes "finite (carrier G)" "1 \ d" "a \ carrier G" "a (^) d = \" shows "ord a \ d" + assumes "finite (carrier G)" "1 \ d" "a \ carrier G" "a [^] d = \" shows "ord a \ d" proof - - define Ord where "Ord = {d \ {1..order G}. a (^) d = \}" + define Ord where "Ord = {d \ {1..order G}. a [^] d = \}" have fin: "finite Ord" by (auto simp: Ord_def) have in_ord: "ord a \ Ord" using assms pow_ord_eq_1 ord_ge_1 ord_le_group_order by (auto simp: Ord_def) @@ -350,22 +350,22 @@ lemma ord_inj : assumes finite: "finite (carrier G)" assumes a: "a \ carrier G" - shows "inj_on (\ x . a (^) x) {0 .. ord a - 1}" + shows "inj_on (\ x . a [^] x) {0 .. ord a - 1}" proof (rule inj_onI, rule ccontr) - fix x y assume A: "x \ {0 .. ord a - 1}" "y \ {0 .. ord a - 1}" "a (^) x= a (^) y" "x \ y" + fix x y assume A: "x \ {0 .. ord a - 1}" "y \ {0 .. ord a - 1}" "a [^] x= a [^] y" "x \ y" - have "finite {d \ {1..order G}. a (^) d = \}" by auto + have "finite {d \ {1..order G}. a [^] d = \}" by auto { fix x y assume A: "x < y" "x \ {0 .. ord a - 1}" "y \ {0 .. ord a - 1}" - "a (^) x = a (^) y" + "a [^] x = a [^] y" hence "y - x < ord a" by auto also have "\ \ order G" using assms by (simp add: ord_le_group_order) finally have y_x_range:"y - x \ {1 .. order G}" using A by force - have "a (^) (y-x) = \" using a A by (simp add: pow_eq_div2) + have "a [^] (y-x) = \" using a A by (simp add: pow_eq_div2) - hence y_x:"y - x \ {d \ {1.. order G}. a (^) d = \}" using y_x_range by blast + hence y_x:"y - x \ {d \ {1.. order G}. a [^] d = \}" using y_x_range by blast have "min (y - x) (ord a) = ord a" - using Min.in_idem[OF \finite {d \ {1 .. order G} . a (^) d = \}\ y_x] ord_def by auto + using Min.in_idem[OF \finite {d \ {1 .. order G} . a [^] d = \}\ y_x] ord_def by auto with \y - x < ord a\ have False by linarith } note X = this @@ -382,22 +382,22 @@ lemma ord_inj' : assumes finite: "finite (carrier G)" assumes a: "a \ carrier G" - shows "inj_on (\ x . a (^) x) {1 .. ord a}" + shows "inj_on (\ x . a [^] x) {1 .. ord a}" proof (rule inj_onI, rule ccontr) fix x y :: nat - assume A:"x \ {1 .. ord a}" "y \ {1 .. ord a}" "a (^) x = a (^) y" "x\y" + assume A:"x \ {1 .. ord a}" "y \ {1 .. ord a}" "a [^] x = a [^] y" "x\y" { assume "x < ord a" "y < ord a" hence False using ord_inj[OF assms] A unfolding inj_on_def by fastforce } moreover { assume "x = ord a" "y < ord a" - hence "a (^) y = a (^) (0::nat)" using pow_ord_eq_1[OF assms] A by auto + hence "a [^] y = a [^] (0::nat)" using pow_ord_eq_1[OF assms] A by auto hence "y=0" using ord_inj[OF assms] \y < ord a\ unfolding inj_on_def by force hence False using A by fastforce } moreover { assume "y = ord a" "x < ord a" - hence "a (^) x = a (^) (0::nat)" using pow_ord_eq_1[OF assms] A by auto + hence "a [^] x = a [^] (0::nat)" using pow_ord_eq_1[OF assms] A by auto hence "x=0" using ord_inj[OF assms] \x < ord a\ unfolding inj_on_def by force hence False using A by fastforce } @@ -406,35 +406,35 @@ lemma ord_elems : assumes "finite (carrier G)" "a \ carrier G" - shows "{a(^)x | x. x \ (UNIV :: nat set)} = {a(^)x | x. x \ {0 .. ord a - 1}}" (is "?L = ?R") + shows "{a[^]x | x. x \ (UNIV :: nat set)} = {a[^]x | x. x \ {0 .. ord a - 1}}" (is "?L = ?R") proof show "?R \ ?L" by blast { fix y assume "y \ ?L" - then obtain x::nat where x:"y = a(^)x" by auto + then obtain x::nat where x:"y = a[^]x" by auto define r where "r = x mod ord a" then obtain q where q:"x = q * ord a + r" using mod_eqD by atomize_elim presburger - hence "y = (a(^)ord a)(^)q \ a(^)r" + hence "y = (a[^]ord a)[^]q \ a[^]r" using x assms by (simp add: mult.commute nat_pow_mult nat_pow_pow) - hence "y = a(^)r" using assms by (simp add: pow_ord_eq_1) + hence "y = a[^]r" using assms by (simp add: pow_ord_eq_1) have "r < ord a" using ord_ge_1[OF assms] by (simp add: r_def) hence "r \ {0 .. ord a - 1}" by (force simp: r_def) - hence "y \ {a(^)x | x. x \ {0 .. ord a - 1}}" using \y=a(^)r\ by blast + hence "y \ {a[^]x | x. x \ {0 .. ord a - 1}}" using \y=a[^]r\ by blast } thus "?L \ ?R" by auto qed lemma ord_dvd_pow_eq_1 : - assumes "finite (carrier G)" "a \ carrier G" "a (^) k = \" + assumes "finite (carrier G)" "a \ carrier G" "a [^] k = \" shows "ord a dvd k" proof - define r where "r = k mod ord a" then obtain q where q:"k = q*ord a + r" using mod_eqD by atomize_elim presburger - hence "a(^)k = (a(^)ord a)(^)q \ a(^)r" + hence "a[^]k = (a[^]ord a)[^]q \ a[^]r" using assms by (simp add: mult.commute nat_pow_mult nat_pow_pow) - hence "a(^)k = a(^)r" using assms by (simp add: pow_ord_eq_1) - hence "a(^)r = \" using assms(3) by simp + hence "a[^]k = a[^]r" using assms by (simp add: pow_ord_eq_1) + hence "a[^]r = \" using assms(3) by simp have "r < ord a" using ord_ge_1[OF assms(1-2)] by (simp add: r_def) - hence "r = 0" using \a(^)r = \\ ord_def[of a] ord_min[of r a] assms(1-2) by linarith + hence "r = 0" using \a[^]r = \\ ord_def[of a] ord_min[of r a] assms(1-2) by linarith thus ?thesis using q by simp qed @@ -450,14 +450,14 @@ lemma ord_pow_dvd_ord_elem : assumes finite[simp]: "finite (carrier G)" assumes a[simp]:"a \ carrier G" - shows "ord (a(^)n) = ord a div gcd n (ord a)" + shows "ord (a[^]n) = ord a div gcd n (ord a)" proof - - have "(a(^)n) (^) ord a = (a (^) ord a) (^) n" + have "(a[^]n) [^] ord a = (a [^] ord a) [^] n" by (simp add: mult.commute nat_pow_pow) - hence "(a(^)n) (^) ord a = \" by (simp add: pow_ord_eq_1) + hence "(a[^]n) [^] ord a = \" by (simp add: pow_ord_eq_1) obtain q where "n * (ord a div gcd n (ord a)) = ord a * q" by (rule dvd_gcd) - hence "(a(^)n) (^) (ord a div gcd n (ord a)) = (a (^) ord a)(^)q" by (simp add : nat_pow_pow) - hence pow_eq_1: "(a(^)n) (^) (ord a div gcd n (ord a)) = \" + hence "(a[^]n) [^] (ord a div gcd n (ord a)) = (a [^] ord a)[^]q" by (simp add : nat_pow_pow) + hence pow_eq_1: "(a[^]n) [^] (ord a div gcd n (ord a)) = \" by (auto simp add : pow_ord_eq_1[of a]) have "ord a \ 1" using ord_ge_1 by simp have ge_1:"ord a div gcd n (ord a) \ 1" @@ -471,12 +471,12 @@ have "ord a div gcd n (ord a) \ ord a" by simp thus ?thesis using \ord a \ order G\ by linarith qed - hence ord_gcd_elem:"ord a div gcd n (ord a) \ {d \ {1..order G}. (a(^)n) (^) d = \}" + hence ord_gcd_elem:"ord a div gcd n (ord a) \ {d \ {1..order G}. (a[^]n) [^] d = \}" using ge_1 pow_eq_1 by force { fix d :: nat - assume d_elem:"d \ {d \ {1..order G}. (a(^)n) (^) d = \}" + assume d_elem:"d \ {d \ {1..order G}. (a[^]n) [^] d = \}" assume d_lt:"d < ord a div gcd n (ord a)" - hence pow_nd:"a(^)(n*d) = \" using d_elem + hence pow_nd:"a[^](n*d) = \" using d_elem by (simp add : nat_pow_pow) hence "ord a dvd n*d" using assms by (auto simp add : ord_dvd_pow_eq_1) then obtain q where "ord a * q = n*d" by (metis dvd_mult_div_cancel) @@ -500,9 +500,9 @@ have "d > 0" using d_elem by simp hence "ord a div gcd n (ord a) \ d" using dvd_d by (simp add : Nat.dvd_imp_le) hence False using d_lt by simp - } hence ord_gcd_min: "\ d . d \ {d \ {1..order G}. (a(^)n) (^) d = \} + } hence ord_gcd_min: "\ d . d \ {d \ {1..order G}. (a[^]n) [^] d = \} \ d\ord a div gcd n (ord a)" by fastforce - have fin:"finite {d \ {1..order G}. (a(^)n) (^) d = \}" by auto + have fin:"finite {d \ {1..order G}. (a[^]n) [^] d = \}" by auto thus ?thesis using Min_eqI[OF fin ord_gcd_min ord_gcd_elem] unfolding ord_def by simp qed @@ -519,33 +519,33 @@ lemma element_generates_subgroup: assumes finite[simp]: "finite (carrier G)" assumes a[simp]: "a \ carrier G" - shows "subgroup {a (^) i | i. i \ {0 .. ord a - 1}} G" + shows "subgroup {a [^] i | i. i \ {0 .. ord a - 1}} G" proof - show "{a(^)i | i. i \ {0 .. ord a - 1} } \ carrier G" by auto + show "{a[^]i | i. i \ {0 .. ord a - 1} } \ carrier G" by auto next fix x y - assume A: "x \ {a(^)i | i. i \ {0 .. ord a - 1}}" "y \ {a(^)i | i. i \ {0 .. ord a - 1}}" - obtain i::nat where i:"x = a(^)i" and i2:"i \ UNIV" using A by auto - obtain j::nat where j:"y = a(^)j" and j2:"j \ UNIV" using A by auto - have "a(^)(i+j) \ {a(^)i | i. i \ {0 .. ord a - 1}}" using ord_elems[OF assms] A by auto - thus "x \ y \ {a(^)i | i. i \ {0 .. ord a - 1}}" + assume A: "x \ {a[^]i | i. i \ {0 .. ord a - 1}}" "y \ {a[^]i | i. i \ {0 .. ord a - 1}}" + obtain i::nat where i:"x = a[^]i" and i2:"i \ UNIV" using A by auto + obtain j::nat where j:"y = a[^]j" and j2:"j \ UNIV" using A by auto + have "a[^](i+j) \ {a[^]i | i. i \ {0 .. ord a - 1}}" using ord_elems[OF assms] A by auto + thus "x \ y \ {a[^]i | i. i \ {0 .. ord a - 1}}" using i j a ord_elems assms by (auto simp add: nat_pow_mult) next - show "\ \ {a(^)i | i. i \ {0 .. ord a - 1}}" by force + show "\ \ {a[^]i | i. i \ {0 .. ord a - 1}}" by force next - fix x assume x: "x \ {a(^)i | i. i \ {0 .. ord a - 1}}" + fix x assume x: "x \ {a[^]i | i. i \ {0 .. ord a - 1}}" hence x_in_carrier: "x \ carrier G" by auto - then obtain d::nat where d:"x (^) d = \" and "d\1" + then obtain d::nat where d:"x [^] d = \" and "d\1" using finite_group_elem_finite_ord by auto - have inv_1:"x(^)(d - 1) \ x = \" using \d\1\ d nat_pow_Suc[of x "d - 1"] by simp - have elem:"x (^) (d - 1) \ {a(^)i | i. i \ {0 .. ord a - 1}}" + have inv_1:"x[^](d - 1) \ x = \" using \d\1\ d nat_pow_Suc[of x "d - 1"] by simp + have elem:"x [^] (d - 1) \ {a[^]i | i. i \ {0 .. ord a - 1}}" proof - - obtain i::nat where i:"x = a(^)i" using x by auto - hence "x(^)(d - 1) \ {a(^)i | i. i \ (UNIV::nat set)}" by (auto simp add: nat_pow_pow) + obtain i::nat where i:"x = a[^]i" using x by auto + hence "x[^](d - 1) \ {a[^]i | i. i \ (UNIV::nat set)}" by (auto simp add: nat_pow_pow) thus ?thesis using ord_elems[of a] by auto qed - have inv:"inv x = x(^)(d - 1)" using inv_equality[OF inv_1] x_in_carrier by blast - thus "inv x \ {a(^)i | i. i \ {0 .. ord a - 1}}" using elem inv by auto + have inv:"inv x = x[^](d - 1)" using inv_equality[OF inv_1] x_in_carrier by blast + thus "inv x \ {a[^]i | i. i \ {0 .. ord a - 1}}" using elem inv by auto qed lemma ord_dvd_group_order : @@ -553,13 +553,13 @@ assumes a[simp]: "a \ carrier G" shows "ord a dvd order G" proof - - have card_dvd:"card {a(^)i | i. i \ {0 .. ord a - 1}} dvd card (carrier G)" + have card_dvd:"card {a[^]i | i. i \ {0 .. ord a - 1}} dvd card (carrier G)" using lagrange_dvd element_generates_subgroup unfolding order_def by simp - have "inj_on (\ i . a(^)i) {0..ord a - 1}" using ord_inj by simp - hence cards_eq:"card ( (\ i . a(^)i) ` {0..ord a - 1}) = card {0..ord a - 1}" - using card_image[of "\ i . a(^)i" "{0..ord a - 1}"] by auto - have "(\ i . a(^)i) ` {0..ord a - 1} = {a(^)i | i. i \ {0..ord a - 1}}" by auto - hence "card {a(^)i | i. i \ {0..ord a - 1}} = card {0..ord a - 1}" using cards_eq by simp + have "inj_on (\ i . a[^]i) {0..ord a - 1}" using ord_inj by simp + hence cards_eq:"card ( (\ i . a[^]i) ` {0..ord a - 1}) = card {0..ord a - 1}" + using card_image[of "\ i . a[^]i" "{0..ord a - 1}"] by auto + have "(\ i . a[^]i) ` {0..ord a - 1} = {a[^]i | i. i \ {0..ord a - 1}}" by auto + hence "card {a[^]i | i. i \ {0..ord a - 1}} = card {0..ord a - 1}" using cards_eq by simp also have "\ = ord a" using ord_ge_1[of a] by simp finally show ?thesis using card_dvd by (simp add: order_def) qed @@ -580,7 +580,7 @@ lemma mult_mult_of: "mult (mult_of R) = mult R" by (simp add: mult_of_def) -lemma nat_pow_mult_of: "op (^)\<^bsub>mult_of R\<^esub> = (op (^)\<^bsub>R\<^esub> :: _ \ nat \ _)" +lemma nat_pow_mult_of: "op [^]\<^bsub>mult_of R\<^esub> = (op [^]\<^bsub>R\<^esub> :: _ \ nat \ _)" by (simp add: mult_of_def fun_eq_iff nat_pow_def) lemma one_mult_of: "\\<^bsub>mult_of R\<^esub> = \\<^bsub>R\<^esub>" @@ -609,7 +609,7 @@ lemma (in monoid) Units_pow_closed : fixes d :: nat assumes "x \ Units G" - shows "x (^) d \ Units G" + shows "x [^] d \ Units G" by (metis assms group.is_monoid monoid.nat_pow_closed units_group units_of_carrier units_of_pow) lemma (in comm_monoid) is_monoid: @@ -644,7 +644,7 @@ have "\x. eval R R id x f \ \" proof - fix x - have "(\i\{..deg R f}. id (coeff P f i) \ x (^) i) \ \" + have "(\i\{..deg R f}. id (coeff P f i) \ x [^] i) \ \" using 0 lcoeff_nonzero_nonzero[where p = f] by simp thus "eval R R id x f \ \" using 0 unfolding eval_def P_def by simp qed @@ -697,7 +697,7 @@ fixes p d :: nat assumes finite:"finite (carrier R)" assumes d_neq_zero : "d \ 0" - shows "card {x \ carrier R. x (^) d = \} \ d" + shows "card {x \ carrier R. x [^] d = \} \ d" proof - let ?f = "monom (UP R) \\<^bsub>R\<^esub> d \\<^bsub> (UP R)\<^esub> monom (UP R) \\<^bsub>R\<^esub> 0" have one_in_carrier:"\ \ carrier R" by simp @@ -708,9 +708,9 @@ have roots_bound:"finite {a \ carrier R . eval R R id a ?f = \} \ card {a \ carrier R . eval R R id a ?f = \} \ deg R ?f" using finite by (intro R.roots_bound[OF _ f_not_zero]) simp - have subs:"{x \ carrier R. x (^) d = \} \ {a \ carrier R . eval R R id a ?f = \}" + have subs:"{x \ carrier R. x [^] d = \} \ {a \ carrier R . eval R R id a ?f = \}" by (auto simp: R.evalRR_simps) - then have "card {x \ carrier R. x (^) d = \} \ + then have "card {x \ carrier R. x [^] d = \} \ card {a \ carrier R. eval R R id a ?f = \}" using finite by (simp add : card_mono) thus ?thesis using \deg R ?f = d\ roots_bound by linarith qed @@ -728,7 +728,7 @@ \ lemma (in group) pow_order_eq_1: - assumes "finite (carrier G)" "x \ carrier G" shows "x (^) order G = \" + assumes "finite (carrier G)" "x \ carrier G" shows "x [^] order G = \" using assms by (metis nat_pow_pow ord_dvd_group_order pow_ord_eq_1 dvdE nat_pow_one) (* XXX remove in AFP devel, replaced by div_eq_dividend_iff *) @@ -742,7 +742,7 @@ lemma (in group) assumes finite': "finite (carrier G)" assumes "a \ carrier G" - shows pow_ord_eq_ord_iff: "group.ord G (a (^) k) = ord a \ coprime k (ord a)" (is "?L \ ?R") + shows pow_ord_eq_ord_iff: "group.ord G (a [^] k) = ord a \ coprime k (ord a)" (is "?L \ ?R") proof assume A: ?L then show ?R using assms ord_ge_1 [OF assms] @@ -762,32 +762,32 @@ note mult_of_simps[simp] have finite': "finite (carrier (mult_of R))" using finite by (rule finite_mult_of) - interpret G:group "mult_of R" rewrites "op (^)\<^bsub>mult_of R\<^esub> = (op (^) :: _ \ nat \ _)" and "\\<^bsub>mult_of R\<^esub> = \" + interpret G:group "mult_of R" rewrites "op [^]\<^bsub>mult_of R\<^esub> = (op [^] :: _ \ nat \ _)" and "\\<^bsub>mult_of R\<^esub> = \" by (rule field_mult_group) simp_all from exists obtain a where a:"a \ carrier (mult_of R)" and ord_a: "group.ord (mult_of R) a = d" by (auto simp add: card_gt_0_iff) - have set_eq1:"{a(^)n| n. n \ {1 .. d}} = {x \ carrier (mult_of R). x (^) d = \}" + have set_eq1:"{a[^]n| n. n \ {1 .. d}} = {x \ carrier (mult_of R). x [^] d = \}" proof (rule card_seteq) - show "finite {x \ carrier (mult_of R). x (^) d = \}" using finite by auto + show "finite {x \ carrier (mult_of R). x [^] d = \}" using finite by auto - show "{a(^)n| n. n \ {1 ..d}} \ {x \ carrier (mult_of R). x(^)d = \}" + show "{a[^]n| n. n \ {1 ..d}} \ {x \ carrier (mult_of R). x[^]d = \}" proof - fix x assume "x \ {a(^)n | n. n \ {1 .. d}}" - then obtain n where n:"x = a(^)n \ n \ {1 .. d}" by auto - have "x(^)d =(a(^)d)(^)n" using n a ord_a by (simp add:nat_pow_pow mult.commute) - hence "x(^)d = \" using ord_a G.pow_ord_eq_1[OF finite' a] by fastforce - thus "x \ {x \ carrier (mult_of R). x(^)d = \}" using G.nat_pow_closed[OF a] n by blast + fix x assume "x \ {a[^]n | n. n \ {1 .. d}}" + then obtain n where n:"x = a[^]n \ n \ {1 .. d}" by auto + have "x[^]d =(a[^]d)[^]n" using n a ord_a by (simp add:nat_pow_pow mult.commute) + hence "x[^]d = \" using ord_a G.pow_ord_eq_1[OF finite' a] by fastforce + thus "x \ {x \ carrier (mult_of R). x[^]d = \}" using G.nat_pow_closed[OF a] n by blast qed - show "card {x \ carrier (mult_of R). x (^) d = \} \ card {a(^)n | n. n \ {1 .. d}}" + show "card {x \ carrier (mult_of R). x [^] d = \} \ card {a[^]n | n. n \ {1 .. d}}" proof - - have *:"{a(^)n | n. n \ {1 .. d }} = ((\ n. a(^)n) ` {1 .. d})" by auto + have *:"{a[^]n | n. n \ {1 .. d }} = ((\ n. a[^]n) ` {1 .. d})" by auto have "0 < order (mult_of R)" unfolding order_mult_of[OF finite] using card_mono[OF finite, of "{\, \}"] by (simp add: order_def) - have "card {x \ carrier (mult_of R). x (^) d = \} \ card {x \ carrier R. x (^) d = \}" + have "card {x \ carrier (mult_of R). x [^] d = \} \ card {x \ carrier R. x [^] d = \}" using finite by (auto intro: card_mono) also have "\ \ d" using \0 < order (mult_of R)\ num_roots_le_deg[OF finite, of d] by (simp add : dvd_pos_nat[OF _ \d dvd order (mult_of R)\]) @@ -796,20 +796,20 @@ qed have set_eq2:"{x \ carrier (mult_of R) . group.ord (mult_of R) x = d} - = (\ n . a(^)n) ` {n \ {1 .. d}. group.ord (mult_of R) (a(^)n) = d}" (is "?L = ?R") + = (\ n . a[^]n) ` {n \ {1 .. d}. group.ord (mult_of R) (a[^]n) = d}" (is "?L = ?R") proof { fix x assume x:"x \ (carrier (mult_of R)) \ group.ord (mult_of R) x = d" - hence "x \ {x \ carrier (mult_of R). x (^) d = \}" + hence "x \ {x \ carrier (mult_of R). x [^] d = \}" by (simp add: G.pow_ord_eq_1[OF finite', of x, symmetric]) - then obtain n where n:"x = a(^)n \ n \ {1 .. d}" using set_eq1 by blast + then obtain n where n:"x = a[^]n \ n \ {1 .. d}" using set_eq1 by blast hence "x \ ?R" using x by fast } thus "?L \ ?R" by blast show "?R \ ?L" using a by (auto simp add: carrier_mult_of[symmetric] simp del: carrier_mult_of) qed - have "inj_on (\ n . a(^)n) {n \ {1 .. d}. group.ord (mult_of R) (a(^)n) = d}" + have "inj_on (\ n . a[^]n) {n \ {1 .. d}. group.ord (mult_of R) (a[^]n) = d}" using G.ord_inj'[OF finite' a, unfolded ord_a] unfolding inj_on_def by fast - hence "card ((\n. a(^)n) ` {n \ {1 .. d}. group.ord (mult_of R) (a(^)n) = d}) - = card {k \ {1 .. d}. group.ord (mult_of R) (a(^)k) = d}" + hence "card ((\n. a[^]n) ` {n \ {1 .. d}. group.ord (mult_of R) (a[^]n) = d}) + = card {k \ {1 .. d}. group.ord (mult_of R) (a[^]k) = d}" using card_image by blast thus ?thesis using set_eq2 G.pow_ord_eq_ord_iff[OF finite' \a \ _\, unfolded ord_a] by (simp add: phi'_def) @@ -820,13 +820,13 @@ theorem (in field) finite_field_mult_group_has_gen : assumes finite:"finite (carrier R)" - shows "\ a \ carrier (mult_of R) . carrier (mult_of R) = {a(^)i | i::nat . i \ UNIV}" + shows "\ a \ carrier (mult_of R) . carrier (mult_of R) = {a[^]i | i::nat . i \ UNIV}" proof - note mult_of_simps[simp] have finite': "finite (carrier (mult_of R))" using finite by (rule finite_mult_of) interpret G: group "mult_of R" rewrites - "op (^)\<^bsub>mult_of R\<^esub> = (op (^) :: _ \ nat \ _)" and "\\<^bsub>mult_of R\<^esub> = \" + "op [^]\<^bsub>mult_of R\<^esub> = (op [^] :: _ \ nat \ _)" and "\\<^bsub>mult_of R\<^esub> = \" by (rule field_mult_group) (simp_all add: fun_eq_iff nat_pow_def) let ?N = "\ x . card {a \ carrier (mult_of R). group.ord (mult_of R) a = x}" @@ -888,17 +888,17 @@ hence "?N (order (mult_of R)) > 0" using * by (simp add: phi'_nonzero) then obtain a where a:"a \ carrier (mult_of R)" and a_ord:"group.ord (mult_of R) a = order (mult_of R)" by (auto simp add: card_gt_0_iff) - hence set_eq:"{a(^)i | i::nat. i \ UNIV} = (\x. a(^)x) ` {0 .. group.ord (mult_of R) a - 1}" + hence set_eq:"{a[^]i | i::nat. i \ UNIV} = (\x. a[^]x) ` {0 .. group.ord (mult_of R) a - 1}" using G.ord_elems[OF finite'] by auto - have card_eq:"card ((\x. a(^)x) ` {0 .. group.ord (mult_of R) a - 1}) = card {0 .. group.ord (mult_of R) a - 1}" + have card_eq:"card ((\x. a[^]x) ` {0 .. group.ord (mult_of R) a - 1}) = card {0 .. group.ord (mult_of R) a - 1}" by (intro card_image G.ord_inj finite' a) - hence "card ((\ x . a(^)x) ` {0 .. group.ord (mult_of R) a - 1}) = card {0 ..order (mult_of R) - 1}" + hence "card ((\ x . a[^]x) ` {0 .. group.ord (mult_of R) a - 1}) = card {0 ..order (mult_of R) - 1}" using assms by (simp add: card_eq a_ord) - hence card_R_minus_1:"card {a(^)i | i::nat. i \ UNIV} = order (mult_of R)" + hence card_R_minus_1:"card {a[^]i | i::nat. i \ UNIV} = order (mult_of R)" using * by (subst set_eq) auto - have **:"{a(^)i | i::nat. i \ UNIV} \ carrier (mult_of R)" + have **:"{a[^]i | i::nat. i \ UNIV} \ carrier (mult_of R)" using G.nat_pow_closed[OF a] by auto - with _ have "carrier (mult_of R) = {a(^)i|i::nat. i \ UNIV}" + with _ have "carrier (mult_of R) = {a[^]i|i::nat. i \ UNIV}" by (rule card_seteq[symmetric]) (simp_all add: card_R_minus_1 finite order_def del: UNIV_I) thus ?thesis using a by blast qed diff -r 150d40a25622 -r df79ef3b3a41 src/HOL/Algebra/Ring.thy --- a/src/HOL/Algebra/Ring.thy Fri Jan 05 15:24:57 2018 +0100 +++ b/src/HOL/Algebra/Ring.thy Fri Jan 05 18:41:42 2018 +0100 @@ -146,13 +146,13 @@ lemmas finsum_reindex = add.finprod_reindex -(* The following would be wrong. Needed is the equivalent of (^) for addition, +(* The following would be wrong. Needed is the equivalent of [^] for addition, or indeed the canonical embedding from Nat into the monoid. lemma finsum_const: assumes fin [simp]: "finite A" and a [simp]: "a : carrier G" - shows "finsum G (%x. a) A = a (^) card A" + shows "finsum G (%x. a) A = a [^] card A" using fin apply induct apply force apply (subst finsum_insert) @@ -427,7 +427,7 @@ a_lcomm m_lcomm r_distr l_null r_null l_minus r_minus lemma (in semiring) nat_pow_zero: - "(n::nat) \ 0 \ \ (^) n = \" + "(n::nat) \ 0 \ \ [^] n = \" by (induct n) simp_all context semiring begin diff -r 150d40a25622 -r df79ef3b3a41 src/HOL/Algebra/UnivPoly.thy --- a/src/HOL/Algebra/UnivPoly.thy Fri Jan 05 15:24:57 2018 +0100 +++ b/src/HOL/Algebra/UnivPoly.thy Fri Jan 05 18:41:42 2018 +0100 @@ -1175,7 +1175,7 @@ eval :: "[('a, 'm) ring_scheme, ('b, 'n) ring_scheme, 'a => 'b, 'b, nat => 'a] => 'b" where "eval R S phi s = (\p \ carrier (UP R). - \\<^bsub>S\<^esub>i \ {..deg R p}. phi (coeff (UP R) p i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i)" + \\<^bsub>S\<^esub>i \ {..deg R p}. phi (coeff (UP R) p i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i)" context UP begin @@ -1183,7 +1183,7 @@ lemma eval_on_carrier: fixes S (structure) shows "p \ carrier P ==> - eval R S phi s p = (\\<^bsub>S\<^esub> i \ {..deg R p}. phi (coeff P p i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i)" + eval R S phi s p = (\\<^bsub>S\<^esub> i \ {..deg R p}. phi (coeff P p i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i)" by (unfold eval_def, fold P_def) simp lemma eval_extensional: @@ -1227,35 +1227,35 @@ then show "eval R S h s (p \\<^bsub>P\<^esub> q) = eval R S h s p \\<^bsub>S\<^esub> eval R S h s q" proof (simp only: eval_on_carrier P.a_closed) from S R have - "(\\<^bsub>S \<^esub>i\{..deg R (p \\<^bsub>P\<^esub> q)}. h (coeff P (p \\<^bsub>P\<^esub> q) i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i) = + "(\\<^bsub>S \<^esub>i\{..deg R (p \\<^bsub>P\<^esub> q)}. h (coeff P (p \\<^bsub>P\<^esub> q) i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i) = (\\<^bsub>S \<^esub>i\{..deg R (p \\<^bsub>P\<^esub> q)} \ {deg R (p \\<^bsub>P\<^esub> q)<..max (deg R p) (deg R q)}. - h (coeff P (p \\<^bsub>P\<^esub> q) i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i)" + h (coeff P (p \\<^bsub>P\<^esub> q) i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i)" by (simp cong: S.finsum_cong add: deg_aboveD S.finsum_Un_disjoint ivl_disj_int_one Pi_def del: coeff_add) also from R have "... = (\\<^bsub>S\<^esub> i \ {..max (deg R p) (deg R q)}. - h (coeff P (p \\<^bsub>P\<^esub> q) i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i)" + h (coeff P (p \\<^bsub>P\<^esub> q) i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i)" by (simp add: ivl_disj_un_one) also from R S have "... = - (\\<^bsub>S\<^esub>i\{..max (deg R p) (deg R q)}. h (coeff P p i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i) \\<^bsub>S\<^esub> - (\\<^bsub>S\<^esub>i\{..max (deg R p) (deg R q)}. h (coeff P q i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i)" + (\\<^bsub>S\<^esub>i\{..max (deg R p) (deg R q)}. h (coeff P p i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i) \\<^bsub>S\<^esub> + (\\<^bsub>S\<^esub>i\{..max (deg R p) (deg R q)}. h (coeff P q i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i)" by (simp cong: S.finsum_cong add: S.l_distr deg_aboveD ivl_disj_int_one Pi_def) also have "... = (\\<^bsub>S\<^esub> i \ {..deg R p} \ {deg R p<..max (deg R p) (deg R q)}. - h (coeff P p i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i) \\<^bsub>S\<^esub> + h (coeff P p i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i) \\<^bsub>S\<^esub> (\\<^bsub>S\<^esub> i \ {..deg R q} \ {deg R q<..max (deg R p) (deg R q)}. - h (coeff P q i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i)" + h (coeff P q i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i)" by (simp only: ivl_disj_un_one max.cobounded1 max.cobounded2) also from R S have "... = - (\\<^bsub>S\<^esub> i \ {..deg R p}. h (coeff P p i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i) \\<^bsub>S\<^esub> - (\\<^bsub>S\<^esub> i \ {..deg R q}. h (coeff P q i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i)" + (\\<^bsub>S\<^esub> i \ {..deg R p}. h (coeff P p i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i) \\<^bsub>S\<^esub> + (\\<^bsub>S\<^esub> i \ {..deg R q}. h (coeff P q i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i)" by (simp cong: S.finsum_cong add: deg_aboveD S.finsum_Un_disjoint ivl_disj_int_one Pi_def) finally show - "(\\<^bsub>S\<^esub>i \ {..deg R (p \\<^bsub>P\<^esub> q)}. h (coeff P (p \\<^bsub>P\<^esub> q) i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i) = - (\\<^bsub>S\<^esub>i \ {..deg R p}. h (coeff P p i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i) \\<^bsub>S\<^esub> - (\\<^bsub>S\<^esub>i \ {..deg R q}. h (coeff P q i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i)" . + "(\\<^bsub>S\<^esub>i \ {..deg R (p \\<^bsub>P\<^esub> q)}. h (coeff P (p \\<^bsub>P\<^esub> q) i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i) = + (\\<^bsub>S\<^esub>i \ {..deg R p}. h (coeff P p i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i) \\<^bsub>S\<^esub> + (\\<^bsub>S\<^esub>i \ {..deg R q}. h (coeff P q i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i)" . qed next show "eval R S h s \\<^bsub>P\<^esub> = \\<^bsub>S\<^esub>" @@ -1266,31 +1266,31 @@ then show "eval R S h s (p \\<^bsub>P\<^esub> q) = eval R S h s p \\<^bsub>S\<^esub> eval R S h s q" proof (simp only: eval_on_carrier UP_mult_closed) from R S have - "(\\<^bsub>S\<^esub> i \ {..deg R (p \\<^bsub>P\<^esub> q)}. h (coeff P (p \\<^bsub>P\<^esub> q) i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i) = + "(\\<^bsub>S\<^esub> i \ {..deg R (p \\<^bsub>P\<^esub> q)}. h (coeff P (p \\<^bsub>P\<^esub> q) i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i) = (\\<^bsub>S\<^esub> i \ {..deg R (p \\<^bsub>P\<^esub> q)} \ {deg R (p \\<^bsub>P\<^esub> q)<..deg R p + deg R q}. - h (coeff P (p \\<^bsub>P\<^esub> q) i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i)" + h (coeff P (p \\<^bsub>P\<^esub> q) i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i)" by (simp cong: S.finsum_cong add: deg_aboveD S.finsum_Un_disjoint ivl_disj_int_one Pi_def del: coeff_mult) also from R have "... = - (\\<^bsub>S\<^esub> i \ {..deg R p + deg R q}. h (coeff P (p \\<^bsub>P\<^esub> q) i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i)" + (\\<^bsub>S\<^esub> i \ {..deg R p + deg R q}. h (coeff P (p \\<^bsub>P\<^esub> q) i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i)" by (simp only: ivl_disj_un_one deg_mult_ring) also from R S have "... = (\\<^bsub>S\<^esub> i \ {..deg R p + deg R q}. \\<^bsub>S\<^esub> k \ {..i}. h (coeff P p k) \\<^bsub>S\<^esub> h (coeff P q (i - k)) \\<^bsub>S\<^esub> - (s (^)\<^bsub>S\<^esub> k \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> (i - k)))" + (s [^]\<^bsub>S\<^esub> k \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> (i - k)))" by (simp cong: S.finsum_cong add: S.nat_pow_mult Pi_def S.m_ac S.finsum_rdistr) also from R S have "... = - (\\<^bsub>S\<^esub> i\{..deg R p}. h (coeff P p i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i) \\<^bsub>S\<^esub> - (\\<^bsub>S\<^esub> i\{..deg R q}. h (coeff P q i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i)" + (\\<^bsub>S\<^esub> i\{..deg R p}. h (coeff P p i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i) \\<^bsub>S\<^esub> + (\\<^bsub>S\<^esub> i\{..deg R q}. h (coeff P q i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i)" by (simp add: S.cauchy_product [THEN sym] bound.intro deg_aboveD S.m_ac Pi_def) finally show - "(\\<^bsub>S\<^esub> i \ {..deg R (p \\<^bsub>P\<^esub> q)}. h (coeff P (p \\<^bsub>P\<^esub> q) i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i) = - (\\<^bsub>S\<^esub> i \ {..deg R p}. h (coeff P p i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i) \\<^bsub>S\<^esub> - (\\<^bsub>S\<^esub> i \ {..deg R q}. h (coeff P q i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i)" . + "(\\<^bsub>S\<^esub> i \ {..deg R (p \\<^bsub>P\<^esub> q)}. h (coeff P (p \\<^bsub>P\<^esub> q) i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i) = + (\\<^bsub>S\<^esub> i \ {..deg R p}. h (coeff P p i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i) \\<^bsub>S\<^esub> + (\\<^bsub>S\<^esub> i \ {..deg R q}. h (coeff P q i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i)" . qed qed @@ -1314,13 +1314,13 @@ shows "eval R S h s (monom P \ 1) = s" proof (simp only: eval_on_carrier monom_closed R.one_closed) from S have - "(\\<^bsub>S\<^esub> i\{..deg R (monom P \ 1)}. h (coeff P (monom P \ 1) i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i) = + "(\\<^bsub>S\<^esub> i\{..deg R (monom P \ 1)}. h (coeff P (monom P \ 1) i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i) = (\\<^bsub>S\<^esub> i\{..deg R (monom P \ 1)} \ {deg R (monom P \ 1)<..1}. - h (coeff P (monom P \ 1) i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i)" + h (coeff P (monom P \ 1) i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i)" by (simp cong: S.finsum_cong del: coeff_monom add: deg_aboveD S.finsum_Un_disjoint ivl_disj_int_one Pi_def) also have "... = - (\\<^bsub>S\<^esub> i \ {..1}. h (coeff P (monom P \ 1) i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i)" + (\\<^bsub>S\<^esub> i \ {..1}. h (coeff P (monom P \ 1) i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i)" by (simp only: ivl_disj_un_one deg_monom_le R.one_closed) also have "... = s" proof (cases "s = \\<^bsub>S\<^esub>") @@ -1329,7 +1329,7 @@ case False then show ?thesis by (simp add: S Pi_def) qed finally show "(\\<^bsub>S\<^esub> i \ {..deg R (monom P \ 1)}. - h (coeff P (monom P \ 1) i) \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> i) = s" . + h (coeff P (monom P \ 1) i) \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> i) = s" . qed end @@ -1342,7 +1342,7 @@ lemma (in UP_cring) monom_pow: assumes R: "a \ carrier R" - shows "(monom P a n) (^)\<^bsub>P\<^esub> m = monom P (a (^) m) (n * m)" + shows "(monom P a n) [^]\<^bsub>P\<^esub> m = monom P (a [^] m) (n * m)" proof (induct m) case 0 from R show ?case by simp next @@ -1351,25 +1351,25 @@ qed lemma (in ring_hom_cring) hom_pow [simp]: - "x \ carrier R ==> h (x (^) n) = h x (^)\<^bsub>S\<^esub> (n::nat)" + "x \ carrier R ==> h (x [^] n) = h x [^]\<^bsub>S\<^esub> (n::nat)" by (induct n) simp_all lemma (in UP_univ_prop) Eval_monom: - "r \ carrier R ==> Eval (monom P r n) = h r \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> n" + "r \ carrier R ==> Eval (monom P r n) = h r \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> n" proof - assume R: "r \ carrier R" - from R have "Eval (monom P r n) = Eval (monom P r 0 \\<^bsub>P\<^esub> (monom P \ 1) (^)\<^bsub>P\<^esub> n)" + from R have "Eval (monom P r n) = Eval (monom P r 0 \\<^bsub>P\<^esub> (monom P \ 1) [^]\<^bsub>P\<^esub> n)" by (simp del: monom_mult add: monom_mult [THEN sym] monom_pow) also from R eval_monom1 [where s = s, folded Eval_def] - have "... = h r \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> n" + have "... = h r \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> n" by (simp add: eval_const [where s = s, folded Eval_def]) finally show ?thesis . qed lemma (in UP_pre_univ_prop) eval_monom: assumes R: "r \ carrier R" and S: "s \ carrier S" - shows "eval R S h s (monom P r n) = h r \\<^bsub>S\<^esub> s (^)\<^bsub>S\<^esub> n" + shows "eval R S h s (monom P r n) = h r \\<^bsub>S\<^esub> s [^]\<^bsub>S\<^esub> n" proof - interpret UP_univ_prop R S h P s "eval R S h s" using UP_pre_univ_prop_axioms P_def R S @@ -1411,11 +1411,11 @@ interpret ring_hom_cring P S Phi by fact interpret ring_hom_cring P S Psi by fact have "Phi p = - Phi (\\<^bsub>P \<^esub>i \ {..deg R p}. monom P (coeff P p i) 0 \\<^bsub>P\<^esub> monom P \ 1 (^)\<^bsub>P\<^esub> i)" + Phi (\\<^bsub>P \<^esub>i \ {..deg R p}. monom P (coeff P p i) 0 \\<^bsub>P\<^esub> monom P \ 1 [^]\<^bsub>P\<^esub> i)" by (simp add: up_repr P monom_mult [THEN sym] monom_pow del: monom_mult) also have "... = - Psi (\\<^bsub>P \<^esub>i\{..deg R p}. monom P (coeff P p i) 0 \\<^bsub>P\<^esub> monom P \ 1 (^)\<^bsub>P\<^esub> i)" + Psi (\\<^bsub>P \<^esub>i\{..deg R p}. monom P (coeff P p i) 0 \\<^bsub>P\<^esub> monom P \ 1 [^]\<^bsub>P\<^esub> i)" by (simp add: Phi Psi P Pi_def comp_def) also have "... = Psi p" by (simp add: up_repr P monom_mult [THEN sym] monom_pow del: monom_mult) @@ -1445,7 +1445,7 @@ context monoid begin -lemma nat_pow_eone[simp]: assumes x_in_G: "x \ carrier G" shows "x (^) (1::nat) = x" +lemma nat_pow_eone[simp]: assumes x_in_G: "x \ carrier G" shows "x [^] (1::nat) = x" using nat_pow_Suc [of x 0] unfolding nat_pow_0 [of x] unfolding l_one [OF x_in_G] by simp end @@ -1550,14 +1550,14 @@ lemma long_div_theorem: assumes g_in_P [simp]: "g \ carrier P" and f_in_P [simp]: "f \ carrier P" and g_not_zero: "g \ \\<^bsub>P\<^esub>" - shows "\q r (k::nat). (q \ carrier P) \ (r \ carrier P) \ (lcoeff g)(^)\<^bsub>R\<^esub>k \\<^bsub>P\<^esub> f = g \\<^bsub>P\<^esub> q \\<^bsub>P\<^esub> r \ (r = \\<^bsub>P\<^esub> \ deg R r < deg R g)" + shows "\q r (k::nat). (q \ carrier P) \ (r \ carrier P) \ (lcoeff g)[^]\<^bsub>R\<^esub>k \\<^bsub>P\<^esub> f = g \\<^bsub>P\<^esub> q \\<^bsub>P\<^esub> r \ (r = \\<^bsub>P\<^esub> \ deg R r < deg R g)" using f_in_P proof (induct "deg R f" arbitrary: "f" rule: nat_less_induct) case (1 f) note f_in_P [simp] = "1.prems" let ?pred = "(\ q r (k::nat). (q \ carrier P) \ (r \ carrier P) - \ (lcoeff g)(^)\<^bsub>R\<^esub>k \\<^bsub>P\<^esub> f = g \\<^bsub>P\<^esub> q \\<^bsub>P\<^esub> r \ (r = \\<^bsub>P\<^esub> \ deg R r < deg R g))" + \ (lcoeff g)[^]\<^bsub>R\<^esub>k \\<^bsub>P\<^esub> f = g \\<^bsub>P\<^esub> q \\<^bsub>P\<^esub> r \ (r = \\<^bsub>P\<^esub> \ deg R r < deg R g))" let ?lg = "lcoeff g" and ?lf = "lcoeff f" show ?case proof (cases "deg R f < deg R g") @@ -1585,7 +1585,7 @@ next case False note deg_f_nzero = False { - have exist: "lcoeff g (^) ?k \\<^bsub>P\<^esub> f = g \\<^bsub>P\<^esub> ?q \\<^bsub>P\<^esub> \\<^bsub>P\<^esub> ?f1" + have exist: "lcoeff g [^] ?k \\<^bsub>P\<^esub> f = g \\<^bsub>P\<^esub> ?q \\<^bsub>P\<^esub> \\<^bsub>P\<^esub> ?f1" by (simp add: minus_add r_neg sym [ OF a_assoc [of "g \\<^bsub>P\<^esub> ?q" "\\<^bsub>P\<^esub> (g \\<^bsub>P\<^esub> ?q)" "lcoeff g \\<^bsub>P\<^esub> f"]]) have deg_remainder_l_f: "deg R (\\<^bsub>P\<^esub> ?f1) < deg R f" @@ -1611,28 +1611,28 @@ qed (simp_all add: deg_f_nzero) qed then obtain q' r' k' - where rem_desc: "?lg (^) (k'::nat) \\<^bsub>P\<^esub> (\\<^bsub>P\<^esub> ?f1) = g \\<^bsub>P\<^esub> q' \\<^bsub>P\<^esub> r'" + where rem_desc: "?lg [^] (k'::nat) \\<^bsub>P\<^esub> (\\<^bsub>P\<^esub> ?f1) = g \\<^bsub>P\<^esub> q' \\<^bsub>P\<^esub> r'" and rem_deg: "(r' = \\<^bsub>P\<^esub> \ deg R r' < deg R g)" and q'_in_carrier: "q' \ carrier P" and r'_in_carrier: "r' \ carrier P" using "1.hyps" using f1_in_carrier by blast show ?thesis - proof (rule exI3 [of _ "((?lg (^) k') \\<^bsub>P\<^esub> ?q \\<^bsub>P\<^esub> q')" r' "Suc k'"], intro conjI) - show "(?lg (^) (Suc k')) \\<^bsub>P\<^esub> f = g \\<^bsub>P\<^esub> ((?lg (^) k') \\<^bsub>P\<^esub> ?q \\<^bsub>P\<^esub> q') \\<^bsub>P\<^esub> r'" + proof (rule exI3 [of _ "((?lg [^] k') \\<^bsub>P\<^esub> ?q \\<^bsub>P\<^esub> q')" r' "Suc k'"], intro conjI) + show "(?lg [^] (Suc k')) \\<^bsub>P\<^esub> f = g \\<^bsub>P\<^esub> ((?lg [^] k') \\<^bsub>P\<^esub> ?q \\<^bsub>P\<^esub> q') \\<^bsub>P\<^esub> r'" proof - - have "(?lg (^) (Suc k')) \\<^bsub>P\<^esub> f = (?lg (^) k') \\<^bsub>P\<^esub> (g \\<^bsub>P\<^esub> ?q \\<^bsub>P\<^esub> \\<^bsub>P\<^esub> ?f1)" + have "(?lg [^] (Suc k')) \\<^bsub>P\<^esub> f = (?lg [^] k') \\<^bsub>P\<^esub> (g \\<^bsub>P\<^esub> ?q \\<^bsub>P\<^esub> \\<^bsub>P\<^esub> ?f1)" using smult_assoc1 [OF _ _ f_in_P] using exist by simp - also have "\ = (?lg (^) k') \\<^bsub>P\<^esub> (g \\<^bsub>P\<^esub> ?q) \\<^bsub>P\<^esub> ((?lg (^) k') \\<^bsub>P\<^esub> ( \\<^bsub>P\<^esub> ?f1))" + also have "\ = (?lg [^] k') \\<^bsub>P\<^esub> (g \\<^bsub>P\<^esub> ?q) \\<^bsub>P\<^esub> ((?lg [^] k') \\<^bsub>P\<^esub> ( \\<^bsub>P\<^esub> ?f1))" using UP_smult_r_distr by simp - also have "\ = (?lg (^) k') \\<^bsub>P\<^esub> (g \\<^bsub>P\<^esub> ?q) \\<^bsub>P\<^esub> (g \\<^bsub>P\<^esub> q' \\<^bsub>P\<^esub> r')" + also have "\ = (?lg [^] k') \\<^bsub>P\<^esub> (g \\<^bsub>P\<^esub> ?q) \\<^bsub>P\<^esub> (g \\<^bsub>P\<^esub> q' \\<^bsub>P\<^esub> r')" unfolding rem_desc .. - also have "\ = (?lg (^) k') \\<^bsub>P\<^esub> (g \\<^bsub>P\<^esub> ?q) \\<^bsub>P\<^esub> g \\<^bsub>P\<^esub> q' \\<^bsub>P\<^esub> r'" - using sym [OF a_assoc [of "?lg (^) k' \\<^bsub>P\<^esub> (g \\<^bsub>P\<^esub> ?q)" "g \\<^bsub>P\<^esub> q'" "r'"]] + also have "\ = (?lg [^] k') \\<^bsub>P\<^esub> (g \\<^bsub>P\<^esub> ?q) \\<^bsub>P\<^esub> g \\<^bsub>P\<^esub> q' \\<^bsub>P\<^esub> r'" + using sym [OF a_assoc [of "?lg [^] k' \\<^bsub>P\<^esub> (g \\<^bsub>P\<^esub> ?q)" "g \\<^bsub>P\<^esub> q'" "r'"]] using r'_in_carrier q'_in_carrier by simp - also have "\ = (?lg (^) k') \\<^bsub>P\<^esub> (?q \\<^bsub>P\<^esub> g) \\<^bsub>P\<^esub> q' \\<^bsub>P\<^esub> g \\<^bsub>P\<^esub> r'" + also have "\ = (?lg [^] k') \\<^bsub>P\<^esub> (?q \\<^bsub>P\<^esub> g) \\<^bsub>P\<^esub> q' \\<^bsub>P\<^esub> g \\<^bsub>P\<^esub> r'" using q'_in_carrier by (auto simp add: m_comm) - also have "\ = (((?lg (^) k') \\<^bsub>P\<^esub> ?q) \\<^bsub>P\<^esub> g) \\<^bsub>P\<^esub> q' \\<^bsub>P\<^esub> g \\<^bsub>P\<^esub> r'" + also have "\ = (((?lg [^] k') \\<^bsub>P\<^esub> ?q) \\<^bsub>P\<^esub> g) \\<^bsub>P\<^esub> q' \\<^bsub>P\<^esub> g \\<^bsub>P\<^esub> r'" using smult_assoc2 q'_in_carrier "1.prems" by auto - also have "\ = ((?lg (^) k') \\<^bsub>P\<^esub> ?q \\<^bsub>P\<^esub> q') \\<^bsub>P\<^esub> g \\<^bsub>P\<^esub> r'" + also have "\ = ((?lg [^] k') \\<^bsub>P\<^esub> ?q \\<^bsub>P\<^esub> q') \\<^bsub>P\<^esub> g \\<^bsub>P\<^esub> r'" using sym [OF l_distr] and q'_in_carrier by auto finally show ?thesis using m_comm q'_in_carrier by auto qed @@ -1740,7 +1740,7 @@ from deg_minus_monom [OF a R_not_trivial] have deg_g_nzero: "deg R ?g \ 0" by simp have "\q r (k::nat). q \ carrier P \ r \ carrier P \ - lcoeff ?g (^) k \\<^bsub>P\<^esub> f = ?g \\<^bsub>P\<^esub> q \\<^bsub>P\<^esub> r \ (r = \\<^bsub>P\<^esub> \ deg R r < deg R ?g)" + lcoeff ?g [^] k \\<^bsub>P\<^esub> f = ?g \\<^bsub>P\<^esub> q \\<^bsub>P\<^esub> r \ (r = \\<^bsub>P\<^esub> \ deg R r < deg R ?g)" using long_div_theorem [OF _ f deg_nzero_nzero [OF deg_g_nzero]] a by auto then show ?thesis diff -r 150d40a25622 -r df79ef3b3a41 src/HOL/Decision_Procs/Algebra_Aux.thy --- a/src/HOL/Decision_Procs/Algebra_Aux.thy Fri Jan 05 15:24:57 2018 +0100 +++ b/src/HOL/Decision_Procs/Algebra_Aux.thy Fri Jan 05 18:41:42 2018 +0100 @@ -190,7 +190,7 @@ with assms show "x \ y = \" by (simp add: minus_eq r_neg) qed -lemma power2_eq_square: "x \ carrier R \ x (^) (2::nat) = x \ x" +lemma power2_eq_square: "x \ carrier R \ x [^] (2::nat) = x \ x" by (simp add: numeral_eq_Suc) lemma eq_neg_iff_add_eq_0: @@ -230,7 +230,7 @@ end -lemma (in cring) of_int_power [simp]: "\i ^ n\ = \i\ (^) n" +lemma (in cring) of_int_power [simp]: "\i ^ n\ = \i\ [^] n" by (induct n) (simp_all add: m_ac) definition cring_class_ops :: "'a::comm_ring_1 ring" @@ -267,7 +267,7 @@ lemma minus_class: "x \\<^bsub>cring_class_ops\<^esub> y = x - y" by (simp add: a_minus_def carrier_class plus_class uminus_class) -lemma power_class: "x (^)\<^bsub>cring_class_ops\<^esub> n = x ^ n" +lemma power_class: "x [^]\<^bsub>cring_class_ops\<^esub> n = x ^ n" by (induct n) (simp_all add: one_class times_class monoid.nat_pow_0 [OF comm_monoid.axioms(1) [OF cring.axioms(2) [OF cring_class]]] monoid.nat_pow_Suc [OF comm_monoid.axioms(1) [OF cring.axioms(2) [OF cring_class]]]) @@ -288,14 +288,14 @@ and "(x::'a) \\<^bsub>cring_class_ops\<^esub> y = x * y" and "\\<^bsub>cring_class_ops\<^esub> (x::'a) = - x" and "(x::'a) \\<^bsub>cring_class_ops\<^esub> y = x - y" - and "(x::'a) (^)\<^bsub>cring_class_ops\<^esub> n = x ^ n" + and "(x::'a) [^]\<^bsub>cring_class_ops\<^esub> n = x ^ n" and "\n\\<^sub>\\<^bsub>cring_class_ops\<^esub> = of_nat n" and "((\i\\<^bsub>cring_class_ops\<^esub>)::'a) = of_int i" and "(Int.of_int (numeral m)::'a) = numeral m" by (simp_all add: cring_class class_simps) lemma (in domain) nat_pow_eq_0_iff [simp]: - "a \ carrier R \ (a (^) (n::nat) = \) = (a = \ \ n \ 0)" + "a \ carrier R \ (a [^] (n::nat) = \) = (a = \ \ n \ 0)" by (induct n) (auto simp add: integral_iff) lemma (in domain) square_eq_iff: @@ -446,7 +446,7 @@ lemma nonzero_power_divide: "a \ carrier R \ b \ carrier R \ b \ \ \ - (a \ b) (^) (n::nat) = a (^) n \ b (^) n" + (a \ b) [^] (n::nat) = a [^] n \ b [^] n" by (induct n) (simp_all add: nonzero_divide_divide_eq_left) lemma r_diff_distr: @@ -504,7 +504,7 @@ and "(x::'a) \\<^bsub>cring_class_ops\<^esub> y = x * y" and "\\<^bsub>cring_class_ops\<^esub> (x::'a) = - x" and "(x::'a) \\<^bsub>cring_class_ops\<^esub> y = x - y" - and "(x::'a) (^)\<^bsub>cring_class_ops\<^esub> n = x ^ n" + and "(x::'a) [^]\<^bsub>cring_class_ops\<^esub> n = x ^ n" and "\n\\<^sub>\\<^bsub>cring_class_ops\<^esub> = of_nat n" and "((\i\\<^bsub>cring_class_ops\<^esub>)::'a) = of_int i" and "(x::'a) \\<^bsub>cring_class_ops\<^esub> y = x / y" diff -r 150d40a25622 -r df79ef3b3a41 src/HOL/Decision_Procs/Commutative_Ring.thy --- a/src/HOL/Decision_Procs/Commutative_Ring.thy Fri Jan 05 15:24:57 2018 +0100 +++ b/src/HOL/Decision_Procs/Commutative_Ring.thy Fri Jan 05 18:41:42 2018 +0100 @@ -58,7 +58,7 @@ where "Ipol l (Pc c) = \c\" | "Ipol l (Pinj i P) = Ipol (drop i l) P" - | "Ipol l (PX P x Q) = Ipol l P \ head l (^) x \ Ipol (drop 1 l) Q" + | "Ipol l (PX P x Q) = Ipol l P \ head l [^] x \ Ipol (drop 1 l) Q" lemma Ipol_Pc: "Ipol l (Pc 0) = \" @@ -77,7 +77,7 @@ | "Ipolex l (Add P Q) = Ipolex l P \ Ipolex l Q" | "Ipolex l (Sub P Q) = Ipolex l P \ Ipolex l Q" | "Ipolex l (Mul P Q) = Ipolex l P \ Ipolex l Q" - | "Ipolex l (Pow p n) = Ipolex l p (^) n" + | "Ipolex l (Pow p n) = Ipolex l p [^] n" | "Ipolex l (Neg P) = \ Ipolex l P" lemma Ipolex_Const: @@ -302,7 +302,7 @@ a_ac m_ac nat_pow_mult [symmetric] of_int_2) text \Power\ -lemma pow_ci: "in_carrier ls \ Ipol ls (pow n P) = Ipol ls P (^) n" +lemma pow_ci: "in_carrier ls \ Ipol ls (pow n P) = Ipol ls P [^] n" proof (induct n arbitrary: P rule: less_induct) case (less k) consider "k = 0" | "k > 0" by arith @@ -313,7 +313,7 @@ next case 2 then have "k div 2 < k" by arith - with less have *: "Ipol ls (pow (k div 2) (sqr P)) = Ipol ls (sqr P) (^) (k div 2)" + with less have *: "Ipol ls (pow (k div 2) (sqr P)) = Ipol ls (sqr P) [^] (k div 2)" by simp show ?thesis proof (cases "even k") @@ -358,7 +358,7 @@ where "Imon l (Mc c) = \c\" | "Imon l (Minj i M) = Imon (drop i l) M" - | "Imon l (MX x M) = Imon (drop 1 l) M \ head l (^) x" + | "Imon l (MX x M) = Imon (drop 1 l) M \ head l [^] x" lemma (in cring) Imon_closed [simp]: "in_carrier l \ Imon l m \ carrier R" by (induct m arbitrary: l) simp_all @@ -385,7 +385,7 @@ lemma (in cring) Minj_pred_correct: "0 < i \ Imon (drop 1 l) (Minj_pred i M) = Imon l (Minj i M)" by (simp add: Minj_pred_def mkMinj_correct) -lemma (in cring) mkMX_correct: "in_carrier l \ Imon l (mkMX i M) = Imon l M \ head l (^) i" +lemma (in cring) mkMX_correct: "in_carrier l \ Imon l (mkMX i M) = Imon l M \ head l [^] i" by (induct M) (simp_all add: Minj_pred_correct [simplified] nat_pow_mult [symmetric] m_ac split: mon.split) @@ -485,18 +485,18 @@ next case (PX_MX P i Q j M) from \in_carrier l\ - have eq1: "(Imon (drop (Suc 0) l) M \ head l (^) (j - i)) \ - Ipol l (snd (mfactor P (MX (j - i) M))) \ head l (^) i = + have eq1: "(Imon (drop (Suc 0) l) M \ head l [^] (j - i)) \ + Ipol l (snd (mfactor P (MX (j - i) M))) \ head l [^] i = Imon (drop (Suc 0) l) M \ Ipol l (snd (mfactor P (MX (j - i) M))) \ - (head l (^) (j - i) \ head l (^) i)" + (head l [^] (j - i) \ head l [^] i)" by (simp add: m_ac) from \in_carrier l\ - have eq2: "(Imon (drop (Suc 0) l) M \ head l (^) j) \ - (Ipol l (snd (mfactor P (mkMinj (Suc 0) M))) \ head l (^) (i - j)) = + have eq2: "(Imon (drop (Suc 0) l) M \ head l [^] j) \ + (Ipol l (snd (mfactor P (mkMinj (Suc 0) M))) \ head l [^] (i - j)) = Imon (drop (Suc 0) l) M \ Ipol l (snd (mfactor P (mkMinj (Suc 0) M))) \ - (head l (^) (i - j) \ head l (^) j)" + (head l [^] (i - j) \ head l [^] j)" by (simp add: m_ac) from PX_MX \in_carrier l\ show ?case by (simp add: mkPX_ci mkMinj_correct l_distr eq1 eq2 split_beta nat_pow_mult) diff -r 150d40a25622 -r df79ef3b3a41 src/HOL/Decision_Procs/Reflective_Field.thy --- a/src/HOL/Decision_Procs/Reflective_Field.thy Fri Jan 05 15:24:57 2018 +0100 +++ b/src/HOL/Decision_Procs/Reflective_Field.thy Fri Jan 05 18:41:42 2018 +0100 @@ -39,7 +39,7 @@ | "feval xs (FMul a b) = feval xs a \ feval xs b" | "feval xs (FNeg a) = \ feval xs a" | "feval xs (FDiv a b) = feval xs a \ feval xs b" - | "feval xs (FPow a n) = feval xs a (^) n" + | "feval xs (FPow a n) = feval xs a [^] n" lemma (in field) feval_Cnst: "feval xs (FCnst 0) = \" @@ -96,7 +96,7 @@ | "peval xs (PExpr1 (PSub a b)) = peval xs a \ peval xs b" | "peval xs (PExpr1 (PNeg a)) = \ peval xs a" | "peval xs (PExpr2 (PMul a b)) = peval xs a \ peval xs b" - | "peval xs (PExpr2 (PPow a n)) = peval xs a (^) n" + | "peval xs (PExpr2 (PPow a n)) = peval xs a [^] n" lemma (in field) peval_Cnst: "peval xs (PExpr1 (PCnst 0)) = \" @@ -264,7 +264,7 @@ lemma (in field) isin_correct': "in_carrier xs \ isin e n e' 1 = Some (p, e'') \ - peval xs e' = peval xs e (^) (n - p) \ peval xs e''" + peval xs e' = peval xs e [^] (n - p) \ peval xs e''" "in_carrier xs \ isin e n e' 1 = Some (p, e'') \ p \ n" using isin_correct [where m = 1] by simp_all diff -r 150d40a25622 -r df79ef3b3a41 src/HOL/Decision_Procs/ex/Commutative_Ring_Ex.thy --- a/src/HOL/Decision_Procs/ex/Commutative_Ring_Ex.thy Fri Jan 05 15:24:57 2018 +0100 +++ b/src/HOL/Decision_Procs/ex/Commutative_Ring_Ex.thy Fri Jan 05 18:41:42 2018 +0100 @@ -13,8 +13,8 @@ lemma (in cring) assumes "x \ carrier R" "y \ carrier R" "z \ carrier R" - shows "\4\ \ x (^) (5::nat) \ y (^) (3::nat) \ x (^) (2::nat) \ \3\ \ x \ z \ \3\ (^) (5::nat) = - \12\ \ x (^) (7::nat) \ y (^) (3::nat) \ z \ x \ \243\" + shows "\4\ \ x [^] (5::nat) \ y [^] (3::nat) \ x [^] (2::nat) \ \3\ \ x \ z \ \3\ [^] (5::nat) = + \12\ \ x [^] (7::nat) \ y [^] (3::nat) \ z \ x \ \243\" by ring lemma "((x::int) + y) ^ 2 = x ^ 2 + y ^ 2 + 2 * x * y" @@ -22,7 +22,7 @@ lemma (in cring) assumes "x \ carrier R" "y \ carrier R" - shows "(x \ y) (^) (2::nat) = x (^) (2::nat) \ y (^) (2::nat) \ \2\ \ x \ y" + shows "(x \ y) [^] (2::nat) = x [^] (2::nat) \ y [^] (2::nat) \ \2\ \ x \ y" by ring lemma "((x::int) + y) ^ 3 = x ^ 3 + y ^ 3 + 3 * x ^ 2 * y + 3 * y ^ 2 * x" @@ -30,8 +30,8 @@ lemma (in cring) assumes "x \ carrier R" "y \ carrier R" - shows "(x \ y) (^) (3::nat) = - x (^) (3::nat) \ y (^) (3::nat) \ \3\ \ x (^) (2::nat) \ y \ \3\ \ y (^) (2::nat) \ x" + shows "(x \ y) [^] (3::nat) = + x [^] (3::nat) \ y [^] (3::nat) \ \3\ \ x [^] (2::nat) \ y \ \3\ \ y [^] (2::nat) \ x" by ring lemma "((x::int) - y) ^ 3 = x ^ 3 + 3 * x * y ^ 2 + (- 3) * y * x ^ 2 - y ^ 3" @@ -39,8 +39,8 @@ lemma (in cring) assumes "x \ carrier R" "y \ carrier R" - shows "(x \ y) (^) (3::nat) = - x (^) (3::nat) \ \3\ \ x \ y (^) (2::nat) \ (\ \3\) \ y \ x (^) (2::nat) \ y (^) (3::nat)" + shows "(x \ y) [^] (3::nat) = + x [^] (3::nat) \ \3\ \ x \ y [^] (2::nat) \ (\ \3\) \ y \ x [^] (2::nat) \ y [^] (3::nat)" by ring lemma "((x::int) - y) ^ 2 = x ^ 2 + y ^ 2 - 2 * x * y" @@ -48,7 +48,7 @@ lemma (in cring) assumes "x \ carrier R" "y \ carrier R" - shows "(x \ y) (^) (2::nat) = x (^) (2::nat) \ y (^) (2::nat) \ \2\ \ x \ y" + shows "(x \ y) [^] (2::nat) = x [^] (2::nat) \ y [^] (2::nat) \ \2\ \ x \ y" by ring lemma " ((a::int) + b + c) ^ 2 = a ^ 2 + b ^ 2 + c ^ 2 + 2 * a * b + 2 * b * c + 2 * a * c" @@ -56,8 +56,8 @@ lemma (in cring) assumes "a \ carrier R" "b \ carrier R" "c \ carrier R" - shows " (a \ b \ c) (^) (2::nat) = - a (^) (2::nat) \ b (^) (2::nat) \ c (^) (2::nat) \ \2\ \ a \ b \ \2\ \ b \ c \ \2\ \ a \ c" + shows " (a \ b \ c) [^] (2::nat) = + a [^] (2::nat) \ b [^] (2::nat) \ c [^] (2::nat) \ \2\ \ a \ b \ \2\ \ b \ c \ \2\ \ a \ c" by ring lemma "((a::int) - b - c) ^ 2 = a ^ 2 + b ^ 2 + c ^ 2 - 2 * a * b + 2 * b * c - 2 * a * c" @@ -65,8 +65,8 @@ lemma (in cring) assumes "a \ carrier R" "b \ carrier R" "c \ carrier R" - shows "(a \ b \ c) (^) (2::nat) = - a (^) (2::nat) \ b (^) (2::nat) \ c (^) (2::nat) \ \2\ \ a \ b \ \2\ \ b \ c \ \2\ \ a \ c" + shows "(a \ b \ c) [^] (2::nat) = + a [^] (2::nat) \ b [^] (2::nat) \ c [^] (2::nat) \ \2\ \ a \ b \ \2\ \ b \ c \ \2\ \ a \ c" by ring lemma "(a::int) * b + a * c = a * (b + c)" @@ -82,7 +82,7 @@ lemma (in cring) assumes "a \ carrier R" "b \ carrier R" - shows "a (^) (2::nat) \ b (^) (2::nat) = (a \ b) \ (a \ b)" + shows "a [^] (2::nat) \ b [^] (2::nat) = (a \ b) \ (a \ b)" by ring lemma "(a::int) ^ 3 - b ^ 3 = (a - b) * (a ^ 2 + a * b + b ^ 2)" @@ -90,7 +90,7 @@ lemma (in cring) assumes "a \ carrier R" "b \ carrier R" - shows "a (^) (3::nat) \ b (^) (3::nat) = (a \ b) \ (a (^) (2::nat) \ a \ b \ b (^) (2::nat))" + shows "a [^] (3::nat) \ b [^] (3::nat) = (a \ b) \ (a [^] (2::nat) \ a \ b \ b [^] (2::nat))" by ring lemma "(a::int) ^ 3 + b ^ 3 = (a + b) * (a ^ 2 - a * b + b ^ 2)" @@ -98,7 +98,7 @@ lemma (in cring) assumes "a \ carrier R" "b \ carrier R" - shows "a (^) (3::nat) \ b (^) (3::nat) = (a \ b) \ (a (^) (2::nat) \ a \ b \ b (^) (2::nat))" + shows "a [^] (3::nat) \ b [^] (3::nat) = (a \ b) \ (a [^] (2::nat) \ a \ b \ b [^] (2::nat))" by ring lemma "(a::int) ^ 4 - b ^ 4 = (a - b) * (a + b) * (a ^ 2 + b ^ 2)" @@ -106,7 +106,7 @@ lemma (in cring) assumes "a \ carrier R" "b \ carrier R" - shows "a (^) (4::nat) \ b (^) (4::nat) = (a \ b) \ (a \ b) \ (a (^) (2::nat) \ b (^) (2::nat))" + shows "a [^] (4::nat) \ b [^] (4::nat) = (a \ b) \ (a \ b) \ (a [^] (2::nat) \ b [^] (2::nat))" by ring lemma "(a::int) ^ 10 - b ^ 10 = @@ -116,11 +116,11 @@ lemma (in cring) assumes "a \ carrier R" "b \ carrier R" - shows "a (^) (10::nat) \ b (^) (10::nat) = - (a \ b) \ (a (^) (9::nat) \ a (^) (8::nat) \ b \ a (^) (7::nat) \ b (^) (2::nat) \ - a (^) (6::nat) \ b (^) (3::nat) \ a (^) (5::nat) \ b (^) (4::nat) \ - a (^) (4::nat) \ b (^) (5::nat) \ a (^) (3::nat) \ b (^) (6::nat) \ - a (^) (2::nat) \ b (^) (7::nat) \ a \ b (^) (8::nat) \ b (^) (9::nat))" + shows "a [^] (10::nat) \ b [^] (10::nat) = + (a \ b) \ (a [^] (9::nat) \ a [^] (8::nat) \ b \ a [^] (7::nat) \ b [^] (2::nat) \ + a [^] (6::nat) \ b [^] (3::nat) \ a [^] (5::nat) \ b [^] (4::nat) \ + a [^] (4::nat) \ b [^] (5::nat) \ a [^] (3::nat) \ b [^] (6::nat) \ + a [^] (2::nat) \ b [^] (7::nat) \ a \ b [^] (8::nat) \ b [^] (9::nat))" by ring lemma "(x::'a::field) \ 0 \ (1 - 1 / x) * x - x + 1 = 0" diff -r 150d40a25622 -r df79ef3b3a41 src/HOL/Number_Theory/Prime_Powers.thy --- a/src/HOL/Number_Theory/Prime_Powers.thy Fri Jan 05 15:24:57 2018 +0100 +++ b/src/HOL/Number_Theory/Prime_Powers.thy Fri Jan 05 18:41:42 2018 +0100 @@ -510,4 +510,4 @@ finally show ?thesis . qed (insert assms, auto simp: mangoldt_def) -end \ No newline at end of file +end diff -r 150d40a25622 -r df79ef3b3a41 src/HOL/Number_Theory/Residues.thy --- a/src/HOL/Number_Theory/Residues.thy Fri Jan 05 15:24:57 2018 +0100 +++ b/src/HOL/Number_Theory/Residues.thy Fri Jan 05 18:41:42 2018 +0100 @@ -149,7 +149,7 @@ using m_gt_one by (auto simp: R_def residue_ring_def) (* FIXME revise algebra library to use 1? *) -lemma pow_cong: "(x mod m) (^) n = x^n mod m" +lemma pow_cong: "(x mod m) [^] n = x^n mod m" using m_gt_one apply (induct n) apply (auto simp add: nat_pow_def one_cong) @@ -413,12 +413,12 @@ have car: "carrier (residue_ring (int p)) - {\\<^bsub>residue_ring (int p)\<^esub>} = {1 .. int p - 1}" by (auto simp add: R.zero_cong R.res_carrier_eq) - have "x (^)\<^bsub>residue_ring (int p)\<^esub> i = x ^ i mod (int p)" + have "x [^]\<^bsub>residue_ring (int p)\<^esub> i = x ^ i mod (int p)" if "x \ {1 .. int p - 1}" for x and i :: nat using that R.pow_cong[of x i] by auto moreover obtain a where a: "a \ {1 .. int p - 1}" - and a_gen: "{1 .. int p - 1} = {a(^)\<^bsub>residue_ring (int p)\<^esub>i|i::nat . i \ UNIV}" + and a_gen: "{1 .. int p - 1} = {a[^]\<^bsub>residue_ring (int p)\<^esub>i|i::nat . i \ UNIV}" using field.finite_field_mult_group_has_gen[OF R.is_field] by (auto simp add: car[symmetric] carrier_mult_of) moreover diff -r 150d40a25622 -r df79ef3b3a41 src/HOL/Quotient_Examples/Int_Pow.thy --- a/src/HOL/Quotient_Examples/Int_Pow.thy Fri Jan 05 15:24:57 2018 +0100 +++ b/src/HOL/Quotient_Examples/Int_Pow.thy Fri Jan 05 18:41:42 2018 +0100 @@ -20,7 +20,7 @@ (* first some additional lemmas that are missing in monoid *) lemma Units_nat_pow_Units [intro, simp]: - "a \ Units G \ a (^) (c :: nat) \ Units G" by (induct c) auto + "a \ Units G \ a [^] (c :: nat) \ Units G" by (induct c) auto lemma Units_r_cancel [simp]: "[| z \ Units G; x \ carrier G; y \ carrier G |] ==> @@ -49,14 +49,14 @@ lemma mult_same_comm: assumes [simp, intro]: "a \ Units G" - shows "a (^) (m::nat) \ inv (a (^) (n::nat)) = inv (a (^) n) \ a (^) m" + shows "a [^] (m::nat) \ inv (a [^] (n::nat)) = inv (a [^] n) \ a [^] m" proof (cases "m\n") have [simp]: "a \ carrier G" using \a \ _\ by (rule Units_closed) case True then obtain k where *:"m = k + n" and **:"m = n + k" by (metis le_iff_add add.commute) - have "a (^) (m::nat) \ inv (a (^) (n::nat)) = a (^) k" + have "a [^] (m::nat) \ inv (a [^] (n::nat)) = a [^] k" using * by (auto simp add: nat_pow_mult[symmetric] m_assoc) - also have "\ = inv (a (^) n) \ a (^) m" + also have "\ = inv (a [^] n) \ a [^] m" using ** by (auto simp add: nat_pow_mult[symmetric] m_assoc[symmetric]) finally show ?thesis . next @@ -64,15 +64,15 @@ case False then obtain k where *:"n = k + m" and **:"n = m + k" by (metis le_iff_add add.commute nat_le_linear) - have "a (^) (m::nat) \ inv (a (^) (n::nat)) = inv(a (^) k)" + have "a [^] (m::nat) \ inv (a [^] (n::nat)) = inv(a [^] k)" using * by (auto simp add: nat_pow_mult[symmetric] m_assoc[symmetric] inv_mult_units) - also have "\ = inv (a (^) n) \ a (^) m" + also have "\ = inv (a [^] n) \ a [^] m" using ** by (auto simp add: nat_pow_mult[symmetric] m_assoc inv_mult_units) finally show ?thesis . qed lemma mult_inv_same_comm: - "a \ Units G \ inv (a (^) (m::nat)) \ inv (a (^) (n::nat)) = inv (a (^) n) \ inv (a (^) m)" + "a \ Units G \ inv (a [^] (m::nat)) \ inv (a [^] (n::nat)) = inv (a [^] n) \ inv (a [^] m)" by (simp add: inv_mult_units[symmetric] nat_pow_mult ac_simps Units_closed) context @@ -82,15 +82,15 @@ lemma int_pow_rsp: assumes eq: "(b::nat) + e = d + c" assumes a_in_G [simp, intro]: "a \ Units G" - shows "a (^) b \ inv (a (^) c) = a (^) d \ inv (a (^) e)" + shows "a [^] b \ inv (a [^] c) = a [^] d \ inv (a [^] e)" proof(cases "b\c") have [simp]: "a \ carrier G" using \a \ _\ by (rule Units_closed) case True then obtain n where "b = n + c" by (metis le_iff_add add.commute) then have "d = n + e" using eq by arith - from \b = _\ have "a (^) b \ inv (a (^) c) = a (^) n" + from \b = _\ have "a [^] b \ inv (a [^] c) = a [^] n" by (auto simp add: nat_pow_mult[symmetric] m_assoc) - also from \d = _\ have "\ = a (^) d \ inv (a (^) e)" + also from \d = _\ have "\ = a [^] d \ inv (a [^] e)" by (auto simp add: nat_pow_mult[symmetric] m_assoc) finally show ?thesis . next @@ -98,20 +98,20 @@ case False then obtain n where "c = n + b" by (metis le_iff_add add.commute nat_le_linear) then have "e = n + d" using eq by arith - from \c = _\ have "a (^) b \ inv (a (^) c) = inv (a (^) n)" + from \c = _\ have "a [^] b \ inv (a [^] c) = inv (a [^] n)" by (auto simp add: nat_pow_mult[symmetric] m_assoc[symmetric] inv_mult_units) - also from \e = _\ have "\ = a (^) d \ inv (a (^) e)" + also from \e = _\ have "\ = a [^] d \ inv (a [^] e)" by (auto simp add: nat_pow_mult[symmetric] m_assoc[symmetric] inv_mult_units) finally show ?thesis . qed (* This definition is more convinient than the definition in HOL/Algebra/Group because - it doesn't contain a test z < 0 when a (^) z is being defined. + it doesn't contain a test z < 0 when a [^] z is being defined. *) lift_definition int_pow :: "('a, 'm) monoid_scheme \ 'a \ int \ 'a" is - "\G a (n1, n2). if a \ Units G \ monoid G then (a (^)\<^bsub>G\<^esub> n1) \\<^bsub>G\<^esub> (inv\<^bsub>G\<^esub> (a (^)\<^bsub>G\<^esub> n2)) else \\<^bsub>G\<^esub>" + "\G a (n1, n2). if a \ Units G \ monoid G then (a [^]\<^bsub>G\<^esub> n1) \\<^bsub>G\<^esub> (inv\<^bsub>G\<^esub> (a [^]\<^bsub>G\<^esub> n2)) else \\<^bsub>G\<^esub>" unfolding intrel_def by (auto intro: monoid.int_pow_rsp) (* @@ -125,12 +125,12 @@ proof - { fix k l m :: nat - have "a (^) l \ (inv (a (^) m) \ inv (a (^) k)) = (a (^) l \ inv (a (^) k)) \ inv (a (^) m)" + have "a [^] l \ (inv (a [^] m) \ inv (a [^] k)) = (a [^] l \ inv (a [^] k)) \ inv (a [^] m)" (is "?lhs = _") by (simp add: mult_inv_same_comm m_assoc Units_closed) - also have "\ = (inv (a (^) k) \ a (^) l) \ inv (a (^) m)" + also have "\ = (inv (a [^] k) \ a [^] l) \ inv (a [^] m)" by (simp add: mult_same_comm) - also have "\ = inv (a (^) k) \ (a (^) l \ inv (a (^) m))" (is "_ = ?rhs") + also have "\ = inv (a [^] k) \ (a [^] l \ inv (a [^] m))" (is "_ = ?rhs") by (simp add: m_assoc Units_closed) finally have "?lhs = ?rhs" . }