equal
deleted
inserted
replaced
637 moreover from gcd_greatest [OF dvdgg'] have "?g * ?g' dvd ?g" . |
637 moreover from gcd_greatest [OF dvdgg'] have "?g * ?g' dvd ?g" . |
638 ultimately show ?thesis |
638 ultimately show ?thesis |
639 using dvd_times_left_cancel_iff [of "gcd a b" _ 1] by simp |
639 using dvd_times_left_cancel_iff [of "gcd a b" _ 1] by simp |
640 qed |
640 qed |
641 |
641 |
642 |
|
643 lemma divides_mult: |
642 lemma divides_mult: |
644 assumes "a dvd c" and nr: "b dvd c" and "coprime a b" |
643 assumes "a dvd c" and nr: "b dvd c" and "coprime a b" |
645 shows "a * b dvd c" |
644 shows "a * b dvd c" |
646 proof - |
645 proof - |
647 from \<open>b dvd c\<close> obtain b' where"c = b * b'" .. |
646 from \<open>b dvd c\<close> obtain b' where"c = b * b'" .. |
692 done |
691 done |
693 |
692 |
694 lemma coprime_mul_eq: "gcd d (a * b) = 1 \<longleftrightarrow> gcd d a = 1 \<and> gcd d b = 1" |
693 lemma coprime_mul_eq: "gcd d (a * b) = 1 \<longleftrightarrow> gcd d a = 1 \<and> gcd d b = 1" |
695 using coprime_rmult[of d a b] coprime_lmult[of d a b] coprime_mult[of d a b] |
694 using coprime_rmult[of d a b] coprime_lmult[of d a b] coprime_mult[of d a b] |
696 by blast |
695 by blast |
|
696 |
|
697 lemma coprime_mul_eq': |
|
698 "coprime (a * b) d \<longleftrightarrow> coprime a d \<and> coprime b d" |
|
699 using coprime_mul_eq [of d a b] by (simp add: gcd.commute) |
697 |
700 |
698 lemma gcd_coprime: |
701 lemma gcd_coprime: |
699 assumes c: "gcd a b \<noteq> 0" |
702 assumes c: "gcd a b \<noteq> 0" |
700 and a: "a = a' * gcd a b" |
703 and a: "a = a' * gcd a b" |
701 and b: "b = b' * gcd a b" |
704 and b: "b = b' * gcd a b" |
955 hence "p dvd b * gcd a p" by (simp add: gcd_mult_distrib) |
958 hence "p dvd b * gcd a p" by (simp add: gcd_mult_distrib) |
956 with False have "y dvd b" |
959 with False have "y dvd b" |
957 by (simp add: x_def y_def div_dvd_iff_mult assms) |
960 by (simp add: x_def y_def div_dvd_iff_mult assms) |
958 ultimately show ?thesis by (rule that) |
961 ultimately show ?thesis by (rule that) |
959 qed |
962 qed |
|
963 |
|
964 lemma coprime_crossproduct': |
|
965 fixes a b c d |
|
966 assumes "b \<noteq> 0" |
|
967 assumes unit_factors: "unit_factor b = unit_factor d" |
|
968 assumes coprime: "coprime a b" "coprime c d" |
|
969 shows "a * d = b * c \<longleftrightarrow> a = c \<and> b = d" |
|
970 proof safe |
|
971 assume eq: "a * d = b * c" |
|
972 hence "normalize a * normalize d = normalize c * normalize b" |
|
973 by (simp only: normalize_mult [symmetric] mult_ac) |
|
974 with coprime have "normalize b = normalize d" |
|
975 by (subst (asm) coprime_crossproduct) simp_all |
|
976 from this and unit_factors show "b = d" |
|
977 by (rule normalize_unit_factor_eqI) |
|
978 from eq have "a * d = c * d" by (simp only: \<open>b = d\<close> mult_ac) |
|
979 with \<open>b \<noteq> 0\<close> \<open>b = d\<close> show "a = c" by simp |
|
980 qed (simp_all add: mult_ac) |
960 |
981 |
961 end |
982 end |
962 |
983 |
963 class ring_gcd = comm_ring_1 + semiring_gcd |
984 class ring_gcd = comm_ring_1 + semiring_gcd |
964 begin |
985 begin |