Theorem: CategoryTheory.Functor.isLeftKanExtension_iff_of_iso₂
File: Mathlib/CategoryTheory/Functor/KanExtension/Basic.lean

tactic: let eq := LeftExtension.isUniversalEquivOfIso₂ (LeftExtension.mk _ α₁)
  (LeftExtension.mk _ α₂) e e' h
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_9, u_1} C
inst✝⁴ : Category.{?u.167016, u_2} C'
inst✝³ : Category.{u_8, u_3} H
inst✝² : Category.{?u.167024, u_4} H'
inst✝¹ : Category.{u_7, u_5} D
inst✝ : Category.{?u.167032, u_6} D'
L : C ⥤ D
F₁ F₂ : C ⥤ H
F₁' F₂' : D ⥤ H
α₁ : F₁ ⟶ L ⋙ F₁'
α₂ : F₂ ⟶ L ⋙ F₂'
e : F₁ ≅ F₂
e' : F₁' ≅ F₂'
h : α₁ ≫ whiskerLeft L e'.hom = e.hom ≫ α₂
⊢ F₁'.IsLeftKanExtension α₁ ↔ F₂'.IsLeftKanExtension α₂
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_9, u_1} C
inst✝⁴ : Category.{?u.167016, u_2} C'
inst✝³ : Category.{u_8, u_3} H
inst✝² : Category.{?u.167024, u_4} H'
inst✝¹ : Category.{u_7, u_5} D
inst✝ : Category.{?u.167032, u_6} D'
L : C ⥤ D
F₁ F₂ : C ⥤ H
F₁' F₂' : D ⥤ H
α₁ : F₁ ⟶ L ⋙ F₁'
α₂ : F₂ ⟶ L ⋙ F₂'
e : F₁ ≅ F₂
e' : F₁' ≅ F₂'
h : α₁ ≫ whiskerLeft L e'.hom = e.hom ≫ α₂
eq : StructuredArrow.IsUniversal (LeftExtension.mk F₁' α₁) ≃ StructuredArrow.IsUniversal (LeftExtension.mk F₂' α₂) :=
  (LeftExtension.mk F₁' α₁).isUniversalEquivOfIso₂ (LeftExtension.mk F₂' α₂) e e' h
⊢ F₁'.IsLeftKanExtension α₁ ↔ F₂'.IsLeftKanExtension α₂

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_9, u_1} C
inst✝⁴ : Category.{?u.167016, u_2} C'
inst✝³ : Category.{u_8, u_3} H
inst✝² : Category.{?u.167024, u_4} H'
inst✝¹ : Category.{u_7, u_5} D
inst✝ : Category.{?u.167032, u_6} D'
L : C ⥤ D
F₁ F₂ : C ⥤ H
F₁' F₂' : D ⥤ H
α₁ : F₁ ⟶ L ⋙ F₁'
α₂ : F₂ ⟶ L ⋙ F₂'
e : F₁ ≅ F₂
e' : F₁' ≅ F₂'
h : α₁ ≫ whiskerLeft L e'.hom = e.hom ≫ α₂
eq : StructuredArrow.IsUniversal (LeftExtension.mk F₁' α₁) ≃ StructuredArrow.IsUniversal (LeftExtension.mk F₂' α₂) :=
  (LeftExtension.mk F₁' α₁).isUniversalEquivOfIso₂ (LeftExtension.mk F₂' α₂) e e' h
⊢ F₁'.IsLeftKanExtension α₁ ↔ F₂'.IsLeftKanExtension α₂
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_9, u_1} C
inst✝⁴ : Category.{?u.167016, u_2} C'
inst✝³ : Category.{u_8, u_3} H
inst✝² : Category.{?u.167024, u_4} H'
inst✝¹ : Category.{u_7, u_5} D
inst✝ : Category.{?u.167032, u_6} D'
L : C ⥤ D
F₁ F₂ : C ⥤ H
F₁' F₂' : D ⥤ H
α₁ : F₁ ⟶ L ⋙ F₁'
α₂ : F₂ ⟶ L ⋙ F₂'
e : F₁ ≅ F₂
e' : F₁' ≅ F₂'
h : α₁ ≫ whiskerLeft L e'.hom = e.hom ≫ α₂
eq : StructuredArrow.IsUniversal (LeftExtension.mk F₁' α₁) ≃ StructuredArrow.IsUniversal (LeftExtension.mk F₂' α₂) :=
  (LeftExtension.mk F₁' α₁).isUniversalEquivOfIso₂ (LeftExtension.mk F₂' α₂) e e' h
⊢ F₁'.IsLeftKanExtension α₁ → F₂'.IsLeftKanExtension α₂

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_9, u_1} C
inst✝⁴ : Category.{?u.167016, u_2} C'
inst✝³ : Category.{u_8, u_3} H
inst✝² : Category.{?u.167024, u_4} H'
inst✝¹ : Category.{u_7, u_5} D
inst✝ : Category.{?u.167032, u_6} D'
L : C ⥤ D
F₁ F₂ : C ⥤ H
F₁' F₂' : D ⥤ H
α₁ : F₁ ⟶ L ⋙ F₁'
α₂ : F₂ ⟶ L ⋙ F₂'
e : F₁ ≅ F₂
e' : F₁' ≅ F₂'
h : α₁ ≫ whiskerLeft L e'.hom = e.hom ≫ α₂
eq : StructuredArrow.IsUniversal (LeftExtension.mk F₁' α₁) ≃ StructuredArrow.IsUniversal (LeftExtension.mk F₂' α₂) :=
  (LeftExtension.mk F₁' α₁).isUniversalEquivOfIso₂ (LeftExtension.mk F₂' α₂) e e' h
⊢ F₂'.IsLeftKanExtension α₂ → F₁'.IsLeftKanExtension α₁

tactic: exact fun _ => ⟨⟨eq.1 (isUniversalOfIsLeftKanExtension F₁' α₁)⟩⟩
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_9, u_1} C
inst✝⁴ : Category.{?u.167016, u_2} C'
inst✝³ : Category.{u_8, u_3} H
inst✝² : Category.{?u.167024, u_4} H'
inst✝¹ : Category.{u_7, u_5} D
inst✝ : Category.{?u.167032, u_6} D'
L : C ⥤ D
F₁ F₂ : C ⥤ H
F₁' F₂' : D ⥤ H
α₁ : F₁ ⟶ L ⋙ F₁'
α₂ : F₂ ⟶ L ⋙ F₂'
e : F₁ ≅ F₂
e' : F₁' ≅ F₂'
h : α₁ ≫ whiskerLeft L e'.hom = e.hom ≫ α₂
eq : StructuredArrow.IsUniversal (LeftExtension.mk F₁' α₁) ≃ StructuredArrow.IsUniversal (LeftExtension.mk F₂' α₂) :=
  (LeftExtension.mk F₁' α₁).isUniversalEquivOfIso₂ (LeftExtension.mk F₂' α₂) e e' h
⊢ F₁'.IsLeftKanExtension α₁ → F₂'.IsLeftKanExtension α₂
state_after: no goals

tactic: exact fun _ => ⟨⟨eq.2 (isUniversalOfIsLeftKanExtension F₂' α₂)⟩⟩
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_9, u_1} C
inst✝⁴ : Category.{?u.167016, u_2} C'
inst✝³ : Category.{u_8, u_3} H
inst✝² : Category.{?u.167024, u_4} H'
inst✝¹ : Category.{u_7, u_5} D
inst✝ : Category.{?u.167032, u_6} D'
L : C ⥤ D
F₁ F₂ : C ⥤ H
F₁' F₂' : D ⥤ H
α₁ : F₁ ⟶ L ⋙ F₁'
α₂ : F₂ ⟶ L ⋙ F₂'
e : F₁ ≅ F₂
e' : F₁' ≅ F₂'
h : α₁ ≫ whiskerLeft L e'.hom = e.hom ≫ α₂
eq : StructuredArrow.IsUniversal (LeftExtension.mk F₁' α₁) ≃ StructuredArrow.IsUniversal (LeftExtension.mk F₂' α₂) :=
  (LeftExtension.mk F₁' α₁).isUniversalEquivOfIso₂ (LeftExtension.mk F₂' α₂) e e' h
⊢ F₂'.IsLeftKanExtension α₂ → F₁'.IsLeftKanExtension α₁
state_after: no goals