Contractions #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
Given modules $M, N$ over a commutative ring $R$, this file defines the natural linear maps: $M^* \otimes M \to R$, $M \otimes M^* \to R$, and $M^* \otimes N → Hom(M, N)$, as well as proving some basic properties of these maps.
Tags #
contraction, dual module, tensor product
The natural left-handed pairing between a module and its dual.
Equations
- contract_left R M = (tensor_product.uncurry R (module.dual R M) M R).to_fun linear_map.id
The natural right-handed pairing between a module and its dual.
Equations
- contract_right R M = (tensor_product.uncurry R M (module.dual R M) R).to_fun linear_map.id.flip
The natural map associating a linear map to the tensor product of two modules.
Equations
- dual_tensor_hom R M N = let M' : Type (max u_3 u_2) := module.dual R M in ⇑(tensor_product.uncurry R M' N (M →ₗ[R] N)) linear_map.smul_rightₗ
As a matrix, dual_tensor_hom
evaluated on a basis element of M* ⊗ N
is a matrix with a
single one and zeros elsewhere
If M
is free, the natural linear map $M^* ⊗ N → Hom(M, N)$ is an equivalence. This function
provides this equivalence in return for a basis of M
.
Equations
- dual_tensor_hom_equiv_of_basis b = linear_equiv.of_linear (dual_tensor_hom R M N) (finset.univ.sum (λ (i : ι), (⇑(tensor_product.mk R (module.dual R M) N) (⇑(b.dual_basis) i)).comp (⇑linear_map.applyₗ (⇑b i)))) _ _
If M
is finite free, the natural map $M^* ⊗ N → Hom(M, N)$ is an
equivalence.
Equations
When M
is a finite free module, the map ltensor_hom_to_hom_ltensor
is an equivalence. Note
that ltensor_hom_equiv_hom_ltensor
is not defined directly in terms of
ltensor_hom_to_hom_ltensor
, but the equivalence between the two is given by
ltensor_hom_equiv_hom_ltensor_to_linear_map
and ltensor_hom_equiv_hom_ltensor_apply
.
Equations
- ltensor_hom_equiv_hom_ltensor R M P Q = ((tensor_product.congr (linear_equiv.refl R P) (dual_tensor_hom_equiv R M Q).symm).trans (tensor_product.left_comm R P (module.dual R M) Q)).trans (dual_tensor_hom_equiv R M (tensor_product R P Q))
When M
is a finite free module, the map rtensor_hom_to_hom_rtensor
is an equivalence. Note
that rtensor_hom_equiv_hom_rtensor
is not defined directly in terms of
rtensor_hom_to_hom_rtensor
, but the equivalence between the two is given by
rtensor_hom_equiv_hom_rtensor_to_linear_map
and rtensor_hom_equiv_hom_rtensor_apply
.
Equations
- rtensor_hom_equiv_hom_rtensor R M P Q = ((tensor_product.congr (dual_tensor_hom_equiv R M P).symm (linear_equiv.refl R Q)).trans (tensor_product.assoc R (module.dual R M) P Q)).trans (dual_tensor_hom_equiv R M (tensor_product R P Q))
When M
and N
are free R
modules, the map hom_tensor_hom_map
is an equivalence. Note that
hom_tensor_hom_equiv
is not defined directly in terms of hom_tensor_hom_map
, but the equivalence
between the two is given by hom_tensor_hom_equiv_to_linear_map
and hom_tensor_hom_equiv_apply
.
Equations
- hom_tensor_hom_equiv R M N P Q = ((rtensor_hom_equiv_hom_rtensor R M P (N →ₗ[R] Q)).trans ((linear_equiv.refl R M).arrow_congr (ltensor_hom_equiv_hom_ltensor R N P Q))).trans (tensor_product.lift.equiv R M N (tensor_product R P Q))