The tensor product of R-algebras #
Let R
be a (semi)ring and A
an R
-algebra.
In this file we:
- Define the
A
-module structure onA ⊗ M
, for anR
-moduleM
. - Define the
R
-algebra structure onA ⊗ B
, for anotherR
-algebraB
. and provide the structure isomorphismsR ⊗[R] A ≃ₐ[R] A
A ⊗[R] R ≃ₐ[R] A
A ⊗[R] B ≃ₐ[R] B ⊗[R] A
((A ⊗[R] B) ⊗[R] C) ≃ₐ[R] (A ⊗[R] (B ⊗[R] C))
Main declaration #
linear_map.base_change A f
is theA
-linear mapA ⊗ f
, for anR
-linear mapf
.
Implementation notes #
The heterobasic definitions below such as:
tensor_product.algebra_tensor_module.curry
tensor_product.algebra_tensor_module.uncurry
tensor_product.algebra_tensor_module.lcurry
tensor_product.algebra_tensor_module.lift
tensor_product.algebra_tensor_module.lift.equiv
tensor_product.algebra_tensor_module.mk
tensor_product.algebra_tensor_module.assoc
are just more general versions of the definitions already in linear_algebra/tensor_product
. We
could thus consider replacing the less general definitions with these ones. If we do this, we
probably should still implement the less general ones as abbreviations to the more general ones with
fewer type arguments.
The A
-module structure on A ⊗[R] M
#
Heterobasic version of tensor_product.curry
:
Given a linear map M ⊗[R] N →[A] P
, compose it with the canonical
bilinear map M →[A] N →[R] M ⊗[R] N
to form a bilinear map M →[A] N →[R] P
.
Equations
- tensor_product.algebra_tensor_module.curry f = {to_fun := (tensor_product.curry (linear_map.restrict_scalars R f)).to_fun, map_add' := _, map_smul' := _}
Just as tensor_product.ext
is marked ext
instead of tensor_product.ext'
, this is
a better ext
lemma than tensor_product.algebra_tensor_module.ext
below.
Heterobasic version of tensor_product.lift
:
Constructing a linear map M ⊗[R] N →[A] P
given a bilinear map M →[A] N →[R] P
with the
property that its composition with the canonical bilinear map M →[A] N →[R] M ⊗[R] N
is
the given bilinear map M →[A] N →[R] P
.
Equations
- tensor_product.algebra_tensor_module.lift f = {to_fun := (tensor_product.lift (linear_map.restrict_scalars R f)).to_fun, map_add' := _, map_smul' := _}
Heterobasic version of tensor_product.uncurry
:
Linearly constructing a linear map M ⊗[R] N →[A] P
given a bilinear map M →[A] N →[R] P
with the property that its composition with the canonical bilinear map M →[A] N →[R] M ⊗[R] N
is
the given bilinear map M →[A] N →[R] P
.
Equations
- tensor_product.algebra_tensor_module.uncurry R A M N P = {to_fun := tensor_product.algebra_tensor_module.lift _inst_13, map_add' := _, map_smul' := _}
Heterobasic version of tensor_product.lcurry
:
Given a linear map M ⊗[R] N →[A] P
, compose it with the canonical
bilinear map M →[A] N →[R] M ⊗[R] N
to form a bilinear map M →[A] N →[R] P
.
Equations
- tensor_product.algebra_tensor_module.lcurry R A M N P = {to_fun := tensor_product.algebra_tensor_module.curry _inst_13, map_add' := _, map_smul' := _}
Heterobasic version of tensor_product.lift.equiv
:
A linear equivalence constructing a linear map M ⊗[R] N →[A] P
given a
bilinear map M →[A] N →[R] P
with the property that its composition with the
canonical bilinear map M →[A] N →[R] M ⊗[R] N
is the given bilinear map M →[A] N →[R] P
.
Equations
- tensor_product.algebra_tensor_module.lift.equiv R A M N P = linear_equiv.of_linear (tensor_product.algebra_tensor_module.uncurry R A M N P) (tensor_product.algebra_tensor_module.lcurry R A M N P) _ _
Heterobasic version of tensor_product.mk
:
The canonical bilinear map M →[A] N →[R] M ⊗[R] N
.
Equations
- tensor_product.algebra_tensor_module.mk R A M N = {to_fun := (tensor_product.mk R M N).to_fun, map_add' := _, map_smul' := _}
Heterobasic version of tensor_product.assoc
:
Linear equivalence between (M ⊗[A] N) ⊗[R] P
and M ⊗[A] (N ⊗[R] P)
.
Equations
- tensor_product.algebra_tensor_module.assoc R A M N P = linear_equiv.of_linear (tensor_product.algebra_tensor_module.lift (⇑(tensor_product.uncurry A M P (N →ₗ[R] M ⊗ (P ⊗ N))) ((tensor_product.algebra_tensor_module.lcurry R A P N (M ⊗ (P ⊗ N))).comp (tensor_product.mk A M (P ⊗ N))))) (⇑(tensor_product.uncurry A M (P ⊗ N) (M ⊗ P ⊗ N)) ((tensor_product.algebra_tensor_module.uncurry R A P N (M ⊗ P ⊗ N)).comp (tensor_product.curry (tensor_product.algebra_tensor_module.mk R A (M ⊗ P) N)))) _ _
The base-change of a linear map of R
-modules to a linear map of A
-modules #
base_change A f
for f : M →ₗ[R] N
is the A
-linear map A ⊗[R] M →ₗ[A] A ⊗[R] N
.
Equations
- linear_map.base_change A f = {to_fun := ⇑(linear_map.ltensor A f), map_add' := _, map_smul' := _}
base_change
as a linear map.
Equations
- linear_map.base_change_hom R A M N = {to_fun := linear_map.base_change A _inst_9, map_add' := _, map_smul' := _}
The R
-algebra structure on A ⊗[R] B
#
(Implementation detail)
The multiplication map on A ⊗[R] B
,
for a fixed pure tensor in the first argument,
as an R
-linear map.
Equations
- algebra.tensor_product.mul_aux a₁ b₁ = tensor_product.map (algebra.lmul_left R a₁) (algebra.lmul_left R b₁)
(Implementation detail)
The multiplication map on A ⊗[R] B
,
as an R
-bilinear map.
Equations
- algebra.tensor_product.mul = tensor_product.lift (linear_map.mk₂ R algebra.tensor_product.mul_aux algebra.tensor_product.mul._proof_3 algebra.tensor_product.mul._proof_4 algebra.tensor_product.mul._proof_5 algebra.tensor_product.mul._proof_6)
Equations
- algebra.tensor_product.tensor_product.semiring = {add := has_add.add (add_zero_class.to_has_add (A ⊗ B)), add_assoc := _, zero := 0, zero_add := _, add_zero := _, nsmul := add_comm_monoid.nsmul tensor_product.add_comm_monoid, nsmul_zero' := _, nsmul_succ' := _, add_comm := _, mul := λ (a b : A ⊗ B), ⇑(⇑algebra.tensor_product.mul a) b, left_distrib := _, right_distrib := _, zero_mul := _, mul_zero := _, mul_assoc := _, one := 1 ⊗ₜ[R] 1, one_mul := _, mul_one := _, npow := monoid_with_zero.npow._default (1 ⊗ₜ[R] 1) (λ (a b : A ⊗ B), ⇑(⇑algebra.tensor_product.mul a) b) algebra.tensor_product.one_mul algebra.tensor_product.mul_one, npow_zero' := _, npow_succ' := _}
The algebra map R →+* (A ⊗[R] B)
giving A ⊗[R] B
the structure of an R
-algebra.
Equations
- algebra.tensor_product.tensor_product.algebra = {to_has_scalar := mul_action.to_has_scalar distrib_mul_action.to_mul_action, to_ring_hom := {to_fun := algebra.tensor_product.tensor_algebra_map.to_fun, map_one' := _, map_mul' := _, map_zero' := _, map_add' := _}, commutes' := _, smul_def' := _}
The algebra morphism A →ₐ[R] A ⊗[R] B
sending a
to a ⊗ₜ 1
.
The algebra morphism B →ₐ[R] A ⊗[R] B
sending b
to 1 ⊗ₜ b
.
Equations
- algebra.tensor_product.tensor_product.ring = {add := add_comm_group.add tensor_product.add_comm_group, add_assoc := _, zero := add_comm_group.zero tensor_product.add_comm_group, zero_add := _, add_zero := _, nsmul := add_comm_group.nsmul tensor_product.add_comm_group, nsmul_zero' := _, nsmul_succ' := _, neg := add_comm_group.neg tensor_product.add_comm_group, sub := add_comm_group.sub tensor_product.add_comm_group, sub_eq_add_neg := _, zsmul := add_comm_group.zsmul tensor_product.add_comm_group, zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _, mul := semiring.mul algebra.tensor_product.tensor_product.semiring, mul_assoc := _, one := semiring.one algebra.tensor_product.tensor_product.semiring, one_mul := _, mul_one := _, npow := semiring.npow algebra.tensor_product.tensor_product.semiring, npow_zero' := _, npow_succ' := _, left_distrib := _, right_distrib := _}
Equations
- algebra.tensor_product.tensor_product.comm_ring = {add := ring.add algebra.tensor_product.tensor_product.ring, add_assoc := _, zero := ring.zero algebra.tensor_product.tensor_product.ring, zero_add := _, add_zero := _, nsmul := ring.nsmul algebra.tensor_product.tensor_product.ring, nsmul_zero' := _, nsmul_succ' := _, neg := ring.neg algebra.tensor_product.tensor_product.ring, sub := ring.sub algebra.tensor_product.tensor_product.ring, sub_eq_add_neg := _, zsmul := ring.zsmul algebra.tensor_product.tensor_product.ring, zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _, mul := ring.mul algebra.tensor_product.tensor_product.ring, mul_assoc := _, one := ring.one algebra.tensor_product.tensor_product.ring, one_mul := _, mul_one := _, npow := ring.npow algebra.tensor_product.tensor_product.ring, npow_zero' := _, npow_succ' := _, left_distrib := _, right_distrib := _, mul_comm := _}
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 of multiplicativity on pure tensors.
Build an algebra equivalence from a linear equivalence out of a tensor product, and evidence of multiplicativity on pure tensors.
Build an algebra equivalence from a linear equivalence out of a triple tensor product, and evidence of multiplicativity on pure tensors.
The base ring is a left identity for the tensor product of algebra, up to algebra isomorphism.
Equations
The base ring is a right identity for the tensor product of algebra, up to algebra isomorphism.
Equations
The tensor product of R-algebras is commutative, up to algebra isomorphism.
Equations
The associator for tensor product of R-algebras, as an algebra isomorphism.
The tensor product of a pair of algebra morphisms.
Construct an isomorphism between tensor products of R-algebras from isomorphisms between the tensor factors.
Equations
- algebra.tensor_product.congr f g = alg_equiv.of_alg_hom (algebra.tensor_product.map ↑f ↑g) (algebra.tensor_product.map ↑(f.symm) ↑(g.symm)) _ _
algebra.lmul'
is an alg_hom on commutative rings.
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)
.