From 1ffd04c075f81c09407a4be8dda6a21a232d30e2 Mon Sep 17 00:00:00 2001 From: mcdoll Date: Tue, 29 Mar 2022 09:36:08 +0000 Subject: [PATCH] feat(analysis/locally_convex): add balanced hull and core (#12537) --- .../locally_convex/balanced_core_hull.lean | 246 ++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100644 src/analysis/locally_convex/balanced_core_hull.lean diff --git a/src/analysis/locally_convex/balanced_core_hull.lean b/src/analysis/locally_convex/balanced_core_hull.lean new file mode 100644 index 0000000000000..4074c545fcf0c --- /dev/null +++ b/src/analysis/locally_convex/balanced_core_hull.lean @@ -0,0 +1,246 @@ +/- +Copyright (c) 2022 Moritz Doll. All rights reserved. +Released under Apache 2.0 license as described in the file LICENSE. +Authors: Moritz Doll +-/ +import analysis.seminorm +import order.closure + +/-! +# Balanced Core and Balanced Hull + +## Main definitions + +* `balanced_core`: the largest balanced subset of a set `s`. +* `balanced_hull`: the smallest balanced superset of a set `s`. + +## Main statements + +* `balanced_core_eq_Inter`: Characterization of the balanced core as an intersection over subsets. + + +## Implementation details + +The balanced core and hull are implemented differently: for the core we take the obvious definition +of the union over all balanced sets that are contained in `s`, whereas for the hull, we take the +union over `r β€’ s`, for `r` the scalars with `βˆ₯rβˆ₯ ≀ 1`. We show that `balanced_hull` has the +defining properties of a hull in `balanced.hull_minimal` and `subset_balanced_hull`. +For the core we need slightly stronger assumptions to obtain a characterization as an intersection, +this is `balanced_core_eq_Inter`. + +## References + +* [Bourbaki, *Topological Vector Spaces*][bourbaki1987] + +## Tags + +balanced +-/ + + +open set +open_locale pointwise + +variables {π•œ E ΞΉ : Type*} + +section balanced_hull + +section semi_normed_ring +variables [semi_normed_ring π•œ] + +section has_scalar +variables [has_scalar π•œ E] + +variables (π•œ) + +/-- The largest balanced subset of `s`.-/ +def balanced_core (s : set E) := ⋃₀ {t : set E | balanced π•œ t ∧ t βŠ† s} + +/-- Helper definition to prove `balanced_core_eq_Inter`-/ +def balanced_core_aux (s : set E) := β‹‚ (r : π•œ) (hr : 1 ≀ βˆ₯rβˆ₯), r β€’ s + +/-- The smallest balanced superset of `s`.-/ +def balanced_hull (s : set E) := ⋃ (r : π•œ) (hr : βˆ₯rβˆ₯ ≀ 1), r β€’ s + +variables {π•œ} + +lemma balanced_core_subset (s : set E) : balanced_core π•œ s βŠ† s := +begin + refine sUnion_subset (Ξ» t ht, _), + simp only [mem_set_of_eq] at ht, + exact ht.2, +end + +lemma balanced_core_mem_iff {s : set E} {x : E} : x ∈ balanced_core π•œ s ↔ + βˆƒ t : set E, balanced π•œ t ∧ t βŠ† s ∧ x ∈ t := +by simp_rw [balanced_core, mem_sUnion, mem_set_of_eq, exists_prop, and_assoc] + +lemma smul_balanced_core_subset (s : set E) {a : π•œ} (ha : βˆ₯aβˆ₯ ≀ 1) : + a β€’ balanced_core π•œ s βŠ† balanced_core π•œ s := +begin + rw subset_def, + intros x hx, + rw mem_smul_set at hx, + rcases hx with ⟨y, hy, hx⟩, + rw balanced_core_mem_iff at hy, + rcases hy with ⟨t, ht1, ht2, hy⟩, + rw ←hx, + refine ⟨t, _, ht1 a ha (smul_mem_smul_set hy)⟩, + rw mem_set_of_eq, + exact ⟨ht1, ht2⟩, +end + +lemma balanced_core_balanced (s : set E) : balanced π•œ (balanced_core π•œ s) := +Ξ» _, smul_balanced_core_subset s + +/-- The balanced core of `t` is maximal in the sense that it contains any balanced subset +`s` of `t`.-/ +lemma balanced.subset_core_of_subset {s t : set E} (hs : balanced π•œ s) (h : s βŠ† t): + s βŠ† balanced_core π•œ t := +begin + refine subset_sUnion_of_mem _, + rw [mem_set_of_eq], + exact ⟨hs, h⟩, +end + +lemma balanced_core_aux_mem_iff (s : set E) (x : E) : x ∈ balanced_core_aux π•œ s ↔ + βˆ€ (r : π•œ) (hr : 1 ≀ βˆ₯rβˆ₯), x ∈ r β€’ s := +by rw [balanced_core_aux, set.mem_Interβ‚‚] + +lemma balanced_hull_mem_iff (s : set E) (x : E) : x ∈ balanced_hull π•œ s ↔ + βˆƒ (r : π•œ) (hr : βˆ₯rβˆ₯ ≀ 1), x ∈ r β€’ s := +by rw [balanced_hull, set.mem_Unionβ‚‚] + +/-- The balanced core of `s` is minimal in the sense that it is contained in any balanced superset +`t` of `s`. -/ +lemma balanced.hull_subset_of_subset {s t : set E} (ht : balanced π•œ t) (h : s βŠ† t) : + balanced_hull π•œ s βŠ† t := +begin + intros x hx, + rcases (balanced_hull_mem_iff _ _).mp hx with ⟨r, hr, hx⟩, + rcases mem_smul_set.mp hx with ⟨y, hy, hx⟩, + rw ←hx, + exact balanced_mem ht (h hy) hr, +end + +end has_scalar + +section add_comm_monoid + +variables [add_comm_monoid E] [module π•œ E] + +lemma balanced_core_nonempty_iff {s : set E} : (balanced_core π•œ s).nonempty ↔ (0 : E) ∈ s := +begin + split; intro h, + { cases h with x hx, + have h' : balanced π•œ (balanced_core π•œ s) := balanced_core_balanced s, + have h'' := h' 0 (has_le.le.trans norm_zero.le zero_le_one), + refine mem_of_subset_of_mem (subset.trans h'' (balanced_core_subset s)) _, + exact mem_smul_set.mpr ⟨x, hx, zero_smul _ _⟩ }, + refine nonempty_of_mem (mem_of_subset_of_mem _ (mem_singleton 0)), + exact balanced.subset_core_of_subset zero_singleton_balanced (singleton_subset_iff.mpr h), +end + +lemma balanced_core_zero_mem {s : set E} (hs: (0 : E) ∈ s) : (0 : E) ∈ balanced_core π•œ s := +balanced_core_mem_iff.mpr + ⟨{0}, zero_singleton_balanced, singleton_subset_iff.mpr hs, mem_singleton 0⟩ + +variables (π•œ) + +lemma subset_balanced_hull [norm_one_class π•œ] {s : set E} : s βŠ† balanced_hull π•œ s := +Ξ» _ hx, (balanced_hull_mem_iff _ _).mpr ⟨1, norm_one.le, mem_smul_set.mp ⟨_, hx, one_smul _ _⟩⟩ + +variables {π•œ} + +lemma balanced_hull.balanced (s : set E) : balanced π•œ (balanced_hull π•œ s) := +begin + intros a ha, + simp_rw [balanced_hull, smul_set_Unionβ‚‚, subset_def, mem_Unionβ‚‚], + intros x hx, + rcases hx with ⟨r, hr, hx⟩, + use [a β€’ r], + split, + { rw smul_eq_mul, + refine has_le.le.trans (semi_normed_ring.norm_mul _ _) _, + refine mul_le_one ha (norm_nonneg r) hr }, + rw smul_assoc, + exact hx, +end + +end add_comm_monoid + +end semi_normed_ring + +section normed_field + +variables [normed_field π•œ] [add_comm_group E] [module π•œ E] + +@[simp] lemma balanced_core_aux_empty : balanced_core_aux π•œ (βˆ… : set E) = βˆ… := +begin + rw [balanced_core_aux, set.Interβ‚‚_eq_empty_iff], + intros _, + simp only [smul_set_empty, mem_empty_eq, not_false_iff, exists_prop, and_true], + exact ⟨1, norm_one.ge⟩, +end + +lemma balanced_core_aux_subset (s : set E) : balanced_core_aux π•œ s βŠ† s := +begin + rw subset_def, + intros x hx, + rw balanced_core_aux_mem_iff at hx, + have h := hx 1 norm_one.ge, + rw one_smul at h, + exact h, +end + +lemma balanced_core_aux_balanced {s : set E} (h0 : (0 : E) ∈ balanced_core_aux π•œ s): + balanced π•œ (balanced_core_aux π•œ s) := +begin + intros a ha x hx, + rcases mem_smul_set.mp hx with ⟨y, hy, hx⟩, + by_cases (a = 0), + { simp[h] at hx, + rw ←hx, + exact h0 }, + rw [←hx, balanced_core_aux_mem_iff], + rw balanced_core_aux_mem_iff at hy, + intros r hr, + have h'' : 1 ≀ βˆ₯a⁻¹ β€’ rβˆ₯ := + begin + rw smul_eq_mul, + simp only [norm_mul, norm_inv], + exact one_le_mul_of_one_le_of_one_le (one_le_inv (norm_pos_iff.mpr h) ha) hr, + end, + have h' := hy (a⁻¹ β€’ r) h'', + rw smul_assoc at h', + exact (mem_inv_smul_set_iffβ‚€ h _ _).mp h', +end + +lemma balanced_core_aux_maximal {s t : set E} (h : t βŠ† s) (ht : balanced π•œ t) : + t βŠ† balanced_core_aux π•œ s := +begin + intros x hx, + rw balanced_core_aux_mem_iff, + intros r hr, + rw mem_smul_set_iff_inv_smul_memβ‚€ (norm_pos_iff.mp (lt_of_lt_of_le zero_lt_one hr)), + refine h (balanced_mem ht hx _), + rw norm_inv, + exact inv_le_one hr, +end + +lemma balanced_core_subset_balanced_core_aux {s : set E} : + balanced_core π•œ s βŠ† balanced_core_aux π•œ s := +balanced_core_aux_maximal (balanced_core_subset s) (balanced_core_balanced s) + +lemma balanced_core_eq_Inter {s : set E} (hs : (0 : E) ∈ s) : + balanced_core π•œ s = β‹‚ (r : π•œ) (hr : 1 ≀ βˆ₯rβˆ₯), r β€’ s := +begin + rw ←balanced_core_aux, + refine subset_antisymm balanced_core_subset_balanced_core_aux _, + refine balanced.subset_core_of_subset (balanced_core_aux_balanced _) (balanced_core_aux_subset s), + refine mem_of_subset_of_mem balanced_core_subset_balanced_core_aux (balanced_core_zero_mem hs), +end + +end normed_field + +end balanced_hull