[GOAL]
X Y : WalkingParallelPair
f : WalkingParallelPairHom X Y
⊢ comp f (id Y) = f
[PROOFSTEP]
cases f
[GOAL]
case left
⊢ comp left (id one) = left
[PROOFSTEP]
rfl
[GOAL]
case right
⊢ comp right (id one) = right
[PROOFSTEP]
rfl
[GOAL]
case id
X : WalkingParallelPair
⊢ comp (id X) (id X) = id X
[PROOFSTEP]
rfl
[GOAL]
X Y Z W : WalkingParallelPair
f : WalkingParallelPairHom X Y
g : WalkingParallelPairHom Y Z
h : WalkingParallelPairHom Z W
⊢ comp (comp f g) h = comp f (comp g h)
[PROOFSTEP]
cases f
[GOAL]
case left
Z W : WalkingParallelPair
h : WalkingParallelPairHom Z W
g : WalkingParallelPairHom one Z
⊢ comp (comp left g) h = comp left (comp g h)
[PROOFSTEP]
cases g
[GOAL]
case right
Z W : WalkingParallelPair
h : WalkingParallelPairHom Z W
g : WalkingParallelPairHom one Z
⊢ comp (comp right g) h = comp right (comp g h)
[PROOFSTEP]
cases g
[GOAL]
case id
X Z W : WalkingParallelPair
h : WalkingParallelPairHom Z W
g : WalkingParallelPairHom X Z
⊢ comp (comp (id X) g) h = comp (id X) (comp g h)
[PROOFSTEP]
cases g
[GOAL]
case left.id
W : WalkingParallelPair
h : WalkingParallelPairHom one W
⊢ comp (comp left (id one)) h = comp left (comp (id one) h)
[PROOFSTEP]
cases h
[GOAL]
case right.id
W : WalkingParallelPair
h : WalkingParallelPairHom one W
⊢ comp (comp right (id one)) h = comp right (comp (id one) h)
[PROOFSTEP]
cases h
[GOAL]
case id.left
W : WalkingParallelPair
h : WalkingParallelPairHom one W
⊢ comp (comp (id zero) left) h = comp (id zero) (comp left h)
[PROOFSTEP]
cases h
[GOAL]
case id.right
W : WalkingParallelPair
h : WalkingParallelPairHom one W
⊢ comp (comp (id zero) right) h = comp (id zero) (comp right h)
[PROOFSTEP]
cases h
[GOAL]
case id.id
X W : WalkingParallelPair
h : WalkingParallelPairHom X W
⊢ comp (comp (id X) (id X)) h = comp (id X) (comp (id X) h)
[PROOFSTEP]
cases h
[GOAL]
case left.id.id
⊢ comp (comp left (id one)) (id one) = comp left (comp (id one) (id one))
[PROOFSTEP]
rfl
[GOAL]
case right.id.id
⊢ comp (comp right (id one)) (id one) = comp right (comp (id one) (id one))
[PROOFSTEP]
rfl
[GOAL]
case id.left.id
⊢ comp (comp (id zero) left) (id one) = comp (id zero) (comp left (id one))
[PROOFSTEP]
rfl
[GOAL]
case id.right.id
⊢ comp (comp (id zero) right) (id one) = comp (id zero) (comp right (id one))
[PROOFSTEP]
rfl
[GOAL]
case id.id.left
⊢ comp (comp (id zero) (id zero)) left = comp (id zero) (comp (id zero) left)
[PROOFSTEP]
rfl
[GOAL]
case id.id.right
⊢ comp (comp (id zero) (id zero)) right = comp (id zero) (comp (id zero) right)
[PROOFSTEP]
rfl
[GOAL]
case id.id.id
X : WalkingParallelPair
⊢ comp (comp (id X) (id X)) (id X) = comp (id X) (comp (id X) (id X))
[PROOFSTEP]
rfl
[GOAL]
X : WalkingParallelPair
⊢ sizeOf (𝟙 X) = 1 + sizeOf X
[PROOFSTEP]
cases X
[GOAL]
case zero
⊢ sizeOf (𝟙 zero) = 1 + sizeOf zero
[PROOFSTEP]
rfl
[GOAL]
case one
⊢ sizeOf (𝟙 one) = 1 + sizeOf one
[PROOFSTEP]
rfl
[GOAL]
x : WalkingParallelPair
⊢ WalkingParallelPair
[PROOFSTEP]
cases x
[GOAL]
case zero
⊢ WalkingParallelPair
case one ⊢ WalkingParallelPair
[PROOFSTEP]
exacts [one, zero]
[GOAL]
X✝ Y✝ : WalkingParallelPair
f : X✝ ⟶ Y✝
⊢ (fun x =>
        op
          (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
            (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
      X✝ ⟶
    (fun x =>
        op
          (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
            (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
      Y✝
[PROOFSTEP]
cases f
[GOAL]
case left
⊢ (fun x =>
        op
          (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
            (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
      zero ⟶
    (fun x =>
        op
          (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
            (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
      one
[PROOFSTEP]
apply Quiver.Hom.op
[GOAL]
case right
⊢ (fun x =>
        op
          (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
            (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
      zero ⟶
    (fun x =>
        op
          (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
            (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
      one
[PROOFSTEP]
apply Quiver.Hom.op
[GOAL]
case id
X✝ : WalkingParallelPair
⊢ (fun x =>
        op
          (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
            (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
      X✝ ⟶
    (fun x =>
        op
          (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
            (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
      X✝
[PROOFSTEP]
apply Quiver.Hom.op
[GOAL]
case left.f
⊢ WalkingParallelPair.casesOn (motive := fun t => one = t → WalkingParallelPair) one (fun h => (_ : zero = one) ▸ one)
      (fun h => (_ : one = one) ▸ zero) (_ : one = one) ⟶
    WalkingParallelPair.casesOn (motive := fun t => zero = t → WalkingParallelPair) zero
      (fun h => (_ : zero = zero) ▸ one) (fun h => (_ : one = zero) ▸ zero) (_ : zero = zero)
case right.f
⊢ WalkingParallelPair.casesOn (motive := fun t => one = t → WalkingParallelPair) one (fun h => (_ : zero = one) ▸ one)
      (fun h => (_ : one = one) ▸ zero) (_ : one = one) ⟶
    WalkingParallelPair.casesOn (motive := fun t => zero = t → WalkingParallelPair) zero
      (fun h => (_ : zero = zero) ▸ one) (fun h => (_ : one = zero) ▸ zero) (_ : zero = zero)
case id.f
X✝ : WalkingParallelPair
⊢ WalkingParallelPair.casesOn (motive := fun t => X✝ = t → WalkingParallelPair) X✝ (fun h => (_ : zero = X✝) ▸ one)
      (fun h => (_ : one = X✝) ▸ zero) (_ : X✝ = X✝) ⟶
    WalkingParallelPair.casesOn (motive := fun t => X✝ = t → WalkingParallelPair) X✝ (fun h => (_ : zero = X✝) ▸ one)
      (fun h => (_ : one = X✝) ▸ zero) (_ : X✝ = X✝)
[PROOFSTEP]
exacts [left, right, WalkingParallelPairHom.id _]
[GOAL]
⊢ ∀ {X Y Z : WalkingParallelPair} (f : X ⟶ Y) (g : Y ⟶ Z),
    {
            obj := fun x =>
              op
                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
            map := fun {X Y} f =>
              WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
                X = a →
                  Y = a_1 →
                    HEq f t →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                f
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f left →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f right →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun X_1 h =>
                  Eq.ndrec (motive := fun X_2 =>
                    Y = X_2 →
                      HEq f (WalkingParallelPairHom.id X_2) →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                    (fun h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : X ⟶ Y) →
                          HEq f (WalkingParallelPairHom.id X) →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                X ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h =>
                          (_ : WalkingParallelPairHom.id X = f) ▸
                            (WalkingParallelPairHom.id
                                (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                  (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                        (_ : X = Y) f)
                    h)
                (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
        (f ≫ g) =
      {
              obj := fun x =>
                op
                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
              map := fun {X Y} f =>
                WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
                  X = a →
                    Y = a_1 →
                      HEq f t →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                  f
                  (fun h =>
                    Eq.ndrec (motive := fun {X} =>
                      (f : X ⟶ Y) →
                        Y = one →
                          HEq f left →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                X ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                      (fun f h =>
                        Eq.ndrec (motive := fun {Y} =>
                          (f : zero ⟶ Y) →
                            HEq f left →
                              ((fun x =>
                                    op
                                      (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                        (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                  zero ⟶
                                (fun x =>
                                    op
                                      (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                        (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                  Y))
                          (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                      (_ : zero = X) f)
                  (fun h =>
                    Eq.ndrec (motive := fun {X} =>
                      (f : X ⟶ Y) →
                        Y = one →
                          HEq f right →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                X ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                      (fun f h =>
                        Eq.ndrec (motive := fun {Y} =>
                          (f : zero ⟶ Y) →
                            HEq f right →
                              ((fun x =>
                                    op
                                      (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                        (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                  zero ⟶
                                (fun x =>
                                    op
                                      (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                        (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                  Y))
                          (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                      (_ : zero = X) f)
                  (fun X_1 h =>
                    Eq.ndrec (motive := fun X_2 =>
                      Y = X_2 →
                        HEq f (WalkingParallelPairHom.id X_2) →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun h =>
                        Eq.ndrec (motive := fun {Y} =>
                          (f : X ⟶ Y) →
                            HEq f (WalkingParallelPairHom.id X) →
                              ((fun x =>
                                    op
                                      (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                        (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                  X ⟶
                                (fun x =>
                                    op
                                      (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                        (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                  Y))
                          (fun f h =>
                            (_ : WalkingParallelPairHom.id X = f) ▸
                              (WalkingParallelPairHom.id
                                  (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                    (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                          (_ : X = Y) f)
                      h)
                  (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
          f ≫
        {
              obj := fun x =>
                op
                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
              map := fun {X Y} f =>
                WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
                  X = a →
                    Y = a_1 →
                      HEq f t →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                  f
                  (fun h =>
                    Eq.ndrec (motive := fun {X} =>
                      (f : X ⟶ Y) →
                        Y = one →
                          HEq f left →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                X ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                      (fun f h =>
                        Eq.ndrec (motive := fun {Y} =>
                          (f : zero ⟶ Y) →
                            HEq f left →
                              ((fun x =>
                                    op
                                      (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                        (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                  zero ⟶
                                (fun x =>
                                    op
                                      (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                        (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                  Y))
                          (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                      (_ : zero = X) f)
                  (fun h =>
                    Eq.ndrec (motive := fun {X} =>
                      (f : X ⟶ Y) →
                        Y = one →
                          HEq f right →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                X ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                      (fun f h =>
                        Eq.ndrec (motive := fun {Y} =>
                          (f : zero ⟶ Y) →
                            HEq f right →
                              ((fun x =>
                                    op
                                      (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                        (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                  zero ⟶
                                (fun x =>
                                    op
                                      (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                        (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                  Y))
                          (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                      (_ : zero = X) f)
                  (fun X_1 h =>
                    Eq.ndrec (motive := fun X_2 =>
                      Y = X_2 →
                        HEq f (WalkingParallelPairHom.id X_2) →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun h =>
                        Eq.ndrec (motive := fun {Y} =>
                          (f : X ⟶ Y) →
                            HEq f (WalkingParallelPairHom.id X) →
                              ((fun x =>
                                    op
                                      (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                        (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                  X ⟶
                                (fun x =>
                                    op
                                      (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                        (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                  Y))
                          (fun f h =>
                            (_ : WalkingParallelPairHom.id X = f) ▸
                              (WalkingParallelPairHom.id
                                  (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                    (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                          (_ : X = Y) f)
                      h)
                  (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
          g
[PROOFSTEP]
rintro _ _ _ (_ | _ | _) g
[GOAL]
case left
Z✝ : WalkingParallelPair
g : one ⟶ Z✝
⊢ {
          obj := fun x =>
            op
              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
          map := fun {X Y} f =>
            WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
              X = a →
                Y = a_1 →
                  HEq f t →
                    ((fun x =>
                          op
                            (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                              (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                        X ⟶
                      (fun x =>
                          op
                            (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                              (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                        Y))
              f
              (fun h =>
                Eq.ndrec (motive := fun {X} =>
                  (f : X ⟶ Y) →
                    Y = one →
                      HEq f left →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                  (fun f h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : zero ⟶ Y) →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              zero ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                  (_ : zero = X) f)
              (fun h =>
                Eq.ndrec (motive := fun {X} =>
                  (f : X ⟶ Y) →
                    Y = one →
                      HEq f right →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                  (fun f h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : zero ⟶ Y) →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              zero ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                  (_ : zero = X) f)
              (fun X_1 h =>
                Eq.ndrec (motive := fun X_2 =>
                  Y = X_2 →
                    HEq f (WalkingParallelPairHom.id X_2) →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                  (fun h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : X ⟶ Y) →
                        HEq f (WalkingParallelPairHom.id X) →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h =>
                        (_ : WalkingParallelPairHom.id X = f) ▸
                          (WalkingParallelPairHom.id
                              (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                      (_ : X = Y) f)
                  h)
              (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
      (left ≫ g) =
    {
            obj := fun x =>
              op
                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
            map := fun {X Y} f =>
              WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
                X = a →
                  Y = a_1 →
                    HEq f t →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                f
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f left →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f right →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun X_1 h =>
                  Eq.ndrec (motive := fun X_2 =>
                    Y = X_2 →
                      HEq f (WalkingParallelPairHom.id X_2) →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                    (fun h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : X ⟶ Y) →
                          HEq f (WalkingParallelPairHom.id X) →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                X ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h =>
                          (_ : WalkingParallelPairHom.id X = f) ▸
                            (WalkingParallelPairHom.id
                                (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                  (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                        (_ : X = Y) f)
                    h)
                (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
        left ≫
      {
            obj := fun x =>
              op
                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
            map := fun {X Y} f =>
              WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
                X = a →
                  Y = a_1 →
                    HEq f t →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                f
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f left →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f right →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun X_1 h =>
                  Eq.ndrec (motive := fun X_2 =>
                    Y = X_2 →
                      HEq f (WalkingParallelPairHom.id X_2) →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                    (fun h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : X ⟶ Y) →
                          HEq f (WalkingParallelPairHom.id X) →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                X ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h =>
                          (_ : WalkingParallelPairHom.id X = f) ▸
                            (WalkingParallelPairHom.id
                                (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                  (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                        (_ : X = Y) f)
                    h)
                (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
        g
[PROOFSTEP]
cases g
[GOAL]
case right
Z✝ : WalkingParallelPair
g : one ⟶ Z✝
⊢ {
          obj := fun x =>
            op
              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
          map := fun {X Y} f =>
            WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
              X = a →
                Y = a_1 →
                  HEq f t →
                    ((fun x =>
                          op
                            (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                              (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                        X ⟶
                      (fun x =>
                          op
                            (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                              (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                        Y))
              f
              (fun h =>
                Eq.ndrec (motive := fun {X} =>
                  (f : X ⟶ Y) →
                    Y = one →
                      HEq f left →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                  (fun f h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : zero ⟶ Y) →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              zero ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                  (_ : zero = X) f)
              (fun h =>
                Eq.ndrec (motive := fun {X} =>
                  (f : X ⟶ Y) →
                    Y = one →
                      HEq f right →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                  (fun f h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : zero ⟶ Y) →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              zero ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                  (_ : zero = X) f)
              (fun X_1 h =>
                Eq.ndrec (motive := fun X_2 =>
                  Y = X_2 →
                    HEq f (WalkingParallelPairHom.id X_2) →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                  (fun h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : X ⟶ Y) →
                        HEq f (WalkingParallelPairHom.id X) →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h =>
                        (_ : WalkingParallelPairHom.id X = f) ▸
                          (WalkingParallelPairHom.id
                              (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                      (_ : X = Y) f)
                  h)
              (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
      (right ≫ g) =
    {
            obj := fun x =>
              op
                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
            map := fun {X Y} f =>
              WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
                X = a →
                  Y = a_1 →
                    HEq f t →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                f
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f left →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f right →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun X_1 h =>
                  Eq.ndrec (motive := fun X_2 =>
                    Y = X_2 →
                      HEq f (WalkingParallelPairHom.id X_2) →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                    (fun h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : X ⟶ Y) →
                          HEq f (WalkingParallelPairHom.id X) →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                X ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h =>
                          (_ : WalkingParallelPairHom.id X = f) ▸
                            (WalkingParallelPairHom.id
                                (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                  (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                        (_ : X = Y) f)
                    h)
                (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
        right ≫
      {
            obj := fun x =>
              op
                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
            map := fun {X Y} f =>
              WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
                X = a →
                  Y = a_1 →
                    HEq f t →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                f
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f left →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f right →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun X_1 h =>
                  Eq.ndrec (motive := fun X_2 =>
                    Y = X_2 →
                      HEq f (WalkingParallelPairHom.id X_2) →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                    (fun h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : X ⟶ Y) →
                          HEq f (WalkingParallelPairHom.id X) →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                X ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h =>
                          (_ : WalkingParallelPairHom.id X = f) ▸
                            (WalkingParallelPairHom.id
                                (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                  (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                        (_ : X = Y) f)
                    h)
                (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
        g
[PROOFSTEP]
cases g
[GOAL]
case id
X✝ Z✝ : WalkingParallelPair
g : X✝ ⟶ Z✝
⊢ {
          obj := fun x =>
            op
              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
          map := fun {X Y} f =>
            WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
              X = a →
                Y = a_1 →
                  HEq f t →
                    ((fun x =>
                          op
                            (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                              (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                        X ⟶
                      (fun x =>
                          op
                            (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                              (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                        Y))
              f
              (fun h =>
                Eq.ndrec (motive := fun {X} =>
                  (f : X ⟶ Y) →
                    Y = one →
                      HEq f left →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                  (fun f h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : zero ⟶ Y) →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              zero ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                  (_ : zero = X) f)
              (fun h =>
                Eq.ndrec (motive := fun {X} =>
                  (f : X ⟶ Y) →
                    Y = one →
                      HEq f right →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                  (fun f h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : zero ⟶ Y) →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              zero ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                  (_ : zero = X) f)
              (fun X_1 h =>
                Eq.ndrec (motive := fun X_2 =>
                  Y = X_2 →
                    HEq f (WalkingParallelPairHom.id X_2) →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                  (fun h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : X ⟶ Y) →
                        HEq f (WalkingParallelPairHom.id X) →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h =>
                        (_ : WalkingParallelPairHom.id X = f) ▸
                          (WalkingParallelPairHom.id
                              (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                      (_ : X = Y) f)
                  h)
              (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
      (WalkingParallelPairHom.id X✝ ≫ g) =
    {
            obj := fun x =>
              op
                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
            map := fun {X Y} f =>
              WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
                X = a →
                  Y = a_1 →
                    HEq f t →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                f
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f left →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f right →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun X_1 h =>
                  Eq.ndrec (motive := fun X_2 =>
                    Y = X_2 →
                      HEq f (WalkingParallelPairHom.id X_2) →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                    (fun h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : X ⟶ Y) →
                          HEq f (WalkingParallelPairHom.id X) →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                X ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h =>
                          (_ : WalkingParallelPairHom.id X = f) ▸
                            (WalkingParallelPairHom.id
                                (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                  (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                        (_ : X = Y) f)
                    h)
                (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
        (WalkingParallelPairHom.id X✝) ≫
      {
            obj := fun x =>
              op
                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
            map := fun {X Y} f =>
              WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
                X = a →
                  Y = a_1 →
                    HEq f t →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                f
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f left →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f right →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun X_1 h =>
                  Eq.ndrec (motive := fun X_2 =>
                    Y = X_2 →
                      HEq f (WalkingParallelPairHom.id X_2) →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                    (fun h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : X ⟶ Y) →
                          HEq f (WalkingParallelPairHom.id X) →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                X ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h =>
                          (_ : WalkingParallelPairHom.id X = f) ▸
                            (WalkingParallelPairHom.id
                                (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                  (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                        (_ : X = Y) f)
                    h)
                (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
        g
[PROOFSTEP]
cases g
[GOAL]
case left.id
⊢ {
          obj := fun x =>
            op
              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
          map := fun {X Y} f =>
            WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
              X = a →
                Y = a_1 →
                  HEq f t →
                    ((fun x =>
                          op
                            (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                              (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                        X ⟶
                      (fun x =>
                          op
                            (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                              (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                        Y))
              f
              (fun h =>
                Eq.ndrec (motive := fun {X} =>
                  (f : X ⟶ Y) →
                    Y = one →
                      HEq f left →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                  (fun f h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : zero ⟶ Y) →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              zero ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                  (_ : zero = X) f)
              (fun h =>
                Eq.ndrec (motive := fun {X} =>
                  (f : X ⟶ Y) →
                    Y = one →
                      HEq f right →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                  (fun f h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : zero ⟶ Y) →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              zero ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                  (_ : zero = X) f)
              (fun X_1 h =>
                Eq.ndrec (motive := fun X_2 =>
                  Y = X_2 →
                    HEq f (WalkingParallelPairHom.id X_2) →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                  (fun h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : X ⟶ Y) →
                        HEq f (WalkingParallelPairHom.id X) →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h =>
                        (_ : WalkingParallelPairHom.id X = f) ▸
                          (WalkingParallelPairHom.id
                              (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                      (_ : X = Y) f)
                  h)
              (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
      (left ≫ WalkingParallelPairHom.id one) =
    {
            obj := fun x =>
              op
                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
            map := fun {X Y} f =>
              WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
                X = a →
                  Y = a_1 →
                    HEq f t →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                f
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f left →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f right →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun X_1 h =>
                  Eq.ndrec (motive := fun X_2 =>
                    Y = X_2 →
                      HEq f (WalkingParallelPairHom.id X_2) →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                    (fun h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : X ⟶ Y) →
                          HEq f (WalkingParallelPairHom.id X) →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                X ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h =>
                          (_ : WalkingParallelPairHom.id X = f) ▸
                            (WalkingParallelPairHom.id
                                (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                  (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                        (_ : X = Y) f)
                    h)
                (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
        left ≫
      {
            obj := fun x =>
              op
                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
            map := fun {X Y} f =>
              WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
                X = a →
                  Y = a_1 →
                    HEq f t →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                f
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f left →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f right →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun X_1 h =>
                  Eq.ndrec (motive := fun X_2 =>
                    Y = X_2 →
                      HEq f (WalkingParallelPairHom.id X_2) →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                    (fun h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : X ⟶ Y) →
                          HEq f (WalkingParallelPairHom.id X) →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                X ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h =>
                          (_ : WalkingParallelPairHom.id X = f) ▸
                            (WalkingParallelPairHom.id
                                (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                  (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                        (_ : X = Y) f)
                    h)
                (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
        (WalkingParallelPairHom.id one)
[PROOFSTEP]
rfl
[GOAL]
case right.id
⊢ {
          obj := fun x =>
            op
              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
          map := fun {X Y} f =>
            WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
              X = a →
                Y = a_1 →
                  HEq f t →
                    ((fun x =>
                          op
                            (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                              (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                        X ⟶
                      (fun x =>
                          op
                            (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                              (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                        Y))
              f
              (fun h =>
                Eq.ndrec (motive := fun {X} =>
                  (f : X ⟶ Y) →
                    Y = one →
                      HEq f left →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                  (fun f h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : zero ⟶ Y) →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              zero ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                  (_ : zero = X) f)
              (fun h =>
                Eq.ndrec (motive := fun {X} =>
                  (f : X ⟶ Y) →
                    Y = one →
                      HEq f right →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                  (fun f h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : zero ⟶ Y) →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              zero ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                  (_ : zero = X) f)
              (fun X_1 h =>
                Eq.ndrec (motive := fun X_2 =>
                  Y = X_2 →
                    HEq f (WalkingParallelPairHom.id X_2) →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                  (fun h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : X ⟶ Y) →
                        HEq f (WalkingParallelPairHom.id X) →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h =>
                        (_ : WalkingParallelPairHom.id X = f) ▸
                          (WalkingParallelPairHom.id
                              (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                      (_ : X = Y) f)
                  h)
              (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
      (right ≫ WalkingParallelPairHom.id one) =
    {
            obj := fun x =>
              op
                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
            map := fun {X Y} f =>
              WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
                X = a →
                  Y = a_1 →
                    HEq f t →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                f
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f left →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f right →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun X_1 h =>
                  Eq.ndrec (motive := fun X_2 =>
                    Y = X_2 →
                      HEq f (WalkingParallelPairHom.id X_2) →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                    (fun h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : X ⟶ Y) →
                          HEq f (WalkingParallelPairHom.id X) →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                X ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h =>
                          (_ : WalkingParallelPairHom.id X = f) ▸
                            (WalkingParallelPairHom.id
                                (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                  (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                        (_ : X = Y) f)
                    h)
                (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
        right ≫
      {
            obj := fun x =>
              op
                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
            map := fun {X Y} f =>
              WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
                X = a →
                  Y = a_1 →
                    HEq f t →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                f
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f left →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f right →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun X_1 h =>
                  Eq.ndrec (motive := fun X_2 =>
                    Y = X_2 →
                      HEq f (WalkingParallelPairHom.id X_2) →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                    (fun h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : X ⟶ Y) →
                          HEq f (WalkingParallelPairHom.id X) →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                X ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h =>
                          (_ : WalkingParallelPairHom.id X = f) ▸
                            (WalkingParallelPairHom.id
                                (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                  (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                        (_ : X = Y) f)
                    h)
                (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
        (WalkingParallelPairHom.id one)
[PROOFSTEP]
rfl
[GOAL]
case id.left
⊢ {
          obj := fun x =>
            op
              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
          map := fun {X Y} f =>
            WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
              X = a →
                Y = a_1 →
                  HEq f t →
                    ((fun x =>
                          op
                            (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                              (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                        X ⟶
                      (fun x =>
                          op
                            (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                              (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                        Y))
              f
              (fun h =>
                Eq.ndrec (motive := fun {X} =>
                  (f : X ⟶ Y) →
                    Y = one →
                      HEq f left →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                  (fun f h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : zero ⟶ Y) →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              zero ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                  (_ : zero = X) f)
              (fun h =>
                Eq.ndrec (motive := fun {X} =>
                  (f : X ⟶ Y) →
                    Y = one →
                      HEq f right →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                  (fun f h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : zero ⟶ Y) →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              zero ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                  (_ : zero = X) f)
              (fun X_1 h =>
                Eq.ndrec (motive := fun X_2 =>
                  Y = X_2 →
                    HEq f (WalkingParallelPairHom.id X_2) →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                  (fun h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : X ⟶ Y) →
                        HEq f (WalkingParallelPairHom.id X) →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h =>
                        (_ : WalkingParallelPairHom.id X = f) ▸
                          (WalkingParallelPairHom.id
                              (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                      (_ : X = Y) f)
                  h)
              (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
      (WalkingParallelPairHom.id zero ≫ left) =
    {
            obj := fun x =>
              op
                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
            map := fun {X Y} f =>
              WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
                X = a →
                  Y = a_1 →
                    HEq f t →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                f
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f left →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f right →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun X_1 h =>
                  Eq.ndrec (motive := fun X_2 =>
                    Y = X_2 →
                      HEq f (WalkingParallelPairHom.id X_2) →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                    (fun h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : X ⟶ Y) →
                          HEq f (WalkingParallelPairHom.id X) →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                X ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h =>
                          (_ : WalkingParallelPairHom.id X = f) ▸
                            (WalkingParallelPairHom.id
                                (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                  (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                        (_ : X = Y) f)
                    h)
                (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
        (WalkingParallelPairHom.id zero) ≫
      {
            obj := fun x =>
              op
                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
            map := fun {X Y} f =>
              WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
                X = a →
                  Y = a_1 →
                    HEq f t →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                f
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f left →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f right →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun X_1 h =>
                  Eq.ndrec (motive := fun X_2 =>
                    Y = X_2 →
                      HEq f (WalkingParallelPairHom.id X_2) →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                    (fun h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : X ⟶ Y) →
                          HEq f (WalkingParallelPairHom.id X) →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                X ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h =>
                          (_ : WalkingParallelPairHom.id X = f) ▸
                            (WalkingParallelPairHom.id
                                (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                  (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                        (_ : X = Y) f)
                    h)
                (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
        left
[PROOFSTEP]
rfl
[GOAL]
case id.right
⊢ {
          obj := fun x =>
            op
              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
          map := fun {X Y} f =>
            WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
              X = a →
                Y = a_1 →
                  HEq f t →
                    ((fun x =>
                          op
                            (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                              (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                        X ⟶
                      (fun x =>
                          op
                            (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                              (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                        Y))
              f
              (fun h =>
                Eq.ndrec (motive := fun {X} =>
                  (f : X ⟶ Y) →
                    Y = one →
                      HEq f left →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                  (fun f h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : zero ⟶ Y) →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              zero ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                  (_ : zero = X) f)
              (fun h =>
                Eq.ndrec (motive := fun {X} =>
                  (f : X ⟶ Y) →
                    Y = one →
                      HEq f right →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                  (fun f h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : zero ⟶ Y) →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              zero ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                  (_ : zero = X) f)
              (fun X_1 h =>
                Eq.ndrec (motive := fun X_2 =>
                  Y = X_2 →
                    HEq f (WalkingParallelPairHom.id X_2) →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                  (fun h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : X ⟶ Y) →
                        HEq f (WalkingParallelPairHom.id X) →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h =>
                        (_ : WalkingParallelPairHom.id X = f) ▸
                          (WalkingParallelPairHom.id
                              (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                      (_ : X = Y) f)
                  h)
              (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
      (WalkingParallelPairHom.id zero ≫ right) =
    {
            obj := fun x =>
              op
                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
            map := fun {X Y} f =>
              WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
                X = a →
                  Y = a_1 →
                    HEq f t →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                f
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f left →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f right →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun X_1 h =>
                  Eq.ndrec (motive := fun X_2 =>
                    Y = X_2 →
                      HEq f (WalkingParallelPairHom.id X_2) →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                    (fun h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : X ⟶ Y) →
                          HEq f (WalkingParallelPairHom.id X) →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                X ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h =>
                          (_ : WalkingParallelPairHom.id X = f) ▸
                            (WalkingParallelPairHom.id
                                (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                  (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                        (_ : X = Y) f)
                    h)
                (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
        (WalkingParallelPairHom.id zero) ≫
      {
            obj := fun x =>
              op
                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
            map := fun {X Y} f =>
              WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
                X = a →
                  Y = a_1 →
                    HEq f t →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                f
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f left →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f right →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun X_1 h =>
                  Eq.ndrec (motive := fun X_2 =>
                    Y = X_2 →
                      HEq f (WalkingParallelPairHom.id X_2) →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                    (fun h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : X ⟶ Y) →
                          HEq f (WalkingParallelPairHom.id X) →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                X ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h =>
                          (_ : WalkingParallelPairHom.id X = f) ▸
                            (WalkingParallelPairHom.id
                                (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                  (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                        (_ : X = Y) f)
                    h)
                (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
        right
[PROOFSTEP]
rfl
[GOAL]
case id.id
X✝ : WalkingParallelPair
⊢ {
          obj := fun x =>
            op
              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
          map := fun {X Y} f =>
            WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
              X = a →
                Y = a_1 →
                  HEq f t →
                    ((fun x =>
                          op
                            (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                              (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                        X ⟶
                      (fun x =>
                          op
                            (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                              (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                        Y))
              f
              (fun h =>
                Eq.ndrec (motive := fun {X} =>
                  (f : X ⟶ Y) →
                    Y = one →
                      HEq f left →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                  (fun f h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : zero ⟶ Y) →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              zero ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                  (_ : zero = X) f)
              (fun h =>
                Eq.ndrec (motive := fun {X} =>
                  (f : X ⟶ Y) →
                    Y = one →
                      HEq f right →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                  (fun f h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : zero ⟶ Y) →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              zero ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                  (_ : zero = X) f)
              (fun X_1 h =>
                Eq.ndrec (motive := fun X_2 =>
                  Y = X_2 →
                    HEq f (WalkingParallelPairHom.id X_2) →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                  (fun h =>
                    Eq.ndrec (motive := fun {Y} =>
                      (f : X ⟶ Y) →
                        HEq f (WalkingParallelPairHom.id X) →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                      (fun f h =>
                        (_ : WalkingParallelPairHom.id X = f) ▸
                          (WalkingParallelPairHom.id
                              (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                      (_ : X = Y) f)
                  h)
              (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
      (WalkingParallelPairHom.id X✝ ≫ WalkingParallelPairHom.id X✝) =
    {
            obj := fun x =>
              op
                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
            map := fun {X Y} f =>
              WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
                X = a →
                  Y = a_1 →
                    HEq f t →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                f
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f left →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f right →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun X_1 h =>
                  Eq.ndrec (motive := fun X_2 =>
                    Y = X_2 →
                      HEq f (WalkingParallelPairHom.id X_2) →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                    (fun h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : X ⟶ Y) →
                          HEq f (WalkingParallelPairHom.id X) →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                X ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h =>
                          (_ : WalkingParallelPairHom.id X = f) ▸
                            (WalkingParallelPairHom.id
                                (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                  (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                        (_ : X = Y) f)
                    h)
                (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
        (WalkingParallelPairHom.id X✝) ≫
      {
            obj := fun x =>
              op
                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)),
            map := fun {X Y} f =>
              WalkingParallelPairHom.casesOn (motive := fun a a_1 t =>
                X = a →
                  Y = a_1 →
                    HEq f t →
                      ((fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          X ⟶
                        (fun x =>
                            op
                              (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                          Y))
                f
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f left →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f left →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : left = f) ▸ left.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun h =>
                  Eq.ndrec (motive := fun {X} =>
                    (f : X ⟶ Y) →
                      Y = one →
                        HEq f right →
                          ((fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              X ⟶
                            (fun x =>
                                op
                                  (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                    (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                              Y))
                    (fun f h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : zero ⟶ Y) →
                          HEq f right →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                zero ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h => (_ : right = f) ▸ right.op) (_ : one = Y) f)
                    (_ : zero = X) f)
                (fun X_1 h =>
                  Eq.ndrec (motive := fun X_2 =>
                    Y = X_2 →
                      HEq f (WalkingParallelPairHom.id X_2) →
                        ((fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            X ⟶
                          (fun x =>
                              op
                                (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                  (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                            Y))
                    (fun h =>
                      Eq.ndrec (motive := fun {Y} =>
                        (f : X ⟶ Y) →
                          HEq f (WalkingParallelPairHom.id X) →
                            ((fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                X ⟶
                              (fun x =>
                                  op
                                    (WalkingParallelPair.casesOn (motive := fun t => x = t → WalkingParallelPair) x
                                      (fun h => (_ : zero = x) ▸ one) (fun h => (_ : one = x) ▸ zero) (_ : x = x)))
                                Y))
                        (fun f h =>
                          (_ : WalkingParallelPairHom.id X = f) ▸
                            (WalkingParallelPairHom.id
                                (WalkingParallelPair.casesOn (motive := fun t => X = t → WalkingParallelPair) X
                                  (fun h => (_ : zero = X) ▸ one) (fun h => (_ : one = X) ▸ zero) (_ : X = X))).op)
                        (_ : X = Y) f)
                    h)
                (_ : X = X) (_ : Y = Y) (_ : HEq f f) }.map
        (WalkingParallelPairHom.id X✝)
[PROOFSTEP]
rfl
[GOAL]
j : WalkingParallelPair
⊢ (𝟭 WalkingParallelPair).obj j = (walkingParallelPairOp ⋙ walkingParallelPairOp.leftOp).obj j
[PROOFSTEP]
cases j
[GOAL]
case zero
⊢ (𝟭 WalkingParallelPair).obj zero = (walkingParallelPairOp ⋙ walkingParallelPairOp.leftOp).obj zero
[PROOFSTEP]
rfl
[GOAL]
case one
⊢ (𝟭 WalkingParallelPair).obj one = (walkingParallelPairOp ⋙ walkingParallelPairOp.leftOp).obj one
[PROOFSTEP]
rfl
[GOAL]
⊢ ∀ {X Y : WalkingParallelPair} (f : X ⟶ Y),
    (𝟭 WalkingParallelPair).map f ≫
        ((fun j =>
              eqToIso
                (_ : (𝟭 WalkingParallelPair).obj j = (walkingParallelPairOp ⋙ walkingParallelPairOp.leftOp).obj j))
            Y).hom =
      ((fun j =>
              eqToIso
                (_ : (𝟭 WalkingParallelPair).obj j = (walkingParallelPairOp ⋙ walkingParallelPairOp.leftOp).obj j))
            X).hom ≫
        (walkingParallelPairOp ⋙ walkingParallelPairOp.leftOp).map f
[PROOFSTEP]
rintro _ _ (_ | _ | _)
[GOAL]
case left
⊢ (𝟭 WalkingParallelPair).map left ≫
      ((fun j =>
            eqToIso (_ : (𝟭 WalkingParallelPair).obj j = (walkingParallelPairOp ⋙ walkingParallelPairOp.leftOp).obj j))
          one).hom =
    ((fun j =>
            eqToIso (_ : (𝟭 WalkingParallelPair).obj j = (walkingParallelPairOp ⋙ walkingParallelPairOp.leftOp).obj j))
          zero).hom ≫
      (walkingParallelPairOp ⋙ walkingParallelPairOp.leftOp).map left
[PROOFSTEP]
simp
[GOAL]
case right
⊢ (𝟭 WalkingParallelPair).map right ≫
      ((fun j =>
            eqToIso (_ : (𝟭 WalkingParallelPair).obj j = (walkingParallelPairOp ⋙ walkingParallelPairOp.leftOp).obj j))
          one).hom =
    ((fun j =>
            eqToIso (_ : (𝟭 WalkingParallelPair).obj j = (walkingParallelPairOp ⋙ walkingParallelPairOp.leftOp).obj j))
          zero).hom ≫
      (walkingParallelPairOp ⋙ walkingParallelPairOp.leftOp).map right
[PROOFSTEP]
simp
[GOAL]
case id
X✝ : WalkingParallelPair
⊢ (𝟭 WalkingParallelPair).map (WalkingParallelPairHom.id X✝) ≫
      ((fun j =>
            eqToIso (_ : (𝟭 WalkingParallelPair).obj j = (walkingParallelPairOp ⋙ walkingParallelPairOp.leftOp).obj j))
          X✝).hom =
    ((fun j =>
            eqToIso (_ : (𝟭 WalkingParallelPair).obj j = (walkingParallelPairOp ⋙ walkingParallelPairOp.leftOp).obj j))
          X✝).hom ≫
      (walkingParallelPairOp ⋙ walkingParallelPairOp.leftOp).map (WalkingParallelPairHom.id X✝)
[PROOFSTEP]
simp
[GOAL]
j : WalkingParallelPairᵒᵖ
⊢ (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j
[PROOFSTEP]
induction' j with X
[GOAL]
case h
X : WalkingParallelPair
⊢ (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj (op X) = (𝟭 WalkingParallelPairᵒᵖ).obj (op X)
[PROOFSTEP]
cases X
[GOAL]
case h.zero
⊢ (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj (op zero) = (𝟭 WalkingParallelPairᵒᵖ).obj (op zero)
[PROOFSTEP]
rfl
[GOAL]
case h.one
⊢ (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj (op one) = (𝟭 WalkingParallelPairᵒᵖ).obj (op one)
[PROOFSTEP]
rfl
[GOAL]
i j : WalkingParallelPairᵒᵖ
f : i ⟶ j
⊢ (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).map f ≫
      ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          j).hom =
    ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          i).hom ≫
      (𝟭 WalkingParallelPairᵒᵖ).map f
[PROOFSTEP]
induction' i with i
[GOAL]
case h
i✝ j : WalkingParallelPairᵒᵖ
f✝ : i✝ ⟶ j
i : WalkingParallelPair
f : op i ⟶ j
⊢ (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).map f ≫
      ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          j).hom =
    ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op i)).hom ≫
      (𝟭 WalkingParallelPairᵒᵖ).map f
[PROOFSTEP]
induction' j with j
[GOAL]
case h.h
i✝ j✝ : WalkingParallelPairᵒᵖ
f✝² : i✝ ⟶ j✝
i : WalkingParallelPair
f✝¹ : op i ⟶ j✝
j : WalkingParallelPair
f✝ : i✝ ⟶ op j
f : op i ⟶ op j
⊢ (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).map f ≫
      ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op j)).hom =
    ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op i)).hom ≫
      (𝟭 WalkingParallelPairᵒᵖ).map f
[PROOFSTEP]
let g := f.unop
[GOAL]
case h.h
i✝ j✝ : WalkingParallelPairᵒᵖ
f✝² : i✝ ⟶ j✝
i : WalkingParallelPair
f✝¹ : op i ⟶ j✝
j : WalkingParallelPair
f✝ : i✝ ⟶ op j
f : op i ⟶ op j
g : (op j).unop ⟶ (op i).unop := f.unop
⊢ (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).map f ≫
      ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op j)).hom =
    ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op i)).hom ≫
      (𝟭 WalkingParallelPairᵒᵖ).map f
[PROOFSTEP]
have : f = g.op := rfl
[GOAL]
case h.h
i✝ j✝ : WalkingParallelPairᵒᵖ
f✝² : i✝ ⟶ j✝
i : WalkingParallelPair
f✝¹ : op i ⟶ j✝
j : WalkingParallelPair
f✝ : i✝ ⟶ op j
f : op i ⟶ op j
g : (op j).unop ⟶ (op i).unop := f.unop
this : f = g.op
⊢ (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).map f ≫
      ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op j)).hom =
    ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op i)).hom ≫
      (𝟭 WalkingParallelPairᵒᵖ).map f
[PROOFSTEP]
rw [this]
[GOAL]
case h.h
i✝ j✝ : WalkingParallelPairᵒᵖ
f✝² : i✝ ⟶ j✝
i : WalkingParallelPair
f✝¹ : op i ⟶ j✝
j : WalkingParallelPair
f✝ : i✝ ⟶ op j
f : op i ⟶ op j
g : (op j).unop ⟶ (op i).unop := f.unop
this : f = g.op
⊢ (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).map g.op ≫
      ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op j)).hom =
    ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op i)).hom ≫
      (𝟭 WalkingParallelPairᵒᵖ).map g.op
[PROOFSTEP]
cases i
[GOAL]
case h.h.zero
i j✝ : WalkingParallelPairᵒᵖ
f✝² : i ⟶ j✝
j : WalkingParallelPair
f✝¹ : i ⟶ op j
f✝ : op zero ⟶ j✝
f : op zero ⟶ op j
g : (op j).unop ⟶ (op zero).unop := f.unop
this : f = g.op
⊢ (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).map g.op ≫
      ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op j)).hom =
    ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op zero)).hom ≫
      (𝟭 WalkingParallelPairᵒᵖ).map g.op
[PROOFSTEP]
cases j
[GOAL]
case h.h.one
i j✝ : WalkingParallelPairᵒᵖ
f✝² : i ⟶ j✝
j : WalkingParallelPair
f✝¹ : i ⟶ op j
f✝ : op one ⟶ j✝
f : op one ⟶ op j
g : (op j).unop ⟶ (op one).unop := f.unop
this : f = g.op
⊢ (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).map g.op ≫
      ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op j)).hom =
    ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op one)).hom ≫
      (𝟭 WalkingParallelPairᵒᵖ).map g.op
[PROOFSTEP]
cases j
[GOAL]
case h.h.zero.zero
i j : WalkingParallelPairᵒᵖ
f✝² : i ⟶ j
f✝¹ : op zero ⟶ j
f✝ : i ⟶ op zero
f : op zero ⟶ op zero
g : (op zero).unop ⟶ (op zero).unop := f.unop
this : f = g.op
⊢ (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).map g.op ≫
      ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op zero)).hom =
    ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op zero)).hom ≫
      (𝟭 WalkingParallelPairᵒᵖ).map g.op
[PROOFSTEP]
cases g
[GOAL]
case h.h.zero.one
i j : WalkingParallelPairᵒᵖ
f✝² : i ⟶ j
f✝¹ : op zero ⟶ j
f✝ : i ⟶ op one
f : op zero ⟶ op one
g : (op one).unop ⟶ (op zero).unop := f.unop
this : f = g.op
⊢ (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).map g.op ≫
      ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op one)).hom =
    ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op zero)).hom ≫
      (𝟭 WalkingParallelPairᵒᵖ).map g.op
[PROOFSTEP]
cases g
[GOAL]
case h.h.one.zero
i j : WalkingParallelPairᵒᵖ
f✝² : i ⟶ j
f✝¹ : op one ⟶ j
f✝ : i ⟶ op zero
f : op one ⟶ op zero
g : (op zero).unop ⟶ (op one).unop := f.unop
this : f = g.op
⊢ (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).map g.op ≫
      ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op zero)).hom =
    ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op one)).hom ≫
      (𝟭 WalkingParallelPairᵒᵖ).map g.op
[PROOFSTEP]
cases g
[GOAL]
case h.h.one.one
i j : WalkingParallelPairᵒᵖ
f✝² : i ⟶ j
f✝¹ : op one ⟶ j
f✝ : i ⟶ op one
f : op one ⟶ op one
g : (op one).unop ⟶ (op one).unop := f.unop
this : f = g.op
⊢ (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).map g.op ≫
      ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op one)).hom =
    ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op one)).hom ≫
      (𝟭 WalkingParallelPairᵒᵖ).map g.op
[PROOFSTEP]
cases g
[GOAL]
case h.h.zero.zero.id
i j : WalkingParallelPairᵒᵖ
f✝² : i ⟶ j
f✝¹ : op zero ⟶ j
f✝ : i ⟶ op zero
f : op zero ⟶ op zero
g : (op zero).unop ⟶ (op zero).unop := f.unop
this : f = g.op
⊢ (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).map (WalkingParallelPairHom.id (op zero).unop).op ≫
      ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op zero)).hom =
    ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op zero)).hom ≫
      (𝟭 WalkingParallelPairᵒᵖ).map (WalkingParallelPairHom.id (op zero).unop).op
[PROOFSTEP]
rfl
[GOAL]
case h.h.one.zero.left
i j : WalkingParallelPairᵒᵖ
f✝² : i ⟶ j
f✝¹ : op one ⟶ j
f✝ : i ⟶ op zero
f : op one ⟶ op zero
g : (op zero).unop ⟶ (op one).unop := f.unop
this : f = g.op
⊢ (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).map left.op ≫
      ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op zero)).hom =
    ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op one)).hom ≫
      (𝟭 WalkingParallelPairᵒᵖ).map left.op
[PROOFSTEP]
rfl
[GOAL]
case h.h.one.zero.right
i j : WalkingParallelPairᵒᵖ
f✝² : i ⟶ j
f✝¹ : op one ⟶ j
f✝ : i ⟶ op zero
f : op one ⟶ op zero
g : (op zero).unop ⟶ (op one).unop := f.unop
this : f = g.op
⊢ (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).map right.op ≫
      ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op zero)).hom =
    ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op one)).hom ≫
      (𝟭 WalkingParallelPairᵒᵖ).map right.op
[PROOFSTEP]
rfl
[GOAL]
case h.h.one.one.id
i j : WalkingParallelPairᵒᵖ
f✝² : i ⟶ j
f✝¹ : op one ⟶ j
f✝ : i ⟶ op one
f : op one ⟶ op one
g : (op one).unop ⟶ (op one).unop := f.unop
this : f = g.op
⊢ (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).map (WalkingParallelPairHom.id (op one).unop).op ≫
      ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op one)).hom =
    ((fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j))
          (op one)).hom ≫
      (𝟭 WalkingParallelPairᵒᵖ).map (WalkingParallelPairHom.id (op one).unop).op
[PROOFSTEP]
rfl
[GOAL]
j : WalkingParallelPair
⊢ walkingParallelPairOp.map
        (NatTrans.app
          (NatIso.ofComponents fun j =>
              eqToIso
                (_ : (𝟭 WalkingParallelPair).obj j = (walkingParallelPairOp ⋙ walkingParallelPairOp.leftOp).obj j)).hom
          j) ≫
      NatTrans.app
        (NatIso.ofComponents fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j)).hom
        (walkingParallelPairOp.obj j) =
    𝟙 (walkingParallelPairOp.obj j)
[PROOFSTEP]
cases j
[GOAL]
case zero
⊢ walkingParallelPairOp.map
        (NatTrans.app
          (NatIso.ofComponents fun j =>
              eqToIso
                (_ : (𝟭 WalkingParallelPair).obj j = (walkingParallelPairOp ⋙ walkingParallelPairOp.leftOp).obj j)).hom
          zero) ≫
      NatTrans.app
        (NatIso.ofComponents fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j)).hom
        (walkingParallelPairOp.obj zero) =
    𝟙 (walkingParallelPairOp.obj zero)
[PROOFSTEP]
rfl
[GOAL]
case one
⊢ walkingParallelPairOp.map
        (NatTrans.app
          (NatIso.ofComponents fun j =>
              eqToIso
                (_ : (𝟭 WalkingParallelPair).obj j = (walkingParallelPairOp ⋙ walkingParallelPairOp.leftOp).obj j)).hom
          one) ≫
      NatTrans.app
        (NatIso.ofComponents fun j =>
            eqToIso
              (_ : (walkingParallelPairOp.leftOp ⋙ walkingParallelPairOp).obj j = (𝟭 WalkingParallelPairᵒᵖ).obj j)).hom
        (walkingParallelPairOp.obj one) =
    𝟙 (walkingParallelPairOp.obj one)
[PROOFSTEP]
rfl
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
⊢ ∀ {X_1 Y_1 Z : WalkingParallelPair} (f_1 : X_1 ⟶ Y_1) (g_1 : Y_1 ⟶ Z),
    {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_2 Y_2} h =>
              match X_2, Y_2, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g }.map
        (f_1 ≫ g_1) =
      {
              obj := fun x =>
                match x with
                | zero => X
                | one => Y,
              map := fun {X_2 Y_2} h =>
                match X_2, Y_2, h with
                | x, .(x), WalkingParallelPairHom.id .(x) =>
                  𝟙
                    ((fun x =>
                        match x with
                        | zero => X
                        | one => Y)
                      x)
                | .(zero), .(one), left => f
                | .(zero), .(one), right => g }.map
          f_1 ≫
        {
              obj := fun x =>
                match x with
                | zero => X
                | one => Y,
              map := fun {X_2 Y_2} h =>
                match X_2, Y_2, h with
                | x, .(x), WalkingParallelPairHom.id .(x) =>
                  𝟙
                    ((fun x =>
                        match x with
                        | zero => X
                        | one => Y)
                      x)
                | .(zero), .(one), left => f
                | .(zero), .(one), right => g }.map
          g_1
[PROOFSTEP]
rintro _ _ _ ⟨⟩ g
[GOAL]
case left
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g✝ : X ⟶ Y
Z✝ : WalkingParallelPair
g : one ⟶ Z✝
⊢ {
          obj := fun x =>
            match x with
            | zero => X
            | one => Y,
          map := fun {X_1 Y_1} h =>
            match X_1, Y_1, h with
            | x, .(x), WalkingParallelPairHom.id .(x) =>
              𝟙
                ((fun x =>
                    match x with
                    | zero => X
                    | one => Y)
                  x)
            | .(zero), .(one), left => f
            | .(zero), .(one), right => g✝ }.map
      (left ≫ g) =
    {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g✝ }.map
        left ≫
      {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g✝ }.map
        g
[PROOFSTEP]
cases g
[GOAL]
case right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g✝ : X ⟶ Y
Z✝ : WalkingParallelPair
g : one ⟶ Z✝
⊢ {
          obj := fun x =>
            match x with
            | zero => X
            | one => Y,
          map := fun {X_1 Y_1} h =>
            match X_1, Y_1, h with
            | x, .(x), WalkingParallelPairHom.id .(x) =>
              𝟙
                ((fun x =>
                    match x with
                    | zero => X
                    | one => Y)
                  x)
            | .(zero), .(one), left => f
            | .(zero), .(one), right => g✝ }.map
      (right ≫ g) =
    {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g✝ }.map
        right ≫
      {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g✝ }.map
        g
[PROOFSTEP]
cases g
[GOAL]
case id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g✝ : X ⟶ Y
X✝ Z✝ : WalkingParallelPair
g : X✝ ⟶ Z✝
⊢ {
          obj := fun x =>
            match x with
            | zero => X
            | one => Y,
          map := fun {X_1 Y_1} h =>
            match X_1, Y_1, h with
            | x, .(x), WalkingParallelPairHom.id .(x) =>
              𝟙
                ((fun x =>
                    match x with
                    | zero => X
                    | one => Y)
                  x)
            | .(zero), .(one), left => f
            | .(zero), .(one), right => g✝ }.map
      (WalkingParallelPairHom.id X✝ ≫ g) =
    {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g✝ }.map
        (WalkingParallelPairHom.id X✝) ≫
      {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g✝ }.map
        g
[PROOFSTEP]
cases g
[GOAL]
case left.id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
⊢ {
          obj := fun x =>
            match x with
            | zero => X
            | one => Y,
          map := fun {X_1 Y_1} h =>
            match X_1, Y_1, h with
            | x, .(x), WalkingParallelPairHom.id .(x) =>
              𝟙
                ((fun x =>
                    match x with
                    | zero => X
                    | one => Y)
                  x)
            | .(zero), .(one), left => f
            | .(zero), .(one), right => g }.map
      (left ≫ WalkingParallelPairHom.id one) =
    {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g }.map
        left ≫
      {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g }.map
        (WalkingParallelPairHom.id one)
[PROOFSTEP]
{dsimp; simp
}
[GOAL]
case left.id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
⊢ {
          obj := fun x =>
            match x with
            | zero => X
            | one => Y,
          map := fun {X_1 Y_1} h =>
            match X_1, Y_1, h with
            | x, .(x), WalkingParallelPairHom.id .(x) =>
              𝟙
                ((fun x =>
                    match x with
                    | zero => X
                    | one => Y)
                  x)
            | .(zero), .(one), left => f
            | .(zero), .(one), right => g }.map
      (left ≫ WalkingParallelPairHom.id one) =
    {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g }.map
        left ≫
      {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g }.map
        (WalkingParallelPairHom.id one)
[PROOFSTEP]
dsimp
[GOAL]
case left.id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
⊢ (match zero, one, left ≫ 𝟙 one with
    | x, .(x), WalkingParallelPairHom.id .(x) =>
      𝟙
        (match x with
        | zero => X
        | one => Y)
    | .(zero), .(one), left => f
    | .(zero), .(one), right => g) =
    f ≫ 𝟙 Y
[PROOFSTEP]
simp
[GOAL]
case right.id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
⊢ {
          obj := fun x =>
            match x with
            | zero => X
            | one => Y,
          map := fun {X_1 Y_1} h =>
            match X_1, Y_1, h with
            | x, .(x), WalkingParallelPairHom.id .(x) =>
              𝟙
                ((fun x =>
                    match x with
                    | zero => X
                    | one => Y)
                  x)
            | .(zero), .(one), left => f
            | .(zero), .(one), right => g }.map
      (right ≫ WalkingParallelPairHom.id one) =
    {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g }.map
        right ≫
      {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g }.map
        (WalkingParallelPairHom.id one)
[PROOFSTEP]
{dsimp; simp
}
[GOAL]
case right.id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
⊢ {
          obj := fun x =>
            match x with
            | zero => X
            | one => Y,
          map := fun {X_1 Y_1} h =>
            match X_1, Y_1, h with
            | x, .(x), WalkingParallelPairHom.id .(x) =>
              𝟙
                ((fun x =>
                    match x with
                    | zero => X
                    | one => Y)
                  x)
            | .(zero), .(one), left => f
            | .(zero), .(one), right => g }.map
      (right ≫ WalkingParallelPairHom.id one) =
    {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g }.map
        right ≫
      {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g }.map
        (WalkingParallelPairHom.id one)
[PROOFSTEP]
dsimp
[GOAL]
case right.id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
⊢ (match zero, one, right ≫ 𝟙 one with
    | x, .(x), WalkingParallelPairHom.id .(x) =>
      𝟙
        (match x with
        | zero => X
        | one => Y)
    | .(zero), .(one), left => f
    | .(zero), .(one), right => g) =
    g ≫ 𝟙 Y
[PROOFSTEP]
simp
[GOAL]
case id.left
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
⊢ {
          obj := fun x =>
            match x with
            | zero => X
            | one => Y,
          map := fun {X_1 Y_1} h =>
            match X_1, Y_1, h with
            | x, .(x), WalkingParallelPairHom.id .(x) =>
              𝟙
                ((fun x =>
                    match x with
                    | zero => X
                    | one => Y)
                  x)
            | .(zero), .(one), left => f
            | .(zero), .(one), right => g }.map
      (WalkingParallelPairHom.id zero ≫ left) =
    {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g }.map
        (WalkingParallelPairHom.id zero) ≫
      {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g }.map
        left
[PROOFSTEP]
{dsimp; simp
}
[GOAL]
case id.left
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
⊢ {
          obj := fun x =>
            match x with
            | zero => X
            | one => Y,
          map := fun {X_1 Y_1} h =>
            match X_1, Y_1, h with
            | x, .(x), WalkingParallelPairHom.id .(x) =>
              𝟙
                ((fun x =>
                    match x with
                    | zero => X
                    | one => Y)
                  x)
            | .(zero), .(one), left => f
            | .(zero), .(one), right => g }.map
      (WalkingParallelPairHom.id zero ≫ left) =
    {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g }.map
        (WalkingParallelPairHom.id zero) ≫
      {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g }.map
        left
[PROOFSTEP]
dsimp
[GOAL]
case id.left
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
⊢ (match zero, one, 𝟙 zero ≫ left with
    | x, .(x), WalkingParallelPairHom.id .(x) =>
      𝟙
        (match x with
        | zero => X
        | one => Y)
    | .(zero), .(one), left => f
    | .(zero), .(one), right => g) =
    𝟙 X ≫ f
[PROOFSTEP]
simp
[GOAL]
case id.right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
⊢ {
          obj := fun x =>
            match x with
            | zero => X
            | one => Y,
          map := fun {X_1 Y_1} h =>
            match X_1, Y_1, h with
            | x, .(x), WalkingParallelPairHom.id .(x) =>
              𝟙
                ((fun x =>
                    match x with
                    | zero => X
                    | one => Y)
                  x)
            | .(zero), .(one), left => f
            | .(zero), .(one), right => g }.map
      (WalkingParallelPairHom.id zero ≫ right) =
    {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g }.map
        (WalkingParallelPairHom.id zero) ≫
      {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g }.map
        right
[PROOFSTEP]
{dsimp; simp
}
[GOAL]
case id.right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
⊢ {
          obj := fun x =>
            match x with
            | zero => X
            | one => Y,
          map := fun {X_1 Y_1} h =>
            match X_1, Y_1, h with
            | x, .(x), WalkingParallelPairHom.id .(x) =>
              𝟙
                ((fun x =>
                    match x with
                    | zero => X
                    | one => Y)
                  x)
            | .(zero), .(one), left => f
            | .(zero), .(one), right => g }.map
      (WalkingParallelPairHom.id zero ≫ right) =
    {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g }.map
        (WalkingParallelPairHom.id zero) ≫
      {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g }.map
        right
[PROOFSTEP]
dsimp
[GOAL]
case id.right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
⊢ (match zero, one, 𝟙 zero ≫ right with
    | x, .(x), WalkingParallelPairHom.id .(x) =>
      𝟙
        (match x with
        | zero => X
        | one => Y)
    | .(zero), .(one), left => f
    | .(zero), .(one), right => g) =
    𝟙 X ≫ g
[PROOFSTEP]
simp
[GOAL]
case id.id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
X✝ : WalkingParallelPair
⊢ {
          obj := fun x =>
            match x with
            | zero => X
            | one => Y,
          map := fun {X_1 Y_1} h =>
            match X_1, Y_1, h with
            | x, .(x), WalkingParallelPairHom.id .(x) =>
              𝟙
                ((fun x =>
                    match x with
                    | zero => X
                    | one => Y)
                  x)
            | .(zero), .(one), left => f
            | .(zero), .(one), right => g }.map
      (WalkingParallelPairHom.id X✝ ≫ WalkingParallelPairHom.id X✝) =
    {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g }.map
        (WalkingParallelPairHom.id X✝) ≫
      {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g }.map
        (WalkingParallelPairHom.id X✝)
[PROOFSTEP]
{dsimp; simp
}
[GOAL]
case id.id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
X✝ : WalkingParallelPair
⊢ {
          obj := fun x =>
            match x with
            | zero => X
            | one => Y,
          map := fun {X_1 Y_1} h =>
            match X_1, Y_1, h with
            | x, .(x), WalkingParallelPairHom.id .(x) =>
              𝟙
                ((fun x =>
                    match x with
                    | zero => X
                    | one => Y)
                  x)
            | .(zero), .(one), left => f
            | .(zero), .(one), right => g }.map
      (WalkingParallelPairHom.id X✝ ≫ WalkingParallelPairHom.id X✝) =
    {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g }.map
        (WalkingParallelPairHom.id X✝) ≫
      {
            obj := fun x =>
              match x with
              | zero => X
              | one => Y,
            map := fun {X_1 Y_1} h =>
              match X_1, Y_1, h with
              | x, .(x), WalkingParallelPairHom.id .(x) =>
                𝟙
                  ((fun x =>
                      match x with
                      | zero => X
                      | one => Y)
                    x)
              | .(zero), .(one), left => f
              | .(zero), .(one), right => g }.map
        (WalkingParallelPairHom.id X✝)
[PROOFSTEP]
dsimp
[GOAL]
case id.id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
X✝ : WalkingParallelPair
⊢ (match X✝, X✝, 𝟙 X✝ ≫ 𝟙 X✝ with
    | x, .(x), WalkingParallelPairHom.id .(x) =>
      𝟙
        (match x with
        | zero => X
        | one => Y)
    | .(zero), .(one), left => f
    | .(zero), .(one), right => g) =
    𝟙
        (match X✝ with
        | zero => X
        | one => Y) ≫
      𝟙
        (match X✝ with
        | zero => X
        | one => Y)
[PROOFSTEP]
simp
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
F : WalkingParallelPair ⥤ C
j : WalkingParallelPair
⊢ (parallelPair (F.map left) (F.map right)).obj j = F.obj j
[PROOFSTEP]
cases j
[GOAL]
case zero
C : Type u
inst✝ : Category.{v, u} C
X Y : C
F : WalkingParallelPair ⥤ C
⊢ (parallelPair (F.map left) (F.map right)).obj zero = F.obj zero
[PROOFSTEP]
rfl
[GOAL]
case one
C : Type u
inst✝ : Category.{v, u} C
X Y : C
F : WalkingParallelPair ⥤ C
⊢ (parallelPair (F.map left) (F.map right)).obj one = F.obj one
[PROOFSTEP]
rfl
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
F : WalkingParallelPair ⥤ C
j : WalkingParallelPair
⊢ F.obj j = (parallelPair (F.map left) (F.map right)).obj j
[PROOFSTEP]
cases j
[GOAL]
case zero
C : Type u
inst✝ : Category.{v, u} C
X Y : C
F : WalkingParallelPair ⥤ C
⊢ F.obj zero = (parallelPair (F.map left) (F.map right)).obj zero
[PROOFSTEP]
rfl
[GOAL]
case one
C : Type u
inst✝ : Category.{v, u} C
X Y : C
F : WalkingParallelPair ⥤ C
⊢ F.obj one = (parallelPair (F.map left) (F.map right)).obj one
[PROOFSTEP]
rfl
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
F : WalkingParallelPair ⥤ C
⊢ ∀ {X Y : WalkingParallelPair} (f : X ⟶ Y),
    F.map f ≫ ((fun j => eqToIso (_ : F.obj j = (parallelPair (F.map left) (F.map right)).obj j)) Y).hom =
      ((fun j => eqToIso (_ : F.obj j = (parallelPair (F.map left) (F.map right)).obj j)) X).hom ≫
        (parallelPair (F.map left) (F.map right)).map f
[PROOFSTEP]
rintro _ _ (_ | _ | _)
[GOAL]
case left
C : Type u
inst✝ : Category.{v, u} C
X Y : C
F : WalkingParallelPair ⥤ C
⊢ F.map left ≫ ((fun j => eqToIso (_ : F.obj j = (parallelPair (F.map left) (F.map right)).obj j)) one).hom =
    ((fun j => eqToIso (_ : F.obj j = (parallelPair (F.map left) (F.map right)).obj j)) zero).hom ≫
      (parallelPair (F.map left) (F.map right)).map left
[PROOFSTEP]
simp
[GOAL]
case right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
F : WalkingParallelPair ⥤ C
⊢ F.map right ≫ ((fun j => eqToIso (_ : F.obj j = (parallelPair (F.map left) (F.map right)).obj j)) one).hom =
    ((fun j => eqToIso (_ : F.obj j = (parallelPair (F.map left) (F.map right)).obj j)) zero).hom ≫
      (parallelPair (F.map left) (F.map right)).map right
[PROOFSTEP]
simp
[GOAL]
case id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
F : WalkingParallelPair ⥤ C
X✝ : WalkingParallelPair
⊢ F.map (WalkingParallelPairHom.id X✝) ≫
      ((fun j => eqToIso (_ : F.obj j = (parallelPair (F.map left) (F.map right)).obj j)) X✝).hom =
    ((fun j => eqToIso (_ : F.obj j = (parallelPair (F.map left) (F.map right)).obj j)) X✝).hom ≫
      (parallelPair (F.map left) (F.map right)).map (WalkingParallelPairHom.id X✝)
[PROOFSTEP]
simp
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y X' Y' : C
f g : X ⟶ Y
f' g' : X' ⟶ Y'
p : X ⟶ X'
q : Y ⟶ Y'
wf : f ≫ q = p ≫ f'
wg : g ≫ q = p ≫ g'
⊢ ∀ ⦃X_1 Y_1 : WalkingParallelPair⦄ (f_1 : X_1 ⟶ Y_1),
    (parallelPair f g).map f_1 ≫
        (fun j =>
            match j with
            | zero => p
            | one => q)
          Y_1 =
      (fun j =>
            match j with
            | zero => p
            | one => q)
          X_1 ≫
        (parallelPair f' g').map f_1
[PROOFSTEP]
rintro _ _ ⟨⟩
[GOAL]
case left
C : Type u
inst✝ : Category.{v, u} C
X Y X' Y' : C
f g : X ⟶ Y
f' g' : X' ⟶ Y'
p : X ⟶ X'
q : Y ⟶ Y'
wf : f ≫ q = p ≫ f'
wg : g ≫ q = p ≫ g'
⊢ (parallelPair f g).map left ≫
      (fun j =>
          match j with
          | zero => p
          | one => q)
        one =
    (fun j =>
          match j with
          | zero => p
          | one => q)
        zero ≫
      (parallelPair f' g').map left
[PROOFSTEP]
{dsimp; simp [wf, wg]
}
[GOAL]
case left
C : Type u
inst✝ : Category.{v, u} C
X Y X' Y' : C
f g : X ⟶ Y
f' g' : X' ⟶ Y'
p : X ⟶ X'
q : Y ⟶ Y'
wf : f ≫ q = p ≫ f'
wg : g ≫ q = p ≫ g'
⊢ (parallelPair f g).map left ≫
      (fun j =>
          match j with
          | zero => p
          | one => q)
        one =
    (fun j =>
          match j with
          | zero => p
          | one => q)
        zero ≫
      (parallelPair f' g').map left
[PROOFSTEP]
dsimp
[GOAL]
case left
C : Type u
inst✝ : Category.{v, u} C
X Y X' Y' : C
f g : X ⟶ Y
f' g' : X' ⟶ Y'
p : X ⟶ X'
q : Y ⟶ Y'
wf : f ≫ q = p ≫ f'
wg : g ≫ q = p ≫ g'
⊢ f ≫ q = p ≫ f'
[PROOFSTEP]
simp [wf, wg]
[GOAL]
case right
C : Type u
inst✝ : Category.{v, u} C
X Y X' Y' : C
f g : X ⟶ Y
f' g' : X' ⟶ Y'
p : X ⟶ X'
q : Y ⟶ Y'
wf : f ≫ q = p ≫ f'
wg : g ≫ q = p ≫ g'
⊢ (parallelPair f g).map right ≫
      (fun j =>
          match j with
          | zero => p
          | one => q)
        one =
    (fun j =>
          match j with
          | zero => p
          | one => q)
        zero ≫
      (parallelPair f' g').map right
[PROOFSTEP]
{dsimp; simp [wf, wg]
}
[GOAL]
case right
C : Type u
inst✝ : Category.{v, u} C
X Y X' Y' : C
f g : X ⟶ Y
f' g' : X' ⟶ Y'
p : X ⟶ X'
q : Y ⟶ Y'
wf : f ≫ q = p ≫ f'
wg : g ≫ q = p ≫ g'
⊢ (parallelPair f g).map right ≫
      (fun j =>
          match j with
          | zero => p
          | one => q)
        one =
    (fun j =>
          match j with
          | zero => p
          | one => q)
        zero ≫
      (parallelPair f' g').map right
[PROOFSTEP]
dsimp
[GOAL]
case right
C : Type u
inst✝ : Category.{v, u} C
X Y X' Y' : C
f g : X ⟶ Y
f' g' : X' ⟶ Y'
p : X ⟶ X'
q : Y ⟶ Y'
wf : f ≫ q = p ≫ f'
wg : g ≫ q = p ≫ g'
⊢ g ≫ q = p ≫ g'
[PROOFSTEP]
simp [wf, wg]
[GOAL]
case id
C : Type u
inst✝ : Category.{v, u} C
X Y X' Y' : C
f g : X ⟶ Y
f' g' : X' ⟶ Y'
p : X ⟶ X'
q : Y ⟶ Y'
wf : f ≫ q = p ≫ f'
wg : g ≫ q = p ≫ g'
X✝ : WalkingParallelPair
⊢ (parallelPair f g).map (WalkingParallelPairHom.id X✝) ≫
      (fun j =>
          match j with
          | zero => p
          | one => q)
        X✝ =
    (fun j =>
          match j with
          | zero => p
          | one => q)
        X✝ ≫
      (parallelPair f' g').map (WalkingParallelPairHom.id X✝)
[PROOFSTEP]
{dsimp; simp [wf, wg]
}
[GOAL]
case id
C : Type u
inst✝ : Category.{v, u} C
X Y X' Y' : C
f g : X ⟶ Y
f' g' : X' ⟶ Y'
p : X ⟶ X'
q : Y ⟶ Y'
wf : f ≫ q = p ≫ f'
wg : g ≫ q = p ≫ g'
X✝ : WalkingParallelPair
⊢ (parallelPair f g).map (WalkingParallelPairHom.id X✝) ≫
      (fun j =>
          match j with
          | zero => p
          | one => q)
        X✝ =
    (fun j =>
          match j with
          | zero => p
          | one => q)
        X✝ ≫
      (parallelPair f' g').map (WalkingParallelPairHom.id X✝)
[PROOFSTEP]
dsimp
[GOAL]
case id
C : Type u
inst✝ : Category.{v, u} C
X Y X' Y' : C
f g : X ⟶ Y
f' g' : X' ⟶ Y'
p : X ⟶ X'
q : Y ⟶ Y'
wf : f ≫ q = p ≫ f'
wg : g ≫ q = p ≫ g'
X✝ : WalkingParallelPair
⊢ ((parallelPair f g).map (𝟙 X✝) ≫
      match X✝ with
      | zero => p
      | one => q) =
    (match X✝ with
      | zero => p
      | one => q) ≫
      (parallelPair f' g').map (𝟙 X✝)
[PROOFSTEP]
simp [wf, wg]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
F G : WalkingParallelPair ⥤ C
zero : F.obj CategoryTheory.Limits.WalkingParallelPair.zero ≅ G.obj CategoryTheory.Limits.WalkingParallelPair.zero
one : F.obj CategoryTheory.Limits.WalkingParallelPair.one ≅ G.obj CategoryTheory.Limits.WalkingParallelPair.one
left :
  F.map CategoryTheory.Limits.WalkingParallelPairHom.left ≫ one.hom =
    zero.hom ≫ G.map CategoryTheory.Limits.WalkingParallelPairHom.left
right :
  F.map CategoryTheory.Limits.WalkingParallelPairHom.right ≫ one.hom =
    zero.hom ≫ G.map CategoryTheory.Limits.WalkingParallelPairHom.right
⊢ (X : WalkingParallelPair) → F.obj X ≅ G.obj X
[PROOFSTEP]
rintro ⟨j⟩
[GOAL]
case zero
C : Type u
inst✝ : Category.{v, u} C
X Y : C
F G : WalkingParallelPair ⥤ C
zero : F.obj CategoryTheory.Limits.WalkingParallelPair.zero ≅ G.obj CategoryTheory.Limits.WalkingParallelPair.zero
one : F.obj CategoryTheory.Limits.WalkingParallelPair.one ≅ G.obj CategoryTheory.Limits.WalkingParallelPair.one
left :
  F.map CategoryTheory.Limits.WalkingParallelPairHom.left ≫ one.hom =
    zero.hom ≫ G.map CategoryTheory.Limits.WalkingParallelPairHom.left
right :
  F.map CategoryTheory.Limits.WalkingParallelPairHom.right ≫ one.hom =
    zero.hom ≫ G.map CategoryTheory.Limits.WalkingParallelPairHom.right
⊢ F.obj CategoryTheory.Limits.WalkingParallelPair.zero ≅ G.obj CategoryTheory.Limits.WalkingParallelPair.zero
case one
C : Type u
inst✝ : Category.{v, u} C
X Y : C
F G : WalkingParallelPair ⥤ C
zero : F.obj CategoryTheory.Limits.WalkingParallelPair.zero ≅ G.obj CategoryTheory.Limits.WalkingParallelPair.zero
one : F.obj CategoryTheory.Limits.WalkingParallelPair.one ≅ G.obj CategoryTheory.Limits.WalkingParallelPair.one
left :
  F.map CategoryTheory.Limits.WalkingParallelPairHom.left ≫ one.hom =
    zero.hom ≫ G.map CategoryTheory.Limits.WalkingParallelPairHom.left
right :
  F.map CategoryTheory.Limits.WalkingParallelPairHom.right ≫ one.hom =
    zero.hom ≫ G.map CategoryTheory.Limits.WalkingParallelPairHom.right
⊢ F.obj CategoryTheory.Limits.WalkingParallelPair.one ≅ G.obj CategoryTheory.Limits.WalkingParallelPair.one
[PROOFSTEP]
exacts [zero, one]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
F G : WalkingParallelPair ⥤ C
zero : F.obj CategoryTheory.Limits.WalkingParallelPair.zero ≅ G.obj CategoryTheory.Limits.WalkingParallelPair.zero
one : F.obj CategoryTheory.Limits.WalkingParallelPair.one ≅ G.obj CategoryTheory.Limits.WalkingParallelPair.one
left :
  F.map CategoryTheory.Limits.WalkingParallelPairHom.left ≫ one.hom =
    zero.hom ≫ G.map CategoryTheory.Limits.WalkingParallelPairHom.left
right :
  F.map CategoryTheory.Limits.WalkingParallelPairHom.right ≫ one.hom =
    zero.hom ≫ G.map CategoryTheory.Limits.WalkingParallelPairHom.right
⊢ ∀ {X Y : WalkingParallelPair} (f : X ⟶ Y),
    F.map f ≫ (WalkingParallelPair.casesOn Y zero one).hom = (WalkingParallelPair.casesOn X zero one).hom ≫ G.map f
[PROOFSTEP]
rintro _ _ ⟨_⟩
[GOAL]
case left
C : Type u
inst✝ : Category.{v, u} C
X Y : C
F G : WalkingParallelPair ⥤ C
zero : F.obj CategoryTheory.Limits.WalkingParallelPair.zero ≅ G.obj CategoryTheory.Limits.WalkingParallelPair.zero
one : F.obj CategoryTheory.Limits.WalkingParallelPair.one ≅ G.obj CategoryTheory.Limits.WalkingParallelPair.one
left :
  F.map CategoryTheory.Limits.WalkingParallelPairHom.left ≫ one.hom =
    zero.hom ≫ G.map CategoryTheory.Limits.WalkingParallelPairHom.left
right :
  F.map CategoryTheory.Limits.WalkingParallelPairHom.right ≫ one.hom =
    zero.hom ≫ G.map CategoryTheory.Limits.WalkingParallelPairHom.right
⊢ F.map CategoryTheory.Limits.WalkingParallelPairHom.left ≫
      (WalkingParallelPair.casesOn CategoryTheory.Limits.WalkingParallelPair.one zero one).hom =
    (WalkingParallelPair.casesOn CategoryTheory.Limits.WalkingParallelPair.zero zero one).hom ≫
      G.map CategoryTheory.Limits.WalkingParallelPairHom.left
[PROOFSTEP]
simp [left, right]
[GOAL]
case right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
F G : WalkingParallelPair ⥤ C
zero : F.obj CategoryTheory.Limits.WalkingParallelPair.zero ≅ G.obj CategoryTheory.Limits.WalkingParallelPair.zero
one : F.obj CategoryTheory.Limits.WalkingParallelPair.one ≅ G.obj CategoryTheory.Limits.WalkingParallelPair.one
left :
  F.map CategoryTheory.Limits.WalkingParallelPairHom.left ≫ one.hom =
    zero.hom ≫ G.map CategoryTheory.Limits.WalkingParallelPairHom.left
right :
  F.map CategoryTheory.Limits.WalkingParallelPairHom.right ≫ one.hom =
    zero.hom ≫ G.map CategoryTheory.Limits.WalkingParallelPairHom.right
⊢ F.map CategoryTheory.Limits.WalkingParallelPairHom.right ≫
      (WalkingParallelPair.casesOn CategoryTheory.Limits.WalkingParallelPair.one zero one).hom =
    (WalkingParallelPair.casesOn CategoryTheory.Limits.WalkingParallelPair.zero zero one).hom ≫
      G.map CategoryTheory.Limits.WalkingParallelPairHom.right
[PROOFSTEP]
simp [left, right]
[GOAL]
case id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
F G : WalkingParallelPair ⥤ C
zero : F.obj CategoryTheory.Limits.WalkingParallelPair.zero ≅ G.obj CategoryTheory.Limits.WalkingParallelPair.zero
one : F.obj CategoryTheory.Limits.WalkingParallelPair.one ≅ G.obj CategoryTheory.Limits.WalkingParallelPair.one
left :
  F.map CategoryTheory.Limits.WalkingParallelPairHom.left ≫ one.hom =
    zero.hom ≫ G.map CategoryTheory.Limits.WalkingParallelPairHom.left
right :
  F.map CategoryTheory.Limits.WalkingParallelPairHom.right ≫ one.hom =
    zero.hom ≫ G.map CategoryTheory.Limits.WalkingParallelPairHom.right
X✝ : WalkingParallelPair
⊢ F.map (WalkingParallelPairHom.id X✝) ≫ (WalkingParallelPair.casesOn X✝ zero one).hom =
    (WalkingParallelPair.casesOn X✝ zero one).hom ≫ G.map (WalkingParallelPairHom.id X✝)
[PROOFSTEP]
simp [left, right]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g f' g' : X ⟶ Y
hf : f = f'
hg : g = g'
⊢ (parallelPair f g).map left ≫ (Iso.refl ((parallelPair f g).obj one)).hom =
    (Iso.refl ((parallelPair f g).obj zero)).hom ≫ (parallelPair f' g').map left
[PROOFSTEP]
simp [hf]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g f' g' : X ⟶ Y
hf : f = f'
hg : g = g'
⊢ (parallelPair f g).map right ≫ (Iso.refl ((parallelPair f g).obj one)).hom =
    (Iso.refl ((parallelPair f g).obj zero)).hom ≫ (parallelPair f' g').map right
[PROOFSTEP]
simp [hg]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
s : Fork f g
⊢ NatTrans.app s.π one = ι s ≫ f
[PROOFSTEP]
rw [← s.app_zero_eq_ι, ← s.w left, parallelPair_map_left]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
s : Fork f g
⊢ NatTrans.app s.π one = ι s ≫ g
[PROOFSTEP]
rw [← s.app_zero_eq_ι, ← s.w right, parallelPair_map_right]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
s : Cofork f g
⊢ NatTrans.app s.ι zero = f ≫ π s
[PROOFSTEP]
rw [← s.app_one_eq_π, ← s.w left, parallelPair_map_left]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
s : Cofork f g
⊢ NatTrans.app s.ι zero = g ≫ π s
[PROOFSTEP]
rw [← s.app_one_eq_π, ← s.w right, parallelPair_map_right]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X✝ Y : C
f g : X✝ ⟶ Y
P : C
ι : P ⟶ X✝
w : ι ≫ f = ι ≫ g
X : WalkingParallelPair
⊢ ((Functor.const WalkingParallelPair).obj P).obj X ⟶ (parallelPair f g).obj X
[PROOFSTEP]
cases X
[GOAL]
case zero
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
P : C
ι : P ⟶ X
w : ι ≫ f = ι ≫ g
⊢ ((Functor.const WalkingParallelPair).obj P).obj zero ⟶ (parallelPair f g).obj zero
case one
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
P : C
ι : P ⟶ X
w : ι ≫ f = ι ≫ g
⊢ ((Functor.const WalkingParallelPair).obj P).obj one ⟶ (parallelPair f g).obj one
[PROOFSTEP]
exact ι
[GOAL]
case one
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
P : C
ι : P ⟶ X
w : ι ≫ f = ι ≫ g
⊢ ((Functor.const WalkingParallelPair).obj P).obj one ⟶ (parallelPair f g).obj one
[PROOFSTEP]
exact ι ≫ f
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X✝ Y✝ : C
f✝ g : X✝ ⟶ Y✝
P : C
ι : P ⟶ X✝
w : ι ≫ f✝ = ι ≫ g
X Y : WalkingParallelPair
f : X ⟶ Y
⊢ ((Functor.const WalkingParallelPair).obj P).map f ≫
      (fun X =>
          WalkingParallelPair.casesOn (motive := fun t =>
            X = t → (((Functor.const WalkingParallelPair).obj P).obj X ⟶ (parallelPair f✝ g).obj X)) X
            (fun h => (_ : zero = X) ▸ ι) (fun h => (_ : one = X) ▸ ι ≫ f✝) (_ : X = X))
        Y =
    (fun X =>
          WalkingParallelPair.casesOn (motive := fun t =>
            X = t → (((Functor.const WalkingParallelPair).obj P).obj X ⟶ (parallelPair f✝ g).obj X)) X
            (fun h => (_ : zero = X) ▸ ι) (fun h => (_ : one = X) ▸ ι ≫ f✝) (_ : X = X))
        X ≫
      (parallelPair f✝ g).map f
[PROOFSTEP]
cases X
[GOAL]
case zero
C : Type u
inst✝ : Category.{v, u} C
X Y✝ : C
f✝ g : X ⟶ Y✝
P : C
ι : P ⟶ X
w : ι ≫ f✝ = ι ≫ g
Y : WalkingParallelPair
f : zero ⟶ Y
⊢ ((Functor.const WalkingParallelPair).obj P).map f ≫
      (fun X_1 =>
          WalkingParallelPair.casesOn (motive := fun t =>
            X_1 = t → (((Functor.const WalkingParallelPair).obj P).obj X_1 ⟶ (parallelPair f✝ g).obj X_1)) X_1
            (fun h => (_ : zero = X_1) ▸ ι) (fun h => (_ : one = X_1) ▸ ι ≫ f✝) (_ : X_1 = X_1))
        Y =
    (fun X_1 =>
          WalkingParallelPair.casesOn (motive := fun t =>
            X_1 = t → (((Functor.const WalkingParallelPair).obj P).obj X_1 ⟶ (parallelPair f✝ g).obj X_1)) X_1
            (fun h => (_ : zero = X_1) ▸ ι) (fun h => (_ : one = X_1) ▸ ι ≫ f✝) (_ : X_1 = X_1))
        zero ≫
      (parallelPair f✝ g).map f
[PROOFSTEP]
cases Y
[GOAL]
case one
C : Type u
inst✝ : Category.{v, u} C
X Y✝ : C
f✝ g : X ⟶ Y✝
P : C
ι : P ⟶ X
w : ι ≫ f✝ = ι ≫ g
Y : WalkingParallelPair
f : one ⟶ Y
⊢ ((Functor.const WalkingParallelPair).obj P).map f ≫
      (fun X_1 =>
          WalkingParallelPair.casesOn (motive := fun t =>
            X_1 = t → (((Functor.const WalkingParallelPair).obj P).obj X_1 ⟶ (parallelPair f✝ g).obj X_1)) X_1
            (fun h => (_ : zero = X_1) ▸ ι) (fun h => (_ : one = X_1) ▸ ι ≫ f✝) (_ : X_1 = X_1))
        Y =
    (fun X_1 =>
          WalkingParallelPair.casesOn (motive := fun t =>
            X_1 = t → (((Functor.const WalkingParallelPair).obj P).obj X_1 ⟶ (parallelPair f✝ g).obj X_1)) X_1
            (fun h => (_ : zero = X_1) ▸ ι) (fun h => (_ : one = X_1) ▸ ι ≫ f✝) (_ : X_1 = X_1))
        one ≫
      (parallelPair f✝ g).map f
[PROOFSTEP]
cases Y
[GOAL]
case zero.zero
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f✝ g : X ⟶ Y
P : C
ι : P ⟶ X
w : ι ≫ f✝ = ι ≫ g
f : zero ⟶ zero
⊢ ((Functor.const WalkingParallelPair).obj P).map f ≫
      (fun X_1 =>
          WalkingParallelPair.casesOn (motive := fun t =>
            X_1 = t → (((Functor.const WalkingParallelPair).obj P).obj X_1 ⟶ (parallelPair f✝ g).obj X_1)) X_1
            (fun h => (_ : zero = X_1) ▸ ι) (fun h => (_ : one = X_1) ▸ ι ≫ f✝) (_ : X_1 = X_1))
        zero =
    (fun X_1 =>
          WalkingParallelPair.casesOn (motive := fun t =>
            X_1 = t → (((Functor.const WalkingParallelPair).obj P).obj X_1 ⟶ (parallelPair f✝ g).obj X_1)) X_1
            (fun h => (_ : zero = X_1) ▸ ι) (fun h => (_ : one = X_1) ▸ ι ≫ f✝) (_ : X_1 = X_1))
        zero ≫
      (parallelPair f✝ g).map f
[PROOFSTEP]
cases f
[GOAL]
case zero.one
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f✝ g : X ⟶ Y
P : C
ι : P ⟶ X
w : ι ≫ f✝ = ι ≫ g
f : zero ⟶ one
⊢ ((Functor.const WalkingParallelPair).obj P).map f ≫
      (fun X_1 =>
          WalkingParallelPair.casesOn (motive := fun t =>
            X_1 = t → (((Functor.const WalkingParallelPair).obj P).obj X_1 ⟶ (parallelPair f✝ g).obj X_1)) X_1
            (fun h => (_ : zero = X_1) ▸ ι) (fun h => (_ : one = X_1) ▸ ι ≫ f✝) (_ : X_1 = X_1))
        one =
    (fun X_1 =>
          WalkingParallelPair.casesOn (motive := fun t =>
            X_1 = t → (((Functor.const WalkingParallelPair).obj P).obj X_1 ⟶ (parallelPair f✝ g).obj X_1)) X_1
            (fun h => (_ : zero = X_1) ▸ ι) (fun h => (_ : one = X_1) ▸ ι ≫ f✝) (_ : X_1 = X_1))
        zero ≫
      (parallelPair f✝ g).map f
[PROOFSTEP]
cases f
[GOAL]
case one.zero
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f✝ g : X ⟶ Y
P : C
ι : P ⟶ X
w : ι ≫ f✝ = ι ≫ g
f : one ⟶ zero
⊢ ((Functor.const WalkingParallelPair).obj P).map f ≫
      (fun X_1 =>
          WalkingParallelPair.casesOn (motive := fun t =>
            X_1 = t → (((Functor.const WalkingParallelPair).obj P).obj X_1 ⟶ (parallelPair f✝ g).obj X_1)) X_1
            (fun h => (_ : zero = X_1) ▸ ι) (fun h => (_ : one = X_1) ▸ ι ≫ f✝) (_ : X_1 = X_1))
        zero =
    (fun X_1 =>
          WalkingParallelPair.casesOn (motive := fun t =>
            X_1 = t → (((Functor.const WalkingParallelPair).obj P).obj X_1 ⟶ (parallelPair f✝ g).obj X_1)) X_1
            (fun h => (_ : zero = X_1) ▸ ι) (fun h => (_ : one = X_1) ▸ ι ≫ f✝) (_ : X_1 = X_1))
        one ≫
      (parallelPair f✝ g).map f
[PROOFSTEP]
cases f
[GOAL]
case one.one
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f✝ g : X ⟶ Y
P : C
ι : P ⟶ X
w : ι ≫ f✝ = ι ≫ g
f : one ⟶ one
⊢ ((Functor.const WalkingParallelPair).obj P).map f ≫
      (fun X_1 =>
          WalkingParallelPair.casesOn (motive := fun t =>
            X_1 = t → (((Functor.const WalkingParallelPair).obj P).obj X_1 ⟶ (parallelPair f✝ g).obj X_1)) X_1
            (fun h => (_ : zero = X_1) ▸ ι) (fun h => (_ : one = X_1) ▸ ι ≫ f✝) (_ : X_1 = X_1))
        one =
    (fun X_1 =>
          WalkingParallelPair.casesOn (motive := fun t =>
            X_1 = t → (((Functor.const WalkingParallelPair).obj P).obj X_1 ⟶ (parallelPair f✝ g).obj X_1)) X_1
            (fun h => (_ : zero = X_1) ▸ ι) (fun h => (_ : one = X_1) ▸ ι ≫ f✝) (_ : X_1 = X_1))
        one ≫
      (parallelPair f✝ g).map f
[PROOFSTEP]
cases f
[GOAL]
case zero.zero.id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
P : C
ι : P ⟶ X
w : ι ≫ f = ι ≫ g
⊢ ((Functor.const WalkingParallelPair).obj P).map (WalkingParallelPairHom.id zero) ≫
      (fun X_1 =>
          WalkingParallelPair.casesOn (motive := fun t =>
            X_1 = t → (((Functor.const WalkingParallelPair).obj P).obj X_1 ⟶ (parallelPair f g).obj X_1)) X_1
            (fun h => (_ : zero = X_1) ▸ ι) (fun h => (_ : one = X_1) ▸ ι ≫ f) (_ : X_1 = X_1))
        zero =
    (fun X_1 =>
          WalkingParallelPair.casesOn (motive := fun t =>
            X_1 = t → (((Functor.const WalkingParallelPair).obj P).obj X_1 ⟶ (parallelPair f g).obj X_1)) X_1
            (fun h => (_ : zero = X_1) ▸ ι) (fun h => (_ : one = X_1) ▸ ι ≫ f) (_ : X_1 = X_1))
        zero ≫
      (parallelPair f g).map (WalkingParallelPairHom.id zero)
[PROOFSTEP]
dsimp
[GOAL]
case zero.one.left
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
P : C
ι : P ⟶ X
w : ι ≫ f = ι ≫ g
⊢ ((Functor.const WalkingParallelPair).obj P).map left ≫
      (fun X_1 =>
          WalkingParallelPair.casesOn (motive := fun t =>
            X_1 = t → (((Functor.const WalkingParallelPair).obj P).obj X_1 ⟶ (parallelPair f g).obj X_1)) X_1
            (fun h => (_ : zero = X_1) ▸ ι) (fun h => (_ : one = X_1) ▸ ι ≫ f) (_ : X_1 = X_1))
        one =
    (fun X_1 =>
          WalkingParallelPair.casesOn (motive := fun t =>
            X_1 = t → (((Functor.const WalkingParallelPair).obj P).obj X_1 ⟶ (parallelPair f g).obj X_1)) X_1
            (fun h => (_ : zero = X_1) ▸ ι) (fun h => (_ : one = X_1) ▸ ι ≫ f) (_ : X_1 = X_1))
        zero ≫
      (parallelPair f g).map left
[PROOFSTEP]
dsimp
[GOAL]
case zero.one.right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
P : C
ι : P ⟶ X
w : ι ≫ f = ι ≫ g
⊢ ((Functor.const WalkingParallelPair).obj P).map right ≫
      (fun X_1 =>
          WalkingParallelPair.casesOn (motive := fun t =>
            X_1 = t → (((Functor.const WalkingParallelPair).obj P).obj X_1 ⟶ (parallelPair f g).obj X_1)) X_1
            (fun h => (_ : zero = X_1) ▸ ι) (fun h => (_ : one = X_1) ▸ ι ≫ f) (_ : X_1 = X_1))
        one =
    (fun X_1 =>
          WalkingParallelPair.casesOn (motive := fun t =>
            X_1 = t → (((Functor.const WalkingParallelPair).obj P).obj X_1 ⟶ (parallelPair f g).obj X_1)) X_1
            (fun h => (_ : zero = X_1) ▸ ι) (fun h => (_ : one = X_1) ▸ ι ≫ f) (_ : X_1 = X_1))
        zero ≫
      (parallelPair f g).map right
[PROOFSTEP]
dsimp
[GOAL]
case one.one.id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
P : C
ι : P ⟶ X
w : ι ≫ f = ι ≫ g
⊢ ((Functor.const WalkingParallelPair).obj P).map (WalkingParallelPairHom.id one) ≫
      (fun X_1 =>
          WalkingParallelPair.casesOn (motive := fun t =>
            X_1 = t → (((Functor.const WalkingParallelPair).obj P).obj X_1 ⟶ (parallelPair f g).obj X_1)) X_1
            (fun h => (_ : zero = X_1) ▸ ι) (fun h => (_ : one = X_1) ▸ ι ≫ f) (_ : X_1 = X_1))
        one =
    (fun X_1 =>
          WalkingParallelPair.casesOn (motive := fun t =>
            X_1 = t → (((Functor.const WalkingParallelPair).obj P).obj X_1 ⟶ (parallelPair f g).obj X_1)) X_1
            (fun h => (_ : zero = X_1) ▸ ι) (fun h => (_ : one = X_1) ▸ ι ≫ f) (_ : X_1 = X_1))
        one ≫
      (parallelPair f g).map (WalkingParallelPairHom.id one)
[PROOFSTEP]
dsimp
[GOAL]
case zero.zero.id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
P : C
ι : P ⟶ X
w : ι ≫ f = ι ≫ g
⊢ 𝟙 P ≫ ι = ι ≫ (parallelPair f g).map (𝟙 zero)
[PROOFSTEP]
simp
[GOAL]
case zero.one.left
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
P : C
ι : P ⟶ X
w : ι ≫ f = ι ≫ g
⊢ 𝟙 P ≫ ι ≫ f = ι ≫ f
[PROOFSTEP]
simp
[GOAL]
case zero.one.right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
P : C
ι : P ⟶ X
w : ι ≫ f = ι ≫ g
⊢ 𝟙 P ≫ ι ≫ f = ι ≫ g
[PROOFSTEP]
simp
[GOAL]
case one.one.id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
P : C
ι : P ⟶ X
w : ι ≫ f = ι ≫ g
⊢ 𝟙 P ≫ ι ≫ f = (ι ≫ f) ≫ (parallelPair f g).map (𝟙 one)
[PROOFSTEP]
simp
[GOAL]
case zero.one.right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
P : C
ι : P ⟶ X
w : ι ≫ f = ι ≫ g
⊢ ι ≫ f = ι ≫ g
[PROOFSTEP]
assumption
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f✝ g : X ⟶ Y
P : C
π : Y ⟶ P
w : f✝ ≫ π = g ≫ π
i j : WalkingParallelPair
f : i ⟶ j
⊢ (parallelPair f✝ g).map f ≫ (fun X_1 => WalkingParallelPair.casesOn X_1 (f✝ ≫ π) π) j =
    (fun X_1 => WalkingParallelPair.casesOn X_1 (f✝ ≫ π) π) i ≫ ((Functor.const WalkingParallelPair).obj P).map f
[PROOFSTEP]
cases f
[GOAL]
case left
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
P : C
π : Y ⟶ P
w : f ≫ π = g ≫ π
⊢ (parallelPair f g).map left ≫ (fun X_1 => WalkingParallelPair.casesOn X_1 (f ≫ π) π) one =
    (fun X_1 => WalkingParallelPair.casesOn X_1 (f ≫ π) π) zero ≫ ((Functor.const WalkingParallelPair).obj P).map left
[PROOFSTEP]
dsimp
[GOAL]
case right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
P : C
π : Y ⟶ P
w : f ≫ π = g ≫ π
⊢ (parallelPair f g).map right ≫ (fun X_1 => WalkingParallelPair.casesOn X_1 (f ≫ π) π) one =
    (fun X_1 => WalkingParallelPair.casesOn X_1 (f ≫ π) π) zero ≫ ((Functor.const WalkingParallelPair).obj P).map right
[PROOFSTEP]
dsimp
[GOAL]
case id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
P : C
π : Y ⟶ P
w : f ≫ π = g ≫ π
i : WalkingParallelPair
⊢ (parallelPair f g).map (WalkingParallelPairHom.id i) ≫ (fun X_1 => WalkingParallelPair.casesOn X_1 (f ≫ π) π) i =
    (fun X_1 => WalkingParallelPair.casesOn X_1 (f ≫ π) π) i ≫
      ((Functor.const WalkingParallelPair).obj P).map (WalkingParallelPairHom.id i)
[PROOFSTEP]
dsimp
[GOAL]
case left
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
P : C
π : Y ⟶ P
w : f ≫ π = g ≫ π
⊢ f ≫ π = (f ≫ π) ≫ 𝟙 P
[PROOFSTEP]
simp [w]
[GOAL]
case right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
P : C
π : Y ⟶ P
w : f ≫ π = g ≫ π
⊢ g ≫ π = (f ≫ π) ≫ 𝟙 P
[PROOFSTEP]
simp [w]
[GOAL]
case id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
P : C
π : Y ⟶ P
w : f ≫ π = g ≫ π
i : WalkingParallelPair
⊢ (parallelPair f g).map (𝟙 i) ≫ WalkingParallelPair.rec (f ≫ π) π i = WalkingParallelPair.rec (f ≫ π) π i ≫ 𝟙 P
[PROOFSTEP]
simp [w]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
t : Fork f g
⊢ ι t ≫ f = ι t ≫ g
[PROOFSTEP]
rw [← t.app_one_eq_ι_comp_left, ← t.app_one_eq_ι_comp_right]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
t : Cofork f g
⊢ f ≫ π t = g ≫ π t
[PROOFSTEP]
rw [← t.app_zero_eq_comp_π_left, ← t.app_zero_eq_comp_π_right]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
s : Fork f g
W : C
k l : W ⟶ s.pt
h : k ≫ ι s = l ≫ ι s
⊢ k ≫ NatTrans.app s.π one = l ≫ NatTrans.app s.π one
[PROOFSTEP]
have : k ≫ ι s ≫ f = l ≫ ι s ≫ f := by simp only [← Category.assoc]; exact congrArg (· ≫ f) h
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
s : Fork f g
W : C
k l : W ⟶ s.pt
h : k ≫ ι s = l ≫ ι s
⊢ k ≫ ι s ≫ f = l ≫ ι s ≫ f
[PROOFSTEP]
simp only [← Category.assoc]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
s : Fork f g
W : C
k l : W ⟶ s.pt
h : k ≫ ι s = l ≫ ι s
⊢ (k ≫ ι s) ≫ f = (l ≫ ι s) ≫ f
[PROOFSTEP]
exact congrArg (· ≫ f) h
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
s : Fork f g
W : C
k l : W ⟶ s.pt
h : k ≫ ι s = l ≫ ι s
this : k ≫ ι s ≫ f = l ≫ ι s ≫ f
⊢ k ≫ NatTrans.app s.π one = l ≫ NatTrans.app s.π one
[PROOFSTEP]
rw [s.app_one_eq_ι_comp_left, this]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
s : Cofork f g
W : C
k l : s.pt ⟶ W
h : π s ≫ k = π s ≫ l
⊢ NatTrans.app s.ι zero ≫ k = NatTrans.app s.ι zero ≫ l
[PROOFSTEP]
simp only [s.app_zero_eq_comp_π_left, Category.assoc, h]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
s : Fork f g
hs : IsLimit s
W : C
k : W ⟶ X
h : k ≫ f = k ≫ g
⊢ lift hs k h ≫ ι s = k
[PROOFSTEP]
simp
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
s : Cofork f g
hs : IsColimit s
W : C
k : Y ⟶ W
h : f ≫ k = g ≫ k
⊢ π s ≫ desc hs k h = k
[PROOFSTEP]
simp
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
t : Fork f g
lift : (s : Fork f g) → s.pt ⟶ t.pt
fac : ∀ (s : Fork f g), lift s ≫ ι t = ι s
uniq : ∀ (s : Fork f g) (m : s.pt ⟶ t.pt), m ≫ ι t = ι s → m = lift s
s : Cone (parallelPair f g)
j : WalkingParallelPair
⊢ lift s ≫ NatTrans.app t.π one = NatTrans.app s.π one
[PROOFSTEP]
erw [← s.w left, ← t.w left, ← Category.assoc, fac]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
t : Fork f g
lift : (s : Fork f g) → s.pt ⟶ t.pt
fac : ∀ (s : Fork f g), lift s ≫ ι t = ι s
uniq : ∀ (s : Fork f g) (m : s.pt ⟶ t.pt), m ≫ ι t = ι s → m = lift s
s : Cone (parallelPair f g)
j : WalkingParallelPair
⊢ ι s ≫ (parallelPair f g).map left = NatTrans.app s.π zero ≫ (parallelPair f g).map left
[PROOFSTEP]
rfl
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
t : Fork f g
lift : (s : Fork f g) → s.pt ⟶ t.pt
fac : ∀ (s : Fork f g), lift s ≫ ι t = ι s
uniq : ∀ (s : Fork f g) (m : s.pt ⟶ t.pt), m ≫ ι t = ι s → m = lift s
s : Cone (parallelPair f g)
m : s.pt ⟶ t.pt
j : ∀ (j : WalkingParallelPair), m ≫ NatTrans.app t.π j = NatTrans.app s.π j
⊢ m = lift s
[PROOFSTEP]
aesop
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
t : Cofork f g
desc : (s : Cofork f g) → t.pt ⟶ s.pt
fac : ∀ (s : Cofork f g), π t ≫ desc s = π s
uniq : ∀ (s : Cofork f g) (m : t.pt ⟶ s.pt), π t ≫ m = π s → m = desc s
s : Cocone (parallelPair f g)
j : WalkingParallelPair
⊢ NatTrans.app t.ι zero ≫ desc s = NatTrans.app s.ι zero
[PROOFSTEP]
erw [← s.w left, ← t.w left, Category.assoc, fac]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
t : Cofork f g
desc : (s : Cofork f g) → t.pt ⟶ s.pt
fac : ∀ (s : Cofork f g), π t ≫ desc s = π s
uniq : ∀ (s : Cofork f g) (m : t.pt ⟶ s.pt), π t ≫ m = π s → m = desc s
s : Cocone (parallelPair f g)
j : WalkingParallelPair
⊢ (parallelPair f g).map left ≫ π s = (parallelPair f g).map left ≫ NatTrans.app s.ι one
[PROOFSTEP]
rfl
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
t : Cofork f g
desc : (s : Cofork f g) → t.pt ⟶ s.pt
fac : ∀ (s : Cofork f g), π t ≫ desc s = π s
uniq : ∀ (s : Cofork f g) (m : t.pt ⟶ s.pt), π t ≫ m = π s → m = desc s
⊢ ∀ (s : Cocone (parallelPair f g)) (m : t.pt ⟶ s.pt),
    (∀ (j : WalkingParallelPair), NatTrans.app t.ι j ≫ m = NatTrans.app s.ι j) → m = desc s
[PROOFSTEP]
aesop
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
t : Fork f g
hs : ∀ (s : Fork f g), ∃! l, l ≫ ι t = ι s
⊢ IsLimit t
[PROOFSTEP]
choose d hd hd' using hs
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
t : Fork f g
d : (s : Fork f g) → s.pt ⟶ t.pt
hd : ∀ (s : Fork f g), (fun l => l ≫ ι t = ι s) (d s)
hd' : ∀ (s : Fork f g) (y : s.pt ⟶ t.pt), (fun l => l ≫ ι t = ι s) y → y = d s
⊢ IsLimit t
[PROOFSTEP]
exact Fork.IsLimit.mk _ d hd fun s m hm => hd' _ _ hm
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
t : Cofork f g
hs : ∀ (s : Cofork f g), ∃! d, π t ≫ d = π s
⊢ IsColimit t
[PROOFSTEP]
choose d hd hd' using hs
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
t : Cofork f g
d : (s : Cofork f g) → t.pt ⟶ s.pt
hd : ∀ (s : Cofork f g), (fun d => π t ≫ d = π s) (d s)
hd' : ∀ (s : Cofork f g) (y : t.pt ⟶ s.pt), (fun d => π t ≫ d = π s) y → y = d s
⊢ IsColimit t
[PROOFSTEP]
exact Cofork.IsColimit.mk _ d hd fun s m hm => hd' _ _ hm
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X✝ Y✝ : C
f✝ g✝ : X✝ ⟶ Y✝
X Y : C
f g : X ⟶ Y
t : Fork f g
ht : IsLimit t
Z : C
k : Z ⟶ t.pt
⊢ (k ≫ ι t) ≫ f = (k ≫ ι t) ≫ g
[PROOFSTEP]
simp only [Category.assoc, t.condition]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X✝ Y✝ : C
f✝ g✝ : X✝ ⟶ Y✝
X Y : C
f g : X ⟶ Y
t : Cofork f g
ht : IsColimit t
Z : C
k : t.pt ⟶ Z
⊢ f ≫ π t ≫ k = g ≫ π t ≫ k
[PROOFSTEP]
simp only [← Category.assoc, t.condition]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X✝ Y : C
f g : X✝ ⟶ Y
F : WalkingParallelPair ⥤ C
t : Fork (F.map left) (F.map right)
X : WalkingParallelPair
⊢ (parallelPair (F.map left) (F.map right)).obj X = F.obj X
[PROOFSTEP]
aesop
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Fork (F.map left) (F.map right)
⊢ ∀ ⦃X Y : WalkingParallelPair⦄ (f : X ⟶ Y),
    ((Functor.const WalkingParallelPair).obj t.pt).map f ≫
        (fun X => NatTrans.app t.π X ≫ eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X)) Y =
      (fun X => NatTrans.app t.π X ≫ eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X)) X ≫
        F.map f
[PROOFSTEP]
rintro _ _ (_ | _ | _)
[GOAL]
case left
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Fork (F.map left) (F.map right)
⊢ ((Functor.const WalkingParallelPair).obj t.pt).map left ≫
      (fun X => NatTrans.app t.π X ≫ eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X)) one =
    (fun X => NatTrans.app t.π X ≫ eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X)) zero ≫
      F.map left
[PROOFSTEP]
{dsimp; simp [t.condition]
}
[GOAL]
case left
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Fork (F.map left) (F.map right)
⊢ ((Functor.const WalkingParallelPair).obj t.pt).map left ≫
      (fun X => NatTrans.app t.π X ≫ eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X)) one =
    (fun X => NatTrans.app t.π X ≫ eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X)) zero ≫
      F.map left
[PROOFSTEP]
dsimp
[GOAL]
case left
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Fork (F.map left) (F.map right)
⊢ 𝟙 t.pt ≫ NatTrans.app t.π one ≫ 𝟙 (F.obj one) = (Fork.ι t ≫ 𝟙 (F.obj zero)) ≫ F.map left
[PROOFSTEP]
simp [t.condition]
[GOAL]
case right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Fork (F.map left) (F.map right)
⊢ ((Functor.const WalkingParallelPair).obj t.pt).map right ≫
      (fun X => NatTrans.app t.π X ≫ eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X)) one =
    (fun X => NatTrans.app t.π X ≫ eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X)) zero ≫
      F.map right
[PROOFSTEP]
{dsimp; simp [t.condition]
}
[GOAL]
case right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Fork (F.map left) (F.map right)
⊢ ((Functor.const WalkingParallelPair).obj t.pt).map right ≫
      (fun X => NatTrans.app t.π X ≫ eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X)) one =
    (fun X => NatTrans.app t.π X ≫ eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X)) zero ≫
      F.map right
[PROOFSTEP]
dsimp
[GOAL]
case right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Fork (F.map left) (F.map right)
⊢ 𝟙 t.pt ≫ NatTrans.app t.π one ≫ 𝟙 (F.obj one) = (Fork.ι t ≫ 𝟙 (F.obj zero)) ≫ F.map right
[PROOFSTEP]
simp [t.condition]
[GOAL]
case id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Fork (F.map left) (F.map right)
X✝ : WalkingParallelPair
⊢ ((Functor.const WalkingParallelPair).obj t.pt).map (WalkingParallelPairHom.id X✝) ≫
      (fun X => NatTrans.app t.π X ≫ eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X)) X✝ =
    (fun X => NatTrans.app t.π X ≫ eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X)) X✝ ≫
      F.map (WalkingParallelPairHom.id X✝)
[PROOFSTEP]
{dsimp; simp [t.condition]
}
[GOAL]
case id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Fork (F.map left) (F.map right)
X✝ : WalkingParallelPair
⊢ ((Functor.const WalkingParallelPair).obj t.pt).map (WalkingParallelPairHom.id X✝) ≫
      (fun X => NatTrans.app t.π X ≫ eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X)) X✝ =
    (fun X => NatTrans.app t.π X ≫ eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X)) X✝ ≫
      F.map (WalkingParallelPairHom.id X✝)
[PROOFSTEP]
dsimp
[GOAL]
case id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Fork (F.map left) (F.map right)
X✝ : WalkingParallelPair
⊢ 𝟙 t.pt ≫ NatTrans.app t.π X✝ ≫ eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X✝ = F.obj X✝) =
    (NatTrans.app t.π X✝ ≫ eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X✝ = F.obj X✝)) ≫ F.map (𝟙 X✝)
[PROOFSTEP]
simp [t.condition]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X✝ Y : C
f g : X✝ ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cofork (F.map left) (F.map right)
X : WalkingParallelPair
⊢ F.obj X = (parallelPair (F.map left) (F.map right)).obj X
[PROOFSTEP]
aesop
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cofork (F.map left) (F.map right)
⊢ ∀ ⦃X Y : WalkingParallelPair⦄ (f : X ⟶ Y),
    F.map f ≫
        (fun X => eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X) ≫ NatTrans.app t.ι X) Y =
      (fun X => eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X) ≫ NatTrans.app t.ι X) X ≫
        ((Functor.const WalkingParallelPair).obj t.pt).map f
[PROOFSTEP]
rintro _ _ (_ | _ | _)
[GOAL]
case left
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cofork (F.map left) (F.map right)
⊢ F.map left ≫
      (fun X => eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X) ≫ NatTrans.app t.ι X) one =
    (fun X => eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X) ≫ NatTrans.app t.ι X) zero ≫
      ((Functor.const WalkingParallelPair).obj t.pt).map left
[PROOFSTEP]
{dsimp; simp [t.condition]
}
[GOAL]
case left
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cofork (F.map left) (F.map right)
⊢ F.map left ≫
      (fun X => eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X) ≫ NatTrans.app t.ι X) one =
    (fun X => eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X) ≫ NatTrans.app t.ι X) zero ≫
      ((Functor.const WalkingParallelPair).obj t.pt).map left
[PROOFSTEP]
dsimp
[GOAL]
case left
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cofork (F.map left) (F.map right)
⊢ F.map left ≫ 𝟙 (F.obj one) ≫ Cofork.π t = (𝟙 (F.obj zero) ≫ NatTrans.app t.ι zero) ≫ 𝟙 t.pt
[PROOFSTEP]
simp [t.condition]
[GOAL]
case right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cofork (F.map left) (F.map right)
⊢ F.map right ≫
      (fun X => eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X) ≫ NatTrans.app t.ι X) one =
    (fun X => eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X) ≫ NatTrans.app t.ι X) zero ≫
      ((Functor.const WalkingParallelPair).obj t.pt).map right
[PROOFSTEP]
{dsimp; simp [t.condition]
}
[GOAL]
case right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cofork (F.map left) (F.map right)
⊢ F.map right ≫
      (fun X => eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X) ≫ NatTrans.app t.ι X) one =
    (fun X => eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X) ≫ NatTrans.app t.ι X) zero ≫
      ((Functor.const WalkingParallelPair).obj t.pt).map right
[PROOFSTEP]
dsimp
[GOAL]
case right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cofork (F.map left) (F.map right)
⊢ F.map right ≫ 𝟙 (F.obj one) ≫ Cofork.π t = (𝟙 (F.obj zero) ≫ NatTrans.app t.ι zero) ≫ 𝟙 t.pt
[PROOFSTEP]
simp [t.condition]
[GOAL]
case id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cofork (F.map left) (F.map right)
X✝ : WalkingParallelPair
⊢ F.map (WalkingParallelPairHom.id X✝) ≫
      (fun X => eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X) ≫ NatTrans.app t.ι X) X✝ =
    (fun X => eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X) ≫ NatTrans.app t.ι X) X✝ ≫
      ((Functor.const WalkingParallelPair).obj t.pt).map (WalkingParallelPairHom.id X✝)
[PROOFSTEP]
{dsimp; simp [t.condition]
}
[GOAL]
case id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cofork (F.map left) (F.map right)
X✝ : WalkingParallelPair
⊢ F.map (WalkingParallelPairHom.id X✝) ≫
      (fun X => eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X) ≫ NatTrans.app t.ι X) X✝ =
    (fun X => eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X) ≫ NatTrans.app t.ι X) X✝ ≫
      ((Functor.const WalkingParallelPair).obj t.pt).map (WalkingParallelPairHom.id X✝)
[PROOFSTEP]
dsimp
[GOAL]
case id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cofork (F.map left) (F.map right)
X✝ : WalkingParallelPair
⊢ F.map (𝟙 X✝) ≫ eqToHom (_ : F.obj X✝ = (parallelPair (F.map left) (F.map right)).obj X✝) ≫ NatTrans.app t.ι X✝ =
    (eqToHom (_ : F.obj X✝ = (parallelPair (F.map left) (F.map right)).obj X✝) ≫ NatTrans.app t.ι X✝) ≫ 𝟙 t.pt
[PROOFSTEP]
simp [t.condition]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Fork (F.map left) (F.map right)
j : WalkingParallelPair
⊢ (parallelPair (F.map left) (F.map right)).obj j = F.obj j
[PROOFSTEP]
aesop
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cofork (F.map left) (F.map right)
j : WalkingParallelPair
⊢ F.obj j = (parallelPair (F.map left) (F.map right)).obj j
[PROOFSTEP]
aesop
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X✝ Y : C
f g : X✝ ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cone F
X : WalkingParallelPair
⊢ F.obj X = (parallelPair (F.map left) (F.map right)).obj X
[PROOFSTEP]
aesop
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cone F
⊢ ∀ ⦃X Y : WalkingParallelPair⦄ (f : X ⟶ Y),
    ((Functor.const WalkingParallelPair).obj t.pt).map f ≫
        (fun X => NatTrans.app t.π X ≫ eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X)) Y =
      (fun X => NatTrans.app t.π X ≫ eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X)) X ≫
        (parallelPair (F.map left) (F.map right)).map f
[PROOFSTEP]
rintro _ _ (_ | _ | _)
[GOAL]
case left
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cone F
⊢ ((Functor.const WalkingParallelPair).obj t.pt).map left ≫
      (fun X => NatTrans.app t.π X ≫ eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X)) one =
    (fun X => NatTrans.app t.π X ≫ eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X)) zero ≫
      (parallelPair (F.map left) (F.map right)).map left
[PROOFSTEP]
{dsimp; simp
}
[GOAL]
case left
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cone F
⊢ ((Functor.const WalkingParallelPair).obj t.pt).map left ≫
      (fun X => NatTrans.app t.π X ≫ eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X)) one =
    (fun X => NatTrans.app t.π X ≫ eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X)) zero ≫
      (parallelPair (F.map left) (F.map right)).map left
[PROOFSTEP]
dsimp
[GOAL]
case left
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cone F
⊢ 𝟙 t.pt ≫ NatTrans.app t.π one ≫ 𝟙 (F.obj one) = (NatTrans.app t.π zero ≫ 𝟙 (F.obj zero)) ≫ F.map left
[PROOFSTEP]
simp
[GOAL]
case right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cone F
⊢ ((Functor.const WalkingParallelPair).obj t.pt).map right ≫
      (fun X => NatTrans.app t.π X ≫ eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X)) one =
    (fun X => NatTrans.app t.π X ≫ eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X)) zero ≫
      (parallelPair (F.map left) (F.map right)).map right
[PROOFSTEP]
{dsimp; simp
}
[GOAL]
case right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cone F
⊢ ((Functor.const WalkingParallelPair).obj t.pt).map right ≫
      (fun X => NatTrans.app t.π X ≫ eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X)) one =
    (fun X => NatTrans.app t.π X ≫ eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X)) zero ≫
      (parallelPair (F.map left) (F.map right)).map right
[PROOFSTEP]
dsimp
[GOAL]
case right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cone F
⊢ 𝟙 t.pt ≫ NatTrans.app t.π one ≫ 𝟙 (F.obj one) = (NatTrans.app t.π zero ≫ 𝟙 (F.obj zero)) ≫ F.map right
[PROOFSTEP]
simp
[GOAL]
case id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cone F
X✝ : WalkingParallelPair
⊢ ((Functor.const WalkingParallelPair).obj t.pt).map (WalkingParallelPairHom.id X✝) ≫
      (fun X => NatTrans.app t.π X ≫ eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X)) X✝ =
    (fun X => NatTrans.app t.π X ≫ eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X)) X✝ ≫
      (parallelPair (F.map left) (F.map right)).map (WalkingParallelPairHom.id X✝)
[PROOFSTEP]
{dsimp; simp
}
[GOAL]
case id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cone F
X✝ : WalkingParallelPair
⊢ ((Functor.const WalkingParallelPair).obj t.pt).map (WalkingParallelPairHom.id X✝) ≫
      (fun X => NatTrans.app t.π X ≫ eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X)) X✝ =
    (fun X => NatTrans.app t.π X ≫ eqToHom (_ : F.obj X = (parallelPair (F.map left) (F.map right)).obj X)) X✝ ≫
      (parallelPair (F.map left) (F.map right)).map (WalkingParallelPairHom.id X✝)
[PROOFSTEP]
dsimp
[GOAL]
case id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cone F
X✝ : WalkingParallelPair
⊢ 𝟙 t.pt ≫ NatTrans.app t.π X✝ ≫ eqToHom (_ : F.obj X✝ = (parallelPair (F.map left) (F.map right)).obj X✝) =
    (NatTrans.app t.π X✝ ≫ eqToHom (_ : F.obj X✝ = (parallelPair (F.map left) (F.map right)).obj X✝)) ≫
      (parallelPair (F.map left) (F.map right)).map (𝟙 X✝)
[PROOFSTEP]
simp
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X✝ Y : C
f g : X✝ ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cocone F
X : WalkingParallelPair
⊢ (parallelPair (F.map left) (F.map right)).obj X = F.obj X
[PROOFSTEP]
aesop
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cocone F
⊢ ∀ ⦃X Y : WalkingParallelPair⦄ (f : X ⟶ Y),
    (parallelPair (F.map left) (F.map right)).map f ≫
        (fun X => eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X) ≫ NatTrans.app t.ι X) Y =
      (fun X => eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X) ≫ NatTrans.app t.ι X) X ≫
        ((Functor.const WalkingParallelPair).obj t.pt).map f
[PROOFSTEP]
rintro _ _ (_ | _ | _)
[GOAL]
case left
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cocone F
⊢ (parallelPair (F.map left) (F.map right)).map left ≫
      (fun X => eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X) ≫ NatTrans.app t.ι X) one =
    (fun X => eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X) ≫ NatTrans.app t.ι X) zero ≫
      ((Functor.const WalkingParallelPair).obj t.pt).map left
[PROOFSTEP]
{dsimp; simp
}
[GOAL]
case left
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cocone F
⊢ (parallelPair (F.map left) (F.map right)).map left ≫
      (fun X => eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X) ≫ NatTrans.app t.ι X) one =
    (fun X => eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X) ≫ NatTrans.app t.ι X) zero ≫
      ((Functor.const WalkingParallelPair).obj t.pt).map left
[PROOFSTEP]
dsimp
[GOAL]
case left
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cocone F
⊢ F.map left ≫ 𝟙 (F.obj one) ≫ NatTrans.app t.ι one = (𝟙 (F.obj zero) ≫ NatTrans.app t.ι zero) ≫ 𝟙 t.pt
[PROOFSTEP]
simp
[GOAL]
case right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cocone F
⊢ (parallelPair (F.map left) (F.map right)).map right ≫
      (fun X => eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X) ≫ NatTrans.app t.ι X) one =
    (fun X => eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X) ≫ NatTrans.app t.ι X) zero ≫
      ((Functor.const WalkingParallelPair).obj t.pt).map right
[PROOFSTEP]
{dsimp; simp
}
[GOAL]
case right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cocone F
⊢ (parallelPair (F.map left) (F.map right)).map right ≫
      (fun X => eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X) ≫ NatTrans.app t.ι X) one =
    (fun X => eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X) ≫ NatTrans.app t.ι X) zero ≫
      ((Functor.const WalkingParallelPair).obj t.pt).map right
[PROOFSTEP]
dsimp
[GOAL]
case right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cocone F
⊢ F.map right ≫ 𝟙 (F.obj one) ≫ NatTrans.app t.ι one = (𝟙 (F.obj zero) ≫ NatTrans.app t.ι zero) ≫ 𝟙 t.pt
[PROOFSTEP]
simp
[GOAL]
case id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cocone F
X✝ : WalkingParallelPair
⊢ (parallelPair (F.map left) (F.map right)).map (WalkingParallelPairHom.id X✝) ≫
      (fun X => eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X) ≫ NatTrans.app t.ι X) X✝ =
    (fun X => eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X) ≫ NatTrans.app t.ι X) X✝ ≫
      ((Functor.const WalkingParallelPair).obj t.pt).map (WalkingParallelPairHom.id X✝)
[PROOFSTEP]
{dsimp; simp
}
[GOAL]
case id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cocone F
X✝ : WalkingParallelPair
⊢ (parallelPair (F.map left) (F.map right)).map (WalkingParallelPairHom.id X✝) ≫
      (fun X => eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X) ≫ NatTrans.app t.ι X) X✝ =
    (fun X => eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X = F.obj X) ≫ NatTrans.app t.ι X) X✝ ≫
      ((Functor.const WalkingParallelPair).obj t.pt).map (WalkingParallelPairHom.id X✝)
[PROOFSTEP]
dsimp
[GOAL]
case id
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cocone F
X✝ : WalkingParallelPair
⊢ (parallelPair (F.map left) (F.map right)).map (𝟙 X✝) ≫
      eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X✝ = F.obj X✝) ≫ NatTrans.app t.ι X✝ =
    (eqToHom (_ : (parallelPair (F.map left) (F.map right)).obj X✝ = F.obj X✝) ≫ NatTrans.app t.ι X✝) ≫ 𝟙 t.pt
[PROOFSTEP]
simp
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cone F
j : WalkingParallelPair
⊢ F.obj j = (parallelPair (F.map left) (F.map right)).obj j
[PROOFSTEP]
aesop
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
F : WalkingParallelPair ⥤ C
t : Cocone F
j : WalkingParallelPair
⊢ (parallelPair (F.map left) (F.map right)).obj j = F.obj j
[PROOFSTEP]
aesop
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
s t : Fork f g
k : s.pt ⟶ t.pt
w : k ≫ ι t = ι s
⊢ ∀ (j : WalkingParallelPair), k ≫ NatTrans.app t.π j = NatTrans.app s.π j
[PROOFSTEP]
rintro ⟨_ | _⟩
[GOAL]
case zero
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
s t : Fork f g
k : s.pt ⟶ t.pt
w : k ≫ ι t = ι s
⊢ k ≫ NatTrans.app t.π zero = NatTrans.app s.π zero
[PROOFSTEP]
exact w
[GOAL]
case one
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
s t : Fork f g
k : s.pt ⟶ t.pt
w : k ≫ ι t = ι s
⊢ k ≫ NatTrans.app t.π one = NatTrans.app s.π one
[PROOFSTEP]
simp only [Fork.app_one_eq_ι_comp_left, ← Category.assoc]
[GOAL]
case one
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
s t : Fork f g
k : s.pt ⟶ t.pt
w : k ≫ ι t = ι s
⊢ (k ≫ ι t) ≫ f = ι s ≫ f
[PROOFSTEP]
congr
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
s t : Fork f g
i : s.pt ≅ t.pt
w : autoParam (i.hom ≫ ι t = ι s) _auto✝
⊢ i.inv ≫ ι s = ι t
[PROOFSTEP]
rw [← w, Iso.inv_hom_id_assoc]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Fork f g
⊢ c.pt ≅ (ofι (ι c) (_ : ι c ≫ f = ι c ≫ g)).pt
[PROOFSTEP]
simp only [Fork.ofι_pt, Functor.const_obj_obj]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Fork f g
⊢ c.pt ≅ c.pt
[PROOFSTEP]
rfl
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Fork f g
⊢ (_root_.id (Iso.refl c.pt)).hom ≫ ι (ofι (ι c) (_ : ι c ≫ f = ι c ≫ g)) = ι c
[PROOFSTEP]
simp
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
s t : Cofork f g
k : s.pt ⟶ t.pt
w : π s ≫ k = π t
⊢ ∀ (j : WalkingParallelPair), NatTrans.app s.ι j ≫ k = NatTrans.app t.ι j
[PROOFSTEP]
rintro ⟨_ | _⟩
[GOAL]
case zero
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
s t : Cofork f g
k : s.pt ⟶ t.pt
w : π s ≫ k = π t
⊢ NatTrans.app s.ι zero ≫ k = NatTrans.app t.ι zero
[PROOFSTEP]
simp [Cofork.app_zero_eq_comp_π_left, w]
[GOAL]
case one
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
s t : Cofork f g
k : s.pt ⟶ t.pt
w : π s ≫ k = π t
⊢ NatTrans.app s.ι one ≫ k = NatTrans.app t.ι one
[PROOFSTEP]
exact w
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f✝ g : X ⟶ Y
s t : Fork f✝ g
f : s ⟶ t
⊢ f.Hom ≫ ι t = ι s
[PROOFSTEP]
cases s
[GOAL]
case mk
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f✝ g : X ⟶ Y
t : Fork f✝ g
pt✝ : C
π✝ : (Functor.const WalkingParallelPair).obj pt✝ ⟶ parallelPair f✝ g
f : { pt := pt✝, π := π✝ } ⟶ t
⊢ f.Hom ≫ ι t = ι { pt := pt✝, π := π✝ }
[PROOFSTEP]
cases t
[GOAL]
case mk.mk
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f✝ g : X ⟶ Y
pt✝¹ : C
π✝¹ : (Functor.const WalkingParallelPair).obj pt✝¹ ⟶ parallelPair f✝ g
pt✝ : C
π✝ : (Functor.const WalkingParallelPair).obj pt✝ ⟶ parallelPair f✝ g
f : { pt := pt✝¹, π := π✝¹ } ⟶ { pt := pt✝, π := π✝ }
⊢ f.Hom ≫ ι { pt := pt✝, π := π✝ } = ι { pt := pt✝¹, π := π✝¹ }
[PROOFSTEP]
cases f
[GOAL]
case mk.mk.mk
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
pt✝¹ : C
π✝¹ : (Functor.const WalkingParallelPair).obj pt✝¹ ⟶ parallelPair f g
pt✝ : C
π✝ : (Functor.const WalkingParallelPair).obj pt✝ ⟶ parallelPair f g
Hom✝ : { pt := pt✝¹, π := π✝¹ }.pt ⟶ { pt := pt✝, π := π✝ }.pt
w✝ :
  ∀ (j : WalkingParallelPair),
    Hom✝ ≫ NatTrans.app { pt := pt✝, π := π✝ }.π j = NatTrans.app { pt := pt✝¹, π := π✝¹ }.π j
⊢ (ConeMorphism.mk Hom✝).Hom ≫ ι { pt := pt✝, π := π✝ } = ι { pt := pt✝¹, π := π✝¹ }
[PROOFSTEP]
aesop
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f✝ g : X ⟶ Y
s t : Cofork f✝ g
f : s ⟶ t
⊢ Cofork.π s ≫ f.Hom = Cofork.π t
[PROOFSTEP]
cases s
[GOAL]
case mk
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f✝ g : X ⟶ Y
t : Cofork f✝ g
pt✝ : C
ι✝ : parallelPair f✝ g ⟶ (Functor.const WalkingParallelPair).obj pt✝
f : { pt := pt✝, ι := ι✝ } ⟶ t
⊢ Cofork.π { pt := pt✝, ι := ι✝ } ≫ f.Hom = Cofork.π t
[PROOFSTEP]
cases t
[GOAL]
case mk.mk
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f✝ g : X ⟶ Y
pt✝¹ : C
ι✝¹ : parallelPair f✝ g ⟶ (Functor.const WalkingParallelPair).obj pt✝¹
pt✝ : C
ι✝ : parallelPair f✝ g ⟶ (Functor.const WalkingParallelPair).obj pt✝
f : { pt := pt✝¹, ι := ι✝¹ } ⟶ { pt := pt✝, ι := ι✝ }
⊢ Cofork.π { pt := pt✝¹, ι := ι✝¹ } ≫ f.Hom = Cofork.π { pt := pt✝, ι := ι✝ }
[PROOFSTEP]
cases f
[GOAL]
case mk.mk.mk
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
pt✝¹ : C
ι✝¹ : parallelPair f g ⟶ (Functor.const WalkingParallelPair).obj pt✝¹
pt✝ : C
ι✝ : parallelPair f g ⟶ (Functor.const WalkingParallelPair).obj pt✝
Hom✝ : { pt := pt✝¹, ι := ι✝¹ }.pt ⟶ { pt := pt✝, ι := ι✝ }.pt
w✝ :
  ∀ (j : WalkingParallelPair),
    NatTrans.app { pt := pt✝¹, ι := ι✝¹ }.ι j ≫ Hom✝ = NatTrans.app { pt := pt✝, ι := ι✝ }.ι j
⊢ Cofork.π { pt := pt✝¹, ι := ι✝¹ } ≫ (CoconeMorphism.mk Hom✝).Hom = Cofork.π { pt := pt✝, ι := ι✝ }
[PROOFSTEP]
aesop
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
s t : Cofork f g
i : s.pt ≅ t.pt
w : autoParam (π s ≫ i.hom = π t) _auto✝
⊢ π t ≫ i.inv = π s
[PROOFSTEP]
rw [Iso.comp_inv_eq, w]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Cofork f g
⊢ c.pt ≅ (ofπ (π c) (_ : f ≫ π c = g ≫ π c)).pt
[PROOFSTEP]
simp only [Cofork.ofπ_pt, Functor.const_obj_obj]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Cofork f g
⊢ c.pt ≅ c.pt
[PROOFSTEP]
rfl
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Cofork f g
⊢ π c ≫ (_root_.id (Iso.refl c.pt)).hom = π (ofπ (π c) (_ : f ≫ π c = g ≫ π c))
[PROOFSTEP]
dsimp
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Cofork f g
⊢ π c ≫ 𝟙 c.pt = π c
[PROOFSTEP]
simp
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
inst✝ : HasEqualizer f g
⊢ (Iso.refl (limit.cone (parallelPair f g)).pt).hom ≫
      Fork.ι (Fork.ofι (equalizer.ι f g) (_ : equalizer.ι f g ≫ f = equalizer.ι f g ≫ g)) =
    Fork.ι (limit.cone (parallelPair f g))
[PROOFSTEP]
aesop
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
h✝ : f = g
s : Fork f g
m : s.pt ⟶ (idFork h✝).pt
h : m ≫ Fork.ι (idFork h✝) = Fork.ι s
⊢ m = (fun s => Fork.ι s) s
[PROOFSTEP]
convert h
[GOAL]
case h.e'_2.h
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
h✝ : f = g
s : Fork f g
m : s.pt ⟶ (idFork h✝).pt
h : m ≫ Fork.ι (idFork h✝) = Fork.ι s
e_1✝ : (s.pt ⟶ (idFork h✝).pt) = (s.pt ⟶ (parallelPair f g).obj zero)
⊢ m = m ≫ Fork.ι (idFork h✝)
[PROOFSTEP]
exact (Category.comp_id _).symm
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
⊢ 𝟙 X ≫ f = 𝟙 X ≫ f
[PROOFSTEP]
simp
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
⊢ (isoSourceOfSelf f).inv = lift (𝟙 X) (_ : 𝟙 X ≫ f = 𝟙 X ≫ f)
[PROOFSTEP]
ext
[GOAL]
case h
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
⊢ (isoSourceOfSelf f).inv ≫ ι f f = lift (𝟙 X) (_ : 𝟙 X ≫ f = 𝟙 X ≫ f) ≫ ι f f
[PROOFSTEP]
simp [equalizer.isoSourceOfSelf]
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
inst✝ : HasCoequalizer f g
⊢ Cofork.π (colimit.cocone (parallelPair f g)) ≫ (Iso.refl (colimit.cocone (parallelPair f g)).pt).hom =
    Cofork.π (Cofork.ofπ (coequalizer.π f g) (_ : f ≫ coequalizer.π f g = g ≫ coequalizer.π f g))
[PROOFSTEP]
aesop
[GOAL]
C : Type u
inst✝² : Category.{v, u} C
X Y : C
f g : X ⟶ Y
inst✝¹ : HasCoequalizer f g
X' Y' Z : C
f' g' : X' ⟶ Y'
inst✝ : HasCoequalizer f' g'
p : X ⟶ X'
q : Y ⟶ Y'
wf : f ≫ q = p ≫ f'
wg : g ≫ q = p ≫ g'
h : Y' ⟶ Z
wh : f' ≫ h = g' ≫ h
⊢ π f g ≫ colimMap (parallelPairHom f g f' g' p q wf wg) ≫ desc h wh = q ≫ h
[PROOFSTEP]
rw [ι_colimMap_assoc, parallelPairHom_app_one, coequalizer.π_desc]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
h✝ : f = g
s : Cofork f g
m : (idCofork h✝).pt ⟶ s.pt
h : Cofork.π (idCofork h✝) ≫ m = Cofork.π s
⊢ m = (fun s => Cofork.π s) s
[PROOFSTEP]
convert h
[GOAL]
case h.e'_2.h
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
h✝ : f = g
s : Cofork f g
m : (idCofork h✝).pt ⟶ s.pt
h : Cofork.π (idCofork h✝) ≫ m = Cofork.π s
e_1✝ : ((idCofork h✝).pt ⟶ s.pt) = ((parallelPair f g).obj one ⟶ s.pt)
⊢ m = Cofork.π (idCofork h✝) ≫ m
[PROOFSTEP]
exact (Category.id_comp _).symm
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
⊢ f ≫ 𝟙 Y = f ≫ 𝟙 Y
[PROOFSTEP]
simp
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
⊢ (isoTargetOfSelf f).hom = desc (𝟙 Y) (_ : f ≫ 𝟙 Y = f ≫ 𝟙 Y)
[PROOFSTEP]
ext
[GOAL]
case h
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
⊢ π f f ≫ (isoTargetOfSelf f).hom = π f f ≫ desc (𝟙 Y) (_ : f ≫ 𝟙 Y = f ≫ 𝟙 Y)
[PROOFSTEP]
simp [coequalizer.isoTargetOfSelf]
[GOAL]
C : Type u
inst✝³ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
D : Type u₂
inst✝² : Category.{v₂, u₂} D
G : C ⥤ D
inst✝¹ : HasEqualizer f g
inst✝ : HasEqualizer (G.map f) (G.map g)
⊢ G.map (equalizer.ι f g) ≫ G.map f = G.map (equalizer.ι f g) ≫ G.map g
[PROOFSTEP]
simp only [← G.map_comp]
[GOAL]
C : Type u
inst✝³ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
D : Type u₂
inst✝² : Category.{v₂, u₂} D
G : C ⥤ D
inst✝¹ : HasEqualizer f g
inst✝ : HasEqualizer (G.map f) (G.map g)
⊢ G.map (equalizer.ι f g ≫ f) = G.map (equalizer.ι f g ≫ g)
[PROOFSTEP]
rw [equalizer.condition]
[GOAL]
C : Type u
inst✝³ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
D : Type u₂
inst✝² : Category.{v₂, u₂} D
G : C ⥤ D
inst✝¹ : HasEqualizer f g
inst✝ : HasEqualizer (G.map f) (G.map g)
Z : C
h : Z ⟶ X
w : h ≫ f = h ≫ g
⊢ G.map h ≫ G.map f = G.map h ≫ G.map g
[PROOFSTEP]
simp only [← G.map_comp, w]
[GOAL]
C : Type u
inst✝³ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
D : Type u₂
inst✝² : Category.{v₂, u₂} D
G : C ⥤ D
inst✝¹ : HasEqualizer f g
inst✝ : HasEqualizer (G.map f) (G.map g)
Z : C
h : Z ⟶ X
w : h ≫ f = h ≫ g
⊢ G.map (equalizer.lift h w) ≫ equalizerComparison f g G =
    equalizer.lift (G.map h) (_ : G.map h ≫ G.map f = G.map h ≫ G.map g)
[PROOFSTEP]
apply equalizer.hom_ext
[GOAL]
case h
C : Type u
inst✝³ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
D : Type u₂
inst✝² : Category.{v₂, u₂} D
G : C ⥤ D
inst✝¹ : HasEqualizer f g
inst✝ : HasEqualizer (G.map f) (G.map g)
Z : C
h : Z ⟶ X
w : h ≫ f = h ≫ g
⊢ (G.map (equalizer.lift h w) ≫ equalizerComparison f g G) ≫ equalizer.ι (G.map f) (G.map g) =
    equalizer.lift (G.map h) (_ : G.map h ≫ G.map f = G.map h ≫ G.map g) ≫ equalizer.ι (G.map f) (G.map g)
[PROOFSTEP]
simp [← G.map_comp]
[GOAL]
C : Type u
inst✝³ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
D : Type u₂
inst✝² : Category.{v₂, u₂} D
G : C ⥤ D
inst✝¹ : HasCoequalizer f g
inst✝ : HasCoequalizer (G.map f) (G.map g)
⊢ G.map f ≫ G.map (coequalizer.π f g) = G.map g ≫ G.map (coequalizer.π f g)
[PROOFSTEP]
simp only [← G.map_comp]
[GOAL]
C : Type u
inst✝³ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
D : Type u₂
inst✝² : Category.{v₂, u₂} D
G : C ⥤ D
inst✝¹ : HasCoequalizer f g
inst✝ : HasCoequalizer (G.map f) (G.map g)
⊢ G.map (f ≫ coequalizer.π f g) = G.map (g ≫ coequalizer.π f g)
[PROOFSTEP]
rw [coequalizer.condition]
[GOAL]
C : Type u
inst✝³ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
D : Type u₂
inst✝² : Category.{v₂, u₂} D
G : C ⥤ D
inst✝¹ : HasCoequalizer f g
inst✝ : HasCoequalizer (G.map f) (G.map g)
Z : C
h : Y ⟶ Z
w : f ≫ h = g ≫ h
⊢ G.map f ≫ G.map h = G.map g ≫ G.map h
[PROOFSTEP]
simp only [← G.map_comp, w]
[GOAL]
C : Type u
inst✝³ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
D : Type u₂
inst✝² : Category.{v₂, u₂} D
G : C ⥤ D
inst✝¹ : HasCoequalizer f g
inst✝ : HasCoequalizer (G.map f) (G.map g)
Z : C
h : Y ⟶ Z
w : f ≫ h = g ≫ h
⊢ coequalizerComparison f g G ≫ G.map (coequalizer.desc h w) =
    coequalizer.desc (G.map h) (_ : G.map f ≫ G.map h = G.map g ≫ G.map h)
[PROOFSTEP]
apply coequalizer.hom_ext
[GOAL]
case h
C : Type u
inst✝³ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
D : Type u₂
inst✝² : Category.{v₂, u₂} D
G : C ⥤ D
inst✝¹ : HasCoequalizer f g
inst✝ : HasCoequalizer (G.map f) (G.map g)
Z : C
h : Y ⟶ Z
w : f ≫ h = g ≫ h
⊢ coequalizer.π (G.map f) (G.map g) ≫ coequalizerComparison f g G ≫ G.map (coequalizer.desc h w) =
    coequalizer.π (G.map f) (G.map g) ≫ coequalizer.desc (G.map h) (_ : G.map f ≫ G.map h = G.map g ≫ G.map h)
[PROOFSTEP]
simp [← G.map_comp]
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
inst✝ : IsSplitMono f
⊢ f ≫ 𝟙 Y = f ≫ retraction f ≫ f
[PROOFSTEP]
simp
[GOAL]
C : Type u
inst✝² : Category.{v, u} C
X✝ Y✝ : C
f✝ g : X✝ ⟶ Y✝
inst✝¹ : IsSplitMono f✝
X Y : C
f : X ⟶ Y
inst✝ : IsSplitMono f
s : Fork (𝟙 Y) (retraction f ≫ f)
⊢ (Fork.ι s ≫ retraction f) ≫ Fork.ι (coneOfIsSplitMono f) = Fork.ι s
[PROOFSTEP]
dsimp
[GOAL]
C : Type u
inst✝² : Category.{v, u} C
X✝ Y✝ : C
f✝ g : X✝ ⟶ Y✝
inst✝¹ : IsSplitMono f✝
X Y : C
f : X ⟶ Y
inst✝ : IsSplitMono f
s : Fork (𝟙 Y) (retraction f ≫ f)
⊢ (Fork.ι s ≫ retraction f) ≫ f = Fork.ι s
[PROOFSTEP]
rw [Category.assoc, ← s.condition]
[GOAL]
C : Type u
inst✝² : Category.{v, u} C
X✝ Y✝ : C
f✝ g : X✝ ⟶ Y✝
inst✝¹ : IsSplitMono f✝
X Y : C
f : X ⟶ Y
inst✝ : IsSplitMono f
s : Fork (𝟙 Y) (retraction f ≫ f)
⊢ Fork.ι s ≫ 𝟙 Y = Fork.ι s
[PROOFSTEP]
apply Category.comp_id
[GOAL]
C : Type u
inst✝² : Category.{v, u} C
X✝ Y✝ : C
f✝ g : X✝ ⟶ Y✝
inst✝¹ : IsSplitMono f✝
X Y : C
f : X ⟶ Y
inst✝ : IsSplitMono f
s : Fork (𝟙 Y) (retraction f ≫ f)
m✝ :
  ((Functor.const WalkingParallelPair).obj s.pt).obj zero ⟶
    ((Functor.const WalkingParallelPair).obj (coneOfIsSplitMono f).pt).obj zero
hm : m✝ ≫ Fork.ι (coneOfIsSplitMono f) = Fork.ι s
⊢ m✝ = Fork.ι s ≫ retraction f
[PROOFSTEP]
simp [← hm]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Fork f g
i : IsLimit c
Z : C
h : Y ⟶ Z
hm : Mono h
⊢ Fork.ι c ≫ f ≫ h = Fork.ι c ≫ g ≫ h
[PROOFSTEP]
simp only [← Category.assoc]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Fork f g
i : IsLimit c
Z : C
h : Y ⟶ Z
hm : Mono h
⊢ (Fork.ι c ≫ f) ≫ h = (Fork.ι c ≫ g) ≫ h
[PROOFSTEP]
exact congrArg (· ≫ h) c.condition
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Fork f g
i : IsLimit c
Z : C
h : Y ⟶ Z
hm : Mono h
this : Fork.ι c ≫ f ≫ h = Fork.ι c ≫ g ≫ h
⊢ Fork.ι c ≫ f ≫ h = Fork.ι c ≫ g ≫ h
[PROOFSTEP]
simp [this]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Fork f g
i : IsLimit c
Z : C
h : Y ⟶ Z
hm : Mono h
s : Fork (f ≫ h) (g ≫ h)
⊢ Fork.ι s ≫ f = Fork.ι s ≫ g
[PROOFSTEP]
apply hm.right_cancellation
[GOAL]
case a
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Fork f g
i : IsLimit c
Z : C
h : Y ⟶ Z
hm : Mono h
s : Fork (f ≫ h) (g ≫ h)
⊢ (Fork.ι s ≫ f) ≫ h = (Fork.ι s ≫ g) ≫ h
[PROOFSTEP]
simp [s.condition]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Fork f g
i : IsLimit c
Z : C
h : Y ⟶ Z
hm✝ : Mono h
s : Fork (f ≫ h) (g ≫ h)
s' : Fork f g := Fork.ofι (Fork.ι s) (_ : Fork.ι s ≫ f = Fork.ι s ≫ g)
l : { l // l ≫ Fork.ι c = Fork.ι s' } := Fork.IsLimit.lift' i (Fork.ι s') (_ : Fork.ι s' ≫ f = Fork.ι s' ≫ g)
m✝ :
  ((Functor.const WalkingParallelPair).obj s.pt).obj zero ⟶
    ((Functor.const WalkingParallelPair).obj (Fork.ofι (Fork.ι c) (_ : Fork.ι c ≫ f ≫ h = Fork.ι c ≫ g ≫ h)).pt).obj
      zero
hm : m✝ ≫ Fork.ι (Fork.ofι (Fork.ι c) (_ : Fork.ι c ≫ f ≫ h = Fork.ι c ≫ g ≫ h)) = Fork.ι s
⊢ m✝ = ↑l
[PROOFSTEP]
apply Fork.IsLimit.hom_ext i
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Fork f g
i : IsLimit c
Z : C
h : Y ⟶ Z
hm✝ : Mono h
s : Fork (f ≫ h) (g ≫ h)
s' : Fork f g := Fork.ofι (Fork.ι s) (_ : Fork.ι s ≫ f = Fork.ι s ≫ g)
l : { l // l ≫ Fork.ι c = Fork.ι s' } := Fork.IsLimit.lift' i (Fork.ι s') (_ : Fork.ι s' ≫ f = Fork.ι s' ≫ g)
m✝ :
  ((Functor.const WalkingParallelPair).obj s.pt).obj zero ⟶
    ((Functor.const WalkingParallelPair).obj (Fork.ofι (Fork.ι c) (_ : Fork.ι c ≫ f ≫ h = Fork.ι c ≫ g ≫ h)).pt).obj
      zero
hm : m✝ ≫ Fork.ι (Fork.ofι (Fork.ι c) (_ : Fork.ι c ≫ f ≫ h = Fork.ι c ≫ g ≫ h)) = Fork.ι s
⊢ m✝ ≫ Fork.ι c = ↑l ≫ Fork.ι c
[PROOFSTEP]
rw [Fork.ι_ofι] at hm
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Fork f g
i : IsLimit c
Z : C
h : Y ⟶ Z
hm✝ : Mono h
s : Fork (f ≫ h) (g ≫ h)
s' : Fork f g := Fork.ofι (Fork.ι s) (_ : Fork.ι s ≫ f = Fork.ι s ≫ g)
l : { l // l ≫ Fork.ι c = Fork.ι s' } := Fork.IsLimit.lift' i (Fork.ι s') (_ : Fork.ι s' ≫ f = Fork.ι s' ≫ g)
m✝ :
  ((Functor.const WalkingParallelPair).obj s.pt).obj zero ⟶
    ((Functor.const WalkingParallelPair).obj (Fork.ofι (Fork.ι c) (_ : Fork.ι c ≫ f ≫ h = Fork.ι c ≫ g ≫ h)).pt).obj
      zero
hm : m✝ ≫ Fork.ι c = Fork.ι s
⊢ m✝ ≫ Fork.ι c = ↑l ≫ Fork.ι c
[PROOFSTEP]
rw [hm]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Fork f g
i : IsLimit c
Z : C
h : Y ⟶ Z
hm✝ : Mono h
s : Fork (f ≫ h) (g ≫ h)
s' : Fork f g := Fork.ofι (Fork.ι s) (_ : Fork.ι s ≫ f = Fork.ι s ≫ g)
l : { l // l ≫ Fork.ι c = Fork.ι s' } := Fork.IsLimit.lift' i (Fork.ι s') (_ : Fork.ι s' ≫ f = Fork.ι s' ≫ g)
m✝ :
  ((Functor.const WalkingParallelPair).obj s.pt).obj zero ⟶
    ((Functor.const WalkingParallelPair).obj (Fork.ofι (Fork.ι c) (_ : Fork.ι c ≫ f ≫ h = Fork.ι c ≫ g ≫ h)).pt).obj
      zero
hm : m✝ ≫ Fork.ι c = Fork.ι s
⊢ Fork.ι s = ↑l ≫ Fork.ι c
[PROOFSTEP]
exact l.2.symm
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X✝ Y : C
f✝ g : X✝ ⟶ Y
X : C
f : X ⟶ X
hf : f ≫ f = f
c : Fork (𝟙 X) f
i : IsLimit c
⊢ f ≫ 𝟙 X = f ≫ f
[PROOFSTEP]
simp [hf]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X✝ Y : C
f✝ g : X✝ ⟶ Y
X : C
f : X ⟶ X
hf : f ≫ f = f
c : Fork (𝟙 X) f
i : IsLimit c
⊢ Fork.ι c ≫ IsLimit.lift i (Fork.ofι f (_ : f ≫ 𝟙 X = f ≫ f)) =
    𝟙 (((Functor.const WalkingParallelPair).obj c.pt).obj zero)
[PROOFSTEP]
letI := mono_of_isLimit_fork i
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X✝ Y : C
f✝ g : X✝ ⟶ Y
X : C
f : X ⟶ X
hf : f ≫ f = f
c : Fork (𝟙 X) f
i : IsLimit c
this : Mono (Fork.ι c) := mono_of_isLimit_fork i
⊢ Fork.ι c ≫ IsLimit.lift i (Fork.ofι f (_ : f ≫ 𝟙 X = f ≫ f)) =
    𝟙 (((Functor.const WalkingParallelPair).obj c.pt).obj zero)
[PROOFSTEP]
rw [← cancel_mono_id c.ι, Category.assoc, Fork.IsLimit.lift_ι, Fork.ι_ofι, ← c.condition]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X✝ Y : C
f✝ g : X✝ ⟶ Y
X : C
f : X ⟶ X
hf : f ≫ f = f
c : Fork (𝟙 X) f
i : IsLimit c
this : Mono (Fork.ι c) := mono_of_isLimit_fork i
⊢ Fork.ι c ≫ 𝟙 X = Fork.ι c
[PROOFSTEP]
exact Category.comp_id c.ι
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
inst✝ : IsSplitEpi f
⊢ 𝟙 X ≫ f = (f ≫ section_ f) ≫ f
[PROOFSTEP]
simp
[GOAL]
C : Type u
inst✝² : Category.{v, u} C
X✝ Y✝ : C
f✝ g : X✝ ⟶ Y✝
inst✝¹ : IsSplitEpi f✝
X Y : C
f : X ⟶ Y
inst✝ : IsSplitEpi f
s : Cofork (𝟙 X) (f ≫ section_ f)
⊢ Cofork.π (coconeOfIsSplitEpi f) ≫ section_ f ≫ Cofork.π s = Cofork.π s
[PROOFSTEP]
dsimp
[GOAL]
C : Type u
inst✝² : Category.{v, u} C
X✝ Y✝ : C
f✝ g : X✝ ⟶ Y✝
inst✝¹ : IsSplitEpi f✝
X Y : C
f : X ⟶ Y
inst✝ : IsSplitEpi f
s : Cofork (𝟙 X) (f ≫ section_ f)
⊢ f ≫ section_ f ≫ Cofork.π s = Cofork.π s
[PROOFSTEP]
rw [← Category.assoc, ← s.condition, Category.id_comp]
[GOAL]
C : Type u
inst✝² : Category.{v, u} C
X✝ Y✝ : C
f✝ g : X✝ ⟶ Y✝
inst✝¹ : IsSplitEpi f✝
X Y : C
f : X ⟶ Y
inst✝ : IsSplitEpi f
s : Cofork (𝟙 X) (f ≫ section_ f)
m✝ :
  ((Functor.const WalkingParallelPair).obj (coconeOfIsSplitEpi f).pt).obj one ⟶
    ((Functor.const WalkingParallelPair).obj s.pt).obj one
hm : Cofork.π (coconeOfIsSplitEpi f) ≫ m✝ = Cofork.π s
⊢ m✝ = section_ f ≫ Cofork.π s
[PROOFSTEP]
simp [← hm]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Cofork f g
i : IsColimit c
W : C
h : W ⟶ X
hm : Epi h
⊢ (h ≫ f) ≫ Cofork.π c = (h ≫ g) ≫ Cofork.π c
[PROOFSTEP]
simp only [Category.assoc]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Cofork f g
i : IsColimit c
W : C
h : W ⟶ X
hm : Epi h
⊢ h ≫ f ≫ Cofork.π c = h ≫ g ≫ Cofork.π c
[PROOFSTEP]
exact congrArg (h ≫ ·) c.condition
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Cofork f g
i : IsColimit c
W : C
h : W ⟶ X
hm : Epi h
s : Cofork (h ≫ f) (h ≫ g)
⊢ f ≫ Cofork.π s = g ≫ Cofork.π s
[PROOFSTEP]
apply hm.left_cancellation
[GOAL]
case a
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Cofork f g
i : IsColimit c
W : C
h : W ⟶ X
hm : Epi h
s : Cofork (h ≫ f) (h ≫ g)
⊢ h ≫ f ≫ Cofork.π s = h ≫ g ≫ Cofork.π s
[PROOFSTEP]
simp_rw [← Category.assoc, s.condition]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Cofork f g
i : IsColimit c
W : C
h : W ⟶ X
hm✝ : Epi h
s : Cofork (h ≫ f) (h ≫ g)
s' : Cofork f g := Cofork.ofπ (Cofork.π s) (_ : f ≫ Cofork.π s = g ≫ Cofork.π s)
l : { l // Cofork.π c ≫ l = Cofork.π s' } :=
  Cofork.IsColimit.desc' i (Cofork.π s') (_ : f ≫ Cofork.π s' = g ≫ Cofork.π s')
m✝ :
  ((Functor.const WalkingParallelPair).obj
          (Cofork.ofπ (Cofork.π c) (_ : (h ≫ f) ≫ Cofork.π c = (h ≫ g) ≫ Cofork.π c)).pt).obj
      one ⟶
    ((Functor.const WalkingParallelPair).obj s.pt).obj one
hm : Cofork.π (Cofork.ofπ (Cofork.π c) (_ : (h ≫ f) ≫ Cofork.π c = (h ≫ g) ≫ Cofork.π c)) ≫ m✝ = Cofork.π s
⊢ m✝ = ↑l
[PROOFSTEP]
apply Cofork.IsColimit.hom_ext i
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Cofork f g
i : IsColimit c
W : C
h : W ⟶ X
hm✝ : Epi h
s : Cofork (h ≫ f) (h ≫ g)
s' : Cofork f g := Cofork.ofπ (Cofork.π s) (_ : f ≫ Cofork.π s = g ≫ Cofork.π s)
l : { l // Cofork.π c ≫ l = Cofork.π s' } :=
  Cofork.IsColimit.desc' i (Cofork.π s') (_ : f ≫ Cofork.π s' = g ≫ Cofork.π s')
m✝ :
  ((Functor.const WalkingParallelPair).obj
          (Cofork.ofπ (Cofork.π c) (_ : (h ≫ f) ≫ Cofork.π c = (h ≫ g) ≫ Cofork.π c)).pt).obj
      one ⟶
    ((Functor.const WalkingParallelPair).obj s.pt).obj one
hm : Cofork.π (Cofork.ofπ (Cofork.π c) (_ : (h ≫ f) ≫ Cofork.π c = (h ≫ g) ≫ Cofork.π c)) ≫ m✝ = Cofork.π s
⊢ Cofork.π c ≫ m✝ = Cofork.π c ≫ ↑l
[PROOFSTEP]
rw [Cofork.π_ofπ] at hm
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Cofork f g
i : IsColimit c
W : C
h : W ⟶ X
hm✝ : Epi h
s : Cofork (h ≫ f) (h ≫ g)
s' : Cofork f g := Cofork.ofπ (Cofork.π s) (_ : f ≫ Cofork.π s = g ≫ Cofork.π s)
l : { l // Cofork.π c ≫ l = Cofork.π s' } :=
  Cofork.IsColimit.desc' i (Cofork.π s') (_ : f ≫ Cofork.π s' = g ≫ Cofork.π s')
m✝ :
  ((Functor.const WalkingParallelPair).obj
          (Cofork.ofπ (Cofork.π c) (_ : (h ≫ f) ≫ Cofork.π c = (h ≫ g) ≫ Cofork.π c)).pt).obj
      one ⟶
    ((Functor.const WalkingParallelPair).obj s.pt).obj one
hm : Cofork.π c ≫ m✝ = Cofork.π s
⊢ Cofork.π c ≫ m✝ = Cofork.π c ≫ ↑l
[PROOFSTEP]
rw [hm]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f g : X ⟶ Y
c : Cofork f g
i : IsColimit c
W : C
h : W ⟶ X
hm✝ : Epi h
s : Cofork (h ≫ f) (h ≫ g)
s' : Cofork f g := Cofork.ofπ (Cofork.π s) (_ : f ≫ Cofork.π s = g ≫ Cofork.π s)
l : { l // Cofork.π c ≫ l = Cofork.π s' } :=
  Cofork.IsColimit.desc' i (Cofork.π s') (_ : f ≫ Cofork.π s' = g ≫ Cofork.π s')
m✝ :
  ((Functor.const WalkingParallelPair).obj
          (Cofork.ofπ (Cofork.π c) (_ : (h ≫ f) ≫ Cofork.π c = (h ≫ g) ≫ Cofork.π c)).pt).obj
      one ⟶
    ((Functor.const WalkingParallelPair).obj s.pt).obj one
hm : Cofork.π c ≫ m✝ = Cofork.π s
⊢ Cofork.π s = Cofork.π c ≫ ↑l
[PROOFSTEP]
exact l.2.symm
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X✝ Y : C
f✝ g : X✝ ⟶ Y
X : C
f : X ⟶ X
hf : f ≫ f = f
c : Cofork (𝟙 X) f
i : IsColimit c
⊢ 𝟙 X ≫ f = f ≫ f
[PROOFSTEP]
simp [hf]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X✝ Y : C
f✝ g : X✝ ⟶ Y
X : C
f : X ⟶ X
hf : f ≫ f = f
c : Cofork (𝟙 X) f
i : IsColimit c
⊢ IsColimit.desc i (Cofork.ofπ f (_ : 𝟙 X ≫ f = f ≫ f)) ≫ Cofork.π c =
    𝟙 (((Functor.const WalkingParallelPair).obj c.pt).obj one)
[PROOFSTEP]
letI := epi_of_isColimit_cofork i
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X✝ Y : C
f✝ g : X✝ ⟶ Y
X : C
f : X ⟶ X
hf : f ≫ f = f
c : Cofork (𝟙 X) f
i : IsColimit c
this : Epi (Cofork.π c) := epi_of_isColimit_cofork i
⊢ IsColimit.desc i (Cofork.ofπ f (_ : 𝟙 X ≫ f = f ≫ f)) ≫ Cofork.π c =
    𝟙 (((Functor.const WalkingParallelPair).obj c.pt).obj one)
[PROOFSTEP]
rw [← cancel_epi_id c.π, ← Category.assoc, Cofork.IsColimit.π_desc, Cofork.π_ofπ, ← c.condition]
[GOAL]
C : Type u
inst✝ : Category.{v, u} C
X✝ Y : C
f✝ g : X✝ ⟶ Y
X : C
f : X ⟶ X
hf : f ≫ f = f
c : Cofork (𝟙 X) f
i : IsColimit c
this : Epi (Cofork.π c) := epi_of_isColimit_cofork i
⊢ 𝟙 X ≫ Cofork.π c = Cofork.π c
[PROOFSTEP]
exact Category.id_comp _