l3lab/ntp-mathlib huggingface dataset:
/-- The function from the colimit monoid to the cone point of any other cocone. -/
def descFun (s : Cocone F) : ColimitType F → s.pt := by
  fapply Quot.lift
  · exact descFunLift F s
  · intro x y r
    

Proof state:
case a
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x y : Prequotient F
r : Setoid.r x y
⊢ descFunLift F s x = descFunLift F s y

Next tactic:
induction r with
    | refl x => rfl
    | symm x y _ h => exact h.symm
    | trans x y z _ _ h₁ h₂ => exact h₁.trans h₂
    | map j j' f x => exact s.w_apply f x
    | mul j x y => exact map_mul _ _ _
    | one j => exact map_one _
    | mul_1 x x' y _ h => exact congr_arg (· * _) h
    | mul_2 x y y' _ h => exact congr_arg (_ * ·) h
    | mul_assoc x y z => exact mul_assoc _ _ _
    | one_mul x => exact one_mul _
    | mul_one x => exact mul_one _
/-- The function from the colimit monoid to the cone point of any other cocone. -/
def descFun (s : Cocone F) : ColimitType F → s.pt := by
  fapply Quot.lift
  · exact descFunLift F s
  · intro x y r
    induction r with
    

Proof state:
case a.refl
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x✝ y x : Prequotient F
⊢ descFunLift F s x = descFunLift F s x

Next tactic:
| refl x => rfl
/-- The function from the colimit monoid to the cone point of any other cocone. -/
def descFun (s : Cocone F) : ColimitType F → s.pt := by
  fapply Quot.lift
  · exact descFunLift F s
  · intro x y r
    induction r with
    | refl x => 

Proof state:
case a.refl
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x✝ y x : Prequotient F
⊢ descFunLift F s x = descFunLift F s x

Next tactic:
rfl
/-- The function from the colimit monoid to the cone point of any other cocone. -/
def descFun (s : Cocone F) : ColimitType F → s.pt := by
  fapply Quot.lift
  · exact descFunLift F s
  · intro x y r
    induction r with
    | refl x => rfl
    

Proof state:
case a.symm
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x✝¹ y✝ x y : Prequotient F
x✝ : Relation F x y
h : descFunLift F s x = descFunLift F s y
⊢ descFunLift F s y = descFunLift F s x

Next tactic:
| symm x y _ h => exact h.symm
/-- The function from the colimit monoid to the cone point of any other cocone. -/
def descFun (s : Cocone F) : ColimitType F → s.pt := by
  fapply Quot.lift
  · exact descFunLift F s
  · intro x y r
    induction r with
    | refl x => rfl
    | symm x y _ h => 

Proof state:
case a.symm
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x✝¹ y✝ x y : Prequotient F
x✝ : Relation F x y
h : descFunLift F s x = descFunLift F s y
⊢ descFunLift F s y = descFunLift F s x

Next tactic:
exact h.symm
/-- The function from the colimit monoid to the cone point of any other cocone. -/
def descFun (s : Cocone F) : ColimitType F → s.pt := by
  fapply Quot.lift
  · exact descFunLift F s
  · intro x y r
    induction r with
    | refl x => rfl
    | symm x y _ h => exact h.symm
    

Proof state:
case a.trans
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x✝² y✝ x y z : Prequotient F
x✝¹ : Relation F x y
x✝ : Relation F y z
h₁ : descFunLift F s x = descFunLift F s y
h₂ : descFunLift F s y = descFunLift F s z
⊢ descFunLift F s x = descFunLift F s z

Next tactic:
| trans x y z _ _ h₁ h₂ => exact h₁.trans h₂
/-- The function from the colimit monoid to the cone point of any other cocone. -/
def descFun (s : Cocone F) : ColimitType F → s.pt := by
  fapply Quot.lift
  · exact descFunLift F s
  · intro x y r
    induction r with
    | refl x => rfl
    | symm x y _ h => exact h.symm
    | trans x y z _ _ h₁ h₂ => 

Proof state:
case a.trans
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x✝² y✝ x y z : Prequotient F
x✝¹ : Relation F x y
x✝ : Relation F y z
h₁ : descFunLift F s x = descFunLift F s y
h₂ : descFunLift F s y = descFunLift F s z
⊢ descFunLift F s x = descFunLift F s z

Next tactic:
exact h₁.trans h₂
/-- The function from the colimit monoid to the cone point of any other cocone. -/
def descFun (s : Cocone F) : ColimitType F → s.pt := by
  fapply Quot.lift
  · exact descFunLift F s
  · intro x y r
    induction r with
    | refl x => rfl
    | symm x y _ h => exact h.symm
    | trans x y z _ _ h₁ h₂ => exact h₁.trans h₂
    

Proof state:
case a.map
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x✝ y : Prequotient F
j j' : J
f : j ⟶ j'
x : ↑(F.obj j)
⊢ descFunLift F s (Prequotient.of j' ((F.map f) x)) = descFunLift F s (Prequotient.of j x)

Next tactic:
| map j j' f x => exact s.w_apply f x
/-- The function from the colimit monoid to the cone point of any other cocone. -/
def descFun (s : Cocone F) : ColimitType F → s.pt := by
  fapply Quot.lift
  · exact descFunLift F s
  · intro x y r
    induction r with
    | refl x => rfl
    | symm x y _ h => exact h.symm
    | trans x y z _ _ h₁ h₂ => exact h₁.trans h₂
    | map j j' f x => 

Proof state:
case a.map
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x✝ y : Prequotient F
j j' : J
f : j ⟶ j'
x : ↑(F.obj j)
⊢ descFunLift F s (Prequotient.of j' ((F.map f) x)) = descFunLift F s (Prequotient.of j x)

Next tactic:
exact s.w_apply f x
/-- The function from the colimit monoid to the cone point of any other cocone. -/
def descFun (s : Cocone F) : ColimitType F → s.pt := by
  fapply Quot.lift
  · exact descFunLift F s
  · intro x y r
    induction r with
    | refl x => rfl
    | symm x y _ h => exact h.symm
    | trans x y z _ _ h₁ h₂ => exact h₁.trans h₂
    | map j j' f x => exact s.w_apply f x
    

Proof state:
case a.mul
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x✝ y✝ : Prequotient F
j : J
x y : ↑(F.obj j)
⊢ descFunLift F s (Prequotient.of j (x * y)) = descFunLift F s (mul (Prequotient.of j x) (Prequotient.of j y))

Next tactic:
| mul j x y => exact map_mul _ _ _
/-- The function from the colimit monoid to the cone point of any other cocone. -/
def descFun (s : Cocone F) : ColimitType F → s.pt := by
  fapply Quot.lift
  · exact descFunLift F s
  · intro x y r
    induction r with
    | refl x => rfl
    | symm x y _ h => exact h.symm
    | trans x y z _ _ h₁ h₂ => exact h₁.trans h₂
    | map j j' f x => exact s.w_apply f x
    | mul j x y => 

Proof state:
case a.mul
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x✝ y✝ : Prequotient F
j : J
x y : ↑(F.obj j)
⊢ descFunLift F s (Prequotient.of j (x * y)) = descFunLift F s (mul (Prequotient.of j x) (Prequotient.of j y))

Next tactic:
exact map_mul _ _ _
/-- The function from the colimit monoid to the cone point of any other cocone. -/
def descFun (s : Cocone F) : ColimitType F → s.pt := by
  fapply Quot.lift
  · exact descFunLift F s
  · intro x y r
    induction r with
    | refl x => rfl
    | symm x y _ h => exact h.symm
    | trans x y z _ _ h₁ h₂ => exact h₁.trans h₂
    | map j j' f x => exact s.w_apply f x
    | mul j x y => exact map_mul _ _ _
    

Proof state:
case a.one
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x y : Prequotient F
j : J
⊢ descFunLift F s (Prequotient.of j 1) = descFunLift F s one

Next tactic:
| one j => exact map_one _
/-- The function from the colimit monoid to the cone point of any other cocone. -/
def descFun (s : Cocone F) : ColimitType F → s.pt := by
  fapply Quot.lift
  · exact descFunLift F s
  · intro x y r
    induction r with
    | refl x => rfl
    | symm x y _ h => exact h.symm
    | trans x y z _ _ h₁ h₂ => exact h₁.trans h₂
    | map j j' f x => exact s.w_apply f x
    | mul j x y => exact map_mul _ _ _
    | one j => 

Proof state:
case a.one
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x y : Prequotient F
j : J
⊢ descFunLift F s (Prequotient.of j 1) = descFunLift F s one

Next tactic:
exact map_one _
/-- The function from the colimit monoid to the cone point of any other cocone. -/
def descFun (s : Cocone F) : ColimitType F → s.pt := by
  fapply Quot.lift
  · exact descFunLift F s
  · intro x y r
    induction r with
    | refl x => rfl
    | symm x y _ h => exact h.symm
    | trans x y z _ _ h₁ h₂ => exact h₁.trans h₂
    | map j j' f x => exact s.w_apply f x
    | mul j x y => exact map_mul _ _ _
    | one j => exact map_one _
    

Proof state:
case a.mul_1
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x✝¹ y✝ x x' y : Prequotient F
x✝ : Relation F x x'
h : descFunLift F s x = descFunLift F s x'
⊢ descFunLift F s (mul x y) = descFunLift F s (mul x' y)

Next tactic:
| mul_1 x x' y _ h => exact congr_arg (· * _) h
/-- The function from the colimit monoid to the cone point of any other cocone. -/
def descFun (s : Cocone F) : ColimitType F → s.pt := by
  fapply Quot.lift
  · exact descFunLift F s
  · intro x y r
    induction r with
    | refl x => rfl
    | symm x y _ h => exact h.symm
    | trans x y z _ _ h₁ h₂ => exact h₁.trans h₂
    | map j j' f x => exact s.w_apply f x
    | mul j x y => exact map_mul _ _ _
    | one j => exact map_one _
    | mul_1 x x' y _ h => 

Proof state:
case a.mul_1
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x✝¹ y✝ x x' y : Prequotient F
x✝ : Relation F x x'
h : descFunLift F s x = descFunLift F s x'
⊢ descFunLift F s (mul x y) = descFunLift F s (mul x' y)

Next tactic:
exact congr_arg (· * _) h
/-- The function from the colimit monoid to the cone point of any other cocone. -/
def descFun (s : Cocone F) : ColimitType F → s.pt := by
  fapply Quot.lift
  · exact descFunLift F s
  · intro x y r
    induction r with
    | refl x => rfl
    | symm x y _ h => exact h.symm
    | trans x y z _ _ h₁ h₂ => exact h₁.trans h₂
    | map j j' f x => exact s.w_apply f x
    | mul j x y => exact map_mul _ _ _
    | one j => exact map_one _
    | mul_1 x x' y _ h => exact congr_arg (· * _) h
    

Proof state:
case a.mul_2
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x✝¹ y✝ x y y' : Prequotient F
x✝ : Relation F y y'
h : descFunLift F s y = descFunLift F s y'
⊢ descFunLift F s (mul x y) = descFunLift F s (mul x y')

Next tactic:
| mul_2 x y y' _ h => exact congr_arg (_ * ·) h
/-- The function from the colimit monoid to the cone point of any other cocone. -/
def descFun (s : Cocone F) : ColimitType F → s.pt := by
  fapply Quot.lift
  · exact descFunLift F s
  · intro x y r
    induction r with
    | refl x => rfl
    | symm x y _ h => exact h.symm
    | trans x y z _ _ h₁ h₂ => exact h₁.trans h₂
    | map j j' f x => exact s.w_apply f x
    | mul j x y => exact map_mul _ _ _
    | one j => exact map_one _
    | mul_1 x x' y _ h => exact congr_arg (· * _) h
    | mul_2 x y y' _ h => 

Proof state:
case a.mul_2
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x✝¹ y✝ x y y' : Prequotient F
x✝ : Relation F y y'
h : descFunLift F s y = descFunLift F s y'
⊢ descFunLift F s (mul x y) = descFunLift F s (mul x y')

Next tactic:
exact congr_arg (_ * ·) h
/-- The function from the colimit monoid to the cone point of any other cocone. -/
def descFun (s : Cocone F) : ColimitType F → s.pt := by
  fapply Quot.lift
  · exact descFunLift F s
  · intro x y r
    induction r with
    | refl x => rfl
    | symm x y _ h => exact h.symm
    | trans x y z _ _ h₁ h₂ => exact h₁.trans h₂
    | map j j' f x => exact s.w_apply f x
    | mul j x y => exact map_mul _ _ _
    | one j => exact map_one _
    | mul_1 x x' y _ h => exact congr_arg (· * _) h
    | mul_2 x y y' _ h => exact congr_arg (_ * ·) h
    

Proof state:
case a.mul_assoc
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x✝ y✝ x y z : Prequotient F
⊢ descFunLift F s (mul (mul x y) z) = descFunLift F s (mul x (mul y z))

Next tactic:
| mul_assoc x y z => exact mul_assoc _ _ _
/-- The function from the colimit monoid to the cone point of any other cocone. -/
def descFun (s : Cocone F) : ColimitType F → s.pt := by
  fapply Quot.lift
  · exact descFunLift F s
  · intro x y r
    induction r with
    | refl x => rfl
    | symm x y _ h => exact h.symm
    | trans x y z _ _ h₁ h₂ => exact h₁.trans h₂
    | map j j' f x => exact s.w_apply f x
    | mul j x y => exact map_mul _ _ _
    | one j => exact map_one _
    | mul_1 x x' y _ h => exact congr_arg (· * _) h
    | mul_2 x y y' _ h => exact congr_arg (_ * ·) h
    | mul_assoc x y z => 

Proof state:
case a.mul_assoc
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x✝ y✝ x y z : Prequotient F
⊢ descFunLift F s (mul (mul x y) z) = descFunLift F s (mul x (mul y z))

Next tactic:
exact mul_assoc _ _ _
/-- The function from the colimit monoid to the cone point of any other cocone. -/
def descFun (s : Cocone F) : ColimitType F → s.pt := by
  fapply Quot.lift
  · exact descFunLift F s
  · intro x y r
    induction r with
    | refl x => rfl
    | symm x y _ h => exact h.symm
    | trans x y z _ _ h₁ h₂ => exact h₁.trans h₂
    | map j j' f x => exact s.w_apply f x
    | mul j x y => exact map_mul _ _ _
    | one j => exact map_one _
    | mul_1 x x' y _ h => exact congr_arg (· * _) h
    | mul_2 x y y' _ h => exact congr_arg (_ * ·) h
    | mul_assoc x y z => exact mul_assoc _ _ _
    

Proof state:
case a.one_mul
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x✝ y x : Prequotient F
⊢ descFunLift F s (mul one x) = descFunLift F s x

Next tactic:
| one_mul x => exact one_mul _
/-- The function from the colimit monoid to the cone point of any other cocone. -/
def descFun (s : Cocone F) : ColimitType F → s.pt := by
  fapply Quot.lift
  · exact descFunLift F s
  · intro x y r
    induction r with
    | refl x => rfl
    | symm x y _ h => exact h.symm
    | trans x y z _ _ h₁ h₂ => exact h₁.trans h₂
    | map j j' f x => exact s.w_apply f x
    | mul j x y => exact map_mul _ _ _
    | one j => exact map_one _
    | mul_1 x x' y _ h => exact congr_arg (· * _) h
    | mul_2 x y y' _ h => exact congr_arg (_ * ·) h
    | mul_assoc x y z => exact mul_assoc _ _ _
    | one_mul x => 

Proof state:
case a.one_mul
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x✝ y x : Prequotient F
⊢ descFunLift F s (mul one x) = descFunLift F s x

Next tactic:
exact one_mul _
/-- The function from the colimit monoid to the cone point of any other cocone. -/
def descFun (s : Cocone F) : ColimitType F → s.pt := by
  fapply Quot.lift
  · exact descFunLift F s
  · intro x y r
    induction r with
    | refl x => rfl
    | symm x y _ h => exact h.symm
    | trans x y z _ _ h₁ h₂ => exact h₁.trans h₂
    | map j j' f x => exact s.w_apply f x
    | mul j x y => exact map_mul _ _ _
    | one j => exact map_one _
    | mul_1 x x' y _ h => exact congr_arg (· * _) h
    | mul_2 x y y' _ h => exact congr_arg (_ * ·) h
    | mul_assoc x y z => exact mul_assoc _ _ _
    | one_mul x => exact one_mul _
    

Proof state:
case a.mul_one
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x✝ y x : Prequotient F
⊢ descFunLift F s (mul x one) = descFunLift F s x

Next tactic:
| mul_one x => exact mul_one _
/-- The function from the colimit monoid to the cone point of any other cocone. -/
def descFun (s : Cocone F) : ColimitType F → s.pt := by
  fapply Quot.lift
  · exact descFunLift F s
  · intro x y r
    induction r with
    | refl x => rfl
    | symm x y _ h => exact h.symm
    | trans x y z _ _ h₁ h₂ => exact h₁.trans h₂
    | map j j' f x => exact s.w_apply f x
    | mul j x y => exact map_mul _ _ _
    | one j => exact map_one _
    | mul_1 x x' y _ h => exact congr_arg (· * _) h
    | mul_2 x y y' _ h => exact congr_arg (_ * ·) h
    | mul_assoc x y z => exact mul_assoc _ _ _
    | one_mul x => exact one_mul _
    | mul_one x => 

Proof state:
case a.mul_one
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x✝ y x : Prequotient F
⊢ descFunLift F s (mul x one) = descFunLift F s x

Next tactic:
exact mul_one _
/-- The monoid homomorphism from the colimit monoid to the cone point of any other cocone. -/
def descMorphism (s : Cocone F) : colimit F ⟶ s.pt where
  toFun := descFun F s
  map_one' := rfl
  map_mul' x y := by
    

Proof state:
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
x y : ↑(colimit F)
⊢ OneHom.toFun { toFun := descFun F s, map_one' := (_ : descFun F s 1 = descFun F s 1) } (x * y) =
    OneHom.toFun { toFun := descFun F s, map_one' := (_ : descFun F s 1 = descFun F s 1) } x *
      OneHom.toFun { toFun := descFun F s, map_one' := (_ : descFun F s 1 = descFun F s 1) } y

Next tactic:
induction x using Quot.inductionOn
/-- The monoid homomorphism from the colimit monoid to the cone point of any other cocone. -/
def descMorphism (s : Cocone F) : colimit F ⟶ s.pt where
  toFun := descFun F s
  map_one' := rfl
  map_mul' x y := by
    induction x using Quot.inductionOn
    

Proof state:
case h
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
y : ↑(colimit F)
a✝ : Prequotient F
⊢ OneHom.toFun { toFun := descFun F s, map_one' := (_ : descFun F s 1 = descFun F s 1) } (Quot.mk Setoid.r a✝ * y) =
    OneHom.toFun { toFun := descFun F s, map_one' := (_ : descFun F s 1 = descFun F s 1) } (Quot.mk Setoid.r a✝) *
      OneHom.toFun { toFun := descFun F s, map_one' := (_ : descFun F s 1 = descFun F s 1) } y

Next tactic:
induction y using Quot.inductionOn
/-- The monoid homomorphism from the colimit monoid to the cone point of any other cocone. -/
def descMorphism (s : Cocone F) : colimit F ⟶ s.pt where
  toFun := descFun F s
  map_one' := rfl
  map_mul' x y := by
    induction x using Quot.inductionOn
    induction y using Quot.inductionOn
    

Proof state:
case h.h
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
a✝¹ a✝ : Prequotient F
⊢ OneHom.toFun { toFun := descFun F s, map_one' := (_ : descFun F s 1 = descFun F s 1) }
      (Quot.mk Setoid.r a✝¹ * Quot.mk Setoid.r a✝) =
    OneHom.toFun { toFun := descFun F s, map_one' := (_ : descFun F s 1 = descFun F s 1) } (Quot.mk Setoid.r a✝¹) *
      OneHom.toFun { toFun := descFun F s, map_one' := (_ : descFun F s 1 = descFun F s 1) } (Quot.mk Setoid.r a✝)

Next tactic:
dsimp [descFun]
/-- The monoid homomorphism from the colimit monoid to the cone point of any other cocone. -/
def descMorphism (s : Cocone F) : colimit F ⟶ s.pt where
  toFun := descFun F s
  map_one' := rfl
  map_mul' x y := by
    induction x using Quot.inductionOn
    induction y using Quot.inductionOn
    dsimp [descFun]
    

Proof state:
case h.h
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
a✝¹ a✝ : Prequotient F
⊢ Quot.lift (descFunLift F s) (_ : ∀ (x y : Prequotient F), Setoid.r x y → descFunLift F s x = descFunLift F s y)
      (Quot.mk Setoid.r a✝¹ * Quot.mk Setoid.r a✝) =
    descFunLift F s a✝¹ * descFunLift F s a✝

Next tactic:
rw [← quot_mul]
/-- The monoid homomorphism from the colimit monoid to the cone point of any other cocone. -/
def descMorphism (s : Cocone F) : colimit F ⟶ s.pt where
  toFun := descFun F s
  map_one' := rfl
  map_mul' x y := by
    induction x using Quot.inductionOn
    induction y using Quot.inductionOn
    dsimp [descFun]
    rw [← quot_mul]
    

Proof state:
case h.h
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
a✝¹ a✝ : Prequotient F
⊢ Quot.lift (descFunLift F s) (_ : ∀ (x y : Prequotient F), Setoid.r x y → descFunLift F s x = descFunLift F s y)
      (Quot.mk Setoid.r (mul a✝¹ a✝)) =
    descFunLift F s a✝¹ * descFunLift F s a✝

Next tactic:
simp only [descFunLift]
/-- Evidence that the proposed colimit is the colimit. -/
def colimitIsColimit : IsColimit (colimitCocone F) where
  desc s := descMorphism F s
  uniq s m w := by
    

Proof state:
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
m : (colimitCocone F).pt ⟶ s.pt
w : ∀ (j : J), (colimitCocone F).ι.app j ≫ m = s.ι.app j
⊢ m = (fun s => descMorphism F s) s

Next tactic:
ext x
/-- Evidence that the proposed colimit is the colimit. -/
def colimitIsColimit : IsColimit (colimitCocone F) where
  desc s := descMorphism F s
  uniq s m w := by
    ext x
    

Proof state:
case w
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
m : (colimitCocone F).pt ⟶ s.pt
w : ∀ (j : J), (colimitCocone F).ι.app j ≫ m = s.ι.app j
x : ↑(colimitCocone F).pt
⊢ m x = ((fun s => descMorphism F s) s) x

Next tactic:
induction' x using Quot.inductionOn with x
/-- Evidence that the proposed colimit is the colimit. -/
def colimitIsColimit : IsColimit (colimitCocone F) where
  desc s := descMorphism F s
  uniq s m w := by
    ext x
    induction' x using Quot.inductionOn with x
    

Proof state:
case w.h
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
m : (colimitCocone F).pt ⟶ s.pt
w : ∀ (j : J), (colimitCocone F).ι.app j ≫ m = s.ι.app j
x : Prequotient F
⊢ m (Quot.mk Setoid.r x) = ((fun s => descMorphism F s) s) (Quot.mk Setoid.r x)

Next tactic:
induction' x with j x x y hx hy
/-- Evidence that the proposed colimit is the colimit. -/
def colimitIsColimit : IsColimit (colimitCocone F) where
  desc s := descMorphism F s
  uniq s m w := by
    ext x
    induction' x using Quot.inductionOn with x
    induction' x with j x x y hx hy
    · 

Proof state:
case w.h.of
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
m : (colimitCocone F).pt ⟶ s.pt
w : ∀ (j : J), (colimitCocone F).ι.app j ≫ m = s.ι.app j
j : J
x : ↑(F.obj j)
⊢ m (Quot.mk Setoid.r (Prequotient.of j x)) = ((fun s => descMorphism F s) s) (Quot.mk Setoid.r (Prequotient.of j x))

Next tactic:
change _ = s.ι.app j _
/-- Evidence that the proposed colimit is the colimit. -/
def colimitIsColimit : IsColimit (colimitCocone F) where
  desc s := descMorphism F s
  uniq s m w := by
    ext x
    induction' x using Quot.inductionOn with x
    induction' x with j x x y hx hy
    · change _ = s.ι.app j _
      

Proof state:
case w.h.of
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
m : (colimitCocone F).pt ⟶ s.pt
w : ∀ (j : J), (colimitCocone F).ι.app j ≫ m = s.ι.app j
j : J
x : ↑(F.obj j)
⊢ m (Quot.mk Setoid.r (Prequotient.of j x)) = (s.ι.app j) x

Next tactic:
rw [← w j]
/-- Evidence that the proposed colimit is the colimit. -/
def colimitIsColimit : IsColimit (colimitCocone F) where
  desc s := descMorphism F s
  uniq s m w := by
    ext x
    induction' x using Quot.inductionOn with x
    induction' x with j x x y hx hy
    · change _ = s.ι.app j _
      rw [← w j]
      

Proof state:
case w.h.of
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
m : (colimitCocone F).pt ⟶ s.pt
w : ∀ (j : J), (colimitCocone F).ι.app j ≫ m = s.ι.app j
j : J
x : ↑(F.obj j)
⊢ m (Quot.mk Setoid.r (Prequotient.of j x)) = ((colimitCocone F).ι.app j ≫ m) x

Next tactic:
rfl
/-- Evidence that the proposed colimit is the colimit. -/
def colimitIsColimit : IsColimit (colimitCocone F) where
  desc s := descMorphism F s
  uniq s m w := by
    ext x
    induction' x using Quot.inductionOn with x
    induction' x with j x x y hx hy
    · change _ = s.ι.app j _
      rw [← w j]
      rfl
    · 

Proof state:
case w.h.one
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
m : (colimitCocone F).pt ⟶ s.pt
w : ∀ (j : J), (colimitCocone F).ι.app j ≫ m = s.ι.app j
⊢ m (Quot.mk Setoid.r one) = ((fun s => descMorphism F s) s) (Quot.mk Setoid.r one)

Next tactic:
rw [quot_one, map_one]
/-- Evidence that the proposed colimit is the colimit. -/
def colimitIsColimit : IsColimit (colimitCocone F) where
  desc s := descMorphism F s
  uniq s m w := by
    ext x
    induction' x using Quot.inductionOn with x
    induction' x with j x x y hx hy
    · change _ = s.ι.app j _
      rw [← w j]
      rfl
    · rw [quot_one, map_one]
      

Proof state:
case w.h.one
J : Type v
inst✝ : SmallCategory J
F : J ⥤ MonCat
s : Cocone F
m : (colimitCocone F).pt ⟶ s.pt
w : ∀ (j : J), (colimitCocone F).ι.app j ≫ m = s.ι.app j
⊢ 1 = ((fun s => descMorphism F s) s) 1

Next tactic:
rfl