Theorem: LiouvilleWith.add_rat
File: Mathlib/NumberTheory/Liouville/LiouvilleWith.lean

tactic: rcases h.exists_pos with ⟨C, _hC₀, hC⟩
state_before: p q x y : ℝ
r✝ : ℚ
m : ℤ
n : ℕ
h : LiouvilleWith p x
r : ℚ
⊢ LiouvilleWith p (x + ↑r)

tactic: refine ⟨r.den ^ p * C, (tendsto_id.nsmul_atTop r.pos).frequently (hC.mono ?_)⟩
state_before: case intro.intro
p q x y : ℝ
r✝ : ℚ
m : ℤ
n : ℕ
h : LiouvilleWith p x
r : ℚ
C : ℝ
_hC₀ : 0 < C
hC : ∃ᶠ (n : ℕ) in atTop, 1 ≤ n ∧ ∃ m, x ≠ ↑m / ↑n ∧ abs (x - ↑m / ↑n) < C / ↑n ^ p
⊢ LiouvilleWith p (x + ↑r)

tactic: rintro n ⟨hn, m, hne, hlt⟩
state_before: case intro.intro
p q x y : ℝ
r✝ : ℚ
m : ℤ
n : ℕ
h : LiouvilleWith p x
r : ℚ
C : ℝ
_hC₀ : 0 < C
hC : ∃ᶠ (n : ℕ) in atTop, 1 ≤ n ∧ ∃ m, x ≠ ↑m / ↑n ∧ abs (x - ↑m / ↑n) < C / ↑n ^ p
⊢ ∀ (x_1 : ℕ),
    (1 ≤ x_1 ∧ ∃ m, x ≠ ↑m / ↑x_1 ∧ abs (x - ↑m / ↑x_1) < C / ↑x_1 ^ p) →
      ∃ m,
        x + ↑r ≠ ↑m / ↑(r.den • id x_1) ∧ abs (x + ↑r - ↑m / ↑(r.den • id x_1)) < ↑r.den ^ p * C / ↑(r.den • id x_1) ^ p

tactic: have hr : (0 : ℝ) < r.den := Nat.cast_pos.2 r.pos
state_before: case intro.intro.intro.intro.intro
p q x y : ℝ
r✝ : ℚ
m✝ : ℤ
n✝ : ℕ
h : LiouvilleWith p x
r : ℚ
C : ℝ
_hC₀ : 0 < C
hC : ∃ᶠ (n : ℕ) in atTop, 1 ≤ n ∧ ∃ m, x ≠ ↑m / ↑n ∧ abs (x - ↑m / ↑n) < C / ↑n ^ p
n : ℕ
hn : 1 ≤ n
m : ℤ
hne : x ≠ ↑m / ↑n
hlt : abs (x - ↑m / ↑n) < C / ↑n ^ p
⊢ ∃ m, x + ↑r ≠ ↑m / ↑(r.den • id n) ∧ abs (x + ↑r - ↑m / ↑(r.den • id n)) < ↑r.den ^ p * C / ↑(r.den • id n) ^ p

tactic: have hn' : (n : ℝ) ≠ 0 := Nat.cast_ne_zero.2 (zero_lt_one.trans_le hn).ne'
state_before: case intro.intro.intro.intro.intro
p q x y : ℝ
r✝ : ℚ
m✝ : ℤ
n✝ : ℕ
h : LiouvilleWith p x
r : ℚ
C : ℝ
_hC₀ : 0 < C
hC : ∃ᶠ (n : ℕ) in atTop, 1 ≤ n ∧ ∃ m, x ≠ ↑m / ↑n ∧ abs (x - ↑m / ↑n) < C / ↑n ^ p
n : ℕ
hn : 1 ≤ n
m : ℤ
hne : x ≠ ↑m / ↑n
hlt : abs (x - ↑m / ↑n) < C / ↑n ^ p
hr : 0 < ↑r.den
⊢ ∃ m, x + ↑r ≠ ↑m / ↑(r.den • id n) ∧ abs (x + ↑r - ↑m / ↑(r.den • id n)) < ↑r.den ^ p * C / ↑(r.den • id n) ^ p

tactic: have : (↑(r.den * m + r.num * n : ℤ) / ↑(r.den • id n) : ℝ) = m / n + r := by
  rw [Algebra.id.smul_eq_mul, id.def]
  nth_rewrite 4 [← Rat.num_div_den r]
  push_cast
  rw [add_div, mul_div_mul_left _ _ (ne_of_gt hr), mul_div_mul_right _ _ hn']
state_before: case intro.intro.intro.intro.intro
p q x y : ℝ
r✝ : ℚ
m✝ : ℤ
n✝ : ℕ
h : LiouvilleWith p x
r : ℚ
C : ℝ
_hC₀ : 0 < C
hC : ∃ᶠ (n : ℕ) in atTop, 1 ≤ n ∧ ∃ m, x ≠ ↑m / ↑n ∧ abs (x - ↑m / ↑n) < C / ↑n ^ p
n : ℕ
hn : 1 ≤ n
m : ℤ
hne : x ≠ ↑m / ↑n
hlt : abs (x - ↑m / ↑n) < C / ↑n ^ p
hr : 0 < ↑r.den
hn' : ↑n ≠ 0
⊢ ∃ m, x + ↑r ≠ ↑m / ↑(r.den • id n) ∧ abs (x + ↑r - ↑m / ↑(r.den • id n)) < ↑r.den ^ p * C / ↑(r.den • id n) ^ p

tactic: refine ⟨r.den * m + r.num * n, ?_⟩
state_before: case intro.intro.intro.intro.intro
p q x y : ℝ
r✝ : ℚ
m✝ : ℤ
n✝ : ℕ
h : LiouvilleWith p x
r : ℚ
C : ℝ
_hC₀ : 0 < C
hC : ∃ᶠ (n : ℕ) in atTop, 1 ≤ n ∧ ∃ m, x ≠ ↑m / ↑n ∧ abs (x - ↑m / ↑n) < C / ↑n ^ p
n : ℕ
hn : 1 ≤ n
m : ℤ
hne : x ≠ ↑m / ↑n
hlt : abs (x - ↑m / ↑n) < C / ↑n ^ p
hr : 0 < ↑r.den
hn' : ↑n ≠ 0
this : ↑(↑r.den * m + r.num * ↑n) / ↑(r.den • id n) = ↑m / ↑n + ↑r
⊢ ∃ m, x + ↑r ≠ ↑m / ↑(r.den • id n) ∧ abs (x + ↑r - ↑m / ↑(r.den • id n)) < ↑r.den ^ p * C / ↑(r.den • id n) ^ p

tactic: rw [this, add_sub_add_right_eq_sub]
state_before: case intro.intro.intro.intro.intro
p q x y : ℝ
r✝ : ℚ
m✝ : ℤ
n✝ : ℕ
h : LiouvilleWith p x
r : ℚ
C : ℝ
_hC₀ : 0 < C
hC : ∃ᶠ (n : ℕ) in atTop, 1 ≤ n ∧ ∃ m, x ≠ ↑m / ↑n ∧ abs (x - ↑m / ↑n) < C / ↑n ^ p
n : ℕ
hn : 1 ≤ n
m : ℤ
hne : x ≠ ↑m / ↑n
hlt : abs (x - ↑m / ↑n) < C / ↑n ^ p
hr : 0 < ↑r.den
hn' : ↑n ≠ 0
this : ↑(↑r.den * m + r.num * ↑n) / ↑(r.den • id n) = ↑m / ↑n + ↑r
⊢ x + ↑r ≠ ↑(↑r.den * m + r.num * ↑n) / ↑(r.den • id n) ∧
    abs (x + ↑r - ↑(↑r.den * m + r.num * ↑n) / ↑(r.den • id n)) < ↑r.den ^ p * C / ↑(r.den • id n) ^ p

tactic: refine ⟨by simpa, hlt.trans_le (le_of_eq ?_)⟩
state_before: case intro.intro.intro.intro.intro
p q x y : ℝ
r✝ : ℚ
m✝ : ℤ
n✝ : ℕ
h : LiouvilleWith p x
r : ℚ
C : ℝ
_hC₀ : 0 < C
hC : ∃ᶠ (n : ℕ) in atTop, 1 ≤ n ∧ ∃ m, x ≠ ↑m / ↑n ∧ abs (x - ↑m / ↑n) < C / ↑n ^ p
n : ℕ
hn : 1 ≤ n
m : ℤ
hne : x ≠ ↑m / ↑n
hlt : abs (x - ↑m / ↑n) < C / ↑n ^ p
hr : 0 < ↑r.den
hn' : ↑n ≠ 0
this : ↑(↑r.den * m + r.num * ↑n) / ↑(r.den • id n) = ↑m / ↑n + ↑r
⊢ x + ↑r ≠ ↑m / ↑n + ↑r ∧ abs (x - ↑m / ↑n) < ↑r.den ^ p * C / ↑(r.den • id n) ^ p

tactic: have : (r.den ^ p : ℝ) ≠ 0 := (rpow_pos_of_pos hr _).ne'
state_before: case intro.intro.intro.intro.intro
p q x y : ℝ
r✝ : ℚ
m✝ : ℤ
n✝ : ℕ
h : LiouvilleWith p x
r : ℚ
C : ℝ
_hC₀ : 0 < C
hC : ∃ᶠ (n : ℕ) in atTop, 1 ≤ n ∧ ∃ m, x ≠ ↑m / ↑n ∧ abs (x - ↑m / ↑n) < C / ↑n ^ p
n : ℕ
hn : 1 ≤ n
m : ℤ
hne : x ≠ ↑m / ↑n
hlt : abs (x - ↑m / ↑n) < C / ↑n ^ p
hr : 0 < ↑r.den
hn' : ↑n ≠ 0
this : ↑(↑r.den * m + r.num * ↑n) / ↑(r.den • id n) = ↑m / ↑n + ↑r
⊢ C / ↑n ^ p = ↑r.den ^ p * C / ↑(r.den • id n) ^ p

tactic: simp [mul_rpow, Nat.cast_nonneg, mul_div_mul_left, this]
state_before: case intro.intro.intro.intro.intro
p q x y : ℝ
r✝ : ℚ
m✝ : ℤ
n✝ : ℕ
h : LiouvilleWith p x
r : ℚ
C : ℝ
_hC₀ : 0 < C
hC : ∃ᶠ (n : ℕ) in atTop, 1 ≤ n ∧ ∃ m, x ≠ ↑m / ↑n ∧ abs (x - ↑m / ↑n) < C / ↑n ^ p
n : ℕ
hn : 1 ≤ n
m : ℤ
hne : x ≠ ↑m / ↑n
hlt : abs (x - ↑m / ↑n) < C / ↑n ^ p
hr : 0 < ↑r.den
hn' : ↑n ≠ 0
this✝ : ↑(↑r.den * m + r.num * ↑n) / ↑(r.den • id n) = ↑m / ↑n + ↑r
this : ↑r.den ^ p ≠ 0
⊢ C / ↑n ^ p = ↑r.den ^ p * C / ↑(r.den • id n) ^ p

tactic: rw [Algebra.id.smul_eq_mul, id.def]
state_before: p q x y : ℝ
r✝ : ℚ
m✝ : ℤ
n✝ : ℕ
h : LiouvilleWith p x
r : ℚ
C : ℝ
_hC₀ : 0 < C
hC : ∃ᶠ (n : ℕ) in atTop, 1 ≤ n ∧ ∃ m, x ≠ ↑m / ↑n ∧ abs (x - ↑m / ↑n) < C / ↑n ^ p
n : ℕ
hn : 1 ≤ n
m : ℤ
hne : x ≠ ↑m / ↑n
hlt : abs (x - ↑m / ↑n) < C / ↑n ^ p
hr : 0 < ↑r.den
hn' : ↑n ≠ 0
⊢ ↑(↑r.den * m + r.num * ↑n) / ↑(r.den • id n) = ↑m / ↑n + ↑r

tactic: nth_rewrite 4 [← Rat.num_div_den r]
state_before: p q x y : ℝ
r✝ : ℚ
m✝ : ℤ
n✝ : ℕ
h : LiouvilleWith p x
r : ℚ
C : ℝ
_hC₀ : 0 < C
hC : ∃ᶠ (n : ℕ) in atTop, 1 ≤ n ∧ ∃ m, x ≠ ↑m / ↑n ∧ abs (x - ↑m / ↑n) < C / ↑n ^ p
n : ℕ
hn : 1 ≤ n
m : ℤ
hne : x ≠ ↑m / ↑n
hlt : abs (x - ↑m / ↑n) < C / ↑n ^ p
hr : 0 < ↑r.den
hn' : ↑n ≠ 0
⊢ ↑(↑r.den * m + r.num * ↑n) / ↑(r.den * n) = ↑m / ↑n + ↑r

tactic: push_cast
state_before: p q x y : ℝ
r✝ : ℚ
m✝ : ℤ
n✝ : ℕ
h : LiouvilleWith p x
r : ℚ
C : ℝ
_hC₀ : 0 < C
hC : ∃ᶠ (n : ℕ) in atTop, 1 ≤ n ∧ ∃ m, x ≠ ↑m / ↑n ∧ abs (x - ↑m / ↑n) < C / ↑n ^ p
n : ℕ
hn : 1 ≤ n
m : ℤ
hne : x ≠ ↑m / ↑n
hlt : abs (x - ↑m / ↑n) < C / ↑n ^ p
hr : 0 < ↑r.den
hn' : ↑n ≠ 0
⊢ ↑(↑r.den * m + r.num * ↑n) / ↑(r.den * n) = ↑m / ↑n + ↑(↑r.num / ↑r.den)

tactic: rw [add_div, mul_div_mul_left _ _ (ne_of_gt hr), mul_div_mul_right _ _ hn']
state_before: p q x y : ℝ
r✝ : ℚ
m✝ : ℤ
n✝ : ℕ
h : LiouvilleWith p x
r : ℚ
C : ℝ
_hC₀ : 0 < C
hC : ∃ᶠ (n : ℕ) in atTop, 1 ≤ n ∧ ∃ m, x ≠ ↑m / ↑n ∧ abs (x - ↑m / ↑n) < C / ↑n ^ p
n : ℕ
hn : 1 ≤ n
m : ℤ
hne : x ≠ ↑m / ↑n
hlt : abs (x - ↑m / ↑n) < C / ↑n ^ p
hr : 0 < ↑r.den
hn' : ↑n ≠ 0
⊢ (↑r.den * ↑m + ↑r.num * ↑n) / (↑r.den * ↑n) = ↑m / ↑n + ↑r.num / ↑r.den

tactic: simpa
state_before: p q x y : ℝ
r✝ : ℚ
m✝ : ℤ
n✝ : ℕ
h : LiouvilleWith p x
r : ℚ
C : ℝ
_hC₀ : 0 < C
hC : ∃ᶠ (n : ℕ) in atTop, 1 ≤ n ∧ ∃ m, x ≠ ↑m / ↑n ∧ abs (x - ↑m / ↑n) < C / ↑n ^ p
n : ℕ
hn : 1 ≤ n
m : ℤ
hne : x ≠ ↑m / ↑n
hlt : abs (x - ↑m / ↑n) < C / ↑n ^ p
hr : 0 < ↑r.den
hn' : ↑n ≠ 0
this : ↑(↑r.den * m + r.num * ↑n) / ↑(r.den • id n) = ↑m / ↑n + ↑r
⊢ x + ↑r ≠ ↑m / ↑n + ↑r