Pi types of modules #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
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 linear_map.ker
.
Main definitions #
- pi types in the codomain:
- pi types in the domain:
linear_map.diag
pi
construction for linear functions. From a family of linear functions it produces a linear
function into a family of modules.
The projections from a family of modules are linear maps.
Note: known here as linear_map.proj
, this construction is in other categories called eval
, for
example pi.eval_monoid_hom
, pi.eval_ring_hom
.
Equations
- linear_map.proj i = {to_fun := function.eval i, map_add' := _, map_smul' := _}
Linear map between the function spaces I → M₂
and I → M₃
, induced by a linear map f
between M₂
and M₃
.
The linear_map
version of add_monoid_hom.single
and pi.single
.
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].
This is used as the ext lemma instead of linear_map.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
- linear_map.infi_ker_proj_equiv R φ hd hu = linear_equiv.of_linear (linear_map.pi (λ (i : ↥I), (linear_map.proj ↑i).comp (⨅ (i : ι) (H : i ∈ J), linear_map.ker (linear_map.proj i)).subtype)) (linear_map.cod_restrict (⨅ (i : ι) (H : i ∈ J), linear_map.ker (linear_map.proj i)) (linear_map.pi (λ (i : ι), dite (i ∈ I) (λ (h : i ∈ I), linear_map.proj ⟨i, h⟩) (λ (h : i ∉ I), 0))) _) _ _
diag i j
is the identity map if i = j
. Otherwise it is the constant 0 map.
Equations
- linear_map.diag i j = function.update 0 i linear_map.id j
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
.
Combine a family of linear equivalences into a linear equivalence of pi
-types.
This is equiv.Pi_congr_right
as a linear_equiv
Transport dependent functions through an equivalence of the base space.
This is equiv.Pi_congr_left'
as a linear_equiv
.
Equations
- linear_equiv.Pi_congr_left' R φ e = {to_fun := (equiv.Pi_congr_left' φ e).to_fun, map_add' := _, map_smul' := _, inv_fun := (equiv.Pi_congr_left' φ e).inv_fun, left_inv := _, right_inv := _}
Transporting dependent functions through an equivalence of the base, expressed as a "simplification".
This is equiv.Pi_congr_left
as a linear_equiv
Equations
- linear_equiv.Pi_congr_left R φ e = (linear_equiv.Pi_congr_left' R φ e.symm).symm
This is equiv.pi_option_equiv_prod
as a linear_equiv
Equations
- linear_equiv.pi_option_equiv_prod R = {to_fun := equiv.pi_option_equiv_prod.to_fun, map_add' := _, map_smul' := _, inv_fun := equiv.pi_option_equiv_prod.inv_fun, left_inv := _, right_inv := _}
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
- linear_equiv.pi_ring R M ι S = (linear_map.lsum R (λ (i : ι), R) S).symm.trans (linear_equiv.Pi_congr_right (λ (i : ι), linear_map.ring_lmap_equiv_self R S M))
equiv.sum_arrow_equiv_prod_arrow
as a linear equivalence.
Equations
- linear_equiv.sum_arrow_lequiv_prod_arrow α β R M = {to_fun := (equiv.sum_arrow_equiv_prod_arrow α β M).to_fun, map_add' := _, map_smul' := _, inv_fun := (equiv.sum_arrow_equiv_prod_arrow α β M).inv_fun, left_inv := _, right_inv := _}
If ι
has a unique element, then ι → M
is linearly equivalent to M
.
Equations
- linear_equiv.fun_unique ι R M = {to_fun := (equiv.fun_unique ι M).to_fun, map_add' := _, map_smul' := _, inv_fun := (equiv.fun_unique ι M).inv_fun, left_inv := _, right_inv := _}
Linear equivalence between dependent functions Π i : fin 2, M i
and M 0 × M 1
.
Equations
- linear_equiv.pi_fin_two R M = {to_fun := (pi_fin_two_equiv M).to_fun, map_add' := _, map_smul' := _, inv_fun := (pi_fin_two_equiv M).inv_fun, left_inv := _, right_inv := _}
Linear equivalence between vectors in M² = fin 2 → M
and M × M
.
Equations
- linear_equiv.fin_two_arrow R M = {to_fun := (fin_two_arrow_equiv M).to_fun, map_add' := _, map_smul' := _, inv_fun := (fin_two_arrow_equiv M).inv_fun, left_inv := _, right_inv := _}
function.extend s f 0
as a bundled linear map.
Equations
- function.extend_by_zero.linear_map R s = {to_fun := λ (f : ι → R), function.extend s f 0, map_add' := _, map_smul' := _}
Bundled versions of matrix.vec_cons
and matrix.vec_empty
#
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₁.vec_cons $ f₂.vec_cons $ f₃.vec_cons $ vec_empty
.
While the same thing could be achieved using linear_map.pi ![f₁, f₂, f₃]
, this is not
definitionally equal to the result using linear_map.vec_cons
, 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.vec_empty
Equations
- linear_map.vec_empty = {to_fun := λ (m : M), matrix.vec_empty, map_add' := _, map_smul' := _}
The empty bilinear map defeq to matrix.vec_empty
Equations
- linear_map.vec_empty₂ = {to_fun := λ (m : M), linear_map.vec_empty, map_add' := _, map_smul' := _}
A bilinear map into fin n.succ → M₃
can be built out of a map into M₃
and a map into
fin n → M₃