Theorem: CategoryTheory.evaluationRightAdjoint_obj_obj
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
X✝ Y✝ : D
f : X✝ ⟶ Y✝
⊢ ∀ ⦃X Y : C⦄ (f_1 : X ⟶ Y),
    ((fun d =>
                { obj := fun t => ∏ᶜ fun x => d, map := fun {X Y} f => Pi.lift fun g => Pi.π (fun x => d) (f ≫ g),
                  map_id := ⋯, map_comp := ⋯ })
              X✝).map
          f_1 ≫
        (fun t => Pi.lift fun g => Pi.π (fun x => X✝) g ≫ f) Y =
      (fun t => Pi.lift fun g => Pi.π (fun x => X✝) g ≫ f) X ≫
        ((fun d =>
                { obj := fun t => ∏ᶜ fun x => d, map := fun {X Y} f => Pi.lift fun g => Pi.π (fun x => d) (f ≫ g),
                  map_id := ⋯, map_comp := ⋯ })
              Y✝).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
X✝¹ Y✝¹ : D
f : X✝¹ ⟶ Y✝¹
X✝ Y✝ : C
f✝ : X✝ ⟶ Y✝
⊢ ((fun d =>
              { obj := fun t => ∏ᶜ fun x => d, map := fun {X Y} f => Pi.lift fun g => Pi.π (fun x => d) (f ≫ g),
                map_id := ⋯, map_comp := ⋯ })
            X✝¹).map
        f✝ ≫
      (fun t => Pi.lift fun g => Pi.π (fun x => X✝¹) g ≫ f) Y✝ =
    (fun t => Pi.lift fun g => Pi.π (fun x => X✝¹) g ≫ f) X✝ ≫
      ((fun d =>
              { obj := fun t => ∏ᶜ fun x => d, map := fun {X Y} f => Pi.lift fun g => Pi.π (fun x => d) (f ≫ g),
                map_id := ⋯, map_comp := ⋯ })
            Y✝¹).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
X✝¹ Y✝¹ : D
f : X✝¹ ⟶ Y✝¹
X✝ Y✝ : C
f✝ : X✝ ⟶ Y✝
⊢ ((fun d =>
              { obj := fun t => ∏ᶜ fun x => d, map := fun {X Y} f => Pi.lift fun g => Pi.π (fun x => d) (f ≫ g),
                map_id := ⋯, map_comp := ⋯ })
            X✝¹).map
        f✝ ≫
      (fun t => Pi.lift fun g => Pi.π (fun x => X✝¹) g ≫ f) Y✝ =
    (fun t => Pi.lift fun g => Pi.π (fun x => X✝¹) g ≫ f) X✝ ≫
      ((fun d =>
              { obj := fun t => ∏ᶜ fun x => d, map := fun {X Y} f => Pi.lift fun g => Pi.π (fun x => d) (f ≫ g),
                map_id := ⋯, map_comp := ⋯ })
            Y✝¹).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
X✝¹ Y✝¹ : D
f : X✝¹ ⟶ Y✝¹
X✝ Y✝ : C
f✝ : X✝ ⟶ Y✝
⊢ ((Pi.lift fun g => Pi.π (fun x => X✝¹) (f✝ ≫ g)) ≫ Pi.lift fun g => Pi.π (fun x => X✝¹) g ≫ f) =
    (Pi.lift fun g => Pi.π (fun x => X✝¹) g ≫ f) ≫ Pi.lift fun g => Pi.π (fun x => Y✝¹) (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
X✝¹ Y✝¹ : D
f : X✝¹ ⟶ Y✝¹
X✝ Y✝ : C
f✝ : X✝ ⟶ Y✝
⊢ ((Pi.lift fun g => Pi.π (fun x => X✝¹) (f✝ ≫ g)) ≫ Pi.lift fun g => Pi.π (fun x => X✝¹) g ≫ f) =
    (Pi.lift fun g => Pi.π (fun x => X✝¹) g ≫ f) ≫ Pi.lift fun g => Pi.π (fun x => Y✝¹) (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
X✝¹ Y✝¹ : D
f : X✝¹ ⟶ Y✝¹
X✝ Y✝ : C
f✝ : X✝ ⟶ Y✝
b✝ : Y✝ ⟶ c
⊢ ((Pi.lift fun g => Pi.π (fun x => X✝¹) (f✝ ≫ g)) ≫ Pi.lift fun g => Pi.π (fun x => X✝¹) g ≫ f) ≫
      Pi.π (fun x => Y✝¹) b✝ =
    ((Pi.lift fun g => Pi.π (fun x => X✝¹) g ≫ f) ≫ Pi.lift fun g => Pi.π (fun x => Y✝¹) (f✝ ≫ g)) ≫
      Pi.π (fun x => Y✝¹) 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
X✝¹ Y✝¹ : D
f : X✝¹ ⟶ Y✝¹
X✝ Y✝ : C
f✝ : X✝ ⟶ Y✝
b✝ : Y✝ ⟶ c
⊢ ((Pi.lift fun g => Pi.π (fun x => X✝¹) (f✝ ≫ g)) ≫ Pi.lift fun g => Pi.π (fun x => X✝¹) g ≫ f) ≫
      Pi.π (fun x => Y✝¹) b✝ =
    ((Pi.lift fun g => Pi.π (fun x => X✝¹) g ≫ f) ≫ Pi.lift fun g => Pi.π (fun x => Y✝¹) (f✝ ≫ g)) ≫
      Pi.π (fun x => Y✝¹) b✝
state_after: no goals
tactic: simp