Theorem: CategoryTheory.Functor.isLeftKanExtension_iff_precomp
File: Mathlib/CategoryTheory/Functor/KanExtension/Basic.lean

tactic: let eq : (LeftExtension.mk _ α).IsUniversal ≃ (LeftExtension.mk _
    (whiskerLeft G α ≫ (Functor.associator _ _ _).inv)).IsUniversal :=
  (LeftExtension.isUniversalPrecompEquiv L F G _).trans
  (IsInitial.equivOfIso (StructuredArrow.isoMk (Iso.refl _)))
state_before: C : Type u_1
C' : Type u_2
H : Type u_3
H' : Type u_4
D : Type u_5
D' : Type u_6
inst✝⁶ : Category.{u_8, u_1} C
inst✝⁵ : Category.{u_10, u_2} C'
inst✝⁴ : Category.{u_7, u_3} H
inst✝³ : Category.{?u.138507, u_4} H'
inst✝² : Category.{u_9, u_5} D
inst✝¹ : Category.{?u.138515, u_6} D'
L : C ⥤ D
F : C ⥤ H
F' : D ⥤ H
G : C' ⥤ C
inst✝ : G.IsEquivalence
α : F ⟶ L ⋙ F'
⊢ F'.IsLeftKanExtension α ↔ F'.IsLeftKanExtension (whiskerLeft G α ≫ (G.associator L F').inv)
state_after: C : Type u_1
C' : Type u_2
H : Type u_3
H' : Type u_4
D : Type u_5
D' : Type u_6
inst✝⁶ : Category.{u_8, u_1} C
inst✝⁵ : Category.{u_10, u_2} C'
inst✝⁴ : Category.{u_7, u_3} H
inst✝³ : Category.{?u.138507, u_4} H'
inst✝² : Category.{u_9, u_5} D
inst✝¹ : Category.{?u.138515, u_6} D'
L : C ⥤ D
F : C ⥤ H
F' : D ⥤ H
G : C' ⥤ C
inst✝ : G.IsEquivalence
α : F ⟶ L ⋙ F'
eq : StructuredArrow.IsUniversal (LeftExtension.mk F' α) ≃
  StructuredArrow.IsUniversal (LeftExtension.mk F' (whiskerLeft G α ≫ (G.associator L F').inv)) :=
  (LeftExtension.isUniversalPrecompEquiv L F G (LeftExtension.mk F' α)).trans
    (IsInitial.equivOfIso
      (StructuredArrow.isoMk (Iso.refl ((LeftExtension.precomp L F G).obj (LeftExtension.mk F' α)).right) ⋯))
⊢ F'.IsLeftKanExtension α ↔ F'.IsLeftKanExtension (whiskerLeft G α ≫ (G.associator L F').inv)

tactic: constructor
state_before: C : Type u_1
C' : Type u_2
H : Type u_3
H' : Type u_4
D : Type u_5
D' : Type u_6
inst✝⁶ : Category.{u_8, u_1} C
inst✝⁵ : Category.{u_10, u_2} C'
inst✝⁴ : Category.{u_7, u_3} H
inst✝³ : Category.{?u.138507, u_4} H'
inst✝² : Category.{u_9, u_5} D
inst✝¹ : Category.{?u.138515, u_6} D'
L : C ⥤ D
F : C ⥤ H
F' : D ⥤ H
G : C' ⥤ C
inst✝ : G.IsEquivalence
α : F ⟶ L ⋙ F'
eq : StructuredArrow.IsUniversal (LeftExtension.mk F' α) ≃
  StructuredArrow.IsUniversal (LeftExtension.mk F' (whiskerLeft G α ≫ (G.associator L F').inv)) :=
  (LeftExtension.isUniversalPrecompEquiv L F G (LeftExtension.mk F' α)).trans
    (IsInitial.equivOfIso
      (StructuredArrow.isoMk (Iso.refl ((LeftExtension.precomp L F G).obj (LeftExtension.mk F' α)).right) ⋯))
⊢ F'.IsLeftKanExtension α ↔ F'.IsLeftKanExtension (whiskerLeft G α ≫ (G.associator L F').inv)
state_after: case mp
C : Type u_1
C' : Type u_2
H : Type u_3
H' : Type u_4
D : Type u_5
D' : Type u_6
inst✝⁶ : Category.{u_8, u_1} C
inst✝⁵ : Category.{u_10, u_2} C'
inst✝⁴ : Category.{u_7, u_3} H
inst✝³ : Category.{?u.138507, u_4} H'
inst✝² : Category.{u_9, u_5} D
inst✝¹ : Category.{?u.138515, u_6} D'
L : C ⥤ D
F : C ⥤ H
F' : D ⥤ H
G : C' ⥤ C
inst✝ : G.IsEquivalence
α : F ⟶ L ⋙ F'
eq : StructuredArrow.IsUniversal (LeftExtension.mk F' α) ≃
  StructuredArrow.IsUniversal (LeftExtension.mk F' (whiskerLeft G α ≫ (G.associator L F').inv)) :=
  (LeftExtension.isUniversalPrecompEquiv L F G (LeftExtension.mk F' α)).trans
    (IsInitial.equivOfIso
      (StructuredArrow.isoMk (Iso.refl ((LeftExtension.precomp L F G).obj (LeftExtension.mk F' α)).right) ⋯))
⊢ F'.IsLeftKanExtension α → F'.IsLeftKanExtension (whiskerLeft G α ≫ (G.associator L F').inv)

case mpr
C : Type u_1
C' : Type u_2
H : Type u_3
H' : Type u_4
D : Type u_5
D' : Type u_6
inst✝⁶ : Category.{u_8, u_1} C
inst✝⁵ : Category.{u_10, u_2} C'
inst✝⁴ : Category.{u_7, u_3} H
inst✝³ : Category.{?u.138507, u_4} H'
inst✝² : Category.{u_9, u_5} D
inst✝¹ : Category.{?u.138515, u_6} D'
L : C ⥤ D
F : C ⥤ H
F' : D ⥤ H
G : C' ⥤ C
inst✝ : G.IsEquivalence
α : F ⟶ L ⋙ F'
eq : StructuredArrow.IsUniversal (LeftExtension.mk F' α) ≃
  StructuredArrow.IsUniversal (LeftExtension.mk F' (whiskerLeft G α ≫ (G.associator L F').inv)) :=
  (LeftExtension.isUniversalPrecompEquiv L F G (LeftExtension.mk F' α)).trans
    (IsInitial.equivOfIso
      (StructuredArrow.isoMk (Iso.refl ((LeftExtension.precomp L F G).obj (LeftExtension.mk F' α)).right) ⋯))
⊢ F'.IsLeftKanExtension (whiskerLeft G α ≫ (G.associator L F').inv) → F'.IsLeftKanExtension α

tactic: exact fun _ => ⟨⟨eq (isUniversalOfIsLeftKanExtension _ _)⟩⟩
state_before: case mp
C : Type u_1
C' : Type u_2
H : Type u_3
H' : Type u_4
D : Type u_5
D' : Type u_6
inst✝⁶ : Category.{u_8, u_1} C
inst✝⁵ : Category.{u_10, u_2} C'
inst✝⁴ : Category.{u_7, u_3} H
inst✝³ : Category.{?u.138507, u_4} H'
inst✝² : Category.{u_9, u_5} D
inst✝¹ : Category.{?u.138515, u_6} D'
L : C ⥤ D
F : C ⥤ H
F' : D ⥤ H
G : C' ⥤ C
inst✝ : G.IsEquivalence
α : F ⟶ L ⋙ F'
eq : StructuredArrow.IsUniversal (LeftExtension.mk F' α) ≃
  StructuredArrow.IsUniversal (LeftExtension.mk F' (whiskerLeft G α ≫ (G.associator L F').inv)) :=
  (LeftExtension.isUniversalPrecompEquiv L F G (LeftExtension.mk F' α)).trans
    (IsInitial.equivOfIso
      (StructuredArrow.isoMk (Iso.refl ((LeftExtension.precomp L F G).obj (LeftExtension.mk F' α)).right) ⋯))
⊢ F'.IsLeftKanExtension α → F'.IsLeftKanExtension (whiskerLeft G α ≫ (G.associator L F').inv)
state_after: no goals

tactic: exact fun _ => ⟨⟨eq.symm (isUniversalOfIsLeftKanExtension _ _)⟩⟩
state_before: case mpr
C : Type u_1
C' : Type u_2
H : Type u_3
H' : Type u_4
D : Type u_5
D' : Type u_6
inst✝⁶ : Category.{u_8, u_1} C
inst✝⁵ : Category.{u_10, u_2} C'
inst✝⁴ : Category.{u_7, u_3} H
inst✝³ : Category.{?u.138507, u_4} H'
inst✝² : Category.{u_9, u_5} D
inst✝¹ : Category.{?u.138515, u_6} D'
L : C ⥤ D
F : C ⥤ H
F' : D ⥤ H
G : C' ⥤ C
inst✝ : G.IsEquivalence
α : F ⟶ L ⋙ F'
eq : StructuredArrow.IsUniversal (LeftExtension.mk F' α) ≃
  StructuredArrow.IsUniversal (LeftExtension.mk F' (whiskerLeft G α ≫ (G.associator L F').inv)) :=
  (LeftExtension.isUniversalPrecompEquiv L F G (LeftExtension.mk F' α)).trans
    (IsInitial.equivOfIso
      (StructuredArrow.isoMk (Iso.refl ((LeftExtension.precomp L F G).obj (LeftExtension.mk F' α)).right) ⋯))
⊢ F'.IsLeftKanExtension (whiskerLeft G α ≫ (G.associator L F').inv) → F'.IsLeftKanExtension α
state_after: no goals