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
- CategoryTheory.unopUnop C = CategoryTheory.Functor.mk { obj := fun (X : Cᵒᵖᵒᵖ) => X.unop.unop, map := fun {X Y : Cᵒᵖᵒᵖ} (f : X ⟶ Y) => f.unop.unop }
Instances For
The functor from a category to its double-opposite.
Equations
- CategoryTheory.opOp C = CategoryTheory.Functor.mk { obj := fun (X : C) => Opposite.op (Opposite.op X), map := fun {X Y : C} (f : X ⟶ Y) => f.op.op }
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
- (_ : CategoryTheory.IsIso f.op) = (_ : CategoryTheory.IsIso f.op)
If f.op
is an isomorphism f
must be too.
(This cannot be an instance as it would immediately loop!)
Equations
- (_ : CategoryTheory.IsIso f.unop) = (_ : CategoryTheory.IsIso f.unop)
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 = CategoryTheory.Functor.mk { obj := fun (X : Cᵒᵖ) => Opposite.op (F.toPrefunctor.obj X.unop), map := fun {X Y : Cᵒᵖ} (f : X ⟶ Y) => (F.toPrefunctor.map f.unop).op }
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).toPrefunctor.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.toPrefunctor.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
- F.leftOp = CategoryTheory.Functor.mk { obj := fun (X : Cᵒᵖ) => (F.toPrefunctor.obj X.unop).unop, map := fun {X Y : Cᵒᵖ} (f : X ⟶ Y) => (F.toPrefunctor.map f.unop).unop }
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
- F.rightOp = CategoryTheory.Functor.mk { obj := fun (X : C) => Opposite.op (F.toPrefunctor.obj (Opposite.op X)), map := fun {X Y : C} (f : X ⟶ Y) => (F.toPrefunctor.map f.op).op }
Instances For
Equations
- CategoryTheory.Functor.instFullOppositeOppositeOppositeOppositeOp = CategoryTheory.Full.mk fun (X Y : Cᵒᵖ) (f : F.op.toPrefunctor.obj X ⟶ F.op.toPrefunctor.obj Y) => (F.preimage f.unop).op
Equations
- (_ : CategoryTheory.Faithful F.op) = (_ : CategoryTheory.Faithful F.op)
If F is faithful then the right_op of F is also faithful.
Equations
- (_ : CategoryTheory.Faithful F.rightOp) = (_ : CategoryTheory.Faithful F.rightOp)
If F is faithful then the left_op of F is also faithful.
Equations
- (_ : CategoryTheory.Faithful F.leftOp) = (_ : CategoryTheory.Faithful F.leftOp)
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.toPrefunctor.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.toPrefunctor.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 α = CategoryTheory.NatTrans.mk fun (X : Cᵒᵖ) => (α.app X.unop).op
Instances For
The "unopposite" of a natural transformation.
Equations
- CategoryTheory.NatTrans.unop α = CategoryTheory.NatTrans.mk fun (X : C) => (α.app (Opposite.op X)).unop
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 α = CategoryTheory.NatTrans.mk fun (X : C) => (α.app (Opposite.op X)).unop
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 α = CategoryTheory.NatTrans.mk fun (X : Cᵒᵖ) => (α.app X.unop).op
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 α = CategoryTheory.NatTrans.mk fun (X : Cᵒᵖ) => (α.app X.unop).unop
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 α = CategoryTheory.NatTrans.mk fun (X : C) => (α.app (Opposite.op X)).op
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 α = CategoryTheory.NatTrans.mk fun (X : C) => (α.app (Opposite.op X)).op
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 α = CategoryTheory.NatTrans.mk fun (X : Cᵒᵖ) => (α.app X.unop).unop
Instances For
The opposite isomorphism.
Equations
- CategoryTheory.Iso.op α = CategoryTheory.Iso.mk α.hom.op α.inv.op
Instances For
The isomorphism obtained from an isomorphism in the opposite category.
Equations
- CategoryTheory.Iso.unop f = CategoryTheory.Iso.mk f.hom.unop f.inv.unop
Instances For
The natural isomorphism between opposite functors G.op ≅ F.op
induced by a natural
isomorphism between the original functors F ≅ G
.
Equations
Instances For
The natural isomorphism between functors G ≅ F
induced by a natural isomorphism
between the opposite functors F.op ≅ G.op
.
Equations
Instances For
The natural isomorphism between functors G.unop ≅ F.unop
induced by a natural isomorphism
between the original functors F ≅ G
.
Equations
Instances For
An equivalence between categories gives an equivalence between the opposite categories.
Equations
- CategoryTheory.Equivalence.op e = CategoryTheory.Equivalence.mk' e.functor.op e.inverse.op (CategoryTheory.NatIso.op e.unitIso).symm (CategoryTheory.NatIso.op e.counitIso).symm
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
- One or more equations did not get rendered due to their size.
Instances For
Equations
- (_ : Subsingleton (A ⟶ B)) = (_ : Subsingleton (A ⟶ B))
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
- One or more equations did not get rendered due to their size.
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.