Theorem: CantorScheme.ClosureAntitone.map_of_vanishingDiam
File: Mathlib/Topology/MetricSpace/CantorScheme.lean

tactic: rw [eq_univ_iff_forall]
state_before: β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
⊢ (inducedMap A).fst = univ

tactic: intro x
state_before: β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
⊢ ∀ (x : ℕ → β), x ∈ (inducedMap A).fst

tactic: choose u hu using fun n => hnonempty (res x n)
state_before: β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
x : ℕ → β
⊢ x ∈ (inducedMap A).fst

tactic: have umem : ∀ n m : ℕ, n ≤ m → u m ∈ A (res x n) := by
  have : Antitone fun n : ℕ => A (res x n) := by
    refine' antitone_nat_of_succ_le _
    intro n
    apply hanti.antitone
  intro n m hnm
  exact this hnm (hu _)
state_before: β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
x : ℕ → β
u : ℕ → α
hu : ∀ (n : ℕ), u n ∈ A (res x n)
⊢ x ∈ (inducedMap A).fst

tactic: have : CauchySeq u := by
  rw [Metric.cauchySeq_iff]
  intro ε ε_pos
  cases' hdiam.dist_lt _ ε_pos x with n hn
  use n
  intro m₀ hm₀ m₁ hm₁
  apply hn <;> apply umem <;> assumption
state_before: β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
x : ℕ → β
u : ℕ → α
hu : ∀ (n : ℕ), u n ∈ A (res x n)
umem : ∀ (n m : ℕ), n ≤ m → u m ∈ A (res x n)
⊢ x ∈ (inducedMap A).fst

tactic: cases' cauchySeq_tendsto_of_complete this with y hy
state_before: β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
x : ℕ → β
u : ℕ → α
hu : ∀ (n : ℕ), u n ∈ A (res x n)
umem : ∀ (n m : ℕ), n ≤ m → u m ∈ A (res x n)
this : CauchySeq u
⊢ x ∈ (inducedMap A).fst

tactic: use y
state_before: case intro
β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
x : ℕ → β
u : ℕ → α
hu : ∀ (n : ℕ), u n ∈ A (res x n)
umem : ∀ (n m : ℕ), n ≤ m → u m ∈ A (res x n)
this : CauchySeq u
y : α
hy : Tendsto u atTop (𝓝 y)
⊢ x ∈ (inducedMap A).fst

tactic: rw [mem_iInter]
state_before: case intro
β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
x : ℕ → β
u : ℕ → α
hu : ∀ (n : ℕ), u n ∈ A (res x n)
umem : ∀ (n m : ℕ), n ≤ m → u m ∈ A (res x n)
this : CauchySeq u
y : α
hy : Tendsto u atTop (𝓝 y)
⊢ y ∈ ⋂ (n : ℕ), A (res x n)

tactic: intro n
state_before: case intro
β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
x : ℕ → β
u : ℕ → α
hu : ∀ (n : ℕ), u n ∈ A (res x n)
umem : ∀ (n m : ℕ), n ≤ m → u m ∈ A (res x n)
this : CauchySeq u
y : α
hy : Tendsto u atTop (𝓝 y)
⊢ ∀ (i : ℕ), y ∈ A (res x i)

tactic: apply hanti _ (x n)
state_before: case intro
β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
x : ℕ → β
u : ℕ → α
hu : ∀ (n : ℕ), u n ∈ A (res x n)
umem : ∀ (n m : ℕ), n ≤ m → u m ∈ A (res x n)
this : CauchySeq u
y : α
hy : Tendsto u atTop (𝓝 y)
n : ℕ
⊢ y ∈ A (res x n)

tactic: apply mem_closure_of_tendsto hy
state_before: case intro.a
β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
x : ℕ → β
u : ℕ → α
hu : ∀ (n : ℕ), u n ∈ A (res x n)
umem : ∀ (n m : ℕ), n ≤ m → u m ∈ A (res x n)
this : CauchySeq u
y : α
hy : Tendsto u atTop (𝓝 y)
n : ℕ
⊢ y ∈ closure (A (x n :: res x n))

tactic: rw [eventually_atTop]
state_before: case intro.a
β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
x : ℕ → β
u : ℕ → α
hu : ∀ (n : ℕ), u n ∈ A (res x n)
umem : ∀ (n m : ℕ), n ≤ m → u m ∈ A (res x n)
this : CauchySeq u
y : α
hy : Tendsto u atTop (𝓝 y)
n : ℕ
⊢ ∀ᶠ (x_1 : ℕ) in atTop, u x_1 ∈ A (x n :: res x n)

tactic: exact ⟨n.succ, umem _⟩
state_before: case intro.a
β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
x : ℕ → β
u : ℕ → α
hu : ∀ (n : ℕ), u n ∈ A (res x n)
umem : ∀ (n m : ℕ), n ≤ m → u m ∈ A (res x n)
this : CauchySeq u
y : α
hy : Tendsto u atTop (𝓝 y)
n : ℕ
⊢ ∃ a, ∀ (b : ℕ), b ≥ a → u b ∈ A (x n :: res x n)

tactic: have : Antitone fun n : ℕ => A (res x n) := by
  refine' antitone_nat_of_succ_le _
  intro n
  apply hanti.antitone
state_before: β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
x : ℕ → β
u : ℕ → α
hu : ∀ (n : ℕ), u n ∈ A (res x n)
⊢ ∀ (n m : ℕ), n ≤ m → u m ∈ A (res x n)

tactic: intro n m hnm
state_before: β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
x : ℕ → β
u : ℕ → α
hu : ∀ (n : ℕ), u n ∈ A (res x n)
this : Antitone fun n => A (res x n)
⊢ ∀ (n m : ℕ), n ≤ m → u m ∈ A (res x n)

tactic: exact this hnm (hu _)
state_before: β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
x : ℕ → β
u : ℕ → α
hu : ∀ (n : ℕ), u n ∈ A (res x n)
this : Antitone fun n => A (res x n)
n m : ℕ
hnm : n ≤ m
⊢ u m ∈ A (res x n)

tactic: refine' antitone_nat_of_succ_le _
state_before: β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
x : ℕ → β
u : ℕ → α
hu : ∀ (n : ℕ), u n ∈ A (res x n)
⊢ Antitone fun n => A (res x n)

tactic: intro n
state_before: β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
x : ℕ → β
u : ℕ → α
hu : ∀ (n : ℕ), u n ∈ A (res x n)
⊢ ∀ (n : ℕ), A (res x (n + 1)) ≤ A (res x n)

tactic: apply hanti.antitone
state_before: β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
x : ℕ → β
u : ℕ → α
hu : ∀ (n : ℕ), u n ∈ A (res x n)
n : ℕ
⊢ A (res x (n + 1)) ≤ A (res x n)

tactic: rw [Metric.cauchySeq_iff]
state_before: β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
x : ℕ → β
u : ℕ → α
hu : ∀ (n : ℕ), u n ∈ A (res x n)
umem : ∀ (n m : ℕ), n ≤ m → u m ∈ A (res x n)
⊢ CauchySeq u

tactic: intro ε ε_pos
state_before: β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
x : ℕ → β
u : ℕ → α
hu : ∀ (n : ℕ), u n ∈ A (res x n)
umem : ∀ (n m : ℕ), n ≤ m → u m ∈ A (res x n)
⊢ ∀ (ε : ℝ), ε > 0 → ∃ N, ∀ (m : ℕ), m ≥ N → ∀ (n : ℕ), n ≥ N → dist (u m) (u n) < ε

tactic: cases' hdiam.dist_lt _ ε_pos x with n hn
state_before: β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
x : ℕ → β
u : ℕ → α
hu : ∀ (n : ℕ), u n ∈ A (res x n)
umem : ∀ (n m : ℕ), n ≤ m → u m ∈ A (res x n)
ε : ℝ
ε_pos : ε > 0
⊢ ∃ N, ∀ (m : ℕ), m ≥ N → ∀ (n : ℕ), n ≥ N → dist (u m) (u n) < ε

tactic: use n
state_before: case intro
β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
x : ℕ → β
u : ℕ → α
hu : ∀ (n : ℕ), u n ∈ A (res x n)
umem : ∀ (n m : ℕ), n ≤ m → u m ∈ A (res x n)
ε : ℝ
ε_pos : ε > 0
n : ℕ
hn : ∀ (y : α), y ∈ A (res x n) → ∀ (z : α), z ∈ A (res x n) → dist y z < ε
⊢ ∃ N, ∀ (m : ℕ), m ≥ N → ∀ (n : ℕ), n ≥ N → dist (u m) (u n) < ε

tactic: intro m₀ hm₀ m₁ hm₁
state_before: case intro
β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
x : ℕ → β
u : ℕ → α
hu : ∀ (n : ℕ), u n ∈ A (res x n)
umem : ∀ (n m : ℕ), n ≤ m → u m ∈ A (res x n)
ε : ℝ
ε_pos : ε > 0
n : ℕ
hn : ∀ (y : α), y ∈ A (res x n) → ∀ (z : α), z ∈ A (res x n) → dist y z < ε
⊢ ∀ (m : ℕ), m ≥ n → ∀ (n_1 : ℕ), n_1 ≥ n → dist (u m) (u n_1) < ε

tactic: apply hn <;> apply umem <;> assumption
state_before: case intro
β : Type u_2
α : Type u_1
A : List β → Set α
inst✝¹ : PseudoMetricSpace α
inst✝ : CompleteSpace α
hdiam : VanishingDiam A
hanti : ClosureAntitone A
hnonempty : ∀ (l : List β), Set.Nonempty (A l)
x : ℕ → β
u : ℕ → α
hu : ∀ (n : ℕ), u n ∈ A (res x n)
umem : ∀ (n m : ℕ), n ≤ m → u m ∈ A (res x n)
ε : ℝ
ε_pos : ε > 0
n : ℕ
hn : ∀ (y : α), y ∈ A (res x n) → ∀ (z : α), z ∈ A (res x n) → dist y z < ε
m₀ : ℕ
hm₀ : m₀ ≥ n
m₁ : ℕ
hm₁ : m₁ ≥ n
⊢ dist (u m₀) (u m₁) < ε