Theorem: Padic.complete'
File: Mathlib/NumberTheory/Padics/PadicNumbers.lean

tactic: obtain ⟨N, hN⟩ := exi_rat_seq_conv f (half_pos hε)
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ_[p] ↑padicNormE
ε : ℚ
hε : ε > 0
⊢ ∃ N, ∀ (i : ℕ), i ≥ N → ↑padicNormE (Padic.lim f - ↑f i) < ε

tactic: obtain ⟨N2, hN2⟩ := padicNormE.defn (lim' f) (half_pos hε)
state_before: case intro
p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ_[p] ↑padicNormE
ε : ℚ
hε : ε > 0
N : ℕ
hN : ∀ (i : ℕ), i ≥ N → ↑padicNormE (↑f i - ↑(limSeq f i)) < ε / 2
⊢ ∃ N, ∀ (i : ℕ), i ≥ N → ↑padicNormE (Padic.lim f - ↑f i) < ε

tactic: refine' ⟨max N N2, fun i hi ↦ _⟩
state_before: case intro.intro
p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ_[p] ↑padicNormE
ε : ℚ
hε : ε > 0
N : ℕ
hN : ∀ (i : ℕ), i ≥ N → ↑padicNormE (↑f i - ↑(limSeq f i)) < ε / 2
N2 : ℕ
hN2 : ∀ (i : ℕ), i ≥ N2 → ↑padicNormE (mk (Padic.lim' f) - ↑(↑(Padic.lim' f) i)) < ε / 2
⊢ ∃ N, ∀ (i : ℕ), i ≥ N → ↑padicNormE (Padic.lim f - ↑f i) < ε

tactic: rw [← sub_add_sub_cancel _ (lim' f i : ℚ_[p]) _]
state_before: case intro.intro
p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ_[p] ↑padicNormE
ε : ℚ
hε : ε > 0
N : ℕ
hN : ∀ (i : ℕ), i ≥ N → ↑padicNormE (↑f i - ↑(limSeq f i)) < ε / 2
N2 : ℕ
hN2 : ∀ (i : ℕ), i ≥ N2 → ↑padicNormE (mk (Padic.lim' f) - ↑(↑(Padic.lim' f) i)) < ε / 2
i : ℕ
hi : i ≥ max N N2
⊢ ↑padicNormE (Padic.lim f - ↑f i) < ε

tactic: refine' (padicNormE.add_le _ _).trans_lt _
state_before: case intro.intro
p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ_[p] ↑padicNormE
ε : ℚ
hε : ε > 0
N : ℕ
hN : ∀ (i : ℕ), i ≥ N → ↑padicNormE (↑f i - ↑(limSeq f i)) < ε / 2
N2 : ℕ
hN2 : ∀ (i : ℕ), i ≥ N2 → ↑padicNormE (mk (Padic.lim' f) - ↑(↑(Padic.lim' f) i)) < ε / 2
i : ℕ
hi : i ≥ max N N2
⊢ ↑padicNormE (Padic.lim f - ↑(↑(Padic.lim' f) i) + (↑(↑(Padic.lim' f) i) - ↑f i)) < ε

tactic: rw [← add_halves ε]
state_before: case intro.intro
p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ_[p] ↑padicNormE
ε : ℚ
hε : ε > 0
N : ℕ
hN : ∀ (i : ℕ), i ≥ N → ↑padicNormE (↑f i - ↑(limSeq f i)) < ε / 2
N2 : ℕ
hN2 : ∀ (i : ℕ), i ≥ N2 → ↑padicNormE (mk (Padic.lim' f) - ↑(↑(Padic.lim' f) i)) < ε / 2
i : ℕ
hi : i ≥ max N N2
⊢ ↑padicNormE (Padic.lim f - ↑(↑(Padic.lim' f) i)) + ↑padicNormE (↑(↑(Padic.lim' f) i) - ↑f i) < ε

tactic: apply _root_.add_lt_add
state_before: case intro.intro
p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ_[p] ↑padicNormE
ε : ℚ
hε : ε > 0
N : ℕ
hN : ∀ (i : ℕ), i ≥ N → ↑padicNormE (↑f i - ↑(limSeq f i)) < ε / 2
N2 : ℕ
hN2 : ∀ (i : ℕ), i ≥ N2 → ↑padicNormE (mk (Padic.lim' f) - ↑(↑(Padic.lim' f) i)) < ε / 2
i : ℕ
hi : i ≥ max N N2
⊢ ↑padicNormE (Padic.lim f - ↑(↑(Padic.lim' f) i)) + ↑padicNormE (↑(↑(Padic.lim' f) i) - ↑f i) < ε / 2 + ε / 2

tactic: apply hN2 _ (le_of_max_le_right hi)
state_before: case intro.intro.h₁
p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ_[p] ↑padicNormE
ε : ℚ
hε : ε > 0
N : ℕ
hN : ∀ (i : ℕ), i ≥ N → ↑padicNormE (↑f i - ↑(limSeq f i)) < ε / 2
N2 : ℕ
hN2 : ∀ (i : ℕ), i ≥ N2 → ↑padicNormE (mk (Padic.lim' f) - ↑(↑(Padic.lim' f) i)) < ε / 2
i : ℕ
hi : i ≥ max N N2
⊢ ↑padicNormE (Padic.lim f - ↑(↑(Padic.lim' f) i)) < ε / 2

tactic: rw [padicNormE.map_sub]
state_before: case intro.intro.h₂
p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ_[p] ↑padicNormE
ε : ℚ
hε : ε > 0
N : ℕ
hN : ∀ (i : ℕ), i ≥ N → ↑padicNormE (↑f i - ↑(limSeq f i)) < ε / 2
N2 : ℕ
hN2 : ∀ (i : ℕ), i ≥ N2 → ↑padicNormE (mk (Padic.lim' f) - ↑(↑(Padic.lim' f) i)) < ε / 2
i : ℕ
hi : i ≥ max N N2
⊢ ↑padicNormE (↑(↑(Padic.lim' f) i) - ↑f i) < ε / 2

tactic: exact hN _ (le_of_max_le_left hi)
state_before: case intro.intro.h₂
p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ_[p] ↑padicNormE
ε : ℚ
hε : ε > 0
N : ℕ
hN : ∀ (i : ℕ), i ≥ N → ↑padicNormE (↑f i - ↑(limSeq f i)) < ε / 2
N2 : ℕ
hN2 : ∀ (i : ℕ), i ≥ N2 → ↑padicNormE (mk (Padic.lim' f) - ↑(↑(Padic.lim' f) i)) < ε / 2
i : ℕ
hi : i ≥ max N N2
⊢ ↑padicNormE (↑f i - ↑(↑(Padic.lim' f) i)) < ε / 2