|
| 1 | +/- |
| 2 | +Copyright (c) 2020 Scott Morrison. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Kevin Buzzard, Scott Morrison, Jakob von Raumer |
| 5 | +
|
| 6 | +! This file was ported from Lean 3 source module algebra.category.Module.monoidal.symmetric |
| 7 | +! leanprover-community/mathlib commit 74403a3b2551b0970855e14ef5e8fd0d6af1bfc2 |
| 8 | +! Please do not edit these lines, except to modify the commit id |
| 9 | +! if you have ported upstream changes. |
| 10 | +-/ |
| 11 | +import Mathlib.CategoryTheory.Monoidal.Braided |
| 12 | +import Mathlib.Algebra.Category.ModuleCat.Monoidal.Basic |
| 13 | + |
| 14 | +/-! |
| 15 | +# The symmetric monoidal structure on `Module R`. |
| 16 | +-/ |
| 17 | + |
| 18 | + |
| 19 | +universe v w x u |
| 20 | + |
| 21 | +open CategoryTheory |
| 22 | + |
| 23 | +namespace ModuleCat |
| 24 | + |
| 25 | +variable {R : Type u} [CommRing R] |
| 26 | + |
| 27 | +/-- (implementation) the braiding for R-modules -/ |
| 28 | +def braiding (M N : ModuleCat.{u} R) : M ⊗ N ≅ N ⊗ M := |
| 29 | + LinearEquiv.toModuleIso (TensorProduct.comm R M N) |
| 30 | +set_option linter.uppercaseLean3 false in |
| 31 | +#align Module.braiding ModuleCat.braiding |
| 32 | + |
| 33 | +namespace MonoidalCategory |
| 34 | + |
| 35 | +@[simp] |
| 36 | +theorem braiding_naturality {X₁ X₂ Y₁ Y₂ : ModuleCat.{u} R} (f : X₁ ⟶ Y₁) (g : X₂ ⟶ Y₂) : |
| 37 | + (f ⊗ g) ≫ (Y₁.braiding Y₂).hom = (X₁.braiding X₂).hom ≫ (g ⊗ f) := by |
| 38 | + apply TensorProduct.ext' |
| 39 | + intro x y |
| 40 | + rfl |
| 41 | +set_option linter.uppercaseLean3 false in |
| 42 | +#align Module.monoidal_category.braiding_naturality ModuleCat.MonoidalCategory.braiding_naturality |
| 43 | + |
| 44 | +@[simp] |
| 45 | +theorem hexagon_forward (X Y Z : ModuleCat.{u} R) : |
| 46 | + (α_ X Y Z).hom ≫ (braiding X _).hom ≫ (α_ Y Z X).hom = |
| 47 | + ((braiding X Y).hom ⊗ 𝟙 Z) ≫ (α_ Y X Z).hom ≫ (𝟙 Y ⊗ (braiding X Z).hom) := by |
| 48 | + apply TensorProduct.ext_threefold |
| 49 | + intro x y z |
| 50 | + rfl |
| 51 | +set_option linter.uppercaseLean3 false in |
| 52 | +#align Module.monoidal_category.hexagon_forward ModuleCat.MonoidalCategory.hexagon_forward |
| 53 | + |
| 54 | +@[simp] |
| 55 | +theorem hexagon_reverse (X Y Z : ModuleCat.{u} R) : |
| 56 | + (α_ X Y Z).inv ≫ (braiding _ Z).hom ≫ (α_ Z X Y).inv = |
| 57 | + (𝟙 X ⊗ (Y.braiding Z).hom) ≫ (α_ X Z Y).inv ≫ ((X.braiding Z).hom ⊗ 𝟙 Y) := by |
| 58 | + apply (cancel_epi (α_ X Y Z).hom).1 |
| 59 | + apply TensorProduct.ext_threefold |
| 60 | + intro x y z |
| 61 | + rfl |
| 62 | +set_option linter.uppercaseLean3 false in |
| 63 | +#align Module.monoidal_category.hexagon_reverse ModuleCat.MonoidalCategory.hexagon_reverse |
| 64 | + |
| 65 | +attribute [local ext] TensorProduct.ext |
| 66 | + |
| 67 | +/-- The symmetric monoidal structure on `Module R`. -/ |
| 68 | +instance symmetricCategory : SymmetricCategory (ModuleCat.{u} R) where |
| 69 | + braiding := braiding |
| 70 | + braiding_naturality f g := braiding_naturality f g |
| 71 | + hexagon_forward := hexagon_forward |
| 72 | + hexagon_reverse := hexagon_reverse |
| 73 | + -- porting note: this proof was automatic in Lean3 |
| 74 | + -- now `aesop` is applying `ModuleCat.ext` in favour of `TensorProduct.ext`. |
| 75 | + symmetry _ _ := by |
| 76 | + apply TensorProduct.ext' |
| 77 | + aesop_cat |
| 78 | +set_option linter.uppercaseLean3 false in |
| 79 | +#align Module.monoidal_category.symmetric_category ModuleCat.MonoidalCategory.symmetricCategory |
| 80 | + |
| 81 | +@[simp] |
| 82 | +theorem braiding_hom_apply {M N : ModuleCat.{u} R} (m : M) (n : N) : |
| 83 | + ((β_ M N).hom : M ⊗ N ⟶ N ⊗ M) (m ⊗ₜ n) = n ⊗ₜ m := |
| 84 | + rfl |
| 85 | +set_option linter.uppercaseLean3 false in |
| 86 | +#align Module.monoidal_category.braiding_hom_apply ModuleCat.MonoidalCategory.braiding_hom_apply |
| 87 | + |
| 88 | +@[simp] |
| 89 | +theorem braiding_inv_apply {M N : ModuleCat.{u} R} (m : M) (n : N) : |
| 90 | + ((β_ M N).inv : N ⊗ M ⟶ M ⊗ N) (n ⊗ₜ m) = m ⊗ₜ n := |
| 91 | + rfl |
| 92 | +set_option linter.uppercaseLean3 false in |
| 93 | +#align Module.monoidal_category.braiding_inv_apply ModuleCat.MonoidalCategory.braiding_inv_apply |
| 94 | + |
| 95 | +end MonoidalCategory |
| 96 | + |
| 97 | +end ModuleCat |
0 commit comments