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 |