Documentation

Mathlib.CategoryTheory.Opposites

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.

theorem Quiver.Hom.op_inj {C : Type u₁} [Quiver C] {X Y : C} :
@[simp]
theorem Quiver.Hom.unop_op {C : Type u₁} [Quiver C] {X Y : C} (f : X Y) :
f.op.unop = f
@[simp]
theorem Quiver.Hom.unop_op' {C : Type u₁} [Quiver C] {X Y : Cᵒᵖ} {x : Opposite.unop Y Opposite.unop X} :
@[simp]
theorem Quiver.Hom.op_unop {C : Type u₁} [Quiver C] {X Y : Cᵒᵖ} (f : X Y) :
f.unop.op = f
@[simp]
theorem Quiver.Hom.unop_mk {C : Type u₁} [Quiver C] {X Y : Cᵒᵖ} (f : X Y) :
@[simp]
theorem CategoryTheory.op_comp {C : Type u₁} [Category.{v₁, u₁} C] {X Y Z : C} {f : X Y} {g : Y Z} :
theorem CategoryTheory.op_comp_assoc {C : Type u₁} [Category.{v₁, u₁} C] {X Y Z : C} {f : X Y} {g : Y Z} {Z✝ : Cᵒᵖ} (h : Opposite.op X Z✝) :
@[simp]
theorem CategoryTheory.unop_comp {C : Type u₁} [Category.{v₁, u₁} C] {X Y Z : Cᵒᵖ} {f : X Y} {g : Y Z} :
(CategoryStruct.comp f g).unop = CategoryStruct.comp g.unop f.unop
theorem CategoryTheory.unop_comp_assoc {C : Type u₁} [Category.{v₁, u₁} C] {X Y Z : Cᵒᵖ} {f : X Y} {g : Y Z} {Z✝ : C} (h : Opposite.unop X Z✝) :

The functor from the double-opposite of a category to the underlying category.

Equations
Instances For
    @[simp]
    theorem CategoryTheory.unopUnop_map (C : Type u₁) [Category.{v₁, u₁} C] {X✝ Y✝ : Cᵒᵖᵒᵖ} (f : X✝ Y✝) :
    (unopUnop C).map f = f.unop.unop

    The functor from a category to its double-opposite.

    Equations
    Instances For
      @[simp]
      theorem CategoryTheory.opOp_map (C : Type u₁) [Category.{v₁, u₁} C] {X✝ Y✝ : C} (f : X✝ Y✝) :
      (opOp C).map f = f.op.op
      @[simp]
      theorem CategoryTheory.opOp_obj (C : Type u₁) [Category.{v₁, u₁} C] (X : C) :

      The double opposite category is equivalent to the original.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        instance CategoryTheory.isIso_op {C : Type u₁} [Category.{v₁, u₁} C] {X Y : C} (f : X Y) [IsIso f] :
        IsIso f.op

        If f is an isomorphism, so is f.op

        theorem CategoryTheory.isIso_of_op {C : Type u₁} [Category.{v₁, u₁} C] {X Y : C} (f : X Y) [IsIso f.op] :

        If f.op is an isomorphism f must be too. (This cannot be an instance as it would immediately loop!)

        theorem CategoryTheory.isIso_op_iff {C : Type u₁} [Category.{v₁, u₁} C] {X Y : C} (f : X Y) :
        IsIso f.op IsIso f
        theorem CategoryTheory.isIso_unop_iff {C : Type u₁} [Category.{v₁, u₁} C] {X Y : Cᵒᵖ} (f : X Y) :
        IsIso f.unop IsIso f
        instance CategoryTheory.isIso_unop {C : Type u₁} [Category.{v₁, u₁} C] {X Y : Cᵒᵖ} (f : X Y) [IsIso f] :
        IsIso f.unop
        @[simp]
        theorem CategoryTheory.op_inv {C : Type u₁} [Category.{v₁, u₁} C] {X Y : C} (f : X Y) [IsIso f] :
        (inv f).op = inv f.op
        @[simp]
        theorem CategoryTheory.unop_inv {C : Type u₁} [Category.{v₁, u₁} C] {X Y : Cᵒᵖ} (f : X Y) [IsIso f] :
        (inv f).unop = inv 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
        Instances For
          @[simp]
          theorem CategoryTheory.Functor.op_obj {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor C D) (X : Cᵒᵖ) :
          F.op.obj X = Opposite.op (F.obj (Opposite.unop X))
          @[simp]
          theorem CategoryTheory.Functor.op_map {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor C D) {X✝ Y✝ : Cᵒᵖ} (f : X✝ Y✝) :
          F.op.map f = (F.map f.unop).op

          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
          • F.unop = { obj := fun (X : C) => Opposite.unop (F.obj (Opposite.op X)), map := fun {X Y : C} (f : X Y) => (F.map f.op).unop, map_id := , map_comp := }
          Instances For
            @[simp]
            theorem CategoryTheory.Functor.unop_map {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor Cᵒᵖ Dᵒᵖ) {X✝ Y✝ : C} (f : X✝ Y✝) :
            F.unop.map f = (F.map f.op).unop
            @[simp]
            theorem CategoryTheory.Functor.unop_obj {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor Cᵒᵖ Dᵒᵖ) (X : C) :
            F.unop.obj X = Opposite.unop (F.obj (Opposite.op X))
            def CategoryTheory.Functor.opUnopIso {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor C D) :
            F.op.unop F

            The isomorphism between F.op.unop and F.

            Equations
            Instances For
              @[simp]
              theorem CategoryTheory.Functor.opUnopIso_inv_app {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor C D) (X : C) :
              F.opUnopIso.inv.app X = CategoryStruct.id (F.obj X)
              @[simp]
              theorem CategoryTheory.Functor.opUnopIso_hom_app {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor C D) (X : C) :
              F.opUnopIso.hom.app X = CategoryStruct.id (F.obj X)

              The isomorphism between F.unop.op and F.

              Equations
              Instances For
                @[simp]
                theorem CategoryTheory.Functor.unopOpIso_inv_app {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor Cᵒᵖ Dᵒᵖ) (X : Cᵒᵖ) :
                F.unopOpIso.inv.app X = CategoryStruct.id (F.obj X)
                @[simp]
                theorem CategoryTheory.Functor.unopOpIso_hom_app {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor Cᵒᵖ Dᵒᵖ) (X : Cᵒᵖ) :
                F.unopOpIso.hom.app X = CategoryStruct.id (F.obj X)

                Taking the opposite of a functor is functorial.

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  @[simp]
                  theorem CategoryTheory.Functor.opHom_map_app (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] {X✝ Y✝ : (Functor C D)ᵒᵖ} (α : X✝ Y✝) (X : Cᵒᵖ) :
                  ((opHom C D).map α).app X = (α.unop.app (Opposite.unop X)).op
                  @[simp]
                  theorem CategoryTheory.Functor.opHom_obj (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] (F : (Functor C D)ᵒᵖ) :
                  (opHom C D).obj F = (Opposite.unop F).op

                  Take the "unopposite" of a functor is functorial.

                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For
                    @[simp]
                    theorem CategoryTheory.Functor.opInv_map (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] {X✝ Y✝ : Functor Cᵒᵖ Dᵒᵖ} (α : X✝ Y✝) :
                    (opInv C D).map α = Quiver.Hom.op { app := fun (X : C) => (α.app (Opposite.op X)).unop, naturality := }
                    @[simp]

                    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
                      @[simp]
                      theorem CategoryTheory.Functor.leftOp_map {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor C Dᵒᵖ) {X✝ Y✝ : Cᵒᵖ} (f : X✝ Y✝) :
                      F.leftOp.map f = (F.map f.unop).unop
                      @[simp]
                      theorem CategoryTheory.Functor.leftOp_obj {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor C Dᵒᵖ) (X : Cᵒᵖ) :
                      F.leftOp.obj X = Opposite.unop (F.obj (Opposite.unop X))

                      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 = { obj := fun (X : C) => Opposite.op (F.obj (Opposite.op X)), map := fun {X Y : C} (f : X Y) => (F.map f.op).op, map_id := , map_comp := }
                      Instances For
                        @[simp]
                        theorem CategoryTheory.Functor.rightOp_obj {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor Cᵒᵖ D) (X : C) :
                        F.rightOp.obj X = Opposite.op (F.obj (Opposite.op X))
                        @[simp]
                        theorem CategoryTheory.Functor.rightOp_map {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor Cᵒᵖ D) {X✝ Y✝ : C} (f : X✝ Y✝) :
                        F.rightOp.map f = (F.map f.op).op
                        theorem CategoryTheory.Functor.rightOp_map_unop {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F : Functor Cᵒᵖ D} {X Y : C} (f : X Y) :
                        (F.rightOp.map f).unop = F.map f.op
                        instance CategoryTheory.Functor.instFullOppositeOp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F : Functor C D} [F.Full] :
                        F.op.Full
                        instance CategoryTheory.Functor.instFaithfulOppositeOp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F : Functor C D} [F.Faithful] :
                        F.op.Faithful
                        instance CategoryTheory.Functor.rightOp_faithful {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F : Functor Cᵒᵖ D} [F.Faithful] :
                        F.rightOp.Faithful

                        If F is faithful then the right_op of F is also faithful.

                        instance CategoryTheory.Functor.leftOp_faithful {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F : Functor C Dᵒᵖ} [F.Faithful] :
                        F.leftOp.Faithful

                        If F is faithful then the left_op of F is also faithful.

                        instance CategoryTheory.Functor.rightOp_full {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F : Functor Cᵒᵖ D} [F.Full] :
                        F.rightOp.Full
                        instance CategoryTheory.Functor.leftOp_full {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F : Functor C Dᵒᵖ} [F.Full] :
                        F.leftOp.Full
                        def CategoryTheory.Functor.leftOpRightOpIso {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor C Dᵒᵖ) :
                        F.leftOp.rightOp F

                        The isomorphism between F.leftOp.rightOp and F.

                        Equations
                        Instances For
                          @[simp]
                          theorem CategoryTheory.Functor.leftOpRightOpIso_inv_app {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor C Dᵒᵖ) (X : C) :
                          F.leftOpRightOpIso.inv.app X = CategoryStruct.id (F.obj X)
                          @[simp]
                          theorem CategoryTheory.Functor.leftOpRightOpIso_hom_app {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor C Dᵒᵖ) (X : C) :
                          F.leftOpRightOpIso.hom.app X = CategoryStruct.id (F.obj X)
                          def CategoryTheory.Functor.rightOpLeftOpIso {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor Cᵒᵖ D) :
                          F.rightOp.leftOp F

                          The isomorphism between F.rightOp.leftOp and F.

                          Equations
                          Instances For
                            @[simp]
                            theorem CategoryTheory.Functor.rightOpLeftOpIso_inv_app {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor Cᵒᵖ D) (X : Cᵒᵖ) :
                            F.rightOpLeftOpIso.inv.app X = CategoryStruct.id (F.obj X)
                            @[simp]
                            theorem CategoryTheory.Functor.rightOpLeftOpIso_hom_app {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor Cᵒᵖ D) (X : Cᵒᵖ) :
                            F.rightOpLeftOpIso.hom.app X = CategoryStruct.id (F.obj X)
                            theorem CategoryTheory.Functor.rightOp_leftOp_eq {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor Cᵒᵖ D) :
                            F.rightOp.leftOp = F

                            Whenever possible, it is advisable to use the isomorphism rightOpLeftOpIso instead of this equality of functors.

                            def CategoryTheory.NatTrans.op {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor C D} (α : F G) :
                            G.op F.op

                            The opposite of a natural transformation.

                            Equations
                            Instances For
                              @[simp]
                              theorem CategoryTheory.NatTrans.op_app {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor C D} (α : F G) (X : Cᵒᵖ) :
                              (NatTrans.op α).app X = (α.app (Opposite.unop X)).op
                              def CategoryTheory.NatTrans.unop {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor Cᵒᵖ Dᵒᵖ} (α : F G) :
                              G.unop F.unop

                              The "unopposite" of a natural transformation.

                              Equations
                              Instances For
                                @[simp]
                                theorem CategoryTheory.NatTrans.unop_app {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor Cᵒᵖ Dᵒᵖ} (α : F G) (X : C) :
                                (NatTrans.unop α).app X = (α.app (Opposite.op X)).unop
                                def CategoryTheory.NatTrans.removeOp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor C D} (α : F.op G.op) :
                                G F

                                Given a natural transformation α : F.op ⟶ G.op, we can take the "unopposite" of each component obtaining a natural transformation G ⟶ F.

                                Equations
                                Instances For
                                  @[simp]
                                  theorem CategoryTheory.NatTrans.removeOp_app {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor C D} (α : F.op G.op) (X : C) :
                                  (NatTrans.removeOp α).app X = (α.app (Opposite.op X)).unop
                                  def CategoryTheory.NatTrans.removeUnop {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor Cᵒᵖ Dᵒᵖ} (α : F.unop G.unop) :
                                  G F

                                  Given a natural transformation α : F.unop ⟶ G.unop, we can take the opposite of each component obtaining a natural transformation G ⟶ F.

                                  Equations
                                  Instances For
                                    @[simp]
                                    theorem CategoryTheory.NatTrans.removeUnop_app {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor Cᵒᵖ Dᵒᵖ} (α : F.unop G.unop) (X : Cᵒᵖ) :
                                    (NatTrans.removeUnop α).app X = (α.app (Opposite.unop X)).op
                                    def CategoryTheory.NatTrans.leftOp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor C Dᵒᵖ} (α : F G) :
                                    G.leftOp F.leftOp

                                    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
                                    Instances For
                                      @[simp]
                                      theorem CategoryTheory.NatTrans.leftOp_app {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor C Dᵒᵖ} (α : F G) (X : Cᵒᵖ) :
                                      (NatTrans.leftOp α).app X = (α.app (Opposite.unop X)).unop
                                      def CategoryTheory.NatTrans.removeLeftOp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor C Dᵒᵖ} (α : F.leftOp G.leftOp) :
                                      G F

                                      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
                                      Instances For
                                        @[simp]
                                        theorem CategoryTheory.NatTrans.removeLeftOp_app {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor C Dᵒᵖ} (α : F.leftOp G.leftOp) (X : C) :
                                        (NatTrans.removeLeftOp α).app X = (α.app (Opposite.op X)).op
                                        def CategoryTheory.NatTrans.rightOp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor Cᵒᵖ D} (α : F G) :
                                        G.rightOp F.rightOp

                                        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
                                        Instances For
                                          @[simp]
                                          theorem CategoryTheory.NatTrans.rightOp_app {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor Cᵒᵖ D} (α : F G) (x✝ : C) :
                                          (NatTrans.rightOp α).app x✝ = (α.app (Opposite.op x✝)).op
                                          def CategoryTheory.NatTrans.removeRightOp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor Cᵒᵖ D} (α : F.rightOp G.rightOp) :
                                          G F

                                          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
                                          Instances For
                                            @[simp]
                                            theorem CategoryTheory.NatTrans.removeRightOp_app {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor Cᵒᵖ D} (α : F.rightOp G.rightOp) (X : Cᵒᵖ) :
                                            (NatTrans.removeRightOp α).app X = (α.app (Opposite.unop X)).unop
                                            def CategoryTheory.Iso.op {C : Type u₁} [Category.{v₁, u₁} C] {X Y : C} (α : X Y) :

                                            The opposite isomorphism.

                                            Equations
                                            • α.op = { hom := α.hom.op, inv := α.inv.op, hom_inv_id := , inv_hom_id := }
                                            Instances For
                                              @[simp]
                                              theorem CategoryTheory.Iso.op_hom {C : Type u₁} [Category.{v₁, u₁} C] {X Y : C} (α : X Y) :
                                              α.op.hom = α.hom.op
                                              @[simp]
                                              theorem CategoryTheory.Iso.op_inv {C : Type u₁} [Category.{v₁, u₁} C] {X Y : C} (α : X Y) :
                                              α.op.inv = α.inv.op

                                              The isomorphism obtained from an isomorphism in the opposite category.

                                              Equations
                                              • f.unop = { hom := f.hom.unop, inv := f.inv.unop, hom_inv_id := , inv_hom_id := }
                                              Instances For
                                                @[simp]
                                                theorem CategoryTheory.Iso.unop_inv {C : Type u₁} [Category.{v₁, u₁} C] {X Y : Cᵒᵖ} (f : X Y) :
                                                f.unop.inv = f.inv.unop
                                                @[simp]
                                                theorem CategoryTheory.Iso.unop_hom {C : Type u₁} [Category.{v₁, u₁} C] {X Y : Cᵒᵖ} (f : X Y) :
                                                f.unop.hom = f.hom.unop
                                                @[simp]
                                                theorem CategoryTheory.Iso.unop_op {C : Type u₁} [Category.{v₁, u₁} C] {X Y : Cᵒᵖ} (f : X Y) :
                                                f.unop.op = f
                                                @[simp]
                                                theorem CategoryTheory.Iso.op_unop {C : Type u₁} [Category.{v₁, u₁} C] {X Y : C} (f : X Y) :
                                                f.op.unop = f
                                                @[simp]
                                                theorem CategoryTheory.Iso.unop_hom_inv_id_app {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u_1} [Category.{u_2, u_1} D] {F G : Functor C Dᵒᵖ} (e : F G) (X : C) :
                                                CategoryStruct.comp (e.hom.app X).unop (e.inv.app X).unop = CategoryStruct.id (Opposite.unop (G.obj X))
                                                @[simp]
                                                theorem CategoryTheory.Iso.unop_hom_inv_id_app_assoc {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u_1} [Category.{u_2, u_1} D] {F G : Functor C Dᵒᵖ} (e : F G) (X : C) {Z : D} (h : Opposite.unop (G.obj X) Z) :
                                                CategoryStruct.comp (e.hom.app X).unop (CategoryStruct.comp (e.inv.app X).unop h) = h
                                                @[simp]
                                                theorem CategoryTheory.Iso.unop_inv_hom_id_app {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u_1} [Category.{u_2, u_1} D] {F G : Functor C Dᵒᵖ} (e : F G) (X : C) :
                                                CategoryStruct.comp (e.inv.app X).unop (e.hom.app X).unop = CategoryStruct.id (Opposite.unop (F.obj X))
                                                @[simp]
                                                theorem CategoryTheory.Iso.unop_inv_hom_id_app_assoc {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u_1} [Category.{u_2, u_1} D] {F G : Functor C Dᵒᵖ} (e : F G) (X : C) {Z : D} (h : Opposite.unop (F.obj X) Z) :
                                                CategoryStruct.comp (e.inv.app X).unop (CategoryStruct.comp (e.hom.app X).unop h) = h
                                                def CategoryTheory.NatIso.op {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor C D} (α : F G) :
                                                G.op F.op

                                                The natural isomorphism between opposite functors G.op ≅ F.op induced by a natural isomorphism between the original functors F ≅ G.

                                                Equations
                                                Instances For
                                                  @[simp]
                                                  theorem CategoryTheory.NatIso.op_inv {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor C D} (α : F G) :
                                                  (NatIso.op α).inv = NatTrans.op α.inv
                                                  @[simp]
                                                  theorem CategoryTheory.NatIso.op_hom {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor C D} (α : F G) :
                                                  (NatIso.op α).hom = NatTrans.op α.hom
                                                  def CategoryTheory.NatIso.removeOp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor C D} (α : F.op G.op) :
                                                  G F

                                                  The natural isomorphism between functors G ≅ F induced by a natural isomorphism between the opposite functors F.op ≅ G.op.

                                                  Equations
                                                  Instances For
                                                    @[simp]
                                                    theorem CategoryTheory.NatIso.removeOp_hom {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor C D} (α : F.op G.op) :
                                                    @[simp]
                                                    theorem CategoryTheory.NatIso.removeOp_inv {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor C D} (α : F.op G.op) :
                                                    def CategoryTheory.NatIso.unop {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor Cᵒᵖ Dᵒᵖ} (α : F G) :
                                                    G.unop F.unop

                                                    The natural isomorphism between functors G.unop ≅ F.unop induced by a natural isomorphism between the original functors F ≅ G.

                                                    Equations
                                                    Instances For
                                                      @[simp]
                                                      theorem CategoryTheory.NatIso.unop_hom {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor Cᵒᵖ Dᵒᵖ} (α : F G) :
                                                      (NatIso.unop α).hom = NatTrans.unop α.hom
                                                      @[simp]
                                                      theorem CategoryTheory.NatIso.unop_inv {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F G : Functor Cᵒᵖ Dᵒᵖ} (α : F G) :
                                                      (NatIso.unop α).inv = NatTrans.unop α.inv

                                                      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
                                                        @[simp]
                                                        theorem CategoryTheory.Equivalence.op_functor {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (e : C D) :
                                                        e.op.functor = e.functor.op
                                                        @[simp]
                                                        theorem CategoryTheory.Equivalence.op_unitIso {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (e : C D) :
                                                        e.op.unitIso = (NatIso.op e.unitIso).symm
                                                        @[simp]
                                                        theorem CategoryTheory.Equivalence.op_counitIso {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (e : C D) :
                                                        e.op.counitIso = (NatIso.op e.counitIso).symm
                                                        @[simp]
                                                        theorem CategoryTheory.Equivalence.op_inverse {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (e : C D) :
                                                        e.op.inverse = e.inverse.op

                                                        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
                                                          @[simp]
                                                          theorem CategoryTheory.Equivalence.unop_functor {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (e : Cᵒᵖ Dᵒᵖ) :
                                                          e.unop.functor = e.functor.unop
                                                          @[simp]
                                                          theorem CategoryTheory.Equivalence.unop_inverse {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (e : Cᵒᵖ Dᵒᵖ) :
                                                          e.unop.inverse = e.inverse.unop
                                                          @[simp]
                                                          theorem CategoryTheory.Equivalence.unop_unitIso {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (e : Cᵒᵖ Dᵒᵖ) :
                                                          e.unop.unitIso = (NatIso.unop e.unitIso).symm
                                                          @[simp]
                                                          theorem CategoryTheory.Equivalence.unop_counitIso {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (e : Cᵒᵖ Dᵒᵖ) :
                                                          e.unop.counitIso = (NatIso.unop e.counitIso).symm

                                                          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
                                                          Instances For
                                                            @[simp]
                                                            theorem CategoryTheory.opEquiv_symm_apply {C : Type u₁} [Category.{v₁, u₁} C] (A B : Cᵒᵖ) (g : Opposite.unop B Opposite.unop A) :
                                                            (opEquiv A B).symm g = g.op
                                                            @[simp]
                                                            theorem CategoryTheory.opEquiv_apply {C : Type u₁} [Category.{v₁, u₁} C] (A B : Cᵒᵖ) (f : A B) :
                                                            (opEquiv A B) f = f.unop

                                                            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:

                                                            Equations
                                                            Instances For
                                                              @[simp]
                                                              @[simp]
                                                              theorem CategoryTheory.isoOpEquiv_apply {C : Type u₁} [Category.{v₁, u₁} C] (A B : Cᵒᵖ) (f : A B) :
                                                              (isoOpEquiv A B) f = f.unop

                                                              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
                                                                @[simp]
                                                                theorem CategoryTheory.Functor.opUnopEquiv_counitIso (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] :
                                                                (opUnopEquiv C D).counitIso = NatIso.ofComponents (fun (F : Functor Cᵒᵖ Dᵒᵖ) => F.unopOpIso)
                                                                @[simp]
                                                                theorem CategoryTheory.Functor.opUnopEquiv_unitIso (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] :
                                                                (opUnopEquiv C D).unitIso = NatIso.ofComponents (fun (F : (Functor C D)ᵒᵖ) => (Opposite.unop F).opUnopIso.op)

                                                                The equivalence of functor categories induced by leftOp and rightOp.

                                                                Equations
                                                                • One or more equations did not get rendered due to their size.
                                                                Instances For
                                                                  @[simp]
                                                                  theorem CategoryTheory.Functor.leftOpRightOpEquiv_functor_map_app (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] {X✝ Y✝ : (Functor Cᵒᵖ D)ᵒᵖ} (η : X✝ Y✝) (x✝ : C) :
                                                                  ((leftOpRightOpEquiv C D).functor.map η).app x✝ = (η.unop.app (Opposite.op x✝)).op
                                                                  @[simp]
                                                                  theorem CategoryTheory.Functor.leftOpRightOpEquiv_unitIso_inv_app (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] (X : (Functor Cᵒᵖ D)ᵒᵖ) :
                                                                  (leftOpRightOpEquiv C D).unitIso.inv.app X = (Opposite.unop X).rightOpLeftOpIso.inv.op
                                                                  @[simp]
                                                                  theorem CategoryTheory.Functor.leftOpRightOpEquiv_counitIso_inv_app_app (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] (X : Functor C Dᵒᵖ) (X✝ : C) :
                                                                  ((leftOpRightOpEquiv C D).counitIso.inv.app X).app X✝ = CategoryStruct.id (X.obj X✝)
                                                                  @[simp]
                                                                  theorem CategoryTheory.Functor.leftOpRightOpEquiv_functor_obj_map (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] (F : (Functor Cᵒᵖ D)ᵒᵖ) {X✝ Y✝ : C} (f : X✝ Y✝) :
                                                                  ((leftOpRightOpEquiv C D).functor.obj F).map f = ((Opposite.unop F).map f.op).op
                                                                  @[simp]
                                                                  theorem CategoryTheory.Functor.leftOpRightOpEquiv_inverse_map (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] {X✝ Y✝ : Functor C Dᵒᵖ} (η : X✝ Y✝) :
                                                                  (leftOpRightOpEquiv C D).inverse.map η = (NatTrans.leftOp η).op
                                                                  @[simp]
                                                                  theorem CategoryTheory.Functor.leftOpRightOpEquiv_unitIso_hom_app (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] (X : (Functor Cᵒᵖ D)ᵒᵖ) :
                                                                  (leftOpRightOpEquiv C D).unitIso.hom.app X = (Opposite.unop X).rightOpLeftOpIso.hom.op
                                                                  @[simp]
                                                                  theorem CategoryTheory.Functor.leftOpRightOpEquiv_counitIso_hom_app_app (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] (X : Functor C Dᵒᵖ) (X✝ : C) :
                                                                  ((leftOpRightOpEquiv C D).counitIso.hom.app X).app X✝ = CategoryStruct.id (X.obj X✝)
                                                                  instance CategoryTheory.Functor.instEssSurjOppositeOp (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] {F : Functor C D} [F.EssSurj] :
                                                                  F.op.EssSurj
                                                                  instance CategoryTheory.Functor.instEssSurjOppositeRightOp (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] {F : Functor Cᵒᵖ D} [F.EssSurj] :
                                                                  F.rightOp.EssSurj
                                                                  instance CategoryTheory.Functor.instEssSurjOppositeLeftOp (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] {F : Functor C Dᵒᵖ} [F.EssSurj] :
                                                                  F.leftOp.EssSurj
                                                                  instance CategoryTheory.Functor.instIsEquivalenceOppositeOp (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] {F : Functor C D} [F.IsEquivalence] :
                                                                  F.op.IsEquivalence
                                                                  instance CategoryTheory.Functor.instIsEquivalenceOppositeRightOp (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] {F : Functor Cᵒᵖ D} [F.IsEquivalence] :
                                                                  F.rightOp.IsEquivalence
                                                                  instance CategoryTheory.Functor.instIsEquivalenceOppositeLeftOp (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] {F : Functor C Dᵒᵖ} [F.IsEquivalence] :
                                                                  F.leftOp.IsEquivalence