Theorem: EMetric.cauchySeq_iff_le_tendsto_0
File: Mathlib/Topology/Instances/ENNReal.lean

tactic: constructor
state_before: α : Type u_2
β : Type u_1
γ : Type ?u.416936
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
⊢ (∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε) ↔
    ∃ b, (∀ (n m N : β), N ≤ n → N ≤ m → edist (s n) (s m) ≤ b N) ∧ Tendsto b atTop (𝓝 0)

tactic: intro hs
state_before: case mp
α : Type u_2
β : Type u_1
γ : Type ?u.416936
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
⊢ (∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε) →
    ∃ b, (∀ (n m N : β), N ≤ n → N ≤ m → edist (s n) (s m) ≤ b N) ∧ Tendsto b atTop (𝓝 0)

tactic: refine ⟨fun N => EMetric.diam (s '' Ici N), fun n m N hn hm => ?_, ?_⟩
state_before: case mp
α : Type u_2
β : Type u_1
γ : Type ?u.416936
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
hs : ∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
⊢ ∃ b, (∀ (n m N : β), N ≤ n → N ≤ m → edist (s n) (s m) ≤ b N) ∧ Tendsto b atTop (𝓝 0)

tactic: exact EMetric.edist_le_diam_of_mem (mem_image_of_mem _ hn) (mem_image_of_mem _ hm)
state_before: case mp.refine_1
α : Type u_2
β : Type u_1
γ : Type ?u.416936
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
hs : ∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
n m N : β
hn : N ≤ n
hm : N ≤ m
⊢ edist (s n) (s m) ≤ (fun N => diam (s '' Ici N)) N

tactic: refine ENNReal.tendsto_nhds_zero.2 fun ε ε0 => ?_
state_before: case mp.refine_2
α : Type u_2
β : Type u_1
γ : Type ?u.416936
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
hs : ∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
⊢ Tendsto (fun N => diam (s '' Ici N)) atTop (𝓝 0)

tactic: rcases hs ε ε0 with ⟨N, hN⟩
state_before: case mp.refine_2
α : Type u_2
β : Type u_1
γ : Type ?u.416936
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
hs : ∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
ε : ℝ≥0∞
ε0 : ε > 0
⊢ ∀ᶠ (x : β) in atTop, diam (s '' Ici x) ≤ ε

tactic: refine (eventually_ge_atTop N).mono fun n hn => EMetric.diam_le ?_
state_before: case mp.refine_2.intro
α : Type u_2
β : Type u_1
γ : Type ?u.416936
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
hs : ∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
ε : ℝ≥0∞
ε0 : ε > 0
N : β
hN : ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
⊢ ∀ᶠ (x : β) in atTop, diam (s '' Ici x) ≤ ε

tactic: rintro _ ⟨k, hk, rfl⟩ _ ⟨l, hl, rfl⟩
state_before: case mp.refine_2.intro
α : Type u_2
β : Type u_1
γ : Type ?u.416936
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
hs : ∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
ε : ℝ≥0∞
ε0 : ε > 0
N : β
hN : ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
n : β
hn : N ≤ n
⊢ ∀ (x : α), x ∈ s '' Ici n → ∀ (y : α), y ∈ s '' Ici n → edist x y ≤ ε

tactic: exact (hN _ (hn.trans hk) _ (hn.trans hl)).le
state_before: case mp.refine_2.intro.intro.intro.intro.intro
α : Type u_2
β : Type u_1
γ : Type ?u.416936
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
hs : ∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
ε : ℝ≥0∞
ε0 : ε > 0
N : β
hN : ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε
n : β
hn : N ≤ n
k : β
hk : k ∈ Ici n
l : β
hl : l ∈ Ici n
⊢ edist (s k) (s l) ≤ ε

tactic: rintro ⟨b, ⟨b_bound, b_lim⟩⟩ ε εpos
state_before: case mpr
α : Type u_2
β : Type u_1
γ : Type ?u.416936
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
⊢ (∃ b, (∀ (n m N : β), N ≤ n → N ≤ m → edist (s n) (s m) ≤ b N) ∧ Tendsto b atTop (𝓝 0)) →
    ∀ (ε : ℝ≥0∞), ε > 0 → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε

tactic: have : ∀ᶠ n in atTop, b n < ε := b_lim.eventually (gt_mem_nhds εpos)
state_before: case mpr.intro.intro
α : Type u_2
β : Type u_1
γ : Type ?u.416936
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
b : β → ℝ≥0∞
b_bound : ∀ (n m N : β), N ≤ n → N ≤ m → edist (s n) (s m) ≤ b N
b_lim : Tendsto b atTop (𝓝 0)
ε : ℝ≥0∞
εpos : ε > 0
⊢ ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε

tactic: rcases this.exists with ⟨N, hN⟩
state_before: case mpr.intro.intro
α : Type u_2
β : Type u_1
γ : Type ?u.416936
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
b : β → ℝ≥0∞
b_bound : ∀ (n m N : β), N ≤ n → N ≤ m → edist (s n) (s m) ≤ b N
b_lim : Tendsto b atTop (𝓝 0)
ε : ℝ≥0∞
εpos : ε > 0
this : ∀ᶠ (n : β) in atTop, b n < ε
⊢ ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε

tactic: refine ⟨N, fun m hm n hn => ?_⟩
state_before: case mpr.intro.intro.intro
α : Type u_2
β : Type u_1
γ : Type ?u.416936
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
b : β → ℝ≥0∞
b_bound : ∀ (n m N : β), N ≤ n → N ≤ m → edist (s n) (s m) ≤ b N
b_lim : Tendsto b atTop (𝓝 0)
ε : ℝ≥0∞
εpos : ε > 0
this : ∀ᶠ (n : β) in atTop, b n < ε
N : β
hN : b N < ε
⊢ ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → edist (s m) (s n) < ε

tactic: calc edist (s m) (s n) ≤ b N := b_bound m n N hm hn
_ < ε := hN
state_before: case mpr.intro.intro.intro
α : Type u_2
β : Type u_1
γ : Type ?u.416936
inst✝² : PseudoEMetricSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
s : β → α
b : β → ℝ≥0∞
b_bound : ∀ (n m N : β), N ≤ n → N ≤ m → edist (s n) (s m) ≤ b N
b_lim : Tendsto b atTop (𝓝 0)
ε : ℝ≥0∞
εpos : ε > 0
this : ∀ᶠ (n : β) in atTop, b n < ε
N : β
hN : b N < ε
m : β
hm : N ≤ m
n : β
hn : N ≤ n
⊢ edist (s m) (s n) < ε