@@ -28,19 +28,14 @@ namespace Rat
2828
2929variable {a b c p q : ℚ}
3030
31- @[simp] lemma mkRat_nonneg {a : ℤ} (ha : 0 ≤ a) (b : ℕ) : 0 ≤ mkRat a b := by
32- simpa using divInt_nonneg ha ( Int.natCast_nonneg _)
31+ @[simp] lemma mkRat_nonneg {a : ℤ} (ha : 0 ≤ a) (b : ℕ) : 0 ≤ mkRat a b :=
32+ divInt_nonneg ha <| Int.natCast_nonneg _
3333
34- theorem ofScientific_nonneg (m : ℕ) (s : Bool) (e : ℕ) :
35- 0 ≤ Rat.ofScientific m s e := by
34+ theorem ofScientific_nonneg (m : ℕ) (s : Bool) (e : ℕ) : 0 ≤ Rat.ofScientific m s e := by
3635 rw [Rat.ofScientific]
3736 cases s
38- · rw [if_neg (by decide)]
39- refine num_nonneg.mp ?_
40- rw [num_natCast]
41- exact Int.natCast_nonneg _
42- · rw [if_pos rfl, normalize_eq_mkRat]
43- exact Rat.mkRat_nonneg (Int.natCast_nonneg _) _
37+ · exact num_nonneg.mp <| Int.natCast_nonneg _
38+ · grind [normalize_eq_mkRat, Rat.mkRat_nonneg]
4439
4540instance _root_.NNRatCast.toOfScientific {K} [NNRatCast K] : OfScientific K where
4641 ofScientific (m : ℕ) (b : Bool) (d : ℕ) :=
@@ -58,7 +53,7 @@ protected lemma divInt_le_divInt {a b c d : ℤ} (b0 : 0 < b) (d0 : 0 < d) :
5853 simp [sub_eq_add_neg, ne_of_gt b0, ne_of_gt d0, Int.mul_pos d0 b0]
5954
6055protected lemma lt_iff_le_not_ge (a b : ℚ) : a < b ↔ a ≤ b ∧ ¬b ≤ a := by
61- rw [← Rat.not_le, and_iff_right_of_imp Rat.le_total.resolve_left]
56+ grind
6257
6358instance linearOrder : LinearOrder ℚ where
6459 le_refl _ := Rat.le_refl
@@ -74,21 +69,21 @@ theorem mkRat_nonneg_iff (a : ℤ) {b : ℕ} (hb : b ≠ 0) : 0 ≤ mkRat a b
7469 divInt_nonneg_iff_of_pos_right (show 0 < (b : ℤ) by simpa using Nat.pos_of_ne_zero hb)
7570
7671theorem mkRat_pos_iff (a : ℤ) {b : ℕ} (hb : b ≠ 0 ) : 0 < mkRat a b ↔ 0 < a := by
77- grind [lt_iff_le_and_ne, mkRat_nonneg_iff, Rat.mkRat_eq_zero]
72+ grind [mkRat_nonneg_iff, Rat.mkRat_eq_zero]
7873
7974theorem mkRat_pos {a : ℤ} (ha : 0 < a) {b : ℕ} (hb : b ≠ 0 ) : 0 < mkRat a b :=
8075 (mkRat_pos_iff a hb).mpr ha
8176
8277theorem mkRat_nonpos_iff (a : ℤ) {b : ℕ} (hb : b ≠ 0 ) : mkRat a b ≤ 0 ↔ a ≤ 0 := by
83- grind [lt_iff_not_ge, mkRat_pos_iff]
78+ grind [mkRat_pos_iff]
8479
8580theorem mkRat_nonpos {a : ℤ} (ha : a ≤ 0 ) (b : ℕ) : mkRat a b ≤ 0 := by
8681 obtain rfl | hb := eq_or_ne b 0
8782 · simp
8883 · exact (mkRat_nonpos_iff a hb).mpr ha
8984
9085theorem mkRat_neg_iff (a : ℤ) {b : ℕ} (hb : b ≠ 0 ) : mkRat a b < 0 ↔ a < 0 := by
91- grind [lt_iff_not_ge, mkRat_nonneg_iff]
86+ grind [mkRat_nonneg_iff]
9287
9388theorem mkRat_neg {a : ℤ} (ha : a < 0 ) {b : ℕ} (hb : b ≠ 0 ) : mkRat a b < 0 :=
9489 (mkRat_neg_iff a hb).mpr ha
@@ -125,21 +120,11 @@ instance : AddLeftMono ℚ where
125120theorem div_lt_div_iff_mul_lt_mul {a b c d : ℤ} (b_pos : 0 < b) (d_pos : 0 < d) :
126121 (a : ℚ) / b < c / d ↔ a * d < c * b := by
127122 simp only [lt_iff_le_not_ge]
128- apply and_congr
129- · simp [div_def', Rat.divInt_le_divInt b_pos d_pos]
130- · simp [div_def', Rat.divInt_le_divInt d_pos b_pos]
123+ simp [*, div_def', Rat.divInt_le_divInt]
131124
132125theorem lt_one_iff_num_lt_denom {q : ℚ} : q < 1 ↔ q.num < q.den := by simp [Rat.lt_iff]
133126
134127theorem abs_def (q : ℚ) : |q| = q.num.natAbs /. q.den := by
135- rcases le_total q 0 with hq | hq
136- · rw [abs_of_nonpos hq]
137- rw [← num_divInt_den q, ← zero_divInt, Rat.divInt_le_divInt (mod_cast q.pos) Int.zero_lt_one,
138- mul_one, zero_mul] at hq
139- rw [Int.ofNat_natAbs_of_nonpos hq, ← neg_def]
140- · rw [abs_of_nonneg hq]
141- rw [← num_divInt_den q, ← zero_divInt, Rat.divInt_le_divInt Int.zero_lt_one (mod_cast q.pos),
142- mul_one, zero_mul] at hq
143- rw [Int.natAbs_of_nonneg hq, num_divInt_den]
128+ grind [abs_of_nonpos, neg_def, Rat.num_nonneg, abs_of_nonneg, num_divInt_den]
144129
145130end Rat
0 commit comments