Theory of topological modules and continuous linear maps. #
We use the class has_continuous_smul
for topological (semi) modules and topological vector spaces.
In this file we define continuous (semi-)linear maps, as semilinear maps between topological
modules which are continuous. The set of continuous semilinear maps between the topological
R₁
-module M
and R₂
-module M₂
with respect to the ring_hom
σ
is denoted by M →SL[σ] M₂
.
Plain linear maps are denoted by M →L[R] M₂
and star-linear maps by M →L⋆[R] M₂
.
The corresponding notation for equivalences is M ≃SL[σ] M₂
, M ≃L[R] M₂
and M ≃L⋆[R] M₂
.
If M
is a topological module over R
and 0
is a limit of invertible elements of R
, then
⊤
is the only submodule of M
with a nonempty interior.
This is the case, e.g., if R
is a nondiscrete normed field.
Let R
be a topological ring such that zero is not an isolated point (e.g., a nondiscrete
normed field, see normed_field.punctured_nhds_ne_bot
). Let M
be a nontrivial module over R
such that c • x = 0
implies c = 0 ∨ x = 0
. Then M
has no isolated points. We formulate this
using ne_bot (𝓝[≠] x)
.
This lemma is not an instance because Lean would need to find [has_continuous_smul ?m_1 M]
with
unknown ?m_1
. We register this as an instance for R = ℝ
in real.punctured_nhds_module_ne_bot
.
One can also use haveI := module.punctured_nhds_ne_bot R M
in a proof.
The (topological-space) closure of a submodule of a topological R
-module M
is itself
a submodule.
- to_linear_map : M →ₛₗ[σ] M₂
- cont : continuous self.to_linear_map.to_fun . "continuity'"
Continuous linear maps between modules. We only put the type classes that are necessary for the
definition, although in applications M
and M₂
will be topological modules over the topological
ring R
.
- to_linear_equiv : M ≃ₛₗ[σ] M₂
- continuous_to_fun : continuous self.to_linear_equiv.to_fun . "continuity'"
- continuous_inv_fun : continuous self.to_linear_equiv.inv_fun . "continuity'"
Continuous linear equivalences between modules. We only put the type classes that are necessary
for the definition, although in applications M
and M₂
will be topological modules over the
topological semiring R
.
Constructs a bundled linear map from a function and a proof that this function belongs to the closure of the set of linear maps.
Construct a bundled linear map from a pointwise limit of linear maps
Equations
Properties that hold for non-necessarily commutative semirings. #
Coerce continuous linear maps to linear maps.
Equations
Equations
- continuous_linear_map.add_monoid_hom_class = {coe := λ (f : M₁ →SL[σ₁₂] M₂), f.to_linear_map.to_fun, coe_injective' := _, map_add := _, map_zero := _}
Coerce continuous linear maps to functions.
Equations
- continuous_linear_map.to_fun = {coe := λ (f : M₁ →SL[σ₁₂] M₂), f.to_linear_map.to_fun}
See Note [custom simps projection]. We need to specify this projection explicitly in this case, because it is a composition of multiple projections.
Equations
See Note [custom simps projection].
Equations
Copy of a continuous_linear_map
with a new to_fun
equal to the old one. Useful to fix
definitional equalities.
Equations
- f.copy f' h = {to_linear_map := f.to_linear_map.copy f' h, cont := _}
If two continuous linear maps are equal on a set s
, then they are equal on the closure
of the submodule.span
of this set.
If the submodule generated by a set s
is dense in the ambient module, then two continuous
linear maps equal on s
are equal.
Under a continuous linear map, the image of the topological_closure
of a submodule is
contained in the topological_closure
of its image.
Under a dense continuous linear map, a submodule whose topological_closure
is ⊤
is sent to
another such submodule. That is, the image of a dense set under a map with dense range is dense.
Equations
- continuous_linear_map.mul_action = {to_has_scalar := {smul := λ (c : S₂) (f : M₁ →SL[σ₁₂] M₂), {to_linear_map := c • ↑f, cont := _}}, one_smul := _, mul_smul := _}
The continuous map that is constantly zero.
Equations
- continuous_linear_map.has_zero = {zero := {to_linear_map := 0, cont := _}}
Equations
the identity map as a continuous linear map.
Equations
- continuous_linear_map.id R₁ M₁ = {to_linear_map := linear_map.id _inst_14, cont := _}
Equations
- continuous_linear_map.has_one = {one := continuous_linear_map.id R₁ M₁ _inst_14}
Equations
- continuous_linear_map.add_comm_monoid = {add := has_add.add continuous_linear_map.has_add, add_assoc := _, zero := 0, zero_add := _, add_zero := _, nsmul := has_scalar.smul mul_action.to_has_scalar, nsmul_zero' := _, nsmul_succ' := _, add_comm := _}
Composition of bounded linear maps.
Equations
- continuous_linear_map.has_mul = {mul := continuous_linear_map.comp continuous_linear_map.has_mul._proof_1}
The cartesian product of two bounded linear maps, as a bounded linear map.
The left injection into a product is a continuous linear map.
Equations
- continuous_linear_map.inl R₁ M₁ M₂ = (continuous_linear_map.id R₁ M₁).prod 0
The right injection into a product is a continuous linear map.
Equations
- continuous_linear_map.inr R₁ M₁ M₂ = 0.prod (continuous_linear_map.id R₁ M₂)
Kernel of a continuous linear map.
Range of a continuous linear map.
Restrict codomain of a continuous linear map.
Equations
- f.cod_restrict p h = {to_linear_map := linear_map.cod_restrict p ↑f h, cont := _}
Embedding of a submodule into the ambient space as a continuous linear map.
Equations
- continuous_linear_map.subtype_val p = {to_linear_map := p.subtype, cont := _}
prod.fst
as a continuous_linear_map
.
Equations
- continuous_linear_map.fst R₁ M₁ M₂ = {to_linear_map := linear_map.fst R₁ M₁ M₂ _inst_19, cont := _}
prod.snd
as a continuous_linear_map
.
Equations
- continuous_linear_map.snd R₁ M₁ M₂ = {to_linear_map := linear_map.snd R₁ M₁ M₂ _inst_19, cont := _}
prod.map
of two continuous linear maps.
Equations
- f₁.prod_map f₂ = (f₁.comp (continuous_linear_map.fst R₁ M₁ M₃)).prod (f₂.comp (continuous_linear_map.snd R₁ M₁ M₃))
The continuous linear map given by (x, y) ↦ f₁ x + f₂ y
.
The linear map λ x, c x • f
. Associates to a scalar-valued linear map and an element of
M₂
the M₂
-valued linear map obtained by multiplying the two (a.k.a. tensoring by M₂
).
See also continuous_linear_map.smul_rightₗ
and continuous_linear_map.smul_rightL
.
Equations
- c.smul_right f = {to_linear_map := {to_fun := (c.to_linear_map.smul_right f).to_fun, map_add' := _, map_smul' := _}, cont := _}
pi
construction for continuous linear functions. From a family of continuous linear functions
it produces a continuous linear function into a family of topological modules.
Equations
- continuous_linear_map.pi f = {to_linear_map := linear_map.pi (λ (i : ι), ↑(f i)), cont := _}
The projections from a family of topological modules are continuous linear maps.
Equations
- continuous_linear_map.proj i = {to_linear_map := linear_map.proj i, cont := _}
If I
and J
are complementary index sets, the product of the kernels of the J
th projections
of φ
is linearly equivalent to the product over I
.
Equations
- continuous_linear_map.infi_ker_proj_equiv R φ hd hu = {to_linear_equiv := linear_map.infi_ker_proj_equiv R φ hd hu, continuous_to_fun := _, continuous_inv_fun := _}
Equations
- continuous_linear_map.add_comm_group = {add := has_add.add continuous_linear_map.has_add, add_assoc := _, zero := 0, zero_add := _, add_zero := _, nsmul := has_scalar.smul add_monoid.has_scalar_nat, nsmul_zero' := _, nsmul_succ' := _, neg := has_neg.neg continuous_linear_map.has_neg, sub := has_sub.sub continuous_linear_map.has_sub, sub_eq_add_neg := _, zsmul := has_scalar.smul mul_action.to_has_scalar, zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _}
Equations
- continuous_linear_map.ring = {add := add_comm_group.add continuous_linear_map.add_comm_group, add_assoc := _, zero := add_comm_group.zero continuous_linear_map.add_comm_group, zero_add := _, add_zero := _, nsmul := add_comm_group.nsmul continuous_linear_map.add_comm_group, nsmul_zero' := _, nsmul_succ' := _, neg := add_comm_group.neg continuous_linear_map.add_comm_group, sub := add_comm_group.sub continuous_linear_map.add_comm_group, sub_eq_add_neg := _, zsmul := add_comm_group.zsmul continuous_linear_map.add_comm_group, zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _, mul := has_mul.mul continuous_linear_map.has_mul, mul_assoc := _, one := 1, one_mul := _, mul_one := _, npow := monoid.npow._default 1 has_mul.mul continuous_linear_map.ring._proof_15 continuous_linear_map.ring._proof_16, npow_zero' := _, npow_succ' := _, left_distrib := _, right_distrib := _}
Given a right inverse f₂ : M₂ →L[R] M
to f₁ : M →L[R] M₂
,
proj_ker_of_right_inverse f₁ f₂ h
is the projection M →L[R] f₁.ker
along f₂.range
.
Equations
- f₁.proj_ker_of_right_inverse f₂ h = (continuous_linear_map.id R M - f₂.comp f₁).cod_restrict f₁.ker _
Equations
- continuous_linear_map.distrib_mul_action = {to_mul_action := continuous_linear_map.mul_action _inst_29, smul_add := _, smul_zero := _}
continuous_linear_map.prod
as an equiv
.
Equations
- continuous_linear_map.module = {to_distrib_mul_action := continuous_linear_map.distrib_mul_action _inst_32, add_smul := _, zero_smul := _}
continuous_linear_map.prod
as a linear_equiv
.
Equations
- continuous_linear_map.prodₗ S = {to_fun := continuous_linear_map.prod_equiv.to_fun, map_add' := _, map_smul' := _, inv_fun := continuous_linear_map.prod_equiv.inv_fun, left_inv := _, right_inv := _}
The coercion from M →L[R] M₂
to M →ₗ[R] M₂
, as a linear map.
Equations
- continuous_linear_map.coe_lm S = {to_fun := coe coe_to_lift, map_add' := _, map_smul' := _}
The coercion from M →SL[σ] M₂
to M →ₛₗ[σ] M₂
, as a linear map.
Equations
- continuous_linear_map.coe_lmₛₗ σ₁₃ = {to_fun := coe coe_to_lift, map_add' := _, map_smul' := _}
Given c : E →L[𝕜] 𝕜
, c.smul_rightₗ
is the linear map from F
to E →L[𝕜] F
sending f
to λ e, c e • f
. See also continuous_linear_map.smul_rightL
.
Equations
- c.smul_rightₗ = {to_fun := c.smul_right, map_add' := _, map_smul' := _}
The determinant of a continuous linear map, mainly as a convenience device to be able to
write A.det
instead of (A : M →ₗ[R] M).det
.
Equations
- A.det = ⇑linear_map.det ↑A
Equations
- continuous_linear_map.algebra = algebra.of_module continuous_linear_map.algebra._proof_3 continuous_linear_map.algebra._proof_4
If A
is an R
-algebra, then a continuous A
-linear map can be interpreted as a continuous
R
-linear map. We assume linear_map.compatible_smul M M₂ R A
to match assumptions of
linear_map.map_smul_of_tower
.
Equations
- continuous_linear_map.restrict_scalars R f = {to_linear_map := linear_map.restrict_scalars R ↑f, cont := _}
continuous_linear_map.restrict_scalars
as a linear_map
. See also
continuous_linear_map.restrict_scalarsL
.
Equations
- continuous_linear_map.restrict_scalarsₗ A M M₂ R S = {to_fun := continuous_linear_map.restrict_scalars R _inst_11, map_add' := _, map_smul' := _}
A continuous linear equivalence induces a continuous linear map.
Equations
- e.to_continuous_linear_map = {to_linear_map := {to_fun := e.to_linear_equiv.to_linear_map.to_fun, map_add' := _, map_smul' := _}, cont := _}
Coerce continuous linear equivs to continuous linear maps.
Coerce continuous linear equivs to maps.
A continuous linear equivalence induces a homeomorphism.
Equations
- e.to_homeomorph = {to_equiv := e.to_linear_equiv.to_equiv, continuous_to_fun := _, continuous_inv_fun := _}
An extensionality lemma for R ≃L[R] M
.
The identity map as a continuous linear equivalence.
Equations
- continuous_linear_equiv.refl R₁ M₁ = {to_linear_equiv := {to_fun := (linear_equiv.refl R₁ M₁).to_fun, map_add' := _, map_smul' := _, inv_fun := (linear_equiv.refl R₁ M₁).inv_fun, left_inv := _, right_inv := _}, continuous_to_fun := _, continuous_inv_fun := _}
The inverse of a continuous linear equivalence as a continuous linear equivalence
Equations
- e.symm = {to_linear_equiv := {to_fun := e.to_linear_equiv.symm.to_fun, map_add' := _, map_smul' := _, inv_fun := e.to_linear_equiv.symm.inv_fun, left_inv := _, right_inv := _}, continuous_to_fun := _, continuous_inv_fun := _}
See Note [custom simps projection]. We need to specify this projection explicitly in this case, because it is a composition of multiple projections.
Equations
See Note [custom simps projection]
Equations
The composition of two continuous linear equivalences as a continuous linear equivalence.
Equations
- e₁.trans e₂ = {to_linear_equiv := {to_fun := (e₁.to_linear_equiv.trans e₂.to_linear_equiv).to_fun, map_add' := _, map_smul' := _, inv_fun := (e₁.to_linear_equiv.trans e₂.to_linear_equiv).inv_fun, left_inv := _, right_inv := _}, continuous_to_fun := _, continuous_inv_fun := _}
Product of two continuous linear equivalences. The map comes from equiv.prod_congr
.
Equations
- e.prod e' = {to_linear_equiv := {to_fun := (e.to_linear_equiv.prod e'.to_linear_equiv).to_fun, map_add' := _, map_smul' := _, inv_fun := (e.to_linear_equiv.prod e'.to_linear_equiv).inv_fun, left_inv := _, right_inv := _}, continuous_to_fun := _, continuous_inv_fun := _}
Create a continuous_linear_equiv
from two continuous_linear_map
s that are
inverse of each other.
Equations
- continuous_linear_equiv.equiv_of_inverse f₁ f₂ h₁ h₂ = {to_linear_equiv := {to_fun := ⇑f₁, map_add' := _, map_smul' := _, inv_fun := ⇑f₂, left_inv := h₁, right_inv := h₂}, continuous_to_fun := _, continuous_inv_fun := _}
The continuous linear equivalences from M
to itself form a group under composition.
Equations
- continuous_linear_equiv.automorphism_group M₁ = {mul := λ (f g : M₁ ≃L[R₁] M₁), g.trans f, mul_assoc := _, one := continuous_linear_equiv.refl R₁ M₁ _inst_22, one_mul := _, mul_one := _, npow := div_inv_monoid.npow._default (continuous_linear_equiv.refl R₁ M₁) (λ (f g : M₁ ≃L[R₁] M₁), g.trans f) _ _, npow_zero' := _, npow_succ' := _, inv := λ (f : M₁ ≃L[R₁] M₁), f.symm, div := div_inv_monoid.div._default (λ (f g : M₁ ≃L[R₁] M₁), g.trans f) _ (continuous_linear_equiv.refl R₁ M₁) _ _ (div_inv_monoid.npow._default (continuous_linear_equiv.refl R₁ M₁) (λ (f g : M₁ ≃L[R₁] M₁), g.trans f) _ _) _ _ (λ (f : M₁ ≃L[R₁] M₁), f.symm), div_eq_mul_inv := _, zpow := div_inv_monoid.zpow._default (λ (f g : M₁ ≃L[R₁] M₁), g.trans f) _ (continuous_linear_equiv.refl R₁ M₁) _ _ (div_inv_monoid.npow._default (continuous_linear_equiv.refl R₁ M₁) (λ (f g : M₁ ≃L[R₁] M₁), g.trans f) _ _) _ _ (λ (f : M₁ ≃L[R₁] M₁), f.symm), zpow_zero' := _, zpow_succ' := _, zpow_neg' := _, mul_left_inv := _}
A pair of continuous (semi)linear equivalences generates an equivalence between the spaces of continuous linear maps.
Equivalence given by a block lower diagonal matrix. e
and e'
are diagonal square blocks,
and f
is a rectangular block below the diagonal.
Equations
- e.skew_prod e' f = {to_linear_equiv := {to_fun := (e.to_linear_equiv.skew_prod e'.to_linear_equiv ↑f).to_fun, map_add' := _, map_smul' := _, inv_fun := (e.to_linear_equiv.skew_prod e'.to_linear_equiv ↑f).inv_fun, left_inv := _, right_inv := _}, continuous_to_fun := _, continuous_inv_fun := _}
The next theorems cover the identification between M ≃L[𝕜] M
and the group of units of the ring
M →L[R] M
.
An invertible continuous linear map f
determines a continuous equivalence from M
to itself.
Equations
- continuous_linear_equiv.of_unit f = {to_linear_equiv := {to_fun := ⇑(f.val), map_add' := _, map_smul' := _, inv_fun := ⇑(f.inv), left_inv := _, right_inv := _}, continuous_to_fun := _, continuous_inv_fun := _}
A continuous equivalence from M
to itself determines an invertible continuous linear map.
The units of the algebra of continuous R
-linear endomorphisms of M
is multiplicatively
equivalent to the type of continuous linear equivalences between M
and itself.
Equations
- continuous_linear_equiv.units_equiv R M = {to_fun := continuous_linear_equiv.of_unit _inst_11, inv_fun := continuous_linear_equiv.to_unit _inst_11, left_inv := _, right_inv := _, map_mul' := _}
Continuous linear equivalences R ≃L[R] R
are enumerated by Rˣ
.
A pair of continuous linear maps such that f₁ ∘ f₂ = id
generates a continuous
linear equivalence e
between M
and M₂ × f₁.ker
such that (e x).2 = x
for x ∈ f₁.ker
,
(e x).1 = f₁ x
, and (e (f₂ y)).2 = 0
. The map is given by e x = (f₁ x, x - f₂ (f₁ x))
.
Equations
- continuous_linear_equiv.equiv_of_right_inverse f₁ f₂ h = continuous_linear_equiv.equiv_of_inverse (f₁.prod (f₁.proj_ker_of_right_inverse f₂ h)) (f₂.coprod (continuous_linear_map.subtype_val f₁.ker)) _ _
If ι
has a unique element, then ι → M
is continuously linear equivalent to M
.
Equations
- continuous_linear_equiv.fun_unique ι R M = {to_linear_equiv := linear_equiv.fun_unique ι R M _inst_4, continuous_to_fun := _, continuous_inv_fun := _}
Continuous linear equivalence between dependent functions Π i : fin 2, M i
and M 0 × M 1
.
Equations
- continuous_linear_equiv.pi_fin_two R M = {to_linear_equiv := linear_equiv.pi_fin_two R M (λ (i : fin 2), _inst_7 i), continuous_to_fun := _, continuous_inv_fun := _}
Continuous linear equivalence between vectors in M² = fin 2 → M
and M × M
.
Equations
- continuous_linear_equiv.fin_two_arrow R M = {to_linear_equiv := linear_equiv.fin_two_arrow R M _inst_4, continuous_to_fun := _, continuous_inv_fun := _}
Introduce a function inverse
from M →L[R] M₂
to M₂ →L[R] M
, which sends f
to f.symm
if
f
is a continuous linear equivalence and to 0
otherwise. This definition is somewhat ad hoc,
but one needs a fully (rather than partially) defined inverse function for some purposes, including
for calculus.
By definition, if f
is invertible then inverse f = f.symm
.
By definition, if f
is not invertible then inverse f = 0
.
The function continuous_linear_equiv.inverse
can be written in terms of ring.inverse
for the
ring of self-maps of the domain.
A submodule p
is called complemented if there exists a continuous projection M →ₗ[R] p
.