Products of modules #
This file defines constructors for linear maps whose domains or codomains are products.
It contains theorems relating these to each other, as well as to submodule.prod
, submodule.map
,
submodule.comap
, linear_map.range
, and linear_map.ker
.
Main definitions #
- products in the domain:
- products in the codomain:
- products in both domain and codomain:
linear_map.prod_map
linear_equiv.prod_map
linear_equiv.skew_prod
The first projection of a product is a linear map.
The second projection of a product is a linear map.
The prod of two linear maps is a linear map.
Taking the product of two maps with the same domain is equivalent to taking the product of their codomains.
See note [bundled maps over different rings] for why separate R
and S
semirings are used.
The left injection into a product is a linear map.
Equations
- linear_map.inl R M M₂ = linear_map.id.prod 0
The right injection into a product is a linear map.
Equations
- linear_map.inr R M M₂ = 0.prod linear_map.id
The coprod function λ x : M × M₂, f x.1 + g x.2
is a linear map.
Equations
- f.coprod g = f.comp (linear_map.fst R M M₂) + g.comp (linear_map.snd R M M₂)
Taking the product of two maps with the same codomain is equivalent to taking the product of their domains.
See note [bundled maps over different rings] for why separate R
and S
semirings are used.
Split equality of linear maps from a product into linear maps over each component, to allow ext
to apply lemmas specific to M →ₗ M₃
and M₂ →ₗ M₃
.
prod.map
of two linear maps.
Equations
- f.prod_map g = (f.comp (linear_map.fst R M M₂)).prod (g.comp (linear_map.snd R M M₂))
M
as a submodule of M × N
.
Equations
- submodule.fst R M M₂ = submodule.comap (linear_map.snd R M M₂) ⊥
M
as a submodule of M × N
is isomorphic to M
.
N
as a submodule of M × N
.
Equations
- submodule.snd R M M₂ = submodule.comap (linear_map.fst R M M₂) ⊥
N
as a submodule of M × N
is isomorphic to N
.
Product of modules is commutative up to linear isomorphism.
Product of linear equivalences; the maps come from equiv.prod_congr
.
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_fun := ((↑e₁.comp (linear_map.fst R M M₃)).prod (↑e₂.comp (linear_map.snd R M M₃) + f.comp (linear_map.fst R M M₃))).to_fun, map_add' := _, map_smul' := _, inv_fun := λ (p : M₂ × M₄), (⇑(e₁.symm) p.fst, ⇑(e₂.symm) (p.snd - ⇑f (⇑(e₁.symm) p.fst))), left_inv := _, right_inv := _}
If the union of the kernels ker f
and ker g
spans the domain, then the range of
prod f g
is equal to the product of range f
and range g
.
Tunnels and tailings #
Some preliminary work for establishing the strong rank condition for noetherian rings.
Given a morphism f : M × N →ₗ[R] M
which is i : injective f
,
we can find an infinite decreasing tunnel f i n
of copies of M
inside M
,
and sitting beside these, an infinite sequence of copies of N
.
We picturesquely name these as tailing f i n
for each individual copy of N
,
and tailings f i n
for the supremum of the first n+1
copies:
they are the pieces left behind, sitting inside the tunnel.
By construction, each tailing f i (n+1)
is disjoint from tailings f i n
;
later, when we assume M
is noetherian, this implies that N
must be trivial,
and establishes the strong rank condition for any left-noetherian ring.
An auxiliary construction for tunnel
.
The composition of f
, followed by the isomorphism back to K
,
followed by the inclusion of this submodule back into M
.
Equations
- f.tunnel_aux Kφ = (Kφ.fst.subtype.comp (linear_equiv.symm Kφ.snd).to_linear_map).comp f
Auxiliary definition for tunnel
.
Equations
- f.tunnel' i (n + 1) = ⟨submodule.map (f.tunnel_aux (f.tunnel' i n)) (submodule.fst R M N), (submodule.equiv_map_of_injective (f.tunnel_aux (f.tunnel' i n)) _ (submodule.fst R M N)).symm.trans (submodule.fst_equiv R M N)⟩
- f.tunnel' i 0 = ⟨⊤, linear_equiv.of_top ⊤ linear_map.tunnel'._main._proof_3⟩
Give an injective map f : M × N →ₗ[R] M
we can find a nested sequence of submodules
all isomorphic to M
.
Give an injective map f : M × N →ₗ[R] M
we can find a sequence of submodules
all isomorphic to N
.
Equations
- f.tailing i n = submodule.map (f.tunnel_aux (f.tunnel' i n)) (submodule.snd R M N)
Each tailing f i n
is a copy of N
.
Equations
- f.tailing_linear_equiv i n = (submodule.equiv_map_of_injective (f.tunnel_aux (f.tunnel' i n)) _ (submodule.snd R M N)).symm.trans (submodule.snd_equiv R M N)
The supremum of all the copies of N
found inside the tunnel.
Equations
- f.tailings i = ⇑(partial_sups (f.tailing i))