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

Commit cad1907

Browse files
committed
chore(topology/algebra/module, analysis/normed_space/linear_isometry): dedup submodule.subtypeL and continuous_linear_map.subtype_val (#15700)
To designate the continuous linear inclusion of a submodule into the ambient space, we currently have both `continuous_linear_map.subtype_val` (correct assumptions, name not consistent with `submodule.subtype`) and `submodule.subtypeL` (good name, but way too strong assumptions). This keeps the best of both worlds.
1 parent 350a381 commit cad1907

File tree

4 files changed

+26
-28
lines changed

4 files changed

+26
-28
lines changed

src/analysis/calculus/implicit.lean

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ noncomputable theory
4747

4848
open_locale topological_space
4949
open filter
50-
open continuous_linear_map (fst snd subtype_val smul_right ker_prod)
50+
open continuous_linear_map (fst snd smul_right ker_prod)
5151
open continuous_linear_equiv (of_bijective)
5252

5353
/-!
@@ -309,9 +309,9 @@ end
309309
lemma to_implicit_function_of_complemented (hf : has_strict_fderiv_at f f' a)
310310
(hf' : f'.range = ⊤) (hker : f'.ker.closed_complemented) :
311311
has_strict_fderiv_at (hf.implicit_function_of_complemented f f' hf' hker (f a))
312-
(subtype_val f'.ker) 0 :=
312+
f'.ker.subtypeL 0 :=
313313
by convert (implicit_function_data_of_complemented f f' hf hf'
314-
hker).implicit_function_has_strict_fderiv_at (subtype_val f'.ker) _ _;
314+
hker).implicit_function_has_strict_fderiv_at f'.ker.subtypeL _ _;
315315
[skip, ext, ext]; simp [classical.some_spec hker]
316316

317317
end complemented
@@ -412,7 +412,7 @@ by apply eq_implicit_function_of_complemented
412412

413413
lemma to_implicit_function (hf : has_strict_fderiv_at f f' a) (hf' : f'.range = ⊤) :
414414
has_strict_fderiv_at (hf.implicit_function f f' hf' (f a))
415-
(subtype_val f'.ker) 0 :=
415+
f'.ker.subtypeL 0 :=
416416
by apply to_implicit_function_of_complemented
417417

418418
end finite_dimensional

src/analysis/normed_space/complemented.lean

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,16 +76,14 @@ namespace subspace
7676

7777
variables [complete_space E] (p q : subspace 𝕜 E)
7878

79-
open continuous_linear_map (subtype_val)
80-
8179
/-- If `q` is a closed complement of a closed subspace `p`, then `p × q` is continuously
8280
isomorphic to `E`. -/
8381
def prod_equiv_of_closed_compl (h : is_compl p q) (hp : is_closed (p : set E))
8482
(hq : is_closed (q : set E)) : (p × q) ≃L[𝕜] E :=
8583
begin
8684
haveI := hp.complete_space_coe, haveI := hq.complete_space_coe,
8785
refine (p.prod_equiv_of_is_compl q h).to_continuous_linear_equiv_of_continuous _,
88-
exact ((subtype_val p).coprod (subtype_val q)).continuous
86+
exact (p.subtypeL.coprod q.subtypeL).continuous
8987
end
9088

9189
/-- Projection to a closed submodule along a closed complement. -/

src/analysis/normed_space/linear_isometry.lean

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -251,18 +251,8 @@ def subtypeₗᵢ : p →ₗᵢ[R'] E := ⟨p.subtype, λ x, rfl⟩
251251

252252
@[simp] lemma subtypeₗᵢ_to_linear_map : p.subtypeₗᵢ.to_linear_map = p.subtype := rfl
253253

254-
/-- `submodule.subtype` as a `continuous_linear_map`. -/
255-
def subtypeL : p →L[R'] E := p.subtypeₗᵢ.to_continuous_linear_map
256-
257-
@[simp] lemma coe_subtypeL : (p.subtypeL : p →ₗ[R'] E) = p.subtype := rfl
258-
259-
@[simp] lemma coe_subtypeL' : ⇑p.subtypeL = p.subtype := rfl
260-
261-
@[simp] lemma range_subtypeL : p.subtypeL.range = p :=
262-
range_subtype _
263-
264-
@[simp] lemma ker_subtypeL : p.subtypeL.ker = ⊥ :=
265-
ker_subtype _
254+
@[simp] lemma subtypeₗᵢ_to_continuous_linear_map :
255+
p.subtypeₗᵢ.to_continuous_linear_map = p.subtypeL := rfl
266256

267257
end submodule
268258

src/topology/algebra/module/basic.lean

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -799,19 +799,29 @@ rfl
799799
ker (f.cod_restrict p h) = ker f :=
800800
(f : M₁ →ₛₗ[σ₁₂] M₂).ker_cod_restrict p h
801801

802-
/-- Embedding of a submodule into the ambient space as a continuous linear map. -/
803-
def subtype_val (p : submodule R₁ M₁) : p →L[R₁] M₁ :=
802+
/-- `submodule.subtype` as a `continuous_linear_map`. -/
803+
def _root_.submodule.subtypeL (p : submodule R₁ M₁) : p →L[R₁] M₁ :=
804804
{ cont := continuous_subtype_val,
805805
to_linear_map := p.subtype }
806806

807-
@[simp, norm_cast] lemma coe_subtype_val (p : submodule R₁ M₁) :
808-
(subtype_val p : p →ₗ[R₁] M₁) = p.subtype :=
807+
@[simp, norm_cast] lemma _root_.submodule.coe_subtypeL (p : submodule R₁ M₁) :
808+
(p.subtypeL : p →ₗ[R₁] M₁) = p.subtype :=
809809
rfl
810810

811-
@[simp, norm_cast] lemma subtype_val_apply (p : submodule R₁ M₁) (x : p) :
812-
(subtype_val p : p → M₁) x = x :=
811+
@[simp] lemma _root_.submodule.coe_subtypeL' (p : submodule R₁ M₁) :
812+
⇑p.subtypeL = p.subtype :=
813813
rfl
814814

815+
@[simp, norm_cast] lemma _root_.submodule.subtypeL_apply (p : submodule R₁ M₁) (x : p) :
816+
p.subtypeL x = x :=
817+
rfl
818+
819+
@[simp] lemma _root_.submodule.range_subtypeL (p : submodule R₁ M₁) : p.subtypeL.range = p :=
820+
submodule.range_subtype _
821+
822+
@[simp] lemma _root_.submodule.ker_subtypeL (p : submodule R₁ M₁) : p.subtypeL.ker = ⊥ :=
823+
submodule.ker_subtype _
824+
815825
variables (R₁ M₁ M₂)
816826

817827
/-- `prod.fst` as a `continuous_linear_map`. -/
@@ -1769,14 +1779,14 @@ end
17691779

17701780
variables [module R M₂] [topological_add_group M]
17711781

1772-
open _root_.continuous_linear_map (id fst snd subtype_val mem_ker)
1782+
open _root_.continuous_linear_map (id fst snd mem_ker)
17731783

17741784
/-- A pair of continuous linear maps such that `f₁ ∘ f₂ = id` generates a continuous
17751785
linear equivalence `e` between `M` and `M₂ × f₁.ker` such that `(e x).2 = x` for `x ∈ f₁.ker`,
17761786
`(e x).1 = f₁ x`, and `(e (f₂ y)).2 = 0`. The map is given by `e x = (f₁ x, x - f₂ (f₁ x))`. -/
17771787
def equiv_of_right_inverse (f₁ : M →L[R] M₂) (f₂ : M₂ →L[R] M) (h : function.right_inverse f₂ f₁) :
17781788
M ≃L[R] M₂ × f₁.ker :=
1779-
equiv_of_inverse (f₁.prod (f₁.proj_ker_of_right_inverse f₂ h)) (f₂.coprod (subtype_val f₁.ker))
1789+
equiv_of_inverse (f₁.prod (f₁.proj_ker_of_right_inverse f₂ h)) (f₂.coprod f₁.ker.subtypeL)
17801790
(λ x, by simp)
17811791
(λ ⟨x, y⟩, by simp [h x])
17821792

@@ -1934,7 +1944,7 @@ protected lemma closed_complemented.is_closed [topological_add_group M] [t1_spac
19341944
is_closed (p : set M) :=
19351945
begin
19361946
rcases h with ⟨f, hf⟩,
1937-
have : ker (id R M - (subtype_val p).comp f) = p := linear_map.ker_id_sub_eq_of_proj hf,
1947+
have : ker (id R M - p.subtypeL.comp f) = p := linear_map.ker_id_sub_eq_of_proj hf,
19381948
exact this ▸ (is_closed_ker _)
19391949
end
19401950

0 commit comments

Comments
 (0)