Theorem: CategoryTheory.Functor.pointwiseLeftKanExtension_map
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.96105, u_1} C
inst✝² : Category.{?u.96109, u_2} D
inst✝¹ : Category.{?u.96113, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseLeftKanExtension F
Y₁ Y₂ : D
f : Y₁ ⟶ Y₂
g₁ g₂ : CostructuredArrow L Y₁
φ : g₁ ⟶ g₂
⊢ (CostructuredArrow.proj L Y₁ ⋙ F).map φ ≫
      (fun g => colimit.ι (CostructuredArrow.proj L Y₂ ⋙ F) ((CostructuredArrow.map f).obj g)) g₂ =
    (fun g => colimit.ι (CostructuredArrow.proj L Y₂ ⋙ F) ((CostructuredArrow.map f).obj g)) g₁ ≫
      ((const (CostructuredArrow L Y₁)).obj (colimit (CostructuredArrow.proj L Y₂ ⋙ F))).map φ
state_after: no goals
tactic: simpa using colimit.w (CostructuredArrow.proj L Y₂ ⋙ F)
              ((CostructuredArrow.map f).map φ)
state_before: C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.96105, u_1} C
inst✝² : Category.{?u.96109, u_2} D
inst✝¹ : Category.{?u.96113, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseLeftKanExtension F
Y : D
j : CostructuredArrow L Y
⊢ colimit.ι (CostructuredArrow.proj L Y ⋙ F) j ≫
      { obj := fun Y => colimit (CostructuredArrow.proj L Y ⋙ F),
            map := fun {Y₁ Y₂} f =>
              colimit.desc (CostructuredArrow.proj L Y₁ ⋙ F)
                { pt := colimit (CostructuredArrow.proj L Y₂ ⋙ F),
                  ι :=
                    { app := fun g => colimit.ι (CostructuredArrow.proj L Y₂ ⋙ F) ((CostructuredArrow.map f).obj g),
                      naturality := ⋯ } } }.map
        (𝟙 Y) =
    colimit.ι (CostructuredArrow.proj L Y ⋙ F) j ≫
      𝟙
        ({ obj := fun Y => colimit (CostructuredArrow.proj L Y ⋙ F),
              map := fun {Y₁ Y₂} f =>
                colimit.desc (CostructuredArrow.proj L Y₁ ⋙ F)
                  { pt := colimit (CostructuredArrow.proj L Y₂ ⋙ F),
                    ι :=
                      { app := fun g => colimit.ι (CostructuredArrow.proj L Y₂ ⋙ F) ((CostructuredArrow.map f).obj g),
                        naturality := ⋯ } } }.obj
          Y)
state_after: C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.96105, u_1} C
inst✝² : Category.{?u.96109, u_2} D
inst✝¹ : Category.{?u.96113, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseLeftKanExtension F
Y : D
j : CostructuredArrow L Y
⊢ colimit.ι (CostructuredArrow.proj L Y ⋙ F) j ≫
      colimit.desc (CostructuredArrow.proj L Y ⋙ F)
        { pt := colimit (CostructuredArrow.proj L Y ⋙ F),
          ι :=
            { app := fun g => colimit.ι (CostructuredArrow.proj L Y ⋙ F) ((CostructuredArrow.map (𝟙 Y)).obj g),
              naturality := ⋯ } } =
    colimit.ι (CostructuredArrow.proj L Y ⋙ F) j ≫ 𝟙 (colimit (CostructuredArrow.proj L Y ⋙ F))
tactic: dsimp
state_before: C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.96105, u_1} C
inst✝² : Category.{?u.96109, u_2} D
inst✝¹ : Category.{?u.96113, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseLeftKanExtension F
Y : D
j : CostructuredArrow L Y
⊢ colimit.ι (CostructuredArrow.proj L Y ⋙ F) j ≫
      colimit.desc (CostructuredArrow.proj L Y ⋙ F)
        { pt := colimit (CostructuredArrow.proj L Y ⋙ F),
          ι :=
            { app := fun g => colimit.ι (CostructuredArrow.proj L Y ⋙ F) ((CostructuredArrow.map (𝟙 Y)).obj g),
              naturality := ⋯ } } =
    colimit.ι (CostructuredArrow.proj L Y ⋙ F) j ≫ 𝟙 (colimit (CostructuredArrow.proj L Y ⋙ F))
state_after: C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.96105, u_1} C
inst✝² : Category.{?u.96109, u_2} D
inst✝¹ : Category.{?u.96113, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseLeftKanExtension F
Y : D
j : CostructuredArrow L Y
⊢ colimit.ι (CostructuredArrow.proj L Y ⋙ F) ((CostructuredArrow.map (𝟙 Y)).obj j) =
    colimit.ι (CostructuredArrow.proj L Y ⋙ F) j
tactic: simp only [colimit.ι_desc, comp_id]
state_before: C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.96105, u_1} C
inst✝² : Category.{?u.96109, u_2} D
inst✝¹ : Category.{?u.96113, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseLeftKanExtension F
Y : D
j : CostructuredArrow L Y
⊢ colimit.ι (CostructuredArrow.proj L Y ⋙ F) ((CostructuredArrow.map (𝟙 Y)).obj j) =
    colimit.ι (CostructuredArrow.proj L Y ⋙ F) j
state_after: case h.e_7.h
C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.96105, u_1} C
inst✝² : Category.{?u.96109, u_2} D
inst✝¹ : Category.{?u.96113, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseLeftKanExtension F
Y : D
j : CostructuredArrow L Y
⊢ (CostructuredArrow.map (𝟙 Y)).obj j = j
tactic: congr
state_before: case h.e_7.h
C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.96105, u_1} C
inst✝² : Category.{?u.96109, u_2} D
inst✝¹ : Category.{?u.96113, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseLeftKanExtension F
Y : D
j : CostructuredArrow L Y
⊢ (CostructuredArrow.map (𝟙 Y)).obj j = j
state_after: no goals
tactic: apply CostructuredArrow.map_id
state_before: C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.96105, u_1} C
inst✝² : Category.{?u.96109, u_2} D
inst✝¹ : Category.{?u.96113, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseLeftKanExtension F
Y₁ Y₂ Y₃ : D
f : Y₁ ⟶ Y₂
f' : Y₂ ⟶ Y₃
j : CostructuredArrow L Y₁
⊢ colimit.ι (CostructuredArrow.proj L Y₁ ⋙ F) j ≫
      { obj := fun Y => colimit (CostructuredArrow.proj L Y ⋙ F),
            map := fun {Y₁ Y₂} f =>
              colimit.desc (CostructuredArrow.proj L Y₁ ⋙ F)
                { pt := colimit (CostructuredArrow.proj L Y₂ ⋙ F),
                  ι :=
                    { app := fun g => colimit.ι (CostructuredArrow.proj L Y₂ ⋙ F) ((CostructuredArrow.map f).obj g),
                      naturality := ⋯ } } }.map
        (f ≫ f') =
    colimit.ι (CostructuredArrow.proj L Y₁ ⋙ F) j ≫
      { obj := fun Y => colimit (CostructuredArrow.proj L Y ⋙ F),
              map := fun {Y₁ Y₂} f =>
                colimit.desc (CostructuredArrow.proj L Y₁ ⋙ F)
                  { pt := colimit (CostructuredArrow.proj L Y₂ ⋙ F),
                    ι :=
                      { app := fun g => colimit.ι (CostructuredArrow.proj L Y₂ ⋙ F) ((CostructuredArrow.map f).obj g),
                        naturality := ⋯ } } }.map
          f ≫
        { obj := fun Y => colimit (CostructuredArrow.proj L Y ⋙ F),
              map := fun {Y₁ Y₂} f =>
                colimit.desc (CostructuredArrow.proj L Y₁ ⋙ F)
                  { pt := colimit (CostructuredArrow.proj L Y₂ ⋙ F),
                    ι :=
                      { app := fun g => colimit.ι (CostructuredArrow.proj L Y₂ ⋙ F) ((CostructuredArrow.map f).obj g),
                        naturality := ⋯ } } }.map
          f'
state_after: C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.96105, u_1} C
inst✝² : Category.{?u.96109, u_2} D
inst✝¹ : Category.{?u.96113, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseLeftKanExtension F
Y₁ Y₂ Y₃ : D
f : Y₁ ⟶ Y₂
f' : Y₂ ⟶ Y₃
j : CostructuredArrow L Y₁
⊢ colimit.ι (CostructuredArrow.proj L Y₁ ⋙ F) j ≫
      colimit.desc (CostructuredArrow.proj L Y₁ ⋙ F)
        { pt := colimit (CostructuredArrow.proj L Y₃ ⋙ F),
          ι :=
            { app := fun g => colimit.ι (CostructuredArrow.proj L Y₃ ⋙ F) ((CostructuredArrow.map (f ≫ f')).obj g),
              naturality := ⋯ } } =
    colimit.ι (CostructuredArrow.proj L Y₁ ⋙ F) j ≫
      colimit.desc (CostructuredArrow.proj L Y₁ ⋙ F)
          { pt := colimit (CostructuredArrow.proj L Y₂ ⋙ F),
            ι :=
              { app := fun g => colimit.ι (CostructuredArrow.proj L Y₂ ⋙ F) ((CostructuredArrow.map f).obj g),
                naturality := ⋯ } } ≫
        colimit.desc (CostructuredArrow.proj L Y₂ ⋙ F)
          { pt := colimit (CostructuredArrow.proj L Y₃ ⋙ F),
            ι :=
              { app := fun g => colimit.ι (CostructuredArrow.proj L Y₃ ⋙ F) ((CostructuredArrow.map f').obj g),
                naturality := ⋯ } }
tactic: dsimp
state_before: C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.96105, u_1} C
inst✝² : Category.{?u.96109, u_2} D
inst✝¹ : Category.{?u.96113, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseLeftKanExtension F
Y₁ Y₂ Y₃ : D
f : Y₁ ⟶ Y₂
f' : Y₂ ⟶ Y₃
j : CostructuredArrow L Y₁
⊢ colimit.ι (CostructuredArrow.proj L Y₁ ⋙ F) j ≫
      colimit.desc (CostructuredArrow.proj L Y₁ ⋙ F)
        { pt := colimit (CostructuredArrow.proj L Y₃ ⋙ F),
          ι :=
            { app := fun g => colimit.ι (CostructuredArrow.proj L Y₃ ⋙ F) ((CostructuredArrow.map (f ≫ f')).obj g),
              naturality := ⋯ } } =
    colimit.ι (CostructuredArrow.proj L Y₁ ⋙ F) j ≫
      colimit.desc (CostructuredArrow.proj L Y₁ ⋙ F)
          { pt := colimit (CostructuredArrow.proj L Y₂ ⋙ F),
            ι :=
              { app := fun g => colimit.ι (CostructuredArrow.proj L Y₂ ⋙ F) ((CostructuredArrow.map f).obj g),
                naturality := ⋯ } } ≫
        colimit.desc (CostructuredArrow.proj L Y₂ ⋙ F)
          { pt := colimit (CostructuredArrow.proj L Y₃ ⋙ F),
            ι :=
              { app := fun g => colimit.ι (CostructuredArrow.proj L Y₃ ⋙ F) ((CostructuredArrow.map f').obj g),
                naturality := ⋯ } }
state_after: C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.96105, u_1} C
inst✝² : Category.{?u.96109, u_2} D
inst✝¹ : Category.{?u.96113, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseLeftKanExtension F
Y₁ Y₂ Y₃ : D
f : Y₁ ⟶ Y₂
f' : Y₂ ⟶ Y₃
j : CostructuredArrow L Y₁
⊢ colimit.ι (CostructuredArrow.proj L Y₃ ⋙ F) ((CostructuredArrow.map (f ≫ f')).obj j) =
    colimit.ι (CostructuredArrow.proj L Y₃ ⋙ F) ((CostructuredArrow.map f').obj ((CostructuredArrow.map f).obj j))
tactic: simp only [colimit.ι_desc, colimit.ι_desc_assoc, comp_obj, CostructuredArrow.proj_obj]
state_before: C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.96105, u_1} C
inst✝² : Category.{?u.96109, u_2} D
inst✝¹ : Category.{?u.96113, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseLeftKanExtension F
Y₁ Y₂ Y₃ : D
f : Y₁ ⟶ Y₂
f' : Y₂ ⟶ Y₃
j : CostructuredArrow L Y₁
⊢ colimit.ι (CostructuredArrow.proj L Y₃ ⋙ F) ((CostructuredArrow.map (f ≫ f')).obj j) =
    colimit.ι (CostructuredArrow.proj L Y₃ ⋙ F) ((CostructuredArrow.map f').obj ((CostructuredArrow.map f).obj j))
state_after: case h.e_7.h
C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.96105, u_1} C
inst✝² : Category.{?u.96109, u_2} D
inst✝¹ : Category.{?u.96113, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseLeftKanExtension F
Y₁ Y₂ Y₃ : D
f : Y₁ ⟶ Y₂
f' : Y₂ ⟶ Y₃
j : CostructuredArrow L Y₁
⊢ (CostructuredArrow.map (f ≫ f')).obj j = (CostructuredArrow.map f').obj ((CostructuredArrow.map f).obj j)
tactic: congr 1
state_before: case h.e_7.h
C : Type u_1
D : Type u_2
H : Type u_3
inst✝³ : Category.{?u.96105, u_1} C
inst✝² : Category.{?u.96109, u_2} D
inst✝¹ : Category.{?u.96113, u_3} H
L : C ⥤ D
F : C ⥤ H
inst✝ : L.HasPointwiseLeftKanExtension F
Y₁ Y₂ Y₃ : D
f : Y₁ ⟶ Y₂
f' : Y₂ ⟶ Y₃
j : CostructuredArrow L Y₁
⊢ (CostructuredArrow.map (f ≫ f')).obj j = (CostructuredArrow.map f').obj ((CostructuredArrow.map f).obj j)
state_after: no goals
tactic: apply CostructuredArrow.map_comp