-- Mathlib/CategoryTheory/Functor/KanExtension/Basic.lean
lemma isRightKanExtension_iff_precomp (α : L ⋙ F' ⟶ F) :
    F'.IsRightKanExtension α ↔
      F'.IsRightKanExtension ((Functor.associator _ _ _).hom ≫ whiskerLeft G α)

Proof state:
C : Type u_1
C' : Type u_2
H : Type u_3
D : Type u_4
inst✝⁴ : Category.{u_7, u_1} C
inst✝³ : Category.{u_9, u_2} C'
inst✝² : Category.{u_6, u_3} H
inst✝¹ : Category.{u_8, u_4} D
L : C ⥤ D
F : C ⥤ H
F' : D ⥤ H
G : C' ⥤ C
inst✝ : G.IsEquivalence
α : L ⋙ F' ⟶ F
⊢ F'.IsRightKanExtension α ↔ F'.IsRightKanExtension ((G.associator L F').hom ≫ whiskerLeft G α)

Tactic:
let eq : (RightExtension.mk _ α).IsUniversal ≃ (RightExtension.mk _
    ((Functor.associator _ _ _).hom ≫ whiskerLeft G α)).IsUniversal :=
  (RightExtension.isUniversalPrecompEquiv L F G _).trans
  (IsTerminal.equivOfIso (CostructuredArrow.isoMk (Iso.refl _)))

Result:
C : Type u_1
C' : Type u_2
H : Type u_3
D : Type u_4
inst✝⁴ : Category.{u_7, u_1} C
inst✝³ : Category.{u_9, u_2} C'
inst✝² : Category.{u_6, u_3} H
inst✝¹ : Category.{u_8, u_4} D
L : C ⥤ D
F : C ⥤ H
F' : D ⥤ H
G : C' ⥤ C
inst✝ : G.IsEquivalence
α : L ⋙ F' ⟶ F
eq : CostructuredArrow.IsUniversal (RightExtension.mk F' α) ≃
  CostructuredArrow.IsUniversal (RightExtension.mk F' ((G.associator L F').hom ≫ whiskerLeft G α)) :=
  (RightExtension.isUniversalPrecompEquiv L F G (RightExtension.mk F' α)).trans
    (IsTerminal.equivOfIso
      (CostructuredArrow.isoMk (Iso.refl ((RightExtension.precomp L F G).obj (RightExtension.mk F' α)).left) ⋯))
⊢ F'.IsRightKanExtension α ↔ F'.IsRightKanExtension ((G.associator L F').hom ≫ whiskerLeft G α)

Proof state:
case mpr
C : Type u_1
C' : Type u_2
H : Type u_3
D : Type u_4
inst✝⁴ : Category.{u_7, u_1} C
inst✝³ : Category.{u_9, u_2} C'
inst✝² : Category.{u_6, u_3} H
inst✝¹ : Category.{u_8, u_4} D
L : C ⥤ D
F : C ⥤ H
F' : D ⥤ H
G : C' ⥤ C
inst✝ : G.IsEquivalence
α : L ⋙ F' ⟶ F
eq : CostructuredArrow.IsUniversal (RightExtension.mk F' α) ≃
  CostructuredArrow.IsUniversal (RightExtension.mk F' ((G.associator L F').hom ≫ whiskerLeft G α)) :=
  (RightExtension.isUniversalPrecompEquiv L F G (RightExtension.mk F' α)).trans
    (IsTerminal.equivOfIso
      (CostructuredArrow.isoMk (Iso.refl ((RightExtension.precomp L F G).obj (RightExtension.mk F' α)).left) ⋯))
⊢ F'.IsRightKanExtension ((G.associator L F').hom ≫ whiskerLeft G α) → F'.IsRightKanExtension α

Tactic:
exact fun _ => ⟨⟨eq.symm (isUniversalOfIsRightKanExtension _ _)⟩⟩

Result:
no goals

Proof state:
case mp
C : Type u_1
C' : Type u_2
H : Type u_3
D : Type u_4
inst✝⁴ : Category.{u_7, u_1} C
inst✝³ : Category.{u_9, u_2} C'
inst✝² : Category.{u_6, u_3} H
inst✝¹ : Category.{u_8, u_4} D
L : C ⥤ D
F : C ⥤ H
F' : D ⥤ H
G : C' ⥤ C
inst✝ : G.IsEquivalence
α : L ⋙ F' ⟶ F
eq : CostructuredArrow.IsUniversal (RightExtension.mk F' α) ≃
  CostructuredArrow.IsUniversal (RightExtension.mk F' ((G.associator L F').hom ≫ whiskerLeft G α)) :=
  (RightExtension.isUniversalPrecompEquiv L F G (RightExtension.mk F' α)).trans
    (IsTerminal.equivOfIso
      (CostructuredArrow.isoMk (Iso.refl ((RightExtension.precomp L F G).obj (RightExtension.mk F' α)).left) ⋯))
⊢ F'.IsRightKanExtension α → F'.IsRightKanExtension ((G.associator L F').hom ≫ whiskerLeft G α)

Tactic:
exact fun _ => ⟨⟨eq (isUniversalOfIsRightKanExtension _ _)⟩⟩

Result:
no goals

Proof state:
C : Type u_1
C' : Type u_2
H : Type u_3
D : Type u_4
inst✝⁴ : Category.{u_7, u_1} C
inst✝³ : Category.{u_9, u_2} C'
inst✝² : Category.{u_6, u_3} H
inst✝¹ : Category.{u_8, u_4} D
L : C ⥤ D
F : C ⥤ H
F' : D ⥤ H
G : C' ⥤ C
inst✝ : G.IsEquivalence
α : L ⋙ F' ⟶ F
eq : CostructuredArrow.IsUniversal (RightExtension.mk F' α) ≃
  CostructuredArrow.IsUniversal (RightExtension.mk F' ((G.associator L F').hom ≫ whiskerLeft G α)) :=
  (RightExtension.isUniversalPrecompEquiv L F G (RightExtension.mk F' α)).trans
    (IsTerminal.equivOfIso
      (CostructuredArrow.isoMk (Iso.refl ((RightExtension.precomp L F G).obj (RightExtension.mk F' α)).left) ⋯))
⊢ F'.IsRightKanExtension α ↔ F'.IsRightKanExtension ((G.associator L F').hom ≫ whiskerLeft G α)

Tactic:
constructor

Result:
case mp
C : Type u_1
C' : Type u_2
H : Type u_3
D : Type u_4
inst✝⁴ : Category.{u_7, u_1} C
inst✝³ : Category.{u_9, u_2} C'
inst✝² : Category.{u_6, u_3} H
inst✝¹ : Category.{u_8, u_4} D
L : C ⥤ D
F : C ⥤ H
F' : D ⥤ H
G : C' ⥤ C
inst✝ : G.IsEquivalence
α : L ⋙ F' ⟶ F
eq : CostructuredArrow.IsUniversal (RightExtension.mk F' α) ≃
  CostructuredArrow.IsUniversal (RightExtension.mk F' ((G.associator L F').hom ≫ whiskerLeft G α)) :=
  (RightExtension.isUniversalPrecompEquiv L F G (RightExtension.mk F' α)).trans
    (IsTerminal.equivOfIso
      (CostructuredArrow.isoMk (Iso.refl ((RightExtension.precomp L F G).obj (RightExtension.mk F' α)).left) ⋯))
⊢ F'.IsRightKanExtension α → F'.IsRightKanExtension ((G.associator L F').hom ≫ whiskerLeft G α)

case mpr
C : Type u_1
C' : Type u_2
H : Type u_3
D : Type u_4
inst✝⁴ : Category.{u_7, u_1} C
inst✝³ : Category.{u_9, u_2} C'
inst✝² : Category.{u_6, u_3} H
inst✝¹ : Category.{u_8, u_4} D
L : C ⥤ D
F : C ⥤ H
F' : D ⥤ H
G : C' ⥤ C
inst✝ : G.IsEquivalence
α : L ⋙ F' ⟶ F
eq : CostructuredArrow.IsUniversal (RightExtension.mk F' α) ≃
  CostructuredArrow.IsUniversal (RightExtension.mk F' ((G.associator L F').hom ≫ whiskerLeft G α)) :=
  (RightExtension.isUniversalPrecompEquiv L F G (RightExtension.mk F' α)).trans
    (IsTerminal.equivOfIso
      (CostructuredArrow.isoMk (Iso.refl ((RightExtension.precomp L F G).obj (RightExtension.mk F' α)).left) ⋯))
⊢ F'.IsRightKanExtension ((G.associator L F').hom ≫ whiskerLeft G α) → F'.IsRightKanExtension α