Opposite categories #
We provide a category instance on Cᵒᵖ.
The morphisms X ⟶ Y are defined to be the morphisms unop Y ⟶ unop X in C.
Here Cᵒᵖ is an irreducible typeclass synonym for C
(it is the same one used in the algebra library).
We also provide various mechanisms for constructing opposite morphisms, functors, and natural transformations.
Unfortunately, because we do not have a definitional equality op (op X) = X,
there are quite a few variations that are needed in practice.
The opposite category.
See
Equations
- CategoryTheory.Category.opposite = CategoryTheory.Category.mk ⋯ ⋯ ⋯
The functor from the double-opposite of a category to the underlying category.
Equations
Instances For
The functor from a category to its double-opposite.
Equations
- CategoryTheory.opOp C = { toPrefunctor := { obj := fun (X : C) => Opposite.op (Opposite.op X), map := fun {X Y : C} (f : X ⟶ Y) => f.op.op }, map_id := ⋯, map_comp := ⋯ }
Instances For
The double opposite category is equivalent to the original.
Equations
- One or more equations did not get rendered due to their size.
Instances For
If f is an isomorphism, so is f.op
Equations
- ⋯ = ⋯
If f.op is an isomorphism f must be too.
(This cannot be an instance as it would immediately loop!)
Equations
- ⋯ = ⋯
The opposite of a functor, i.e. considering a functor F : C ⥤ D as a functor Cᵒᵖ ⥤ Dᵒᵖ.
In informal mathematics no distinction is made between these.
Equations
- F.op = { toPrefunctor := { obj := fun (X : Cᵒᵖ) => Opposite.op (F.obj X.unop), map := fun {X Y : Cᵒᵖ} (f : X ⟶ Y) => (F.map f.unop).op }, map_id := ⋯, map_comp := ⋯ }
Instances For
Given a functor F : Cᵒᵖ ⥤ Dᵒᵖ we can take the "unopposite" functor F : C ⥤ D.
In informal mathematics no distinction is made between these.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The isomorphism between F.op.unop and F.
Equations
- CategoryTheory.Functor.opUnopIso F = CategoryTheory.NatIso.ofComponents (fun (X : C) => CategoryTheory.Iso.refl ((CategoryTheory.Functor.unop F.op).obj X)) ⋯
Instances For
The isomorphism between F.unop.op and F.
Equations
- CategoryTheory.Functor.unopOpIso F = CategoryTheory.NatIso.ofComponents (fun (X : Cᵒᵖ) => CategoryTheory.Iso.refl ((CategoryTheory.Functor.unop F).op.obj X)) ⋯
Instances For
Taking the opposite of a functor is functorial.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Take the "unopposite" of a functor is functorial.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Another variant of the opposite of functor, turning a functor C ⥤ Dᵒᵖ into a functor Cᵒᵖ ⥤ D.
In informal mathematics no distinction is made.
Equations
Instances For
Another variant of the opposite of functor, turning a functor Cᵒᵖ ⥤ D into a functor C ⥤ Dᵒᵖ.
In informal mathematics no distinction is made.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- ⋯ = ⋯
If F is faithful then the right_op of F is also faithful.
Equations
- ⋯ = ⋯
If F is faithful then the left_op of F is also faithful.
Equations
- ⋯ = ⋯
The isomorphism between F.leftOp.rightOp and F.
Equations
- CategoryTheory.Functor.leftOpRightOpIso F = CategoryTheory.NatIso.ofComponents (fun (X : C) => CategoryTheory.Iso.refl (F.leftOp.rightOp.obj X)) ⋯
Instances For
The isomorphism between F.rightOp.leftOp and F.
Equations
- CategoryTheory.Functor.rightOpLeftOpIso F = CategoryTheory.NatIso.ofComponents (fun (X : Cᵒᵖ) => CategoryTheory.Iso.refl (F.rightOp.leftOp.obj X)) ⋯
Instances For
Whenever possible, it is advisable to use the isomorphism rightOpLeftOpIso
instead of this equality of functors.
The opposite of a natural transformation.
Equations
- CategoryTheory.NatTrans.op α = { app := fun (X : Cᵒᵖ) => (α.app X.unop).op, naturality := ⋯ }
Instances For
The "unopposite" of a natural transformation.
Equations
- CategoryTheory.NatTrans.unop α = { app := fun (X : C) => (α.app (Opposite.op X)).unop, naturality := ⋯ }
Instances For
Given a natural transformation α : F.op ⟶ G.op,
we can take the "unopposite" of each component obtaining a natural transformation G ⟶ F.
Equations
- CategoryTheory.NatTrans.removeOp α = { app := fun (X : C) => (α.app (Opposite.op X)).unop, naturality := ⋯ }
Instances For
Given a natural transformation α : F.unop ⟶ G.unop, we can take the opposite of each
component obtaining a natural transformation G ⟶ F.
Equations
- CategoryTheory.NatTrans.removeUnop α = { app := fun (X : Cᵒᵖ) => (α.app X.unop).op, naturality := ⋯ }
Instances For
Given a natural transformation α : F ⟶ G, for F G : C ⥤ Dᵒᵖ,
taking unop of each component gives a natural transformation G.leftOp ⟶ F.leftOp.
Equations
- CategoryTheory.NatTrans.leftOp α = { app := fun (X : Cᵒᵖ) => (α.app X.unop).unop, naturality := ⋯ }
Instances For
Given a natural transformation α : F.leftOp ⟶ G.leftOp, for F G : C ⥤ Dᵒᵖ,
taking op of each component gives a natural transformation G ⟶ F.
Equations
- CategoryTheory.NatTrans.removeLeftOp α = { app := fun (X : C) => (α.app (Opposite.op X)).op, naturality := ⋯ }
Instances For
Given a natural transformation α : F ⟶ G, for F G : Cᵒᵖ ⥤ D,
taking op of each component gives a natural transformation G.rightOp ⟶ F.rightOp.
Equations
- CategoryTheory.NatTrans.rightOp α = { app := fun (X : C) => (α.app (Opposite.op X)).op, naturality := ⋯ }
Instances For
Given a natural transformation α : F.rightOp ⟶ G.rightOp, for F G : Cᵒᵖ ⥤ D,
taking unop of each component gives a natural transformation G ⟶ F.
Equations
- CategoryTheory.NatTrans.removeRightOp α = { app := fun (X : Cᵒᵖ) => (α.app X.unop).unop, naturality := ⋯ }
Instances For
The opposite isomorphism.
Equations
- CategoryTheory.Iso.op α = { hom := α.hom.op, inv := α.inv.op, hom_inv_id := ⋯, inv_hom_id := ⋯ }
Instances For
The isomorphism obtained from an isomorphism in the opposite category.
Equations
- CategoryTheory.Iso.unop f = { hom := f.hom.unop, inv := f.inv.unop, hom_inv_id := ⋯, inv_hom_id := ⋯ }
Instances For
The natural isomorphism between opposite functors G.op ≅ F.op induced by a natural
isomorphism between the original functors F ≅ G.
Equations
- CategoryTheory.NatIso.op α = { hom := CategoryTheory.NatTrans.op α.hom, inv := CategoryTheory.NatTrans.op α.inv, hom_inv_id := ⋯, inv_hom_id := ⋯ }
Instances For
The natural isomorphism between functors G ≅ F induced by a natural isomorphism
between the opposite functors F.op ≅ G.op.
Equations
- CategoryTheory.NatIso.removeOp α = { hom := CategoryTheory.NatTrans.removeOp α.hom, inv := CategoryTheory.NatTrans.removeOp α.inv, hom_inv_id := ⋯, inv_hom_id := ⋯ }
Instances For
The natural isomorphism between functors G.unop ≅ F.unop induced by a natural isomorphism
between the original functors F ≅ G.
Equations
- CategoryTheory.NatIso.unop α = { hom := CategoryTheory.NatTrans.unop α.hom, inv := CategoryTheory.NatTrans.unop α.inv, hom_inv_id := ⋯, inv_hom_id := ⋯ }
Instances For
An equivalence between categories gives an equivalence between the opposite categories.
Equations
- One or more equations did not get rendered due to their size.
Instances For
An equivalence between opposite categories gives an equivalence between the original categories.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The equivalence between arrows of the form A ⟶ B and B.unop ⟶ A.unop. Useful for building
adjunctions.
Note that this (definitionally) gives variants
def opEquiv' (A : C) (B : Cᵒᵖ) : (Opposite.op A ⟶ B) ≃ (B.unop ⟶ A) :=
opEquiv _ _
def opEquiv'' (A : Cᵒᵖ) (B : C) : (A ⟶ Opposite.op B) ≃ (B ⟶ A.unop) :=
opEquiv _ _
def opEquiv''' (A B : C) : (Opposite.op A ⟶ Opposite.op B) ≃ (B ⟶ A) :=
opEquiv _ _
Equations
- CategoryTheory.opEquiv A B = { toFun := fun (f : A ⟶ B) => f.unop, invFun := fun (g : B.unop ⟶ A.unop) => g.op, left_inv := ⋯, right_inv := ⋯ }
Instances For
Equations
- ⋯ = ⋯
Equations
The equivalence between isomorphisms of the form A ≅ B and B.unop ≅ A.unop.
Note this is definitionally the same as the other three variants:
(Opposite.op A ≅ B) ≃ (B.unop ≅ A)(A ≅ Opposite.op B) ≃ (B ≅ A.unop)(Opposite.op A ≅ Opposite.op B) ≃ (B ≅ A)
Equations
- CategoryTheory.isoOpEquiv A B = { toFun := fun (f : A ≅ B) => CategoryTheory.Iso.unop f, invFun := fun (g : B.unop ≅ A.unop) => CategoryTheory.Iso.op g, left_inv := ⋯, right_inv := ⋯ }
Instances For
The equivalence of functor categories induced by op and unop.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The equivalence of functor categories induced by leftOp and rightOp.
Equations
- One or more equations did not get rendered due to their size.