Theorem: geometric_hahn_banach_compact_closed
File: Mathlib/Analysis/NormedSpace/HahnBanach/Separation.lean

tactic: obtain rfl | hs := s.eq_empty_or_nonempty
state_before: 𝕜 : Type ?u.82757
E : Type u_1
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : TopologicalAddGroup E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
s t : Set E
x y : E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s
hs₂ : IsCompact s
ht₁ : Convex ℝ t
ht₂ : IsClosed t
disj : Disjoint s t
⊢ ∃ f u v, (∀ (a : E), a ∈ s → ↑f a < u) ∧ u < v ∧ ∀ (b : E), b ∈ t → v < ↑f b

tactic: obtain rfl | _ht := t.eq_empty_or_nonempty
state_before: case inr
𝕜 : Type ?u.82757
E : Type u_1
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : TopologicalAddGroup E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
s t : Set E
x y : E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s
hs₂ : IsCompact s
ht₁ : Convex ℝ t
ht₂ : IsClosed t
disj : Disjoint s t
hs : Set.Nonempty s
⊢ ∃ f u v, (∀ (a : E), a ∈ s → ↑f a < u) ∧ u < v ∧ ∀ (b : E), b ∈ t → v < ↑f b

tactic: obtain ⟨U, V, hU, hV, hU₁, hV₁, sU, tV, disj'⟩ := disj.exists_open_convexes hs₁ hs₂ ht₁ ht₂
state_before: case inr.inr
𝕜 : Type ?u.82757
E : Type u_1
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : TopologicalAddGroup E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
s t : Set E
x y : E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s
hs₂ : IsCompact s
ht₁ : Convex ℝ t
ht₂ : IsClosed t
disj : Disjoint s t
hs : Set.Nonempty s
_ht : Set.Nonempty t
⊢ ∃ f u v, (∀ (a : E), a ∈ s → ↑f a < u) ∧ u < v ∧ ∀ (b : E), b ∈ t → v < ↑f b

tactic: obtain ⟨f, u, hf₁, hf₂⟩ := geometric_hahn_banach_open_open hU₁ hU hV₁ hV disj'
state_before: case inr.inr.intro.intro.intro.intro.intro.intro.intro.intro
𝕜 : Type ?u.82757
E : Type u_1
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : TopologicalAddGroup E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
s t : Set E
x y : E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s
hs₂ : IsCompact s
ht₁ : Convex ℝ t
ht₂ : IsClosed t
disj : Disjoint s t
hs : Set.Nonempty s
_ht : Set.Nonempty t
U V : Set E
hU : IsOpen U
hV : IsOpen V
hU₁ : Convex ℝ U
hV₁ : Convex ℝ V
sU : s ⊆ U
tV : t ⊆ V
disj' : Disjoint U V
⊢ ∃ f u v, (∀ (a : E), a ∈ s → ↑f a < u) ∧ u < v ∧ ∀ (b : E), b ∈ t → v < ↑f b

tactic: obtain ⟨x, hx₁, hx₂⟩ := hs₂.exists_forall_ge hs f.continuous.continuousOn
state_before: case inr.inr.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
𝕜 : Type ?u.82757
E : Type u_1
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : TopologicalAddGroup E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
s t : Set E
x y : E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s
hs₂ : IsCompact s
ht₁ : Convex ℝ t
ht₂ : IsClosed t
disj : Disjoint s t
hs : Set.Nonempty s
_ht : Set.Nonempty t
U V : Set E
hU : IsOpen U
hV : IsOpen V
hU₁ : Convex ℝ U
hV₁ : Convex ℝ V
sU : s ⊆ U
tV : t ⊆ V
disj' : Disjoint U V
f : E →L[ℝ] ℝ
u : ℝ
hf₁ : ∀ (a : E), a ∈ U → ↑f a < u
hf₂ : ∀ (b : E), b ∈ V → u < ↑f b
⊢ ∃ f u v, (∀ (a : E), a ∈ s → ↑f a < u) ∧ u < v ∧ ∀ (b : E), b ∈ t → v < ↑f b

tactic: have : f x < u := hf₁ x (sU hx₁)
state_before: case inr.inr.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
𝕜 : Type ?u.82757
E : Type u_1
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : TopologicalAddGroup E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
s t : Set E
x✝ y : E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s
hs₂ : IsCompact s
ht₁ : Convex ℝ t
ht₂ : IsClosed t
disj : Disjoint s t
hs : Set.Nonempty s
_ht : Set.Nonempty t
U V : Set E
hU : IsOpen U
hV : IsOpen V
hU₁ : Convex ℝ U
hV₁ : Convex ℝ V
sU : s ⊆ U
tV : t ⊆ V
disj' : Disjoint U V
f : E →L[ℝ] ℝ
u : ℝ
hf₁ : ∀ (a : E), a ∈ U → ↑f a < u
hf₂ : ∀ (b : E), b ∈ V → u < ↑f b
x : E
hx₁ : x ∈ s
hx₂ : ∀ (y : E), y ∈ s → ↑f y ≤ ↑f x
⊢ ∃ f u v, (∀ (a : E), a ∈ s → ↑f a < u) ∧ u < v ∧ ∀ (b : E), b ∈ t → v < ↑f b

tactic: exact
  ⟨f, (f x + u) / 2, u, fun a ha => by linarith [hx₂ a ha], by linarith, fun b hb =>
    hf₂ b (tV hb)⟩
state_before: case inr.inr.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
𝕜 : Type ?u.82757
E : Type u_1
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : TopologicalAddGroup E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
s t : Set E
x✝ y : E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s
hs₂ : IsCompact s
ht₁ : Convex ℝ t
ht₂ : IsClosed t
disj : Disjoint s t
hs : Set.Nonempty s
_ht : Set.Nonempty t
U V : Set E
hU : IsOpen U
hV : IsOpen V
hU₁ : Convex ℝ U
hV₁ : Convex ℝ V
sU : s ⊆ U
tV : t ⊆ V
disj' : Disjoint U V
f : E →L[ℝ] ℝ
u : ℝ
hf₁ : ∀ (a : E), a ∈ U → ↑f a < u
hf₂ : ∀ (b : E), b ∈ V → u < ↑f b
x : E
hx₁ : x ∈ s
hx₂ : ∀ (y : E), y ∈ s → ↑f y ≤ ↑f x
this : ↑f x < u
⊢ ∃ f u v, (∀ (a : E), a ∈ s → ↑f a < u) ∧ u < v ∧ ∀ (b : E), b ∈ t → v < ↑f b

tactic: exact ⟨0, -2, -1, by simp, by norm_num, fun b _hb => by norm_num⟩
state_before: case inl
𝕜 : Type ?u.82757
E : Type u_1
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : TopologicalAddGroup E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
t : Set E
x y : E
inst✝ : LocallyConvexSpace ℝ E
ht₁ : Convex ℝ t
ht₂ : IsClosed t
hs₁ : Convex ℝ ∅
hs₂ : IsCompact ∅
disj : Disjoint ∅ t
⊢ ∃ f u v, (∀ (a : E), a ∈ ∅ → ↑f a < u) ∧ u < v ∧ ∀ (b : E), b ∈ t → v < ↑f b

tactic: simp
state_before: 𝕜 : Type ?u.82757
E : Type u_1
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : TopologicalAddGroup E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
t : Set E
x y : E
inst✝ : LocallyConvexSpace ℝ E
ht₁ : Convex ℝ t
ht₂ : IsClosed t
hs₁ : Convex ℝ ∅
hs₂ : IsCompact ∅
disj : Disjoint ∅ t
⊢ ∀ (a : E), a ∈ ∅ → ↑0 a < -2

tactic: norm_num
state_before: 𝕜 : Type ?u.82757
E : Type u_1
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : TopologicalAddGroup E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
t : Set E
x y : E
inst✝ : LocallyConvexSpace ℝ E
ht₁ : Convex ℝ t
ht₂ : IsClosed t
hs₁ : Convex ℝ ∅
hs₂ : IsCompact ∅
disj : Disjoint ∅ t
⊢ -2 < -1

tactic: norm_num
state_before: 𝕜 : Type ?u.82757
E : Type u_1
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : TopologicalAddGroup E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
t : Set E
x y : E
inst✝ : LocallyConvexSpace ℝ E
ht₁ : Convex ℝ t
ht₂ : IsClosed t
hs₁ : Convex ℝ ∅
hs₂ : IsCompact ∅
disj : Disjoint ∅ t
b : E
_hb : b ∈ t
⊢ -1 < ↑0 b

tactic: exact ⟨0, 1, 2, fun a _ha => by norm_num, by norm_num, by simp⟩
state_before: case inr.inl
𝕜 : Type ?u.82757
E : Type u_1
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : TopologicalAddGroup E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
s : Set E
x y : E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s
hs₂ : IsCompact s
hs : Set.Nonempty s
ht₁ : Convex ℝ ∅
ht₂ : IsClosed ∅
disj : Disjoint s ∅
⊢ ∃ f u v, (∀ (a : E), a ∈ s → ↑f a < u) ∧ u < v ∧ ∀ (b : E), b ∈ ∅ → v < ↑f b

tactic: norm_num
state_before: 𝕜 : Type ?u.82757
E : Type u_1
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : TopologicalAddGroup E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
s : Set E
x y : E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s
hs₂ : IsCompact s
hs : Set.Nonempty s
ht₁ : Convex ℝ ∅
ht₂ : IsClosed ∅
disj : Disjoint s ∅
a : E
_ha : a ∈ s
⊢ ↑0 a < 1

tactic: norm_num
state_before: 𝕜 : Type ?u.82757
E : Type u_1
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : TopologicalAddGroup E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
s : Set E
x y : E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s
hs₂ : IsCompact s
hs : Set.Nonempty s
ht₁ : Convex ℝ ∅
ht₂ : IsClosed ∅
disj : Disjoint s ∅
⊢ 1 < 2

tactic: simp
state_before: 𝕜 : Type ?u.82757
E : Type u_1
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : TopologicalAddGroup E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
s : Set E
x y : E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s
hs₂ : IsCompact s
hs : Set.Nonempty s
ht₁ : Convex ℝ ∅
ht₂ : IsClosed ∅
disj : Disjoint s ∅
⊢ ∀ (b : E), b ∈ ∅ → 2 < ↑0 b

tactic: linarith [hx₂ a ha]
state_before: 𝕜 : Type ?u.82757
E : Type u_1
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : TopologicalAddGroup E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
s t : Set E
x✝ y : E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s
hs₂ : IsCompact s
ht₁ : Convex ℝ t
ht₂ : IsClosed t
disj : Disjoint s t
hs : Set.Nonempty s
_ht : Set.Nonempty t
U V : Set E
hU : IsOpen U
hV : IsOpen V
hU₁ : Convex ℝ U
hV₁ : Convex ℝ V
sU : s ⊆ U
tV : t ⊆ V
disj' : Disjoint U V
f : E →L[ℝ] ℝ
u : ℝ
hf₁ : ∀ (a : E), a ∈ U → ↑f a < u
hf₂ : ∀ (b : E), b ∈ V → u < ↑f b
x : E
hx₁ : x ∈ s
hx₂ : ∀ (y : E), y ∈ s → ↑f y ≤ ↑f x
this : ↑f x < u
a : E
ha : a ∈ s
⊢ ↑f a < (↑f x + u) / 2

tactic: linarith
state_before: 𝕜 : Type ?u.82757
E : Type u_1
inst✝⁵ : TopologicalSpace E
inst✝⁴ : AddCommGroup E
inst✝³ : TopologicalAddGroup E
inst✝² : Module ℝ E
inst✝¹ : ContinuousSMul ℝ E
s t : Set E
x✝ y : E
inst✝ : LocallyConvexSpace ℝ E
hs₁ : Convex ℝ s
hs₂ : IsCompact s
ht₁ : Convex ℝ t
ht₂ : IsClosed t
disj : Disjoint s t
hs : Set.Nonempty s
_ht : Set.Nonempty t
U V : Set E
hU : IsOpen U
hV : IsOpen V
hU₁ : Convex ℝ U
hV₁ : Convex ℝ V
sU : s ⊆ U
tV : t ⊆ V
disj' : Disjoint U V
f : E →L[ℝ] ℝ
u : ℝ
hf₁ : ∀ (a : E), a ∈ U → ↑f a < u
hf₂ : ∀ (b : E), b ∈ V → u < ↑f b
x : E
hx₁ : x ∈ s
hx₂ : ∀ (y : E), y ∈ s → ↑f y ≤ ↑f x
this : ↑f x < u
⊢ (↑f x + u) / 2 < u