src/HOL/Old_Number_Theory/Primes.thy
changeset 57514 bdc2c6b40bf2
parent 57512 cc97b347b301
child 58740 cb9d84d3e7f2
equal deleted inserted replaced
57513:55b2afc5ddfc 57514:bdc2c6b40bf2
   225 using dab unfolding coprime_bezout
   225 using dab unfolding coprime_bezout
   226 apply clarsimp
   226 apply clarsimp
   227 apply (case_tac "d * x - a * b * y = Suc 0 ", simp_all)
   227 apply (case_tac "d * x - a * b * y = Suc 0 ", simp_all)
   228 apply (rule_tac x="x" in exI)
   228 apply (rule_tac x="x" in exI)
   229 apply (rule_tac x="a*y" in exI)
   229 apply (rule_tac x="a*y" in exI)
   230 apply (simp add: mult_ac)
   230 apply (simp add: ac_simps)
   231 apply (rule_tac x="a*x" in exI)
   231 apply (rule_tac x="a*x" in exI)
   232 apply (rule_tac x="y" in exI)
   232 apply (rule_tac x="y" in exI)
   233 apply (simp add: mult_ac)
   233 apply (simp add: ac_simps)
   234 done
   234 done
   235 
   235 
   236 lemma coprime_rmul2: "coprime d (a * b) \<Longrightarrow> coprime d a"
   236 lemma coprime_rmul2: "coprime d (a * b) \<Longrightarrow> coprime d a"
   237 unfolding coprime_bezout
   237 unfolding coprime_bezout
   238 apply clarsimp
   238 apply clarsimp
   239 apply (case_tac "d * x - a * b * y = Suc 0 ", simp_all)
   239 apply (case_tac "d * x - a * b * y = Suc 0 ", simp_all)
   240 apply (rule_tac x="x" in exI)
   240 apply (rule_tac x="x" in exI)
   241 apply (rule_tac x="b*y" in exI)
   241 apply (rule_tac x="b*y" in exI)
   242 apply (simp add: mult_ac)
   242 apply (simp add: ac_simps)
   243 apply (rule_tac x="b*x" in exI)
   243 apply (rule_tac x="b*x" in exI)
   244 apply (rule_tac x="y" in exI)
   244 apply (rule_tac x="y" in exI)
   245 apply (simp add: mult_ac)
   245 apply (simp add: ac_simps)
   246 done
   246 done
   247 lemma coprime_mul_eq: "coprime d (a * b) \<longleftrightarrow> coprime d a \<and>  coprime d b"
   247 lemma coprime_mul_eq: "coprime d (a * b) \<longleftrightarrow> coprime d a \<and>  coprime d b"
   248   using coprime_rmul2[of d a b] coprime_lmul2[of d a b] coprime_mul[of d a b] 
   248   using coprime_rmul2[of d a b] coprime_lmul2[of d a b] coprime_mul[of d a b] 
   249   by blast
   249   by blast
   250 
   250 
   286       apply simp
   286       apply simp
   287       done }
   287       done }
   288   moreover
   288   moreover
   289   {assume z: "?g \<noteq> 0"
   289   {assume z: "?g \<noteq> 0"
   290     from gcd_dvd1[of a b] gcd_dvd2[of a b] obtain a' b' where
   290     from gcd_dvd1[of a b] gcd_dvd2[of a b] obtain a' b' where
   291       ab': "a = a'*?g" "b = b'*?g" unfolding dvd_def by (auto simp add: mult_ac)
   291       ab': "a = a'*?g" "b = b'*?g" unfolding dvd_def by (auto simp add: ac_simps)
   292     hence ab'': "?g*a' = a" "?g * b' = b" by algebra+
   292     hence ab'': "?g*a' = a" "?g * b' = b" by algebra+
   293     from coprime_exp_imp[OF gcd_coprime[OF z ab'], unfolded coprime_bezout, of n]
   293     from coprime_exp_imp[OF gcd_coprime[OF z ab'], unfolded coprime_bezout, of n]
   294     obtain x y where "a'^n * x - b'^n * y = 1 \<or> b'^n * x - a'^n * y = 1"  by blast
   294     obtain x y where "a'^n * x - b'^n * y = 1 \<or> b'^n * x - a'^n * y = 1"  by blast
   295     hence "?g^n * (a'^n * x - b'^n * y) = ?g^n \<or> ?g^n*(b'^n * x - a'^n * y) = ?g^n"
   295     hence "?g^n * (a'^n * x - b'^n * y) = ?g^n \<or> ?g^n*(b'^n * x - a'^n * y) = ?g^n"
   296       using z by auto 
   296       using z by auto