# HG changeset patch # User wenzelm # Date 1506977281 -7200 # Node ID d44ea023ac09efb09ea6dacf3735f2076e44ed18 # Parent 918f15c9367a2a1ed20c80e5791643ee9b017d05 misc tuning and modernization; diff -r 918f15c9367a -r d44ea023ac09 src/HOL/Algebra/More_Finite_Product.thy --- a/src/HOL/Algebra/More_Finite_Product.thy Mon Oct 02 19:58:29 2017 +0200 +++ b/src/HOL/Algebra/More_Finite_Product.thy Mon Oct 02 22:48:01 2017 +0200 @@ -5,71 +5,69 @@ section \More on finite products\ theory More_Finite_Product -imports - More_Group + imports More_Group begin lemma (in comm_monoid) finprod_UN_disjoint: - "finite I \ (ALL i:I. finite (A i)) \ (ALL i:I. ALL j:I. i ~= j \ - (A i) Int (A j) = {}) \ - (ALL i:I. ALL x: (A i). g x : carrier G) \ - finprod G g (UNION I A) = finprod G (%i. finprod G g (A i)) I" + "finite I \ (\i\I. finite (A i)) \ (\i\I. \j\I. i \ j \ A i \ A j = {}) \ + (\i\I. \x \ A i. g x \ carrier G) \ + finprod G g (UNION I A) = finprod G (\i. finprod G g (A i)) I" apply (induct set: finite) - apply force + apply force apply clarsimp apply (subst finprod_Un_disjoint) - apply blast - apply (erule finite_UN_I) - apply blast - apply (fastforce) - apply (auto intro!: funcsetI finprod_closed) + apply blast + apply (erule finite_UN_I) + apply blast + apply (fastforce) + apply (auto intro!: funcsetI finprod_closed) done lemma (in comm_monoid) finprod_Union_disjoint: - "[| finite C; (ALL A:C. finite A & (ALL x:A. f x : carrier G)); - (ALL A:C. ALL B:C. A ~= B --> A Int B = {}) |] - ==> finprod G f (\C) = finprod G (finprod G f) C" + "finite C \ + \A\C. finite A \ (\x\A. f x \ carrier G) \ + \A\C. \B\C. A \ B \ A \ B = {} \ + finprod G f (\C) = finprod G (finprod G f) C" apply (frule finprod_UN_disjoint [of C id f]) apply auto done -lemma (in comm_monoid) finprod_one: - "finite A \ (\x. x:A \ f x = \) \ finprod G f A = \" +lemma (in comm_monoid) finprod_one: "finite A \ (\x. x \ A \ f x = \) \ finprod G f A = \" by (induct set: finite) auto (* need better simplification rules for rings *) (* the next one holds more generally for abelian groups *) -lemma (in cring) sum_zero_eq_neg: "x : carrier R \ y : carrier R \ x \ y = \ \ x = \ y" +lemma (in cring) sum_zero_eq_neg: "x \ carrier R \ y \ carrier R \ x \ y = \ \ x = \ y" by (metis minus_equality) lemma (in domain) square_eq_one: fixes x - assumes [simp]: "x : carrier R" + assumes [simp]: "x \ carrier R" and "x \ x = \" - shows "x = \ | x = \\" + shows "x = \ \ x = \\" proof - have "(x \ \) \ (x \ \ \) = x \ x \ \ \" by (simp add: ring_simprules) also from \x \ x = \\ have "\ = \" by (simp add: ring_simprules) finally have "(x \ \) \ (x \ \ \) = \" . - then have "(x \ \) = \ | (x \ \ \) = \" - by (intro integral, auto) + then have "(x \ \) = \ \ (x \ \ \) = \" + by (intro integral) auto then show ?thesis apply auto - apply (erule notE) - apply (rule sum_zero_eq_neg) - apply auto + apply (erule notE) + apply (rule sum_zero_eq_neg) + apply auto apply (subgoal_tac "x = \ (\ \)") - apply (simp add: ring_simprules) + apply (simp add: ring_simprules) apply (rule sum_zero_eq_neg) - apply auto + apply auto done qed -lemma (in Ring.domain) inv_eq_self: "x : Units R \ x = inv x \ x = \ \ x = \\" +lemma (in domain) inv_eq_self: "x \ Units R \ x = inv x \ x = \ \ x = \\" by (metis Units_closed Units_l_inv square_eq_one) @@ -90,15 +88,15 @@ 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) = \" +lemma (in cring) units_power_order_eq_one: + "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]) - apply assumption + apply assumption apply (rule comm_group.power_order_eq_one) - apply (rule units_comm_group) - apply (unfold units_of_def, auto) + apply (rule units_comm_group) + apply (unfold units_of_def, auto) done -end \ No newline at end of file +end diff -r 918f15c9367a -r d44ea023ac09 src/HOL/Algebra/More_Group.thy --- a/src/HOL/Algebra/More_Group.thy Mon Oct 02 19:58:29 2017 +0200 +++ b/src/HOL/Algebra/More_Group.thy Mon Oct 02 22:48:01 2017 +0200 @@ -5,8 +5,7 @@ section \More on groups\ theory More_Group -imports - Ring + imports Ring begin text \ @@ -16,63 +15,62 @@ facts about the unit group within the ring locale. \ -definition units_of :: "('a, 'b) monoid_scheme => 'a monoid" where - "units_of G == (| carrier = Units G, - Group.monoid.mult = Group.monoid.mult G, - one = one G |)" +definition units_of :: "('a, 'b) monoid_scheme \ 'a monoid" + where "units_of G = + \carrier = Units G, Group.monoid.mult = Group.monoid.mult G, one = one G\" -lemma (in monoid) units_group: "group(units_of G)" +lemma (in monoid) units_group: "group (units_of G)" apply (unfold units_of_def) apply (rule groupI) - apply auto - apply (subst m_assoc) - apply auto + apply auto + apply (subst m_assoc) + apply auto apply (rule_tac x = "inv x" in bexI) - apply auto + apply auto done -lemma (in comm_monoid) units_comm_group: "comm_group(units_of G)" +lemma (in comm_monoid) units_comm_group: "comm_group (units_of G)" apply (rule group.group_comm_groupI) - apply (rule units_group) + apply (rule units_group) apply (insert comm_monoid_axioms) apply (unfold units_of_def Units_def comm_monoid_def comm_monoid_axioms_def) apply auto done lemma units_of_carrier: "carrier (units_of G) = Units G" - unfolding units_of_def by auto + by (auto simp: units_of_def) -lemma units_of_mult: "mult(units_of G) = mult G" - unfolding units_of_def by auto +lemma units_of_mult: "mult (units_of G) = mult G" + by (auto simp: units_of_def) -lemma units_of_one: "one(units_of G) = one G" - unfolding units_of_def by auto +lemma units_of_one: "one (units_of G) = one G" + by (auto simp: units_of_def) -lemma (in monoid) units_of_inv: "x : Units G ==> m_inv (units_of G) x = m_inv G x" +lemma (in monoid) units_of_inv: "x \ Units G \ m_inv (units_of G) x = m_inv G x" apply (rule sym) apply (subst m_inv_def) apply (rule the1_equality) - apply (rule ex_ex1I) - apply (subst (asm) Units_def) - apply auto - apply (erule inv_unique) - apply auto - apply (rule Units_closed) - apply (simp_all only: units_of_carrier [symmetric]) - apply (insert units_group) - apply auto - apply (subst units_of_mult [symmetric]) - apply (subst units_of_one [symmetric]) - apply (erule group.r_inv, assumption) + apply (rule ex_ex1I) + apply (subst (asm) Units_def) + apply auto + apply (erule inv_unique) + apply auto + apply (rule Units_closed) + apply (simp_all only: units_of_carrier [symmetric]) + apply (insert units_group) + apply auto + apply (subst units_of_mult [symmetric]) + apply (subst units_of_one [symmetric]) + apply (erule group.r_inv, assumption) apply (subst units_of_mult [symmetric]) apply (subst units_of_one [symmetric]) apply (erule group.l_inv, assumption) done -lemma (in group) inj_on_const_mult: "a: (carrier G) ==> inj_on (%x. a \ x) (carrier G)" +lemma (in group) inj_on_const_mult: "a \ carrier G \ inj_on (\x. a \ x) (carrier G)" unfolding inj_on_def by auto -lemma (in group) surj_const_mult: "a : (carrier G) ==> (%x. a \ x) ` (carrier G) = (carrier G)" +lemma (in group) surj_const_mult: "a \ carrier G \ (\x. a \ x) ` carrier G = carrier G" apply (auto simp add: image_def) apply (rule_tac x = "(m_inv G a) \ x" in bexI) apply auto @@ -82,33 +80,29 @@ apply auto done -lemma (in group) l_cancel_one [simp]: - "x : carrier G \ a : carrier G \ (x \ a = x) = (a = one G)" +lemma (in group) l_cancel_one [simp]: "x \ carrier G \ a \ carrier G \ x \ a = x \ a = one G" apply auto apply (subst l_cancel [symmetric]) - prefer 4 - apply (erule ssubst) - apply auto + prefer 4 + apply (erule ssubst) + apply auto done -lemma (in group) r_cancel_one [simp]: "x : carrier G \ a : carrier G \ - (a \ x = x) = (a = one G)" +lemma (in group) r_cancel_one [simp]: "x \ carrier G \ a \ carrier G \ a \ x = x \ a = one G" apply auto apply (subst r_cancel [symmetric]) - prefer 4 - apply (erule ssubst) - apply auto + prefer 4 + apply (erule ssubst) + apply auto done (* Is there a better way to do this? *) -lemma (in group) l_cancel_one' [simp]: "x : carrier G \ a : carrier G \ - (x = x \ a) = (a = one G)" +lemma (in group) l_cancel_one' [simp]: "x \ carrier G \ a \ carrier G \ x = x \ a \ a = one G" apply (subst eq_commute) apply simp done -lemma (in group) r_cancel_one' [simp]: "x : carrier G \ a : carrier G \ - (x = a \ x) = (a = one G)" +lemma (in group) r_cancel_one' [simp]: "x \ carrier G \ a \ carrier G \ x = a \ x \ a = one G" apply (subst eq_commute) apply simp done @@ -118,7 +112,7 @@ lemma (in comm_group) power_order_eq_one: assumes fin [simp]: "finite (carrier G)" - and a [simp]: "a : carrier G" + and a [simp]: "a \ carrier G" shows "a (^) card(carrier G) = one G" proof - have "(\x\carrier G. x) = (\x\carrier G. a \ x)" diff -r 918f15c9367a -r d44ea023ac09 src/HOL/Algebra/More_Ring.thy --- a/src/HOL/Algebra/More_Ring.thy Mon Oct 02 19:58:29 2017 +0200 +++ b/src/HOL/Algebra/More_Ring.thy Mon Oct 02 22:48:01 2017 +0200 @@ -5,73 +5,70 @@ section \More on rings etc.\ theory More_Ring -imports - Ring + imports Ring begin -lemma (in cring) field_intro2: "\\<^bsub>R\<^esub> ~= \\<^bsub>R\<^esub> \ \x \ carrier R - {\\<^bsub>R\<^esub>}. x \ Units R \ field R" +lemma (in cring) field_intro2: "\\<^bsub>R\<^esub> \ \\<^bsub>R\<^esub> \ \x \ carrier R - {\\<^bsub>R\<^esub>}. x \ Units R \ field R" apply (unfold_locales) - apply (insert cring_axioms, auto) - apply (rule trans) - apply (subgoal_tac "a = (a \ b) \ inv b") - apply assumption - apply (subst m_assoc) - apply auto + apply (use cring_axioms in auto) + apply (rule trans) + apply (subgoal_tac "a = (a \ b) \ inv b") + apply assumption + apply (subst m_assoc) + apply auto apply (unfold Units_def) apply auto done -lemma (in monoid) inv_char: "x : carrier G \ y : carrier G \ - x \ y = \ \ y \ x = \ \ inv x = y" - apply (subgoal_tac "x : Units G") - apply (subgoal_tac "y = inv x \ \") - apply simp - apply (erule subst) - apply (subst m_assoc [symmetric]) - apply auto +lemma (in monoid) inv_char: + "x \ carrier G \ y \ carrier G \ x \ y = \ \ y \ x = \ \ inv x = y" + apply (subgoal_tac "x \ Units G") + apply (subgoal_tac "y = inv x \ \") + apply simp + apply (erule subst) + apply (subst m_assoc [symmetric]) + apply auto apply (unfold Units_def) apply auto done -lemma (in comm_monoid) comm_inv_char: "x : carrier G \ y : carrier G \ - x \ y = \ \ inv x = y" +lemma (in comm_monoid) comm_inv_char: "x \ carrier G \ y \ carrier G \ x \ y = \ \ inv x = y" apply (rule inv_char) - apply auto + apply auto apply (subst m_comm, auto) done lemma (in ring) inv_neg_one [simp]: "inv (\ \) = \ \" apply (rule inv_char) - apply (auto simp add: l_minus r_minus) + apply (auto simp add: l_minus r_minus) done -lemma (in monoid) inv_eq_imp_eq: "x : Units G \ y : Units G \ - inv x = inv y \ x = y" - apply (subgoal_tac "inv(inv x) = inv(inv y)") - apply (subst (asm) Units_inv_inv)+ - apply auto +lemma (in monoid) inv_eq_imp_eq: "x \ Units G \ y \ Units G \ inv x = inv y \ x = y" + apply (subgoal_tac "inv (inv x) = inv (inv y)") + apply (subst (asm) Units_inv_inv)+ + apply auto done -lemma (in ring) Units_minus_one_closed [intro]: "\ \ : Units R" +lemma (in ring) Units_minus_one_closed [intro]: "\ \ \ Units R" apply (unfold Units_def) apply auto apply (rule_tac x = "\ \" in bexI) - apply auto + apply auto apply (simp add: l_minus r_minus) done lemma (in monoid) inv_one [simp]: "inv \ = \" apply (rule inv_char) - apply auto + apply auto done -lemma (in ring) inv_eq_neg_one_eq: "x : Units R \ (inv x = \ \) = (x = \ \)" +lemma (in ring) inv_eq_neg_one_eq: "x \ Units R \ inv x = \ \ \ x = \ \" apply auto apply (subst Units_inv_inv [symmetric]) - apply auto + apply auto done -lemma (in monoid) inv_eq_one_eq: "x : Units G \ (inv x = \) = (x = \)" +lemma (in monoid) inv_eq_one_eq: "x \ Units G \ inv x = \ \ x = \" by (metis Units_inv_inv inv_one) end