Theorem: CategoryTheory.evaluationAdjunctionRight_counit_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), HasCoproductsOfShape (a ⟶ b) D
c : C
d : D
F : C ⥤ D
f : d ⟶ ((evaluation C D).obj c).obj F
⊢ ∀ ⦃X Y : C⦄ (f_1 : X ⟶ Y),
    ((evaluationLeftAdjoint D c).obj d).map f_1 ≫ (fun e => Sigma.desc fun h => f ≫ F.map h) Y =
      (fun e => Sigma.desc fun h => f ≫ F.map h) X ≫ F.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), HasCoproductsOfShape (a ⟶ b) D
c : C
d : D
F : C ⥤ D
f : d ⟶ ((evaluation C D).obj c).obj F
X✝ Y✝ : C
f✝ : X✝ ⟶ Y✝
⊢ ((evaluationLeftAdjoint D c).obj d).map f✝ ≫ (fun e => Sigma.desc fun h => f ≫ F.map h) Y✝ =
    (fun e => Sigma.desc fun h => f ≫ F.map h) X✝ ≫ F.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), HasCoproductsOfShape (a ⟶ b) D
c : C
d : D
F : C ⥤ D
f : d ⟶ ((evaluation C D).obj c).obj F
X✝ Y✝ : C
f✝ : X✝ ⟶ Y✝
⊢ ((evaluationLeftAdjoint D c).obj d).map f✝ ≫ (fun e => Sigma.desc fun h => f ≫ F.map h) Y✝ =
    (fun e => Sigma.desc fun h => f ≫ F.map h) X✝ ≫ F.map f✝
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasCoproductsOfShape (a ⟶ b) D
c : C
d : D
F : C ⥤ D
f : d ⟶ ((evaluation C D).obj c).obj F
X✝ Y✝ : C
f✝ : X✝ ⟶ Y✝
⊢ ((Sigma.desc fun g => Sigma.ι (fun x => d) (g ≫ f✝)) ≫ Sigma.desc fun h => f ≫ F.map h) =
    (Sigma.desc fun h => f ≫ F.map h) ≫ F.map 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), HasCoproductsOfShape (a ⟶ b) D
c : C
d : D
F : C ⥤ D
f : d ⟶ ((evaluation C D).obj c).obj F
X✝ Y✝ : C
f✝ : X✝ ⟶ Y✝
⊢ ((Sigma.desc fun g => Sigma.ι (fun x => d) (g ≫ f✝)) ≫ Sigma.desc fun h => f ≫ F.map h) =
    (Sigma.desc fun h => f ≫ F.map h) ≫ F.map f✝
state_after: case h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasCoproductsOfShape (a ⟶ b) D
c : C
d : D
F : C ⥤ D
f : d ⟶ ((evaluation C D).obj c).obj F
X✝ Y✝ : C
f✝ : X✝ ⟶ Y✝
b✝ : c ⟶ X✝
⊢ (Sigma.ι (fun x => d) b✝ ≫ (Sigma.desc fun g => Sigma.ι (fun x => d) (g ≫ f✝)) ≫ Sigma.desc fun h => f ≫ F.map h) =
    Sigma.ι (fun x => d) b✝ ≫ (Sigma.desc fun h => f ≫ F.map h) ≫ F.map f✝
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), HasCoproductsOfShape (a ⟶ b) D
c : C
d : D
F : C ⥤ D
f : d ⟶ ((evaluation C D).obj c).obj F
X✝ Y✝ : C
f✝ : X✝ ⟶ Y✝
b✝ : c ⟶ X✝
⊢ (Sigma.ι (fun x => d) b✝ ≫ (Sigma.desc fun g => Sigma.ι (fun x => d) (g ≫ f✝)) ≫ Sigma.desc fun h => f ≫ F.map h) =
    Sigma.ι (fun x => d) b✝ ≫ (Sigma.desc fun h => f ≫ F.map h) ≫ F.map 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), HasCoproductsOfShape (a ⟶ b) D
c : C
d : D
F : C ⥤ D
⊢ Function.LeftInverse (fun f => { app := fun e => Sigma.desc fun h => f ≫ F.map h, naturality := ⋯ }) fun f =>
    Sigma.ι (fun x => d) (𝟙 c) ≫ f.app c
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasCoproductsOfShape (a ⟶ b) D
c : C
d : D
F : C ⥤ D
f : (evaluationLeftAdjoint D c).obj d ⟶ F
⊢ (fun f => { app := fun e => Sigma.desc fun h => f ≫ F.map h, naturality := ⋯ })
      ((fun f => Sigma.ι (fun x => d) (𝟙 c) ≫ f.app 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), HasCoproductsOfShape (a ⟶ b) D
c : C
d : D
F : C ⥤ D
f : (evaluationLeftAdjoint D c).obj d ⟶ F
⊢ (fun f => { app := fun e => Sigma.desc fun h => f ≫ F.map h, naturality := ⋯ })
      ((fun f => Sigma.ι (fun x => d) (𝟙 c) ≫ f.app 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), HasCoproductsOfShape (a ⟶ b) D
c : C
d : D
F : C ⥤ D
f : (evaluationLeftAdjoint D c).obj d ⟶ F
x : C
⊢ ((fun f => { app := fun e => Sigma.desc fun h => f ≫ F.map h, naturality := ⋯ })
          ((fun f => Sigma.ι (fun x => d) (𝟙 c) ≫ f.app 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), HasCoproductsOfShape (a ⟶ b) D
c : C
d : D
F : C ⥤ D
f : (evaluationLeftAdjoint D c).obj d ⟶ F
x : C
⊢ ((fun f => { app := fun e => Sigma.desc fun h => f ≫ F.map h, naturality := ⋯ })
          ((fun f => Sigma.ι (fun x => d) (𝟙 c) ≫ f.app 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), HasCoproductsOfShape (a ⟶ b) D
c : C
d : D
F : C ⥤ D
f : (evaluationLeftAdjoint D c).obj d ⟶ F
x : C
⊢ (Sigma.desc fun h => (Sigma.ι (fun x => d) (𝟙 c) ≫ f.app c) ≫ F.map h) = 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), HasCoproductsOfShape (a ⟶ b) D
c : C
d : D
F : C ⥤ D
f : (evaluationLeftAdjoint D c).obj d ⟶ F
x : C
⊢ (Sigma.desc fun h => (Sigma.ι (fun x => d) (𝟙 c) ≫ f.app c) ≫ F.map h) = 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), HasCoproductsOfShape (a ⟶ b) D
c : C
d : D
F : C ⥤ D
f : (evaluationLeftAdjoint D c).obj d ⟶ F
x : C
g : c ⟶ x
⊢ (Sigma.ι (fun x => d) g ≫ Sigma.desc fun h => (Sigma.ι (fun x => d) (𝟙 c) ≫ f.app c) ≫ F.map h) =
    Sigma.ι (fun x => d) g ≫ f.app x
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), HasCoproductsOfShape (a ⟶ b) D
c : C
d : D
F : C ⥤ D
f : (evaluationLeftAdjoint D c).obj d ⟶ F
x : C
g : c ⟶ x
⊢ (Sigma.ι (fun x => d) g ≫ Sigma.desc fun h => (Sigma.ι (fun x => d) (𝟙 c) ≫ f.app c) ≫ F.map h) =
    Sigma.ι (fun x => d) g ≫ f.app x
state_after: no goals
tactic: simp only [colimit.ι_desc, Cofan.mk_ι_app, Category.assoc, ← f.naturality,
              evaluationLeftAdjoint_obj_map, colimit.ι_desc_assoc,
              Discrete.functor_obj, Cofan.mk_pt, Discrete.natTrans_app, Category.id_comp]
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasCoproductsOfShape (a ⟶ b) D
c : C
d : D
F : C ⥤ D
f : d ⟶ ((evaluation C D).obj c).obj F
⊢ (fun f => Sigma.ι (fun x => d) (𝟙 c) ≫ f.app c)
      ((fun f => { app := fun e => Sigma.desc fun h => f ≫ F.map h, 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), HasCoproductsOfShape (a ⟶ b) D
c : C
d : D
F : C ⥤ D
f : d ⟶ ((evaluation C D).obj c).obj F
⊢ (Sigma.ι (fun x => d) (𝟙 c) ≫ Sigma.desc fun h => f ≫ F.map h) = 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), HasCoproductsOfShape (a ⟶ b) D
c : C
d : D
F : C ⥤ D
f : d ⟶ ((evaluation C D).obj c).obj F
⊢ (Sigma.ι (fun x => d) (𝟙 c) ≫ Sigma.desc fun h => f ≫ F.map h) = 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), HasCoproductsOfShape (a ⟶ b) D
c : C
⊢ ∀ {X : D} {Y Y' : C ⥤ D} (f : (evaluationLeftAdjoint D c).obj X ⟶ Y) (g : Y ⟶ Y'),
    ((fun d F =>
            { toFun := fun f => Sigma.ι (fun x => d) (𝟙 c) ≫ f.app c,
              invFun := fun f => { app := fun e => Sigma.desc fun h => f ≫ F.map h, naturality := ⋯ }, left_inv := ⋯,
              right_inv := ⋯ })
          X Y')
        (f ≫ g) =
      ((fun d F =>
              { toFun := fun f => Sigma.ι (fun x => d) (𝟙 c) ≫ f.app c,
                invFun := fun f => { app := fun e => Sigma.desc fun h => f ≫ F.map h, naturality := ⋯ }, left_inv := ⋯,
                right_inv := ⋯ })
            X Y)
          f ≫
        ((evaluation C D).obj c).map g
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasCoproductsOfShape (a ⟶ b) D
c : C
X✝ : D
Y✝ Y'✝ : C ⥤ D
f✝ : (evaluationLeftAdjoint D c).obj X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Y'✝
⊢ ((fun d F =>
          { toFun := fun f => Sigma.ι (fun x => d) (𝟙 c) ≫ f.app c,
            invFun := fun f => { app := fun e => Sigma.desc fun h => f ≫ F.map h, naturality := ⋯ }, left_inv := ⋯,
            right_inv := ⋯ })
        X✝ Y'✝)
      (f✝ ≫ g✝) =
    ((fun d F =>
            { toFun := fun f => Sigma.ι (fun x => d) (𝟙 c) ≫ f.app c,
              invFun := fun f => { app := fun e => Sigma.desc fun h => f ≫ F.map h, naturality := ⋯ }, left_inv := ⋯,
              right_inv := ⋯ })
          X✝ Y✝)
        f✝ ≫
      ((evaluation C D).obj c).map g✝
tactic: intros
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasCoproductsOfShape (a ⟶ b) D
c : C
X✝ : D
Y✝ Y'✝ : C ⥤ D
f✝ : (evaluationLeftAdjoint D c).obj X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Y'✝
⊢ ((fun d F =>
          { toFun := fun f => Sigma.ι (fun x => d) (𝟙 c) ≫ f.app c,
            invFun := fun f => { app := fun e => Sigma.desc fun h => f ≫ F.map h, naturality := ⋯ }, left_inv := ⋯,
            right_inv := ⋯ })
        X✝ Y'✝)
      (f✝ ≫ g✝) =
    ((fun d F =>
            { toFun := fun f => Sigma.ι (fun x => d) (𝟙 c) ≫ f.app c,
              invFun := fun f => { app := fun e => Sigma.desc fun h => f ≫ F.map h, naturality := ⋯ }, left_inv := ⋯,
              right_inv := ⋯ })
          X✝ Y✝)
        f✝ ≫
      ((evaluation C D).obj c).map g✝
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasCoproductsOfShape (a ⟶ b) D
c : C
X✝ : D
Y✝ Y'✝ : C ⥤ D
f✝ : (evaluationLeftAdjoint D c).obj X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Y'✝
⊢ Sigma.ι (fun x => X✝) (𝟙 c) ≫ f✝.app c ≫ g✝.app c = (Sigma.ι (fun x => X✝) (𝟙 c) ≫ f✝.app c) ≫ g✝.app c
tactic: dsimp
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : ∀ (a b : C), HasCoproductsOfShape (a ⟶ b) D
c : C
X✝ : D
Y✝ Y'✝ : C ⥤ D
f✝ : (evaluationLeftAdjoint D c).obj X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Y'✝
⊢ Sigma.ι (fun x => X✝) (𝟙 c) ≫ f✝.app c ≫ g✝.app c = (Sigma.ι (fun x => X✝) (𝟙 c) ≫ f✝.app c) ≫ g✝.app c
state_after: no goals
tactic: simp