Right-exactness properties of tensor product #
Modules #
LinearMap.rTensor_surjective
asserts that when one tensors a surjective map on the right, one still gets a surjective linear map. More generally,LinearMap.rTensor_range
computes the range ofLinearMap.rTensor
LinearMap.lTensor_surjective
asserts that when one tensors a surjective map on the left, one still gets a surjective linear map. More generally,LinearMap.lTensor_range
computes the range ofLinearMap.lTensor
TensorProduct.rTensor_exact
says that when one tensors a short exact sequence on the right, one still gets a short exact sequence (right-exactness ofTensorProduct.rTensor
), andrTensor.equiv
gives the LinearEquiv that follows from this combined withLinearMap.rTensor_surjective
.TensorProduct.lTensor_exact
says that when one tensors a short exact sequence on the left, one still gets a short exact sequence (right-exactness ofTensorProduct.rTensor
) andlTensor.equiv
gives the LinearEquiv that follows from this combined withLinearMap.lTensor_surjective
.For
N : Submodule R M
,LinearMap.exact_subtype_mkQ N
says that the inclusion of the submodule and the quotient map form an exact pair, andlTensor_mkQ
computeker (lTensor Q (N.mkQ))
and similarly forrTensor_mkQ
TensorProduct.map_ker
computes the kernel ofTensorProduct.map f g'
in the presence of two short exact sequences.
The proofs are those of [bourbaki1989] (chap. 2, §3, n°6)
Algebras #
In the case of a tensor product of algebras, these results can be particularized to compute some kernels.
Algebra.TensorProduct.ker_map
computes the kernel ofAlgebra.TensorProduct.map f g
Algebra.TensorProduct.lTensor_ker
andAlgebra.TensorProduct.rTensor_ker
compute the kernels ofAlgebra.TensorProduct.map f id
andAlgebra.TensorProduct.map id g
Note on implementation #
All kernels are computed by applying the first isomorphism theorem and establishing some isomorphisms.
The proofs are essentially done twice, once for
lTensor
and then forrTensor
. It is possible to applyTensorProduct.flip
to deduce one of them from the other. However, this approach will lead to different isomorphisms, and it is not quicker.The proofs of
Ideal.map_includeLeft_eq
andIdeal.map_includeRight_eq
could be easier ifI ⊗[R] B
was naturally anA ⊗[R] B
module, and the map toA ⊗[R] B
was known to be linear. This depends on the B-module structure on a tensor product whose use rapidly conflicts with everything…
TODO #
Treat the noncommutative case
Treat the case of modules over semirings (For a possible definition of an exact sequence of commutative semigroups, see [Grillet-1969b], Pierre-Antoine Grillet, The tensor product of commutative semigroups, Trans. Amer. Math. Soc. 138 (1969), 281-293, doi:10.1090/S0002-9947-1969-0237688-1 .)
If g
is surjective, then lTensor Q g
is surjective
If g
is surjective, then rTensor Q g
is surjective
The direct map in lTensor.equiv
Equations
- lTensor.toFun Q hfg = (LinearMap.range (LinearMap.lTensor Q f)).liftQ (LinearMap.lTensor Q g) ⋯
Instances For
The inverse map in lTensor.equiv_of_rightInverse
(computably, given a right inverse)
Equations
- One or more equations did not get rendered due to their size.
Instances For
The inverse map in lTensor.equiv
Equations
- lTensor.inverse Q hfg hg = lTensor.inverse_of_rightInverse Q hfg ⋯
Instances For
For a surjective f : N →ₗ[R] P
,
the natural equivalence between Q ⊗ N ⧸ (image of ker f)
to Q ⊗ P
(computably, given a right inverse)
Equations
- lTensor.linearEquiv_of_rightInverse Q hfg hgh = { toLinearMap := lTensor.toFun Q hfg, invFun := ⇑(lTensor.inverse_of_rightInverse Q hfg hgh), left_inv := ⋯, right_inv := ⋯ }
Instances For
For a surjective f : N →ₗ[R] P
,
the natural equivalence between Q ⊗ N ⧸ (image of ker f)
to Q ⊗ P
Equations
- lTensor.equiv Q hfg hg = lTensor.linearEquiv_of_rightInverse Q hfg ⋯
Instances For
Tensoring an exact pair on the left gives an exact pair
Right-exactness of tensor product
The direct map in rTensor.equiv
Equations
- rTensor.toFun Q hfg = (LinearMap.range (LinearMap.rTensor Q f)).liftQ (LinearMap.rTensor Q g) ⋯
Instances For
The inverse map in rTensor.equiv_of_rightInverse
(computably, given a right inverse)
Equations
- One or more equations did not get rendered due to their size.
Instances For
The inverse map in rTensor.equiv
Equations
- rTensor.inverse Q hfg hg = rTensor.inverse_of_rightInverse Q hfg ⋯
Instances For
For a surjective f : N →ₗ[R] P
,
the natural equivalence between N ⊗[R] Q ⧸ (range (rTensor Q f))
and P ⊗[R] Q
(computably, given a right inverse)
Equations
- rTensor.linearEquiv_of_rightInverse Q hfg hgh = { toLinearMap := rTensor.toFun Q hfg, invFun := ⇑(rTensor.inverse_of_rightInverse Q hfg hgh), left_inv := ⋯, right_inv := ⋯ }
Instances For
For a surjective f : N →ₗ[R] P
,
the natural equivalence between N ⊗[R] Q ⧸ (range (rTensor Q f))
and P ⊗[R] Q
Equations
- rTensor.equiv Q hfg hg = rTensor.linearEquiv_of_rightInverse Q hfg ⋯
Instances For
Tensoring an exact pair on the right gives an exact pair
Right-exactness of tensor product (rTensor
)
Kernel of a product map (right-exactness of tensor product)
Left tensoring a module with a quotient of the ring is the same as quotienting that module by the corresponding submodule.
Equations
- quotTensorEquivQuotSMul M I = (rTensor.equiv M ⋯ ⋯).symm.trans (Submodule.Quotient.equiv (LinearMap.range (LinearMap.rTensor M (Submodule.subtype I))) (I • ⊤) (TensorProduct.lid R M) ⋯)
Instances For
Right tensoring a module with a quotient of the ring is the same as quotienting that module by the corresponding submodule.
Equations
- tensorQuotEquivQuotSMul M I = (TensorProduct.comm R M (R ⧸ I)).trans (quotTensorEquivQuotSMul M I)
Instances For
The ideal of A ⊗[R] B
generated by I
is the image of I ⊗[R] B
The ideal of A ⊗[R] B
generated by I
is the image of A ⊗[R] I
If g
is surjective, then the kernel of (id A) ⊗ g
is generated by the kernel of g
If f
is surjective, then the kernel of f ⊗ (id B)
is generated by the kernel of f
If f
and g
are surjective morphisms of algebras, then
the kernel of Algebra.TensorProduct.map f g
is generated by the kernels of f
and g