|
| 1 | +/- |
| 2 | +Copyright (c) 2020 Oliver Nash. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Oliver Nash |
| 5 | +-/ |
| 6 | +import linear_algebra.tensor_product |
| 7 | +import linear_algebra.dual |
| 8 | + |
| 9 | +/-! |
| 10 | +# Contractions |
| 11 | +
|
| 12 | +Given modules $M, N$ over a commutative ring $R$, this file defines the natural linear maps: |
| 13 | +$M^* \otimes M \to R$, $M \otimes M^* \to R$, and $M^* \otimes N → Hom(M, N)$, as well as proving |
| 14 | +some basic properties of these maps. |
| 15 | +
|
| 16 | +## Tags |
| 17 | +
|
| 18 | +contraction, dual module, tensor product |
| 19 | +-/ |
| 20 | + |
| 21 | +universes u v |
| 22 | + |
| 23 | +set_option class.instance_max_depth 42 |
| 24 | + |
| 25 | +section contraction |
| 26 | +open tensor_product |
| 27 | +open_locale tensor_product |
| 28 | + |
| 29 | +variables (R : Type u) (M N : Type v) |
| 30 | +variables [comm_ring R] [add_comm_group M] [add_comm_group N] [module R M] [module R N] |
| 31 | + |
| 32 | +/-- The natural left-handed pairing between a module and its dual. -/ |
| 33 | +def contract_left : (module.dual R M) ⊗ M →ₗ[R] R := (uncurry _ _ _ _).to_fun linear_map.id |
| 34 | + |
| 35 | +/-- The natural right-handed pairing between a module and its dual. -/ |
| 36 | +def contract_right : M ⊗ (module.dual R M) →ₗ[R] R := (uncurry _ _ _ _).to_fun linear_map.id.flip |
| 37 | + |
| 38 | +/-- The natural map associating a linear map to the tensor product of two modules. -/ |
| 39 | +def dual_tensor_hom : (module.dual R M) ⊗ N →ₗ M →ₗ N := |
| 40 | + let M' := module.dual R M in |
| 41 | + (uncurry R M' N (M →ₗ[R] N) : _ → M' ⊗ N →ₗ M →ₗ N) linear_map.smul_rightₗ |
| 42 | + |
| 43 | +variables {R M N} |
| 44 | + |
| 45 | +@[simp] lemma contract_left_apply (f : module.dual R M) (m : M) : |
| 46 | + contract_left R M (f ⊗ₜ m) = f m := by apply uncurry_apply |
| 47 | + |
| 48 | +@[simp] lemma contract_right_apply (f : module.dual R M) (m : M) : |
| 49 | + contract_right R M (m ⊗ₜ f) = f m := by apply uncurry_apply |
| 50 | + |
| 51 | +@[simp] lemma dual_tensor_hom_apply (f : module.dual R M) (m : M) (n : N) : |
| 52 | + dual_tensor_hom R M N (f ⊗ₜ n) m = (f m) • n := |
| 53 | +by { dunfold dual_tensor_hom, rw uncurry_apply, refl, } |
| 54 | + |
| 55 | +end contraction |
0 commit comments