@@ -312,6 +312,7 @@ theorem geometric_hahn_banach_point_point [T1Space E] (hxy : x ≠ y) :
312312 (convex_singleton y) isClosed_singleton (disjoint_singleton.2 hxy)
313313 exact ⟨f, by linarith [hs x rfl, ht y rfl]⟩
314314
315+ /-- A closed convex set is the intersection of halfspaces. -/
315316theorem iInter_halfSpaces_eq (hs₁ : Convex ℝ s) (hs₂ : IsClosed s) :
316317 ⋂ l : StrongDual 𝕜 E, { x | ∃ y ∈ s, re (l x) ≤ re (l y) } = s := by
317318 rw [Set.iInter_setOf]
@@ -321,80 +322,57 @@ theorem iInter_halfSpaces_eq (hs₁ : Convex ℝ s) (hs₂ : IsClosed s) :
321322 obtain ⟨y, hy, hxy⟩ := hx l
322323 exact ((hxy.trans_lt (hlA y hy)).trans hl).false
323324
324- end
325+ /-- A variant of `iInter_halfSpaces_eq`. -/
326+ theorem iInter_halfSpaces_const_eq (hs₁ : Convex ℝ s) (hs₂ : IsClosed s) :
327+ ∃ (L : (sᶜ : Set E) → StrongDual 𝕜 E) (c : (sᶜ : Set E) → ℝ),
328+ ⋂ y, { x | re (L y x) ≤ c y } = s := by
329+ have (y : (sᶜ : Set E)) := geometric_hahn_banach_closed_point (𝕜 := 𝕜) hs₁ hs₂ y.2
330+ choose L c hLc using this
331+ refine ⟨L, c, ?_⟩
332+ rw [iInter_setOf]
333+ refine subset_antisymm (fun x hx => ?_) fun x hx l => ((hLc l).1 x hx).le
334+ by_contra!
335+ simp only [Subtype.forall, mem_compl_iff, mem_setOf_eq] at hx
336+ linarith [(hLc ⟨x, this⟩).2 , hx x this]
337+
338+ /-- A closed convex set with a Lindelöf complement is the intersection of countably many
339+ halfspaces. -/
340+ theorem _root_.IsLindelof.iInter_countable_halfSpaces_const_eq (hs₁ : Convex ℝ s) (hs₂ : IsClosed s)
341+ (hs₃ : IsLindelof sᶜ) : ∃ (u : Set (sᶜ : Set E)) (L : u → StrongDual 𝕜 E) (c : u → ℝ),
342+ u.Countable ∧ ⋂ y, { x | re (L y x) ≤ c y } = s := by
343+ obtain ⟨L, c, hLc⟩ := iInter_halfSpaces_const_eq (𝕜 := 𝕜) hs₁ hs₂
344+ let t : (sᶜ : Set E) → Set E := fun y => { x | re (L y x) ≤ c y }
345+ have htc y : IsClosed (t y) := by
346+ suffices t y = re ∘ (L y) ⁻¹' Iic (c y) from by
347+ simpa [this] using IsClosed.preimage (by fun_prop) isClosed_Iic
348+ grind
349+ have hst : sᶜ ∩ ⋂ y, t y = ∅ := by grind
350+ obtain ⟨u, hu, hu'⟩ := hs₃.elim_countable_subfamily_closed t htc hst
351+ refine ⟨u, fun y => L y, fun y => c y, hu, subset_antisymm (fun z hz => ?_) ?_⟩
352+ · by_contra!
353+ have : z ∈ (∅ : Set E) := by
354+ simp only [← hu', biInter_eq_iInter]
355+ exact ⟨this, fun i hi => hz i hi⟩
356+ grind
357+ · rw (config := {occs := .pos [1 ]}) [← hLc]
358+ have : u ⊆ (univ : Set (sᶜ : Set E)) := by grind
359+ have := biInter_subset_biInter_left (t := t) this
360+ simp only [t, biInter_eq_iInter] at this
361+ convert this
362+ simp
363+
364+ /-- `IsLindelof.iInter_countable_halfSpaces_const_eq` for product spaces. -/
365+ theorem _root_.IsLindelof.iInter_nat_halfSpaces_const_eq {F : Type *} [AddCommGroup F] [Module ℝ F]
366+ [TopologicalSpace F] [Module 𝕜 F] [IsScalarTower ℝ 𝕜 F] [IsTopologicalAddGroup F]
367+ [ContinuousSMul 𝕜 F] [LocallyConvexSpace ℝ F] {s : Set (E × F)} (hs₁ : Convex ℝ s)
368+ (hs₂ : IsClosed s) (hs₃ : IsLindelof sᶜ) :
369+ ∃ (u : Set (sᶜ : Set (E × F))) (L : u → StrongDual 𝕜 E) (T : u → StrongDual 𝕜 F) (c : u → ℝ),
370+ u.Countable ∧ ⋂ y, { x | re (L y x.1 ) + re (T y x.2 ) ≤ c y } = s := by
371+ obtain ⟨u, LT, c, eq1, eq2⟩ := hs₃.iInter_countable_halfSpaces_const_eq (𝕜 := 𝕜) hs₁ hs₂
372+ refine ⟨u, fun i ↦ (LT i).comp (.inl 𝕜 E F), fun i ↦ (LT i).comp (.inr 𝕜 E F), c, eq1, ?_⟩
373+ convert eq2
374+ simp [← map_add]
325375
326- section Countable
327-
328- variable [NormedAddCommGroup E] [NormedSpace ℝ E] [Module 𝕜 E] [ContinuousSMul 𝕜 E]
329- [SecondCountableTopology E]
330-
331- /-- A closed convex set `s` is the intersection of countably many half spaces in a separable Banach
332- space. Moreover, these halfspaces are all nontrivial if `s` is nonempty and not equal to `univ`. -/
333- theorem iInter_nat_halfSpaces_eq (hs₁ : Convex ℝ s) (hs₂ : IsClosed s) :
334- ∃ (L : ℕ → E →L[𝕜] 𝕜) (c : ℕ → ℝ),
335- ⋂ (i : ℕ), {x | c i ≤ re (L i x)} = s ∧
336- (s.Nonempty → s ≠ univ → ∀ i, ∃ x, re (L i x) ≠ 0 ) := by
337- obtain rfl | hs₃ := s.eq_empty_or_nonempty
338- · exact ⟨0 , 1 , by simp [iInter_eq_empty_iff]⟩
339- obtain rfl | hs_univ := eq_or_ne s univ
340- · exact ⟨0 , 0 , by simp [nonempty_iff_ne_empty]⟩
341- -- choose a countable dense set of sᶜ
342- obtain ⟨f, hfmem, hf⟩ : ∃ f : ℕ → E, (∀ i, f i ∈ sᶜ) ∧ sᶜ ⊆ closure (range f) := by
343- have : Nonempty ↑sᶜ := (nonempty_compl.mpr hs_univ).to_subtype
344- refine ⟨fun i ↦ (denseSeq ↑sᶜ i : E), by simp, fun x hx ↦ ?_⟩
345- change ↑(Subtype.mk x hx) ∈ closure (range (((↑) : ↑sᶜ → E) ∘ _))
346- rw [range_comp, ← closure_subtype, (denseRange_denseSeq ↑sᶜ).closure_range]
347- trivial
348- -- for each point x ∈ sᶜ, use hahn banach to find a hyperplane that separates s and an open ball
349- -- around x
350- have φc i : ∃ (φ : E →L[𝕜] 𝕜) (c : ℝ),
351- (∀ a ∈ ball (f i) (infDist (f i) s), re (φ a) < c) ∧ ∀ b ∈ s, c ≤ re (φ b) :=
352- geometric_hahn_banach_open (convex_ball _ _) isOpen_ball hs₁ disjoint_ball_infDist
353- choose L c hLc using φc
354- refine ⟨L, c, ?_, fun _ _ j ↦ ?_⟩
355- · ext x
356- simp only [mem_iInter, mem_setOf_eq]
357- refine ⟨fun hx ↦ ?_, fun hx i ↦ (hLc i).2 x hx⟩
358- contrapose! hx
359- have pos : 0 < infDist x s / 2 := by
360- refine div_pos ?_ (by positivity)
361- exact (IsClosed.notMem_iff_infDist_pos hs₂ hs₃).mp hx
362- obtain ⟨_, ⟨i, rfl⟩, hi⟩ := Metric.mem_closure_iff.mp (hf hx) _ pos
363- refine ⟨i, (hLc i).1 _ ?_⟩
364- have hfix : infDist (f i) s ≥ infDist x s / 2 := by
365- by_contra! hp
366- obtain ⟨y, hy1, hy2⟩ := (infDist_lt_iff hs₃).mp hp
367- have hxy : dist x y < infDist x s := by linarith [dist_triangle x (f i) y]
368- exact notMem_of_dist_lt_infDist hxy hy1
369- rw [mem_ball]
370- linarith
371- · obtain hl | hr := le_or_gt (c j) 0
372- · use f j
373- have : re (L j (f j)) < c j := (hLc j).1 _ <| mem_ball_self <|
374- (IsClosed.notMem_iff_infDist_pos hs₂ hs₃).mp (hfmem j)
375- linarith
376- · obtain ⟨x, hxs⟩ := hs₃
377- use x
378- have : c j ≤ re (L j x) := (hLc j).2 _ hxs
379- linarith
380-
381- /-- `iInter_nat_halfSpaces_eq` for product spaces. -/
382- theorem iInter_nat_halfSpaces_eq_of_prod {F : Type *} {s : Set (E × F)} [NormedAddCommGroup F]
383- [NormedSpace ℝ F] [Module 𝕜 F] [ContinuousSMul 𝕜 F] [SecondCountableTopology F]
384- (hs₁ : Convex ℝ s) (hs₂ : IsClosed s) :
385- ∃ (L : ℕ → E →L[𝕜] 𝕜) (T : ℕ → F →L[𝕜] 𝕜) (c : ℕ → ℝ),
386- ⋂ (i : ℕ), {(x, y) | c i ≤ re (L i x) + re (T i y)} = s
387- ∧ (s.Nonempty → s ≠ univ → ∀ i, ∃ (x : E) (y : F), re (L i x) + re (T i y) ≠ 0 ) := by
388- obtain ⟨LT, c, eq1, eq2⟩ := iInter_nat_halfSpaces_eq (𝕜 := 𝕜) hs₁ hs₂
389- refine ⟨fun i ↦ (LT i).comp (.inl 𝕜 E F), fun i ↦ (LT i).comp (.inr 𝕜 E F), c, ?_,
390- fun hs₃ hsne i ↦ ?_⟩
391- · rw [← eq1]
392- refine iInter_congr fun i ↦ ?_
393- ext
394- simp [← map_add]
395- · obtain ⟨z, hz⟩ := eq2 hs₃ hsne i
396- exact ⟨z.1 , z.2 , by simpa [← map_add] using hz⟩
397-
398- end Countable
376+ end
399377
400378end RCLike
0 commit comments