Theorem: CategoryTheory.Functor.LeftExtension.IsPointwiseLeftKanExtension.hom_ext
File: Mathlib/CategoryTheory/Functor/KanExtension/Pointwise.lean

Proof steps:
state_before: C : Type u_1
D : Type u_2
H : Type u_3
inst✝² : Category.{u_4, u_1} C
inst✝¹ : Category.{u_5, u_2} D
inst✝ : Category.{u_6, u_3} H
L : C ⥤ D
F : C ⥤ H
E : L.LeftExtension F
E' : ?m.37693
h✝ h : E.IsPointwiseLeftKanExtension
G : L.LeftExtension F
f₁ f₂ : E ⟶ G
⊢ f₁ = f₂
state_after: case h.w.h
C : Type u_1
D : Type u_2
H : Type u_3
inst✝² : Category.{u_4, u_1} C
inst✝¹ : Category.{u_5, u_2} D
inst✝ : Category.{u_6, u_3} H
L : C ⥤ D
F : C ⥤ H
E : L.LeftExtension F
E' : ?m.37693
h✝ h : E.IsPointwiseLeftKanExtension
G : L.LeftExtension F
f₁ f₂ : E ⟶ G
Y : D
⊢ f₁.right.app Y = f₂.right.app Y
tactic: ext Y
state_before: case h.w.h
C : Type u_1
D : Type u_2
H : Type u_3
inst✝² : Category.{u_4, u_1} C
inst✝¹ : Category.{u_5, u_2} D
inst✝ : Category.{u_6, u_3} H
L : C ⥤ D
F : C ⥤ H
E : L.LeftExtension F
E' : ?m.37693
h✝ h : E.IsPointwiseLeftKanExtension
G : L.LeftExtension F
f₁ f₂ : E ⟶ G
Y : D
⊢ f₁.right.app Y = f₂.right.app Y
state_after: case h.w.h
C : Type u_1
D : Type u_2
H : Type u_3
inst✝² : Category.{u_4, u_1} C
inst✝¹ : Category.{u_5, u_2} D
inst✝ : Category.{u_6, u_3} H
L : C ⥤ D
F : C ⥤ H
E : L.LeftExtension F
E' : ?m.37693
h✝ h : E.IsPointwiseLeftKanExtension
G : L.LeftExtension F
f₁ f₂ : E ⟶ G
Y : D
⊢ ∀ (j : CostructuredArrow L Y), (E.coconeAt Y).ι.app j ≫ f₁.right.app Y = (E.coconeAt Y).ι.app j ≫ f₂.right.app Y
tactic: apply (h Y).hom_ext
state_before: case h.w.h
C : Type u_1
D : Type u_2
H : Type u_3
inst✝² : Category.{u_4, u_1} C
inst✝¹ : Category.{u_5, u_2} D
inst✝ : Category.{u_6, u_3} H
L : C ⥤ D
F : C ⥤ H
E : L.LeftExtension F
E' : ?m.37693
h✝ h : E.IsPointwiseLeftKanExtension
G : L.LeftExtension F
f₁ f₂ : E ⟶ G
Y : D
⊢ ∀ (j : CostructuredArrow L Y), (E.coconeAt Y).ι.app j ≫ f₁.right.app Y = (E.coconeAt Y).ι.app j ≫ f₂.right.app Y
state_after: case h.w.h
C : Type u_1
D : Type u_2
H : Type u_3
inst✝² : Category.{u_4, u_1} C
inst✝¹ : Category.{u_5, u_2} D
inst✝ : Category.{u_6, u_3} H
L : C ⥤ D
F : C ⥤ H
E : L.LeftExtension F
E' : ?m.37693
h✝ h : E.IsPointwiseLeftKanExtension
G : L.LeftExtension F
f₁ f₂ : E ⟶ G
Y : D
X : CostructuredArrow L Y
⊢ (E.coconeAt Y).ι.app X ≫ f₁.right.app Y = (E.coconeAt Y).ι.app X ≫ f₂.right.app Y
tactic: intro X
state_before: case h.w.h
C : Type u_1
D : Type u_2
H : Type u_3
inst✝² : Category.{u_4, u_1} C
inst✝¹ : Category.{u_5, u_2} D
inst✝ : Category.{u_6, u_3} H
L : C ⥤ D
F : C ⥤ H
E : L.LeftExtension F
E' : ?m.37693
h✝ h : E.IsPointwiseLeftKanExtension
G : L.LeftExtension F
f₁ f₂ : E ⟶ G
Y : D
X : CostructuredArrow L Y
⊢ (E.coconeAt Y).ι.app X ≫ f₁.right.app Y = (E.coconeAt Y).ι.app X ≫ f₂.right.app Y
state_after: case h.w.h
C : Type u_1
D : Type u_2
H : Type u_3
inst✝² : Category.{u_4, u_1} C
inst✝¹ : Category.{u_5, u_2} D
inst✝ : Category.{u_6, u_3} H
L : C ⥤ D
F : C ⥤ H
E : L.LeftExtension F
E' : ?m.37693
h✝ h : E.IsPointwiseLeftKanExtension
G : L.LeftExtension F
f₁ f₂ : E ⟶ G
Y : D
X : CostructuredArrow L Y
eq₁ : (E.hom ≫ ((whiskeringLeft C D H).obj L).map f₁.right).app X.left = G.hom.app X.left
⊢ (E.coconeAt Y).ι.app X ≫ f₁.right.app Y = (E.coconeAt Y).ι.app X ≫ f₂.right.app Y
tactic: have eq₁ := congr_app (StructuredArrow.w f₁) X.left
state_before: case h.w.h
C : Type u_1
D : Type u_2
H : Type u_3
inst✝² : Category.{u_4, u_1} C
inst✝¹ : Category.{u_5, u_2} D
inst✝ : Category.{u_6, u_3} H
L : C ⥤ D
F : C ⥤ H
E : L.LeftExtension F
E' : ?m.37693
h✝ h : E.IsPointwiseLeftKanExtension
G : L.LeftExtension F
f₁ f₂ : E ⟶ G
Y : D
X : CostructuredArrow L Y
eq₁ : (E.hom ≫ ((whiskeringLeft C D H).obj L).map f₁.right).app X.left = G.hom.app X.left
⊢ (E.coconeAt Y).ι.app X ≫ f₁.right.app Y = (E.coconeAt Y).ι.app X ≫ f₂.right.app Y
state_after: case h.w.h
C : Type u_1
D : Type u_2
H : Type u_3
inst✝² : Category.{u_4, u_1} C
inst✝¹ : Category.{u_5, u_2} D
inst✝ : Category.{u_6, u_3} H
L : C ⥤ D
F : C ⥤ H
E : L.LeftExtension F
E' : ?m.37693
h✝ h : E.IsPointwiseLeftKanExtension
G : L.LeftExtension F
f₁ f₂ : E ⟶ G
Y : D
X : CostructuredArrow L Y
eq₁ : (E.hom ≫ ((whiskeringLeft C D H).obj L).map f₁.right).app X.left = G.hom.app X.left
eq₂ : (E.hom ≫ ((whiskeringLeft C D H).obj L).map f₂.right).app X.left = G.hom.app X.left
⊢ (E.coconeAt Y).ι.app X ≫ f₁.right.app Y = (E.coconeAt Y).ι.app X ≫ f₂.right.app Y
tactic: have eq₂ := congr_app (StructuredArrow.w f₂) X.left
state_before: case h.w.h
C : Type u_1
D : Type u_2
H : Type u_3
inst✝² : Category.{u_4, u_1} C
inst✝¹ : Category.{u_5, u_2} D
inst✝ : Category.{u_6, u_3} H
L : C ⥤ D
F : C ⥤ H
E : L.LeftExtension F
E' : ?m.37693
h✝ h : E.IsPointwiseLeftKanExtension
G : L.LeftExtension F
f₁ f₂ : E ⟶ G
Y : D
X : CostructuredArrow L Y
eq₁ : (E.hom ≫ ((whiskeringLeft C D H).obj L).map f₁.right).app X.left = G.hom.app X.left
eq₂ : (E.hom ≫ ((whiskeringLeft C D H).obj L).map f₂.right).app X.left = G.hom.app X.left
⊢ (E.coconeAt Y).ι.app X ≫ f₁.right.app Y = (E.coconeAt Y).ι.app X ≫ f₂.right.app Y
state_after: case h.w.h
C : Type u_1
D : Type u_2
H : Type u_3
inst✝² : Category.{u_4, u_1} C
inst✝¹ : Category.{u_5, u_2} D
inst✝ : Category.{u_6, u_3} H
L : C ⥤ D
F : C ⥤ H
E : L.LeftExtension F
E' : ?m.37693
h✝ h : E.IsPointwiseLeftKanExtension
G : L.LeftExtension F
f₁ f₂ : E ⟶ G
Y : D
X : CostructuredArrow L Y
eq₁ : E.hom.app X.left ≫ f₁.right.app (L.obj X.left) = G.hom.app X.left
eq₂ : E.hom.app X.left ≫ f₂.right.app (L.obj X.left) = G.hom.app X.left
⊢ (E.hom.app X.left ≫ E.right.map X.hom) ≫ f₁.right.app Y = (E.hom.app X.left ≫ E.right.map X.hom) ≫ f₂.right.app Y
tactic: dsimp at eq₁ eq₂ ⊢
state_before: case h.w.h
C : Type u_1
D : Type u_2
H : Type u_3
inst✝² : Category.{u_4, u_1} C
inst✝¹ : Category.{u_5, u_2} D
inst✝ : Category.{u_6, u_3} H
L : C ⥤ D
F : C ⥤ H
E : L.LeftExtension F
E' : ?m.37693
h✝ h : E.IsPointwiseLeftKanExtension
G : L.LeftExtension F
f₁ f₂ : E ⟶ G
Y : D
X : CostructuredArrow L Y
eq₁ : E.hom.app X.left ≫ f₁.right.app (L.obj X.left) = G.hom.app X.left
eq₂ : E.hom.app X.left ≫ f₂.right.app (L.obj X.left) = G.hom.app X.left
⊢ (E.hom.app X.left ≫ E.right.map X.hom) ≫ f₁.right.app Y = (E.hom.app X.left ≫ E.right.map X.hom) ≫ f₂.right.app Y
state_after: case h.w.h
C : Type u_1
D : Type u_2
H : Type u_3
inst✝² : Category.{u_4, u_1} C
inst✝¹ : Category.{u_5, u_2} D
inst✝ : Category.{u_6, u_3} H
L : C ⥤ D
F : C ⥤ H
E : L.LeftExtension F
E' : ?m.37693
h✝ h : E.IsPointwiseLeftKanExtension
G : L.LeftExtension F
f₁ f₂ : E ⟶ G
Y : D
X : CostructuredArrow L Y
eq₁ : E.hom.app X.left ≫ f₁.right.app (L.obj X.left) = G.hom.app X.left
eq₂ : E.hom.app X.left ≫ f₂.right.app (L.obj X.left) = G.hom.app X.left
⊢ E.hom.app X.left ≫ f₁.right.app (L.obj X.left) ≫ G.right.map X.hom =
    E.hom.app X.left ≫ f₂.right.app (L.obj X.left) ≫ G.right.map X.hom
tactic: simp only [assoc, NatTrans.naturality]
state_before: case h.w.h
C : Type u_1
D : Type u_2
H : Type u_3
inst✝² : Category.{u_4, u_1} C
inst✝¹ : Category.{u_5, u_2} D
inst✝ : Category.{u_6, u_3} H
L : C ⥤ D
F : C ⥤ H
E : L.LeftExtension F
E' : ?m.37693
h✝ h : E.IsPointwiseLeftKanExtension
G : L.LeftExtension F
f₁ f₂ : E ⟶ G
Y : D
X : CostructuredArrow L Y
eq₁ : E.hom.app X.left ≫ f₁.right.app (L.obj X.left) = G.hom.app X.left
eq₂ : E.hom.app X.left ≫ f₂.right.app (L.obj X.left) = G.hom.app X.left
⊢ E.hom.app X.left ≫ f₁.right.app (L.obj X.left) ≫ G.right.map X.hom =
    E.hom.app X.left ≫ f₂.right.app (L.obj X.left) ≫ G.right.map X.hom
state_after: no goals
tactic: rw [reassoc_of% eq₁, reassoc_of% eq₂]