diff -r 797ed46d724b -r 290bc97038c7 src/HOL/NumberTheory/Euler.thy --- a/src/HOL/NumberTheory/Euler.thy Thu Dec 09 16:45:46 2004 +0100 +++ b/src/HOL/NumberTheory/Euler.thy Thu Dec 09 18:30:59 2004 +0100 @@ -150,7 +150,7 @@ lemma SetS_setprod_prop: "[| p \ zprime; 2 < p; ~([a = 0] (mod p)); ~(QuadRes p a); x \ (SetS a p) |] ==> - [setprod x = a] (mod p)"; + [\x = a] (mod p)"; apply (auto simp add: SetS_def MultInvPair_def) apply (frule StandardRes_SRStar_prop1a) apply (subgoal_tac "StandardRes p x \ StandardRes p (a * MultInv p x)"); @@ -186,49 +186,49 @@ done lemma Union_SetS_setprod_prop1: "[| p \ zprime; 2 < p; ~([a = 0] (mod p)); ~(QuadRes p a) |] ==> - [setprod (Union (SetS a p)) = a ^ nat ((p - 1) div 2)] (mod p)"; -proof -; - assume "p \ zprime" and "2 < p" and "~([a = 0] (mod p))" and "~(QuadRes p a)"; - then have "[setprod (Union (SetS a p)) = - gsetprod setprod (SetS a p)] (mod p)"; + [\(Union (SetS a p)) = a ^ nat ((p - 1) div 2)] (mod p)" +proof - + assume "p \ zprime" and "2 < p" and "~([a = 0] (mod p))" and "~(QuadRes p a)" + then have "[\(Union (SetS a p)) = + setprod (setprod (%x. x)) (SetS a p)] (mod p)" by (auto simp add: SetS_finite SetS_elems_finite - MultInvPair_prop1c setprod_disj_sets) - also; have "[gsetprod setprod (SetS a p) = - gsetprod (%x. a) (SetS a p)] (mod p)"; - apply (rule gsetprod_same_function_zcong) + MultInvPair_prop1c setprod_Union_disjoint) + also have "[setprod (setprod (%x. x)) (SetS a p) = + setprod (%x. a) (SetS a p)] (mod p)" + apply (rule setprod_same_function_zcong) by (auto simp add: prems SetS_setprod_prop SetS_finite) - also (zcong_trans) have "[gsetprod (%x. a) (SetS a p) = - a^(card (SetS a p))] (mod p)"; - by (auto simp add: prems SetS_finite gsetprod_const) - finally (zcong_trans) show ?thesis; + also (zcong_trans) have "[setprod (%x. a) (SetS a p) = + a^(card (SetS a p))] (mod p)" + by (auto simp add: prems SetS_finite setprod_constant) + finally (zcong_trans) show ?thesis apply (rule zcong_trans) - apply (subgoal_tac "card(SetS a p) = nat((p - 1) div 2)", auto); - apply (subgoal_tac "nat(int(card(SetS a p))) = nat((p - 1) div 2)", force); + apply (subgoal_tac "card(SetS a p) = nat((p - 1) div 2)", auto) + apply (subgoal_tac "nat(int(card(SetS a p))) = nat((p - 1) div 2)", force) apply (auto simp add: prems SetS_card) done -qed; +qed lemma Union_SetS_setprod_prop2: "[| p \ zprime; 2 < p; ~([a = 0](mod p)) |] ==> - setprod (Union (SetS a p)) = zfact (p - 1)"; + \(Union (SetS a p)) = zfact (p - 1)"; proof -; assume "p \ zprime" and "2 < p" and "~([a = 0](mod p))"; - then have "setprod (Union (SetS a p)) = setprod (SRStar p)"; + then have "\(Union (SetS a p)) = \(SRStar p)" by (auto simp add: MultInvPair_prop2) - also have "... = setprod ({1} \ (d22set (p - 1)))"; + also have "... = \({1} \ (d22set (p - 1)))" by (auto simp add: prems SRStar_d22set_prop) - also have "... = zfact(p - 1)"; - proof -; - have "~(1 \ d22set (p - 1)) & finite( d22set (p - 1))"; + also have "... = zfact(p - 1)" + proof - + have "~(1 \ d22set (p - 1)) & finite( d22set (p - 1))" apply (insert prems, auto) apply (drule d22set_g_1) apply (auto simp add: d22set_fin) done - then have "setprod({1} \ (d22set (p - 1))) = setprod (d22set (p - 1))"; + then have "\({1} \ (d22set (p - 1))) = \(d22set (p - 1))"; by auto then show ?thesis by (auto simp add: d22set_prod_zfact) qed; - finally show ?thesis .; + finally show ?thesis . qed; lemma zfact_prop: "[| p \ zprime; 2 < p; ~([a = 0] (mod p)); ~(QuadRes p a) |] ==>