Module docstring
{"# Algebraic operations on SeparationQuotient
In this file we construct a section of the quotient map E → SeparationQuotient E as a continuous
linear map SeparationQuotient E →L[K] E.
"}
{"# Algebraic operations on SeparationQuotient
In this file we construct a section of the quotient map E → SeparationQuotient E as a continuous
linear map SeparationQuotient E →L[K] E.
"}
SeparationQuotient.exists_out_continuousLinearMap
theorem
: ∃ f : SeparationQuotient E →L[K] E, mkCLM K E ∘L f = .id K (SeparationQuotient E)
/-- There exists a continuous `K`-linear map from `SeparationQuotient E` to `E`
such that `mk (outCLM x) = x` for all `x`.
Note that continuity of this map comes for free, because `mk` is a topology inducing map.
-/
theorem exists_out_continuousLinearMap :
∃ f : SeparationQuotient E →L[K] E, mkCLM K E ∘L f = .id K (SeparationQuotient E) := by
rcases (mkCLM K E).toLinearMap.exists_rightInverse_of_surjective
(LinearMap.range_eq_top.mpr surjective_mk) with ⟨f, hf⟩
replace hf : mkmk ∘ f = id := congr_arg DFunLike.coe hf
exact ⟨⟨f, isInducing_mk.continuous_iff.2 (by continuity)⟩, DFunLike.ext' hf⟩
SeparationQuotient.outCLM
definition
: SeparationQuotient E →L[K] E
/-- A continuous `K`-linear map from `SeparationQuotient E` to `E`
such that `mk (outCLM x) = x` for all `x`. -/
noncomputable def outCLM : SeparationQuotientSeparationQuotient E →L[K] E :=
(exists_out_continuousLinearMap K E).choose
SeparationQuotient.mkCLM_comp_outCLM
theorem
: mkCLM K E ∘L outCLM K E = .id K (SeparationQuotient E)
@[simp]
theorem mkCLM_comp_outCLM : mkCLMmkCLM K E ∘L outCLM K E = .id K (SeparationQuotient E) :=
(exists_out_continuousLinearMap K E).choose_spec
SeparationQuotient.mk_outCLM
theorem
(x : SeparationQuotient E) : mk (outCLM K E x) = x
@[simp]
theorem mk_outCLM (x : SeparationQuotient E) : mk (outCLM K E x) = x :=
DFunLike.congr_fun (mkCLM_comp_outCLM K E) x
SeparationQuotient.mk_comp_outCLM
theorem
: mk ∘ outCLM K E = id
@[simp]
theorem mk_comp_outCLM : mkmk ∘ outCLM K E = id := funext (mk_outCLM K)
SeparationQuotient.postcomp_mkCLM_surjective
theorem
{L : Type*} [Semiring L] (σ : L →+* K) (F : Type*) [AddCommMonoid F] [Module L F] [TopologicalSpace F] :
Function.Surjective ((mkCLM K E).comp : (F →SL[σ] E) → (F →SL[σ] SeparationQuotient E))
theorem postcomp_mkCLM_surjective {L : Type*} [Semiring L] (σ : L →+* K)
(F : Type*) [AddCommMonoid F] [Module L F] [TopologicalSpace F] :
Function.Surjective ((mkCLM K E).comp : (F →SL[σ] E) → (F →SL[σ] SeparationQuotient E)) := by
intro f
use (outCLM K E).comp f
rw [← ContinuousLinearMap.comp_assoc, mkCLM_comp_outCLM, ContinuousLinearMap.id_comp]
SeparationQuotient.isEmbedding_outCLM
theorem
: IsEmbedding (outCLM K E)
/-- The `SeparationQuotient.outCLM K E` map is a topological embedding. -/
theorem isEmbedding_outCLM : IsEmbedding (outCLM K E) :=
Function.LeftInverse.isEmbedding (mk_outCLM K) continuous_mk (map_continuous _)
SeparationQuotient.outCLM_injective
theorem
: Function.Injective (outCLM K E)
theorem outCLM_injective : Function.Injective (outCLM K E) :=
(isEmbedding_outCLM K E).injective
SeparationQuotient.outCLM_isUniformInducing
theorem
: IsUniformInducing (outCLM K E)
theorem outCLM_isUniformInducing : IsUniformInducing (outCLM K E) := by
rw [← isUniformInducing_mk.isUniformInducing_comp_iff, mk_comp_outCLM]
exact .id
SeparationQuotient.outCLM_isUniformEmbedding
theorem
: IsUniformEmbedding (outCLM K E)
theorem outCLM_isUniformEmbedding : IsUniformEmbedding (outCLM K E) where
injective := outCLM_injective K E
toIsUniformInducing := outCLM_isUniformInducing K E
SeparationQuotient.outCLM_uniformContinuous
theorem
: UniformContinuous (outCLM K E)
theorem outCLM_uniformContinuous : UniformContinuous (outCLM K E) :=
(outCLM_isUniformInducing K E).uniformContinuous