Skip to content

Commit 4515484

Browse files
committed
feat: port Algebra.Category.Module.Monoidal.Symmetric (#4664)
Co-authored-by: Joël Riou <37772949+joelriou@users.noreply.github.com>
1 parent 2ec3275 commit 4515484

File tree

2 files changed

+98
-0
lines changed

2 files changed

+98
-0
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ import Mathlib.Algebra.Category.ModuleCat.Images
5353
import Mathlib.Algebra.Category.ModuleCat.Kernels
5454
import Mathlib.Algebra.Category.ModuleCat.Limits
5555
import Mathlib.Algebra.Category.ModuleCat.Monoidal.Basic
56+
import Mathlib.Algebra.Category.ModuleCat.Monoidal.Symmetric
5657
import Mathlib.Algebra.Category.ModuleCat.Products
5758
import Mathlib.Algebra.Category.ModuleCat.Projective
5859
import Mathlib.Algebra.Category.ModuleCat.Tannaka
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
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

Comments
 (0)