1198 using dvd1 dvd2 by (rule poly_gcd_greatest) |
1198 using dvd1 dvd2 by (rule poly_gcd_greatest) |
1199 ultimately show ?thesis |
1199 ultimately show ?thesis |
1200 by (rule poly_dvd_antisym) |
1200 by (rule poly_dvd_antisym) |
1201 qed |
1201 qed |
1202 |
1202 |
1203 lemma poly_gcd_commute: "poly_gcd x y = poly_gcd y x" |
1203 interpretation poly_gcd!: abel_semigroup poly_gcd |
1204 by (rule poly_gcd_unique) (simp_all add: poly_gcd_monic) |
1204 proof |
1205 |
1205 fix x y z :: "'a poly" |
1206 lemma poly_gcd_assoc: "poly_gcd (poly_gcd x y) z = poly_gcd x (poly_gcd y z)" |
1206 show "poly_gcd (poly_gcd x y) z = poly_gcd x (poly_gcd y z)" |
1207 by (rule poly_gcd_unique) (auto intro: dvd_trans simp add: poly_gcd_monic) |
1207 by (rule poly_gcd_unique) (auto intro: dvd_trans simp add: poly_gcd_monic) |
1208 |
1208 show "poly_gcd x y = poly_gcd y x" |
1209 lemmas poly_gcd_left_commute = |
1209 by (rule poly_gcd_unique) (simp_all add: poly_gcd_monic) |
1210 mk_left_commute [where f=poly_gcd, OF poly_gcd_assoc poly_gcd_commute] |
1210 qed |
|
1211 |
|
1212 lemmas poly_gcd_assoc = poly_gcd.assoc |
|
1213 lemmas poly_gcd_commute = poly_gcd.commute |
|
1214 lemmas poly_gcd_left_commute = poly_gcd.left_commute |
1211 |
1215 |
1212 lemmas poly_gcd_ac = poly_gcd_assoc poly_gcd_commute poly_gcd_left_commute |
1216 lemmas poly_gcd_ac = poly_gcd_assoc poly_gcd_commute poly_gcd_left_commute |
1213 |
1217 |
1214 lemma poly_gcd_1_left [simp]: "poly_gcd 1 y = 1" |
1218 lemma poly_gcd_1_left [simp]: "poly_gcd 1 y = 1" |
1215 by (rule poly_gcd_unique) simp_all |
1219 by (rule poly_gcd_unique) simp_all |