equal
deleted
inserted
replaced
213 also have "{1..n} = (\<Union>d\<in>{d. d dvd n}. A d)" by safe (auto simp: A_def) |
213 also have "{1..n} = (\<Union>d\<in>{d. d dvd n}. A d)" by safe (auto simp: A_def) |
214 also have "card \<dots> = (\<Sum>d | d dvd n. card (A d))" |
214 also have "card \<dots> = (\<Sum>d | d dvd n. card (A d))" |
215 using \<open>n > 0\<close> by (intro card_UN_disjoint) (auto simp: A_def) |
215 using \<open>n > 0\<close> by (intro card_UN_disjoint) (auto simp: A_def) |
216 also have "\<dots> = (\<Sum>d | d dvd n. totient (n div d))" by (intro sum.cong refl *) auto |
216 also have "\<dots> = (\<Sum>d | d dvd n. totient (n div d))" by (intro sum.cong refl *) auto |
217 also have "\<dots> = (\<Sum>d | d dvd n. totient d)" using \<open>n > 0\<close> |
217 also have "\<dots> = (\<Sum>d | d dvd n. totient d)" using \<open>n > 0\<close> |
218 by (intro sum.reindex_bij_witness[of _ "op div n" "op div n"]) (auto elim: dvdE) |
218 by (intro sum.reindex_bij_witness[of _ "(div) n" "(div) n"]) (auto elim: dvdE) |
219 finally show ?thesis .. |
219 finally show ?thesis .. |
220 qed auto |
220 qed auto |
221 |
221 |
222 lemma totient_mult_coprime: |
222 lemma totient_mult_coprime: |
223 assumes "coprime m n" |
223 assumes "coprime m n" |
237 |
237 |
238 lemma totient_prime_power_Suc: |
238 lemma totient_prime_power_Suc: |
239 assumes "prime p" |
239 assumes "prime p" |
240 shows "totient (p ^ Suc n) = p ^ n * (p - 1)" |
240 shows "totient (p ^ Suc n) = p ^ n * (p - 1)" |
241 proof - |
241 proof - |
242 from assms have "totient (p ^ Suc n) = card ({0<..p ^ Suc n} - op * p ` {0<..p ^ n})" |
242 from assms have "totient (p ^ Suc n) = card ({0<..p ^ Suc n} - ( * ) p ` {0<..p ^ n})" |
243 unfolding totient_def by (subst totatives_prime_power_Suc) simp_all |
243 unfolding totient_def by (subst totatives_prime_power_Suc) simp_all |
244 also from assms have "\<dots> = p ^ Suc n - card (op * p ` {0<..p^n})" |
244 also from assms have "\<dots> = p ^ Suc n - card (( * ) p ` {0<..p^n})" |
245 by (subst card_Diff_subset) (auto intro: prime_gt_0_nat) |
245 by (subst card_Diff_subset) (auto intro: prime_gt_0_nat) |
246 also from assms have "card (op * p ` {0<..p^n}) = p ^ n" |
246 also from assms have "card (( * ) p ` {0<..p^n}) = p ^ n" |
247 by (subst card_image) (auto simp: inj_on_def) |
247 by (subst card_image) (auto simp: inj_on_def) |
248 also have "p ^ Suc n - p ^ n = p ^ n * (p - 1)" by (simp add: algebra_simps) |
248 also have "p ^ Suc n - p ^ n = p ^ n * (p - 1)" by (simp add: algebra_simps) |
249 finally show ?thesis . |
249 finally show ?thesis . |
250 qed |
250 qed |
251 |
251 |