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 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.proj i).ker).subtype)) (linear_map.cod_restrict (⨅ (i : ι) (H : i ∈ J), (linear_map.proj i).ker) (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' := _}
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
Non-dependent version of pi.has_scalar
. Lean gets confused by the dependent instance if this
is not present.
Equations
Non-dependent version of pi.smul_comm_class
. Lean gets confused by the dependent instance if
this is not present.
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₃