Theorem: Real.exists_rat_eq_convergent
File: Mathlib/NumberTheory/DiophantineApproximation.lean

tactic: refine q.num_div_den ▸ exists_rat_eq_convergent' ⟨?_, fun hd => ?_, ?_⟩
state_before: ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑q| < 1 / (2 * ↑q.den ^ 2)
⊢ ∃ n, q = ξ.convergent n
state_after: case refine_1
ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑q| < 1 / (2 * ↑q.den ^ 2)
⊢ IsCoprime q.num ↑q.den

case refine_2
ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑q| < 1 / (2 * ↑q.den ^ 2)
hd : ↑q.den = 1
⊢ -(1 / 2) < ξ - ↑q.num

case refine_3
ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑q| < 1 / (2 * ↑q.den ^ 2)
⊢ |ξ - ↑q.num / ↑↑q.den| < (↑↑q.den * (2 * ↑↑q.den - 1))⁻¹

tactic: exact coprime_iff_nat_coprime.mpr (natAbs_ofNat q.den ▸ q.reduced)
state_before: case refine_1
ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑q| < 1 / (2 * ↑q.den ^ 2)
⊢ IsCoprime q.num ↑q.den
state_after: no goals

tactic: rw [← q.den_eq_one_iff.mp (Nat.cast_eq_one.mp hd)] at h
state_before: case refine_2
ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑q| < 1 / (2 * ↑q.den ^ 2)
hd : ↑q.den = 1
⊢ -(1 / 2) < ξ - ↑q.num
state_after: case refine_2
ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑↑q.num| < 1 / (2 * ↑(↑q.num).den ^ 2)
hd : ↑q.den = 1
⊢ -(1 / 2) < ξ - ↑q.num

tactic: simpa only [Rat.den_intCast, Nat.cast_one, one_pow, mul_one] using (abs_lt.mp h).1
state_before: case refine_2
ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑↑q.num| < 1 / (2 * ↑(↑q.num).den ^ 2)
hd : ↑q.den = 1
⊢ -(1 / 2) < ξ - ↑q.num
state_after: no goals

tactic: obtain ⟨hq₀, hq₁⟩ := aux₀ (Nat.cast_pos.mpr q.pos)
state_before: case refine_3
ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑q| < 1 / (2 * ↑q.den ^ 2)
⊢ |ξ - ↑q.num / ↑↑q.den| < (↑↑q.den * (2 * ↑↑q.den - 1))⁻¹
state_after: case refine_3.intro
ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑q| < 1 / (2 * ↑q.den ^ 2)
hq₀ : 0 < ↑↑q.den
hq₁ : 0 < 2 * ↑↑q.den - 1
⊢ |ξ - ↑q.num / ↑↑q.den| < (↑↑q.den * (2 * ↑↑q.den - 1))⁻¹

tactic: replace hq₁ := mul_pos hq₀ hq₁
state_before: case refine_3.intro
ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑q| < 1 / (2 * ↑q.den ^ 2)
hq₀ : 0 < ↑↑q.den
hq₁ : 0 < 2 * ↑↑q.den - 1
⊢ |ξ - ↑q.num / ↑↑q.den| < (↑↑q.den * (2 * ↑↑q.den - 1))⁻¹
state_after: case refine_3.intro
ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑q| < 1 / (2 * ↑q.den ^ 2)
hq₀ : 0 < ↑↑q.den
hq₁ : 0 < ↑↑q.den * (2 * ↑↑q.den - 1)
⊢ |ξ - ↑q.num / ↑↑q.den| < (↑↑q.den * (2 * ↑↑q.den - 1))⁻¹

tactic: have hq₂ : (0 : ℝ) < 2 * (q.den * q.den) := mul_pos zero_lt_two (mul_pos hq₀ hq₀)
state_before: case refine_3.intro
ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑q| < 1 / (2 * ↑q.den ^ 2)
hq₀ : 0 < ↑↑q.den
hq₁ : 0 < ↑↑q.den * (2 * ↑↑q.den - 1)
⊢ |ξ - ↑q.num / ↑↑q.den| < (↑↑q.den * (2 * ↑↑q.den - 1))⁻¹
state_after: case refine_3.intro
ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑q| < 1 / (2 * ↑q.den ^ 2)
hq₀ : 0 < ↑↑q.den
hq₁ : 0 < ↑↑q.den * (2 * ↑↑q.den - 1)
hq₂ : 0 < 2 * (↑q.den * ↑q.den)
⊢ |ξ - ↑q.num / ↑↑q.den| < (↑↑q.den * (2 * ↑↑q.den - 1))⁻¹

tactic: rw [cast_natCast] at *
state_before: case refine_3.intro
ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑q| < 1 / (2 * ↑q.den ^ 2)
hq₀ : 0 < ↑↑q.den
hq₁ : 0 < ↑↑q.den * (2 * ↑↑q.den - 1)
hq₂ : 0 < 2 * (↑q.den * ↑q.den)
⊢ |ξ - ↑q.num / ↑↑q.den| < (↑↑q.den * (2 * ↑↑q.den - 1))⁻¹
state_after: case refine_3.intro
ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑q| < 1 / (2 * ↑q.den ^ 2)
hq₀ : 0 < ↑q.den
hq₁ : 0 < ↑q.den * (2 * ↑q.den - 1)
hq₂ : 0 < 2 * (↑q.den * ↑q.den)
⊢ |ξ - ↑q.num / ↑q.den| < (↑q.den * (2 * ↑q.den - 1))⁻¹

tactic: rw [(by norm_cast : (q.num / q.den : ℝ) = (q.num / q.den : ℚ)), Rat.num_div_den]
state_before: case refine_3.intro
ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑q| < 1 / (2 * ↑q.den ^ 2)
hq₀ : 0 < ↑q.den
hq₁ : 0 < ↑q.den * (2 * ↑q.den - 1)
hq₂ : 0 < 2 * (↑q.den * ↑q.den)
⊢ |ξ - ↑q.num / ↑q.den| < (↑q.den * (2 * ↑q.den - 1))⁻¹
state_after: case refine_3.intro
ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑q| < 1 / (2 * ↑q.den ^ 2)
hq₀ : 0 < ↑q.den
hq₁ : 0 < ↑q.den * (2 * ↑q.den - 1)
hq₂ : 0 < 2 * (↑q.den * ↑q.den)
⊢ |ξ - ↑q| < (↑q.den * (2 * ↑q.den - 1))⁻¹

tactic: exact h.trans (by rw [← one_div, sq, one_div_lt_one_div hq₂ hq₁, ← sub_pos]; ring_nf; exact hq₀)
state_before: case refine_3.intro
ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑q| < 1 / (2 * ↑q.den ^ 2)
hq₀ : 0 < ↑q.den
hq₁ : 0 < ↑q.den * (2 * ↑q.den - 1)
hq₂ : 0 < 2 * (↑q.den * ↑q.den)
⊢ |ξ - ↑q| < (↑q.den * (2 * ↑q.den - 1))⁻¹
state_after: no goals

tactic: norm_cast
state_before: ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑q| < 1 / (2 * ↑q.den ^ 2)
hq₀ : 0 < ↑q.den
hq₁ : 0 < ↑q.den * (2 * ↑q.den - 1)
hq₂ : 0 < 2 * (↑q.den * ↑q.den)
⊢ ↑q.num / ↑q.den = ↑(↑q.num / ↑q.den)
state_after: no goals

tactic: rw [← one_div, sq, one_div_lt_one_div hq₂ hq₁, ← sub_pos]
state_before: ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑q| < 1 / (2 * ↑q.den ^ 2)
hq₀ : 0 < ↑q.den
hq₁ : 0 < ↑q.den * (2 * ↑q.den - 1)
hq₂ : 0 < 2 * (↑q.den * ↑q.den)
⊢ 1 / (2 * ↑q.den ^ 2) < (↑q.den * (2 * ↑q.den - 1))⁻¹
state_after: ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑q| < 1 / (2 * ↑q.den ^ 2)
hq₀ : 0 < ↑q.den
hq₁ : 0 < ↑q.den * (2 * ↑q.den - 1)
hq₂ : 0 < 2 * (↑q.den * ↑q.den)
⊢ 0 < 2 * (↑q.den * ↑q.den) - ↑q.den * (2 * ↑q.den - 1)

tactic: ring_nf
state_before: ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑q| < 1 / (2 * ↑q.den ^ 2)
hq₀ : 0 < ↑q.den
hq₁ : 0 < ↑q.den * (2 * ↑q.den - 1)
hq₂ : 0 < 2 * (↑q.den * ↑q.den)
⊢ 0 < 2 * (↑q.den * ↑q.den) - ↑q.den * (2 * ↑q.den - 1)
state_after: ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑q| < 1 / (2 * ↑q.den ^ 2)
hq₀ : 0 < ↑q.den
hq₁ : 0 < ↑q.den * (2 * ↑q.den - 1)
hq₂ : 0 < 2 * (↑q.den * ↑q.den)
⊢ 0 < ↑q.den

tactic: exact hq₀
state_before: ξ : ℝ
u v : ℤ
hv : 2 ≤ v
h✝ : ContfracLegendre.Ass ξ u v
q : ℚ
h : |ξ - ↑q| < 1 / (2 * ↑q.den ^ 2)
hq₀ : 0 < ↑q.den
hq₁ : 0 < ↑q.den * (2 * ↑q.den - 1)
hq₂ : 0 < 2 * (↑q.den * ↑q.den)
⊢ 0 < ↑q.den
state_after: no goals