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_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₂))
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))