Theorem: IsClosed.upperClosure_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' : BddBelow s
⊢ IsClosed ↑(upperClosure 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' : BddBelow s
val✝ : Fintype ι
⊢ IsClosed ↑(upperClosure 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' : BddBelow s
val✝ : Fintype ι
⊢ IsClosed ↑(upperClosure 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' : BddBelow s
val✝ : Fintype ι
f : ℕ → ι → ℝ
x : ι → ℝ
hf : ∀ (n : ℕ), f n ∈ ↑(upperClosure s)
hx : Filter.Tendsto f Filter.atTop (nhds x)
⊢ x ∈ ↑(upperClosure 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' : BddBelow s
val✝ : Fintype ι
f : ℕ → ι → ℝ
x : ι → ℝ
hf : ∀ (n : ℕ), f n ∈ ↑(upperClosure s)
hx : Filter.Tendsto f Filter.atTop (nhds x)
⊢ x ∈ ↑(upperClosure 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' : BddBelow s
val✝ : Fintype ι
f : ℕ → ι → ℝ
x : ι → ℝ
hx : Filter.Tendsto f Filter.atTop (nhds x)
g : ℕ → ι → ℝ
hg : ∀ (n : ℕ), g n ∈ s
hgf : ∀ (n : ℕ), g n ≤ f n
⊢ x ∈ ↑(upperClosure s)
tactic: choose g hg hgf 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' : BddBelow s
val✝ : Fintype ι
f : ℕ → ι → ℝ
x : ι → ℝ
hx : Filter.Tendsto f Filter.atTop (nhds x)
g : ℕ → ι → ℝ
hg : ∀ (n : ℕ), g n ∈ s
hgf : ∀ (n : ℕ), g n ≤ f n
⊢ x ∈ ↑(upperClosure 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' : BddBelow s
val✝ : Fintype ι
f : ℕ → ι → ℝ
x : ι → ℝ
hx : Filter.Tendsto f Filter.atTop (nhds x)
g : ℕ → ι → ℝ
hg : ∀ (n : ℕ), g n ∈ s
hgf : ∀ (n : ℕ), g n ≤ f n
a : ι → ℝ
ha : a ∈ upperBounds (range f)
⊢ x ∈ ↑(upperClosure s)
tactic: obtain ⟨a, ha⟩ := hx.bddAbove_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' : BddBelow s
val✝ : Fintype ι
f : ℕ → ι → ℝ
x : ι → ℝ
hx : Filter.Tendsto f Filter.atTop (nhds x)
g : ℕ → ι → ℝ
hg : ∀ (n : ℕ), g n ∈ s
hgf : ∀ (n : ℕ), g n ≤ f n
a : ι → ℝ
ha : a ∈ upperBounds (range f)
⊢ x ∈ ↑(upperClosure 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' : BddBelow s
val✝ : Fintype ι
f : ℕ → ι → ℝ
x : ι → ℝ
hx : Filter.Tendsto f Filter.atTop (nhds x)
g : ℕ → ι → ℝ
hg : ∀ (n : ℕ), g n ∈ s
hgf : ∀ (n : ℕ), g n ≤ f n
a : ι → ℝ
ha : a ∈ upperBounds (range f)
b : ι → ℝ
hb : b ∈ closure (s ∩ Iic a)
φ : ℕ → ℕ
hφ : StrictMono φ
hbf : Filter.Tendsto (g ∘ φ) Filter.atTop (nhds b)
⊢ x ∈ ↑(upperClosure s)
tactic: obtain ⟨b, hb, φ, hφ, hbf⟩ := tendsto_subseq_of_bounded (hs'.isBounded_inter bddAbove_Iic) fun n ↦
    ⟨hg n, (hgf _).trans <| ha <| mem_range_self _⟩
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' : BddBelow s
val✝ : Fintype ι
f : ℕ → ι → ℝ
x : ι → ℝ
hx : Filter.Tendsto f Filter.atTop (nhds x)
g : ℕ → ι → ℝ
hg : ∀ (n : ℕ), g n ∈ s
hgf : ∀ (n : ℕ), g n ≤ f n
a : ι → ℝ
ha : a ∈ upperBounds (range f)
b : ι → ℝ
hb : b ∈ closure (s ∩ Iic a)
φ : ℕ → ℕ
hφ : StrictMono φ
hbf : Filter.Tendsto (g ∘ φ) Filter.atTop (nhds b)
⊢ x ∈ ↑(upperClosure s)
state_after: no goals
tactic: exact ⟨b, closure_minimal inter_subset_left hs hb,
    le_of_tendsto_of_tendsto' hbf (hx.comp hφ.tendsto_atTop) fun _ ↦ hgf _⟩