278 by (auto simp add: normalize_def Let_def dvd_div_div_eq_mult mult.commute sgn_times split: if_splits intro: aux) |
278 by (auto simp add: normalize_def Let_def dvd_div_div_eq_mult mult.commute sgn_times split: if_splits intro: aux) |
279 qed |
279 qed |
280 |
280 |
281 lemma normalize_eq: "normalize (a, b) = (p, q) \<Longrightarrow> Fract p q = Fract a b" |
281 lemma normalize_eq: "normalize (a, b) = (p, q) \<Longrightarrow> Fract p q = Fract a b" |
282 by (auto simp add: normalize_def Let_def Fract_coprime dvd_div_neg rat_number_collapse |
282 by (auto simp add: normalize_def Let_def Fract_coprime dvd_div_neg rat_number_collapse |
283 split:split_if_asm) |
283 split:if_split_asm) |
284 |
284 |
285 lemma normalize_denom_pos: "normalize r = (p, q) \<Longrightarrow> q > 0" |
285 lemma normalize_denom_pos: "normalize r = (p, q) \<Longrightarrow> q > 0" |
286 by (auto simp add: normalize_def Let_def dvd_div_neg pos_imp_zdiv_neg_iff nonneg1_imp_zdiv_pos_iff |
286 by (auto simp add: normalize_def Let_def dvd_div_neg pos_imp_zdiv_neg_iff nonneg1_imp_zdiv_pos_iff |
287 split:split_if_asm) |
287 split:if_split_asm) |
288 |
288 |
289 lemma normalize_coprime: "normalize r = (p, q) \<Longrightarrow> coprime p q" |
289 lemma normalize_coprime: "normalize r = (p, q) \<Longrightarrow> coprime p q" |
290 by (auto simp add: normalize_def Let_def dvd_div_neg div_gcd_coprime |
290 by (auto simp add: normalize_def Let_def dvd_div_neg div_gcd_coprime |
291 split:split_if_asm) |
291 split:if_split_asm) |
292 |
292 |
293 lemma normalize_stable [simp]: |
293 lemma normalize_stable [simp]: |
294 "q > 0 \<Longrightarrow> coprime p q \<Longrightarrow> normalize (p, q) = (p, q)" |
294 "q > 0 \<Longrightarrow> coprime p q \<Longrightarrow> normalize (p, q) = (p, q)" |
295 by (simp add: normalize_def) |
295 by (simp add: normalize_def) |
296 |
296 |