Theorem: CategoryTheory.mateEquiv_symm_apply
File: Mathlib/CategoryTheory/Adjunction/Mates.lean

Proof steps:
state_before: C : Type u₁
D : Type u₂
E : Type u₃
F : Type u₄
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
inst✝ : Category.{v₄, u₄} F
G : C ⥤ E
H : D ⥤ F
L₁ : C ⥤ D
R₁ : D ⥤ C
L₂ : E ⥤ F
R₂ : F ⥤ E
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
α : G ⋙ L₂ ⟶ L₁ ⋙ H
⊢ (fun β => whiskerRight adj₁.unit (G ⋙ L₂) ≫ whiskerRight (whiskerLeft L₁ β) L₂ ≫ whiskerLeft (L₁ ⋙ H) adj₂.counit)
      ((fun α =>
          whiskerLeft (R₁ ⋙ G) adj₂.unit ≫ whiskerRight (whiskerLeft R₁ α) R₂ ≫ whiskerRight adj₁.counit (H ⋙ R₂))
        α) =
    α
state_after: case w.h
C : Type u₁
D : Type u₂
E : Type u₃
F : Type u₄
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
inst✝ : Category.{v₄, u₄} F
G : C ⥤ E
H : D ⥤ F
L₁ : C ⥤ D
R₁ : D ⥤ C
L₂ : E ⥤ F
R₂ : F ⥤ E
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
α : G ⋙ L₂ ⟶ L₁ ⋙ H
x✝ : C
⊢ ((fun β => whiskerRight adj₁.unit (G ⋙ L₂) ≫ whiskerRight (whiskerLeft L₁ β) L₂ ≫ whiskerLeft (L₁ ⋙ H) adj₂.counit)
          ((fun α =>
              whiskerLeft (R₁ ⋙ G) adj₂.unit ≫ whiskerRight (whiskerLeft R₁ α) R₂ ≫ whiskerRight adj₁.counit (H ⋙ R₂))
            α)).app
      x✝ =
    α.app x✝
tactic: ext
state_before: case w.h
C : Type u₁
D : Type u₂
E : Type u₃
F : Type u₄
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
inst✝ : Category.{v₄, u₄} F
G : C ⥤ E
H : D ⥤ F
L₁ : C ⥤ D
R₁ : D ⥤ C
L₂ : E ⥤ F
R₂ : F ⥤ E
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
α : G ⋙ L₂ ⟶ L₁ ⋙ H
x✝ : C
⊢ ((fun β => whiskerRight adj₁.unit (G ⋙ L₂) ≫ whiskerRight (whiskerLeft L₁ β) L₂ ≫ whiskerLeft (L₁ ⋙ H) adj₂.counit)
          ((fun α =>
              whiskerLeft (R₁ ⋙ G) adj₂.unit ≫ whiskerRight (whiskerLeft R₁ α) R₂ ≫ whiskerRight adj₁.counit (H ⋙ R₂))
            α)).app
      x✝ =
    α.app x✝
state_after: case w.h
C : Type u₁
D : Type u₂
E : Type u₃
F : Type u₄
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
inst✝ : Category.{v₄, u₄} F
G : C ⥤ E
H : D ⥤ F
L₁ : C ⥤ D
R₁ : D ⥤ C
L₂ : E ⥤ F
R₂ : F ⥤ E
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
α : G ⋙ L₂ ⟶ L₁ ⋙ H
x✝ : C
⊢ ((fun β =>
            { app := fun X => (G ⋙ L₂).map (adj₁.unit.app X), naturality := ⋯ } ≫
              { app := fun X => L₂.map ({ app := fun X => β.app (L₁.obj X), naturality := ⋯ }.app X),
                  naturality := ⋯ } ≫
                { app := fun X => adj₂.counit.app ((L₁ ⋙ H).obj X), naturality := ⋯ })
          ((fun α =>
              { app := fun X => adj₂.unit.app ((R₁ ⋙ G).obj X), naturality := ⋯ } ≫
                { app := fun X => R₂.map ({ app := fun X => α.app (R₁.obj X), naturality := ⋯ }.app X),
                    naturality := ⋯ } ≫
                  { app := fun X => (H ⋙ R₂).map (adj₁.counit.app X), naturality := ⋯ })
            α)).app
      x✝ =
    α.app x✝
tactic: unfold whiskerRight whiskerLeft
state_before: case w.h
C : Type u₁
D : Type u₂
E : Type u₃
F : Type u₄
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
inst✝ : Category.{v₄, u₄} F
G : C ⥤ E
H : D ⥤ F
L₁ : C ⥤ D
R₁ : D ⥤ C
L₂ : E ⥤ F
R₂ : F ⥤ E
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
α : G ⋙ L₂ ⟶ L₁ ⋙ H
x✝ : C
⊢ ((fun β =>
            { app := fun X => (G ⋙ L₂).map (adj₁.unit.app X), naturality := ⋯ } ≫
              { app := fun X => L₂.map ({ app := fun X => β.app (L₁.obj X), naturality := ⋯ }.app X),
                  naturality := ⋯ } ≫
                { app := fun X => adj₂.counit.app ((L₁ ⋙ H).obj X), naturality := ⋯ })
          ((fun α =>
              { app := fun X => adj₂.unit.app ((R₁ ⋙ G).obj X), naturality := ⋯ } ≫
                { app := fun X => R₂.map ({ app := fun X => α.app (R₁.obj X), naturality := ⋯ }.app X),
                    naturality := ⋯ } ≫
                  { app := fun X => (H ⋙ R₂).map (adj₁.counit.app X), naturality := ⋯ })
            α)).app
      x✝ =
    α.app x✝
state_after: case w.h
C : Type u₁
D : Type u₂
E : Type u₃
F : Type u₄
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
inst✝ : Category.{v₄, u₄} F
G : C ⥤ E
H : D ⥤ F
L₁ : C ⥤ D
R₁ : D ⥤ C
L₂ : E ⥤ F
R₂ : F ⥤ E
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
α : G ⋙ L₂ ⟶ L₁ ⋙ H
x✝ : C
⊢ L₂.map (G.map (adj₁.unit.app x✝)) ≫ α.app (R₁.obj (L₁.obj x✝)) ≫ H.map (adj₁.counit.app (L₁.obj x✝)) = α.app x✝
tactic: simp only [comp_obj, id_obj, Functor.comp_map, comp_app, map_comp, assoc, counit_naturality,
      counit_naturality_assoc, left_triangle_components_assoc]
state_before: case w.h
C : Type u₁
D : Type u₂
E : Type u₃
F : Type u₄
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
inst✝ : Category.{v₄, u₄} F
G : C ⥤ E
H : D ⥤ F
L₁ : C ⥤ D
R₁ : D ⥤ C
L₂ : E ⥤ F
R₂ : F ⥤ E
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
α : G ⋙ L₂ ⟶ L₁ ⋙ H
x✝ : C
⊢ L₂.map (G.map (adj₁.unit.app x✝)) ≫ α.app (R₁.obj (L₁.obj x✝)) ≫ H.map (adj₁.counit.app (L₁.obj x✝)) = α.app x✝
state_after: case w.h
C : Type u₁
D : Type u₂
E : Type u₃
F : Type u₄
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
inst✝ : Category.{v₄, u₄} F
G : C ⥤ E
H : D ⥤ F
L₁ : C ⥤ D
R₁ : D ⥤ C
L₂ : E ⥤ F
R₂ : F ⥤ E
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
α : G ⋙ L₂ ⟶ L₁ ⋙ H
x✝ : C
⊢ α.app x✝ ≫ 𝟙 (H.obj (L₁.obj x✝)) = α.app x✝
tactic: rw [← assoc, ← Functor.comp_map, α.naturality, Functor.comp_map, assoc, ← H.map_comp,
      left_triangle_components, map_id]
state_before: case w.h
C : Type u₁
D : Type u₂
E : Type u₃
F : Type u₄
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
inst✝ : Category.{v₄, u₄} F
G : C ⥤ E
H : D ⥤ F
L₁ : C ⥤ D
R₁ : D ⥤ C
L₂ : E ⥤ F
R₂ : F ⥤ E
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
α : G ⋙ L₂ ⟶ L₁ ⋙ H
x✝ : C
⊢ α.app x✝ ≫ 𝟙 (H.obj (L₁.obj x✝)) = α.app x✝
state_after: no goals
tactic: simp only [comp_obj, comp_id]
state_before: C : Type u₁
D : Type u₂
E : Type u₃
F : Type u₄
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
inst✝ : Category.{v₄, u₄} F
G : C ⥤ E
H : D ⥤ F
L₁ : C ⥤ D
R₁ : D ⥤ C
L₂ : E ⥤ F
R₂ : F ⥤ E
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
β : R₁ ⋙ G ⟶ H ⋙ R₂
⊢ (fun α => whiskerLeft (R₁ ⋙ G) adj₂.unit ≫ whiskerRight (whiskerLeft R₁ α) R₂ ≫ whiskerRight adj₁.counit (H ⋙ R₂))
      ((fun β =>
          whiskerRight adj₁.unit (G ⋙ L₂) ≫ whiskerRight (whiskerLeft L₁ β) L₂ ≫ whiskerLeft (L₁ ⋙ H) adj₂.counit)
        β) =
    β
state_after: case w.h
C : Type u₁
D : Type u₂
E : Type u₃
F : Type u₄
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
inst✝ : Category.{v₄, u₄} F
G : C ⥤ E
H : D ⥤ F
L₁ : C ⥤ D
R₁ : D ⥤ C
L₂ : E ⥤ F
R₂ : F ⥤ E
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
β : R₁ ⋙ G ⟶ H ⋙ R₂
x✝ : D
⊢ ((fun α => whiskerLeft (R₁ ⋙ G) adj₂.unit ≫ whiskerRight (whiskerLeft R₁ α) R₂ ≫ whiskerRight adj₁.counit (H ⋙ R₂))
          ((fun β =>
              whiskerRight adj₁.unit (G ⋙ L₂) ≫ whiskerRight (whiskerLeft L₁ β) L₂ ≫ whiskerLeft (L₁ ⋙ H) adj₂.counit)
            β)).app
      x✝ =
    β.app x✝
tactic: ext
state_before: case w.h
C : Type u₁
D : Type u₂
E : Type u₃
F : Type u₄
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
inst✝ : Category.{v₄, u₄} F
G : C ⥤ E
H : D ⥤ F
L₁ : C ⥤ D
R₁ : D ⥤ C
L₂ : E ⥤ F
R₂ : F ⥤ E
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
β : R₁ ⋙ G ⟶ H ⋙ R₂
x✝ : D
⊢ ((fun α => whiskerLeft (R₁ ⋙ G) adj₂.unit ≫ whiskerRight (whiskerLeft R₁ α) R₂ ≫ whiskerRight adj₁.counit (H ⋙ R₂))
          ((fun β =>
              whiskerRight adj₁.unit (G ⋙ L₂) ≫ whiskerRight (whiskerLeft L₁ β) L₂ ≫ whiskerLeft (L₁ ⋙ H) adj₂.counit)
            β)).app
      x✝ =
    β.app x✝
state_after: case w.h
C : Type u₁
D : Type u₂
E : Type u₃
F : Type u₄
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
inst✝ : Category.{v₄, u₄} F
G : C ⥤ E
H : D ⥤ F
L₁ : C ⥤ D
R₁ : D ⥤ C
L₂ : E ⥤ F
R₂ : F ⥤ E
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
β : R₁ ⋙ G ⟶ H ⋙ R₂
x✝ : D
⊢ ((fun α =>
            { app := fun X => adj₂.unit.app ((R₁ ⋙ G).obj X), naturality := ⋯ } ≫
              { app := fun X => R₂.map ({ app := fun X => α.app (R₁.obj X), naturality := ⋯ }.app X),
                  naturality := ⋯ } ≫
                { app := fun X => (H ⋙ R₂).map (adj₁.counit.app X), naturality := ⋯ })
          ((fun β =>
              { app := fun X => (G ⋙ L₂).map (adj₁.unit.app X), naturality := ⋯ } ≫
                { app := fun X => L₂.map ({ app := fun X => β.app (L₁.obj X), naturality := ⋯ }.app X),
                    naturality := ⋯ } ≫
                  { app := fun X => adj₂.counit.app ((L₁ ⋙ H).obj X), naturality := ⋯ })
            β)).app
      x✝ =
    β.app x✝
tactic: unfold whiskerLeft whiskerRight
state_before: case w.h
C : Type u₁
D : Type u₂
E : Type u₃
F : Type u₄
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
inst✝ : Category.{v₄, u₄} F
G : C ⥤ E
H : D ⥤ F
L₁ : C ⥤ D
R₁ : D ⥤ C
L₂ : E ⥤ F
R₂ : F ⥤ E
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
β : R₁ ⋙ G ⟶ H ⋙ R₂
x✝ : D
⊢ ((fun α =>
            { app := fun X => adj₂.unit.app ((R₁ ⋙ G).obj X), naturality := ⋯ } ≫
              { app := fun X => R₂.map ({ app := fun X => α.app (R₁.obj X), naturality := ⋯ }.app X),
                  naturality := ⋯ } ≫
                { app := fun X => (H ⋙ R₂).map (adj₁.counit.app X), naturality := ⋯ })
          ((fun β =>
              { app := fun X => (G ⋙ L₂).map (adj₁.unit.app X), naturality := ⋯ } ≫
                { app := fun X => L₂.map ({ app := fun X => β.app (L₁.obj X), naturality := ⋯ }.app X),
                    naturality := ⋯ } ≫
                  { app := fun X => adj₂.counit.app ((L₁ ⋙ H).obj X), naturality := ⋯ })
            β)).app
      x✝ =
    β.app x✝
state_after: case w.h
C : Type u₁
D : Type u₂
E : Type u₃
F : Type u₄
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
inst✝ : Category.{v₄, u₄} F
G : C ⥤ E
H : D ⥤ F
L₁ : C ⥤ D
R₁ : D ⥤ C
L₂ : E ⥤ F
R₂ : F ⥤ E
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
β : R₁ ⋙ G ⟶ H ⋙ R₂
x✝ : D
⊢ G.map (adj₁.unit.app (R₁.obj x✝)) ≫ β.app (L₁.obj (R₁.obj x✝)) ≫ R₂.map (H.map (adj₁.counit.app x✝)) = β.app x✝
tactic: simp only [comp_obj, id_obj, Functor.comp_map, comp_app, map_comp, assoc,
      unit_naturality_assoc, right_triangle_components_assoc]
state_before: case w.h
C : Type u₁
D : Type u₂
E : Type u₃
F : Type u₄
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
inst✝ : Category.{v₄, u₄} F
G : C ⥤ E
H : D ⥤ F
L₁ : C ⥤ D
R₁ : D ⥤ C
L₂ : E ⥤ F
R₂ : F ⥤ E
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
β : R₁ ⋙ G ⟶ H ⋙ R₂
x✝ : D
⊢ G.map (adj₁.unit.app (R₁.obj x✝)) ≫ β.app (L₁.obj (R₁.obj x✝)) ≫ R₂.map (H.map (adj₁.counit.app x✝)) = β.app x✝
state_after: no goals
tactic: rw [← assoc, ← Functor.comp_map, assoc, ← β.naturality, ← assoc, Functor.comp_map,
      ← G.map_comp, right_triangle_components, map_id, id_comp]