Theorem: PadicSeq.stationary
File: Mathlib/NumberTheory/Padics/PadicNumbers.lean

tactic: have : padicNorm p (f n - f m) < ε := hN2 _ (max_le_iff.1 hn).2 _ (max_le_iff.1 hm).2
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ (padicNorm p)
hf : ¬f ≈ 0
this : ∃ ε, ε > 0 ∧ ∃ N1, ∀ (j : ℕ), j ≥ N1 → ε ≤ padicNorm p (↑f j)
ε : ℚ
hε : ε > 0
N1 : ℕ
hN1 : ∀ (j : ℕ), j ≥ N1 → ε ≤ padicNorm p (↑f j)
N2 : ℕ
hN2 : ∀ (j : ℕ), j ≥ N2 → ∀ (k : ℕ), k ≥ N2 → padicNorm p (↑f j - ↑f k) < ε
n m : ℕ
hn : max N1 N2 ≤ n
hm : max N1 N2 ≤ m
⊢ padicNorm p (↑f m) = padicNorm p (↑f n)

tactic: have : padicNorm p (f n - f m) < padicNorm p (f n) :=
  lt_of_lt_of_le this <| hN1 _ (max_le_iff.1 hn).1
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ (padicNorm p)
hf : ¬f ≈ 0
this✝ : ∃ ε, ε > 0 ∧ ∃ N1, ∀ (j : ℕ), j ≥ N1 → ε ≤ padicNorm p (↑f j)
ε : ℚ
hε : ε > 0
N1 : ℕ
hN1 : ∀ (j : ℕ), j ≥ N1 → ε ≤ padicNorm p (↑f j)
N2 : ℕ
hN2 : ∀ (j : ℕ), j ≥ N2 → ∀ (k : ℕ), k ≥ N2 → padicNorm p (↑f j - ↑f k) < ε
n m : ℕ
hn : max N1 N2 ≤ n
hm : max N1 N2 ≤ m
this : padicNorm p (↑f n - ↑f m) < ε
⊢ padicNorm p (↑f m) = padicNorm p (↑f n)

tactic: have : padicNorm p (f n - f m) < max (padicNorm p (f n)) (padicNorm p (f m)) :=
  lt_max_iff.2 (Or.inl this)
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ (padicNorm p)
hf : ¬f ≈ 0
this✝¹ : ∃ ε, ε > 0 ∧ ∃ N1, ∀ (j : ℕ), j ≥ N1 → ε ≤ padicNorm p (↑f j)
ε : ℚ
hε : ε > 0
N1 : ℕ
hN1 : ∀ (j : ℕ), j ≥ N1 → ε ≤ padicNorm p (↑f j)
N2 : ℕ
hN2 : ∀ (j : ℕ), j ≥ N2 → ∀ (k : ℕ), k ≥ N2 → padicNorm p (↑f j - ↑f k) < ε
n m : ℕ
hn : max N1 N2 ≤ n
hm : max N1 N2 ≤ m
this✝ : padicNorm p (↑f n - ↑f m) < ε
this : padicNorm p (↑f n - ↑f m) < padicNorm p (↑f n)
⊢ padicNorm p (↑f m) = padicNorm p (↑f n)

tactic: by_contra hne
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ (padicNorm p)
hf : ¬f ≈ 0
this✝² : ∃ ε, ε > 0 ∧ ∃ N1, ∀ (j : ℕ), j ≥ N1 → ε ≤ padicNorm p (↑f j)
ε : ℚ
hε : ε > 0
N1 : ℕ
hN1 : ∀ (j : ℕ), j ≥ N1 → ε ≤ padicNorm p (↑f j)
N2 : ℕ
hN2 : ∀ (j : ℕ), j ≥ N2 → ∀ (k : ℕ), k ≥ N2 → padicNorm p (↑f j - ↑f k) < ε
n m : ℕ
hn : max N1 N2 ≤ n
hm : max N1 N2 ≤ m
this✝¹ : padicNorm p (↑f n - ↑f m) < ε
this✝ : padicNorm p (↑f n - ↑f m) < padicNorm p (↑f n)
this : padicNorm p (↑f n - ↑f m) < max (padicNorm p (↑f n)) (padicNorm p (↑f m))
⊢ padicNorm p (↑f m) = padicNorm p (↑f n)

tactic: rw [← padicNorm.neg (f m)] at hne
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ (padicNorm p)
hf : ¬f ≈ 0
this✝² : ∃ ε, ε > 0 ∧ ∃ N1, ∀ (j : ℕ), j ≥ N1 → ε ≤ padicNorm p (↑f j)
ε : ℚ
hε : ε > 0
N1 : ℕ
hN1 : ∀ (j : ℕ), j ≥ N1 → ε ≤ padicNorm p (↑f j)
N2 : ℕ
hN2 : ∀ (j : ℕ), j ≥ N2 → ∀ (k : ℕ), k ≥ N2 → padicNorm p (↑f j - ↑f k) < ε
n m : ℕ
hn : max N1 N2 ≤ n
hm : max N1 N2 ≤ m
this✝¹ : padicNorm p (↑f n - ↑f m) < ε
this✝ : padicNorm p (↑f n - ↑f m) < padicNorm p (↑f n)
this : padicNorm p (↑f n - ↑f m) < max (padicNorm p (↑f n)) (padicNorm p (↑f m))
hne : ¬padicNorm p (↑f m) = padicNorm p (↑f n)
⊢ False

tactic: have hnam := add_eq_max_of_ne hne
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ (padicNorm p)
hf : ¬f ≈ 0
this✝² : ∃ ε, ε > 0 ∧ ∃ N1, ∀ (j : ℕ), j ≥ N1 → ε ≤ padicNorm p (↑f j)
ε : ℚ
hε : ε > 0
N1 : ℕ
hN1 : ∀ (j : ℕ), j ≥ N1 → ε ≤ padicNorm p (↑f j)
N2 : ℕ
hN2 : ∀ (j : ℕ), j ≥ N2 → ∀ (k : ℕ), k ≥ N2 → padicNorm p (↑f j - ↑f k) < ε
n m : ℕ
hn : max N1 N2 ≤ n
hm : max N1 N2 ≤ m
this✝¹ : padicNorm p (↑f n - ↑f m) < ε
this✝ : padicNorm p (↑f n - ↑f m) < padicNorm p (↑f n)
this : padicNorm p (↑f n - ↑f m) < max (padicNorm p (↑f n)) (padicNorm p (↑f m))
hne : ¬padicNorm p (-↑f m) = padicNorm p (↑f n)
⊢ False

tactic: rw [padicNorm.neg, max_comm] at hnam
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ (padicNorm p)
hf : ¬f ≈ 0
this✝² : ∃ ε, ε > 0 ∧ ∃ N1, ∀ (j : ℕ), j ≥ N1 → ε ≤ padicNorm p (↑f j)
ε : ℚ
hε : ε > 0
N1 : ℕ
hN1 : ∀ (j : ℕ), j ≥ N1 → ε ≤ padicNorm p (↑f j)
N2 : ℕ
hN2 : ∀ (j : ℕ), j ≥ N2 → ∀ (k : ℕ), k ≥ N2 → padicNorm p (↑f j - ↑f k) < ε
n m : ℕ
hn : max N1 N2 ≤ n
hm : max N1 N2 ≤ m
this✝¹ : padicNorm p (↑f n - ↑f m) < ε
this✝ : padicNorm p (↑f n - ↑f m) < padicNorm p (↑f n)
this : padicNorm p (↑f n - ↑f m) < max (padicNorm p (↑f n)) (padicNorm p (↑f m))
hne : ¬padicNorm p (-↑f m) = padicNorm p (↑f n)
hnam : padicNorm p (-↑f m + ↑f n) = max (padicNorm p (-↑f m)) (padicNorm p (↑f n))
⊢ False

tactic: rw [← hnam, sub_eq_add_neg, add_comm] at this
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ (padicNorm p)
hf : ¬f ≈ 0
this✝² : ∃ ε, ε > 0 ∧ ∃ N1, ∀ (j : ℕ), j ≥ N1 → ε ≤ padicNorm p (↑f j)
ε : ℚ
hε : ε > 0
N1 : ℕ
hN1 : ∀ (j : ℕ), j ≥ N1 → ε ≤ padicNorm p (↑f j)
N2 : ℕ
hN2 : ∀ (j : ℕ), j ≥ N2 → ∀ (k : ℕ), k ≥ N2 → padicNorm p (↑f j - ↑f k) < ε
n m : ℕ
hn : max N1 N2 ≤ n
hm : max N1 N2 ≤ m
this✝¹ : padicNorm p (↑f n - ↑f m) < ε
this✝ : padicNorm p (↑f n - ↑f m) < padicNorm p (↑f n)
this : padicNorm p (↑f n - ↑f m) < max (padicNorm p (↑f n)) (padicNorm p (↑f m))
hne : ¬padicNorm p (-↑f m) = padicNorm p (↑f n)
hnam : padicNorm p (-↑f m + ↑f n) = max (padicNorm p (↑f n)) (padicNorm p (↑f m))
⊢ False

tactic: apply _root_.lt_irrefl _ this
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ (padicNorm p)
hf : ¬f ≈ 0
this✝² : ∃ ε, ε > 0 ∧ ∃ N1, ∀ (j : ℕ), j ≥ N1 → ε ≤ padicNorm p (↑f j)
ε : ℚ
hε : ε > 0
N1 : ℕ
hN1 : ∀ (j : ℕ), j ≥ N1 → ε ≤ padicNorm p (↑f j)
N2 : ℕ
hN2 : ∀ (j : ℕ), j ≥ N2 → ∀ (k : ℕ), k ≥ N2 → padicNorm p (↑f j - ↑f k) < ε
n m : ℕ
hn : max N1 N2 ≤ n
hm : max N1 N2 ≤ m
this✝¹ : padicNorm p (↑f n - ↑f m) < ε
this✝ : padicNorm p (↑f n - ↑f m) < padicNorm p (↑f n)
this : padicNorm p (-↑f m + ↑f n) < padicNorm p (-↑f m + ↑f n)
hne : ¬padicNorm p (-↑f m) = padicNorm p (↑f n)
hnam : padicNorm p (-↑f m + ↑f n) = max (padicNorm p (↑f n)) (padicNorm p (↑f m))
⊢ False