Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 6405a6a

Browse files
committed
feat(analysis/locally_convex): closed balanced sets are a basis of the topology (#12786)
We prove some topological properties of the balanced core.
1 parent 7833dbe commit 6405a6a

File tree

1 file changed

+85
-4
lines changed

1 file changed

+85
-4
lines changed

src/analysis/locally_convex/balanced_core_hull.lean

Lines changed: 85 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ import order.closure
1111
1212
## Main definitions
1313
14-
* `balanced_core`: the largest balanced subset of a set `s`.
15-
* `balanced_hull`: the smallest balanced superset of a set `s`.
14+
* `balanced_core`: The largest balanced subset of a set `s`.
15+
* `balanced_hull`: The smallest balanced superset of a set `s`.
1616
1717
## Main statements
1818
1919
* `balanced_core_eq_Inter`: Characterization of the balanced core as an intersection over subsets.
20-
20+
* `nhds_basis_closed_balanced`: The closed balanced sets form a basis of the neighborhood filter.
2121
2222
## Implementation details
2323
@@ -39,7 +39,8 @@ balanced
3939

4040

4141
open set
42-
open_locale pointwise
42+
open_locale pointwise topological_space filter
43+
4344

4445
variables {𝕜 E ι : Type*}
4546

@@ -71,6 +72,9 @@ begin
7172
exact ht.2,
7273
end
7374

75+
lemma balanced_core_emptyset : balanced_core 𝕜 (∅ : set E) = ∅ :=
76+
set.eq_empty_of_subset_empty (balanced_core_subset _)
77+
7478
lemma balanced_core_mem_iff {s : set E} {x : E} : x ∈ balanced_core 𝕜 s ↔
7579
∃ t : set E, balanced 𝕜 t ∧ t ⊆ s ∧ x ∈ t :=
7680
by simp_rw [balanced_core, mem_sUnion, mem_set_of_eq, exists_prop, and_assoc]
@@ -241,6 +245,83 @@ begin
241245
refine mem_of_subset_of_mem balanced_core_subset_balanced_core_aux (balanced_core_zero_mem hs),
242246
end
243247

248+
lemma subset_balanced_core {U V : set E} (hV' : (0 : E) ∈ V)
249+
(hUV : ∀ (a : 𝕜) (ha : ∥a∥ ≤ 1), a • U ⊆ V) :
250+
U ⊆ balanced_core 𝕜 V :=
251+
begin
252+
rw balanced_core_eq_Inter hV',
253+
refine set.subset_Inter₂ (λ a ha, _),
254+
rw [←one_smul 𝕜 U, ←mul_inv_cancel (norm_pos_iff.mp (lt_of_lt_of_le zero_lt_one ha)),
255+
←smul_eq_mul, smul_assoc],
256+
refine set.smul_set_mono (hUV a⁻¹ _),
257+
rw [norm_inv],
258+
exact inv_le_one ha,
259+
end
260+
244261
end normed_field
245262

246263
end balanced_hull
264+
265+
/-! ### Topological properties -/
266+
267+
section topology
268+
269+
variables [nondiscrete_normed_field 𝕜] [add_comm_group E] [module 𝕜 E] [topological_space E]
270+
[has_continuous_smul 𝕜 E]
271+
272+
lemma balanced_core_is_closed {U : set E} (hU : is_closed U) : is_closed (balanced_core 𝕜 U) :=
273+
begin
274+
by_cases h : (0 : E) ∈ U,
275+
{ rw balanced_core_eq_Inter h,
276+
refine is_closed_Inter (λ a, _),
277+
refine is_closed_Inter (λ ha, _),
278+
have ha' := lt_of_lt_of_le zero_lt_one ha,
279+
rw norm_pos_iff at ha',
280+
refine is_closed_map_smul_of_ne_zero ha' U hU },
281+
convert is_closed_empty,
282+
contrapose! h,
283+
exact balanced_core_nonempty_iff.mp (set.ne_empty_iff_nonempty.mp h),
284+
end
285+
286+
lemma balanced_core_mem_nhds_zero {U : set E} (hU : U ∈ 𝓝 (0 : E)) :
287+
balanced_core 𝕜 U ∈ 𝓝 (0 : E) :=
288+
begin
289+
-- Getting neighborhoods of the origin for `0 : 𝕜` and `0 : E`
290+
have h : filter.tendsto (λ (x : 𝕜 × E), x.fst • x.snd) (𝓝 (0,0)) (𝓝 ((0 : 𝕜) • (0 : E))) :=
291+
continuous_iff_continuous_at.mp has_continuous_smul.continuous_smul (0, 0),
292+
rw [smul_zero] at h,
293+
have h' := filter.has_basis.prod (@metric.nhds_basis_ball 𝕜 _ 0) (filter.basis_sets (𝓝 (0 : E))),
294+
simp_rw [←nhds_prod_eq, id.def] at h',
295+
have h'' := filter.tendsto.basis_left h h' U hU,
296+
rcases h'' with ⟨x, hx, h''⟩,
297+
cases normed_field.exists_norm_lt 𝕜 hx.left with y hy,
298+
have hy' : y ≠ 0 := norm_pos_iff.mp hy.1,
299+
let W := y • x.snd,
300+
rw ←filter.exists_mem_subset_iff,
301+
refine ⟨W, (set_smul_mem_nhds_zero_iff hy').mpr hx.2, _⟩,
302+
-- It remains to show that `W ⊆ balanced_core 𝕜 U`
303+
refine subset_balanced_core (mem_of_mem_nhds hU) (λ a ha, _),
304+
refine set.subset.trans (λ z hz, _) (set.maps_to'.mp h''),
305+
rw [set.image_prod, set.image2_smul],
306+
rw set.mem_smul_set at hz,
307+
rcases hz with ⟨z', hz', hz⟩,
308+
rw [←hz, set.mem_smul],
309+
refine ⟨a • y, y⁻¹ • z', _, _, _⟩,
310+
{ rw [algebra.id.smul_eq_mul, mem_ball_zero_iff, norm_mul, ←one_mul x.fst],
311+
exact mul_lt_mul' ha hy.2 hy.1.le zero_lt_one },
312+
{ convert set.smul_mem_smul_set hz',
313+
rw [←smul_assoc y⁻¹ y x.snd, smul_eq_mul, inv_mul_cancel hy', one_smul] },
314+
rw [smul_assoc, ←smul_assoc y y⁻¹ z', smul_eq_mul, mul_inv_cancel hy', one_smul],
315+
end
316+
317+
variables (𝕜)
318+
319+
lemma nhds_basis_closed_balanced [regular_space E] : (𝓝 (0 : E)).has_basis
320+
(λ (s : set E), s ∈ 𝓝 (0 : E) ∧ is_closed s ∧ balanced 𝕜 s) id :=
321+
begin
322+
refine (closed_nhds_basis 0).to_has_basis (λ s hs, _) (λ s hs, ⟨s, ⟨hs.1, hs.2.1⟩, rfl.subset⟩),
323+
refine ⟨balanced_core 𝕜 s, ⟨balanced_core_mem_nhds_zero hs.1, _⟩, balanced_core_subset s⟩,
324+
refine ⟨balanced_core_is_closed hs.2, balanced_core_balanced s⟩
325+
end
326+
327+
end topology

0 commit comments

Comments
 (0)