Pi types of modules #
This file defines constructors for linear maps whose domains or codomains are pi types.
It contains theorems relating these to each other, as well as to LinearMap.ker
.
Main definitions #
- pi types in the codomain:
- pi types in the domain:
pi
construction for linear functions. From a family of linear functions it produces a linear
function into a family of modules.
Equations
- LinearMap.pi f = let __src := Pi.addHom fun (i : ι) => (f i).toAddHom; { toFun := fun (c : M₂) (i : ι) => (f i) c, map_add' := ⋯, map_smul' := ⋯ }
Instances For
The projections from a family of modules are linear maps.
Note: known here as LinearMap.proj
, this construction is in other categories called eval
, for
example Pi.evalMonoidHom
, Pi.evalRingHom
.
Equations
- LinearMap.proj i = { toFun := Function.eval i, map_add' := ⋯, map_smul' := ⋯ }
Instances For
Equations
- ⋯ = ⋯
Linear map between the function spaces I → M₂
and I → M₃
, induced by a linear map f
between M₂
and M₃
.
Equations
Instances For
The LinearMap
version of AddMonoidHom.single
and Pi.single
.
Equations
- LinearMap.single i = let __src := AddMonoidHom.single φ i; { toFun := Pi.single i, map_add' := ⋯, map_smul' := ⋯ }
Instances For
The linear equivalence between linear functions on a finite product of modules and families of functions on these modules. See note [bundled maps over different rings].
Equations
- One or more equations did not get rendered due to their size.
Instances For
This is used as the ext lemma instead of LinearMap.pi_ext
for reasons explained in
note [partially-applied ext lemmas].
If I
and J
are disjoint index sets, the product of the kernels of the J
th projections of
φ
is linearly equivalent to the product over I
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
diag i j
is the identity map if i = j
. Otherwise it is the constant 0 map.
Equations
- LinearMap.diag i j = Function.update 0 i LinearMap.id j
Instances For
A linear map f
applied to x : ι → R
can be computed using the image under f
of elements
of the canonical basis.
A version of Set.pi
for submodules. Given an index set I
and a family of submodules
p : (i : ι) → Submodule R (φ i)
, pi I s
is the submodule of dependent functions
f : (i : ι) → φ i
such that f i
belongs to p a
whenever i ∈ I
.
Equations
- Submodule.pi I p = { carrier := I.pi fun (i : ι) => ↑(p i), add_mem' := ⋯, zero_mem' := ⋯, smul_mem' := ⋯ }
Instances For
Combine a family of linear equivalences into a linear equivalence of pi
-types.
This is Equiv.piCongrRight
as a LinearEquiv
Equations
- One or more equations did not get rendered due to their size.
Instances For
Transport dependent functions through an equivalence of the base space.
This is Equiv.piCongrLeft'
as a LinearEquiv
.
Equations
- LinearEquiv.piCongrLeft' R φ e = let __src := Equiv.piCongrLeft' φ e; { toFun := __src.toFun, map_add' := ⋯, map_smul' := ⋯, invFun := __src.invFun, left_inv := ⋯, right_inv := ⋯ }
Instances For
Transporting dependent functions through an equivalence of the base, expressed as a "simplification".
This is Equiv.piCongrLeft
as a LinearEquiv
Equations
- LinearEquiv.piCongrLeft R φ e = (LinearEquiv.piCongrLeft' R φ e.symm).symm
Instances For
Equiv.piCurry
as a LinearEquiv
.
Equations
- LinearEquiv.piCurry R α = let __spread.0 := Equiv.piCurry α; { toFun := __spread.0.toFun, map_add' := ⋯, map_smul' := ⋯, invFun := __spread.0.invFun, left_inv := ⋯, right_inv := ⋯ }
Instances For
This is Equiv.piOptionEquivProd
as a LinearEquiv
Equations
- LinearEquiv.piOptionEquivProd R = let __src := Equiv.piOptionEquivProd; { toFun := __src.toFun, map_add' := ⋯, map_smul' := ⋯, invFun := __src.invFun, left_inv := ⋯, right_inv := ⋯ }
Instances For
Linear equivalence between linear functions Rⁿ → M
and Mⁿ
. The spaces Rⁿ
and Mⁿ
are represented as ι → R
and ι → M
, respectively, where ι
is a finite type.
This as an S
-linear equivalence, under the assumption that S
acts on M
commuting with R
.
When R
is commutative, we can take this to be the usual action with S = R
.
Otherwise, S = ℕ
shows that the equivalence is additive.
See note [bundled maps over different rings].
Equations
- LinearEquiv.piRing R M ι S = (LinearMap.lsum R (fun (x : ι) => R) S).symm ≪≫ₗ LinearEquiv.piCongrRight fun (x : ι) => LinearMap.ringLmapEquivSelf R S M
Instances For
Equiv.sumArrowEquivProdArrow
as a linear equivalence.
Equations
- One or more equations did not get rendered due to their size.
Instances For
If ι
has a unique element, then ι → M
is linearly equivalent to M
.
Equations
- LinearEquiv.funUnique ι R M = let __src := Equiv.funUnique ι M; { toFun := __src.toFun, map_add' := ⋯, map_smul' := ⋯, invFun := __src.invFun, left_inv := ⋯, right_inv := ⋯ }
Instances For
Linear equivalence between dependent functions (i : Fin 2) → M i
and M 0 × M 1
.
Equations
- LinearEquiv.piFinTwo R M = let __src := piFinTwoEquiv M; { toFun := __src.toFun, map_add' := ⋯, map_smul' := ⋯, invFun := __src.invFun, left_inv := ⋯, right_inv := ⋯ }
Instances For
Function.extend s f 0
as a bundled linear map.
Equations
- Function.ExtendByZero.linearMap R s = let __src := Function.ExtendByZero.hom R s; { toFun := fun (f : ι → R) => Function.extend s f 0, map_add' := ⋯, map_smul' := ⋯ }
Instances For
Bundled versions of Matrix.vecCons
and Matrix.vecEmpty
#
The idea of these definitions is to be able to define a map as x ↦ ![f₁ x, f₂ x, f₃ x]
, where
f₁ f₂ f₃
are already linear maps, as f₁.vecCons <| f₂.vecCons <| f₃.vecCons <| vecEmpty
.
While the same thing could be achieved using LinearMap.pi ![f₁, f₂, f₃]
, this is not
definitionally equal to the result using LinearMap.vecCons
, as Fin.cases
and function
application do not commute definitionally.
Versions for when f₁ f₂ f₃
are bilinear maps are also provided.
The linear map defeq to Matrix.vecEmpty
Equations
- LinearMap.vecEmpty = { toFun := fun (x : M) => ![], map_add' := ⋯, map_smul' := ⋯ }
Instances For
A linear map into Fin n.succ → M₃
can be built out of a map into M₃
and a map into
Fin n → M₃
.
Equations
- f.vecCons g = { toFun := fun (m : M) => Matrix.vecCons (f m) (g m), map_add' := ⋯, map_smul' := ⋯ }
Instances For
The empty bilinear map defeq to Matrix.vecEmpty
Equations
- LinearMap.vecEmpty₂ = { toFun := fun (x : M) => LinearMap.vecEmpty, map_add' := ⋯, map_smul' := ⋯ }
Instances For
A bilinear map into Fin n.succ → M₃
can be built out of a map into M₃
and a map into
Fin n → M₃
Equations
- f.vecCons₂ g = { toFun := fun (m : M) => (f m).vecCons (g m), map_add' := ⋯, map_smul' := ⋯ }