The tensor product of R-algebras #
This file provides results about the multiplicative structure on A ⊗[R] B
when R
is a
commutative (semi)ring and A
and B
are both R
-algebras. On these tensor products,
multiplication is characterized by (a₁ ⊗ₜ b₁) * (a₂ ⊗ₜ b₂) = (a₁ * a₂) ⊗ₜ (b₁ * b₂)
.
Main declarations #
LinearMap.baseChange A f
is theA
-linear mapA ⊗ f
, for anR
-linear mapf
.Algebra.TensorProduct.semiring
: the ring structure onA ⊗[R] B
for twoR
-algebrasA
,B
.Algebra.TensorProduct.leftAlgebra
: theS
-algebra structure onA ⊗[R] B
, for whenA
is additionally anS
algebra.- the structure isomorphisms
Algebra.TensorProduct.lid : R ⊗[R] A ≃ₐ[R] A
Algebra.TensorProduct.rid : A ⊗[R] R ≃ₐ[S] A
(usually used withS = R
orS = A
)Algebra.TensorProduct.comm : A ⊗[R] B ≃ₐ[R] B ⊗[R] A
Algebra.TensorProduct.assoc : ((A ⊗[R] B) ⊗[R] C) ≃ₐ[R] (A ⊗[R] (B ⊗[R] C))
Algebra.TensorProduct.liftEquiv
: a universal property for the tensor product of algebras.
References #
The base-change of a linear map of R
-modules to a linear map of A
-modules #
baseChange A f
for f : M →ₗ[R] N
is the A
-linear map A ⊗[R] M →ₗ[A] A ⊗[R] N
.
This "base change" operation is also known as "extension of scalars".
Equations
- LinearMap.baseChange A f = TensorProduct.AlgebraTensorModule.map LinearMap.id f
Instances For
baseChange A e
for e : M ≃ₗ[R] N
is the A
-linear map A ⊗[R] M ≃ₗ[A] A ⊗[R] N
.
Equations
- LinearEquiv.baseChange R A M N e = TensorProduct.AlgebraTensorModule.congr (LinearEquiv.refl A A) e
Instances For
baseChange
as a linear map.
When M = N
, this is true more strongly as Module.End.baseChangeHom
.
Equations
- LinearMap.baseChangeHom R A M N = { toFun := LinearMap.baseChange A, map_add' := ⋯, map_smul' := ⋯ }
Instances For
baseChange
as an AlgHom
.
Equations
- Module.End.baseChangeHom R A M = AlgHom.ofLinearMap (LinearMap.baseChangeHom R A M M) ⋯ ⋯
Instances For
If M
is an R
-module and N
is an A
-module, then A
-linear maps A ⊗[R] M →ₗ[A] N
correspond to R
linear maps M →ₗ[R] N
by composing with M → A ⊗ M
, x ↦ 1 ⊗ x
.
Equations
- LinearMap.liftBaseChangeEquiv A = (LinearMap.ringLmapEquivSelf A A (M →ₗ[R] N)).symm.trans (TensorProduct.AlgebraTensorModule.lift.equiv R A A A M N)
Instances For
If N
is an A
module, we may lift a linear map M →ₗ[R] N
to A ⊗[R] M →ₗ[A] N
Equations
Instances For
The R
-algebra structure on A ⊗[R] B
#
Equations
- Algebra.TensorProduct.instAddCommMonoidWithOne = AddCommMonoidWithOne.mk ⋯
(Implementation detail)
The multiplication map on A ⊗[R] B
,
as an R
-bilinear map.
Equations
- Algebra.TensorProduct.mul = TensorProduct.map₂ (LinearMap.mul R A) (LinearMap.mul R B)
Instances For
Equations
- Algebra.TensorProduct.instMul = { mul := fun (a b : TensorProduct R A B) => (Algebra.TensorProduct.mul a) b }
Equations
- Algebra.TensorProduct.instNonUnitalNonAssocSemiring = NonUnitalNonAssocSemiring.mk ⋯ ⋯ ⋯ ⋯
Equations
- Algebra.TensorProduct.instNonAssocSemiring = NonAssocSemiring.mk ⋯ ⋯ ⋯ ⋯
Equations
- Algebra.TensorProduct.instNonUnitalSemiring = NonUnitalSemiring.mk ⋯
Equations
- Algebra.TensorProduct.instSemiring = Semiring.mk ⋯ ⋯ ⋯ ⋯ npowRecAuto ⋯ ⋯
The ring morphism A →+* A ⊗[R] B
sending a
to a ⊗ₜ 1
.
Equations
Instances For
Equations
- Algebra.TensorProduct.leftAlgebra = Algebra.mk (Algebra.TensorProduct.includeLeftRingHom.comp (algebraMap S A)) ⋯ ⋯
The tensor product of two R
-algebras is an R
-algebra.
Equations
- Algebra.TensorProduct.instAlgebra = inferInstance
The R
-algebra morphism A →ₐ[R] A ⊗[R] B
sending a
to a ⊗ₜ 1
.
Equations
- Algebra.TensorProduct.includeLeft = { toRingHom := Algebra.TensorProduct.includeLeftRingHom, commutes' := ⋯ }
Instances For
The algebra morphism B →ₐ[R] A ⊗[R] B
sending b
to 1 ⊗ₜ b
.
Equations
Instances For
A version of TensorProduct.ext
for AlgHom
.
Using this as the @[ext]
lemma instead of Algebra.TensorProduct.ext'
allows ext
to apply
lemmas specific to A →ₐ[S] _
and B →ₐ[R] _
; notably this allows recursion into nested tensor
products of algebras.
See note [partially-applied ext lemmas].
Equations
- Algebra.TensorProduct.instAddCommGroupWithOne = AddCommGroupWithOne.mk ⋯ ⋯ ⋯ ⋯
Equations
- Algebra.TensorProduct.instNonUnitalNonAssocRing = NonUnitalNonAssocRing.mk ⋯ ⋯ ⋯ ⋯
Equations
- Algebra.TensorProduct.instNonAssocRing = NonAssocRing.mk ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- Algebra.TensorProduct.instNonUnitalRing = NonUnitalRing.mk ⋯
Equations
- Algebra.TensorProduct.instCommSemiring = CommSemiring.mk ⋯
Equations
- Algebra.TensorProduct.instCommRing = CommRing.mk ⋯
S ⊗[R] T
has a T
-algebra structure. This is not a global instance or else the action of
S
on S ⊗[R] S
would be ambiguous.
Equations
- Algebra.TensorProduct.rightAlgebra = Algebra.TensorProduct.includeRight.toAlgebra' ⋯
Instances For
We now build the structure maps for the symmetric monoidal category of R
-algebras.
Build an algebra morphism from a linear map out of a tensor product, and evidence that on pure tensors, it preserves multiplication and the identity.
Note that we state h_one
using 1 ⊗ₜ[R] 1
instead of 1
so that lemmas about f
applied to pure
tensors can be directly applied by the caller (without needing TensorProduct.one_def
).
Equations
- Algebra.TensorProduct.algHomOfLinearMapTensorProduct f h_mul h_one = AlgHom.ofLinearMap f h_one ⋯
Instances For
Build an algebra equivalence from a linear equivalence out of a tensor product, and evidence that on pure tensors, it preserves multiplication and the identity.
Note that we state h_one
using 1 ⊗ₜ[R] 1
instead of 1
so that lemmas about f
applied to pure
tensors can be directly applied by the caller (without needing TensorProduct.one_def
).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Build an algebra equivalence from a linear equivalence out of a triple tensor product, and evidence of multiplicativity on pure tensors.
Equations
- Algebra.TensorProduct.algEquivOfLinearEquivTripleTensorProduct f h_mul h_one = AlgEquiv.ofLinearEquiv f h_one ⋯
Instances For
The forward direction of the universal property of tensor products of algebras; any algebra morphism from the tensor product can be factored as the product of two algebra morphisms that commute.
See Algebra.TensorProduct.liftEquiv
for the fact that every morphism factors this way.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The universal property of the tensor product of algebras.
Pairs of algebra morphisms that commute are equivalent to algebra morphisms from the tensor product.
This is Algebra.TensorProduct.lift
as an equivalence.
See also GradedTensorProduct.liftEquiv
for an alternative commutativity requirement for graded
algebra.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The base ring is a left identity for the tensor product of algebra, up to algebra isomorphism.
Equations
Instances For
The base ring is a right identity for the tensor product of algebra, up to algebra isomorphism.
Note that if A
is commutative this can be instantiated with S = A
.
Equations
Instances For
If A and B are both R- and S-algebras and their actions on them commute,
and if the S-action on A ⊗[R] B
can switch between the two factors, then there is a
canonical S-algebra homomorphism from A ⊗[S] B
to A ⊗[R] B
.
Equations
- Algebra.TensorProduct.mapOfCompatibleSMul R S A B = AlgHom.ofLinearMap (TensorProduct.mapOfCompatibleSMul R S A B) ⋯ ⋯
Instances For
mapOfCompatibleSMul R S A B
is also A-linear.
Equations
- Algebra.TensorProduct.mapOfCompatibleSMul' R S A B = AlgHom.ofLinearMap (TensorProduct.mapOfCompatibleSMul' R S A B) ⋯ ⋯
Instances For
If the R- and S-actions on A and B satisfy CompatibleSMul
both ways,
then A ⊗[S] B
is canonically isomorphic to A ⊗[R] B
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
If the R- and S- action on S and A satisfy CompatibleSMul
both ways,
then S ⊗[R] A
is canonically isomorphic to A
.
Equations
- Algebra.TensorProduct.lidOfCompatibleSMul R S A = (Algebra.TensorProduct.equivOfCompatibleSMul R S S A).symm.trans (Algebra.TensorProduct.lid S A)
Instances For
The tensor product of R-algebras is commutative, up to algebra isomorphism.
Equations
Instances For
The associator for tensor product of R-algebras, as an algebra isomorphism.
Equations
Instances For
The tensor product of a pair of algebra morphisms.
Equations
- Algebra.TensorProduct.map f g = Algebra.TensorProduct.algHomOfLinearMapTensorProduct (TensorProduct.AlgebraTensorModule.map f.toLinearMap g.toLinearMap) ⋯ ⋯
Instances For
Construct an isomorphism between tensor products of an S-algebra with an R-algebra from S- and R- isomorphisms between the tensor factors.
Equations
- Algebra.TensorProduct.congr f g = AlgEquiv.ofAlgHom (Algebra.TensorProduct.map ↑f ↑g) (Algebra.TensorProduct.map ↑f.symm ↑g.symm) ⋯ ⋯
Instances For
Tensor product of algebras analogue of mul_left_comm
.
This is the algebra version of TensorProduct.leftComm
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Tensor product of algebras analogue of mul_mul_mul_comm
.
This is the algebra version of TensorProduct.tensorTensorTensorComm
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
If A
, B
, C
are R
-algebras, A
and C
are also S
-algebras (forming a tower as
·/S/R
), then the product map of f : A →ₐ[S] C
and g : B →ₐ[R] C
is an S
-algebra
homomorphism.
This is just a special case of Algebra.TensorProduct.lift
for when C
is commutative.
Equations
Instances For
LinearMap.mul'
as an AlgHom
over the algebra.
Equations
- Algebra.TensorProduct.lmul'' R = Algebra.TensorProduct.algHomOfLinearMapTensorProduct (let __spread.0 := LinearMap.mul' R S; { toAddHom := __spread.0.toAddHom, map_smul' := ⋯ }) ⋯ ⋯
Instances For
LinearMap.mul'
as an AlgHom
over the base ring.
Equations
Instances For
If multiplication by elements of S can switch between the two factors of S ⊗[R] S
,
then lmul''
is an isomorphism.
Equations
- Algebra.TensorProduct.lmulEquiv R S = AlgEquiv.ofAlgHom (Algebra.TensorProduct.lmul'' R) Algebra.TensorProduct.includeLeft ⋯ ⋯
Instances For
If S
is commutative, for a pair of morphisms f : A →ₐ[R] S
, g : B →ₐ[R] S
,
We obtain a map A ⊗[R] B →ₐ[R] S
that commutes with f
, g
via a ⊗ b ↦ f(a) * g(b)
.
This is a special case of Algebra.TensorProduct.productLeftAlgHom
for when the two base rings are
the same.
Equations
Instances For
The natural linear map $A ⊗ \text{Hom}_R(M, N) → \text{Hom}_A (M_A, N_A)$, where $M_A$ and $N_A$ are the respective modules over $A$ obtained by extension of scalars.
See LinearMap.tensorProductEnd
for this map specialized to endomorphisms,
and bundled as A
-algebra homomorphism.
Equations
- LinearMap.tensorProduct R A M N = TensorProduct.AlgebraTensorModule.lift { toFun := fun (a : A) => a • LinearMap.baseChangeHom R A M N, map_add' := ⋯, map_smul' := ⋯ }
Instances For
The natural A
-algebra homomorphism $A ⊗ (\text{End}_R M) → \text{End}_A (A ⊗ M)$,
where M
is an R
-module, and A
an R
-algebra.
Equations
Instances For
The algebra homomorphism from End M ⊗ End N
to End (M ⊗ N)
sending f ⊗ₜ g
to
the TensorProduct.map f g
, the tensor product of the two maps.
This is an AlgHom
version of TensorProduct.AlgebraTensorModule.homTensorHomMap
. Like that
definition, this is generalized across many different rings; namely a tower of algebras A/S/R
.
Equations
- Module.endTensorEndAlgHom = Algebra.TensorProduct.algHomOfLinearMapTensorProduct (TensorProduct.AlgebraTensorModule.homTensorHomMap R A S M N M N) ⋯ ⋯
Instances For
An auxiliary definition, used for constructing the Module (A ⊗[R] B) M
in
TensorProduct.Algebra.module
below.
Equations
- TensorProduct.Algebra.moduleAux = TensorProduct.lift { toFun := fun (a : A) => a • (Algebra.lsmul R R M).toLinearMap, map_add' := ⋯, map_smul' := ⋯ }
Instances For
If M
is a representation of two different R
-algebras A
and B
whose actions commute,
then it is a representation the R
-algebra A ⊗[R] B
.
An important example arises from a semiring S
; allowing S
to act on itself via left and right
multiplication, the roles of R
, A
, B
, M
are played by ℕ
, S
, Sᵐᵒᵖ
, S
. This example
is important because a submodule of S
as a Module
over S ⊗[ℕ] Sᵐᵒᵖ
is a two-sided ideal.
NB: This is not an instance because in the case B = A
and M = A ⊗[R] A
we would have a diamond
of smul
actions. Furthermore, this would not be a mere definitional diamond but a true
mathematical diamond in which A ⊗[R] A
had two distinct scalar actions on itself: one from its
multiplication, and one from this would-be instance. Arguably we could live with this but in any
case the real fix is to address the ambiguity in notation, probably along the lines outlined here:
https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.234773.20base.20change/near/240929258