Theorem: Polynomial.exists_partition_polynomial_aux
File: Mathlib/NumberTheory/ClassNumber/AdmissibleCardPowDegree.lean

tactic: have hbε : 0 < cardPowDegree b • ε := by
  rw [Algebra.smul_def, eq_intCast]
  exact mul_pos (Int.cast_pos.mpr (AbsoluteValue.pos _ hb)) hε
state_before: Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A : Fin n → Fq[X]
⊢ ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε

tactic: induction' n with n ih
state_before: Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A : Fin n → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
⊢ ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε

tactic: have anti_archim' : ∀ {i j k} {ε : ℝ},
  (cardPowDegree (A i % b - A j % b) : ℝ) < ε →
    (cardPowDegree (A j % b - A k % b) : ℝ) < ε →
      (cardPowDegree (A i % b - A k % b) : ℝ) < ε := by
  intro i j k ε
  simp_rw [← Int.lt_ceil]
  exact cardPowDegree_anti_archimedean
state_before: case succ
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
⊢ ∃ t, ∀ (i₀ i₁ : Fin (Nat.succ n)), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε

tactic: obtain ⟨t', ht'⟩ := ih (Fin.tail A)
state_before: case succ
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
⊢ ∃ t, ∀ (i₀ i₁ : Fin (Nat.succ n)), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε

tactic: rsuffices ⟨j, hj⟩ :
  ∃ j, ∀ i, t' i = j ↔ (cardPowDegree (A 0 % b - A i.succ % b) : ℝ) < cardPowDegree b • ε
state_before: case succ.intro
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
⊢ ∃ t, ∀ (i₀ i₁ : Fin (Nat.succ n)), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε

tactic: by_cases exists_nonempty_j : ∃ j, (∃ i, t' i = j) ∧
    ∀ i, t' i = j → (cardPowDegree (A 0 % b - A i.succ % b) : ℝ) < cardPowDegree b • ε
state_before: case intro
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
hj : ∀ (i : Fin n), t' i = j → ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
⊢ ∃ j, ∀ (i : Fin n), t' i = j ↔ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε

tactic: refine' ⟨j, fun i => ⟨hj i, fun hi => _⟩⟩
state_before: case neg
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
hj : ∀ (i : Fin n), t' i = j → ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
exists_nonempty_j :
  ¬∃ j,
      (∃ i, t' i = j) ∧
        ∀ (i : Fin n), t' i = j → ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
⊢ ∃ j, ∀ (i : Fin n), t' i = j ↔ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε

tactic: have := exists_nonempty_j ⟨t' i, ⟨i, rfl⟩, fun i' hi' => anti_archim' hi ((ht' _ _).mp hi')⟩
state_before: case neg
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
hj : ∀ (i : Fin n), t' i = j → ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
exists_nonempty_j :
  ¬∃ j,
      (∃ i, t' i = j) ∧
        ∀ (i : Fin n), t' i = j → ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
i : Fin n
hi : ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
⊢ t' i = j

tactic: contradiction
state_before: case neg
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
hj : ∀ (i : Fin n), t' i = j → ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
exists_nonempty_j :
  ¬∃ j,
      (∃ i, t' i = j) ∧
        ∀ (i : Fin n), t' i = j → ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
i : Fin n
hi : ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
this : False
⊢ t' i = j

tactic: rw [Algebra.smul_def, eq_intCast]
state_before: Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A : Fin n → Fq[X]
⊢ 0 < ↑cardPowDegree b • ε

tactic: exact mul_pos (Int.cast_pos.mpr (AbsoluteValue.pos _ hb)) hε
state_before: Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A : Fin n → Fq[X]
⊢ 0 < ↑(↑cardPowDegree b) * ε

tactic: refine' ⟨finZeroElim, finZeroElim⟩
state_before: case zero
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
A : Fin Nat.zero → Fq[X]
⊢ ∃ t, ∀ (i₀ i₁ : Fin Nat.zero), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε

tactic: intro i j k ε
state_before: Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
⊢ ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε

tactic: simp_rw [← Int.lt_ceil]
state_before: Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε✝ : ℝ
hε : 0 < ε✝
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε✝
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε✝
A : Fin (Nat.succ n) → Fq[X]
i j k : Fin (Nat.succ n)
ε : ℝ
⊢ ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
    ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε

tactic: exact cardPowDegree_anti_archimedean
state_before: Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε✝ : ℝ
hε : 0 < ε✝
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε✝
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε✝
A : Fin (Nat.succ n) → Fq[X]
i j k : Fin (Nat.succ n)
ε : ℝ
⊢ ↑cardPowDegree (A i % b - A j % b) < ⌈ε⌉ →
    ↑cardPowDegree (A j % b - A k % b) < ⌈ε⌉ → ↑cardPowDegree (A i % b - A k % b) < ⌈ε⌉

tactic: refine' ⟨Fin.cons j t', fun i₀ i₁ => _⟩
state_before: case succ.intro.intro
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
hj : ∀ (i : Fin n), t' i = j ↔ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
⊢ ∃ t, ∀ (i₀ i₁ : Fin (Nat.succ n)), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε

tactic: refine' Fin.cases _ (fun i₀ => _) i₀ <;> refine' Fin.cases _ (fun i₁ => _) i₁
state_before: case succ.intro.intro
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
hj : ∀ (i : Fin n), t' i = j ↔ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
i₀ i₁ : Fin (Nat.succ n)
⊢ Fin.cons j t' i₀ = Fin.cons j t' i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε

tactic: simpa using hbε
state_before: case succ.intro.intro.refine'_1.refine'_1
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
hj : ∀ (i : Fin n), t' i = j ↔ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
i₀ i₁ : Fin (Nat.succ n)
⊢ Fin.cons j t' 0 = Fin.cons j t' 0 ↔ ↑(↑cardPowDegree (A 0 % b - A 0 % b)) < ↑cardPowDegree b • ε

tactic: rw [Fin.cons_succ, Fin.cons_zero, eq_comm, AbsoluteValue.map_sub]
state_before: case succ.intro.intro.refine'_1.refine'_2
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
hj : ∀ (i : Fin n), t' i = j ↔ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
i₀ i₁✝ : Fin (Nat.succ n)
i₁ : Fin n
⊢ Fin.cons j t' 0 = Fin.cons j t' (Fin.succ i₁) ↔
    ↑(↑cardPowDegree (A (Fin.succ i₁) % b - A 0 % b)) < ↑cardPowDegree b • ε

tactic: exact hj i₁
state_before: case succ.intro.intro.refine'_1.refine'_2
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
hj : ∀ (i : Fin n), t' i = j ↔ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
i₀ i₁✝ : Fin (Nat.succ n)
i₁ : Fin n
⊢ t' i₁ = j ↔ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i₁) % b)) < ↑cardPowDegree b • ε

tactic: rw [Fin.cons_succ, Fin.cons_zero]
state_before: case succ.intro.intro.refine'_2.refine'_1
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
hj : ∀ (i : Fin n), t' i = j ↔ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
i₀✝ i₁ : Fin (Nat.succ n)
i₀ : Fin n
⊢ Fin.cons j t' (Fin.succ i₀) = Fin.cons j t' 0 ↔
    ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i₀) % b)) < ↑cardPowDegree b • ε

tactic: exact hj i₀
state_before: case succ.intro.intro.refine'_2.refine'_1
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
hj : ∀ (i : Fin n), t' i = j ↔ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
i₀✝ i₁ : Fin (Nat.succ n)
i₀ : Fin n
⊢ t' i₀ = j ↔ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i₀) % b)) < ↑cardPowDegree b • ε

tactic: rw [Fin.cons_succ, Fin.cons_succ]
state_before: case succ.intro.intro.refine'_2.refine'_2
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
hj : ∀ (i : Fin n), t' i = j ↔ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
i₀✝ i₁✝ : Fin (Nat.succ n)
i₀ i₁ : Fin n
⊢ Fin.cons j t' (Fin.succ i₀) = Fin.cons j t' (Fin.succ i₁) ↔
    ↑(↑cardPowDegree (A (Fin.succ i₁) % b - A (Fin.succ i₀) % b)) < ↑cardPowDegree b • ε

tactic: exact ht' i₀ i₁
state_before: case succ.intro.intro.refine'_2.refine'_2
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
hj : ∀ (i : Fin n), t' i = j ↔ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
i₀✝ i₁✝ : Fin (Nat.succ n)
i₀ i₁ : Fin n
⊢ t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (A (Fin.succ i₁) % b - A (Fin.succ i₀) % b)) < ↑cardPowDegree b • ε

tactic: by_contra hg
state_before: Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
⊢ ∃ j, ∀ (i : Fin n), t' i = j → ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε

tactic: push_neg at hg
state_before: Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
hg : ¬∃ j, ∀ (i : Fin n), t' i = j → ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
⊢ False

tactic: obtain ⟨j₀, j₁, j_ne, approx⟩ := exists_approx_polynomial hb hε
  (Fin.cons (A 0) fun j => A (Fin.succ (Classical.choose (hg j))))
state_before: Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
hg :
  ∀ (j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)),
    ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))
⊢ False

tactic: revert j_ne approx
state_before: case intro.intro.intro
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
hg :
  ∀ (j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)),
    ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))
j₀ j₁ : Fin (Nat.succ (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊))
j_ne : j₀ ≠ j₁
approx :
  ↑(↑cardPowDegree
        (Fin.cons (A 0)
              (fun j =>
                A
                  (Fin.succ
                    (Classical.choose
                      (_ : ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))))
              j₁ %
            b -
          Fin.cons (A 0)
              (fun j =>
                A
                  (Fin.succ
                    (Classical.choose
                      (_ : ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))))
              j₀ %
            b)) <
    ↑cardPowDegree b • ε
⊢ False

tactic: refine' Fin.cases _ (fun j₀ => _) j₀ <;>
  refine' Fin.cases (fun j_ne approx => _) (fun j₁ j_ne approx => _) j₁
state_before: case intro.intro.intro
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
hg :
  ∀ (j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)),
    ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))
j₀ j₁ : Fin (Nat.succ (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊))
⊢ j₀ ≠ j₁ →
    ↑(↑cardPowDegree
            (Fin.cons (A 0)
                  (fun j =>
                    A
                      (Fin.succ
                        (Classical.choose
                          (_ :
                            ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))))
                  j₁ %
                b -
              Fin.cons (A 0)
                  (fun j =>
                    A
                      (Fin.succ
                        (Classical.choose
                          (_ :
                            ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))))
                  j₀ %
                b)) <
        ↑cardPowDegree b • ε →
      False

tactic: exact absurd rfl j_ne
state_before: case intro.intro.intro.refine'_1.refine'_1
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
hg :
  ∀ (j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)),
    ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))
j₀ j₁ : Fin (Nat.succ (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊))
j_ne : 0 ≠ 0
approx :
  ↑(↑cardPowDegree
        (Fin.cons (A 0)
              (fun j =>
                A
                  (Fin.succ
                    (Classical.choose
                      (_ : ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))))
              0 %
            b -
          Fin.cons (A 0)
              (fun j =>
                A
                  (Fin.succ
                    (Classical.choose
                      (_ : ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))))
              0 %
            b)) <
    ↑cardPowDegree b • ε
⊢ False

tactic: rw [Fin.cons_succ, Fin.cons_zero, ← not_le, AbsoluteValue.map_sub] at approx
state_before: case intro.intro.intro.refine'_1.refine'_2
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
hg :
  ∀ (j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)),
    ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))
j₀ j₁✝ : Fin (Nat.succ (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊))
j₁ : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
j_ne : 0 ≠ Fin.succ j₁
approx :
  ↑(↑cardPowDegree
        (Fin.cons (A 0)
              (fun j =>
                A
                  (Fin.succ
                    (Classical.choose
                      (_ : ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))))
              (Fin.succ j₁) %
            b -
          Fin.cons (A 0)
              (fun j =>
                A
                  (Fin.succ
                    (Classical.choose
                      (_ : ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))))
              0 %
            b)) <
    ↑cardPowDegree b • ε
⊢ False

tactic: have := (Classical.choose_spec (hg j₁)).2
state_before: case intro.intro.intro.refine'_1.refine'_2
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
hg :
  ∀ (j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)),
    ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))
j₀ j₁✝ : Fin (Nat.succ (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊))
j₁ : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
j_ne : 0 ≠ Fin.succ j₁
approx :
  ¬↑cardPowDegree b • ε ≤
      ↑(↑cardPowDegree
          (A 0 % b -
            A
                (Fin.succ
                  (Classical.choose
                    (_ : ∃ i, t' i = j₁ ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))) %
              b))
⊢ False

tactic: contradiction
state_before: case intro.intro.intro.refine'_1.refine'_2
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
hg :
  ∀ (j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)),
    ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))
j₀ j₁✝ : Fin (Nat.succ (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊))
j₁ : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
j_ne : 0 ≠ Fin.succ j₁
approx :
  ¬↑cardPowDegree b • ε ≤
      ↑(↑cardPowDegree
          (A 0 % b -
            A
                (Fin.succ
                  (Classical.choose
                    (_ : ∃ i, t' i = j₁ ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))) %
              b))
this :
  ↑cardPowDegree b • ε ≤
    ↑(↑cardPowDegree
        (A 0 % b -
          A
              (Fin.succ
                (Classical.choose
                  (_ : ∃ i, t' i = j₁ ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))) %
            b))
⊢ False

tactic: rw [Fin.cons_succ, Fin.cons_zero, ← not_le] at approx
state_before: case intro.intro.intro.refine'_2.refine'_1
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
hg :
  ∀ (j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)),
    ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))
j₀✝ j₁ : Fin (Nat.succ (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊))
j₀ : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
j_ne : Fin.succ j₀ ≠ 0
approx :
  ↑(↑cardPowDegree
        (Fin.cons (A 0)
              (fun j =>
                A
                  (Fin.succ
                    (Classical.choose
                      (_ : ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))))
              0 %
            b -
          Fin.cons (A 0)
              (fun j =>
                A
                  (Fin.succ
                    (Classical.choose
                      (_ : ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))))
              (Fin.succ j₀) %
            b)) <
    ↑cardPowDegree b • ε
⊢ False

tactic: have := (Classical.choose_spec (hg j₀)).2
state_before: case intro.intro.intro.refine'_2.refine'_1
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
hg :
  ∀ (j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)),
    ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))
j₀✝ j₁ : Fin (Nat.succ (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊))
j₀ : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
j_ne : Fin.succ j₀ ≠ 0
approx :
  ¬↑cardPowDegree b • ε ≤
      ↑(↑cardPowDegree
          (A 0 % b -
            A
                (Fin.succ
                  (Classical.choose
                    (_ : ∃ i, t' i = j₀ ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))) %
              b))
⊢ False

tactic: contradiction
state_before: case intro.intro.intro.refine'_2.refine'_1
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
hg :
  ∀ (j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)),
    ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))
j₀✝ j₁ : Fin (Nat.succ (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊))
j₀ : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
j_ne : Fin.succ j₀ ≠ 0
approx :
  ¬↑cardPowDegree b • ε ≤
      ↑(↑cardPowDegree
          (A 0 % b -
            A
                (Fin.succ
                  (Classical.choose
                    (_ : ∃ i, t' i = j₀ ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))) %
              b))
this :
  ↑cardPowDegree b • ε ≤
    ↑(↑cardPowDegree
        (A 0 % b -
          A
              (Fin.succ
                (Classical.choose
                  (_ : ∃ i, t' i = j₀ ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))) %
            b))
⊢ False

tactic: rw [Fin.cons_succ, Fin.cons_succ] at approx
state_before: case intro.intro.intro.refine'_2.refine'_2
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
hg :
  ∀ (j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)),
    ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))
j₀✝ j₁✝ : Fin (Nat.succ (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊))
j₀ j₁ : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
j_ne : Fin.succ j₀ ≠ Fin.succ j₁
approx :
  ↑(↑cardPowDegree
        (Fin.cons (A 0)
              (fun j =>
                A
                  (Fin.succ
                    (Classical.choose
                      (_ : ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))))
              (Fin.succ j₁) %
            b -
          Fin.cons (A 0)
              (fun j =>
                A
                  (Fin.succ
                    (Classical.choose
                      (_ : ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))))
              (Fin.succ j₀) %
            b)) <
    ↑cardPowDegree b • ε
⊢ False

tactic: rw [Ne.def, Fin.succ_inj] at j_ne
state_before: case intro.intro.intro.refine'_2.refine'_2
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
hg :
  ∀ (j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)),
    ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))
j₀✝ j₁✝ : Fin (Nat.succ (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊))
j₀ j₁ : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
j_ne : Fin.succ j₀ ≠ Fin.succ j₁
approx :
  ↑(↑cardPowDegree
        (A
              (Fin.succ
                (Classical.choose
                  (_ : ∃ i, t' i = j₁ ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))) %
            b -
          A
              (Fin.succ
                (Classical.choose
                  (_ : ∃ i, t' i = j₀ ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))) %
            b)) <
    ↑cardPowDegree b • ε
⊢ False

tactic: have : j₀ = j₁ := (Classical.choose_spec (hg j₀)).1.symm.trans
  (((ht' (Classical.choose (hg j₀)) (Classical.choose (hg j₁))).mpr approx).trans
    (Classical.choose_spec (hg j₁)).1)
state_before: case intro.intro.intro.refine'_2.refine'_2
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
hg :
  ∀ (j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)),
    ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))
j₀✝ j₁✝ : Fin (Nat.succ (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊))
j₀ j₁ : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
j_ne : ¬j₀ = j₁
approx :
  ↑(↑cardPowDegree
        (A
              (Fin.succ
                (Classical.choose
                  (_ : ∃ i, t' i = j₁ ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))) %
            b -
          A
              (Fin.succ
                (Classical.choose
                  (_ : ∃ i, t' i = j₀ ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))) %
            b)) <
    ↑cardPowDegree b • ε
⊢ False

tactic: contradiction
state_before: case intro.intro.intro.refine'_2.refine'_2
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
hg :
  ∀ (j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)),
    ∃ i, t' i = j ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))
j₀✝ j₁✝ : Fin (Nat.succ (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊))
j₀ j₁ : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
j_ne : ¬j₀ = j₁
approx :
  ↑(↑cardPowDegree
        (A
              (Fin.succ
                (Classical.choose
                  (_ : ∃ i, t' i = j₁ ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))) %
            b -
          A
              (Fin.succ
                (Classical.choose
                  (_ : ∃ i, t' i = j₀ ∧ ↑cardPowDegree b • ε ≤ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b))))) %
            b)) <
    ↑cardPowDegree b • ε
this : j₀ = j₁
⊢ False

tactic: obtain ⟨j, ⟨i, hi⟩, hj⟩ := exists_nonempty_j
state_before: case pos
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
hj : ∀ (i : Fin n), t' i = j → ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
exists_nonempty_j :
  ∃ j,
    (∃ i, t' i = j) ∧ ∀ (i : Fin n), t' i = j → ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
⊢ ∃ j, ∀ (i : Fin n), t' i = j ↔ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε

tactic: refine' ⟨j, fun i' => ⟨hj i', fun hi' => _root_.trans ((ht' _ _).mpr _) hi⟩⟩
state_before: case pos.intro.intro.intro
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
j✝ : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
hj✝ : ∀ (i : Fin n), t' i = j✝ → ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
hj : ∀ (i : Fin n), t' i = j → ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
i : Fin n
hi : t' i = j
⊢ ∃ j, ∀ (i : Fin n), t' i = j ↔ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε

tactic: apply anti_archim' _ hi'
state_before: case pos.intro.intro.intro
Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
j✝ : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
hj✝ : ∀ (i : Fin n), t' i = j✝ → ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
hj : ∀ (i : Fin n), t' i = j → ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
i : Fin n
hi : t' i = j
i' : Fin n
hi' : ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i') % b)) < ↑cardPowDegree b • ε
⊢ ↑(↑cardPowDegree (Fin.tail A i % b - Fin.tail A i' % b)) < ↑cardPowDegree b • ε

tactic: rw [AbsoluteValue.map_sub]
state_before: Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
j✝ : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
hj✝ : ∀ (i : Fin n), t' i = j✝ → ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
hj : ∀ (i : Fin n), t' i = j → ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
i : Fin n
hi : t' i = j
i' : Fin n
hi' : ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i') % b)) < ↑cardPowDegree b • ε
⊢ ↑(↑cardPowDegree (A (Fin.succ i) % b - A 0 % b)) < ↑cardPowDegree b • ε

tactic: exact hj _ hi
state_before: Fq : Type u_1
inst✝¹ : Fintype Fq
inst✝ : Field Fq
n✝ : ℕ
ε : ℝ
hε : 0 < ε
b : Fq[X]
hb : b ≠ 0
A✝ : Fin n✝ → Fq[X]
hbε : 0 < ↑cardPowDegree b • ε
n : ℕ
ih :
  ∀ (A : Fin n → Fq[X]),
    ∃ t, ∀ (i₀ i₁ : Fin n), t i₀ = t i₁ ↔ ↑(↑cardPowDegree (A i₁ % b - A i₀ % b)) < ↑cardPowDegree b • ε
A : Fin (Nat.succ n) → Fq[X]
anti_archim' :
  ∀ {i j k : Fin (Nat.succ n)} {ε : ℝ},
    ↑(↑cardPowDegree (A i % b - A j % b)) < ε →
      ↑(↑cardPowDegree (A j % b - A k % b)) < ε → ↑(↑cardPowDegree (A i % b - A k % b)) < ε
t' : Fin n → Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
ht' :
  ∀ (i₀ i₁ : Fin n), t' i₀ = t' i₁ ↔ ↑(↑cardPowDegree (Fin.tail A i₁ % b - Fin.tail A i₀ % b)) < ↑cardPowDegree b • ε
j✝ : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
hj✝ : ∀ (i : Fin n), t' i = j✝ → ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
j : Fin (Fintype.card Fq ^ ⌈-log ε / log ↑(Fintype.card Fq)⌉₊)
hj : ∀ (i : Fin n), t' i = j → ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε
i : Fin n
hi : t' i = j
i' : Fin n
hi' : ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i') % b)) < ↑cardPowDegree b • ε
⊢ ↑(↑cardPowDegree (A 0 % b - A (Fin.succ i) % b)) < ↑cardPowDegree b • ε