Products 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 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_maplinear_equiv.prod_maplinear_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₂))
linear_map.prod_map as an algebra_hom
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.
Equations
- e₁.prod e₂ = {to_fun := (e₁.to_add_equiv.prod_congr e₂.to_add_equiv).to_fun, map_add' := _, map_smul' := _, inv_fun := (e₁.to_add_equiv.prod_congr e₂.to_add_equiv).inv_fun, left_inv := _, right_inv := _}
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))
Graph of a linear map.