-- Mathlib/CategoryTheory/Functor/KanExtension/Basic.lean
lemma isLeftKanExtension_iff_postcomp₁ (α : F ⟶ L' ⋙ F') :
    F'.IsLeftKanExtension α ↔ (G ⋙ F').IsLeftKanExtension
      (α ≫ whiskerRight e.inv _ ≫ (Functor.associator _ _ _).hom)

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

Tactic:
let eq : (LeftExtension.mk _ α).IsUniversal ≃
    (LeftExtension.mk _
      (α ≫ whiskerRight e.inv _ ≫ (Functor.associator _ _ _).hom)).IsUniversal :=
  (LeftExtension.isUniversalPostcomp₁Equiv G e F _).trans
  (IsInitial.equivOfIso (StructuredArrow.isoMk (Iso.refl _)))

Result:
C : Type u_1
H : Type u_3
D : Type u_4
D' : Type u_5
inst✝⁴ : Category.{u_7, u_1} C
inst✝³ : Category.{u_6, u_3} H
inst✝² : Category.{u_9, u_4} D
inst✝¹ : Category.{u_8, u_5} D'
L : C ⥤ D
L' : C ⥤ D'
G : D ⥤ D'
inst✝ : G.IsEquivalence
e : L ⋙ G ≅ L'
F : C ⥤ H
F' : D' ⥤ H
α : F ⟶ L' ⋙ F'
eq : StructuredArrow.IsUniversal (LeftExtension.mk F' α) ≃
  StructuredArrow.IsUniversal (LeftExtension.mk (G ⋙ F') (α ≫ whiskerRight e.inv F' ≫ (L.associator G F').hom)) :=
  (LeftExtension.isUniversalPostcomp₁Equiv G e F (LeftExtension.mk F' α)).trans
    (IsInitial.equivOfIso
      (StructuredArrow.isoMk (Iso.refl ((LeftExtension.postcomp₁ G e.inv F).obj (LeftExtension.mk F' α)).right) ⋯))
⊢ F'.IsLeftKanExtension α ↔ (G ⋙ F').IsLeftKanExtension (α ≫ whiskerRight e.inv F' ≫ (L.associator G F').hom)

Proof state:
case mpr
C : Type u_1
H : Type u_3
D : Type u_4
D' : Type u_5
inst✝⁴ : Category.{u_7, u_1} C
inst✝³ : Category.{u_6, u_3} H
inst✝² : Category.{u_9, u_4} D
inst✝¹ : Category.{u_8, u_5} D'
L : C ⥤ D
L' : C ⥤ D'
G : D ⥤ D'
inst✝ : G.IsEquivalence
e : L ⋙ G ≅ L'
F : C ⥤ H
F' : D' ⥤ H
α : F ⟶ L' ⋙ F'
eq : StructuredArrow.IsUniversal (LeftExtension.mk F' α) ≃
  StructuredArrow.IsUniversal (LeftExtension.mk (G ⋙ F') (α ≫ whiskerRight e.inv F' ≫ (L.associator G F').hom)) :=
  (LeftExtension.isUniversalPostcomp₁Equiv G e F (LeftExtension.mk F' α)).trans
    (IsInitial.equivOfIso
      (StructuredArrow.isoMk (Iso.refl ((LeftExtension.postcomp₁ G e.inv F).obj (LeftExtension.mk F' α)).right) ⋯))
⊢ (G ⋙ F').IsLeftKanExtension (α ≫ whiskerRight e.inv F' ≫ (L.associator G F').hom) → F'.IsLeftKanExtension α

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

Result:
no goals

Proof state:
case mp
C : Type u_1
H : Type u_3
D : Type u_4
D' : Type u_5
inst✝⁴ : Category.{u_7, u_1} C
inst✝³ : Category.{u_6, u_3} H
inst✝² : Category.{u_9, u_4} D
inst✝¹ : Category.{u_8, u_5} D'
L : C ⥤ D
L' : C ⥤ D'
G : D ⥤ D'
inst✝ : G.IsEquivalence
e : L ⋙ G ≅ L'
F : C ⥤ H
F' : D' ⥤ H
α : F ⟶ L' ⋙ F'
eq : StructuredArrow.IsUniversal (LeftExtension.mk F' α) ≃
  StructuredArrow.IsUniversal (LeftExtension.mk (G ⋙ F') (α ≫ whiskerRight e.inv F' ≫ (L.associator G F').hom)) :=
  (LeftExtension.isUniversalPostcomp₁Equiv G e F (LeftExtension.mk F' α)).trans
    (IsInitial.equivOfIso
      (StructuredArrow.isoMk (Iso.refl ((LeftExtension.postcomp₁ G e.inv F).obj (LeftExtension.mk F' α)).right) ⋯))
⊢ F'.IsLeftKanExtension α → (G ⋙ F').IsLeftKanExtension (α ≫ whiskerRight e.inv F' ≫ (L.associator G F').hom)

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

Result:
no goals

Proof state:
C : Type u_1
H : Type u_3
D : Type u_4
D' : Type u_5
inst✝⁴ : Category.{u_7, u_1} C
inst✝³ : Category.{u_6, u_3} H
inst✝² : Category.{u_9, u_4} D
inst✝¹ : Category.{u_8, u_5} D'
L : C ⥤ D
L' : C ⥤ D'
G : D ⥤ D'
inst✝ : G.IsEquivalence
e : L ⋙ G ≅ L'
F : C ⥤ H
F' : D' ⥤ H
α : F ⟶ L' ⋙ F'
eq : StructuredArrow.IsUniversal (LeftExtension.mk F' α) ≃
  StructuredArrow.IsUniversal (LeftExtension.mk (G ⋙ F') (α ≫ whiskerRight e.inv F' ≫ (L.associator G F').hom)) :=
  (LeftExtension.isUniversalPostcomp₁Equiv G e F (LeftExtension.mk F' α)).trans
    (IsInitial.equivOfIso
      (StructuredArrow.isoMk (Iso.refl ((LeftExtension.postcomp₁ G e.inv F).obj (LeftExtension.mk F' α)).right) ⋯))
⊢ F'.IsLeftKanExtension α ↔ (G ⋙ F').IsLeftKanExtension (α ≫ whiskerRight e.inv F' ≫ (L.associator G F').hom)

Tactic:
constructor

Result:
case mp
C : Type u_1
H : Type u_3
D : Type u_4
D' : Type u_5
inst✝⁴ : Category.{u_7, u_1} C
inst✝³ : Category.{u_6, u_3} H
inst✝² : Category.{u_9, u_4} D
inst✝¹ : Category.{u_8, u_5} D'
L : C ⥤ D
L' : C ⥤ D'
G : D ⥤ D'
inst✝ : G.IsEquivalence
e : L ⋙ G ≅ L'
F : C ⥤ H
F' : D' ⥤ H
α : F ⟶ L' ⋙ F'
eq : StructuredArrow.IsUniversal (LeftExtension.mk F' α) ≃
  StructuredArrow.IsUniversal (LeftExtension.mk (G ⋙ F') (α ≫ whiskerRight e.inv F' ≫ (L.associator G F').hom)) :=
  (LeftExtension.isUniversalPostcomp₁Equiv G e F (LeftExtension.mk F' α)).trans
    (IsInitial.equivOfIso
      (StructuredArrow.isoMk (Iso.refl ((LeftExtension.postcomp₁ G e.inv F).obj (LeftExtension.mk F' α)).right) ⋯))
⊢ F'.IsLeftKanExtension α → (G ⋙ F').IsLeftKanExtension (α ≫ whiskerRight e.inv F' ≫ (L.associator G F').hom)

case mpr
C : Type u_1
H : Type u_3
D : Type u_4
D' : Type u_5
inst✝⁴ : Category.{u_7, u_1} C
inst✝³ : Category.{u_6, u_3} H
inst✝² : Category.{u_9, u_4} D
inst✝¹ : Category.{u_8, u_5} D'
L : C ⥤ D
L' : C ⥤ D'
G : D ⥤ D'
inst✝ : G.IsEquivalence
e : L ⋙ G ≅ L'
F : C ⥤ H
F' : D' ⥤ H
α : F ⟶ L' ⋙ F'
eq : StructuredArrow.IsUniversal (LeftExtension.mk F' α) ≃
  StructuredArrow.IsUniversal (LeftExtension.mk (G ⋙ F') (α ≫ whiskerRight e.inv F' ≫ (L.associator G F').hom)) :=
  (LeftExtension.isUniversalPostcomp₁Equiv G e F (LeftExtension.mk F' α)).trans
    (IsInitial.equivOfIso
      (StructuredArrow.isoMk (Iso.refl ((LeftExtension.postcomp₁ G e.inv F).obj (LeftExtension.mk F' α)).right) ⋯))
⊢ (G ⋙ F').IsLeftKanExtension (α ≫ whiskerRight e.inv F' ≫ (L.associator G F').hom) → F'.IsLeftKanExtension α