Theorem: IsClosed.lowerClosure_pi
File: Mathlib/Analysis/Normed/Order/UpperLower.lean

Proof steps:
state_before: α : Type u_1
ι : Type u_2
inst✝ : Finite ι
s t : Set (ι → ℝ)
a₁ a₂ b₁ b₂ x y : ι → ℝ
δ : ℝ
hs : IsClosed s
hs' : BddAbove s
⊢ IsClosed ↑(lowerClosure s)
state_after: case intro
α : Type u_1
ι : Type u_2
inst✝ : Finite ι
s t : Set (ι → ℝ)
a₁ a₂ b₁ b₂ x y : ι → ℝ
δ : ℝ
hs : IsClosed s
hs' : BddAbove s
val✝ : Fintype ι
⊢ IsClosed ↑(lowerClosure s)
tactic: cases nonempty_fintype ι
state_before: case intro
α : Type u_1
ι : Type u_2
inst✝ : Finite ι
s t : Set (ι → ℝ)
a₁ a₂ b₁ b₂ x y : ι → ℝ
δ : ℝ
hs : IsClosed s
hs' : BddAbove s
val✝ : Fintype ι
⊢ IsClosed ↑(lowerClosure s)
state_after: case intro
α : Type u_1
ι : Type u_2
inst✝ : Finite ι
s t : Set (ι → ℝ)
a₁ a₂ b₁ b₂ x✝ y : ι → ℝ
δ : ℝ
hs : IsClosed s
hs' : BddAbove s
val✝ : Fintype ι
f : ℕ → ι → ℝ
x : ι → ℝ
hf : ∀ (n : ℕ), f n ∈ ↑(lowerClosure s)
hx : Filter.Tendsto f Filter.atTop (nhds x)
⊢ x ∈ ↑(lowerClosure s)
tactic: refine IsSeqClosed.isClosed fun f x hf hx ↦ ?_
state_before: case intro
α : Type u_1
ι : Type u_2
inst✝ : Finite ι
s t : Set (ι → ℝ)
a₁ a₂ b₁ b₂ x✝ y : ι → ℝ
δ : ℝ
hs : IsClosed s
hs' : BddAbove s
val✝ : Fintype ι
f : ℕ → ι → ℝ
x : ι → ℝ
hf : ∀ (n : ℕ), f n ∈ ↑(lowerClosure s)
hx : Filter.Tendsto f Filter.atTop (nhds x)
⊢ x ∈ ↑(lowerClosure s)
state_after: case intro
α : Type u_1
ι : Type u_2
inst✝ : Finite ι
s t : Set (ι → ℝ)
a₁ a₂ b₁ b₂ x✝ y : ι → ℝ
δ : ℝ
hs : IsClosed s
hs' : BddAbove s
val✝ : Fintype ι
f : ℕ → ι → ℝ
x : ι → ℝ
hx : Filter.Tendsto f Filter.atTop (nhds x)
g : ℕ → ι → ℝ
hg : ∀ (n : ℕ), g n ∈ s
hfg : ∀ (n : ℕ), f n ≤ g n
⊢ x ∈ ↑(lowerClosure s)
tactic: choose g hg hfg using hf
state_before: case intro
α : Type u_1
ι : Type u_2
inst✝ : Finite ι
s t : Set (ι → ℝ)
a₁ a₂ b₁ b₂ x✝ y : ι → ℝ
δ : ℝ
hs : IsClosed s
hs' : BddAbove s
val✝ : Fintype ι
f : ℕ → ι → ℝ
x : ι → ℝ
hx : Filter.Tendsto f Filter.atTop (nhds x)
g : ℕ → ι → ℝ
hg : ∀ (n : ℕ), g n ∈ s
hfg : ∀ (n : ℕ), f n ≤ g n
⊢ x ∈ ↑(lowerClosure s)
state_after: case intro
α : Type u_1
ι : Type u_2
inst✝ : Finite ι
s t : Set (ι → ℝ)
a₁ a₂ b₁ b₂ x✝ y : ι → ℝ
δ : ℝ
hs : IsClosed s
hs' : BddAbove s
val✝ : Fintype ι
f : ℕ → ι → ℝ
x : ι → ℝ
hx : Filter.Tendsto f Filter.atTop (nhds x)
g : ℕ → ι → ℝ
hg : ∀ (n : ℕ), g n ∈ s
hfg : ∀ (n : ℕ), f n ≤ g n
this : BoundedGENhdsClass ℝ
⊢ x ∈ ↑(lowerClosure s)
tactic: haveI : BoundedGENhdsClass ℝ := by infer_instance
state_before: case intro
α : Type u_1
ι : Type u_2
inst✝ : Finite ι
s t : Set (ι → ℝ)
a₁ a₂ b₁ b₂ x✝ y : ι → ℝ
δ : ℝ
hs : IsClosed s
hs' : BddAbove s
val✝ : Fintype ι
f : ℕ → ι → ℝ
x : ι → ℝ
hx : Filter.Tendsto f Filter.atTop (nhds x)
g : ℕ → ι → ℝ
hg : ∀ (n : ℕ), g n ∈ s
hfg : ∀ (n : ℕ), f n ≤ g n
this : BoundedGENhdsClass ℝ
⊢ x ∈ ↑(lowerClosure s)
state_after: case intro.intro
α : Type u_1
ι : Type u_2
inst✝ : Finite ι
s t : Set (ι → ℝ)
a₁ a₂ b₁ b₂ x✝ y : ι → ℝ
δ : ℝ
hs : IsClosed s
hs' : BddAbove s
val✝ : Fintype ι
f : ℕ → ι → ℝ
x : ι → ℝ
hx : Filter.Tendsto f Filter.atTop (nhds x)
g : ℕ → ι → ℝ
hg : ∀ (n : ℕ), g n ∈ s
hfg : ∀ (n : ℕ), f n ≤ g n
this : BoundedGENhdsClass ℝ
a : ι → ℝ
ha : a ∈ lowerBounds (range f)
⊢ x ∈ ↑(lowerClosure s)
tactic: obtain ⟨a, ha⟩ := hx.bddBelow_range
state_before: case intro.intro
α : Type u_1
ι : Type u_2
inst✝ : Finite ι
s t : Set (ι → ℝ)
a₁ a₂ b₁ b₂ x✝ y : ι → ℝ
δ : ℝ
hs : IsClosed s
hs' : BddAbove s
val✝ : Fintype ι
f : ℕ → ι → ℝ
x : ι → ℝ
hx : Filter.Tendsto f Filter.atTop (nhds x)
g : ℕ → ι → ℝ
hg : ∀ (n : ℕ), g n ∈ s
hfg : ∀ (n : ℕ), f n ≤ g n
this : BoundedGENhdsClass ℝ
a : ι → ℝ
ha : a ∈ lowerBounds (range f)
⊢ x ∈ ↑(lowerClosure s)
state_after: case intro.intro.intro.intro.intro.intro
α : Type u_1
ι : Type u_2
inst✝ : Finite ι
s t : Set (ι → ℝ)
a₁ a₂ b₁ b₂ x✝ y : ι → ℝ
δ : ℝ
hs : IsClosed s
hs' : BddAbove s
val✝ : Fintype ι
f : ℕ → ι → ℝ
x : ι → ℝ
hx : Filter.Tendsto f Filter.atTop (nhds x)
g : ℕ → ι → ℝ
hg : ∀ (n : ℕ), g n ∈ s
hfg : ∀ (n : ℕ), f n ≤ g n
this : BoundedGENhdsClass ℝ
a : ι → ℝ
ha : a ∈ lowerBounds (range f)
b : ι → ℝ
hb : b ∈ closure (s ∩ Ici a)
φ : ℕ → ℕ
hφ : StrictMono φ
hbf : Filter.Tendsto (g ∘ φ) Filter.atTop (nhds b)
⊢ x ∈ ↑(lowerClosure s)
tactic: obtain ⟨b, hb, φ, hφ, hbf⟩ := tendsto_subseq_of_bounded (hs'.isBounded_inter bddBelow_Ici) fun n ↦
    ⟨hg n, (ha $ mem_range_self _).trans $ hfg _⟩
state_before: case intro.intro.intro.intro.intro.intro
α : Type u_1
ι : Type u_2
inst✝ : Finite ι
s t : Set (ι → ℝ)
a₁ a₂ b₁ b₂ x✝ y : ι → ℝ
δ : ℝ
hs : IsClosed s
hs' : BddAbove s
val✝ : Fintype ι
f : ℕ → ι → ℝ
x : ι → ℝ
hx : Filter.Tendsto f Filter.atTop (nhds x)
g : ℕ → ι → ℝ
hg : ∀ (n : ℕ), g n ∈ s
hfg : ∀ (n : ℕ), f n ≤ g n
this : BoundedGENhdsClass ℝ
a : ι → ℝ
ha : a ∈ lowerBounds (range f)
b : ι → ℝ
hb : b ∈ closure (s ∩ Ici a)
φ : ℕ → ℕ
hφ : StrictMono φ
hbf : Filter.Tendsto (g ∘ φ) Filter.atTop (nhds b)
⊢ x ∈ ↑(lowerClosure s)
state_after: no goals
tactic: exact ⟨b, closure_minimal inter_subset_left hs hb,
    le_of_tendsto_of_tendsto' (hx.comp hφ.tendsto_atTop) hbf fun _ ↦ hfg _⟩