Skip to content

Commit 9d6e2ee

Browse files
committed
feat(Analysis/Normed/Group/SeparationQuotient): add normed lifts and mk (#18178)
Define the `mk` and lifts of normed spaces and normed groups by the inseparable setoid as `NormedAddGroupHom`, `CLM`, etc. Co-authored-by: Yoh Tanimoto <57562556+yoh-tanimoto@users.noreply.github.com>
1 parent 2ae8cf3 commit 9d6e2ee

File tree

6 files changed

+217
-1
lines changed

6 files changed

+217
-1
lines changed

Mathlib.lean

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1494,6 +1494,7 @@ import Mathlib.Analysis.Normed.Group.SemiNormedGrp
14941494
import Mathlib.Analysis.Normed.Group.SemiNormedGrp.Completion
14951495
import Mathlib.Analysis.Normed.Group.SemiNormedGrp.Kernels
14961496
import Mathlib.Analysis.Normed.Group.Seminorm
1497+
import Mathlib.Analysis.Normed.Group.SeparationQuotient
14971498
import Mathlib.Analysis.Normed.Group.Submodule
14981499
import Mathlib.Analysis.Normed.Group.Tannery
14991500
import Mathlib.Analysis.Normed.Group.Ultra
@@ -5310,6 +5311,7 @@ import Mathlib.Topology.Algebra.Ring.Basic
53105311
import Mathlib.Topology.Algebra.Ring.Ideal
53115312
import Mathlib.Topology.Algebra.Semigroup
53125313
import Mathlib.Topology.Algebra.SeparationQuotient.Basic
5314+
import Mathlib.Topology.Algebra.SeparationQuotient.Hom
53135315
import Mathlib.Topology.Algebra.SeparationQuotient.Section
53145316
import Mathlib.Topology.Algebra.Star
53155317
import Mathlib.Topology.Algebra.StarSubalgebra

Mathlib/Analysis/Normed/Group/Hom.lean

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,9 @@ protected theorem uniformContinuous (f : NormedAddGroupHom V₁ V₂) : UniformC
229229
protected theorem continuous (f : NormedAddGroupHom V₁ V₂) : Continuous f :=
230230
f.uniformContinuous.continuous
231231

232+
instance : ContinuousMapClass (NormedAddGroupHom V₁ V₂) V₁ V₂ where
233+
map_continuous := fun f => f.continuous
234+
232235
theorem ratio_le_opNorm (x : V₁) : ‖f x‖ / ‖x‖ ≤ ‖f‖ :=
233236
div_le_of_le_mul₀ (norm_nonneg _) f.opNorm_nonneg (le_opNorm _ _)
234237

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
/-
2+
Copyright (c) 2024 Yoh Tanimoto. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Yoh Tanimoto
5+
-/
6+
import Mathlib.Analysis.Normed.Group.Hom
7+
import Mathlib.Topology.Algebra.SeparationQuotient.Hom
8+
9+
/-!
10+
# Lifts of maps to separation quotients of seminormed groups
11+
12+
For any `SeminormedAddCommGroup M`, a `NormedAddCommGroup` instance has been defined in
13+
`Mathlib.Analysis.Normed.Group.Uniform`.
14+
15+
## Main definitions
16+
17+
We use `M` and `N` to denote seminormed groups.
18+
All the following definitions are in the `SeparationQuotient` namespace. Hence we can access
19+
`SeparationQuotient.normedMk` as `normedMk`.
20+
21+
* `normedMk` : the normed group hom from `M` to `SeparationQuotient M`.
22+
23+
* `liftNormedAddGroupHom` :
24+
Any bounded group hom `f : M → N` such that `∀ x, ‖x‖ = 0 → f x = 0` descends to a bounded group hom
25+
`SeparationQuotient M → N`. Here, `(f : NormedAddGroupHom M N)`, `(hf : ∀ x : M, ‖x‖ = 0 → f x = 0)`
26+
and `liftNormedAddGroupHom f hf : NormedAddGroupHom (SeparationQuotient M) N` such that
27+
`liftNormedAddGroupHom f hf (mk x) = f x`.
28+
29+
## Main results
30+
31+
* `norm_normedMk_eq_one : the operator norm of the projection is `1` if the subspace is not `⊤`.
32+
33+
* `norm_liftNormedAddGroupHom_le` : `‖liftNormedAddGroupHom f hf‖ ≤ ‖f‖`.
34+
-/
35+
36+
section
37+
38+
open SeparationQuotient NNReal
39+
40+
variable {M N : Type*} [SeminormedAddCommGroup M] [SeminormedAddCommGroup N]
41+
42+
namespace SeparationQuotient
43+
44+
open NormedAddGroupHom
45+
46+
/-- The morphism from a seminormed group to the quotient by the inseparable setoid. -/
47+
@[simps]
48+
noncomputable def normedMk : NormedAddGroupHom M (SeparationQuotient M) where
49+
__ := mkAddMonoidHom
50+
bound' := ⟨1, by simp⟩
51+
52+
/-- The operator norm of the projection is at most `1`. -/
53+
theorem norm_normedMk_le : ‖normedMk (M := M)‖ ≤ 1 :=
54+
NormedAddGroupHom.opNorm_le_bound _ zero_le_one fun m => by simp
55+
56+
lemma apply_eq_apply_of_inseparable {F : Type*} [FunLike F M N] [AddMonoidHomClass F M N] (f : F)
57+
(hf : ∀ x, ‖x‖ = 0 → f x = 0) : ∀ x y, Inseparable x y → f x = f y :=
58+
fun x y h ↦ eq_of_sub_eq_zero <| by
59+
rw [← map_sub]
60+
rw [Metric.inseparable_iff, dist_eq_norm] at h
61+
exact hf (x - y) h
62+
63+
/-- The lift of a group hom to the separation quotient as a group hom. -/
64+
@[simps]
65+
noncomputable def liftNormedAddGroupHom (f : NormedAddGroupHom M N)
66+
(hf : ∀ x, ‖x‖ = 0 → f x = 0) : NormedAddGroupHom (SeparationQuotient M) N where
67+
toFun := SeparationQuotient.liftContinuousAddMonoidHom f <| apply_eq_apply_of_inseparable f hf
68+
map_add' v₁ v₂ := map_add ..
69+
bound' := by
70+
refine ⟨‖f‖, fun v ↦ ?_⟩
71+
obtain ⟨v, rfl⟩ := surjective_mk v
72+
exact le_opNorm f v
73+
74+
theorem norm_liftNormedAddGroupHom_apply_le (f : NormedAddGroupHom M N)
75+
(hf : ∀ x, ‖x‖ = 0 → f x = 0) (x : SeparationQuotient M) :
76+
‖liftNormedAddGroupHom f hf x‖ ≤ ‖f‖ * ‖x‖ := by
77+
obtain ⟨x, rfl⟩ := surjective_mk x
78+
exact le_opNorm f x
79+
80+
/-- The equivalence between `NormedAddGroupHom M N` vanishing on the inseparable setoid and
81+
`NormedAddGroupHom (SeparationQuotient M) N`. -/
82+
@[simps]
83+
noncomputable def liftNormedAddGroupHomEquiv {N : Type*} [SeminormedAddCommGroup N] :
84+
{f : NormedAddGroupHom M N // ∀ x, ‖x‖ = 0 → f x = 0} ≃
85+
NormedAddGroupHom (SeparationQuotient M) N where
86+
toFun f := liftNormedAddGroupHom f f.prop
87+
invFun g := ⟨g.comp normedMk, by
88+
intro x hx
89+
rw [← norm_mk, norm_eq_zero] at hx
90+
simp [hx]⟩
91+
left_inv _ := rfl
92+
right_inv _ := by
93+
ext x
94+
obtain ⟨x, rfl⟩ := surjective_mk x
95+
rfl
96+
97+
/-- For a norm-continuous group homomorphism `f`, its lift to the separation quotient
98+
is bounded by the norm of `f`-/
99+
theorem norm_liftNormedAddGroupHom_le {N : Type*} [SeminormedAddCommGroup N]
100+
(f : NormedAddGroupHom M N) (hf : ∀ s, ‖s‖ = 0 → f s = 0) :
101+
‖liftNormedAddGroupHom f hf‖ ≤ ‖f‖ :=
102+
NormedAddGroupHom.opNorm_le_bound _ (norm_nonneg f) (norm_liftNormedAddGroupHom_apply_le f hf)
103+
104+
theorem liftNormedAddGroupHom_norm_le {N : Type*} [SeminormedAddCommGroup N]
105+
(f : NormedAddGroupHom M N) (hf : ∀ s, ‖s‖ = 0 → f s = 0) {c : ℝ≥0} (fb : ‖f‖ ≤ c) :
106+
‖liftNormedAddGroupHom f hf‖ ≤ c :=
107+
(norm_liftNormedAddGroupHom_le f hf).trans fb
108+
109+
theorem liftNormedAddGroupHom_normNoninc {N : Type*} [SeminormedAddCommGroup N]
110+
(f : NormedAddGroupHom M N) (hf : ∀ s, ‖s‖ = 0 → f s = 0) (fb : f.NormNoninc) :
111+
(liftNormedAddGroupHom f hf).NormNoninc := fun x => by
112+
have fb' : ‖f‖ ≤ 1 := NormedAddGroupHom.NormNoninc.normNoninc_iff_norm_le_one.mp fb
113+
exact le_trans (norm_liftNormedAddGroupHom_apply_le f hf x)
114+
(mul_le_of_le_one_left (norm_nonneg x) fb')
115+
116+
/-- The operator norm of the projection is `1` if there is an element whose norm is different from
117+
`0`. -/
118+
theorem norm_normedMk_eq_one (h : ∃ x : M, ‖x‖ ≠ 0) :
119+
‖normedMk (M := M)‖ = 1 := by
120+
apply NormedAddGroupHom.opNorm_eq_of_bounds _ zero_le_one
121+
· simpa only [normedMk_apply, one_mul] using fun _ ↦ le_rfl
122+
· intro N _ hle
123+
obtain ⟨x, _⟩ := h
124+
exact one_le_of_le_mul_right₀ (by positivity) (hle x)
125+
126+
/-- The projection is `0` if and only if all the elements have norm `0`. -/
127+
theorem normedMk_eq_zero_iff : normedMk (M := M) = 0 ↔ ∀ (x : M), ‖x‖ = 0 := by
128+
constructor
129+
· intro h x
130+
rw [SeparationQuotient.mk_eq_zero_iff.mp]
131+
have : normedMk x = 0 := by
132+
rw [h]
133+
simp only [zero_apply]
134+
rw [← this]
135+
simp
136+
· intro h
137+
ext x
138+
simpa [← norm_eq_zero] using h x
139+
140+
end SeparationQuotient
141+
142+
end

Mathlib/Topology/Algebra/ContinuousMonoidHom.lean

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,13 @@ instance : CommGroup (ContinuousMonoidHom A E) where
278278
inv f := (inv E).comp f
279279
inv_mul_cancel f := ext fun x => inv_mul_cancel (f x)
280280

281+
/-- For `f : F` where `F` is a class of continuous monoid hom, this yields an element
282+
`ContinuousMonoidHom A B`. -/
283+
@[to_additive "For `f : F` where `F` is a class of continuous additive monoid hom, this yields
284+
an element `ContinuousAddMonoidHom A B`."]
285+
def ofClass (F : Type*) [FunLike F A B] [ContinuousMapClass F A B]
286+
[MonoidHomClass F A B] (f : F) : (ContinuousMonoidHom A B) := toContinuousMonoidHom f
287+
281288
end ContinuousMonoidHom
282289

283290
end

Mathlib/Topology/Algebra/SeparationQuotient/Basic.lean

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ which is a continuous linear map `SeparationQuotient E →L[K] E`.
2121

2222
assert_not_exists LinearIndependent
2323

24+
open scoped Topology
25+
2426
namespace SeparationQuotient
2527

2628
section SMul
@@ -195,6 +197,10 @@ instance instGroup [Group G] [TopologicalGroup G] : Group (SeparationQuotient G)
195197
instance instCommGroup [CommGroup G] [TopologicalGroup G] : CommGroup (SeparationQuotient G) :=
196198
surjective_mk.commGroup mk mk_one mk_mul mk_inv mk_div mk_pow mk_zpow
197199

200+
/-- Neighborhoods in the quotient are precisely the map of neighborhoods in the prequotient. -/
201+
theorem nhds_mk (x : G) : 𝓝 (mk x) = .map mk (𝓝 x) :=
202+
le_antisymm ((SeparationQuotient.isOpenMap_mk).nhds_le x) continuous_quot_mk.continuousAt
203+
198204
end Group
199205

200206
section UniformGroup
@@ -364,8 +370,10 @@ end DistribSMul
364370

365371
section Module
366372

367-
variable {R M : Type*} [Semiring R] [AddCommMonoid M] [Module R M]
373+
variable {R S M N : Type*} [Semiring R] [AddCommMonoid M] [Module R M]
368374
[TopologicalSpace M] [ContinuousAdd M] [ContinuousConstSMul R M]
375+
[Semiring S] [AddCommMonoid N] [Module S N]
376+
[TopologicalSpace N]
369377

370378
instance instModule : Module R (SeparationQuotient M) :=
371379
surjective_mk.module R mkAddMonoidHom mk_smul
@@ -379,6 +387,20 @@ def mkCLM : M →L[R] SeparationQuotient M where
379387
map_add' := mk_add
380388
map_smul' := mk_smul
381389

390+
variable {R M}
391+
392+
/-- The lift (as a continuous linear map) of `f` with `f x = f y` for `Inseparable x y`. -/
393+
@[simps]
394+
noncomputable def liftCLM {σ : R →+* S} (f : M →SL[σ] N) (hf : ∀ x y, Inseparable x y → f x = f y) :
395+
SeparationQuotient M →SL[σ] N where
396+
toFun := SeparationQuotient.lift f hf
397+
map_add' := Quotient.ind₂ <| map_add f
398+
map_smul' {r} := Quotient.ind <| map_smulₛₗ f r
399+
400+
@[simp]
401+
theorem liftCLM_mk {σ : R →+* S} (f : M →SL[σ] N) (hf : ∀ x y, Inseparable x y → f x = f y)
402+
(x : M) : liftCLM f hf (mk x) = f x := rfl
403+
382404
end Module
383405

384406
section Algebra
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/-
2+
Copyright (c) 2024 Yoh Tanimoto. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Yoh Tanimoto
5+
-/
6+
import Mathlib.Topology.Algebra.ContinuousMonoidHom
7+
import Mathlib.Topology.Algebra.SeparationQuotient.Basic
8+
9+
/-!
10+
# Lift of `MonoidHom M N` to `MonoidHom (SeparationQuotient M) N`
11+
12+
In this file we define the lift of a continuous monoid homomorphism `f` from `M` to `N` to
13+
`SeparationQuotient M`, assuming that `f` maps two inseparable elements to the same element.
14+
-/
15+
16+
namespace SeparationQuotient
17+
18+
section Monoid
19+
20+
variable {M N : Type*} [TopologicalSpace M] [TopologicalSpace N]
21+
22+
/-- The lift of a monoid hom from `M` to a monoid hom from `SeparationQuotient M`. -/
23+
@[to_additive "The lift of an additive monoid hom from `M` to an additive monoid hom from
24+
`SeparationQuotient M`."]
25+
noncomputable def liftContinuousMonoidHom [CommMonoid M] [ContinuousMul M] [CommMonoid N]
26+
(f : ContinuousMonoidHom M N) (hf : ∀ x y, Inseparable x y → f x = f y) :
27+
ContinuousMonoidHom (SeparationQuotient M) N where
28+
toFun := SeparationQuotient.lift f hf
29+
map_one' := map_one f
30+
map_mul' := Quotient.ind₂ <| map_mul f
31+
continuous_toFun := SeparationQuotient.continuous_lift.mpr f.2
32+
33+
@[to_additive (attr := simp)]
34+
theorem liftContinuousCommMonoidHom_mk [CommMonoid M] [ContinuousMul M] [CommMonoid N]
35+
(f : ContinuousMonoidHom M N) (hf : ∀ x y, Inseparable x y → f x = f y) (x : M) :
36+
liftContinuousMonoidHom f hf (mk x) = f x := rfl
37+
38+
end Monoid
39+
40+
end SeparationQuotient

0 commit comments

Comments
 (0)