src/HOL/Number_Theory/Totient.thy
changeset 67399 eab6ce8368fa
parent 67118 ccab07d1196c
child 69064 5840724b1d71
equal deleted inserted replaced
67398:5eb932e604a2 67399:eab6ce8368fa
   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