-- Mathlib/Analysis/NormedSpace/HahnBanach/Separation.lean
theorem iInter_halfSpaces_eq (hs₁ : Convex ℝ s) (hs₂ : IsClosed s) :
    ⋂ l : E →L[ℝ] ℝ, { x | ∃ y ∈ s, l x ≤ l y } = s

Proof state:
E : Type u_2
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : Module ℝ E
s : Set E
inst✝² : IsTopologicalAddGroup E
inst✝¹ : ContinuousSMul ℝ E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s
hs₂ : IsClosed s
⊢ {x | ∀ (i : E →L[ℝ] ℝ), ∃ y ∈ s, i x ≤ i y} = s

Tactic:
refine Set.Subset.antisymm (fun x hx => ?_) fun x hx l => ⟨x, hx, le_rfl⟩

Result:
E : Type u_2
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : Module ℝ E
s : Set E
inst✝² : IsTopologicalAddGroup E
inst✝¹ : ContinuousSMul ℝ E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s
hs₂ : IsClosed s
x : E
hx : x ∈ {x | ∀ (i : E →L[ℝ] ℝ), ∃ y ∈ s, i x ≤ i y}
⊢ x ∈ s

Proof state:
case intro.intro.intro
E : Type u_2
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : Module ℝ E
s✝ : Set E
inst✝² : IsTopologicalAddGroup E
inst✝¹ : ContinuousSMul ℝ E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s✝
hs₂ : IsClosed s✝
x : E
hx : x ∈ {x | ∀ (i : E →L[ℝ] ℝ), ∃ y ∈ s✝, i x ≤ i y}
h : x ∉ s✝
l : E →L[ℝ] ℝ
s : ℝ
hlA : ∀ a ∈ s✝, l a < s
hl : s < l x
⊢ False

Tactic:
obtain ⟨y, hy, hxy⟩ := hx l

Result:
case intro.intro.intro.intro.intro
E : Type u_2
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : Module ℝ E
s✝ : Set E
inst✝² : IsTopologicalAddGroup E
inst✝¹ : ContinuousSMul ℝ E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s✝
hs₂ : IsClosed s✝
x : E
hx : x ∈ {x | ∀ (i : E →L[ℝ] ℝ), ∃ y ∈ s✝, i x ≤ i y}
h : x ∉ s✝
l : E →L[ℝ] ℝ
s : ℝ
hlA : ∀ a ∈ s✝, l a < s
hl : s < l x
y : E
hy : y ∈ s✝
hxy : l x ≤ l y
⊢ False

Proof state:
E : Type u_2
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : Module ℝ E
s : Set E
inst✝² : IsTopologicalAddGroup E
inst✝¹ : ContinuousSMul ℝ E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s
hs₂ : IsClosed s
x : E
hx : x ∈ {x | ∀ (i : E →L[ℝ] ℝ), ∃ y ∈ s, i x ≤ i y}
⊢ x ∈ s

Tactic:
by_contra h

Result:
E : Type u_2
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : Module ℝ E
s : Set E
inst✝² : IsTopologicalAddGroup E
inst✝¹ : ContinuousSMul ℝ E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s
hs₂ : IsClosed s
x : E
hx : x ∈ {x | ∀ (i : E →L[ℝ] ℝ), ∃ y ∈ s, i x ≤ i y}
h : x ∉ s
⊢ False

Proof state:
E : Type u_2
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : Module ℝ E
s : Set E
inst✝² : IsTopologicalAddGroup E
inst✝¹ : ContinuousSMul ℝ E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s
hs₂ : IsClosed s
x : E
hx : x ∈ {x | ∀ (i : E →L[ℝ] ℝ), ∃ y ∈ s, i x ≤ i y}
h : x ∉ s
⊢ False

Tactic:
obtain ⟨l, s, hlA, hl⟩ := geometric_hahn_banach_closed_point hs₁ hs₂ h

Result:
case intro.intro.intro
E : Type u_2
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : Module ℝ E
s✝ : Set E
inst✝² : IsTopologicalAddGroup E
inst✝¹ : ContinuousSMul ℝ E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s✝
hs₂ : IsClosed s✝
x : E
hx : x ∈ {x | ∀ (i : E →L[ℝ] ℝ), ∃ y ∈ s✝, i x ≤ i y}
h : x ∉ s✝
l : E →L[ℝ] ℝ
s : ℝ
hlA : ∀ a ∈ s✝, l a < s
hl : s < l x
⊢ False

Proof state:
case intro.intro.intro.intro.intro
E : Type u_2
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : Module ℝ E
s✝ : Set E
inst✝² : IsTopologicalAddGroup E
inst✝¹ : ContinuousSMul ℝ E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s✝
hs₂ : IsClosed s✝
x : E
hx : x ∈ {x | ∀ (i : E →L[ℝ] ℝ), ∃ y ∈ s✝, i x ≤ i y}
h : x ∉ s✝
l : E →L[ℝ] ℝ
s : ℝ
hlA : ∀ a ∈ s✝, l a < s
hl : s < l x
y : E
hy : y ∈ s✝
hxy : l x ≤ l y
⊢ False

Tactic:
exact ((hxy.trans_lt (hlA y hy)).trans hl).not_le le_rfl

Result:
no goals

Proof state:
E : Type u_2
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : Module ℝ E
s : Set E
inst✝² : IsTopologicalAddGroup E
inst✝¹ : ContinuousSMul ℝ E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s
hs₂ : IsClosed s
⊢ ⋂ l, {x | ∃ y ∈ s, l x ≤ l y} = s

Tactic:
rw [Set.iInter_setOf]

Result:
E : Type u_2
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : Module ℝ E
s : Set E
inst✝² : IsTopologicalAddGroup E
inst✝¹ : ContinuousSMul ℝ E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s
hs₂ : IsClosed s
⊢ {x | ∀ (i : E →L[ℝ] ℝ), ∃ y ∈ s, i x ≤ i y} = s