Skip to content

Commit 7b70992

Browse files
feat(Analysis.LocallyConvex): a linear map is surjective iff its image contains a ball, or a closed ball, or a sphere (leanprover-community#29033)
Prove that a linear map is surjective if and only if its image contains either a ball or a sphere. Co-authored-by: faenuccio <filippo.nuccio@univ-st-etienne.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
1 parent 1bb8efb commit 7b70992

4 files changed

Lines changed: 133 additions & 15 deletions

File tree

Mathlib/Analysis/Convex/Basic.lean

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,9 @@ Copyright (c) 2019 Alexander Bentkamp. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Alexander Bentkamp, Yury Kudryashov, Yaël Dillies
55
-/
6-
import Mathlib.Algebra.Order.BigOperators.Ring.Finset
7-
import Mathlib.Algebra.Order.Module.Synonym
86
import Mathlib.Algebra.Ring.Action.Pointwise.Set
97
import Mathlib.Analysis.Convex.Star
108
import Mathlib.Tactic.Field
11-
import Mathlib.Tactic.NoncommRing
129
import Mathlib.LinearAlgebra.AffineSpace.AffineSubspace.Defs
1310

1411
/-!
@@ -164,6 +161,8 @@ theorem convex_segment [IsOrderedRing 𝕜] (x y : E) : Convex 𝕜 [x -[𝕜] y
164161
· rw [add_add_add_comm, ← mul_add, ← mul_add, habp, habq, mul_one, mul_one, hab]
165162
· match_scalars <;> noncomm_ring
166163

164+
/-- See `Convex.semilinear_image` for a version for semilinar maps, but requiring that `𝕜` be a
165+
linear order, instead of just a partial order. -/
167166
theorem Convex.linear_image (hs : Convex 𝕜 s) (f : E →ₗ[𝕜] F) : Convex 𝕜 (f '' s) := by
168167
rintro _ ⟨x, hx, rfl⟩ _ ⟨y, hy, rfl⟩ a b ha hb hab
169168
exact ⟨a • x + b • y, hs hx hy ha hb hab, by rw [f.map_add, f.map_smul, f.map_smul]⟩
@@ -486,9 +485,29 @@ end AddCommGroup
486485

487486
end OrderedRing
488487

489-
section LinearOrderedSemiring
488+
section LinearOrder
490489

491-
variable [Semiring 𝕜] [LinearOrder 𝕜] [IsOrderedRing 𝕜] [AddCommMonoid E]
490+
variable [Semiring 𝕜] [AddCommMonoid E]
491+
section SemilinearMap
492+
493+
variable [PartialOrder 𝕜]
494+
variable {𝕜' : Type*} [Semiring 𝕜'] [PartialOrder 𝕜']
495+
variable {σ : 𝕜 →+* 𝕜'} [RingHomSurjective σ]
496+
variable {F' : Type*} [AddCommMonoid F'] [Module 𝕜' F'] [Module 𝕜 E]
497+
498+
theorem Convex.semilinear_image {s : Set E} (hs : Convex 𝕜 s) (hσ : ∀ {s t}, σ s ≤ σ t ↔ s ≤ t)
499+
(f : E →ₛₗ[σ] F') : Convex 𝕜' (f '' s) := by
500+
rintro _ ⟨x, hx, rfl⟩ _ ⟨y, hy, rfl⟩ a b ha hb hab
501+
obtain ⟨r, rfl⟩ : ∃ r : 𝕜, σ r = a := RingHomSurjective.is_surjective ..
502+
obtain ⟨t, rfl⟩ : ∃ t : 𝕜, σ t = b := RingHomSurjective.is_surjective ..
503+
refine ⟨r • x + t • y, hs hx hy (by simp_all [(@hσ 0 r).mp]) (by simp_all [(@hσ 0 t).mp])
504+
?_, by simp⟩
505+
apply_fun σ using injective_of_le_imp_le _ hσ.mp
506+
simpa
507+
508+
end SemilinearMap
509+
510+
variable [LinearOrder 𝕜] [IsOrderedRing 𝕜]
492511

493512
theorem Convex_subadditive_le [SMul 𝕜 E] {f : E → 𝕜} (hf1 : ∀ x y, f (x + y) ≤ (f x) + (f y))
494513
(hf2 : ∀ ⦃c⦄ x, 0 ≤ c → f (c • x) ≤ c * f x) (B : 𝕜) :
@@ -500,7 +519,7 @@ theorem Convex_subadditive_le [SMul 𝕜 E] {f : E → 𝕜} (hf1 : ∀ x y, f (
500519
_ ≤ a • B + b • B := by gcongr <;> assumption
501520
_ ≤ B := by rw [← add_smul, hs, one_smul]
502521

503-
end LinearOrderedSemiring
522+
end LinearOrder
504523

505524
theorem Convex.midpoint_mem [Ring 𝕜] [LinearOrder 𝕜] [IsStrictOrderedRing 𝕜]
506525
[AddCommGroup E] [Module 𝕜 E] [Invertible (2 : 𝕜)] {s : Set E} {x y : E}
@@ -590,6 +609,10 @@ protected theorem convex (K : Submodule 𝕜 E) : Convex 𝕜 (↑K : Set E) :=
590609
protected theorem starConvex (K : Submodule 𝕜 E) : StarConvex 𝕜 (0 : E) K :=
591610
K.convex K.zero_mem
592611

612+
theorem Convex.semilinear_range {𝕜' : Type*} [Semiring 𝕜'] {σ : 𝕜' →+* 𝕜}
613+
[RingHomSurjective σ] {F' : Type*} [AddCommMonoid F'] [Module 𝕜' F']
614+
(f : F' →ₛₗ[σ] E) : Convex 𝕜 (LinearMap.range f : Set E) := Submodule.convex ..
615+
593616
end Submodule
594617

595618
section CommSemiring

Mathlib/Analysis/LocallyConvex/Basic.lean

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,9 @@ Copyright (c) 2019 Jean Lo. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Jean Lo, Bhavik Mehta, Yaël Dillies
55
-/
6-
import Mathlib.Analysis.Convex.Basic
76
import Mathlib.Analysis.Convex.Hull
8-
import Mathlib.Analysis.Normed.Field.Lemmas
9-
import Mathlib.Analysis.Normed.MulAction
7+
import Mathlib.Analysis.Normed.Module.Basic
108
import Mathlib.Topology.Bornology.Absorbs
11-
129
/-!
1310
# Local convexity
1411
@@ -29,6 +26,12 @@ For a module over a normed ring:
2926
`s`.
3027
* `Balanced`: A set `s` is balanced if `a • s ⊆ s` for all `a` of norm less than `1`.
3128
29+
## Main Results
30+
* `Absorbent.submodule_eq_top` shows that when the base field is nontrivially normed, an absorbent
31+
submodule is actually the whole space. As an application, we show in
32+
`Absorbent.subset_image_iff_surjective` that a linear function is surjective if and only if its
33+
image contains an absorbent set.
34+
3235
## References
3336
3437
* [H. H. Schaefer, *Topological Vector Spaces*][schaefer1966]
@@ -253,8 +256,9 @@ end NormedField
253256

254257
section NontriviallyNormedField
255258

256-
variable [NontriviallyNormedField 𝕜] [PartialOrder 𝕜] [AddCommGroup E] [Module 𝕜 E] {s : Set E}
259+
variable [NontriviallyNormedField 𝕜] [AddCommGroup E] [Module 𝕜 E] {s : Set E}
257260

261+
variable [PartialOrder 𝕜] in
258262
protected theorem Balanced.convexHull (hs : Balanced 𝕜 s) : Balanced 𝕜 (convexHull 𝕜 s) := by
259263
suffices Convex 𝕜 { x | ∀ a : 𝕜, ‖a‖ ≤ 1 → a • x ∈ convexHull 𝕜 s } by
260264
rw [balanced_iff_smul_mem] at hs ⊢
@@ -264,6 +268,29 @@ protected theorem Balanced.convexHull (hs : Balanced 𝕜 s) : Balanced 𝕜 (co
264268
rw [smul_add, ← smul_comm u, ← smul_comm v]
265269
exact convex_convexHull 𝕜 s (hx a ha) (hy a ha) hu hv huv
266270

271+
variable {S : Type*} [SetLike S E] [SMulMemClass S 𝕜 E]
272+
273+
theorem Absorbent.eq_univ_of_smulMemClass {V : S} (hV : Absorbent 𝕜 (V : Set E)) :
274+
(V : Set E) = univ := by
275+
rw [eq_univ_iff_forall]
276+
intro x
277+
obtain ⟨c, hc, hc'⟩ :=
278+
((absorbent_iff_eventually_nhdsNE_zero.mp hV x).and eventually_mem_nhdsWithin).exists
279+
rw [← inv_smul_smul₀ hc' x]
280+
exact SMulMemClass.smul_mem c⁻¹ hc
281+
282+
theorem Absorbent.submodule_eq_top {V : Submodule 𝕜 E} (hV : Absorbent 𝕜 (V : Set E)) :
283+
V = ⊤ := (StrictMono.apply_eq_top_iff (α := Submodule 𝕜 E) (β := Set E) (fun _ _ a_1 ↦ a_1)).mp
284+
hV.eq_univ_of_smulMemClass
285+
286+
variable {F ℱ 𝕜₂ : Type*} [Semiring 𝕜₂] {σ : 𝕜₂ →+* 𝕜}
287+
variable [AddCommGroup F] [Module 𝕜₂ F]
288+
variable [FunLike ℱ F E] [SemilinearMapClass ℱ σ F E]
289+
290+
theorem Absorbent.subset_range_iff_surjective [RingHomSurjective σ] {f : ℱ} {s : Set E}
291+
(hs_abs : Absorbent 𝕜 s) : s ⊆ LinearMap.range f ↔ (⇑f).Surjective :=
292+
fun hs_sub ↦ LinearMap.range_eq_top.mp ((hs_abs.mono hs_sub).submodule_eq_top), fun h a _ ↦ h a⟩
293+
267294
end NontriviallyNormedField
268295

269296
section Real

Mathlib/Analysis/Normed/Module/Convex.lean

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import Mathlib.Analysis.Convex.PathConnected
88
import Mathlib.Analysis.Convex.Topology
99
import Mathlib.Analysis.Normed.Group.Pointwise
1010
import Mathlib.Analysis.Normed.Module.Basic
11+
import Mathlib.Analysis.Normed.Module.RCLike.Real
1112

1213
/-!
1314
# Metric properties of convex sets in normed spaces
@@ -61,6 +62,36 @@ theorem convex_ball (a : E) (r : ℝ) : Convex ℝ (Metric.ball a r) := by
6162
theorem convex_closedBall (a : E) (r : ℝ) : Convex ℝ (Metric.closedBall a r) := by
6263
simpa only [Metric.closedBall, sep_univ] using (convexOn_univ_dist a).convex_le r
6364

65+
variable {F : Type*} [NormedAddCommGroup F] [NormedSpace ℝ F]
66+
67+
open Pointwise in
68+
theorem convexHull_sphere_eq_closedBall [Nontrivial F] (x : F) {r : ℝ} (hr : 0 ≤ r) :
69+
convexHull ℝ (sphere x r) = closedBall x r := by
70+
suffices convexHull ℝ (sphere (0 : F) r) = closedBall 0 r by
71+
rw [← add_zero x, ← vadd_eq_add, ← vadd_sphere, convexHull_vadd,
72+
this, vadd_closedBall_zero, vadd_eq_add, add_zero]
73+
refine subset_antisymm (convexHull_min sphere_subset_closedBall (convex_closedBall 0 r))
74+
(fun x h ↦ mem_convexHull_iff.mpr fun U hU_sub hU ↦ ?_)
75+
have zero_mem : (0 : F) ∈ U := by
76+
have _ : Invertible (2 : ℝ) := by use 2⁻¹ <;> grind
77+
obtain ⟨z, hz⟩ := NormedSpace.sphere_nonempty (E := F).mpr hr
78+
rw [← midpoint_self_neg (R := ℝ) (x := z)]
79+
exact Convex.midpoint_mem hU (hU_sub hz) <| hU_sub (by simp_all)
80+
by_cases hr₀ : r = 0
81+
· simp_all
82+
by_cases x_zero : x = 0
83+
· rwa [x_zero]
84+
set z := (r * ‖x‖⁻¹) • x with hz_def
85+
have hr₁ : r⁻¹ * ‖x‖ ≤ 1 := by
86+
simp only [mem_closedBall, dist_zero_right] at h
87+
grw [h, inv_mul_le_one]
88+
have hz : z ∈ U := by
89+
apply hU_sub
90+
simp_all [norm_smul]
91+
have := StarConvex.smul_mem (hU.starConvex zero_mem) hz (by positivity) hr₁
92+
rwa [hz_def, ← smul_assoc, smul_eq_mul, ← mul_assoc, mul_comm, mul_comm r⁻¹, mul_assoc _ r⁻¹,
93+
inv_mul_cancel₀ hr₀, mul_one, inv_mul_cancel₀ (by simp_all), one_smul] at this
94+
6495
/-- Given a point `x` in the convex hull of `s` and a point `y`, there exists a point
6596
of `s` at distance at least `dist x y` from `y`. -/
6697
theorem convexHull_exists_dist_ge {s : Set E} {x : E} (hx : x ∈ convexHull ℝ s) (y : E) :

Mathlib/Analysis/Normed/Operator/Basic.lean

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Authors: Jan-David Salchow, Sébastien Gouëzel, Jean Lo
55
-/
66
import Mathlib.Algebra.Algebra.Tower
77
import Mathlib.Analysis.LocallyConvex.WithSeminorms
8+
import Mathlib.Analysis.Normed.Module.Convex
89
import Mathlib.Topology.Algebra.Module.StrongTopology
910
import Mathlib.Analysis.Normed.Operator.LinearIsometry
1011
import Mathlib.Analysis.Normed.Operator.ContinuousLinearMap
@@ -24,11 +25,15 @@ file `NormedSpace.lean`.
2425
Note that most of statements that apply to semilinear maps only hold when the ring homomorphism
2526
is isometric, as expressed by the typeclass `[RingHomIsometric σ]`.
2627
28+
## Main Results
29+
* `ball_subset_range_iff_surjective` (and its variants) shows that a semi-linear map between normed
30+
spaces is surjective if and only if it contains a ball.
31+
2732
-/
2833

2934
suppress_compilation
3035

31-
open Bornology
36+
open Bornology Metric
3237
open Filter hiding map_smul
3338
open scoped NNReal Topology Uniformity
3439

@@ -37,8 +42,6 @@ variable {𝕜 𝕜₂ 𝕜₃ E F Fₗ G 𝓕 : Type*}
3742

3843
section SemiNormed
3944

40-
open Metric ContinuousLinearMap
41-
4245
variable [SeminormedAddCommGroup E] [SeminormedAddCommGroup F] [SeminormedAddCommGroup Fₗ]
4346
[SeminormedAddCommGroup G]
4447

@@ -48,6 +51,41 @@ variable [NontriviallyNormedField 𝕜] [NontriviallyNormedField 𝕜₂] [Nontr
4851

4952
variable [FunLike 𝓕 E F]
5053

54+
section
55+
56+
variable [SemilinearMapClass 𝓕 σ₁₂ E F]
57+
58+
theorem ball_zero_subset_range_iff_surjective [RingHomSurjective σ₁₂] {f : 𝓕} {r : ℝ}
59+
(hr : 0 < r) : ball 0 r ⊆ Set.range f ↔ (⇑f).Surjective :=
60+
absorbent_ball (by simpa)|>.subset_range_iff_surjective
61+
62+
theorem ball_subset_range_iff_surjective [RingHomSurjective σ₁₂] {f : 𝓕} {x : F} {r : ℝ}
63+
(hr : 0 < r) : ball x r ⊆ Set.range f ↔ (⇑f).Surjective := by
64+
refine ⟨fun h ↦ ?_, by simp_all⟩
65+
suffices ball 0 r ⊆ Set.range f from (ball_zero_subset_range_iff_surjective hr).mp this
66+
intro _ _
67+
change _ ∈ LinearMap.range f --this can be avoided by replacing `rw` with `erw` in the next line
68+
rw [← Submodule.add_mem_iff_left (p := LinearMap.range f) (h <| mem_ball_self hr)]
69+
apply h
70+
simp_all
71+
72+
theorem closedBall_subset_range_iff_surjective [RingHomSurjective σ₁₂] {f : 𝓕} (x : F) {r : ℝ}
73+
(hr : 0 < r) : closedBall (x : F) r ⊆ Set.range f ↔ (⇑f).Surjective :=
74+
fun h ↦ (ball_subset_range_iff_surjective hr).mp <| subset_trans ball_subset_closedBall h,
75+
by simp_all⟩
76+
77+
variable {F' 𝓕' : Type*} [NormedAddCommGroup F'] [NormedSpace ℝ F'] [Nontrivial F']
78+
{τ : 𝕜 →+* ℝ} [FunLike 𝓕' E F'] [SemilinearMapClass 𝓕' τ E F']
79+
80+
theorem sphere_subset_range_iff_surjective [RingHomSurjective τ] {f : 𝓕'} {x : F'} {r : ℝ}
81+
(hr : 0 < r) : sphere x r ⊆ Set.range f ↔ (⇑f).Surjective := by
82+
refine ⟨fun h ↦ ?_, by simp_all⟩
83+
grw [← (closedBall_subset_range_iff_surjective x hr), ← convexHull_sphere_eq_closedBall x
84+
(le_of_lt hr), convexHull_mono h, (convexHull_eq_self (𝕜 := ℝ) (s := Set.range ↑f)).mpr]
85+
exact Submodule.Convex.semilinear_range (E := F') (F' := E) (σ := τ) f
86+
87+
end
88+
5189
/-- If `‖x‖ = 0` and `f` is continuous then `‖f x‖ = 0`. -/
5290
theorem norm_image_of_norm_zero [SemilinearMapClass 𝓕 σ₁₂ E F] (f : 𝓕) (hf : Continuous f) {x : E}
5391
(hx : ‖x‖ = 0) : ‖f x‖ = 0 := by
@@ -235,7 +273,6 @@ theorem opNorm_le_of_shell {f : E →SL[σ₁₂] F} {ε C : ℝ} (ε_pos : 0 <
235273
(hc : 1 < ‖c‖) (hf : ∀ x, ε / ‖c‖ ≤ ‖x‖ → ‖x‖ < ε → ‖f x‖ ≤ C * ‖x‖) : ‖f‖ ≤ C :=
236274
f.opNorm_le_bound' hC fun _ hx => SemilinearMapClass.bound_of_shell_semi_normed f ε_pos hc hf hx
237275

238-
239276
theorem opNorm_le_of_ball {f : E →SL[σ₁₂] F} {ε : ℝ} {C : ℝ} (ε_pos : 0 < ε) (hC : 0 ≤ C)
240277
(hf : ∀ x ∈ ball (0 : E) ε, ‖f x‖ ≤ C * ‖x‖) : ‖f‖ ≤ C := by
241278
rcases NormedField.exists_one_lt_norm 𝕜 with ⟨c, hc⟩

0 commit comments

Comments
 (0)