Theorem: CategoryTheory.evaluationAdjunctionLeft_unit_app_app
File: Mathlib/CategoryTheory/Adjunction/Evaluation.lean

Proof steps:
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasProductsOfShape (a ⟶ b) D
c : C
F : C ⥤ D
d : D
f : ((evaluation C D).obj c).obj F ⟶ d
⊢ ∀ ⦃X Y : C⦄ (f_1 : X ⟶ Y),
    F.map f_1 ≫ (fun t => Pi.lift fun g => F.map g ≫ f) Y =
      (fun t => Pi.lift fun g => F.map g ≫ f) X ≫ ((evaluationRightAdjoint D c).obj d).map f_1
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasProductsOfShape (a ⟶ b) D
c : C
F : C ⥤ D
d : D
f : ((evaluation C D).obj c).obj F ⟶ d
X✝ Y✝ : C
f✝ : X✝ ⟶ Y✝
⊢ F.map f✝ ≫ (fun t => Pi.lift fun g => F.map g ≫ f) Y✝ =
    (fun t => Pi.lift fun g => F.map g ≫ f) X✝ ≫ ((evaluationRightAdjoint D c).obj d).map f✝
tactic: intros
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasProductsOfShape (a ⟶ b) D
c : C
F : C ⥤ D
d : D
f : ((evaluation C D).obj c).obj F ⟶ d
X✝ Y✝ : C
f✝ : X✝ ⟶ Y✝
⊢ F.map f✝ ≫ (fun t => Pi.lift fun g => F.map g ≫ f) Y✝ =
    (fun t => Pi.lift fun g => F.map g ≫ f) X✝ ≫ ((evaluationRightAdjoint D c).obj d).map f✝
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasProductsOfShape (a ⟶ b) D
c : C
F : C ⥤ D
d : D
f : ((evaluation C D).obj c).obj F ⟶ d
X✝ Y✝ : C
f✝ : X✝ ⟶ Y✝
⊢ (F.map f✝ ≫ Pi.lift fun g => F.map g ≫ f) =
    (Pi.lift fun g => F.map g ≫ f) ≫ Pi.lift fun g => Pi.π (fun x => d) (f✝ ≫ g)
tactic: dsimp
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasProductsOfShape (a ⟶ b) D
c : C
F : C ⥤ D
d : D
f : ((evaluation C D).obj c).obj F ⟶ d
X✝ Y✝ : C
f✝ : X✝ ⟶ Y✝
⊢ (F.map f✝ ≫ Pi.lift fun g => F.map g ≫ f) =
    (Pi.lift fun g => F.map g ≫ f) ≫ Pi.lift fun g => Pi.π (fun x => d) (f✝ ≫ g)
state_after: case h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasProductsOfShape (a ⟶ b) D
c : C
F : C ⥤ D
d : D
f : ((evaluation C D).obj c).obj F ⟶ d
X✝ Y✝ : C
f✝ : X✝ ⟶ Y✝
b✝ : Y✝ ⟶ c
⊢ (F.map f✝ ≫ Pi.lift fun g => F.map g ≫ f) ≫ Pi.π (fun x => d) b✝ =
    ((Pi.lift fun g => F.map g ≫ f) ≫ Pi.lift fun g => Pi.π (fun x => d) (f✝ ≫ g)) ≫ Pi.π (fun x => d) b✝
tactic: ext
state_before: case h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasProductsOfShape (a ⟶ b) D
c : C
F : C ⥤ D
d : D
f : ((evaluation C D).obj c).obj F ⟶ d
X✝ Y✝ : C
f✝ : X✝ ⟶ Y✝
b✝ : Y✝ ⟶ c
⊢ (F.map f✝ ≫ Pi.lift fun g => F.map g ≫ f) ≫ Pi.π (fun x => d) b✝ =
    ((Pi.lift fun g => F.map g ≫ f) ≫ Pi.lift fun g => Pi.π (fun x => d) (f✝ ≫ g)) ≫ Pi.π (fun x => d) b✝
state_after: no goals
tactic: simp
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasProductsOfShape (a ⟶ b) D
c : C
F : C ⥤ D
d : D
f : ((evaluation C D).obj c).obj F ⟶ d
⊢ (fun f => f.app c ≫ Pi.π (fun x => d) (𝟙 c))
      ((fun f => { app := fun t => Pi.lift fun g => F.map g ≫ f, naturality := ⋯ }) f) =
    f
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasProductsOfShape (a ⟶ b) D
c : C
F : C ⥤ D
d : D
f : ((evaluation C D).obj c).obj F ⟶ d
⊢ (Pi.lift fun g => F.map g ≫ f) ≫ Pi.π (fun x => d) (𝟙 c) = f
tactic: dsimp
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasProductsOfShape (a ⟶ b) D
c : C
F : C ⥤ D
d : D
f : ((evaluation C D).obj c).obj F ⟶ d
⊢ (Pi.lift fun g => F.map g ≫ f) ≫ Pi.π (fun x => d) (𝟙 c) = f
state_after: no goals
tactic: simp
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasProductsOfShape (a ⟶ b) D
c : C
F : C ⥤ D
d : D
⊢ Function.RightInverse (fun f => f.app c ≫ Pi.π (fun x => d) (𝟙 c)) fun f =>
    { app := fun t => Pi.lift fun g => F.map g ≫ f, naturality := ⋯ }
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasProductsOfShape (a ⟶ b) D
c : C
F : C ⥤ D
d : D
f : F ⟶ (evaluationRightAdjoint D c).obj d
⊢ (fun f => { app := fun t => Pi.lift fun g => F.map g ≫ f, naturality := ⋯ })
      ((fun f => f.app c ≫ Pi.π (fun x => d) (𝟙 c)) f) =
    f
tactic: intro f
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasProductsOfShape (a ⟶ b) D
c : C
F : C ⥤ D
d : D
f : F ⟶ (evaluationRightAdjoint D c).obj d
⊢ (fun f => { app := fun t => Pi.lift fun g => F.map g ≫ f, naturality := ⋯ })
      ((fun f => f.app c ≫ Pi.π (fun x => d) (𝟙 c)) f) =
    f
state_after: case w.h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasProductsOfShape (a ⟶ b) D
c : C
F : C ⥤ D
d : D
f : F ⟶ (evaluationRightAdjoint D c).obj d
x : C
⊢ ((fun f => { app := fun t => Pi.lift fun g => F.map g ≫ f, naturality := ⋯ })
          ((fun f => f.app c ≫ Pi.π (fun x => d) (𝟙 c)) f)).app
      x =
    f.app x
tactic: ext x
state_before: case w.h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasProductsOfShape (a ⟶ b) D
c : C
F : C ⥤ D
d : D
f : F ⟶ (evaluationRightAdjoint D c).obj d
x : C
⊢ ((fun f => { app := fun t => Pi.lift fun g => F.map g ≫ f, naturality := ⋯ })
          ((fun f => f.app c ≫ Pi.π (fun x => d) (𝟙 c)) f)).app
      x =
    f.app x
state_after: case w.h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasProductsOfShape (a ⟶ b) D
c : C
F : C ⥤ D
d : D
f : F ⟶ (evaluationRightAdjoint D c).obj d
x : C
⊢ (Pi.lift fun g => F.map g ≫ f.app c ≫ Pi.π (fun x => d) (𝟙 c)) = f.app x
tactic: dsimp
state_before: case w.h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasProductsOfShape (a ⟶ b) D
c : C
F : C ⥤ D
d : D
f : F ⟶ (evaluationRightAdjoint D c).obj d
x : C
⊢ (Pi.lift fun g => F.map g ≫ f.app c ≫ Pi.π (fun x => d) (𝟙 c)) = f.app x
state_after: case w.h.h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasProductsOfShape (a ⟶ b) D
c : C
F : C ⥤ D
d : D
f : F ⟶ (evaluationRightAdjoint D c).obj d
x : C
g : x ⟶ c
⊢ (Pi.lift fun g => F.map g ≫ f.app c ≫ Pi.π (fun x => d) (𝟙 c)) ≫ Pi.π (fun x => d) g = f.app x ≫ Pi.π (fun x => d) g
tactic: ext g
state_before: case w.h.h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasProductsOfShape (a ⟶ b) D
c : C
F : C ⥤ D
d : D
f : F ⟶ (evaluationRightAdjoint D c).obj d
x : C
g : x ⟶ c
⊢ (Pi.lift fun g => F.map g ≫ f.app c ≫ Pi.π (fun x => d) (𝟙 c)) ≫ Pi.π (fun x => d) g = f.app x ≫ Pi.π (fun x => d) g
state_after: no goals
tactic: simp only [Discrete.functor_obj, NatTrans.naturality_assoc,
              evaluationRightAdjoint_obj_obj, evaluationRightAdjoint_obj_map, limit.lift_π,
              Fan.mk_pt, Fan.mk_π_app, Discrete.natTrans_app, Category.comp_id]