# HG changeset patch # User eberlm # Date 1470671271 -7200 # Node ID 2accfb71e33bc1d5cc7442b6deba217479d49768 # Parent 6ddb43c6b711e362ae3bdabee396d9fe272c3365 is_prime -> prime diff -r 6ddb43c6b711 -r 2accfb71e33b src/HOL/Algebra/Divisibility.thy --- a/src/HOL/Algebra/Divisibility.thy Mon Aug 08 14:13:14 2016 +0200 +++ b/src/HOL/Algebra/Divisibility.thy Mon Aug 08 17:47:51 2016 +0200 @@ -2250,7 +2250,7 @@ subsection \Irreducible Elements are Prime\ -lemma (in factorial_monoid) irreducible_is_prime: +lemma (in factorial_monoid) irreducible_prime: assumes pirr: "irreducible G p" and pcarr: "p \ carrier G" shows "prime G p" @@ -2340,7 +2340,7 @@ \"A version using @{const factors}, more complicated" -lemma (in factorial_monoid) factors_irreducible_is_prime: +lemma (in factorial_monoid) factors_irreducible_prime: assumes pirr: "irreducible G p" and pcarr: "p \ carrier G" shows "prime G p" @@ -3638,7 +3638,7 @@ done sublocale factorial_monoid \ primeness_condition_monoid - by standard (rule irreducible_is_prime) + by standard (rule irreducible_prime) lemma (in factorial_monoid) primeness_condition: diff -r 6ddb43c6b711 -r 2accfb71e33b src/HOL/Algebra/Exponent.thy --- a/src/HOL/Algebra/Exponent.thy Mon Aug 08 14:13:14 2016 +0200 +++ b/src/HOL/Algebra/Exponent.thy Mon Aug 08 17:47:51 2016 +0200 @@ -15,8 +15,8 @@ text\needed in this form to prove Sylow's theorem\ corollary (in algebraic_semidom) div_combine: - "\is_prime_elem p; \ p ^ Suc r dvd n; p ^ (a + r) dvd n * k\ \ p ^ a dvd k" - by (metis add_Suc_right mult.commute prime_power_dvd_cases) + "\prime_elem p; \ p ^ Suc r dvd n; p ^ (a + r) dvd n * k\ \ p ^ a dvd k" + by (metis add_Suc_right mult.commute prime_elem_power_dvd_cases) lemma exponent_p_a_m_k_equation: fixes p :: nat @@ -61,16 +61,16 @@ case (Suc k) then have *: "(Suc (j+k) choose Suc k) > 0" by simp then have "multiplicity p ((Suc (j+k) choose Suc k) * Suc k) = multiplicity p (Suc k)" - by (subst Suc_times_binomial_eq [symmetric], subst prime_multiplicity_mult_distrib) + by (subst Suc_times_binomial_eq [symmetric], subst prime_elem_multiplicity_mult_distrib) (insert p Suc.prems, simp_all add: eeq [symmetric] Suc.IH) with p * show ?case - by (subst (asm) prime_multiplicity_mult_distrib) simp_all + by (subst (asm) prime_elem_multiplicity_mult_distrib) simp_all qed text\The lemma above, with two changes of variables\ lemma p_not_div_choose: assumes "k < K" and "k \ n" - and eeq: "\j. \0 \ multiplicity p (n - k + (K - j)) = multiplicity p (K - j)" "is_prime p" + and eeq: "\j. \0 \ multiplicity p (n - k + (K - j)) = multiplicity p (K - j)" "prime p" shows "multiplicity p (n choose k) = 0" apply (rule p_not_div_choose_lemma [of K p "n-k" k, simplified assms nat_minus_add_max max_absorb1]) apply (metis add_Suc_right eeq diff_diff_cancel order_less_imp_le zero_less_Suc zero_less_diff) @@ -78,7 +78,7 @@ done proposition const_p_fac: - assumes "m>0" and prime: "is_prime p" + assumes "m>0" and prime: "prime p" shows "multiplicity p (p^a * m choose p^a) = multiplicity p m" proof- from assms have p: "0 < p ^ a" "0 < p^a * m" "p^a \ p^a * m" @@ -93,13 +93,13 @@ by (subst times_binomial_minus1_eq [symmetric]) (auto simp: prime_gt_0_nat) also from p have "p ^ a - Suc 0 \ p ^ a * m - Suc 0" by linarith with prime * p have "multiplicity p ?rhs = multiplicity p (p ^ a * m)" - by (subst prime_multiplicity_mult_distrib) auto + by (subst prime_elem_multiplicity_mult_distrib) auto also have "\ = a + multiplicity p m" - using prime p by (subst prime_multiplicity_mult_distrib) simp_all + using prime p by (subst prime_elem_multiplicity_mult_distrib) simp_all finally show ?thesis . qed then show ?thesis - using prime p by (subst (asm) prime_multiplicity_mult_distrib) simp_all + using prime p by (subst (asm) prime_elem_multiplicity_mult_distrib) simp_all qed end diff -r 6ddb43c6b711 -r 2accfb71e33b src/HOL/Algebra/Ideal.thy --- a/src/HOL/Algebra/Ideal.thy Mon Aug 08 14:13:14 2016 +0200 +++ b/src/HOL/Algebra/Ideal.thy Mon Aug 08 17:47:51 2016 +0200 @@ -99,7 +99,7 @@ assumes I_notcarr: "carrier R \ I" and I_prime: "\a \ carrier R; b \ carrier R; a \ b \ I\ \ a \ I \ b \ I" -lemma (in primeideal) is_primeideal: "primeideal I R" +lemma (in primeideal) primeideal: "primeideal I R" by (rule primeideal_axioms) lemma primeidealI: @@ -769,7 +769,7 @@ qed text \In a cring every maximal ideal is prime\ -lemma (in cring) maximalideal_is_prime: +lemma (in cring) maximalideal_prime: assumes "maximalideal I R" shows "primeideal I R" proof - diff -r 6ddb43c6b711 -r 2accfb71e33b src/HOL/Algebra/IntRing.thy --- a/src/HOL/Algebra/IntRing.thy Mon Aug 08 14:13:14 2016 +0200 +++ b/src/HOL/Algebra/IntRing.thy Mon Aug 08 17:47:51 2016 +0200 @@ -251,7 +251,7 @@ then obtain x where "1 = x * p" by best then have "\p * x\ = 1" by (simp add: mult.commute) then show False using prime - by (auto dest!: abs_zmult_eq_1 simp: is_prime_def) + by (auto dest!: abs_zmult_eq_1 simp: prime_def) qed diff -r 6ddb43c6b711 -r 2accfb71e33b src/HOL/Nonstandard_Analysis/Examples/NSPrimes.thy --- a/src/HOL/Nonstandard_Analysis/Examples/NSPrimes.thy Mon Aug 08 14:13:14 2016 +0200 +++ b/src/HOL/Nonstandard_Analysis/Examples/NSPrimes.thy Mon Aug 08 17:47:51 2016 +0200 @@ -67,7 +67,7 @@ (* Goldblatt: Exercise 5.11(3a) - p 57 *) lemma starprime: "starprime = {p. 1 < p & (\m. m dvd p --> m = 1 | m = p)}" -by (transfer, auto simp add: is_prime_nat_iff) +by (transfer, auto simp add: prime_nat_iff) (* Goldblatt Exercise 5.11(3b) - p 57 *) lemma hyperprime_factor_exists [rule_format]: @@ -277,7 +277,7 @@ apply (subgoal_tac "k \ hypnat_of_nat ` {p. prime p}") apply (force simp add: starprime_def) apply (metis Compl_iff add.commute dvd_add_left_iff empty_iff hdvd_one_eq_one hypnat_one_not_prime - imageE insert_iff mem_Collect_eq not_is_prime_0) + imageE insert_iff mem_Collect_eq not_prime_0) done end diff -r 6ddb43c6b711 -r 2accfb71e33b src/HOL/Number_Theory/Eratosthenes.thy --- a/src/HOL/Number_Theory/Eratosthenes.thy Mon Aug 08 14:13:14 2016 +0200 +++ b/src/HOL/Number_Theory/Eratosthenes.thy Mon Aug 08 17:47:51 2016 +0200 @@ -295,8 +295,8 @@ from 2 show ?thesis apply (auto simp add: numbers_of_marks_sieve numeral_2_eq_2 set_primes_upto dest: prime_gt_Suc_0_nat) - apply (metis One_nat_def Suc_le_eq less_not_refl is_prime_nat_iff) - apply (metis One_nat_def Suc_le_eq aux is_prime_nat_iff) + apply (metis One_nat_def Suc_le_eq less_not_refl prime_nat_iff) + apply (metis One_nat_def Suc_le_eq aux prime_nat_iff) done qed qed diff -r 6ddb43c6b711 -r 2accfb71e33b src/HOL/Number_Theory/Euclidean_Algorithm.thy --- a/src/HOL/Number_Theory/Euclidean_Algorithm.thy Mon Aug 08 14:13:14 2016 +0200 +++ b/src/HOL/Number_Theory/Euclidean_Algorithm.thy Mon Aug 08 17:47:51 2016 +0200 @@ -411,7 +411,7 @@ interpret semiring_gcd 1 0 "op *" gcd_eucl lcm_eucl "op div" "op +" "op -" normalize unit_factor by standard (rule lcm_gcd_eucl_facts; assumption)+ fix p assume p: "irreducible p" - thus "is_prime_elem p" by (rule irreducible_imp_prime_gcd) + thus "prime_elem p" by (rule irreducible_imp_prime_elem_gcd) qed lemma gcd_eucl_eq_gcd_factorial: "gcd_eucl = gcd_factorial" diff -r 6ddb43c6b711 -r 2accfb71e33b src/HOL/Number_Theory/Factorial_Ring.thy --- a/src/HOL/Number_Theory/Factorial_Ring.thy Mon Aug 08 14:13:14 2016 +0200 +++ b/src/HOL/Number_Theory/Factorial_Ring.thy Mon Aug 08 17:47:51 2016 +0200 @@ -54,51 +54,51 @@ lemma irreducibleD: "irreducible p \ p = a * b \ a dvd 1 \ b dvd 1" by (simp add: irreducible_def) -definition is_prime_elem :: "'a \ bool" where - "is_prime_elem p \ p \ 0 \ \p dvd 1 \ (\a b. p dvd (a * b) \ p dvd a \ p dvd b)" +definition prime_elem :: "'a \ bool" where + "prime_elem p \ p \ 0 \ \p dvd 1 \ (\a b. p dvd (a * b) \ p dvd a \ p dvd b)" -lemma not_is_prime_elem_zero [simp]: "\is_prime_elem 0" - by (simp add: is_prime_elem_def) +lemma not_prime_elem_zero [simp]: "\prime_elem 0" + by (simp add: prime_elem_def) -lemma is_prime_elem_not_unit: "is_prime_elem p \ \p dvd 1" - by (simp add: is_prime_elem_def) +lemma prime_elem_not_unit: "prime_elem p \ \p dvd 1" + by (simp add: prime_elem_def) -lemma is_prime_elemI: - "p \ 0 \ \p dvd 1 \ (\a b. p dvd (a * b) \ p dvd a \ p dvd b) \ is_prime_elem p" - by (simp add: is_prime_elem_def) +lemma prime_elemI: + "p \ 0 \ \p dvd 1 \ (\a b. p dvd (a * b) \ p dvd a \ p dvd b) \ prime_elem p" + by (simp add: prime_elem_def) -lemma prime_divides_productD: - "is_prime_elem p \ p dvd (a * b) \ p dvd a \ p dvd b" - by (simp add: is_prime_elem_def) +lemma prime_elem_dvd_multD: + "prime_elem p \ p dvd (a * b) \ p dvd a \ p dvd b" + by (simp add: prime_elem_def) -lemma prime_dvd_mult_iff: - "is_prime_elem p \ p dvd (a * b) \ p dvd a \ p dvd b" - by (auto simp: is_prime_elem_def) +lemma prime_elem_dvd_mult_iff: + "prime_elem p \ p dvd (a * b) \ p dvd a \ p dvd b" + by (auto simp: prime_elem_def) -lemma not_is_prime_elem_one [simp]: - "\ is_prime_elem 1" - by (auto dest: is_prime_elem_not_unit) +lemma not_prime_elem_one [simp]: + "\ prime_elem 1" + by (auto dest: prime_elem_not_unit) -lemma is_prime_elem_not_zeroI: - assumes "is_prime_elem p" +lemma prime_elem_not_zeroI: + assumes "prime_elem p" shows "p \ 0" using assms by (auto intro: ccontr) -lemma is_prime_elem_dvd_power: - "is_prime_elem p \ p dvd x ^ n \ p dvd x" - by (induction n) (auto dest: prime_divides_productD intro: dvd_trans[of _ 1]) +lemma prime_elem_dvd_power: + "prime_elem p \ p dvd x ^ n \ p dvd x" + by (induction n) (auto dest: prime_elem_dvd_multD intro: dvd_trans[of _ 1]) -lemma is_prime_elem_dvd_power_iff: - "is_prime_elem p \ n > 0 \ p dvd x ^ n \ p dvd x" - by (auto dest: is_prime_elem_dvd_power intro: dvd_trans) +lemma prime_elem_dvd_power_iff: + "prime_elem p \ n > 0 \ p dvd x ^ n \ p dvd x" + by (auto dest: prime_elem_dvd_power intro: dvd_trans) -lemma is_prime_elem_imp_nonzero [simp]: - "ASSUMPTION (is_prime_elem x) \ x \ 0" - unfolding ASSUMPTION_def by (rule is_prime_elem_not_zeroI) +lemma prime_elem_imp_nonzero [simp]: + "ASSUMPTION (prime_elem x) \ x \ 0" + unfolding ASSUMPTION_def by (rule prime_elem_not_zeroI) -lemma is_prime_elem_imp_not_one [simp]: - "ASSUMPTION (is_prime_elem x) \ x \ 1" +lemma prime_elem_imp_not_one [simp]: + "ASSUMPTION (prime_elem x) \ x \ 1" unfolding ASSUMPTION_def by auto end @@ -110,42 +110,42 @@ lemma mult_unit_dvd_iff': "is_unit a \ (a * b) dvd c \ b dvd c" by (subst mult.commute) (rule mult_unit_dvd_iff) -lemma prime_imp_irreducible: - assumes "is_prime_elem p" +lemma prime_elem_imp_irreducible: + assumes "prime_elem p" shows "irreducible p" proof (rule irreducibleI) fix a b assume p_eq: "p = a * b" with assms have nz: "a \ 0" "b \ 0" by auto from p_eq have "p dvd a * b" by simp - with \is_prime_elem p\ have "p dvd a \ p dvd b" by (rule prime_divides_productD) + with \prime_elem p\ have "p dvd a \ p dvd b" by (rule prime_elem_dvd_multD) with \p = a * b\ have "a * b dvd 1 * b \ a * b dvd a * 1" by auto thus "a dvd 1 \ b dvd 1" by (simp only: dvd_times_left_cancel_iff[OF nz(1)] dvd_times_right_cancel_iff[OF nz(2)]) -qed (insert assms, simp_all add: is_prime_elem_def) +qed (insert assms, simp_all add: prime_elem_def) -lemma is_prime_elem_mono: - assumes "is_prime_elem p" "\q dvd 1" "q dvd p" - shows "is_prime_elem q" +lemma prime_elem_mono: + assumes "prime_elem p" "\q dvd 1" "q dvd p" + shows "prime_elem q" proof - from \q dvd p\ obtain r where r: "p = q * r" by (elim dvdE) hence "p dvd q * r" by simp - with \is_prime_elem p\ have "p dvd q \ p dvd r" by (rule prime_divides_productD) + with \prime_elem p\ have "p dvd q \ p dvd r" by (rule prime_elem_dvd_multD) hence "p dvd q" proof assume "p dvd r" then obtain s where s: "r = p * s" by (elim dvdE) from r have "p * 1 = p * (q * s)" by (subst (asm) s) (simp add: mult_ac) - with \is_prime_elem p\ have "q dvd 1" + with \prime_elem p\ have "q dvd 1" by (subst (asm) mult_cancel_left) auto with \\q dvd 1\ show ?thesis by contradiction qed show ?thesis - proof (rule is_prime_elemI) + proof (rule prime_elemI) fix a b assume "q dvd (a * b)" with \p dvd q\ have "p dvd (a * b)" by (rule dvd_trans) - with \is_prime_elem p\ have "p dvd a \ p dvd b" by (rule prime_divides_productD) + with \prime_elem p\ have "p dvd a \ p dvd b" by (rule prime_elem_dvd_multD) with \q dvd p\ show "q dvd a \ q dvd b" by (blast intro: dvd_trans) qed (insert assms, auto) qed @@ -178,12 +178,12 @@ "irreducible x \ x \ 0 \ \is_unit x \ (\b. b dvd x \ x dvd b \ is_unit b)" using irreducibleI'[of x] irreducibleD'[of x] irreducible_not_unit[of x] by auto -lemma is_prime_elem_multD: - assumes "is_prime_elem (a * b)" +lemma prime_elem_multD: + assumes "prime_elem (a * b)" shows "is_unit a \ is_unit b" proof - - from assms have "a \ 0" "b \ 0" by (auto dest!: is_prime_elem_not_zeroI) - moreover from assms prime_divides_productD [of "a * b"] have "a * b dvd a \ a * b dvd b" + from assms have "a \ 0" "b \ 0" by (auto dest!: prime_elem_not_zeroI) + moreover from assms prime_elem_dvd_multD [of "a * b"] have "a * b dvd a \ a * b dvd b" by auto ultimately show ?thesis using dvd_times_left_cancel_iff [of a b 1] @@ -191,36 +191,62 @@ by auto qed -lemma is_prime_elemD2: - assumes "is_prime_elem p" and "a dvd p" and "\ is_unit a" +lemma prime_elemD2: + assumes "prime_elem p" and "a dvd p" and "\ is_unit a" shows "p dvd a" proof - from \a dvd p\ obtain b where "p = a * b" .. - with \is_prime_elem p\ is_prime_elem_multD \\ is_unit a\ have "is_unit b" by auto + with \prime_elem p\ prime_elem_multD \\ is_unit a\ have "is_unit b" by auto with \p = a * b\ show ?thesis by (auto simp add: mult_unit_dvd_iff) qed +lemma prime_elem_dvd_msetprodE: + assumes "prime_elem p" + assumes dvd: "p dvd msetprod A" + obtains a where "a \# A" and "p dvd a" +proof - + from dvd have "\a. a \# A \ p dvd a" + proof (induct A) + case empty then show ?case + using \prime_elem p\ by (simp add: prime_elem_not_unit) + next + case (add A a) + then have "p dvd msetprod A * a" by simp + with \prime_elem p\ consider (A) "p dvd msetprod A" | (B) "p dvd a" + by (blast dest: prime_elem_dvd_multD) + then show ?case proof cases + case B then show ?thesis by auto + next + case A + with add.hyps obtain b where "b \# A" "p dvd b" + by auto + then show ?thesis by auto + qed + qed + with that show thesis by blast +qed + context begin -private lemma is_prime_elem_powerD: - assumes "is_prime_elem (p ^ n)" - shows "is_prime_elem p \ n = 1" +private lemma prime_elem_powerD: + assumes "prime_elem (p ^ n)" + shows "prime_elem p \ n = 1" proof (cases n) case (Suc m) note assms also from Suc have "p ^ n = p * p^m" by simp - finally have "is_unit p \ is_unit (p^m)" by (rule is_prime_elem_multD) - moreover from assms have "\is_unit p" by (simp add: is_prime_elem_def is_unit_power_iff) + finally have "is_unit p \ is_unit (p^m)" by (rule prime_elem_multD) + moreover from assms have "\is_unit p" by (simp add: prime_elem_def is_unit_power_iff) ultimately have "is_unit (p ^ m)" by simp with \\is_unit p\ have "m = 0" by (simp add: is_unit_power_iff) with Suc assms show ?thesis by simp qed (insert assms, simp_all) -lemma is_prime_elem_power_iff: - "is_prime_elem (p ^ n) \ is_prime_elem p \ n = 1" - by (auto dest: is_prime_elem_powerD) +lemma prime_elem_power_iff: + "prime_elem (p ^ n) \ prime_elem p \ n = 1" + by (auto dest: prime_elem_powerD) end @@ -229,17 +255,17 @@ by (auto simp: irreducible_altdef mult.commute[of a] is_unit_mult_iff mult_unit_dvd_iff dvd_mult_unit_iff) -lemma is_prime_elem_mult_unit_left: - "is_unit a \ is_prime_elem (a * p) \ is_prime_elem p" - by (auto simp: is_prime_elem_def mult.commute[of a] is_unit_mult_iff mult_unit_dvd_iff) +lemma prime_elem_mult_unit_left: + "is_unit a \ prime_elem (a * p) \ prime_elem p" + by (auto simp: prime_elem_def mult.commute[of a] is_unit_mult_iff mult_unit_dvd_iff) -lemma prime_dvd_cases: - assumes pk: "p*k dvd m*n" and p: "is_prime_elem p" +lemma prime_elem_dvd_cases: + assumes pk: "p*k dvd m*n" and p: "prime_elem p" shows "(\x. k dvd x*n \ m = p*x) \ (\y. k dvd m*y \ n = p*y)" proof - have "p dvd m*n" using dvd_mult_left pk by blast then consider "p dvd m" | "p dvd n" - using p prime_dvd_mult_iff by blast + using p prime_elem_dvd_mult_iff by blast then show ?thesis proof cases case 1 then obtain a where "m = p * a" by (metis dvd_mult_div_cancel) @@ -254,8 +280,8 @@ qed qed -lemma prime_power_dvd_prod: - assumes pc: "p^c dvd m*n" and p: "is_prime_elem p" +lemma prime_elem_power_dvd_prod: + assumes pc: "p^c dvd m*n" and p: "prime_elem p" shows "\a b. a+b = c \ p^a dvd m \ p^b dvd n" using pc proof (induct c arbitrary: m n) @@ -263,7 +289,7 @@ next case (Suc c) consider x where "p^c dvd x*n" "m = p*x" | y where "p^c dvd m*y" "n = p*y" - using prime_dvd_cases [of _ "p^c", OF _ p] Suc.prems by force + using prime_elem_dvd_cases [of _ "p^c", OF _ p] Suc.prems by force then show ?case proof cases case (1 x) @@ -284,217 +310,40 @@ lemma add_eq_Suc_lem: "a+b = Suc (x+y) \ a \ x \ b \ y" by arith -lemma prime_power_dvd_cases: - "\p^c dvd m * n; a + b = Suc c; is_prime_elem p\ \ p ^ a dvd m \ p ^ b dvd n" - using power_le_dvd prime_power_dvd_prod by (blast dest: prime_power_dvd_prod add_eq_Suc_lem) - -end - -context normalization_semidom -begin - -lemma irreducible_normalize_iff [simp]: "irreducible (normalize x) = irreducible x" - using irreducible_mult_unit_left[of "1 div unit_factor x" x] - by (cases "x = 0") (simp_all add: unit_div_commute) - -lemma is_prime_elem_normalize_iff [simp]: "is_prime_elem (normalize x) = is_prime_elem x" - using is_prime_elem_mult_unit_left[of "1 div unit_factor x" x] - by (cases "x = 0") (simp_all add: unit_div_commute) - -definition is_prime :: "'a \ bool" where - "is_prime p \ is_prime_elem p \ normalize p = p" - -lemma not_is_prime_0 [simp]: "\is_prime 0" by (simp add: is_prime_def) - -lemma not_is_prime_unit: "is_unit x \ \is_prime x" - using is_prime_elem_not_unit[of x] by (auto simp add: is_prime_def) - -lemma not_is_prime_1 [simp]: "\is_prime 1" by (simp add: not_is_prime_unit) - -lemma is_primeI: "is_prime_elem x \ normalize x = x \ is_prime x" - by (simp add: is_prime_def) - -lemma prime_imp_prime_elem [dest]: "is_prime p \ is_prime_elem p" - by (simp add: is_prime_def) - -lemma normalize_is_prime: "is_prime p \ normalize p = p" - by (simp add: is_prime_def) - -lemma is_prime_normalize_iff [simp]: "is_prime (normalize p) \ is_prime_elem p" - by (auto simp add: is_prime_def) - -lemma is_prime_power_iff: - "is_prime (p ^ n) \ is_prime p \ n = 1" - by (auto simp: is_prime_def is_prime_elem_power_iff) - -lemma is_prime_elem_not_unit' [simp]: - "ASSUMPTION (is_prime_elem x) \ \is_unit x" - unfolding ASSUMPTION_def by (rule is_prime_elem_not_unit) - -lemma is_prime_imp_nonzero [simp]: - "ASSUMPTION (is_prime x) \ x \ 0" - unfolding ASSUMPTION_def is_prime_def by auto - -lemma is_prime_imp_not_one [simp]: - "ASSUMPTION (is_prime x) \ x \ 1" - unfolding ASSUMPTION_def by auto - -lemma is_prime_not_unit' [simp]: - "ASSUMPTION (is_prime x) \ \is_unit x" - unfolding ASSUMPTION_def is_prime_def by auto - -lemma is_prime_normalize' [simp]: "ASSUMPTION (is_prime x) \ normalize x = x" - unfolding ASSUMPTION_def is_prime_def by simp - -lemma unit_factor_is_prime: "is_prime x \ unit_factor x = 1" - using unit_factor_normalize[of x] unfolding is_prime_def by auto - -lemma unit_factor_is_prime' [simp]: "ASSUMPTION (is_prime x) \ unit_factor x = 1" - unfolding ASSUMPTION_def by (rule unit_factor_is_prime) - -lemma prime_imp_prime_elem' [simp]: "ASSUMPTION (is_prime x) \ is_prime_elem x" - by (simp add: is_prime_def ASSUMPTION_def) - - lemma is_prime_elem_associated: - assumes "is_prime_elem p" and "is_prime_elem q" and "q dvd p" - shows "normalize q = normalize p" -using \q dvd p\ proof (rule associatedI) - from \is_prime_elem q\ have "\ is_unit q" - by (simp add: is_prime_elem_not_unit) - with \is_prime_elem p\ \q dvd p\ show "p dvd q" - by (blast intro: is_prime_elemD2) -qed - -lemma is_prime_dvd_multD: "is_prime p \ p dvd a * b \ p dvd a \ p dvd b" - by (intro prime_divides_productD) simp_all - -lemma is_prime_dvd_mult_iff [simp]: "is_prime p \ p dvd a * b \ p dvd a \ p dvd b" - by (auto dest: is_prime_dvd_multD) - -lemma is_prime_dvd_power: - "is_prime p \ p dvd x ^ n \ p dvd x" - by (auto dest!: is_prime_elem_dvd_power simp: is_prime_def) - -lemma is_prime_dvd_power_iff: - "is_prime p \ n > 0 \ p dvd x ^ n \ p dvd x" - by (intro is_prime_elem_dvd_power_iff) simp_all +lemma prime_elem_power_dvd_cases: + "\p^c dvd m * n; a + b = Suc c; prime_elem p\ \ p ^ a dvd m \ p ^ b dvd n" + using power_le_dvd by (blast dest: prime_elem_power_dvd_prod add_eq_Suc_lem) -lemma prime_dvd_msetprodE: - assumes "is_prime_elem p" - assumes dvd: "p dvd msetprod A" - obtains a where "a \# A" and "p dvd a" -proof - - from dvd have "\a. a \# A \ p dvd a" - proof (induct A) - case empty then show ?case - using \is_prime_elem p\ by (simp add: is_prime_elem_not_unit) - next - case (add A a) - then have "p dvd msetprod A * a" by simp - with \is_prime_elem p\ consider (A) "p dvd msetprod A" | (B) "p dvd a" - by (blast dest: prime_divides_productD) - then show ?case proof cases - case B then show ?thesis by auto - next - case A - with add.hyps obtain b where "b \# A" "p dvd b" - by auto - then show ?thesis by auto - qed - qed - with that show thesis by blast -qed - -lemma msetprod_subset_imp_dvd: - assumes "A \# B" - shows "msetprod A dvd msetprod B" -proof - - from assms have "B = (B - A) + A" by (simp add: subset_mset.diff_add) - also have "msetprod \ = msetprod (B - A) * msetprod A" by simp - also have "msetprod A dvd \" by simp - finally show ?thesis . -qed - -lemma prime_dvd_msetprod_iff: "is_prime p \ p dvd msetprod A \ (\x. x \# A \ p dvd x)" - by (induction A) (simp_all add: prime_dvd_mult_iff prime_imp_prime_elem, blast+) +lemma prime_elem_not_unit' [simp]: + "ASSUMPTION (prime_elem x) \ \is_unit x" + unfolding ASSUMPTION_def by (rule prime_elem_not_unit) -lemma primes_dvd_imp_eq: - assumes "is_prime p" "is_prime q" "p dvd q" - shows "p = q" -proof - - from assms have "irreducible q" by (simp add: prime_imp_irreducible is_prime_def) - from irreducibleD'[OF this \p dvd q\] assms have "q dvd p" by simp - with \p dvd q\ have "normalize p = normalize q" by (rule associatedI) - with assms show "p = q" by simp -qed - -lemma prime_dvd_msetprod_primes_iff: - assumes "is_prime p" "\q. q \# A \ is_prime q" - shows "p dvd msetprod A \ p \# A" -proof - - from assms(1) have "p dvd msetprod A \ (\x. x \# A \ p dvd x)" by (rule prime_dvd_msetprod_iff) - also from assms have "\ \ p \# A" by (auto dest: primes_dvd_imp_eq) - finally show ?thesis . -qed - -lemma msetprod_primes_dvd_imp_subset: - assumes "msetprod A dvd msetprod B" "\p. p \# A \ is_prime p" "\p. p \# B \ is_prime p" - shows "A \# B" -using assms -proof (induction A arbitrary: B) - case empty - thus ?case by simp -next - case (add A p B) - hence p: "is_prime p" by simp - define B' where "B' = B - {#p#}" - from add.prems have "p dvd msetprod B" by (simp add: dvd_mult_right) - with add.prems have "p \# B" - by (subst (asm) (2) prime_dvd_msetprod_primes_iff) simp_all - hence B: "B = B' + {#p#}" by (simp add: B'_def) - from add.prems p have "A \# B'" by (intro add.IH) (simp_all add: B) - thus ?case by (simp add: B) -qed - -lemma normalize_msetprod_primes: - "(\p. p \# A \ is_prime p) \ normalize (msetprod A) = msetprod A" -proof (induction A) - case (add A p) - hence "is_prime p" by simp - hence "normalize p = p" by simp - with add show ?case by (simp add: normalize_mult) -qed simp_all - -lemma msetprod_dvd_msetprod_primes_iff: - assumes "\x. x \# A \ is_prime x" "\x. x \# B \ is_prime x" - shows "msetprod A dvd msetprod B \ A \# B" - using assms by (auto intro: msetprod_subset_imp_dvd msetprod_primes_dvd_imp_subset) - -lemma prime_dvd_power_iff: - assumes "is_prime_elem p" +lemma prime_elem_dvd_power_iff: + assumes "prime_elem p" shows "p dvd a ^ n \ p dvd a \ n > 0" - using assms by (induct n) (auto dest: is_prime_elem_not_unit prime_divides_productD) + using assms by (induct n) (auto dest: prime_elem_not_unit prime_elem_dvd_multD) lemma prime_power_dvd_multD: - assumes "is_prime_elem p" + assumes "prime_elem p" assumes "p ^ n dvd a * b" and "n > 0" and "\ p dvd a" shows "p ^ n dvd b" -using \p ^ n dvd a * b\ and \n > 0\ proof (induct n arbitrary: b) + using \p ^ n dvd a * b\ and \n > 0\ +proof (induct n arbitrary: b) case 0 then show ?case by simp next case (Suc n) show ?case proof (cases "n = 0") - case True with Suc \is_prime_elem p\ \\ p dvd a\ show ?thesis - by (simp add: prime_dvd_mult_iff) + case True with Suc \prime_elem p\ \\ p dvd a\ show ?thesis + by (simp add: prime_elem_dvd_mult_iff) next case False then have "n > 0" by simp - from \is_prime_elem p\ have "p \ 0" by auto + from \prime_elem p\ have "p \ 0" by auto from Suc.prems have *: "p * p ^ n dvd a * b" by simp then have "p dvd a * b" by (rule dvd_mult_left) - with Suc \is_prime_elem p\ \\ p dvd a\ have "p dvd b" - by (simp add: prime_dvd_mult_iff) + with Suc \prime_elem p\ \\ p dvd a\ have "p dvd b" + by (simp add: prime_elem_dvd_mult_iff) moreover define c where "c = b div p" ultimately have b: "b = p * c" by simp with * have "p * p ^ n dvd p * (a * c)" @@ -508,6 +357,158 @@ qed qed +end + +context normalization_semidom +begin + +lemma irreducible_normalize_iff [simp]: "irreducible (normalize x) = irreducible x" + using irreducible_mult_unit_left[of "1 div unit_factor x" x] + by (cases "x = 0") (simp_all add: unit_div_commute) + +lemma prime_elem_normalize_iff [simp]: "prime_elem (normalize x) = prime_elem x" + using prime_elem_mult_unit_left[of "1 div unit_factor x" x] + by (cases "x = 0") (simp_all add: unit_div_commute) + +lemma prime_elem_associated: + assumes "prime_elem p" and "prime_elem q" and "q dvd p" + shows "normalize q = normalize p" +using \q dvd p\ proof (rule associatedI) + from \prime_elem q\ have "\ is_unit q" + by (auto simp add: prime_elem_not_unit) + with \prime_elem p\ \q dvd p\ show "p dvd q" + by (blast intro: prime_elemD2) +qed + +definition prime :: "'a \ bool" where + "prime p \ prime_elem p \ normalize p = p" + +lemma not_prime_0 [simp]: "\prime 0" by (simp add: prime_def) + +lemma not_prime_unit: "is_unit x \ \prime x" + using prime_elem_not_unit[of x] by (auto simp add: prime_def) + +lemma not_prime_1 [simp]: "\prime 1" by (simp add: not_prime_unit) + +lemma primeI: "prime_elem x \ normalize x = x \ prime x" + by (simp add: prime_def) + +lemma prime_imp_prime_elem [dest]: "prime p \ prime_elem p" + by (simp add: prime_def) + +lemma normalize_prime: "prime p \ normalize p = p" + by (simp add: prime_def) + +lemma prime_normalize_iff [simp]: "prime (normalize p) \ prime_elem p" + by (auto simp add: prime_def) + +lemma prime_power_iff: + "prime (p ^ n) \ prime p \ n = 1" + by (auto simp: prime_def prime_elem_power_iff) + +lemma prime_imp_nonzero [simp]: + "ASSUMPTION (prime x) \ x \ 0" + unfolding ASSUMPTION_def prime_def by auto + +lemma prime_imp_not_one [simp]: + "ASSUMPTION (prime x) \ x \ 1" + unfolding ASSUMPTION_def by auto + +lemma prime_not_unit' [simp]: + "ASSUMPTION (prime x) \ \is_unit x" + unfolding ASSUMPTION_def prime_def by auto + +lemma prime_normalize' [simp]: "ASSUMPTION (prime x) \ normalize x = x" + unfolding ASSUMPTION_def prime_def by simp + +lemma unit_factor_prime: "prime x \ unit_factor x = 1" + using unit_factor_normalize[of x] unfolding prime_def by auto + +lemma unit_factor_prime' [simp]: "ASSUMPTION (prime x) \ unit_factor x = 1" + unfolding ASSUMPTION_def by (rule unit_factor_prime) + +lemma prime_imp_prime_elem' [simp]: "ASSUMPTION (prime x) \ prime_elem x" + by (simp add: prime_def ASSUMPTION_def) + +lemma prime_dvd_multD: "prime p \ p dvd a * b \ p dvd a \ p dvd b" + by (intro prime_elem_dvd_multD) simp_all + +lemma prime_dvd_mult_iff [simp]: "prime p \ p dvd a * b \ p dvd a \ p dvd b" + by (auto dest: prime_dvd_multD) + +lemma prime_dvd_power: + "prime p \ p dvd x ^ n \ p dvd x" + by (auto dest!: prime_elem_dvd_power simp: prime_def) + +lemma prime_dvd_power_iff: + "prime p \ n > 0 \ p dvd x ^ n \ p dvd x" + by (subst prime_elem_dvd_power_iff) simp_all + +lemma msetprod_subset_imp_dvd: + assumes "A \# B" + shows "msetprod A dvd msetprod B" +proof - + from assms have "B = (B - A) + A" by (simp add: subset_mset.diff_add) + also have "msetprod \ = msetprod (B - A) * msetprod A" by simp + also have "msetprod A dvd \" by simp + finally show ?thesis . +qed + +lemma prime_dvd_msetprod_iff: "prime p \ p dvd msetprod A \ (\x. x \# A \ p dvd x)" + by (induction A) (simp_all add: prime_elem_dvd_mult_iff prime_imp_prime_elem, blast+) + +lemma primes_dvd_imp_eq: + assumes "prime p" "prime q" "p dvd q" + shows "p = q" +proof - + from assms have "irreducible q" by (simp add: prime_elem_imp_irreducible prime_def) + from irreducibleD'[OF this \p dvd q\] assms have "q dvd p" by simp + with \p dvd q\ have "normalize p = normalize q" by (rule associatedI) + with assms show "p = q" by simp +qed + +lemma prime_dvd_msetprod_primes_iff: + assumes "prime p" "\q. q \# A \ prime q" + shows "p dvd msetprod A \ p \# A" +proof - + from assms(1) have "p dvd msetprod A \ (\x. x \# A \ p dvd x)" by (rule prime_dvd_msetprod_iff) + also from assms have "\ \ p \# A" by (auto dest: primes_dvd_imp_eq) + finally show ?thesis . +qed + +lemma msetprod_primes_dvd_imp_subset: + assumes "msetprod A dvd msetprod B" "\p. p \# A \ prime p" "\p. p \# B \ prime p" + shows "A \# B" +using assms +proof (induction A arbitrary: B) + case empty + thus ?case by simp +next + case (add A p B) + hence p: "prime p" by simp + define B' where "B' = B - {#p#}" + from add.prems have "p dvd msetprod B" by (simp add: dvd_mult_right) + with add.prems have "p \# B" + by (subst (asm) (2) prime_dvd_msetprod_primes_iff) simp_all + hence B: "B = B' + {#p#}" by (simp add: B'_def) + from add.prems p have "A \# B'" by (intro add.IH) (simp_all add: B) + thus ?case by (simp add: B) +qed + +lemma normalize_msetprod_primes: + "(\p. p \# A \ prime p) \ normalize (msetprod A) = msetprod A" +proof (induction A) + case (add A p) + hence "prime p" by simp + hence "normalize p = p" by simp + with add show ?case by (simp add: normalize_mult) +qed simp_all + +lemma msetprod_dvd_msetprod_primes_iff: + assumes "\x. x \# A \ prime x" "\x. x \# B \ prime x" + shows "msetprod A dvd msetprod B \ A \# B" + using assms by (auto intro: msetprod_subset_imp_dvd msetprod_primes_dvd_imp_subset) + lemma is_unit_msetprod_iff: "is_unit (msetprod A) \ (\x. x \# A \ is_unit x)" by (induction A) (auto simp: is_unit_mult_iff) @@ -516,7 +517,7 @@ by (intro multiset_eqI) (simp_all add: count_eq_zero_iff) lemma is_unit_msetprod_primes_iff: - assumes "\x. x \# A \ is_prime x" + assumes "\x. x \# A \ prime x" shows "is_unit (msetprod A) \ A = {#}" proof assume unit: "is_unit (msetprod A)" @@ -524,16 +525,16 @@ proof (intro multiset_emptyI notI) fix x assume "x \# A" with unit have "is_unit x" by (subst (asm) is_unit_msetprod_iff) blast - moreover from \x \# A\ have "is_prime x" by (rule assms) + moreover from \x \# A\ have "prime x" by (rule assms) ultimately show False by simp qed qed simp_all lemma msetprod_primes_irreducible_imp_prime: assumes irred: "irreducible (msetprod A)" - assumes A: "\x. x \# A \ is_prime x" - assumes B: "\x. x \# B \ is_prime x" - assumes C: "\x. x \# C \ is_prime x" + assumes A: "\x. x \# A \ prime x" + assumes B: "\x. x \# B \ prime x" + assumes C: "\x. x \# C \ prime x" assumes dvd: "msetprod A dvd msetprod B * msetprod C" shows "msetprod A dvd msetprod B \ msetprod A dvd msetprod C" proof - @@ -564,8 +565,8 @@ qed lemma msetprod_primes_finite_divisor_powers: - assumes A: "\x. x \# A \ is_prime x" - assumes B: "\x. x \# B \ is_prime x" + assumes A: "\x. x \# A \ prime x" + assumes B: "\x. x \# B \ prime x" assumes "A \ {#}" shows "finite {n. msetprod A ^ n dvd msetprod B}" proof - @@ -594,10 +595,10 @@ context semiring_gcd begin -lemma irreducible_imp_prime_gcd: +lemma irreducible_imp_prime_elem_gcd: assumes "irreducible x" - shows "is_prime_elem x" -proof (rule is_prime_elemI) + shows "prime_elem x" +proof (rule prime_elemI) fix a b assume "x dvd a * b" from dvd_productE[OF this] obtain y z where yz: "x = y * z" "y dvd a" "z dvd b" . from \irreducible x\ and \x = y * z\ have "is_unit y \ is_unit z" by (rule irreducibleD) @@ -605,77 +606,77 @@ by (auto simp: mult_unit_dvd_iff mult_unit_dvd_iff') qed (insert assms, auto simp: irreducible_not_unit) -lemma is_prime_elem_imp_coprime: - assumes "is_prime_elem p" "\p dvd n" +lemma prime_elem_imp_coprime: + assumes "prime_elem p" "\p dvd n" shows "coprime p n" proof (rule coprimeI) fix d assume "d dvd p" "d dvd n" show "is_unit d" proof (rule ccontr) assume "\is_unit d" - from \is_prime_elem p\ and \d dvd p\ and this have "p dvd d" - by (rule is_prime_elemD2) + from \prime_elem p\ and \d dvd p\ and this have "p dvd d" + by (rule prime_elemD2) from this and \d dvd n\ have "p dvd n" by (rule dvd_trans) with \\p dvd n\ show False by contradiction qed qed -lemma is_prime_imp_coprime: - assumes "is_prime p" "\p dvd n" +lemma prime_imp_coprime: + assumes "prime p" "\p dvd n" shows "coprime p n" - using assms by (simp add: is_prime_elem_imp_coprime) + using assms by (simp add: prime_elem_imp_coprime) -lemma is_prime_elem_imp_power_coprime: - "is_prime_elem p \ \p dvd a \ coprime a (p ^ m)" - by (auto intro!: coprime_exp dest: is_prime_elem_imp_coprime simp: gcd.commute) +lemma prime_elem_imp_power_coprime: + "prime_elem p \ \p dvd a \ coprime a (p ^ m)" + by (auto intro!: coprime_exp dest: prime_elem_imp_coprime simp: gcd.commute) -lemma is_prime_imp_power_coprime: - "is_prime p \ \p dvd a \ coprime a (p ^ m)" - by (simp add: is_prime_elem_imp_power_coprime) +lemma prime_imp_power_coprime: + "prime p \ \p dvd a \ coprime a (p ^ m)" + by (simp add: prime_elem_imp_power_coprime) -lemma prime_divprod_pow: - assumes p: "is_prime_elem p" and ab: "coprime a b" and pab: "p^n dvd a * b" +lemma prime_elem_divprod_pow: + assumes p: "prime_elem p" and ab: "coprime a b" and pab: "p^n dvd a * b" shows "p^n dvd a \ p^n dvd b" using assms proof - from ab p have "\p dvd a \ \p dvd b" - by (auto simp: coprime is_prime_elem_def) + by (auto simp: coprime prime_elem_def) with p have "coprime (p^n) a \ coprime (p^n) b" - by (auto intro: is_prime_elem_imp_coprime coprime_exp_left) + by (auto intro: prime_elem_imp_coprime coprime_exp_left) with pab show ?thesis by (auto intro: coprime_dvd_mult simp: mult_ac) qed lemma primes_coprime: - "is_prime p \ is_prime q \ p \ q \ coprime p q" - using is_prime_imp_coprime primes_dvd_imp_eq by blast + "prime p \ prime q \ p \ q \ coprime p q" + using prime_imp_coprime primes_dvd_imp_eq by blast end class factorial_semiring = normalization_semidom + assumes prime_factorization_exists: - "x \ 0 \ \A. (\x. x \# A \ is_prime_elem x) \ msetprod A = normalize x" + "x \ 0 \ \A. (\x. x \# A \ prime_elem x) \ msetprod A = normalize x" begin lemma prime_factorization_exists': assumes "x \ 0" - obtains A where "\x. x \# A \ is_prime x" "msetprod A = normalize x" + obtains A where "\x. x \# A \ prime x" "msetprod A = normalize x" proof - from prime_factorization_exists[OF assms] obtain A - where A: "\x. x \# A \ is_prime_elem x" "msetprod A = normalize x" by blast + where A: "\x. x \# A \ prime_elem x" "msetprod A = normalize x" by blast define A' where "A' = image_mset normalize A" have "msetprod A' = normalize (msetprod A)" by (simp add: A'_def normalize_msetprod) also note A(2) finally have "msetprod A' = normalize x" by simp - moreover from A(1) have "\x. x \# A' \ is_prime x" by (auto simp: is_prime_def A'_def) + moreover from A(1) have "\x. x \# A' \ prime x" by (auto simp: prime_def A'_def) ultimately show ?thesis by (intro that[of A']) blast qed -lemma irreducible_imp_prime: +lemma irreducible_imp_prime_elem: assumes "irreducible x" - shows "is_prime_elem x" -proof (rule is_prime_elemI) + shows "prime_elem x" +proof (rule prime_elemI) fix a b assume dvd: "x dvd a * b" from assms have "x \ 0" by auto show "x dvd a \ x dvd b" @@ -708,12 +709,12 @@ lemma finite_prime_divisors: assumes "x \ 0" - shows "finite {p. is_prime p \ p dvd x}" + shows "finite {p. prime p \ p dvd x}" proof - from prime_factorization_exists'[OF assms] guess A . note A = this - have "{p. is_prime p \ p dvd x} \ set_mset A" + have "{p. prime p \ p dvd x} \ set_mset A" proof safe - fix p assume p: "is_prime p" and dvd: "p dvd x" + fix p assume p: "prime p" and dvd: "p dvd x" from dvd have "p dvd normalize x" by simp also from A have "normalize x = msetprod A" by simp finally show "p \# A" using p A by (subst (asm) prime_dvd_msetprod_primes_iff) @@ -722,23 +723,23 @@ ultimately show ?thesis by (rule finite_subset) qed -lemma prime_iff_irreducible: "is_prime_elem x \ irreducible x" - by (blast intro: irreducible_imp_prime prime_imp_irreducible) +lemma prime_elem_iff_irreducible: "prime_elem x \ irreducible x" + by (blast intro: irreducible_imp_prime_elem prime_elem_imp_irreducible) lemma prime_divisor_exists: assumes "a \ 0" "\is_unit a" - shows "\b. b dvd a \ is_prime b" + shows "\b. b dvd a \ prime b" proof - from prime_factorization_exists'[OF assms(1)] guess A . note A = this moreover from A and assms have "A \ {#}" by auto then obtain x where "x \# A" by blast - with A(1) have *: "x dvd msetprod A" "is_prime x" by (auto simp: dvd_msetprod) + with A(1) have *: "x dvd msetprod A" "prime x" by (auto simp: dvd_msetprod) with A have "x dvd a" by simp with * show ?thesis by blast qed lemma prime_divisors_induct [case_names zero unit factor]: - assumes "P 0" "\x. is_unit x \ P x" "\p x. is_prime p \ P x \ P (p * x)" + assumes "P 0" "\x. is_unit x \ P x" "\p x. prime p \ P x \ P (p * x)" shows "P x" proof (cases "x = 0") case False @@ -746,7 +747,7 @@ from A(1) have "P (unit_factor x * msetprod A)" proof (induction A) case (add A p) - from add.prems have "is_prime p" by simp + from add.prems have "prime p" by simp moreover from add.prems have "P (unit_factor x * msetprod A)" by (intro add.IH) simp_all ultimately have "P (p * (unit_factor x * msetprod A))" by (rule assms(3)) thus ?case by (simp add: mult_ac) @@ -755,18 +756,18 @@ qed (simp_all add: assms(1)) lemma no_prime_divisors_imp_unit: - assumes "a \ 0" "\b. b dvd a \ normalize b = b \ \ is_prime_elem b" + assumes "a \ 0" "\b. b dvd a \ normalize b = b \ \ prime_elem b" shows "is_unit a" proof (rule ccontr) assume "\is_unit a" from prime_divisor_exists[OF assms(1) this] guess b by (elim exE conjE) - with assms(2)[of b] show False by (simp add: is_prime_def) + with assms(2)[of b] show False by (simp add: prime_def) qed lemma prime_divisorE: assumes "a \ 0" and "\ is_unit a" - obtains p where "is_prime p" and "p dvd a" - using assms no_prime_divisors_imp_unit unfolding is_prime_def by blast + obtains p where "prime p" and "p dvd a" + using assms no_prime_divisors_imp_unit unfolding prime_def by blast definition multiplicity :: "'a \ 'a \ nat" where "multiplicity p x = (if finite {n. p ^ n dvd x} then Max {n. p ^ n dvd x} else 0)" @@ -864,17 +865,17 @@ lemma multiplicity_zero [simp]: "multiplicity p 0 = 0" by (simp add: multiplicity_def) -lemma prime_multiplicity_eq_zero_iff: - "is_prime_elem p \ x \ 0 \ multiplicity p x = 0 \ \p dvd x" +lemma prime_elem_multiplicity_eq_zero_iff: + "prime_elem p \ x \ 0 \ multiplicity p x = 0 \ \p dvd x" by (rule multiplicity_eq_zero_iff) simp_all lemma prime_multiplicity_other: - assumes "is_prime p" "is_prime q" "p \ q" + assumes "prime p" "prime q" "p \ q" shows "multiplicity p q = 0" - using assms by (subst prime_multiplicity_eq_zero_iff) (auto dest: primes_dvd_imp_eq) + using assms by (subst prime_elem_multiplicity_eq_zero_iff) (auto dest: primes_dvd_imp_eq) lemma prime_multiplicity_gt_zero_iff: - "is_prime_elem p \ x \ 0 \ multiplicity p x > 0 \ p dvd x" + "prime_elem p \ x \ 0 \ multiplicity p x > 0 \ p dvd x" by (rule multiplicity_gt_zero_iff) simp_all lemma multiplicity_unit_left: "is_unit p \ multiplicity p x = 0" @@ -943,8 +944,8 @@ "p \ 0 \ \is_unit p \ multiplicity p (p ^ n) = n" by (simp add: multiplicity_same_power') -lemma multiplicity_prime_times_other: - assumes "is_prime_elem p" "\p dvd q" +lemma multiplicity_prime_elem_times_other: + assumes "prime_elem p" "\p dvd q" shows "multiplicity p (q * x) = multiplicity p x" proof (cases "x = 0") case False @@ -959,38 +960,38 @@ from multiplicity_decompose'[OF False this] guess y . note y = this [folded n_def] from y have "p ^ Suc n dvd q * x \ p ^ n * p dvd p ^ n * (q * y)" by (simp add: mult_ac) also from assms have "\ \ p dvd q * y" by simp - also have "\ \ p dvd q \ p dvd y" by (rule prime_dvd_mult_iff) fact+ + also have "\ \ p dvd q \ p dvd y" by (rule prime_elem_dvd_mult_iff) fact+ also from assms y have "\ \ False" by simp finally show "\(p ^ Suc n dvd q * x)" by blast qed qed simp_all lift_definition prime_factorization :: "'a \ 'a multiset" is - "\x p. if is_prime p then multiplicity p x else 0" + "\x p. if prime p then multiplicity p x else 0" unfolding multiset_def proof clarify fix x :: 'a - show "finite {p. 0 < (if is_prime p then multiplicity p x else 0)}" (is "finite ?A") + show "finite {p. 0 < (if prime p then multiplicity p x else 0)}" (is "finite ?A") proof (cases "x = 0") case False - from False have "?A \ {p. is_prime p \ p dvd x}" + from False have "?A \ {p. prime p \ p dvd x}" by (auto simp: multiplicity_gt_zero_iff) - moreover from False have "finite {p. is_prime p \ p dvd x}" + moreover from False have "finite {p. prime p \ p dvd x}" by (rule finite_prime_divisors) ultimately show ?thesis by (rule finite_subset) qed simp_all qed lemma count_prime_factorization_nonprime: - "\is_prime p \ count (prime_factorization x) p = 0" + "\prime p \ count (prime_factorization x) p = 0" by transfer simp lemma count_prime_factorization_prime: - "is_prime p \ count (prime_factorization x) p = multiplicity p x" + "prime p \ count (prime_factorization x) p = multiplicity p x" by transfer simp lemma count_prime_factorization: - "count (prime_factorization x) p = (if is_prime p then multiplicity p x else 0)" + "count (prime_factorization x) p = (if prime p then multiplicity p x else 0)" by transfer simp lemma unit_imp_no_irreducible_divisors: @@ -999,9 +1000,9 @@ using assms dvd_unit_imp_unit irreducible_not_unit by blast lemma unit_imp_no_prime_divisors: - assumes "is_unit x" "is_prime_elem p" + assumes "is_unit x" "prime_elem p" shows "\p dvd x" - using unit_imp_no_irreducible_divisors[OF assms(1) prime_imp_irreducible[OF assms(2)]] . + using unit_imp_no_irreducible_divisors[OF assms(1) prime_elem_imp_irreducible[OF assms(2)]] . lemma prime_factorization_0 [simp]: "prime_factorization 0 = {#}" by (simp add: multiset_eq_iff count_prime_factorization) @@ -1013,7 +1014,7 @@ { assume x: "x \ 0" "\is_unit x" { - fix p assume p: "is_prime p" + fix p assume p: "prime p" have "count (prime_factorization x) p = 0" by (simp add: *) also from p have "count (prime_factorization x) p = multiplicity p x" by (rule count_prime_factorization_prime) @@ -1029,7 +1030,7 @@ proof assume x: "is_unit x" { - fix p assume p: "is_prime p" + fix p assume p: "prime p" from p x have "multiplicity p x = 0" by (subst multiplicity_eq_zero_iff) (auto simp: multiplicity_eq_zero_iff dest: unit_imp_no_prime_divisors) @@ -1044,7 +1045,7 @@ proof (rule multiset_eqI) fix p :: 'a show "count (prime_factorization x) p = count {#} p" - proof (cases "is_prime p") + proof (cases "prime p") case True with assms have "multiplicity p x = 0" by (subst multiplicity_eq_zero_iff) @@ -1057,17 +1058,17 @@ by (simp add: prime_factorization_unit) lemma prime_factorization_times_prime: - assumes "x \ 0" "is_prime p" + assumes "x \ 0" "prime p" shows "prime_factorization (p * x) = {#p#} + prime_factorization x" proof (rule multiset_eqI) fix q :: 'a - consider "\is_prime q" | "p = q" | "is_prime q" "p \ q" by blast + consider "\prime q" | "p = q" | "prime q" "p \ q" by blast thus "count (prime_factorization (p * x)) q = count ({#p#} + prime_factorization x) q" proof cases - assume q: "is_prime q" "p \ q" + assume q: "prime q" "p \ q" with assms primes_dvd_imp_eq[of q p] have "\q dvd p" by auto with q assms show ?thesis - by (simp add: multiplicity_prime_times_other count_prime_factorization) + by (simp add: multiplicity_prime_elem_times_other count_prime_factorization) qed (insert assms, auto simp: count_prime_factorization multiplicity_times_same) qed @@ -1080,17 +1081,17 @@ is_unit_normalize normalize_mult) lemma in_prime_factorization_iff: - "p \# prime_factorization x \ x \ 0 \ p dvd x \ is_prime p" + "p \# prime_factorization x \ x \ 0 \ p dvd x \ prime p" proof - have "p \# prime_factorization x \ count (prime_factorization x) p > 0" by simp - also have "\ \ x \ 0 \ p dvd x \ is_prime p" + also have "\ \ x \ 0 \ p dvd x \ prime p" by (subst count_prime_factorization, cases "x = 0") (auto simp: multiplicity_eq_zero_iff multiplicity_gt_zero_iff) finally show ?thesis . qed lemma in_prime_factorization_imp_prime: - "p \# prime_factorization x \ is_prime p" + "p \# prime_factorization x \ prime p" by (simp add: in_prime_factorization_iff) lemma in_prime_factorization_imp_dvd: @@ -1111,18 +1112,18 @@ qed lemma prime_factorization_prime: - assumes "is_prime p" + assumes "prime p" shows "prime_factorization p = {#p#}" proof (rule multiset_eqI) fix q :: 'a - consider "\is_prime q" | "q = p" | "is_prime q" "q \ p" by blast + consider "\prime q" | "q = p" | "prime q" "q \ p" by blast thus "count (prime_factorization p) q = count {#p#} q" by cases (insert assms, auto dest: primes_dvd_imp_eq simp: count_prime_factorization multiplicity_self multiplicity_eq_zero_iff) qed lemma prime_factorization_msetprod_primes: - assumes "\p. p \# A \ is_prime p" + assumes "\p. p \# A \ prime p" shows "prime_factorization (msetprod A) = A" using assms proof (induction A) @@ -1204,7 +1205,7 @@ qed lemma prime_factorization_prime_power: - "is_prime p \ prime_factorization (p ^ n) = replicate_mset n p" + "prime p \ prime_factorization (p ^ n) = replicate_mset n p" by (induction n) (simp_all add: prime_factorization_mult prime_factorization_prime Multiset.union_commute) @@ -1242,8 +1243,8 @@ by (auto dest: in_prime_factorization_imp_prime) -lemma prime_multiplicity_mult_distrib: - assumes "is_prime_elem p" "x \ 0" "y \ 0" +lemma prime_elem_multiplicity_mult_distrib: + assumes "prime_elem p" "x \ 0" "y \ 0" shows "multiplicity p (x * y) = multiplicity p x + multiplicity p y" proof - have "multiplicity p (x * y) = count (prime_factorization (x * y)) (normalize p)" @@ -1259,23 +1260,23 @@ finally show ?thesis . qed -lemma prime_multiplicity_power_distrib: - assumes "is_prime_elem p" "x \ 0" +lemma prime_elem_multiplicity_power_distrib: + assumes "prime_elem p" "x \ 0" shows "multiplicity p (x ^ n) = n * multiplicity p x" - by (induction n) (simp_all add: assms prime_multiplicity_mult_distrib) + by (induction n) (simp_all add: assms prime_elem_multiplicity_mult_distrib) -lemma prime_multiplicity_msetprod_distrib: - assumes "is_prime_elem p" "0 \# A" +lemma prime_elem_multiplicity_msetprod_distrib: + assumes "prime_elem p" "0 \# A" shows "multiplicity p (msetprod A) = msetsum (image_mset (multiplicity p) A)" - using assms by (induction A) (auto simp: prime_multiplicity_mult_distrib) + using assms by (induction A) (auto simp: prime_elem_multiplicity_mult_distrib) -lemma prime_multiplicity_setprod_distrib: - assumes "is_prime_elem p" "0 \ f ` A" "finite A" +lemma prime_elem_multiplicity_setprod_distrib: + assumes "prime_elem p" "0 \ f ` A" "finite A" shows "multiplicity p (setprod f A) = (\x\A. multiplicity p (f x))" proof - have "multiplicity p (setprod f A) = (\x\#mset_set A. multiplicity p (f x))" using assms by (subst setprod_unfold_msetprod) - (simp_all add: prime_multiplicity_msetprod_distrib setsum_unfold_msetsum + (simp_all add: prime_elem_multiplicity_msetprod_distrib setsum_unfold_msetsum multiset.map_comp o_def) also from \finite A\ have "\ = (\x\A. multiplicity p (f x))" by (induction A rule: finite_induct) simp_all @@ -1292,10 +1293,10 @@ by (simp add: prime_factors_def) lemma prime_factorsI: - "x \ 0 \ is_prime p \ p dvd x \ p \ prime_factors x" + "x \ 0 \ prime p \ p dvd x \ p \ prime_factors x" by (auto simp: prime_factors_def in_prime_factorization_iff) -lemma prime_factors_prime [intro]: "p \ prime_factors x \ is_prime p" +lemma prime_factors_prime [intro]: "p \ prime_factors x \ prime p" by (auto simp: prime_factors_def dest: in_prime_factorization_imp_prime) lemma prime_factors_dvd [dest]: "p \ prime_factors x \ p dvd x" @@ -1306,7 +1307,7 @@ unfolding prime_factors_def by simp lemma prime_factors_altdef_multiplicity: - "prime_factors n = {p. is_prime p \ multiplicity p n > 0}" + "prime_factors n = {p. prime p \ multiplicity p n > 0}" by (cases "n = 0") (auto simp: prime_factors_def prime_multiplicity_gt_zero_iff prime_imp_prime_elem in_prime_factorization_iff) @@ -1335,8 +1336,8 @@ lemma prime_factorization_unique'': assumes S_eq: "S = {p. 0 < f p}" and "finite S" - and S: "\p\S. is_prime p" "normalize n = (\p\S. p ^ f p)" - shows "S = prime_factors n \ (\p. is_prime p \ f p = multiplicity p n)" + and S: "\p\S. prime p" "normalize n = (\p\S. p ^ f p)" + shows "S = prime_factors n \ (\p. prime p \ f p = multiplicity p n)" proof define A where "A = Abs_multiset f" from \finite S\ S(1) have "(\p\S. p ^ f p) \ 0" by auto @@ -1357,15 +1358,15 @@ by (intro prime_factorization_msetprod_primes) (auto dest: in_prime_factorization_imp_prime) finally show "S = prime_factors n" by (simp add: prime_factors_def set_mset_A [symmetric]) - show "(\p. is_prime p \ f p = multiplicity p n)" + show "(\p. prime p \ f p = multiplicity p n)" proof safe - fix p :: 'a assume p: "is_prime p" + fix p :: 'a assume p: "prime p" have "multiplicity p n = multiplicity p (normalize n)" by simp also have "normalize n = msetprod A" by (simp add: msetprod_multiplicity S_eq set_mset_A count_A S) also from p set_mset_A S(1) have "multiplicity p \ = msetsum (image_mset (multiplicity p) A)" - by (intro prime_multiplicity_msetprod_distrib) auto + by (intro prime_elem_multiplicity_msetprod_distrib) auto also from S(1) p have "image_mset (multiplicity p) A = image_mset (\q. if p = q then 1 else 0) A" by (intro image_mset_cong) (auto simp: set_mset_A multiplicity_self prime_multiplicity_other) @@ -1374,10 +1375,10 @@ qed qed -lemma multiplicity_prime [simp]: "is_prime_elem p \ multiplicity p p = 1" +lemma multiplicity_prime [simp]: "prime_elem p \ multiplicity p p = 1" by (rule multiplicity_self) auto -lemma multiplicity_prime_power [simp]: "is_prime_elem p \ multiplicity p (p ^ n) = n" +lemma multiplicity_prime_power [simp]: "prime_elem p \ multiplicity p (p ^ n) = n" by (subst multiplicity_same_power') auto lemma prime_factors_product: @@ -1385,8 +1386,8 @@ by (simp add: prime_factors_def prime_factorization_mult) lemma multiplicity_distinct_prime_power: - "is_prime p \ is_prime q \ p \ q \ multiplicity p (q ^ n) = 0" - by (subst prime_multiplicity_power_distrib) (auto simp: prime_multiplicity_other) + "prime p \ prime q \ p \ q \ multiplicity p (q ^ n) = 0" + by (subst prime_elem_multiplicity_power_distrib) (auto simp: prime_multiplicity_other) lemma dvd_imp_multiplicity_le: assumes "a dvd b" "b \ 0" @@ -1404,7 +1405,7 @@ (* RENAMED multiplicity_dvd *) lemma multiplicity_le_imp_dvd: - assumes "x \ 0" "\p. is_prime p \ multiplicity p x \ multiplicity p y" + assumes "x \ 0" "\p. prime p \ multiplicity p x \ multiplicity p y" shows "x dvd y" proof (cases "y = 0") case False @@ -1417,17 +1418,17 @@ "x \ 0 \ y \ 0 \ x dvd y \ (\p. multiplicity p x \ multiplicity p y)" by (auto intro: dvd_imp_multiplicity_le multiplicity_le_imp_dvd) -lemma prime_factors_altdef: "x \ 0 \ prime_factors x = {p. is_prime p \ p dvd x}" +lemma prime_factors_altdef: "x \ 0 \ prime_factors x = {p. prime p \ p dvd x}" by (auto intro: prime_factorsI) lemma multiplicity_eq_imp_eq: assumes "x \ 0" "y \ 0" - assumes "\p. is_prime p \ multiplicity p x = multiplicity p y" + assumes "\p. prime p \ multiplicity p x = multiplicity p y" shows "normalize x = normalize y" using assms by (intro associatedI multiplicity_le_imp_dvd) simp_all lemma prime_factorization_unique': - assumes "\p \# M. is_prime p" "\p \# N. is_prime p" "(\i \# M. i) = (\i \# N. i)" + assumes "\p \# M. prime p" "\p \# N. prime p" "(\i \# M. i) = (\i \# N. i)" shows "M = N" proof - have "prime_factorization (\i \# M. i) = prime_factorization (\i \# N. i)" @@ -1504,7 +1505,7 @@ hence "\y. y \# Inf (prime_factorization ` (A - {0})) \ y \# prime_factorization x" by (auto dest: mset_subset_eqD) with in_prime_factorization_imp_prime[of _ x] - have "\p. p \# Inf (prime_factorization ` (A - {0})) \ is_prime p" by blast + have "\p. p \# Inf (prime_factorization ` (A - {0})) \ prime p" by blast with assms show ?thesis by (simp add: Gcd_factorial_def prime_factorization_msetprod_primes) qed @@ -1519,7 +1520,7 @@ finally show ?thesis by (simp add: Lcm_factorial_def) next case False - have "\y. y \# Sup (prime_factorization ` A) \ is_prime y" + have "\y. y \# Sup (prime_factorization ` A) \ prime y" by (auto simp: in_Sup_multiset_iff assms in_prime_factorization_imp_prime) with assms False show ?thesis by (simp add: Lcm_factorial_def prime_factorization_msetprod_primes) @@ -1586,7 +1587,7 @@ then obtain x where "x \ A" "x \ 0" by blast hence "Inf (prime_factorization ` (A - {0})) \# prime_factorization x" by (intro subset_mset.cInf_lower) auto - hence "is_prime p" if "p \# Inf (prime_factorization ` (A - {0}))" for p + hence "prime p" if "p \# Inf (prime_factorization ` (A - {0}))" for p using that by (auto dest: mset_subset_eqD intro: in_prime_factorization_imp_prime) with False show ?thesis by (auto simp add: Gcd_factorial_def normalize_msetprod_primes) @@ -1692,9 +1693,9 @@ lemma (in normalization_semidom) factorial_semiring_altI_aux: assumes finite_divisors: "\x::'a. x \ 0 \ finite {y. y dvd x \ normalize y = y}" - assumes irreducible_imp_prime: "\x::'a. irreducible x \ is_prime_elem x" + assumes irreducible_imp_prime_elem: "\x::'a. irreducible x \ prime_elem x" assumes "(x::'a) \ 0" - shows "\A. (\x. x \# A \ is_prime_elem x) \ msetprod A = normalize x" + shows "\A. (\x. x \# A \ prime_elem x) \ msetprod A = normalize x" using \x \ 0\ proof (induction "card {b. b dvd x \ normalize b = b}" arbitrary: x rule: less_induct) case (less a) @@ -1709,7 +1710,7 @@ proof (cases "\b. b dvd a \ \is_unit b \ \a dvd b") case False with \\is_unit a\ less.prems have "irreducible a" by (auto simp: irreducible_altdef) - hence "is_prime_elem a" by (rule irreducible_imp_prime) + hence "prime_elem a" by (rule irreducible_imp_prime_elem) thus ?thesis by (intro exI[of _ "{#normalize a#}"]) auto next case True @@ -1722,7 +1723,7 @@ with finite_divisors[OF \a \ 0\] have "card (?fctrs b) < card (?fctrs a)" by (rule psubset_card_mono) moreover from \a \ 0\ b have "b \ 0" by auto - ultimately have "\A. (\x. x \# A \ is_prime_elem x) \ msetprod A = normalize b" + ultimately have "\A. (\x. x \# A \ prime_elem x) \ msetprod A = normalize b" by (intro less) auto then guess A .. note A = this @@ -1741,7 +1742,7 @@ ultimately have "?fctrs c \ ?fctrs a" by (subst subset_not_subset_eq) blast with finite_divisors[OF \a \ 0\] have "card (?fctrs c) < card (?fctrs a)" by (rule psubset_card_mono) - with \c \ 0\ have "\A. (\x. x \# A \ is_prime_elem x) \ msetprod A = normalize c" + with \c \ 0\ have "\A. (\x. x \# A \ prime_elem x) \ msetprod A = normalize c" by (intro less) auto then guess B .. note B = this @@ -1752,7 +1753,7 @@ lemma factorial_semiring_altI: assumes finite_divisors: "\x::'a. x \ 0 \ finite {y. y dvd x \ normalize y = y}" - assumes irreducible_imp_prime: "\x::'a. irreducible x \ is_prime_elem x" + assumes irreducible_imp_prime: "\x::'a. irreducible x \ prime_elem x" shows "OFCLASS('a :: normalization_semidom, factorial_semiring_class)" by intro_classes (rule factorial_semiring_altI_aux[OF assms]) @@ -1816,7 +1817,7 @@ qed lemma - assumes "x \ 0" "y \ 0" "is_prime p" + assumes "x \ 0" "y \ 0" "prime p" shows multiplicity_gcd: "multiplicity p (gcd x y) = min (multiplicity p x) (multiplicity p y)" and multiplicity_lcm: "multiplicity p (lcm x y) = max (multiplicity p x) (multiplicity p y)" proof - diff -r 6ddb43c6b711 -r 2accfb71e33b src/HOL/Number_Theory/Gauss.thy --- a/src/HOL/Number_Theory/Gauss.thy Mon Aug 08 14:13:14 2016 +0200 +++ b/src/HOL/Number_Theory/Gauss.thy Mon Aug 08 17:47:51 2016 +0200 @@ -112,7 +112,7 @@ from p_a_relprime have "\p dvd a" by (simp add: cong_altdef_int) with p_prime have "coprime a (int p)" - by (subst gcd.commute, intro is_prime_imp_coprime) auto + by (subst gcd.commute, intro prime_imp_coprime) auto with a cong_mult_rcancel_int [of a "int p" x y] have "[x = y] (mod p)" by simp with cong_less_imp_eq_int [of x y p] p_minus_one_l @@ -144,7 +144,7 @@ from p_a_relprime have "\p dvd a" by (simp add: cong_altdef_int) with p_prime have "coprime a (int p)" - by (subst gcd.commute, intro is_prime_imp_coprime) auto + by (subst gcd.commute, intro prime_imp_coprime) auto with a' cong_mult_rcancel_int [of a "int p" x y] have "[x = y] (mod p)" by simp with cong_less_imp_eq_int [of x y p] p_minus_one_l @@ -207,7 +207,7 @@ lemma all_A_relprime: assumes "x \ A" shows "gcd x p = 1" using p_prime A_ncong_p [OF assms] - by (auto simp: cong_altdef_int gcd.commute[of _ "int p"] intro!: is_prime_imp_coprime) + by (auto simp: cong_altdef_int gcd.commute[of _ "int p"] intro!: prime_imp_coprime) lemma A_prod_relprime: "gcd (setprod id A) p = 1" by (metis id_def all_A_relprime setprod_coprime) diff -r 6ddb43c6b711 -r 2accfb71e33b src/HOL/Number_Theory/Pocklington.thy --- a/src/HOL/Number_Theory/Pocklington.thy Mon Aug 08 14:13:14 2016 +0200 +++ b/src/HOL/Number_Theory/Pocklington.thy Mon Aug 08 17:47:51 2016 +0200 @@ -12,7 +12,7 @@ lemma prime: "prime (p::nat) \ p \ 0 \ p \ 1 \ (\m. 0 < m \ m < p \ coprime p m)" - unfolding is_prime_nat_iff + unfolding prime_nat_iff proof safe fix m assume p: "p > 0" "p \ 1" and m: "m dvd p" "m \ p" and *: "\m. m > 0 \ m < p \ coprime p m" @@ -20,8 +20,8 @@ moreover from p m have "m < p" by (auto dest: dvd_imp_le) ultimately have "coprime p m" using * by blast with m show "m = 1" by simp -qed (auto simp: is_prime_nat_iff simp del: One_nat_def - intro!: is_prime_imp_coprime dest: dvd_imp_le) +qed (auto simp: prime_nat_iff simp del: One_nat_def + intro!: prime_imp_coprime dest: dvd_imp_le) lemma finite_number_segment: "card { m. 0 < m \ m < n } = n - 1" proof- @@ -85,7 +85,7 @@ with y(2) have th: "p dvd a" by (auto dest: cong_dvd_eq_nat) have False - by (metis gcd_nat.absorb1 not_is_prime_1 p pa th)} + by (metis gcd_nat.absorb1 not_prime_1 p pa th)} with y show ?thesis unfolding Ex1_def using neq0_conv by blast qed @@ -428,18 +428,18 @@ proof (cases "n=0 \ n=1") case True then show ?thesis - by (metis bigger_prime dvd_0_right not_is_prime_1 not_is_prime_0) + by (metis bigger_prime dvd_0_right not_prime_1 not_prime_0) next case False show ?thesis proof assume "prime n" then show ?rhs - by (metis not_is_prime_1 is_prime_nat_iff) + by (metis not_prime_1 prime_nat_iff) next assume ?rhs with False show "prime n" - by (auto simp: is_prime_nat_iff) (metis One_nat_def prime_factor_nat is_prime_nat_iff) + by (auto simp: prime_nat_iff) (metis One_nat_def prime_factor_nat prime_nat_iff) qed qed @@ -475,7 +475,7 @@ with H[rule_format, of e] h have "e=1" by simp with e have "d = n" by simp} ultimately have "d=1 \ d=n" by blast} - ultimately have ?thesis unfolding is_prime_nat_iff using np n(2) by blast} + ultimately have ?thesis unfolding prime_nat_iff using np n(2) by blast} ultimately show ?thesis by auto qed @@ -485,7 +485,7 @@ proof- {assume "n=0 \ n=1" hence ?thesis - by (metis not_is_prime_0 not_is_prime_1)} + by (metis not_prime_0 not_prime_1)} moreover {assume n: "n\0" "n\1" {assume H: ?lhs @@ -539,7 +539,7 @@ from aq P(1) Pq have caP:"coprime (a^ ((n - 1) div P) - 1) n" by blast from Pq obtain s where s: "q = P*s" unfolding dvd_def by blast have P0: "P \ 0" using P(1) - by (metis not_is_prime_0) + by (metis not_prime_0) from P(2) obtain t where t: "d = P*t" unfolding dvd_def by blast from d s t P0 have s': "ord p (a^r) * t = s" by (metis mult.commute mult_cancel1 mult.assoc) @@ -559,7 +559,7 @@ hence o: "ord p (a^r) = q" using d by simp from pp phi_prime[of p] have phip: "phi p = p - 1" by simp {fix d assume d: "d dvd p" "d dvd a" "d \ 1" - from pp[unfolded is_prime_nat_iff] d have dp: "d = p" by blast + from pp[unfolded prime_nat_iff] d have dp: "d = p" by blast from n have "n \ 0" by simp then have False using d dp pn by auto (metis One_nat_def Suc_pred an dvd_1_iff_1 gcd_greatest_iff lucas_coprime_lemma)} @@ -675,7 +675,7 @@ from Cons.prems[unfolded primefact_def] have q: "prime q" "q * foldr op * qs 1 = n" "\p \set qs. prime p" and p: "prime p" "p dvd q * foldr op * qs 1" by simp_all {assume "p dvd q" - with p(1) q(1) have "p = q" unfolding is_prime_nat_iff by auto + with p(1) q(1) have "p = q" unfolding prime_nat_iff by auto hence ?case by simp} moreover { assume h: "p dvd foldr op * qs 1" @@ -730,7 +730,7 @@ from psp primefact_contains[OF pfpsq p] have p': "coprime (a ^ (r * (q div p)) mod n - 1) n" by (simp add: list_all_iff) - from p is_prime_nat_iff have p01: "p \ 0" "p \ 1" "p =Suc(p - 1)" + from p prime_nat_iff have p01: "p \ 0" "p \ 1" "p =Suc(p - 1)" by auto from div_mult1_eq[of r q p] p(2) have eq1: "r* (q div p) = (n - 1) div p" diff -r 6ddb43c6b711 -r 2accfb71e33b src/HOL/Number_Theory/Polynomial_Factorial.thy --- a/src/HOL/Number_Theory/Polynomial_Factorial.thy Mon Aug 08 14:13:14 2016 +0200 +++ b/src/HOL/Number_Theory/Polynomial_Factorial.thy Mon Aug 08 17:47:51 2016 +0200 @@ -812,9 +812,9 @@ subsection \More properties of content and primitive part\ lemma lift_prime_elem_poly: - assumes "is_prime_elem (c :: 'a :: semidom)" - shows "is_prime_elem [:c:]" -proof (rule is_prime_elemI) + assumes "prime_elem (c :: 'a :: semidom)" + shows "prime_elem [:c:]" +proof (rule prime_elemI) fix a b assume *: "[:c:] dvd a * b" from * have dvd: "c dvd coeff (a * b) n" for n by (subst (asm) const_poly_dvd_iff) blast @@ -862,25 +862,25 @@ ultimately have "c dvd coeff a i * coeff b m" by (simp add: dvd_add_left_iff) with assms coeff_m show "c dvd coeff a i" - by (simp add: prime_dvd_mult_iff) + by (simp add: prime_elem_dvd_mult_iff) qed hence "[:c:] dvd a" by (subst const_poly_dvd_iff) blast } thus "[:c:] dvd a \ [:c:] dvd b" by blast -qed (insert assms, simp_all add: is_prime_elem_def one_poly_def) +qed (insert assms, simp_all add: prime_elem_def one_poly_def) lemma prime_elem_const_poly_iff: fixes c :: "'a :: semidom" - shows "is_prime_elem [:c:] \ is_prime_elem c" + shows "prime_elem [:c:] \ prime_elem c" proof - assume A: "is_prime_elem [:c:]" - show "is_prime_elem c" - proof (rule is_prime_elemI) + assume A: "prime_elem [:c:]" + show "prime_elem c" + proof (rule prime_elemI) fix a b assume "c dvd a * b" hence "[:c:] dvd [:a:] * [:b:]" by (simp add: mult_ac) - from A and this have "[:c:] dvd [:a:] \ [:c:] dvd [:b:]" by (rule prime_divides_productD) + from A and this have "[:c:] dvd [:a:] \ [:c:] dvd [:b:]" by (rule prime_elem_dvd_multD) thus "c dvd a \ c dvd b" by simp - qed (insert A, auto simp: is_prime_elem_def is_unit_poly_iff) + qed (insert A, auto simp: prime_elem_def is_unit_poly_iff) qed (auto intro: lift_prime_elem_poly) context @@ -897,16 +897,16 @@ hence "f * g \ 0" by auto { assume "\is_unit (content (f * g))" - with False have "\p. p dvd content (f * g) \ is_prime p" + with False have "\p. p dvd content (f * g) \ prime p" by (intro prime_divisor_exists) simp_all - then obtain p where "p dvd content (f * g)" "is_prime p" by blast + then obtain p where "p dvd content (f * g)" "prime p" by blast from \p dvd content (f * g)\ have "[:p:] dvd f * g" by (simp add: const_poly_dvd_iff_dvd_content) - moreover from \is_prime p\ have "is_prime_elem [:p:]" by (simp add: lift_prime_elem_poly) + moreover from \prime p\ have "prime_elem [:p:]" by (simp add: lift_prime_elem_poly) ultimately have "[:p:] dvd f \ [:p:] dvd g" - by (simp add: prime_dvd_mult_iff) + by (simp add: prime_elem_dvd_mult_iff) with assms have "is_unit p" by (simp add: const_poly_dvd_iff_dvd_content) - with \is_prime p\ have False by simp + with \prime p\ have False by simp } hence "is_unit (content (f * g))" by blast hence "normalize (content (f * g)) = 1" by (simp add: is_unit_normalize del: normalize_content) @@ -1033,12 +1033,12 @@ private lemma field_poly_irreducible_imp_prime: assumes "irreducible (p :: 'a :: field poly)" - shows "is_prime_elem p" + shows "prime_elem p" proof - have A: "class.comm_semiring_1 op * 1 op + (0 :: 'a poly)" .. - from field_poly.irreducible_imp_prime[of p] assms - show ?thesis unfolding irreducible_def is_prime_elem_def dvd_field_poly - comm_semiring_1.irreducible_def[OF A] comm_semiring_1.is_prime_elem_def[OF A] by blast + from field_poly.irreducible_imp_prime_elem[of p] assms + show ?thesis unfolding irreducible_def prime_elem_def dvd_field_poly + comm_semiring_1.irreducible_def[OF A] comm_semiring_1.prime_elem_def[OF A] by blast qed private lemma field_poly_msetprod_prime_factorization: @@ -1053,14 +1053,14 @@ private lemma field_poly_in_prime_factorization_imp_prime: assumes "(p :: 'a :: field poly) \# field_poly.prime_factorization x" - shows "is_prime_elem p" + shows "prime_elem p" proof - have A: "class.comm_semiring_1 op * 1 op + (0 :: 'a poly)" .. have B: "class.normalization_semidom op div op + op - (0 :: 'a poly) op * 1 normalize_field_poly unit_factor_field_poly" .. from field_poly.in_prime_factorization_imp_prime[of p x] assms - show ?thesis unfolding is_prime_elem_def dvd_field_poly - comm_semiring_1.is_prime_elem_def[OF A] normalization_semidom.is_prime_def[OF B] by blast + show ?thesis unfolding prime_elem_def dvd_field_poly + comm_semiring_1.prime_elem_def[OF A] normalization_semidom.prime_def[OF B] by blast qed @@ -1144,24 +1144,24 @@ private lemma irreducible_imp_prime_poly: fixes p :: "'a :: {factorial_semiring,semiring_Gcd,ring_gcd,idom_divide} poly" assumes "irreducible p" - shows "is_prime_elem p" + shows "prime_elem p" proof (cases "degree p = 0") case True with assms show ?thesis by (auto simp: prime_elem_const_poly_iff irreducible_const_poly_iff - intro!: irreducible_imp_prime elim!: degree_eq_zeroE) + intro!: irreducible_imp_prime_elem elim!: degree_eq_zeroE) next case False from assms False have irred: "irreducible (fract_poly p)" and primitive: "content p = 1" by (simp_all add: nonconst_poly_irreducible_iff) - from irred have prime: "is_prime_elem (fract_poly p)" by (rule field_poly_irreducible_imp_prime) + from irred have prime: "prime_elem (fract_poly p)" by (rule field_poly_irreducible_imp_prime) show ?thesis - proof (rule is_prime_elemI) + proof (rule prime_elemI) fix q r assume "p dvd q * r" hence "fract_poly p dvd fract_poly (q * r)" by (rule fract_poly_dvd) hence "fract_poly p dvd fract_poly q * fract_poly r" by simp from prime and this have "fract_poly p dvd fract_poly q \ fract_poly p dvd fract_poly r" - by (rule prime_divides_productD) + by (rule prime_elem_dvd_multD) with primitive show "p dvd q \ p dvd r" by (auto dest: fract_poly_dvdD) qed (insert assms, auto simp: irreducible_def) qed @@ -1196,9 +1196,9 @@ by (simp add: nonconst_poly_irreducible_iff) qed -lemma is_prime_elem_primitive_part_fract: +lemma prime_elem_primitive_part_fract: fixes p :: "'a :: {idom_divide, ring_gcd, factorial_semiring, semiring_Gcd} fract poly" - shows "irreducible p \ is_prime_elem (primitive_part_fract p)" + shows "irreducible p \ prime_elem (primitive_part_fract p)" by (intro irreducible_imp_prime_poly irreducible_primitive_part_fract) lemma irreducible_linear_field_poly: @@ -1214,8 +1214,8 @@ by (auto simp: is_unit_const_poly_iff dvd_field_iff elim!: degree_eq_zeroE) qed (insert assms, auto simp: is_unit_poly_iff) -lemma is_prime_elem_linear_field_poly: - "(b :: 'a :: field) \ 0 \ is_prime_elem [:a,b:]" +lemma prime_elem_linear_field_poly: + "(b :: 'a :: field) \ 0 \ prime_elem [:a,b:]" by (rule field_poly_irreducible_imp_prime, rule irreducible_linear_field_poly) lemma irreducible_linear_poly: @@ -1224,9 +1224,9 @@ by (auto intro!: irreducible_linear_field_poly simp: nonconst_poly_irreducible_iff content_def map_poly_pCons) -lemma is_prime_elem_linear_poly: +lemma prime_elem_linear_poly: fixes a b :: "'a::{idom_divide,ring_gcd,factorial_semiring,semiring_Gcd}" - shows "b \ 0 \ coprime a b \ is_prime_elem [:a,b:]" + shows "b \ 0 \ coprime a b \ prime_elem [:a,b:]" by (rule irreducible_imp_prime_poly, rule irreducible_linear_poly) @@ -1235,7 +1235,7 @@ private lemma poly_prime_factorization_exists_content_1: fixes p :: "'a :: {factorial_semiring,semiring_Gcd,ring_gcd,idom_divide} poly" assumes "p \ 0" "content p = 1" - shows "\A. (\p. p \# A \ is_prime_elem p) \ msetprod A = normalize p" + shows "\A. (\p. p \# A \ prime_elem p) \ msetprod A = normalize p" proof - let ?P = "field_poly.prime_factorization (fract_poly p)" define c where "c = msetprod (image_mset fract_content ?P)" @@ -1282,8 +1282,8 @@ by (simp add: multiset.map_comp e_def A_def normalize_msetprod) finally have "msetprod A = normalize p" .. - have "is_prime_elem p" if "p \# A" for p - using that by (auto simp: A_def is_prime_elem_primitive_part_fract prime_imp_irreducible + have "prime_elem p" if "p \# A" for p + using that by (auto simp: A_def prime_elem_primitive_part_fract prime_elem_imp_irreducible dest!: field_poly_in_prime_factorization_imp_prime ) from this and \msetprod A = normalize p\ show ?thesis by (intro exI[of _ A]) blast @@ -1292,15 +1292,15 @@ lemma poly_prime_factorization_exists: fixes p :: "'a :: {factorial_semiring,semiring_Gcd,ring_gcd,idom_divide} poly" assumes "p \ 0" - shows "\A. (\p. p \# A \ is_prime_elem p) \ msetprod A = normalize p" + shows "\A. (\p. p \# A \ prime_elem p) \ msetprod A = normalize p" proof - define B where "B = image_mset (\x. [:x:]) (prime_factorization (content p))" - have "\A. (\p. p \# A \ is_prime_elem p) \ msetprod A = normalize (primitive_part p)" + have "\A. (\p. p \# A \ prime_elem p) \ msetprod A = normalize (primitive_part p)" by (rule poly_prime_factorization_exists_content_1) (insert assms, simp_all) then guess A by (elim exE conjE) note A = this moreover from assms have "msetprod B = [:content p:]" by (simp add: B_def msetprod_const_poly msetprod_prime_factorization) - moreover have "\p. p \# B \ is_prime_elem p" + moreover have "\p. p \# B \ prime_elem p" by (auto simp: B_def intro: lift_prime_elem_poly dest: in_prime_factorization_imp_prime) ultimately show ?thesis by (intro exI[of _ "B + A"]) auto qed diff -r 6ddb43c6b711 -r 2accfb71e33b src/HOL/Number_Theory/Primes.thy --- a/src/HOL/Number_Theory/Primes.thy Mon Aug 08 14:13:14 2016 +0200 +++ b/src/HOL/Number_Theory/Primes.thy Mon Aug 08 17:47:51 2016 +0200 @@ -55,57 +55,55 @@ declare [[coercion int]] declare [[coercion_enabled]] -abbreviation (input) "prime \ is_prime" - -lemma is_prime_elem_nat_iff: - "is_prime_elem (n :: nat) \ (1 < n \ (\m. m dvd n \ m = 1 \ m = n))" +lemma prime_elem_nat_iff: + "prime_elem (n :: nat) \ (1 < n \ (\m. m dvd n \ m = 1 \ m = n))" proof safe - assume *: "is_prime_elem n" + assume *: "prime_elem n" from * have "n \ 0" "n \ 1" by (intro notI, simp del: One_nat_def)+ thus "n > 1" by (cases n) simp_all fix m assume m: "m dvd n" "m \ n" from * \m dvd n\ have "n dvd m \ is_unit m" - by (intro irreducibleD' prime_imp_irreducible) + by (intro irreducibleD' prime_elem_imp_irreducible) with m show "m = 1" by (auto dest: dvd_antisym) next assume "n > 1" "\m. m dvd n \ m = 1 \ m = n" - thus "is_prime_elem n" - by (auto simp: prime_iff_irreducible irreducible_altdef) + thus "prime_elem n" + by (auto simp: prime_elem_iff_irreducible irreducible_altdef) qed -lemma is_prime_nat_iff_is_prime_elem: "is_prime (n :: nat) \ is_prime_elem n" - by (simp add: is_prime_def) +lemma prime_nat_iff_prime_elem: "prime (n :: nat) \ prime_elem n" + by (simp add: prime_def) -lemma is_prime_nat_iff: - "is_prime (n :: nat) \ (1 < n \ (\m. m dvd n \ m = 1 \ m = n))" - by (simp add: is_prime_nat_iff_is_prime_elem is_prime_elem_nat_iff) +lemma prime_nat_iff: + "prime (n :: nat) \ (1 < n \ (\m. m dvd n \ m = 1 \ m = n))" + by (simp add: prime_nat_iff_prime_elem prime_elem_nat_iff) -lemma is_prime_elem_int_nat_transfer: "is_prime_elem (n::int) \ is_prime_elem (nat (abs n))" +lemma prime_elem_int_nat_transfer: "prime_elem (n::int) \ prime_elem (nat (abs n))" proof - assume "is_prime_elem n" - thus "is_prime_elem (nat (abs n))" by (auto simp: is_prime_elem_def nat_dvd_iff) + assume "prime_elem n" + thus "prime_elem (nat (abs n))" by (auto simp: prime_elem_def nat_dvd_iff) next - assume "is_prime_elem (nat (abs n))" - thus "is_prime_elem n" - by (auto simp: dvd_int_unfold_dvd_nat is_prime_elem_def abs_mult nat_mult_distrib) + assume "prime_elem (nat (abs n))" + thus "prime_elem n" + by (auto simp: dvd_int_unfold_dvd_nat prime_elem_def abs_mult nat_mult_distrib) qed -lemma is_prime_elem_nat_int_transfer [simp]: "is_prime_elem (int n) \ is_prime_elem n" - by (auto simp: is_prime_elem_int_nat_transfer) +lemma prime_elem_nat_int_transfer [simp]: "prime_elem (int n) \ prime_elem n" + by (auto simp: prime_elem_int_nat_transfer) -lemma is_prime_nat_int_transfer [simp]: "is_prime (int n) \ is_prime n" - by (auto simp: is_prime_elem_int_nat_transfer is_prime_def) +lemma prime_nat_int_transfer [simp]: "prime (int n) \ prime n" + by (auto simp: prime_elem_int_nat_transfer prime_def) -lemma is_prime_int_nat_transfer: "is_prime (n::int) \ n \ 0 \ is_prime (nat n)" - by (auto simp: is_prime_elem_int_nat_transfer is_prime_def) +lemma prime_int_nat_transfer: "prime (n::int) \ n \ 0 \ prime (nat n)" + by (auto simp: prime_elem_int_nat_transfer prime_def) -lemma is_prime_int_iff: - "is_prime (n::int) \ (1 < n \ (\m. m \ 0 \ m dvd n \ m = 1 \ m = n))" +lemma prime_int_iff: + "prime (n::int) \ (1 < n \ (\m. m \ 0 \ m dvd n \ m = 1 \ m = n))" proof (intro iffI conjI allI impI; (elim conjE)?) - assume *: "is_prime n" - hence irred: "irreducible n" by (simp add: prime_imp_irreducible) + assume *: "prime n" + hence irred: "irreducible n" by (simp add: prime_elem_imp_irreducible) from * have "n \ 0" "n \ 0" "n \ 1" - by (auto simp: is_prime_def zabs_def not_less split: if_splits) + by (auto simp: prime_def zabs_def not_less split: if_splits) thus "n > 1" by presburger fix m assume "m dvd n" \m \ 0\ with irred have "m dvd 1 \ n dvd m" by (auto simp: irreducible_altdef) @@ -121,8 +119,8 @@ with n(2) have "int m = 1 \ int m = n" by auto thus "m = 1 \ m = nat n" by auto qed - ultimately show "is_prime n" - unfolding is_prime_int_nat_transfer is_prime_nat_iff by auto + ultimately show "prime n" + unfolding prime_int_nat_transfer prime_nat_iff by auto qed @@ -131,7 +129,7 @@ shows "\n dvd p" proof assume "n dvd p" - from assms(1) have "irreducible p" by (simp add: prime_imp_irreducible) + from assms(1) have "irreducible p" by (simp add: prime_elem_imp_irreducible) from irreducibleD'[OF this \n dvd p\] \n dvd p\ \p > n\ assms show False by (cases "n = 0") (auto dest!: dvd_imp_le) qed @@ -141,7 +139,7 @@ shows "\n dvd p" proof assume "n dvd p" - from assms(1) have "irreducible p" by (simp add: prime_imp_irreducible) + from assms(1) have "irreducible p" by (simp add: prime_elem_imp_irreducible) from irreducibleD'[OF this \n dvd p\] \n dvd p\ \p > n\ assms show False by (auto dest!: zdvd_imp_le) qed @@ -153,60 +151,60 @@ by (intro prime_int_not_dvd) auto lemma prime_ge_0_int: "prime p \ p \ (0::int)" - unfolding is_prime_int_iff by auto + unfolding prime_int_iff by auto lemma prime_gt_0_nat: "prime p \ p > (0::nat)" - unfolding is_prime_nat_iff by auto + unfolding prime_nat_iff by auto lemma prime_gt_0_int: "prime p \ p > (0::int)" - unfolding is_prime_int_iff by auto + unfolding prime_int_iff by auto lemma prime_ge_1_nat: "prime p \ p \ (1::nat)" - unfolding is_prime_nat_iff by auto + unfolding prime_nat_iff by auto lemma prime_ge_Suc_0_nat: "prime p \ p \ Suc 0" - unfolding is_prime_nat_iff by auto + unfolding prime_nat_iff by auto lemma prime_ge_1_int: "prime p \ p \ (1::int)" - unfolding is_prime_int_iff by auto + unfolding prime_int_iff by auto lemma prime_gt_1_nat: "prime p \ p > (1::nat)" - unfolding is_prime_nat_iff by auto + unfolding prime_nat_iff by auto lemma prime_gt_Suc_0_nat: "prime p \ p > Suc 0" - unfolding is_prime_nat_iff by auto + unfolding prime_nat_iff by auto lemma prime_gt_1_int: "prime p \ p > (1::int)" - unfolding is_prime_int_iff by auto + unfolding prime_int_iff by auto lemma prime_ge_2_nat: "prime p \ p \ (2::nat)" - unfolding is_prime_nat_iff by auto + unfolding prime_nat_iff by auto lemma prime_ge_2_int: "prime p \ p \ (2::int)" - unfolding is_prime_int_iff by auto + unfolding prime_int_iff by auto lemma prime_int_altdef: "prime p = (1 < p \ (\m::int. m \ 0 \ m dvd p \ m = 1 \ m = p))" - unfolding is_prime_int_iff by blast + unfolding prime_int_iff by blast lemma not_prime_eq_prod_nat: assumes "m > 1" "\prime (m::nat)" shows "\n k. n = m * k \ 1 < m \ m < n \ 1 < k \ k < n" using assms irreducible_altdef[of m] - by (auto simp: prime_iff_irreducible is_prime_def irreducible_altdef) + by (auto simp: prime_elem_iff_irreducible prime_def irreducible_altdef) subsubsection \Make prime naively executable\ lemma Suc_0_not_prime_nat [simp]: "~prime (Suc 0)" - unfolding One_nat_def [symmetric] by (rule not_is_prime_1) + unfolding One_nat_def [symmetric] by (rule not_prime_1) -lemma is_prime_nat_iff': +lemma prime_nat_iff': "prime (p :: nat) \ p > 1 \ (\n \ {1<.. 1" and *: "\n\{1<..n dvd p" - show "is_prime p" unfolding is_prime_nat_iff + show "prime p" unfolding prime_nat_iff proof (intro conjI allI impI) fix m assume "m dvd p" with \p > 1\ have "m \ 0" by (intro notI) auto @@ -215,25 +213,25 @@ with \m dvd p\ and \p > 1\ have "m \ 1 \ m = p" by (auto dest: dvd_imp_le) ultimately show "m = 1 \ m = p" by simp qed fact+ -qed (auto simp: is_prime_nat_iff) +qed (auto simp: prime_nat_iff) lemma prime_nat_code [code_unfold]: "(prime :: nat \ bool) = (\p. p > 1 \ (\n \ {1<.. p > 1 \ (\n \ {1<.. bool) = (\p. p > 1 \ (\n \ {1<.. p > 1 \ (\n \ set [2.. n dvd p)" @@ -245,10 +243,10 @@ lemmas prime_nat_simp_numeral [simp] = prime_nat_simp [of "numeral m"] for m -lemma two_is_prime_nat [simp]: "prime (2::nat)" +lemma two_prime_nat [simp]: "prime (2::nat)" by simp -declare is_prime_int_nat_transfer[of "numeral m" for m, simp] +declare prime_int_nat_transfer[of "numeral m" for m, simp] text\A bit of regression testing:\ @@ -282,7 +280,7 @@ then have "p dvd 1" by simp then have "p <= 1" by auto moreover from \prime p\ have "p > 1" - using is_prime_nat_iff by blast + using prime_nat_iff by blast ultimately have False by auto} then have "n < p" by presburger with \prime p\ and \p <= fact n + 1\ show ?thesis by auto @@ -313,7 +311,7 @@ proof - from assms have "1 < p * q" and P: "\m. m dvd p * q \ m = 1 \ m = p * q" - unfolding is_prime_nat_iff by auto + unfolding prime_nat_iff by auto from \1 < p * q\ have "p \ 0" by (cases p) auto then have Q: "p = p * q \ q = 1" by auto have "p dvd p * q" by simp @@ -332,7 +330,7 @@ next case (Suc k x y) from Suc.prems have pxy: "p dvd x*y" by auto - from is_prime_dvd_multD [OF p pxy] have pxyc: "p dvd x \ p dvd y" . + from prime_dvd_multD [OF p pxy] have pxyc: "p dvd x \ p dvd y" . from p have p0: "p \ 0" by - (rule ccontr, simp) {assume px: "p dvd x" then obtain d where d: "x = p*d" unfolding dvd_def by blast @@ -446,7 +444,7 @@ shows "\x y. a*x = Suc (p*y)" proof - have ap: "coprime a p" - by (metis gcd.commute p pa is_prime_imp_coprime) + by (metis gcd.commute p pa prime_imp_coprime) moreover from p have "p \ 1" by auto ultimately have "\x y. a * x = p * y + 1" by (rule coprime_bezout_strong) @@ -470,7 +468,7 @@ fixes n :: int shows "p \ prime_factors n \ p \ 0" unfolding prime_factors_def - by (auto split: if_splits simp: is_prime_def dest!: in_prime_factorization_imp_prime) + by (auto split: if_splits simp: prime_def dest!: in_prime_factorization_imp_prime) lemma msetprod_prime_factorization_int: fixes n :: int @@ -480,7 +478,7 @@ lemma prime_factorization_exists_nat: "n > 0 \ (\M. (\p::nat \ set_mset M. prime p) \ n = (\i \# M. i))" - using prime_factorization_exists[of n] by (auto simp: is_prime_def) + using prime_factorization_exists[of n] by (auto simp: prime_def) lemma msetprod_prime_factorization_nat [simp]: "(n::nat) > 0 \ msetprod (prime_factorization n) = n" @@ -499,7 +497,7 @@ assumes S_eq: "S = {p. 0 < f p}" and "finite S" and S: "\p\S. prime p" "n = (\p\S. p ^ f p)" - shows "S = prime_factors n \ (\p. is_prime p \ f p = multiplicity p n)" + shows "S = prime_factors n \ (\p. prime p \ f p = multiplicity p n)" using assms by (intro prime_factorization_unique'') auto lemma prime_factorization_unique_int: @@ -507,7 +505,7 @@ assumes S_eq: "S = {p. 0 < f p}" and "finite S" and S: "\p\S. prime p" "abs n = (\p\S. p ^ f p)" - shows "S = prime_factors n \ (\p. is_prime p \ f p = multiplicity p n)" + shows "S = prime_factors n \ (\p. prime p \ f p = multiplicity p n)" using assms by (intro prime_factorization_unique'') auto lemma prime_factors_characterization_nat: @@ -536,23 +534,23 @@ by (rule prime_factors_characterization_int) (auto simp: abs_setprod prime_ge_0_int) lemma multiplicity_characterization_nat: - "S = {p. 0 < f (p::nat)} \ finite S \ \p\S. prime p \ is_prime p \ + "S = {p. 0 < f (p::nat)} \ finite S \ \p\S. prime p \ prime p \ n = (\p\S. p ^ f p) \ multiplicity p n = f p" by (frule prime_factorization_unique_nat [of S f n, THEN conjunct2, rule_format, symmetric]) auto lemma multiplicity_characterization'_nat: "finite {p. 0 < f (p::nat)} \ - (\p. 0 < f p \ prime p) \ is_prime p \ + (\p. 0 < f p \ prime p) \ prime p \ multiplicity p (\p | 0 < f p. p ^ f p) = f p" by (intro impI, rule multiplicity_characterization_nat) auto lemma multiplicity_characterization_int: "S = {p. 0 < f (p::int)} \ - finite S \ \p\S. prime p \ is_prime p \ n = (\p\S. p ^ f p) \ multiplicity p n = f p" + finite S \ \p\S. prime p \ prime p \ n = (\p\S. p ^ f p) \ multiplicity p n = f p" by (frule prime_factorization_unique_int [of S f n, THEN conjunct2, rule_format, symmetric]) (auto simp: abs_setprod power_abs prime_ge_0_int intro!: setprod.cong) lemma multiplicity_characterization'_int [rule_format]: "finite {p. p \ 0 \ 0 < f (p::int)} \ - (\p. 0 < f p \ prime p) \ is_prime p \ + (\p. 0 < f p \ prime p) \ prime p \ multiplicity p (\p | p \ 0 \ 0 < f p. p ^ f p) = f p" by (rule multiplicity_characterization_int) (auto simp: prime_ge_0_int) @@ -561,18 +559,18 @@ lemma multiplicity_eq_nat: fixes x and y::nat - assumes "x > 0" "y > 0" "\p. is_prime p \ multiplicity p x = multiplicity p y" + assumes "x > 0" "y > 0" "\p. prime p \ multiplicity p x = multiplicity p y" shows "x = y" using multiplicity_eq_imp_eq[of x y] assms by simp lemma multiplicity_eq_int: fixes x y :: int - assumes "x > 0" "y > 0" "\p. is_prime p \ multiplicity p x = multiplicity p y" + assumes "x > 0" "y > 0" "\p. prime p \ multiplicity p x = multiplicity p y" shows "x = y" using multiplicity_eq_imp_eq[of x y] assms by simp lemma multiplicity_prod_prime_powers: - assumes "finite S" "\x. x \ S \ is_prime x" "is_prime p" + assumes "finite S" "\x. x \ S \ prime x" "prime p" shows "multiplicity p (\p \ S. p ^ f p) = (if p \ S then f p else 0)" proof - define g where "g = (\x. if x \ S then f x else 0)" @@ -592,7 +590,7 @@ also have "\ = msetprod A" by (auto simp: msetprod_multiplicity count_A set_mset_A intro!: setprod.cong) also from assms have "multiplicity p \ = msetsum (image_mset (multiplicity p) A)" - by (subst prime_multiplicity_msetprod_distrib) (auto dest: prime) + by (subst prime_elem_multiplicity_msetprod_distrib) (auto dest: prime) also from assms have "image_mset (multiplicity p) A = image_mset (\x. if x = p then 1 else 0) A" by (intro image_mset_cong) (auto simp: prime_multiplicity_other dest: prime) also have "msetsum \ = (if p \ S then f p else 0)" by (simp add: msetsum_delta count_A g_def) @@ -600,21 +598,21 @@ qed (* TODO Legacy names *) -lemmas prime_imp_coprime_nat = is_prime_imp_coprime[where ?'a = nat] -lemmas prime_imp_coprime_int = is_prime_imp_coprime[where ?'a = int] -lemmas prime_dvd_mult_nat = is_prime_dvd_mult_iff[where ?'a = nat] -lemmas prime_dvd_mult_int = is_prime_dvd_mult_iff[where ?'a = int] -lemmas prime_dvd_mult_eq_nat = is_prime_dvd_mult_iff[where ?'a = nat] -lemmas prime_dvd_mult_eq_int = is_prime_dvd_mult_iff[where ?'a = int] -lemmas prime_dvd_power_nat = is_prime_dvd_power[where ?'a = nat] -lemmas prime_dvd_power_int = is_prime_dvd_power[where ?'a = int] -lemmas prime_dvd_power_nat_iff = is_prime_dvd_power_iff[where ?'a = nat] -lemmas prime_dvd_power_int_iff = is_prime_dvd_power_iff[where ?'a = int] -lemmas prime_imp_power_coprime_nat = is_prime_imp_power_coprime[where ?'a = nat] -lemmas prime_imp_power_coprime_int = is_prime_imp_power_coprime[where ?'a = int] +lemmas prime_imp_coprime_nat = prime_imp_coprime[where ?'a = nat] +lemmas prime_imp_coprime_int = prime_imp_coprime[where ?'a = int] +lemmas prime_dvd_mult_nat = prime_dvd_mult_iff[where ?'a = nat] +lemmas prime_dvd_mult_int = prime_dvd_mult_iff[where ?'a = int] +lemmas prime_dvd_mult_eq_nat = prime_dvd_mult_iff[where ?'a = nat] +lemmas prime_dvd_mult_eq_int = prime_dvd_mult_iff[where ?'a = int] +lemmas prime_dvd_power_nat = prime_dvd_power[where ?'a = nat] +lemmas prime_dvd_power_int = prime_dvd_power[where ?'a = int] +lemmas prime_dvd_power_nat_iff = prime_dvd_power_iff[where ?'a = nat] +lemmas prime_dvd_power_int_iff = prime_dvd_power_iff[where ?'a = int] +lemmas prime_imp_power_coprime_nat = prime_imp_power_coprime[where ?'a = nat] +lemmas prime_imp_power_coprime_int = prime_imp_power_coprime[where ?'a = int] lemmas primes_coprime_nat = primes_coprime[where ?'a = nat] lemmas primes_coprime_int = primes_coprime[where ?'a = nat] -lemmas prime_divprod_pow_nat = prime_divprod_pow[where ?'a = nat] -lemmas prime_exp = is_prime_elem_power_iff[where ?'a = nat] +lemmas prime_divprod_pow_nat = prime_elem_divprod_pow[where ?'a = nat] +lemmas prime_exp = prime_elem_power_iff[where ?'a = nat] end \ No newline at end of file diff -r 6ddb43c6b711 -r 2accfb71e33b src/HOL/Number_Theory/Residues.thy --- a/src/HOL/Number_Theory/Residues.thy Mon Aug 08 14:13:14 2016 +0200 +++ b/src/HOL/Number_Theory/Residues.thy Mon Aug 08 17:47:51 2016 +0200 @@ -280,7 +280,7 @@ qed then show ?thesis using \2 \ p\ - by (simp add: is_prime_nat_iff) + by (simp add: prime_nat_iff) (metis One_nat_def dvd_pos_nat nat_dvd_not_less nat_neq_iff not_gr0 not_numeral_le_zero one_dvd) qed diff -r 6ddb43c6b711 -r 2accfb71e33b src/HOL/Proofs/Extraction/Euclid.thy --- a/src/HOL/Proofs/Extraction/Euclid.thy Mon Aug 08 14:13:14 2016 +0200 +++ b/src/HOL/Proofs/Extraction/Euclid.thy Mon Aug 08 17:47:51 2016 +0200 @@ -28,7 +28,7 @@ by (induct m) auto lemma prime_eq: "prime (p::nat) \ 1 < p \ (\m. m dvd p \ 1 < m \ m = p)" - apply (simp add: is_prime_nat_iff) + apply (simp add: prime_nat_iff) apply (rule iffI) apply blast apply (erule conjE)