Theorem: CategoryTheory.WithInitial.prelaxfunctor_toPrelaxFunctorStruct_map₂
File: Mathlib/CategoryTheory/WithTerminal.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
⊢ ∀ {a b : Cat} (f : a ⟶ b),
    { obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂ (𝟙 f) =
      𝟙 ({ obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map f)
state_after: C : Type u
inst✝ : Category.{v, u} C
a✝ b✝ : Cat
f✝ : a✝ ⟶ b✝
⊢ { obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂ (𝟙 f✝) =
    𝟙 ({ obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map f✝)
tactic: intros
state_before: C : Type u
inst✝ : Category.{v, u} C
a✝ b✝ : Cat
f✝ : a✝ ⟶ b✝
⊢ { obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂ (𝟙 f✝) =
    𝟙 ({ obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map f✝)
state_after: case app
C : Type u
inst✝ : Category.{v, u} C
a✝ b✝ : Cat
f✝ : a✝ ⟶ b✝
⊢ ({ obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂
        (𝟙 f✝)).app =
    (𝟙
        ({ obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map
          f✝)).app
tactic: apply NatTrans.ext
state_before: case app
C : Type u
inst✝ : Category.{v, u} C
a✝ b✝ : Cat
f✝ : a✝ ⟶ b✝
⊢ ({ obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂
        (𝟙 f✝)).app =
    (𝟙
        ({ obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map
          f✝)).app
state_after: case app.h
C : Type u
inst✝ : Category.{v, u} C
a✝ b✝ : Cat
f✝ : a✝ ⟶ b✝
X : ↑({ obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.obj a✝)
⊢ ({ obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂
          (𝟙 f✝)).app
      X =
    (𝟙
          ({ obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map
            f✝)).app
      X
tactic: funext X
state_before: case app.h
C : Type u
inst✝ : Category.{v, u} C
a✝ b✝ : Cat
f✝ : a✝ ⟶ b✝
X : ↑({ obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.obj a✝)
⊢ ({ obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂
          (𝟙 f✝)).app
      X =
    (𝟙
          ({ obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map
            f✝)).app
      X
state_after: no goals
tactic: cases X <;> rfl
state_before: C : Type u
inst✝ : Category.{v, u} C
⊢ ∀ {a b : Cat} {f g h : a ⟶ b} (η : f ⟶ g) (θ : g ⟶ h),
    { obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂ (η ≫ θ) =
      { obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂ η ≫
        { obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂ θ
state_after: C : Type u
inst✝ : Category.{v, u} C
a✝ b✝ : Cat
f✝ g✝ h✝ : a✝ ⟶ b✝
η✝ : f✝ ⟶ g✝
θ✝ : g✝ ⟶ h✝
⊢ { obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂ (η✝ ≫ θ✝) =
    { obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂ η✝ ≫
      { obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂ θ✝
tactic: intros
state_before: C : Type u
inst✝ : Category.{v, u} C
a✝ b✝ : Cat
f✝ g✝ h✝ : a✝ ⟶ b✝
η✝ : f✝ ⟶ g✝
θ✝ : g✝ ⟶ h✝
⊢ { obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂ (η✝ ≫ θ✝) =
    { obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂ η✝ ≫
      { obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂ θ✝
state_after: case app
C : Type u
inst✝ : Category.{v, u} C
a✝ b✝ : Cat
f✝ g✝ h✝ : a✝ ⟶ b✝
η✝ : f✝ ⟶ g✝
θ✝ : g✝ ⟶ h✝
⊢ ({ obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂
        (η✝ ≫ θ✝)).app =
    ({ obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂ η✝ ≫
        { obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂
          θ✝).app
tactic: apply NatTrans.ext
state_before: case app
C : Type u
inst✝ : Category.{v, u} C
a✝ b✝ : Cat
f✝ g✝ h✝ : a✝ ⟶ b✝
η✝ : f✝ ⟶ g✝
θ✝ : g✝ ⟶ h✝
⊢ ({ obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂
        (η✝ ≫ θ✝)).app =
    ({ obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂ η✝ ≫
        { obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂
          θ✝).app
state_after: case app.h
C : Type u
inst✝ : Category.{v, u} C
a✝ b✝ : Cat
f✝ g✝ h✝ : a✝ ⟶ b✝
η✝ : f✝ ⟶ g✝
θ✝ : g✝ ⟶ h✝
X : ↑({ obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.obj a✝)
⊢ ({ obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂
          (η✝ ≫ θ✝)).app
      X =
    ({ obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂ η✝ ≫
          { obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂
            θ✝).app
      X
tactic: funext X
state_before: case app.h
C : Type u
inst✝ : Category.{v, u} C
a✝ b✝ : Cat
f✝ g✝ h✝ : a✝ ⟶ b✝
η✝ : f✝ ⟶ g✝
θ✝ : g✝ ⟶ h✝
X : ↑({ obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.obj a✝)
⊢ ({ obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂
          (η✝ ≫ θ✝)).app
      X =
    ({ obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂ η✝ ≫
          { obj := fun C => Cat.of (WithInitial ↑C), map := fun {X Y} => map, map₂ := fun {a b} {f g} => map₂ }.map₂
            θ✝).app
      X
state_after: no goals
tactic: cases X <;> rfl