# Half braidings and the Drinfeld center of a monoidal category #

We define Center C to be pairs ⟨X, b⟩, where X : C and b is a half-braiding on X.

We show that Center C is braided monoidal, and provide the monoidal functor Center.forget from Center C back to C.

## Implementation notes #

Verifying the various axioms directly requires tedious rewriting. Using the slice tactic may make the proofs marginally more readable.

More exciting, however, would be to make possible one of the following options:

1. Integration with homotopy.io / globular to give "picture proofs".
2. The monoidal coherence theorem, so we can ignore associators (after which most of these proofs are trivial).
3. Automating these proofs using rewrite_search or some relative.

In this file, we take the second approach using the monoidal composition ⊗≫ and the coherence tactic.

structure CategoryTheory.HalfBraiding {C : Type u₁} [] (X : C) :
Type (max u₁ v₁)

A half-braiding on X : C is a family of isomorphisms X ⊗ U ≅ U ⊗ X, monoidally natural in U : C.

Thinking of C as a 2-category with a single 0-morphism, these are the same as natural transformations (in the pseudo- sense) of the identity 2-functor on C, which send the unique 0-morphism to X.

Instances For
@[simp]
theorem CategoryTheory.HalfBraiding.naturality {C : Type u₁} [] {X : C} (self : ) {U : C} {U' : C} (f : U U') :
theorem CategoryTheory.HalfBraiding.naturality_assoc {C : Type u₁} [] {X : C} (self : ) {U : C} {U' : C} (f : U U') {Z : C} (h : ) :
=
def CategoryTheory.Center (C : Type u₁) [] :
Type (max u₁ u₁ v₁)

The Drinfeld center of a monoidal category C has as objects pairs ⟨X, b⟩, where X : C and b is a half-braiding on X.

Equations
• = ((X : C) × )
Instances For
theorem CategoryTheory.Center.Hom.ext_iff {C : Type u₁} :
∀ {inst : } {inst_1 : } {X Y : } (x y : X.Hom Y), x = y x.f = y.f
theorem CategoryTheory.Center.Hom.ext {C : Type u₁} :
∀ {inst : } {inst_1 : } {X Y : } (x y : X.Hom Y), x.f = y.fx = y
structure CategoryTheory.Center.Hom {C : Type u₁} [] (X : ) (Y : ) :
Type v₁

A morphism in the Drinfeld center of C.

Instances For
@[simp]
theorem CategoryTheory.Center.Hom.comm {C : Type u₁} [] {X : } {Y : } (self : X.Hom Y) (U : C) :
@[simp]
theorem CategoryTheory.Center.Hom.comm_assoc {C : Type u₁} [] {X : } {Y : } (self : X.Hom Y) (U : C) {Z : C} (h : ) :
instance CategoryTheory.Center.instQuiver {C : Type u₁} [] :
Equations
• CategoryTheory.Center.instQuiver = { Hom := CategoryTheory.Center.Hom }
theorem CategoryTheory.Center.ext {C : Type u₁} [] {X : } {Y : } (f : X Y) (g : X Y) (w : f.f = g.f) :
f = g
instance CategoryTheory.Center.instCategory {C : Type u₁} [] :
Equations
• CategoryTheory.Center.instCategory =
@[simp]
theorem CategoryTheory.Center.id_f {C : Type u₁} [] (X : ) :
@[simp]
theorem CategoryTheory.Center.comp_f {C : Type u₁} [] {X : } {Y : } {Z : } (f : X Y) (g : Y Z) :
@[simp]
theorem CategoryTheory.Center.isoMk_hom {C : Type u₁} [] {X : } {Y : } (f : X Y) [] :
.hom = f
@[simp]
theorem CategoryTheory.Center.isoMk_inv_f {C : Type u₁} [] {X : } {Y : } (f : X Y) [] :
.inv.f =
def CategoryTheory.Center.isoMk {C : Type u₁} [] {X : } {Y : } (f : X Y) [] :
X Y

Construct an isomorphism in the Drinfeld center from a morphism whose underlying morphism is an isomorphism.

Equations
• = { hom := f, inv := { f := , comm := }, hom_inv_id := , inv_hom_id := }
Instances For
instance CategoryTheory.Center.isIso_of_f_isIso {C : Type u₁} [] {X : } {Y : } (f : X Y) [] :
Equations
• =
@[simp]
theorem CategoryTheory.Center.tensorObj_fst {C : Type u₁} [] (X : ) (Y : ) :
(X.tensorObj Y).fst =
def CategoryTheory.Center.tensorObj {C : Type u₁} [] (X : ) (Y : ) :

Auxiliary definition for the MonoidalCategory instance on Center C.

Equations
• One or more equations did not get rendered due to their size.
Instances For
theorem CategoryTheory.Center.whiskerLeft_comm_assoc {C : Type u₁} [] (X : ) {Y₁ : } {Y₂ : } (f : Y₁ Y₂) (U : C) {Z : C} (h : CategoryTheory.MonoidalCategory.tensorObj U (X.tensorObj Y₂).fst Z) :
CategoryTheory.CategoryStruct.comp (CategoryTheory.CategoryStruct.comp ((X.tensorObj Y₂).snd U).hom h) = CategoryTheory.CategoryStruct.comp ((X.tensorObj Y₁).snd U).hom
theorem CategoryTheory.Center.whiskerLeft_comm {C : Type u₁} [] (X : ) {Y₁ : } {Y₂ : } (f : Y₁ Y₂) (U : C) :
CategoryTheory.CategoryStruct.comp ((X.tensorObj Y₂).snd U).hom = CategoryTheory.CategoryStruct.comp ((X.tensorObj Y₁).snd U).hom
def CategoryTheory.Center.whiskerLeft {C : Type u₁} [] (X : ) {Y₁ : } {Y₂ : } (f : Y₁ Y₂) :
X.tensorObj Y₁ X.tensorObj Y₂

Auxiliary definition for the MonoidalCategory instance on Center C.

Equations
• X.whiskerLeft f = { f := , comm := }
Instances For
theorem CategoryTheory.Center.whiskerRight_comm_assoc {C : Type u₁} [] {X₁ : } {X₂ : } (f : X₁ X₂) (Y : ) (U : C) {Z : C} (h : CategoryTheory.MonoidalCategory.tensorObj U (X₂.tensorObj Y).fst Z) :
CategoryTheory.CategoryStruct.comp (CategoryTheory.CategoryStruct.comp ((X₂.tensorObj Y).snd U).hom h) = CategoryTheory.CategoryStruct.comp ((X₁.tensorObj Y).snd U).hom
theorem CategoryTheory.Center.whiskerRight_comm {C : Type u₁} [] {X₁ : } {X₂ : } (f : X₁ X₂) (Y : ) (U : C) :
CategoryTheory.CategoryStruct.comp ((X₂.tensorObj Y).snd U).hom = CategoryTheory.CategoryStruct.comp ((X₁.tensorObj Y).snd U).hom
def CategoryTheory.Center.whiskerRight {C : Type u₁} [] {X₁ : } {X₂ : } (f : X₁ X₂) (Y : ) :
X₁.tensorObj Y X₂.tensorObj Y

Auxiliary definition for the MonoidalCategory instance on Center C.

Equations
• = { f := , comm := }
Instances For
@[simp]
theorem CategoryTheory.Center.tensorHom_f {C : Type u₁} [] {X₁ : } {Y₁ : } {X₂ : } {Y₂ : } (f : X₁ Y₁) (g : X₂ Y₂) :
def CategoryTheory.Center.tensorHom {C : Type u₁} [] {X₁ : } {Y₁ : } {X₂ : } {Y₂ : } (f : X₁ Y₁) (g : X₂ Y₂) :
X₁.tensorObj X₂ Y₁.tensorObj Y₂

Auxiliary definition for the MonoidalCategory instance on Center C.

Equations
• = { f := , comm := }
Instances For
@[simp]
theorem CategoryTheory.Center.tensorUnit_fst {C : Type u₁} [] :
CategoryTheory.Center.tensorUnit.fst = 𝟙_ C
@[simp]
theorem CategoryTheory.Center.tensorUnit_snd_β {C : Type u₁} [] (U : C) :
CategoryTheory.Center.tensorUnit.snd U =

Auxiliary definition for the MonoidalCategory instance on Center C.

Equations
• One or more equations did not get rendered due to their size.
Instances For
def CategoryTheory.Center.associator {C : Type u₁} [] (X : ) (Y : ) (Z : ) :
(X.tensorObj Y).tensorObj Z X.tensorObj (Y.tensorObj Z)

Auxiliary definition for the MonoidalCategory instance on Center C.

Equations
Instances For
def CategoryTheory.Center.leftUnitor {C : Type u₁} [] (X : ) :
CategoryTheory.Center.tensorUnit.tensorObj X X

Auxiliary definition for the MonoidalCategory instance on Center C.

Equations
Instances For
def CategoryTheory.Center.rightUnitor {C : Type u₁} [] (X : ) :
X.tensorObj CategoryTheory.Center.tensorUnit X

Auxiliary definition for the MonoidalCategory instance on Center C.

Equations
Instances For
Equations
@[simp]
theorem CategoryTheory.Center.tensor_fst {C : Type u₁} [] (X : ) (Y : ) :
=
@[simp]
theorem CategoryTheory.Center.whiskerLeft_f {C : Type u₁} [] (X : ) {Y₁ : } {Y₂ : } (f : Y₁ Y₂) :
@[simp]
theorem CategoryTheory.Center.whiskerRight_f {C : Type u₁} [] {X₁ : } {X₂ : } (f : X₁ X₂) (Y : ) :
@[simp]
theorem CategoryTheory.Center.tensor_f {C : Type u₁} [] {X₁ : } {Y₁ : } {X₂ : } {Y₂ : } (f : X₁ Y₁) (g : X₂ Y₂) :
@[simp]
theorem CategoryTheory.Center.tensorUnit_β {C : Type u₁} [] (U : C) :
(𝟙_ ).snd U =
@[simp]
theorem CategoryTheory.Center.associator_hom_f {C : Type u₁} [] (X : ) (Y : ) (Z : ) :
.hom.f = (CategoryTheory.MonoidalCategory.associator X.fst Y.fst Z.fst).hom
@[simp]
theorem CategoryTheory.Center.associator_inv_f {C : Type u₁} [] (X : ) (Y : ) (Z : ) :
.inv.f = (CategoryTheory.MonoidalCategory.associator X.fst Y.fst Z.fst).inv
@[simp]
theorem CategoryTheory.Center.leftUnitor_hom_f {C : Type u₁} [] (X : ) :
= .hom
@[simp]
theorem CategoryTheory.Center.leftUnitor_inv_f {C : Type u₁} [] (X : ) :
= .inv
@[simp]
theorem CategoryTheory.Center.rightUnitor_hom_f {C : Type u₁} [] (X : ) :
= .hom
@[simp]
theorem CategoryTheory.Center.rightUnitor_inv_f {C : Type u₁} [] (X : ) :
= .inv
@[simp]
@[simp]
theorem CategoryTheory.Center.forget_toLaxMonoidalFunctor_toFunctor_map (C : Type u₁) [] :
∀ {X Y : } (f : X Y), .map f = f.f
@[simp]
@[simp]
theorem CategoryTheory.Center.forget_toLaxMonoidalFunctor_μ (C : Type u₁) [] (X : ) (Y : ) :

The forgetful monoidal functor from the Drinfeld center to the original category.

Equations
• One or more equations did not get rendered due to their size.
Instances For
instance CategoryTheory.Center.instReflectsIsomorphismsForget (C : Type u₁) [] :
.ReflectsIsomorphisms
Equations
• =
@[simp]
theorem CategoryTheory.Center.braiding_inv_f {C : Type u₁} [] (X : ) (Y : ) :
(X.braiding Y).inv.f = (X.snd Y.fst).inv
@[simp]
theorem CategoryTheory.Center.braiding_hom_f {C : Type u₁} [] (X : ) (Y : ) :
(X.braiding Y).hom.f = (X.snd Y.fst).hom

Auxiliary definition for the BraidedCategory instance on Center C.

Equations
Instances For
Equations
• One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Center.ofBraidedObj_fst {C : Type u₁} [] (X : C) :
= X
@[simp]
theorem CategoryTheory.Center.ofBraidedObj_snd_β {C : Type u₁} [] (X : C) (Y : C) :
Y = β_ X Y
def CategoryTheory.Center.ofBraidedObj {C : Type u₁} [] (X : C) :

Auxiliary construction for ofBraided.

Equations
• = X, { β := fun (Y : C) => β_ X Y, monoidal := , naturality := }
Instances For
@[simp]
theorem CategoryTheory.Center.ofBraided_toLaxMonoidalFunctor_toFunctor_map_f (C : Type u₁) [] :
∀ {X Y : C} (f : X Y), (.map f).f = f
@[simp]
@[simp]
theorem CategoryTheory.Center.ofBraided_toLaxMonoidalFunctor_μ_f (C : Type u₁) [] (X : C) (Y : C) :
( X Y).f = CategoryTheory.CategoryStruct.id (CategoryTheory.MonoidalCategory.tensorObj ({ obj := CategoryTheory.Center.ofBraidedObj, map := fun {X Y : C} (f : X Y) => { f := f, comm := }, map_id := , map_comp := }.obj X) ({ obj := CategoryTheory.Center.ofBraidedObj, map := fun {X Y : C} (f : X Y) => { f := f, comm := }, map_id := , map_comp := }.obj Y)).fst
@[simp]

The functor lifting a braided category to its center, using the braiding as the half-braiding.

Equations
• One or more equations did not get rendered due to their size.
Instances For