Theorem: CategoryTheory.Adjunction.opAdjointOpOfAdjoint_counit_app
File: Mathlib/CategoryTheory/Adjunction/Opposites.lean

Proof steps:
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
F : C ⥤ D
G : D ⥤ C
h : G ⊣ F
⊢ ∀ {X' X : Cᵒᵖ} {Y : Dᵒᵖ} (f : X' ⟶ X) (g : X ⟶ G.op.obj Y),
    ((fun X Y =>
              (opEquiv (F.op.obj X) Y).trans
                ((h.homEquiv (Opposite.unop Y) (Opposite.unop X)).symm.trans
                  (opEquiv X (Opposite.op (G.toPrefunctor.1 (Opposite.unop Y)))).symm))
            X' Y).symm
        (f ≫ g) =
      F.op.map f ≫
        ((fun X Y =>
                (opEquiv (F.op.obj X) Y).trans
                  ((h.homEquiv (Opposite.unop Y) (Opposite.unop X)).symm.trans
                    (opEquiv X (Opposite.op (G.toPrefunctor.1 (Opposite.unop Y)))).symm))
              X Y).symm
          g
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
F : C ⥤ D
G : D ⥤ C
h : G ⊣ F
X' X : Cᵒᵖ
Y : Dᵒᵖ
f : X' ⟶ X
g : X ⟶ G.op.obj Y
⊢ ((fun X Y =>
            (opEquiv (F.op.obj X) Y).trans
              ((h.homEquiv (Opposite.unop Y) (Opposite.unop X)).symm.trans
                (opEquiv X (Opposite.op (G.toPrefunctor.1 (Opposite.unop Y)))).symm))
          X' Y).symm
      (f ≫ g) =
    F.op.map f ≫
      ((fun X Y =>
              (opEquiv (F.op.obj X) Y).trans
                ((h.homEquiv (Opposite.unop Y) (Opposite.unop X)).symm.trans
                  (opEquiv X (Opposite.op (G.toPrefunctor.1 (Opposite.unop Y)))).symm))
            X Y).symm
        g
tactic: intros X' X Y f g
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
F : C ⥤ D
G : D ⥤ C
h : G ⊣ F
X' X : Cᵒᵖ
Y : Dᵒᵖ
f : X' ⟶ X
g : X ⟶ G.op.obj Y
⊢ ((fun X Y =>
            (opEquiv (F.op.obj X) Y).trans
              ((h.homEquiv (Opposite.unop Y) (Opposite.unop X)).symm.trans
                (opEquiv X (Opposite.op (G.toPrefunctor.1 (Opposite.unop Y)))).symm))
          X' Y).symm
      (f ≫ g) =
    F.op.map f ≫
      ((fun X Y =>
              (opEquiv (F.op.obj X) Y).trans
                ((h.homEquiv (Opposite.unop Y) (Opposite.unop X)).symm.trans
                  (opEquiv X (Opposite.op (G.toPrefunctor.1 (Opposite.unop Y)))).symm))
            X Y).symm
        g
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
F : C ⥤ D
G : D ⥤ C
h : G ⊣ F
X' X : Cᵒᵖ
Y : Dᵒᵖ
f : X' ⟶ X
g : X ⟶ G.op.obj Y
⊢ ((h.homEquiv (Opposite.unop Y) (Opposite.unop X')) (g.unop ≫ f.unop)).op =
    (F.map f.unop).op ≫ ((h.homEquiv (Opposite.unop Y) (Opposite.unop X)) g.unop).op
tactic: dsimp [opEquiv]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
F : C ⥤ D
G : D ⥤ C
h : G ⊣ F
X' X : Cᵒᵖ
Y : Dᵒᵖ
f : X' ⟶ X
g : X ⟶ G.op.obj Y
⊢ ((h.homEquiv (Opposite.unop Y) (Opposite.unop X')) (g.unop ≫ f.unop)).op =
    (F.map f.unop).op ≫ ((h.homEquiv (Opposite.unop Y) (Opposite.unop X)) g.unop).op
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
F : C ⥤ D
G : D ⥤ C
h : G ⊣ F
X' X : Cᵒᵖ
Y : Dᵒᵖ
f : X' ⟶ X
g : X ⟶ G.op.obj Y
⊢ (h.unit.app (Opposite.unop Y) ≫ F.map (g.unop ≫ f.unop)).op =
    (F.map f.unop).op ≫ (h.unit.app (Opposite.unop Y) ≫ F.map g.unop).op
tactic: erw [homEquiv_unit, homEquiv_unit]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
F : C ⥤ D
G : D ⥤ C
h : G ⊣ F
X' X : Cᵒᵖ
Y : Dᵒᵖ
f : X' ⟶ X
g : X ⟶ G.op.obj Y
⊢ (h.unit.app (Opposite.unop Y) ≫ F.map (g.unop ≫ f.unop)).op =
    (F.map f.unop).op ≫ (h.unit.app (Opposite.unop Y) ≫ F.map g.unop).op
state_after: no goals
tactic: simp
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
F : C ⥤ D
G : D ⥤ C
h : G ⊣ F
⊢ ∀ {X : Cᵒᵖ} {Y Y' : Dᵒᵖ} (f : F.op.obj X ⟶ Y) (g : Y ⟶ Y'),
    ((fun X Y =>
            (opEquiv (F.op.obj X) Y).trans
              ((h.homEquiv (Opposite.unop Y) (Opposite.unop X)).symm.trans
                (opEquiv X (Opposite.op (G.toPrefunctor.1 (Opposite.unop Y)))).symm))
          X Y')
        (f ≫ g) =
      ((fun X Y =>
              (opEquiv (F.op.obj X) Y).trans
                ((h.homEquiv (Opposite.unop Y) (Opposite.unop X)).symm.trans
                  (opEquiv X (Opposite.op (G.toPrefunctor.1 (Opposite.unop Y)))).symm))
            X Y)
          f ≫
        G.op.map g
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
F : C ⥤ D
G : D ⥤ C
h : G ⊣ F
X' : Cᵒᵖ
X Y : Dᵒᵖ
f : F.op.obj X' ⟶ X
g : X ⟶ Y
⊢ ((fun X Y =>
          (opEquiv (F.op.obj X) Y).trans
            ((h.homEquiv (Opposite.unop Y) (Opposite.unop X)).symm.trans
              (opEquiv X (Opposite.op (G.toPrefunctor.1 (Opposite.unop Y)))).symm))
        X' Y)
      (f ≫ g) =
    ((fun X Y =>
            (opEquiv (F.op.obj X) Y).trans
              ((h.homEquiv (Opposite.unop Y) (Opposite.unop X)).symm.trans
                (opEquiv X (Opposite.op (G.toPrefunctor.1 (Opposite.unop Y)))).symm))
          X' X)
        f ≫
      G.op.map g
tactic: intros X' X Y f g
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
F : C ⥤ D
G : D ⥤ C
h : G ⊣ F
X' : Cᵒᵖ
X Y : Dᵒᵖ
f : F.op.obj X' ⟶ X
g : X ⟶ Y
⊢ ((fun X Y =>
          (opEquiv (F.op.obj X) Y).trans
            ((h.homEquiv (Opposite.unop Y) (Opposite.unop X)).symm.trans
              (opEquiv X (Opposite.op (G.toPrefunctor.1 (Opposite.unop Y)))).symm))
        X' Y)
      (f ≫ g) =
    ((fun X Y =>
            (opEquiv (F.op.obj X) Y).trans
              ((h.homEquiv (Opposite.unop Y) (Opposite.unop X)).symm.trans
                (opEquiv X (Opposite.op (G.toPrefunctor.1 (Opposite.unop Y)))).symm))
          X' X)
        f ≫
      G.op.map g
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
F : C ⥤ D
G : D ⥤ C
h : G ⊣ F
X' : Cᵒᵖ
X Y : Dᵒᵖ
f : F.op.obj X' ⟶ X
g : X ⟶ Y
⊢ ((h.homEquiv (Opposite.unop Y) (Opposite.unop X')).symm (g.unop ≫ f.unop)).op =
    ((h.homEquiv (Opposite.unop X) (Opposite.unop X')).symm f.unop).op ≫ (G.map g.unop).op
tactic: dsimp [opEquiv]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
F : C ⥤ D
G : D ⥤ C
h : G ⊣ F
X' : Cᵒᵖ
X Y : Dᵒᵖ
f : F.op.obj X' ⟶ X
g : X ⟶ Y
⊢ ((h.homEquiv (Opposite.unop Y) (Opposite.unop X')).symm (g.unop ≫ f.unop)).op =
    ((h.homEquiv (Opposite.unop X) (Opposite.unop X')).symm f.unop).op ≫ (G.map g.unop).op
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
F : C ⥤ D
G : D ⥤ C
h : G ⊣ F
X' : Cᵒᵖ
X Y : Dᵒᵖ
f : F.op.obj X' ⟶ X
g : X ⟶ Y
⊢ (G.map (g.unop ≫ f.unop) ≫ h.counit.app (Opposite.unop X')).op =
    (G.map f.unop ≫ h.counit.app (Opposite.unop X')).op ≫ (G.map g.unop).op
tactic: erw [homEquiv_counit, homEquiv_counit]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
F : C ⥤ D
G : D ⥤ C
h : G ⊣ F
X' : Cᵒᵖ
X Y : Dᵒᵖ
f : F.op.obj X' ⟶ X
g : X ⟶ Y
⊢ (G.map (g.unop ≫ f.unop) ≫ h.counit.app (Opposite.unop X')).op =
    (G.map f.unop ≫ h.counit.app (Opposite.unop X')).op ≫ (G.map g.unop).op
state_after: no goals
tactic: simp