category_theory.limits.shapes.typesMathlib.CategoryTheory.Limits.Shapes.Types

This file has been ported!

Changes since the initial port

The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

chore(topology/sheaves): revert universe generalizations from #19153 (#19230)

This reverts commit 13361559.

These are just too difficult to forward port as is because of the max u v =?= max u ?v issue https://github.com/leanprover/lean4/issues/2297.

We have another candidate approach to this, using a new UnivLE typeclass, and I would prefer if we investigated that without the pressure of the port at the same time.

This will delay @hrmacbeth's plans to define meromorphic functions, perhaps.

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -51,28 +51,13 @@ local attribute [tidy] tactic.discrete_cases
 /-- A restatement of `types.lift_π_apply` that uses `pi.π` and `pi.lift`. -/
 @[simp]
 lemma pi_lift_π_apply
-  {β : Type v} (f : β → Type max v u) {P : Type max v u} (s : Π b, P ⟶ f b) (b : β) (x : P) :
-  (pi.π f b : (∏ f) → f b) (@pi.lift β _ _ f _ P s x) = s b x :=
-congr_fun (limit.lift_π (fan.mk P s) ⟨b⟩) x
-
-/-- A restatement of `types.lift_π_apply` that uses `pi.π` and `pi.lift`,
-with specialized universes. -/
-@[simp]
-lemma pi_lift_π_apply'
-  {β : Type v} (f : β → Type v) {P : Type v} (s : Π b, P ⟶ f b) (b : β) (x : P) :
+  {β : Type u} (f : β → Type u) {P : Type u} (s : Π b, P ⟶ f b) (b : β) (x : P) :
   (pi.π f b : (∏ f) → f b) (@pi.lift β _ _ f _ P s x) = s b x :=
 congr_fun (limit.lift_π (fan.mk P s) ⟨b⟩) x
 
 /-- A restatement of `types.map_π_apply` that uses `pi.π` and `pi.map`. -/
 @[simp]
-lemma pi_map_π_apply {β : Type v} {f g : β → Type max v u} (α : Π j, f j ⟶ g j) (b : β) (x) :
-  (pi.π g b : (∏ g) → g b) (pi.map α x) = α b ((pi.π f b : (∏ f) → f b) x) :=
-limit.map_π_apply _ _ _
-
-/-- A restatement of `types.map_π_apply` that uses `pi.π` and `pi.map`,
-with specialized universes. -/
-@[simp]
-lemma pi_map_π_apply' {β : Type v} {f g : β → Type v} (α : Π j, f j ⟶ g j) (b : β) (x) :
+lemma pi_map_π_apply {β : Type u} {f g : β → Type u} (α : Π j, f j ⟶ g j) (b : β) (x) :
   (pi.π g b : (∏ g) → g b) (pi.map α x) = α b ((pi.π f b : (∏ f) → f b) x) :=
 limit.map_π_apply _ _ _
 

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

chore(topology/sheaves/*): universe generalizations (#19153)

Necessary but sadly insufficient for the request at https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.2319146.20sheaves.20on.20manifolds

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -51,13 +51,28 @@ local attribute [tidy] tactic.discrete_cases
 /-- A restatement of `types.lift_π_apply` that uses `pi.π` and `pi.lift`. -/
 @[simp]
 lemma pi_lift_π_apply
-  {β : Type u} (f : β → Type u) {P : Type u} (s : Π b, P ⟶ f b) (b : β) (x : P) :
+  {β : Type v} (f : β → Type max v u) {P : Type max v u} (s : Π b, P ⟶ f b) (b : β) (x : P) :
+  (pi.π f b : (∏ f) → f b) (@pi.lift β _ _ f _ P s x) = s b x :=
+congr_fun (limit.lift_π (fan.mk P s) ⟨b⟩) x
+
+/-- A restatement of `types.lift_π_apply` that uses `pi.π` and `pi.lift`,
+with specialized universes. -/
+@[simp]
+lemma pi_lift_π_apply'
+  {β : Type v} (f : β → Type v) {P : Type v} (s : Π b, P ⟶ f b) (b : β) (x : P) :
   (pi.π f b : (∏ f) → f b) (@pi.lift β _ _ f _ P s x) = s b x :=
 congr_fun (limit.lift_π (fan.mk P s) ⟨b⟩) x
 
 /-- A restatement of `types.map_π_apply` that uses `pi.π` and `pi.map`. -/
 @[simp]
-lemma pi_map_π_apply {β : Type u} {f g : β → Type u} (α : Π j, f j ⟶ g j) (b : β) (x) :
+lemma pi_map_π_apply {β : Type v} {f g : β → Type max v u} (α : Π j, f j ⟶ g j) (b : β) (x) :
+  (pi.π g b : (∏ g) → g b) (pi.map α x) = α b ((pi.π f b : (∏ f) → f b) x) :=
+limit.map_π_apply _ _ _
+
+/-- A restatement of `types.map_π_apply` that uses `pi.π` and `pi.map`,
+with specialized universes. -/
+@[simp]
+lemma pi_map_π_apply' {β : Type v} {f g : β → Type v} (α : Π j, f j ⟶ g j) (b : β) (x) :
   (pi.π g b : (∏ g) → g b) (pi.map α x) = α b ((pi.π f b : (∏ f) → f b) x) :=
 limit.map_π_apply _ _ _
 

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(first ported)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -349,7 +349,7 @@ theorem binaryCofan_isColimit_iff {X Y : Type u} (c : BinaryCofan X Y) :
         dite_eq_right_iff]
       intro y e
       have : c.inr x ∈ Set.range c.inl ⊓ Set.range c.inr := ⟨⟨_, e⟩, ⟨_, rfl⟩⟩
-      rw [disjoint_iff.mp h₃.1] at this 
+      rw [disjoint_iff.mp h₃.1] at this
       exact this.elim
     · rintro T _ _ m rfl rfl; ext x; dsimp
       split_ifs <;> exact congr_arg _ (Equiv.apply_ofInjective_symm _ ⟨_, _⟩).symm
@@ -574,7 +574,7 @@ theorem coequalizer_preimage_image_eq_of_preimage_eq (π : Y ⟶ Z) (e : f ≫ 
         h.comp_cocone_point_unique_up_to_iso_inv (coequalizer_colimit f g).2
           walking_parallel_pair.one]
     rintro ⟨y, hy, e'⟩
-    dsimp at e' 
+    dsimp at e'
     replace e' :=
       (mono_iff_injective
             (h.cocone_point_unique_up_to_iso (coequalizer_colimit f g).IsColimit).inv).mp
Diff
@@ -312,7 +312,47 @@ open Function (Injective)
 theorem binaryCofan_isColimit_iff {X Y : Type u} (c : BinaryCofan X Y) :
     Nonempty (IsColimit c) ↔
       Injective c.inl ∧ Injective c.inr ∧ IsCompl (Set.range c.inl) (Set.range c.inr) :=
-  by classical
+  by
+  classical
+  constructor
+  · rintro ⟨h⟩
+    rw [←
+      show _ = c.inl from
+        h.comp_cocone_point_unique_up_to_iso_inv (binary_coproduct_colimit X Y) ⟨walking_pair.left⟩,
+      ←
+      show _ = c.inr from
+        h.comp_cocone_point_unique_up_to_iso_inv (binary_coproduct_colimit X Y)
+          ⟨walking_pair.right⟩]
+    dsimp [binary_coproduct_cocone]
+    refine'
+      ⟨(h.cocone_point_unique_up_to_iso (binary_coproduct_colimit X Y)).symm.toEquiv.Injective.comp
+          Sum.inl_injective,
+        (h.cocone_point_unique_up_to_iso (binary_coproduct_colimit X Y)).symm.toEquiv.Injective.comp
+          Sum.inr_injective,
+        _⟩
+    erw [Set.range_comp, ← eq_compl_iff_isCompl, Set.range_comp _ Sum.inr, ←
+      Set.image_compl_eq
+        (h.cocone_point_unique_up_to_iso (binary_coproduct_colimit X Y)).symm.toEquiv.Bijective]
+    congr 1
+    exact set.compl_range_inr.symm
+  · rintro ⟨h₁, h₂, h₃⟩
+    have : ∀ x, x ∈ Set.range c.inl ∨ x ∈ Set.range c.inr := by
+      rw [eq_compl_iff_is_compl.mpr h₃.symm]; exact fun _ => or_not
+    refine' ⟨binary_cofan.is_colimit.mk _ _ _ _ _⟩
+    · intro T f g x
+      exact
+        if h : x ∈ Set.range c.inl then f ((Equiv.ofInjective _ h₁).symm ⟨x, h⟩)
+        else g ((Equiv.ofInjective _ h₂).symm ⟨x, (this x).resolve_left h⟩)
+    · intro T f g; ext x; dsimp; simp [h₁.eq_iff]
+    · intro T f g; ext x; dsimp
+      simp only [forall_exists_index, Equiv.ofInjective_symm_apply, dif_ctx_congr,
+        dite_eq_right_iff]
+      intro y e
+      have : c.inr x ∈ Set.range c.inl ⊓ Set.range c.inr := ⟨⟨_, e⟩, ⟨_, rfl⟩⟩
+      rw [disjoint_iff.mp h₃.1] at this 
+      exact this.elim
+    · rintro T _ _ m rfl rfl; ext x; dsimp
+      split_ifs <;> exact congr_arg _ (Equiv.apply_ofInjective_symm _ ⟨_, _⟩).symm
 #align category_theory.limits.types.binary_cofan_is_colimit_iff CategoryTheory.Limits.Types.binaryCofan_isColimit_iff
 -/
 
Diff
@@ -312,47 +312,7 @@ open Function (Injective)
 theorem binaryCofan_isColimit_iff {X Y : Type u} (c : BinaryCofan X Y) :
     Nonempty (IsColimit c) ↔
       Injective c.inl ∧ Injective c.inr ∧ IsCompl (Set.range c.inl) (Set.range c.inr) :=
-  by
-  classical
-  constructor
-  · rintro ⟨h⟩
-    rw [←
-      show _ = c.inl from
-        h.comp_cocone_point_unique_up_to_iso_inv (binary_coproduct_colimit X Y) ⟨walking_pair.left⟩,
-      ←
-      show _ = c.inr from
-        h.comp_cocone_point_unique_up_to_iso_inv (binary_coproduct_colimit X Y)
-          ⟨walking_pair.right⟩]
-    dsimp [binary_coproduct_cocone]
-    refine'
-      ⟨(h.cocone_point_unique_up_to_iso (binary_coproduct_colimit X Y)).symm.toEquiv.Injective.comp
-          Sum.inl_injective,
-        (h.cocone_point_unique_up_to_iso (binary_coproduct_colimit X Y)).symm.toEquiv.Injective.comp
-          Sum.inr_injective,
-        _⟩
-    erw [Set.range_comp, ← eq_compl_iff_isCompl, Set.range_comp _ Sum.inr, ←
-      Set.image_compl_eq
-        (h.cocone_point_unique_up_to_iso (binary_coproduct_colimit X Y)).symm.toEquiv.Bijective]
-    congr 1
-    exact set.compl_range_inr.symm
-  · rintro ⟨h₁, h₂, h₃⟩
-    have : ∀ x, x ∈ Set.range c.inl ∨ x ∈ Set.range c.inr := by
-      rw [eq_compl_iff_is_compl.mpr h₃.symm]; exact fun _ => or_not
-    refine' ⟨binary_cofan.is_colimit.mk _ _ _ _ _⟩
-    · intro T f g x
-      exact
-        if h : x ∈ Set.range c.inl then f ((Equiv.ofInjective _ h₁).symm ⟨x, h⟩)
-        else g ((Equiv.ofInjective _ h₂).symm ⟨x, (this x).resolve_left h⟩)
-    · intro T f g; ext x; dsimp; simp [h₁.eq_iff]
-    · intro T f g; ext x; dsimp
-      simp only [forall_exists_index, Equiv.ofInjective_symm_apply, dif_ctx_congr,
-        dite_eq_right_iff]
-      intro y e
-      have : c.inr x ∈ Set.range c.inl ⊓ Set.range c.inr := ⟨⟨_, e⟩, ⟨_, rfl⟩⟩
-      rw [disjoint_iff.mp h₃.1] at this 
-      exact this.elim
-    · rintro T _ _ m rfl rfl; ext x; dsimp
-      split_ifs <;> exact congr_arg _ (Equiv.apply_ofInjective_symm _ ⟨_, _⟩).symm
+  by classical
 #align category_theory.limits.types.binary_cofan_is_colimit_iff CategoryTheory.Limits.Types.binaryCofan_isColimit_iff
 -/
 
Diff
@@ -3,12 +3,12 @@ Copyright (c) 2020 Scott Morrison. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
 -/
-import Mathbin.CategoryTheory.Limits.Types
-import Mathbin.CategoryTheory.Limits.Shapes.Products
-import Mathbin.CategoryTheory.Limits.Shapes.BinaryProducts
-import Mathbin.CategoryTheory.Limits.Shapes.Terminal
-import Mathbin.CategoryTheory.ConcreteCategory.Basic
-import Mathbin.Tactic.Elementwise
+import CategoryTheory.Limits.Types
+import CategoryTheory.Limits.Shapes.Products
+import CategoryTheory.Limits.Shapes.BinaryProducts
+import CategoryTheory.Limits.Shapes.Terminal
+import CategoryTheory.ConcreteCategory.Basic
+import Tactic.Elementwise
 
 #align_import category_theory.limits.shapes.types from "leanprover-community/mathlib"@"5dc6092d09e5e489106865241986f7f2ad28d4c8"
 
Diff
@@ -2,11 +2,6 @@
 Copyright (c) 2020 Scott Morrison. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
-
-! This file was ported from Lean 3 source module category_theory.limits.shapes.types
-! leanprover-community/mathlib commit 5dc6092d09e5e489106865241986f7f2ad28d4c8
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.CategoryTheory.Limits.Types
 import Mathbin.CategoryTheory.Limits.Shapes.Products
@@ -15,6 +10,8 @@ import Mathbin.CategoryTheory.Limits.Shapes.Terminal
 import Mathbin.CategoryTheory.ConcreteCategory.Basic
 import Mathbin.Tactic.Elementwise
 
+#align_import category_theory.limits.shapes.types from "leanprover-community/mathlib"@"5dc6092d09e5e489106865241986f7f2ad28d4c8"
+
 /-!
 # Special shapes for limits in `Type`.
 
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
 
 ! This file was ported from Lean 3 source module category_theory.limits.shapes.types
-! leanprover-community/mathlib commit 13361559d66b84f80b6d5a1c4a26aa5054766725
+! leanprover-community/mathlib commit 5dc6092d09e5e489106865241986f7f2ad28d4c8
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -58,41 +58,21 @@ attribute [local tidy] tactic.discrete_cases
 #print CategoryTheory.Limits.Types.pi_lift_π_apply /-
 /-- A restatement of `types.lift_π_apply` that uses `pi.π` and `pi.lift`. -/
 @[simp]
-theorem pi_lift_π_apply {β : Type v} (f : β → Type max v u) {P : Type max v u} (s : ∀ b, P ⟶ f b)
-    (b : β) (x : P) : (Pi.π f b : (∏ f) → f b) (@Pi.lift β _ _ f _ P s x) = s b x :=
-  congr_fun (limit.lift_π (Fan.mk P s) ⟨b⟩) x
-#align category_theory.limits.types.pi_lift_π_apply CategoryTheory.Limits.Types.pi_lift_π_apply
--/
-
-#print CategoryTheory.Limits.Types.pi_lift_π_apply' /-
-/-- A restatement of `types.lift_π_apply` that uses `pi.π` and `pi.lift`,
-with specialized universes. -/
-@[simp]
-theorem pi_lift_π_apply' {β : Type v} (f : β → Type v) {P : Type v} (s : ∀ b, P ⟶ f b) (b : β)
+theorem pi_lift_π_apply {β : Type u} (f : β → Type u) {P : Type u} (s : ∀ b, P ⟶ f b) (b : β)
     (x : P) : (Pi.π f b : (∏ f) → f b) (@Pi.lift β _ _ f _ P s x) = s b x :=
   congr_fun (limit.lift_π (Fan.mk P s) ⟨b⟩) x
-#align category_theory.limits.types.pi_lift_π_apply' CategoryTheory.Limits.Types.pi_lift_π_apply'
+#align category_theory.limits.types.pi_lift_π_apply CategoryTheory.Limits.Types.pi_lift_π_apply
 -/
 
 #print CategoryTheory.Limits.Types.pi_map_π_apply /-
 /-- A restatement of `types.map_π_apply` that uses `pi.π` and `pi.map`. -/
 @[simp]
-theorem pi_map_π_apply {β : Type v} {f g : β → Type max v u} (α : ∀ j, f j ⟶ g j) (b : β) (x) :
+theorem pi_map_π_apply {β : Type u} {f g : β → Type u} (α : ∀ j, f j ⟶ g j) (b : β) (x) :
     (Pi.π g b : (∏ g) → g b) (Pi.map α x) = α b ((Pi.π f b : (∏ f) → f b) x) :=
   Limit.map_π_apply _ _ _
 #align category_theory.limits.types.pi_map_π_apply CategoryTheory.Limits.Types.pi_map_π_apply
 -/
 
-#print CategoryTheory.Limits.Types.pi_map_π_apply' /-
-/-- A restatement of `types.map_π_apply` that uses `pi.π` and `pi.map`,
-with specialized universes. -/
-@[simp]
-theorem pi_map_π_apply' {β : Type v} {f g : β → Type v} (α : ∀ j, f j ⟶ g j) (b : β) (x) :
-    (Pi.π g b : (∏ g) → g b) (Pi.map α x) = α b ((Pi.π f b : (∏ f) → f b) x) :=
-  Limit.map_π_apply _ _ _
-#align category_theory.limits.types.pi_map_π_apply' CategoryTheory.Limits.Types.pi_map_π_apply'
--/
-
 #print CategoryTheory.Limits.Types.terminalLimitCone /-
 /-- The category of types has `punit` as a terminal object. -/
 def terminalLimitCone : Limits.LimitCone (Functor.empty (Type u))
Diff
@@ -64,6 +64,7 @@ theorem pi_lift_π_apply {β : Type v} (f : β → Type max v u) {P : Type max v
 #align category_theory.limits.types.pi_lift_π_apply CategoryTheory.Limits.Types.pi_lift_π_apply
 -/
 
+#print CategoryTheory.Limits.Types.pi_lift_π_apply' /-
 /-- A restatement of `types.lift_π_apply` that uses `pi.π` and `pi.lift`,
 with specialized universes. -/
 @[simp]
@@ -71,6 +72,7 @@ theorem pi_lift_π_apply' {β : Type v} (f : β → Type v) {P : Type v} (s : 
     (x : P) : (Pi.π f b : (∏ f) → f b) (@Pi.lift β _ _ f _ P s x) = s b x :=
   congr_fun (limit.lift_π (Fan.mk P s) ⟨b⟩) x
 #align category_theory.limits.types.pi_lift_π_apply' CategoryTheory.Limits.Types.pi_lift_π_apply'
+-/
 
 #print CategoryTheory.Limits.Types.pi_map_π_apply /-
 /-- A restatement of `types.map_π_apply` that uses `pi.π` and `pi.map`. -/
@@ -81,6 +83,7 @@ theorem pi_map_π_apply {β : Type v} {f g : β → Type max v u} (α : ∀ j, f
 #align category_theory.limits.types.pi_map_π_apply CategoryTheory.Limits.Types.pi_map_π_apply
 -/
 
+#print CategoryTheory.Limits.Types.pi_map_π_apply' /-
 /-- A restatement of `types.map_π_apply` that uses `pi.π` and `pi.map`,
 with specialized universes. -/
 @[simp]
@@ -88,6 +91,7 @@ theorem pi_map_π_apply' {β : Type v} {f g : β → Type v} (α : ∀ j, f j 
     (Pi.π g b : (∏ g) → g b) (Pi.map α x) = α b ((Pi.π f b : (∏ f) → f b) x) :=
   Limit.map_π_apply _ _ _
 #align category_theory.limits.types.pi_map_π_apply' CategoryTheory.Limits.Types.pi_map_π_apply'
+-/
 
 #print CategoryTheory.Limits.Types.terminalLimitCone /-
 /-- The category of types has `punit` as a terminal object. -/
Diff
@@ -55,12 +55,14 @@ namespace CategoryTheory.Limits.Types
 
 attribute [local tidy] tactic.discrete_cases
 
+#print CategoryTheory.Limits.Types.pi_lift_π_apply /-
 /-- A restatement of `types.lift_π_apply` that uses `pi.π` and `pi.lift`. -/
 @[simp]
 theorem pi_lift_π_apply {β : Type v} (f : β → Type max v u) {P : Type max v u} (s : ∀ b, P ⟶ f b)
     (b : β) (x : P) : (Pi.π f b : (∏ f) → f b) (@Pi.lift β _ _ f _ P s x) = s b x :=
   congr_fun (limit.lift_π (Fan.mk P s) ⟨b⟩) x
 #align category_theory.limits.types.pi_lift_π_apply CategoryTheory.Limits.Types.pi_lift_π_apply
+-/
 
 /-- A restatement of `types.lift_π_apply` that uses `pi.π` and `pi.lift`,
 with specialized universes. -/
@@ -70,12 +72,14 @@ theorem pi_lift_π_apply' {β : Type v} (f : β → Type v) {P : Type v} (s : 
   congr_fun (limit.lift_π (Fan.mk P s) ⟨b⟩) x
 #align category_theory.limits.types.pi_lift_π_apply' CategoryTheory.Limits.Types.pi_lift_π_apply'
 
+#print CategoryTheory.Limits.Types.pi_map_π_apply /-
 /-- A restatement of `types.map_π_apply` that uses `pi.π` and `pi.map`. -/
 @[simp]
 theorem pi_map_π_apply {β : Type v} {f g : β → Type max v u} (α : ∀ j, f j ⟶ g j) (b : β) (x) :
     (Pi.π g b : (∏ g) → g b) (Pi.map α x) = α b ((Pi.π f b : (∏ f) → f b) x) :=
   Limit.map_π_apply _ _ _
 #align category_theory.limits.types.pi_map_π_apply CategoryTheory.Limits.Types.pi_map_π_apply
+-/
 
 /-- A restatement of `types.map_π_apply` that uses `pi.π` and `pi.map`,
 with specialized universes. -/
@@ -147,15 +151,19 @@ def binaryProductCone (X Y : Type u) : BinaryFan X Y :=
 #align category_theory.limits.types.binary_product_cone CategoryTheory.Limits.Types.binaryProductCone
 -/
 
+#print CategoryTheory.Limits.Types.binaryProductCone_fst /-
 @[simp]
 theorem binaryProductCone_fst (X Y : Type u) : (binaryProductCone X Y).fst = Prod.fst :=
   rfl
 #align category_theory.limits.types.binary_product_cone_fst CategoryTheory.Limits.Types.binaryProductCone_fst
+-/
 
+#print CategoryTheory.Limits.Types.binaryProductCone_snd /-
 @[simp]
 theorem binaryProductCone_snd (X Y : Type u) : (binaryProductCone X Y).snd = Prod.snd :=
   rfl
 #align category_theory.limits.types.binary_product_cone_snd CategoryTheory.Limits.Types.binaryProductCone_snd
+-/
 
 #print CategoryTheory.Limits.Types.binaryProductLimit /-
 /-- The product type `X × Y` is a binary product for `X` and `Y`. -/
@@ -319,6 +327,7 @@ theorem binaryCoproductIso_inr_comp_inv (X Y : Type u) :
 
 open Function (Injective)
 
+#print CategoryTheory.Limits.Types.binaryCofan_isColimit_iff /-
 theorem binaryCofan_isColimit_iff {X Y : Type u} (c : BinaryCofan X Y) :
     Nonempty (IsColimit c) ↔
       Injective c.inl ∧ Injective c.inr ∧ IsCompl (Set.range c.inl) (Set.range c.inr) :=
@@ -364,7 +373,9 @@ theorem binaryCofan_isColimit_iff {X Y : Type u} (c : BinaryCofan X Y) :
     · rintro T _ _ m rfl rfl; ext x; dsimp
       split_ifs <;> exact congr_arg _ (Equiv.apply_ofInjective_symm _ ⟨_, _⟩).symm
 #align category_theory.limits.types.binary_cofan_is_colimit_iff CategoryTheory.Limits.Types.binaryCofan_isColimit_iff
+-/
 
+#print CategoryTheory.Limits.Types.isCoprodOfMono /-
 /-- Any monomorphism in `Type` is an coproduct injection. -/
 noncomputable def isCoprodOfMono {X Y : Type u} (f : X ⟶ Y) [Mono f] :
     IsColimit (BinaryCofan.mk f (Subtype.val : Set.range fᶜ → Y)) :=
@@ -373,6 +384,7 @@ noncomputable def isCoprodOfMono {X Y : Type u} (f : X ⟶ Y) [Mono f] :
       ⟨(mono_iff_injective f).mp inferInstance, Subtype.val_injective,
         (eq_compl_iff_isCompl.mp <| Subtype.range_val).symm⟩
 #align category_theory.limits.types.is_coprod_of_mono CategoryTheory.Limits.Types.isCoprodOfMono
+-/
 
 #print CategoryTheory.Limits.Types.productLimitCone /-
 /-- The category of types has `Π j, f j` as the product of a type family `f : J → Type`.
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
 
 ! This file was ported from Lean 3 source module category_theory.limits.shapes.types
-! leanprover-community/mathlib commit cb3ceec8485239a61ed51d944cb9a95b68c6bafc
+! leanprover-community/mathlib commit 13361559d66b84f80b6d5a1c4a26aa5054766725
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -55,23 +55,35 @@ namespace CategoryTheory.Limits.Types
 
 attribute [local tidy] tactic.discrete_cases
 
-#print CategoryTheory.Limits.Types.pi_lift_π_apply /-
 /-- A restatement of `types.lift_π_apply` that uses `pi.π` and `pi.lift`. -/
 @[simp]
-theorem pi_lift_π_apply {β : Type u} (f : β → Type u) {P : Type u} (s : ∀ b, P ⟶ f b) (b : β)
-    (x : P) : (Pi.π f b : (∏ f) → f b) (@Pi.lift β _ _ f _ P s x) = s b x :=
+theorem pi_lift_π_apply {β : Type v} (f : β → Type max v u) {P : Type max v u} (s : ∀ b, P ⟶ f b)
+    (b : β) (x : P) : (Pi.π f b : (∏ f) → f b) (@Pi.lift β _ _ f _ P s x) = s b x :=
   congr_fun (limit.lift_π (Fan.mk P s) ⟨b⟩) x
 #align category_theory.limits.types.pi_lift_π_apply CategoryTheory.Limits.Types.pi_lift_π_apply
--/
 
-#print CategoryTheory.Limits.Types.pi_map_π_apply /-
+/-- A restatement of `types.lift_π_apply` that uses `pi.π` and `pi.lift`,
+with specialized universes. -/
+@[simp]
+theorem pi_lift_π_apply' {β : Type v} (f : β → Type v) {P : Type v} (s : ∀ b, P ⟶ f b) (b : β)
+    (x : P) : (Pi.π f b : (∏ f) → f b) (@Pi.lift β _ _ f _ P s x) = s b x :=
+  congr_fun (limit.lift_π (Fan.mk P s) ⟨b⟩) x
+#align category_theory.limits.types.pi_lift_π_apply' CategoryTheory.Limits.Types.pi_lift_π_apply'
+
 /-- A restatement of `types.map_π_apply` that uses `pi.π` and `pi.map`. -/
 @[simp]
-theorem pi_map_π_apply {β : Type u} {f g : β → Type u} (α : ∀ j, f j ⟶ g j) (b : β) (x) :
+theorem pi_map_π_apply {β : Type v} {f g : β → Type max v u} (α : ∀ j, f j ⟶ g j) (b : β) (x) :
     (Pi.π g b : (∏ g) → g b) (Pi.map α x) = α b ((Pi.π f b : (∏ f) → f b) x) :=
   Limit.map_π_apply _ _ _
 #align category_theory.limits.types.pi_map_π_apply CategoryTheory.Limits.Types.pi_map_π_apply
--/
+
+/-- A restatement of `types.map_π_apply` that uses `pi.π` and `pi.map`,
+with specialized universes. -/
+@[simp]
+theorem pi_map_π_apply' {β : Type v} {f g : β → Type v} (α : ∀ j, f j ⟶ g j) (b : β) (x) :
+    (Pi.π g b : (∏ g) → g b) (Pi.map α x) = α b ((Pi.π f b : (∏ f) → f b) x) :=
+  Limit.map_π_apply _ _ _
+#align category_theory.limits.types.pi_map_π_apply' CategoryTheory.Limits.Types.pi_map_π_apply'
 
 #print CategoryTheory.Limits.Types.terminalLimitCone /-
 /-- The category of types has `punit` as a terminal object. -/
Diff
@@ -312,48 +312,45 @@ theorem binaryCofan_isColimit_iff {X Y : Type u} (c : BinaryCofan X Y) :
       Injective c.inl ∧ Injective c.inr ∧ IsCompl (Set.range c.inl) (Set.range c.inr) :=
   by
   classical
-    constructor
-    · rintro ⟨h⟩
-      rw [←
-        show _ = c.inl from
-          h.comp_cocone_point_unique_up_to_iso_inv (binary_coproduct_colimit X Y)
-            ⟨walking_pair.left⟩,
-        ←
-        show _ = c.inr from
-          h.comp_cocone_point_unique_up_to_iso_inv (binary_coproduct_colimit X Y)
-            ⟨walking_pair.right⟩]
-      dsimp [binary_coproduct_cocone]
-      refine'
-        ⟨(h.cocone_point_unique_up_to_iso
-                      (binary_coproduct_colimit X Y)).symm.toEquiv.Injective.comp
-            Sum.inl_injective,
-          (h.cocone_point_unique_up_to_iso
-                      (binary_coproduct_colimit X Y)).symm.toEquiv.Injective.comp
-            Sum.inr_injective,
-          _⟩
-      erw [Set.range_comp, ← eq_compl_iff_isCompl, Set.range_comp _ Sum.inr, ←
-        Set.image_compl_eq
-          (h.cocone_point_unique_up_to_iso (binary_coproduct_colimit X Y)).symm.toEquiv.Bijective]
-      congr 1
-      exact set.compl_range_inr.symm
-    · rintro ⟨h₁, h₂, h₃⟩
-      have : ∀ x, x ∈ Set.range c.inl ∨ x ∈ Set.range c.inr := by
-        rw [eq_compl_iff_is_compl.mpr h₃.symm]; exact fun _ => or_not
-      refine' ⟨binary_cofan.is_colimit.mk _ _ _ _ _⟩
-      · intro T f g x
-        exact
-          if h : x ∈ Set.range c.inl then f ((Equiv.ofInjective _ h₁).symm ⟨x, h⟩)
-          else g ((Equiv.ofInjective _ h₂).symm ⟨x, (this x).resolve_left h⟩)
-      · intro T f g; ext x; dsimp; simp [h₁.eq_iff]
-      · intro T f g; ext x; dsimp
-        simp only [forall_exists_index, Equiv.ofInjective_symm_apply, dif_ctx_congr,
-          dite_eq_right_iff]
-        intro y e
-        have : c.inr x ∈ Set.range c.inl ⊓ Set.range c.inr := ⟨⟨_, e⟩, ⟨_, rfl⟩⟩
-        rw [disjoint_iff.mp h₃.1] at this 
-        exact this.elim
-      · rintro T _ _ m rfl rfl; ext x; dsimp
-        split_ifs <;> exact congr_arg _ (Equiv.apply_ofInjective_symm _ ⟨_, _⟩).symm
+  constructor
+  · rintro ⟨h⟩
+    rw [←
+      show _ = c.inl from
+        h.comp_cocone_point_unique_up_to_iso_inv (binary_coproduct_colimit X Y) ⟨walking_pair.left⟩,
+      ←
+      show _ = c.inr from
+        h.comp_cocone_point_unique_up_to_iso_inv (binary_coproduct_colimit X Y)
+          ⟨walking_pair.right⟩]
+    dsimp [binary_coproduct_cocone]
+    refine'
+      ⟨(h.cocone_point_unique_up_to_iso (binary_coproduct_colimit X Y)).symm.toEquiv.Injective.comp
+          Sum.inl_injective,
+        (h.cocone_point_unique_up_to_iso (binary_coproduct_colimit X Y)).symm.toEquiv.Injective.comp
+          Sum.inr_injective,
+        _⟩
+    erw [Set.range_comp, ← eq_compl_iff_isCompl, Set.range_comp _ Sum.inr, ←
+      Set.image_compl_eq
+        (h.cocone_point_unique_up_to_iso (binary_coproduct_colimit X Y)).symm.toEquiv.Bijective]
+    congr 1
+    exact set.compl_range_inr.symm
+  · rintro ⟨h₁, h₂, h₃⟩
+    have : ∀ x, x ∈ Set.range c.inl ∨ x ∈ Set.range c.inr := by
+      rw [eq_compl_iff_is_compl.mpr h₃.symm]; exact fun _ => or_not
+    refine' ⟨binary_cofan.is_colimit.mk _ _ _ _ _⟩
+    · intro T f g x
+      exact
+        if h : x ∈ Set.range c.inl then f ((Equiv.ofInjective _ h₁).symm ⟨x, h⟩)
+        else g ((Equiv.ofInjective _ h₂).symm ⟨x, (this x).resolve_left h⟩)
+    · intro T f g; ext x; dsimp; simp [h₁.eq_iff]
+    · intro T f g; ext x; dsimp
+      simp only [forall_exists_index, Equiv.ofInjective_symm_apply, dif_ctx_congr,
+        dite_eq_right_iff]
+      intro y e
+      have : c.inr x ∈ Set.range c.inl ⊓ Set.range c.inr := ⟨⟨_, e⟩, ⟨_, rfl⟩⟩
+      rw [disjoint_iff.mp h₃.1] at this 
+      exact this.elim
+    · rintro T _ _ m rfl rfl; ext x; dsimp
+      split_ifs <;> exact congr_arg _ (Equiv.apply_ofInjective_symm _ ⟨_, _⟩).symm
 #align category_theory.limits.types.binary_cofan_is_colimit_iff CategoryTheory.Limits.Types.binaryCofan_isColimit_iff
 
 /-- Any monomorphism in `Type` is an coproduct injection. -/
Diff
@@ -350,7 +350,7 @@ theorem binaryCofan_isColimit_iff {X Y : Type u} (c : BinaryCofan X Y) :
           dite_eq_right_iff]
         intro y e
         have : c.inr x ∈ Set.range c.inl ⊓ Set.range c.inr := ⟨⟨_, e⟩, ⟨_, rfl⟩⟩
-        rw [disjoint_iff.mp h₃.1] at this
+        rw [disjoint_iff.mp h₃.1] at this 
         exact this.elim
       · rintro T _ _ m rfl rfl; ext x; dsimp
         split_ifs <;> exact congr_arg _ (Equiv.apply_ofInjective_symm _ ⟨_, _⟩).symm
@@ -408,7 +408,7 @@ theorem productIso_inv_comp_π {J : Type u} (F : J → Type max u v) (j : J) :
 def coproductColimitCocone {J : Type u} (F : J → Type u) : Limits.ColimitCocone (Discrete.functor F)
     where
   Cocone :=
-    { pt := Σj, F j
+    { pt := Σ j, F j
       ι := { app := fun j x => ⟨j.as, x⟩ } }
   IsColimit :=
     { desc := fun s x => s.ι.app ⟨x.1⟩ x.2
@@ -421,7 +421,7 @@ def coproductColimitCocone {J : Type u} (F : J → Type u) : Limits.ColimitCocon
 
 #print CategoryTheory.Limits.Types.coproductIso /-
 /-- The categorical coproduct in `Type u` is the type theoretic coproduct `Σ j, F j`. -/
-noncomputable def coproductIso {J : Type u} (F : J → Type u) : ∐ F ≅ Σj, F j :=
+noncomputable def coproductIso {J : Type u} (F : J → Type u) : ∐ F ≅ Σ j, F j :=
   colimit.isoColimitCocone (coproductColimitCocone F)
 #align category_theory.limits.types.coproduct_iso CategoryTheory.Limits.Types.coproductIso
 -/
@@ -429,7 +429,7 @@ noncomputable def coproductIso {J : Type u} (F : J → Type u) : ∐ F ≅ Σj,
 #print CategoryTheory.Limits.Types.coproductIso_ι_comp_hom /-
 @[simp, elementwise]
 theorem coproductIso_ι_comp_hom {J : Type u} (F : J → Type u) (j : J) :
-    Sigma.ι F j ≫ (coproductIso F).Hom = fun x : F j => (⟨j, x⟩ : Σj, F j) :=
+    Sigma.ι F j ≫ (coproductIso F).Hom = fun x : F j => (⟨j, x⟩ : Σ j, F j) :=
   colimit.isoColimitCocone_ι_hom (coproductColimitCocone F) ⟨j⟩
 #align category_theory.limits.types.coproduct_iso_ι_comp_hom CategoryTheory.Limits.Types.coproductIso_ι_comp_hom
 -/
@@ -437,7 +437,7 @@ theorem coproductIso_ι_comp_hom {J : Type u} (F : J → Type u) (j : J) :
 #print CategoryTheory.Limits.Types.coproductIso_mk_comp_inv /-
 @[simp, elementwise]
 theorem coproductIso_mk_comp_inv {J : Type u} (F : J → Type u) (j : J) :
-    (↾fun x : F j => (⟨j, x⟩ : Σj, F j)) ≫ (coproductIso F).inv = Sigma.ι F j :=
+    (↾fun x : F j => (⟨j, x⟩ : Σ j, F j)) ≫ (coproductIso F).inv = Sigma.ι F j :=
   rfl
 #align category_theory.limits.types.coproduct_iso_mk_comp_inv CategoryTheory.Limits.Types.coproductIso_mk_comp_inv
 -/
@@ -572,7 +572,7 @@ theorem coequalizer_preimage_image_eq_of_preimage_eq (π : Y ⟶ Z) (e : f ≫ 
         h.comp_cocone_point_unique_up_to_iso_inv (coequalizer_colimit f g).2
           walking_parallel_pair.one]
     rintro ⟨y, hy, e'⟩
-    dsimp at e'
+    dsimp at e' 
     replace e' :=
       (mono_iff_injective
             (h.cocone_point_unique_up_to_iso (coequalizer_colimit f g).IsColimit).inv).mp
Diff
@@ -271,7 +271,7 @@ noncomputable def binaryCoproductIso (X Y : Type u) : Limits.coprod X Y ≅ Sum
 #align category_theory.limits.types.binary_coproduct_iso CategoryTheory.Limits.Types.binaryCoproductIso
 -/
 
-open CategoryTheory.Type
+open scoped CategoryTheory.Type
 
 #print CategoryTheory.Limits.Types.binaryCoproductIso_inl_comp_hom /-
 @[simp, elementwise]
Diff
@@ -135,23 +135,11 @@ def binaryProductCone (X Y : Type u) : BinaryFan X Y :=
 #align category_theory.limits.types.binary_product_cone CategoryTheory.Limits.Types.binaryProductCone
 -/
 
-/- warning: category_theory.limits.types.binary_product_cone_fst -> CategoryTheory.Limits.Types.binaryProductCone_fst is a dubious translation:
-lean 3 declaration is
-  forall (X : Type.{u1}) (Y : Type.{u1}), Eq.{succ u1} (Quiver.Hom.{succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) (CategoryTheory.Limits.Types.binaryProductCone.{u1} X Y))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CategoryTheory.Limits.BinaryFan.fst.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y (CategoryTheory.Limits.Types.binaryProductCone.{u1} X Y)) (Prod.fst.{u1, u1} X Y)
-but is expected to have type
-  forall (X : Type.{u1}) (Y : Type.{u1}), Eq.{succ u1} (Quiver.Hom.{succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) (CategoryTheory.Limits.Types.binaryProductCone.{u1} X Y)))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CategoryTheory.Limits.BinaryFan.fst.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y (CategoryTheory.Limits.Types.binaryProductCone.{u1} X Y)) (Prod.fst.{u1, u1} X Y)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.types.binary_product_cone_fst CategoryTheory.Limits.Types.binaryProductCone_fstₓ'. -/
 @[simp]
 theorem binaryProductCone_fst (X Y : Type u) : (binaryProductCone X Y).fst = Prod.fst :=
   rfl
 #align category_theory.limits.types.binary_product_cone_fst CategoryTheory.Limits.Types.binaryProductCone_fst
 
-/- warning: category_theory.limits.types.binary_product_cone_snd -> CategoryTheory.Limits.Types.binaryProductCone_snd is a dubious translation:
-lean 3 declaration is
-  forall (X : Type.{u1}) (Y : Type.{u1}), Eq.{succ u1} (Quiver.Hom.{succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) (CategoryTheory.Limits.Types.binaryProductCone.{u1} X Y))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.right)) (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.right))) (CategoryTheory.Limits.BinaryFan.snd.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y (CategoryTheory.Limits.Types.binaryProductCone.{u1} X Y)) (Prod.snd.{u1, u1} X Y)
-but is expected to have type
-  forall (X : Type.{u1}) (Y : Type.{u1}), Eq.{succ u1} (Quiver.Hom.{succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) (CategoryTheory.Limits.Types.binaryProductCone.{u1} X Y)))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.right)) (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.right))) (CategoryTheory.Limits.BinaryFan.snd.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y (CategoryTheory.Limits.Types.binaryProductCone.{u1} X Y)) (Prod.snd.{u1, u1} X Y)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.types.binary_product_cone_snd CategoryTheory.Limits.Types.binaryProductCone_sndₓ'. -/
 @[simp]
 theorem binaryProductCone_snd (X Y : Type u) : (binaryProductCone X Y).snd = Prod.snd :=
   rfl
@@ -319,9 +307,6 @@ theorem binaryCoproductIso_inr_comp_inv (X Y : Type u) :
 
 open Function (Injective)
 
-/- warning: category_theory.limits.types.binary_cofan_is_colimit_iff -> CategoryTheory.Limits.Types.binaryCofan_isColimit_iff is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.types.binary_cofan_is_colimit_iff CategoryTheory.Limits.Types.binaryCofan_isColimit_iffₓ'. -/
 theorem binaryCofan_isColimit_iff {X Y : Type u} (c : BinaryCofan X Y) :
     Nonempty (IsColimit c) ↔
       Injective c.inl ∧ Injective c.inr ∧ IsCompl (Set.range c.inl) (Set.range c.inr) :=
@@ -371,12 +356,6 @@ theorem binaryCofan_isColimit_iff {X Y : Type u} (c : BinaryCofan X Y) :
         split_ifs <;> exact congr_arg _ (Equiv.apply_ofInjective_symm _ ⟨_, _⟩).symm
 #align category_theory.limits.types.binary_cofan_is_colimit_iff CategoryTheory.Limits.Types.binaryCofan_isColimit_iff
 
-/- warning: category_theory.limits.types.is_coprod_of_mono -> CategoryTheory.Limits.Types.isCoprodOfMono is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u1}} (f : Quiver.Hom.{succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) X Y) [_inst_1 : CategoryTheory.Mono.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y f], CategoryTheory.Limits.IsColimit.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X (Subtype.{succ u1} Y (fun (x : Y) => Membership.Mem.{u1, u1} Y (Set.{u1} Y) (Set.hasMem.{u1} Y) x (HasCompl.compl.{u1} (Set.{u1} Y) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} Y) (Set.booleanAlgebra.{u1} Y)) (Set.range.{u1, succ u1} Y X f))))) (CategoryTheory.Limits.BinaryCofan.mk.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X (Subtype.{succ u1} Y (fun (x : Y) => Membership.Mem.{u1, u1} Y (Set.{u1} Y) (Set.hasMem.{u1} Y) x (HasCompl.compl.{u1} (Set.{u1} Y) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} Y) (Set.booleanAlgebra.{u1} Y)) (Set.range.{u1, succ u1} Y X f)))) Y f (Subtype.val.{succ u1} Y (fun (x : Y) => Membership.Mem.{u1, u1} Y (Set.{u1} Y) (Set.hasMem.{u1} Y) x (HasCompl.compl.{u1} (Set.{u1} Y) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} Y) (Set.booleanAlgebra.{u1} Y)) (Set.range.{u1, succ u1} Y X f)))))
-but is expected to have type
-  forall {X : Type.{u1}} {Y : Type.{u1}} (f : Quiver.Hom.{succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) X Y) [_inst_1 : CategoryTheory.Mono.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y f], CategoryTheory.Limits.IsColimit.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X (Subtype.{succ u1} Y (fun (x : Y) => Membership.mem.{u1, u1} Y (Set.{u1} Y) (Set.instMembershipSet.{u1} Y) x (HasCompl.compl.{u1} (Set.{u1} Y) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} Y) (Set.instBooleanAlgebraSet.{u1} Y)) (Set.range.{u1, succ u1} Y X f))))) (CategoryTheory.Limits.BinaryCofan.mk.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X (Subtype.{succ u1} Y (fun (x : Y) => Membership.mem.{u1, u1} Y (Set.{u1} Y) (Set.instMembershipSet.{u1} Y) x (HasCompl.compl.{u1} (Set.{u1} Y) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} Y) (Set.instBooleanAlgebraSet.{u1} Y)) (Set.range.{u1, succ u1} Y X f)))) Y f (Subtype.val.{succ u1} Y (fun (x : Y) => Membership.mem.{u1, u1} Y (Set.{u1} Y) (Set.instMembershipSet.{u1} Y) x (HasCompl.compl.{u1} (Set.{u1} Y) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} Y) (Set.instBooleanAlgebraSet.{u1} Y)) (Set.range.{u1, succ u1} Y X f)))))
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.types.is_coprod_of_mono CategoryTheory.Limits.Types.isCoprodOfMonoₓ'. -/
 /-- Any monomorphism in `Type` is an coproduct injection. -/
 noncomputable def isCoprodOfMono {X Y : Type u} (f : X ⟶ Y) [Mono f] :
     IsColimit (BinaryCofan.mk f (Subtype.val : Set.range fᶜ → Y)) :=
Diff
@@ -352,31 +352,22 @@ theorem binaryCofan_isColimit_iff {X Y : Type u} (c : BinaryCofan X Y) :
       congr 1
       exact set.compl_range_inr.symm
     · rintro ⟨h₁, h₂, h₃⟩
-      have : ∀ x, x ∈ Set.range c.inl ∨ x ∈ Set.range c.inr :=
-        by
-        rw [eq_compl_iff_is_compl.mpr h₃.symm]
-        exact fun _ => or_not
+      have : ∀ x, x ∈ Set.range c.inl ∨ x ∈ Set.range c.inr := by
+        rw [eq_compl_iff_is_compl.mpr h₃.symm]; exact fun _ => or_not
       refine' ⟨binary_cofan.is_colimit.mk _ _ _ _ _⟩
       · intro T f g x
         exact
           if h : x ∈ Set.range c.inl then f ((Equiv.ofInjective _ h₁).symm ⟨x, h⟩)
           else g ((Equiv.ofInjective _ h₂).symm ⟨x, (this x).resolve_left h⟩)
-      · intro T f g
-        ext x
-        dsimp
-        simp [h₁.eq_iff]
-      · intro T f g
-        ext x
-        dsimp
+      · intro T f g; ext x; dsimp; simp [h₁.eq_iff]
+      · intro T f g; ext x; dsimp
         simp only [forall_exists_index, Equiv.ofInjective_symm_apply, dif_ctx_congr,
           dite_eq_right_iff]
         intro y e
         have : c.inr x ∈ Set.range c.inl ⊓ Set.range c.inr := ⟨⟨_, e⟩, ⟨_, rfl⟩⟩
         rw [disjoint_iff.mp h₃.1] at this
         exact this.elim
-      · rintro T _ _ m rfl rfl
-        ext x
-        dsimp
+      · rintro T _ _ m rfl rfl; ext x; dsimp
         split_ifs <;> exact congr_arg _ (Equiv.apply_ofInjective_symm _ ⟨_, _⟩).symm
 #align category_theory.limits.types.binary_cofan_is_colimit_iff CategoryTheory.Limits.Types.binaryCofan_isColimit_iff
 
@@ -579,9 +570,7 @@ def coequalizerColimit : Limits.ColimitCocone (parallelPair f g)
     Cofork.ofπ (Quot.mk (CoequalizerRel f g)) (funext fun x => Quot.sound (CoequalizerRel.Rel x))
   IsColimit :=
     Cofork.IsColimit.mk' _ fun s =>
-      ⟨Quot.lift s.π fun a b (h : CoequalizerRel f g a b) =>
-          by
-          cases h
+      ⟨Quot.lift s.π fun a b (h : CoequalizerRel f g a b) => by cases h;
           exact congr_fun s.condition h_1,
         rfl, fun m hm => funext fun x => Quot.inductionOn x (congr_fun hm : _)⟩
 #align category_theory.limits.types.coequalizer_colimit CategoryTheory.Limits.Types.coequalizerColimit
@@ -594,11 +583,8 @@ then `π ⁻¹' (π '' U) = U`.
 theorem coequalizer_preimage_image_eq_of_preimage_eq (π : Y ⟶ Z) (e : f ≫ π = g ≫ π)
     (h : IsColimit (Cofork.ofπ π e)) (U : Set Y) (H : f ⁻¹' U = g ⁻¹' U) : π ⁻¹' (π '' U) = U :=
   by
-  have lem : ∀ x y, coequalizer_rel f g x y → (x ∈ U ↔ y ∈ U) :=
-    by
-    rintro _ _ ⟨x⟩
-    change x ∈ f ⁻¹' U ↔ x ∈ g ⁻¹' U
-    congr 2
+  have lem : ∀ x y, coequalizer_rel f g x y → (x ∈ U ↔ y ∈ U) := by rintro _ _ ⟨x⟩;
+    change x ∈ f ⁻¹' U ↔ x ∈ g ⁻¹' U; congr 2
   have eqv : _root_.equivalence fun x y => x ∈ U ↔ y ∈ U := by tidy
   ext
   constructor
Diff
@@ -320,10 +320,7 @@ theorem binaryCoproductIso_inr_comp_inv (X Y : Type u) :
 open Function (Injective)
 
 /- warning: category_theory.limits.types.binary_cofan_is_colimit_iff -> CategoryTheory.Limits.Types.binaryCofan_isColimit_iff is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u1}} (c : CategoryTheory.Limits.BinaryCofan.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y), Iff (Nonempty.{succ (succ u1)} (CategoryTheory.Limits.IsColimit.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (And (Function.Injective.{succ u1, succ u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (CategoryTheory.Limits.BinaryCofan.inl.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y c)) (And (Function.Injective.{succ u1, succ u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.right)) (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.right)) (CategoryTheory.Limits.BinaryCofan.inr.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y c)) (IsCompl.{u1} (Set.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (Set.completeBooleanAlgebra.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (Set.completeBooleanAlgebra.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))))))) (Set.range.{u1, succ u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (CategoryTheory.Limits.BinaryCofan.inl.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y c)) (Set.range.{u1, succ u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.right)) (CategoryTheory.Limits.BinaryCofan.inr.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y c)))))
-but is expected to have type
-  forall {X : Type.{u1}} {Y : Type.{u1}} (c : CategoryTheory.Limits.BinaryCofan.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y), Iff (Nonempty.{succ (succ u1)} (CategoryTheory.Limits.IsColimit.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (And (Function.Injective.{succ u1, succ u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (CategoryTheory.Limits.BinaryCofan.inl.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y c)) (And (Function.Injective.{succ u1, succ u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.right)) (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.right)) (CategoryTheory.Limits.BinaryCofan.inr.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y c)) (IsCompl.{u1} (Set.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (Set.instCompleteBooleanAlgebraSet.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (Set.instCompleteBooleanAlgebraSet.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))))))) (Set.range.{u1, succ u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (CategoryTheory.Limits.BinaryCofan.inl.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y c)) (Set.range.{u1, succ u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.right)) (CategoryTheory.Limits.BinaryCofan.inr.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y c)))))
+<too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.limits.types.binary_cofan_is_colimit_iff CategoryTheory.Limits.Types.binaryCofan_isColimit_iffₓ'. -/
 theorem binaryCofan_isColimit_iff {X Y : Type u} (c : BinaryCofan X Y) :
     Nonempty (IsColimit c) ↔
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
 
 ! This file was ported from Lean 3 source module category_theory.limits.shapes.types
-! leanprover-community/mathlib commit 70fd9563a21e7b963887c9360bd29b2393e6225a
+! leanprover-community/mathlib commit cb3ceec8485239a61ed51d944cb9a95b68c6bafc
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -18,6 +18,9 @@ import Mathbin.Tactic.Elementwise
 /-!
 # Special shapes for limits in `Type`.
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 The general shape (co)limits defined in `category_theory.limits.types`
 are intended for use through the limits API,
 and the actual implementation should mostly be considered "sealed".
Diff
@@ -52,20 +52,25 @@ namespace CategoryTheory.Limits.Types
 
 attribute [local tidy] tactic.discrete_cases
 
+#print CategoryTheory.Limits.Types.pi_lift_π_apply /-
 /-- A restatement of `types.lift_π_apply` that uses `pi.π` and `pi.lift`. -/
 @[simp]
 theorem pi_lift_π_apply {β : Type u} (f : β → Type u) {P : Type u} (s : ∀ b, P ⟶ f b) (b : β)
     (x : P) : (Pi.π f b : (∏ f) → f b) (@Pi.lift β _ _ f _ P s x) = s b x :=
   congr_fun (limit.lift_π (Fan.mk P s) ⟨b⟩) x
 #align category_theory.limits.types.pi_lift_π_apply CategoryTheory.Limits.Types.pi_lift_π_apply
+-/
 
+#print CategoryTheory.Limits.Types.pi_map_π_apply /-
 /-- A restatement of `types.map_π_apply` that uses `pi.π` and `pi.map`. -/
 @[simp]
 theorem pi_map_π_apply {β : Type u} {f g : β → Type u} (α : ∀ j, f j ⟶ g j) (b : β) (x) :
     (Pi.π g b : (∏ g) → g b) (Pi.map α x) = α b ((Pi.π f b : (∏ f) → f b) x) :=
   Limit.map_π_apply _ _ _
 #align category_theory.limits.types.pi_map_π_apply CategoryTheory.Limits.Types.pi_map_π_apply
+-/
 
+#print CategoryTheory.Limits.Types.terminalLimitCone /-
 /-- The category of types has `punit` as a terminal object. -/
 def terminalLimitCone : Limits.LimitCone (Functor.empty (Type u))
     where
@@ -74,17 +79,23 @@ def terminalLimitCone : Limits.LimitCone (Functor.empty (Type u))
       π := by tidy }
   IsLimit := by tidy
 #align category_theory.limits.types.terminal_limit_cone CategoryTheory.Limits.Types.terminalLimitCone
+-/
 
+#print CategoryTheory.Limits.Types.terminalIso /-
 /-- The terminal object in `Type u` is `punit`. -/
 noncomputable def terminalIso : ⊤_ Type u ≅ PUnit :=
   limit.isoLimitCone terminalLimitCone
 #align category_theory.limits.types.terminal_iso CategoryTheory.Limits.Types.terminalIso
+-/
 
+#print CategoryTheory.Limits.Types.isTerminalPunit /-
 /-- The terminal object in `Type u` is `punit`. -/
 noncomputable def isTerminalPunit : IsTerminal (PUnit : Type u) :=
   terminalIsTerminal.of_iso terminalIso
 #align category_theory.limits.types.is_terminal_punit CategoryTheory.Limits.Types.isTerminalPunit
+-/
 
+#print CategoryTheory.Limits.Types.initialColimitCocone /-
 /-- The category of types has `pempty` as an initial object. -/
 def initialColimitCocone : Limits.ColimitCocone (Functor.empty (Type u))
     where
@@ -93,19 +104,25 @@ def initialColimitCocone : Limits.ColimitCocone (Functor.empty (Type u))
       ι := by tidy }
   IsColimit := by tidy
 #align category_theory.limits.types.initial_colimit_cocone CategoryTheory.Limits.Types.initialColimitCocone
+-/
 
+#print CategoryTheory.Limits.Types.initialIso /-
 /-- The initial object in `Type u` is `pempty`. -/
 noncomputable def initialIso : ⊥_ Type u ≅ PEmpty :=
   colimit.isoColimitCocone initialColimitCocone
 #align category_theory.limits.types.initial_iso CategoryTheory.Limits.Types.initialIso
+-/
 
+#print CategoryTheory.Limits.Types.isInitialPunit /-
 /-- The initial object in `Type u` is `pempty`. -/
 noncomputable def isInitialPunit : IsInitial (PEmpty : Type u) :=
   initialIsInitial.of_iso initialIso
 #align category_theory.limits.types.is_initial_punit CategoryTheory.Limits.Types.isInitialPunit
+-/
 
 open CategoryTheory.Limits.WalkingPair
 
+#print CategoryTheory.Limits.Types.binaryProductCone /-
 -- We manually generate the other projection lemmas since the simp-normal form for the legs is
 -- otherwise not created correctly.
 /-- The product type `X × Y` forms a cone for the binary product of `X` and `Y`. -/
@@ -113,17 +130,31 @@ open CategoryTheory.Limits.WalkingPair
 def binaryProductCone (X Y : Type u) : BinaryFan X Y :=
   BinaryFan.mk Prod.fst Prod.snd
 #align category_theory.limits.types.binary_product_cone CategoryTheory.Limits.Types.binaryProductCone
+-/
 
+/- warning: category_theory.limits.types.binary_product_cone_fst -> CategoryTheory.Limits.Types.binaryProductCone_fst is a dubious translation:
+lean 3 declaration is
+  forall (X : Type.{u1}) (Y : Type.{u1}), Eq.{succ u1} (Quiver.Hom.{succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) (CategoryTheory.Limits.Types.binaryProductCone.{u1} X Y))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CategoryTheory.Limits.BinaryFan.fst.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y (CategoryTheory.Limits.Types.binaryProductCone.{u1} X Y)) (Prod.fst.{u1, u1} X Y)
+but is expected to have type
+  forall (X : Type.{u1}) (Y : Type.{u1}), Eq.{succ u1} (Quiver.Hom.{succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) (CategoryTheory.Limits.Types.binaryProductCone.{u1} X Y)))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CategoryTheory.Limits.BinaryFan.fst.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y (CategoryTheory.Limits.Types.binaryProductCone.{u1} X Y)) (Prod.fst.{u1, u1} X Y)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.types.binary_product_cone_fst CategoryTheory.Limits.Types.binaryProductCone_fstₓ'. -/
 @[simp]
 theorem binaryProductCone_fst (X Y : Type u) : (binaryProductCone X Y).fst = Prod.fst :=
   rfl
 #align category_theory.limits.types.binary_product_cone_fst CategoryTheory.Limits.Types.binaryProductCone_fst
 
+/- warning: category_theory.limits.types.binary_product_cone_snd -> CategoryTheory.Limits.Types.binaryProductCone_snd is a dubious translation:
+lean 3 declaration is
+  forall (X : Type.{u1}) (Y : Type.{u1}), Eq.{succ u1} (Quiver.Hom.{succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) (CategoryTheory.Limits.Types.binaryProductCone.{u1} X Y))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.right)) (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.right))) (CategoryTheory.Limits.BinaryFan.snd.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y (CategoryTheory.Limits.Types.binaryProductCone.{u1} X Y)) (Prod.snd.{u1, u1} X Y)
+but is expected to have type
+  forall (X : Type.{u1}) (Y : Type.{u1}), Eq.{succ u1} (Quiver.Hom.{succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) (CategoryTheory.Limits.Types.binaryProductCone.{u1} X Y)))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.right)) (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.right))) (CategoryTheory.Limits.BinaryFan.snd.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y (CategoryTheory.Limits.Types.binaryProductCone.{u1} X Y)) (Prod.snd.{u1, u1} X Y)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.types.binary_product_cone_snd CategoryTheory.Limits.Types.binaryProductCone_sndₓ'. -/
 @[simp]
 theorem binaryProductCone_snd (X Y : Type u) : (binaryProductCone X Y).snd = Prod.snd :=
   rfl
 #align category_theory.limits.types.binary_product_cone_snd CategoryTheory.Limits.Types.binaryProductCone_snd
 
+#print CategoryTheory.Limits.Types.binaryProductLimit /-
 /-- The product type `X × Y` is a binary product for `X` and `Y`. -/
 @[simps]
 def binaryProductLimit (X Y : Type u) : IsLimit (binaryProductCone X Y)
@@ -132,7 +163,9 @@ def binaryProductLimit (X Y : Type u) : IsLimit (binaryProductCone X Y)
   fac s j := Discrete.recOn j fun j => WalkingPair.casesOn j rfl rfl
   uniq s m w := funext fun x => Prod.ext (congr_fun (w ⟨left⟩) x) (congr_fun (w ⟨right⟩) x)
 #align category_theory.limits.types.binary_product_limit CategoryTheory.Limits.Types.binaryProductLimit
+-/
 
+#print CategoryTheory.Limits.Types.binaryProductLimitCone /-
 /-- The category of types has `X × Y`, the usual cartesian product,
 as the binary product of `X` and `Y`.
 -/
@@ -140,36 +173,48 @@ as the binary product of `X` and `Y`.
 def binaryProductLimitCone (X Y : Type u) : Limits.LimitCone (pair X Y) :=
   ⟨_, binaryProductLimit X Y⟩
 #align category_theory.limits.types.binary_product_limit_cone CategoryTheory.Limits.Types.binaryProductLimitCone
+-/
 
+#print CategoryTheory.Limits.Types.binaryProductIso /-
 /-- The categorical binary product in `Type u` is cartesian product. -/
 noncomputable def binaryProductIso (X Y : Type u) : Limits.prod X Y ≅ X × Y :=
   limit.isoLimitCone (binaryProductLimitCone X Y)
 #align category_theory.limits.types.binary_product_iso CategoryTheory.Limits.Types.binaryProductIso
+-/
 
+#print CategoryTheory.Limits.Types.binaryProductIso_hom_comp_fst /-
 @[simp, elementwise]
 theorem binaryProductIso_hom_comp_fst (X Y : Type u) :
     (binaryProductIso X Y).Hom ≫ Prod.fst = Limits.prod.fst :=
   limit.isoLimitCone_hom_π (binaryProductLimitCone X Y) ⟨WalkingPair.left⟩
 #align category_theory.limits.types.binary_product_iso_hom_comp_fst CategoryTheory.Limits.Types.binaryProductIso_hom_comp_fst
+-/
 
+#print CategoryTheory.Limits.Types.binaryProductIso_hom_comp_snd /-
 @[simp, elementwise]
 theorem binaryProductIso_hom_comp_snd (X Y : Type u) :
     (binaryProductIso X Y).Hom ≫ Prod.snd = Limits.prod.snd :=
   limit.isoLimitCone_hom_π (binaryProductLimitCone X Y) ⟨WalkingPair.right⟩
 #align category_theory.limits.types.binary_product_iso_hom_comp_snd CategoryTheory.Limits.Types.binaryProductIso_hom_comp_snd
+-/
 
+#print CategoryTheory.Limits.Types.binaryProductIso_inv_comp_fst /-
 @[simp, elementwise]
 theorem binaryProductIso_inv_comp_fst (X Y : Type u) :
     (binaryProductIso X Y).inv ≫ Limits.prod.fst = Prod.fst :=
   limit.isoLimitCone_inv_π (binaryProductLimitCone X Y) ⟨WalkingPair.left⟩
 #align category_theory.limits.types.binary_product_iso_inv_comp_fst CategoryTheory.Limits.Types.binaryProductIso_inv_comp_fst
+-/
 
+#print CategoryTheory.Limits.Types.binaryProductIso_inv_comp_snd /-
 @[simp, elementwise]
 theorem binaryProductIso_inv_comp_snd (X Y : Type u) :
     (binaryProductIso X Y).inv ≫ Limits.prod.snd = Prod.snd :=
   limit.isoLimitCone_inv_π (binaryProductLimitCone X Y) ⟨WalkingPair.right⟩
 #align category_theory.limits.types.binary_product_iso_inv_comp_snd CategoryTheory.Limits.Types.binaryProductIso_inv_comp_snd
+-/
 
+#print CategoryTheory.Limits.Types.binaryProductFunctor /-
 -- We add the option `type_md` to tell `@[simps]` to not treat homomorphisms `X ⟶ Y` in `Type*` as
 -- a function type
 /-- The functor which sends `X, Y` to the product type `X × Y`. -/
@@ -182,7 +227,9 @@ def binaryProductFunctor : Type u ⥤ Type u ⥤ Type u
   map X₁ X₂ f :=
     { app := fun Y => (binaryProductLimit X₂ Y).lift (BinaryFan.mk (Prod.fst ≫ f) Prod.snd) }
 #align category_theory.limits.types.binary_product_functor CategoryTheory.Limits.Types.binaryProductFunctor
+-/
 
+#print CategoryTheory.Limits.Types.binaryProductIsoProd /-
 /-- The product functor given by the instance `has_binary_products (Type u)` is isomorphic to the
 explicit binary product functor given by the product type.
 -/
@@ -196,13 +243,17 @@ noncomputable def binaryProductIsoProd : binaryProductFunctor ≅ (prod.functor
   · intro X₁ X₂ g
     ext : 3 <;> simp
 #align category_theory.limits.types.binary_product_iso_prod CategoryTheory.Limits.Types.binaryProductIsoProd
+-/
 
+#print CategoryTheory.Limits.Types.binaryCoproductCocone /-
 /-- The sum type `X ⊕ Y` forms a cocone for the binary coproduct of `X` and `Y`. -/
 @[simps]
 def binaryCoproductCocone (X Y : Type u) : Cocone (pair X Y) :=
   BinaryCofan.mk Sum.inl Sum.inr
 #align category_theory.limits.types.binary_coproduct_cocone CategoryTheory.Limits.Types.binaryCoproductCocone
+-/
 
+#print CategoryTheory.Limits.Types.binaryCoproductColimit /-
 /-- The sum type `X ⊕ Y` is a binary coproduct for `X` and `Y`. -/
 @[simps]
 def binaryCoproductColimit (X Y : Type u) : IsColimit (binaryCoproductCocone X Y)
@@ -211,47 +262,66 @@ def binaryCoproductColimit (X Y : Type u) : IsColimit (binaryCoproductCocone X Y
   fac s j := Discrete.recOn j fun j => WalkingPair.casesOn j rfl rfl
   uniq s m w := funext fun x => Sum.casesOn x (congr_fun (w ⟨left⟩)) (congr_fun (w ⟨right⟩))
 #align category_theory.limits.types.binary_coproduct_colimit CategoryTheory.Limits.Types.binaryCoproductColimit
+-/
 
+#print CategoryTheory.Limits.Types.binaryCoproductColimitCocone /-
 /-- The category of types has `X ⊕ Y`,
 as the binary coproduct of `X` and `Y`.
 -/
 def binaryCoproductColimitCocone (X Y : Type u) : Limits.ColimitCocone (pair X Y) :=
   ⟨_, binaryCoproductColimit X Y⟩
 #align category_theory.limits.types.binary_coproduct_colimit_cocone CategoryTheory.Limits.Types.binaryCoproductColimitCocone
+-/
 
+#print CategoryTheory.Limits.Types.binaryCoproductIso /-
 /-- The categorical binary coproduct in `Type u` is the sum `X ⊕ Y`. -/
 noncomputable def binaryCoproductIso (X Y : Type u) : Limits.coprod X Y ≅ Sum X Y :=
   colimit.isoColimitCocone (binaryCoproductColimitCocone X Y)
 #align category_theory.limits.types.binary_coproduct_iso CategoryTheory.Limits.Types.binaryCoproductIso
+-/
 
 open CategoryTheory.Type
 
+#print CategoryTheory.Limits.Types.binaryCoproductIso_inl_comp_hom /-
 @[simp, elementwise]
 theorem binaryCoproductIso_inl_comp_hom (X Y : Type u) :
     Limits.coprod.inl ≫ (binaryCoproductIso X Y).Hom = Sum.inl :=
   colimit.isoColimitCocone_ι_hom (binaryCoproductColimitCocone X Y) ⟨WalkingPair.left⟩
 #align category_theory.limits.types.binary_coproduct_iso_inl_comp_hom CategoryTheory.Limits.Types.binaryCoproductIso_inl_comp_hom
+-/
 
+#print CategoryTheory.Limits.Types.binaryCoproductIso_inr_comp_hom /-
 @[simp, elementwise]
 theorem binaryCoproductIso_inr_comp_hom (X Y : Type u) :
     Limits.coprod.inr ≫ (binaryCoproductIso X Y).Hom = Sum.inr :=
   colimit.isoColimitCocone_ι_hom (binaryCoproductColimitCocone X Y) ⟨WalkingPair.right⟩
 #align category_theory.limits.types.binary_coproduct_iso_inr_comp_hom CategoryTheory.Limits.Types.binaryCoproductIso_inr_comp_hom
+-/
 
+#print CategoryTheory.Limits.Types.binaryCoproductIso_inl_comp_inv /-
 @[simp, elementwise]
 theorem binaryCoproductIso_inl_comp_inv (X Y : Type u) :
     ↾(Sum.inl : X ⟶ Sum X Y) ≫ (binaryCoproductIso X Y).inv = Limits.coprod.inl :=
   colimit.isoColimitCocone_ι_inv (binaryCoproductColimitCocone X Y) ⟨WalkingPair.left⟩
 #align category_theory.limits.types.binary_coproduct_iso_inl_comp_inv CategoryTheory.Limits.Types.binaryCoproductIso_inl_comp_inv
+-/
 
+#print CategoryTheory.Limits.Types.binaryCoproductIso_inr_comp_inv /-
 @[simp, elementwise]
 theorem binaryCoproductIso_inr_comp_inv (X Y : Type u) :
     ↾(Sum.inr : Y ⟶ Sum X Y) ≫ (binaryCoproductIso X Y).inv = Limits.coprod.inr :=
   colimit.isoColimitCocone_ι_inv (binaryCoproductColimitCocone X Y) ⟨WalkingPair.right⟩
 #align category_theory.limits.types.binary_coproduct_iso_inr_comp_inv CategoryTheory.Limits.Types.binaryCoproductIso_inr_comp_inv
+-/
 
 open Function (Injective)
 
+/- warning: category_theory.limits.types.binary_cofan_is_colimit_iff -> CategoryTheory.Limits.Types.binaryCofan_isColimit_iff is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}} {Y : Type.{u1}} (c : CategoryTheory.Limits.BinaryCofan.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y), Iff (Nonempty.{succ (succ u1)} (CategoryTheory.Limits.IsColimit.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (And (Function.Injective.{succ u1, succ u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (CategoryTheory.Limits.BinaryCofan.inl.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y c)) (And (Function.Injective.{succ u1, succ u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.right)) (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.right)) (CategoryTheory.Limits.BinaryCofan.inr.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y c)) (IsCompl.{u1} (Set.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (Set.completeBooleanAlgebra.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (Set.completeBooleanAlgebra.{u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))))))) (Set.range.{u1, succ u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (CategoryTheory.Limits.BinaryCofan.inl.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y c)) (Set.range.{u1, succ u1} (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.obj.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (CategoryTheory.Functor.obj.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.right)) (CategoryTheory.Limits.BinaryCofan.inr.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y c)))))
+but is expected to have type
+  forall {X : Type.{u1}} {Y : Type.{u1}} (c : CategoryTheory.Limits.BinaryCofan.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y), Iff (Nonempty.{succ (succ u1)} (CategoryTheory.Limits.IsColimit.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c)) (And (Function.Injective.{succ u1, succ u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (CategoryTheory.Limits.BinaryCofan.inl.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y c)) (And (Function.Injective.{succ u1, succ u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.right)) (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.right)) (CategoryTheory.Limits.BinaryCofan.inr.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y c)) (IsCompl.{u1} (Set.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (Set.instCompleteBooleanAlgebraSet.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))) (Set.instCompleteBooleanAlgebraSet.{u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left))))))) (Set.range.{u1, succ u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (CategoryTheory.Limits.BinaryCofan.inl.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y c)) (Set.range.{u1, succ u1} (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (Prefunctor.obj.{succ u1, succ u1, succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, succ u1, succ u1} Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.const.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y) c))) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.left)) (Prefunctor.obj.{1, succ u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.CategoryStruct.toQuiver.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.Category.toCategoryStruct.{0, 0} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y)) (CategoryTheory.Discrete.mk.{0} CategoryTheory.Limits.WalkingPair CategoryTheory.Limits.WalkingPair.right)) (CategoryTheory.Limits.BinaryCofan.inr.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y c)))))
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.types.binary_cofan_is_colimit_iff CategoryTheory.Limits.Types.binaryCofan_isColimit_iffₓ'. -/
 theorem binaryCofan_isColimit_iff {X Y : Type u} (c : BinaryCofan X Y) :
     Nonempty (IsColimit c) ↔
       Injective c.inl ∧ Injective c.inr ∧ IsCompl (Set.range c.inl) (Set.range c.inr) :=
@@ -310,6 +380,12 @@ theorem binaryCofan_isColimit_iff {X Y : Type u} (c : BinaryCofan X Y) :
         split_ifs <;> exact congr_arg _ (Equiv.apply_ofInjective_symm _ ⟨_, _⟩).symm
 #align category_theory.limits.types.binary_cofan_is_colimit_iff CategoryTheory.Limits.Types.binaryCofan_isColimit_iff
 
+/- warning: category_theory.limits.types.is_coprod_of_mono -> CategoryTheory.Limits.Types.isCoprodOfMono is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}} {Y : Type.{u1}} (f : Quiver.Hom.{succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) X Y) [_inst_1 : CategoryTheory.Mono.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y f], CategoryTheory.Limits.IsColimit.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X (Subtype.{succ u1} Y (fun (x : Y) => Membership.Mem.{u1, u1} Y (Set.{u1} Y) (Set.hasMem.{u1} Y) x (HasCompl.compl.{u1} (Set.{u1} Y) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} Y) (Set.booleanAlgebra.{u1} Y)) (Set.range.{u1, succ u1} Y X f))))) (CategoryTheory.Limits.BinaryCofan.mk.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X (Subtype.{succ u1} Y (fun (x : Y) => Membership.Mem.{u1, u1} Y (Set.{u1} Y) (Set.hasMem.{u1} Y) x (HasCompl.compl.{u1} (Set.{u1} Y) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} Y) (Set.booleanAlgebra.{u1} Y)) (Set.range.{u1, succ u1} Y X f)))) Y f (Subtype.val.{succ u1} Y (fun (x : Y) => Membership.Mem.{u1, u1} Y (Set.{u1} Y) (Set.hasMem.{u1} Y) x (HasCompl.compl.{u1} (Set.{u1} Y) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} Y) (Set.booleanAlgebra.{u1} Y)) (Set.range.{u1, succ u1} Y X f)))))
+but is expected to have type
+  forall {X : Type.{u1}} {Y : Type.{u1}} (f : Quiver.Hom.{succ u1, succ u1} Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) X Y) [_inst_1 : CategoryTheory.Mono.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X Y f], CategoryTheory.Limits.IsColimit.{0, u1, 0, succ u1} (CategoryTheory.Discrete.{0} CategoryTheory.Limits.WalkingPair) (CategoryTheory.discreteCategory.{0} CategoryTheory.Limits.WalkingPair) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Limits.pair.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X (Subtype.{succ u1} Y (fun (x : Y) => Membership.mem.{u1, u1} Y (Set.{u1} Y) (Set.instMembershipSet.{u1} Y) x (HasCompl.compl.{u1} (Set.{u1} Y) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} Y) (Set.instBooleanAlgebraSet.{u1} Y)) (Set.range.{u1, succ u1} Y X f))))) (CategoryTheory.Limits.BinaryCofan.mk.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1} X (Subtype.{succ u1} Y (fun (x : Y) => Membership.mem.{u1, u1} Y (Set.{u1} Y) (Set.instMembershipSet.{u1} Y) x (HasCompl.compl.{u1} (Set.{u1} Y) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} Y) (Set.instBooleanAlgebraSet.{u1} Y)) (Set.range.{u1, succ u1} Y X f)))) Y f (Subtype.val.{succ u1} Y (fun (x : Y) => Membership.mem.{u1, u1} Y (Set.{u1} Y) (Set.instMembershipSet.{u1} Y) x (HasCompl.compl.{u1} (Set.{u1} Y) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} Y) (Set.instBooleanAlgebraSet.{u1} Y)) (Set.range.{u1, succ u1} Y X f)))))
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.types.is_coprod_of_mono CategoryTheory.Limits.Types.isCoprodOfMonoₓ'. -/
 /-- Any monomorphism in `Type` is an coproduct injection. -/
 noncomputable def isCoprodOfMono {X Y : Type u} (f : X ⟶ Y) [Mono f] :
     IsColimit (BinaryCofan.mk f (Subtype.val : Set.range fᶜ → Y)) :=
@@ -319,6 +395,7 @@ noncomputable def isCoprodOfMono {X Y : Type u} (f : X ⟶ Y) [Mono f] :
         (eq_compl_iff_isCompl.mp <| Subtype.range_val).symm⟩
 #align category_theory.limits.types.is_coprod_of_mono CategoryTheory.Limits.Types.isCoprodOfMono
 
+#print CategoryTheory.Limits.Types.productLimitCone /-
 /-- The category of types has `Π j, f j` as the product of a type family `f : J → Type`.
 -/
 def productLimitCone {J : Type u} (F : J → Type max u v) : Limits.LimitCone (Discrete.functor F)
@@ -330,24 +407,32 @@ def productLimitCone {J : Type u} (F : J → Type max u v) : Limits.LimitCone (D
     { lift := fun s x j => s.π.app ⟨j⟩ x
       uniq := fun s m w => funext fun x => funext fun j => (congr_fun (w ⟨j⟩) x : _) }
 #align category_theory.limits.types.product_limit_cone CategoryTheory.Limits.Types.productLimitCone
+-/
 
+#print CategoryTheory.Limits.Types.productIso /-
 /-- The categorical product in `Type u` is the type theoretic product `Π j, F j`. -/
 noncomputable def productIso {J : Type u} (F : J → Type max u v) : ∏ F ≅ ∀ j, F j :=
   limit.isoLimitCone (productLimitCone F)
 #align category_theory.limits.types.product_iso CategoryTheory.Limits.Types.productIso
+-/
 
+#print CategoryTheory.Limits.Types.productIso_hom_comp_eval /-
 @[simp, elementwise]
 theorem productIso_hom_comp_eval {J : Type u} (F : J → Type max u v) (j : J) :
     ((productIso F).Hom ≫ fun f => f j) = Pi.π F j :=
   rfl
 #align category_theory.limits.types.product_iso_hom_comp_eval CategoryTheory.Limits.Types.productIso_hom_comp_eval
+-/
 
+#print CategoryTheory.Limits.Types.productIso_inv_comp_π /-
 @[simp, elementwise]
 theorem productIso_inv_comp_π {J : Type u} (F : J → Type max u v) (j : J) :
     (productIso F).inv ≫ Pi.π F j = fun f => f j :=
   limit.isoLimitCone_inv_π (productLimitCone F) ⟨j⟩
 #align category_theory.limits.types.product_iso_inv_comp_π CategoryTheory.Limits.Types.productIso_inv_comp_π
+-/
 
+#print CategoryTheory.Limits.Types.coproductColimitCocone /-
 /-- The category of types has `Σ j, f j` as the coproduct of a type family `f : J → Type`.
 -/
 def coproductColimitCocone {J : Type u} (F : J → Type u) : Limits.ColimitCocone (Discrete.functor F)
@@ -362,28 +447,36 @@ def coproductColimitCocone {J : Type u} (F : J → Type u) : Limits.ColimitCocon
         have := congr_fun (w ⟨j⟩) x
         exact this }
 #align category_theory.limits.types.coproduct_colimit_cocone CategoryTheory.Limits.Types.coproductColimitCocone
+-/
 
+#print CategoryTheory.Limits.Types.coproductIso /-
 /-- The categorical coproduct in `Type u` is the type theoretic coproduct `Σ j, F j`. -/
 noncomputable def coproductIso {J : Type u} (F : J → Type u) : ∐ F ≅ Σj, F j :=
   colimit.isoColimitCocone (coproductColimitCocone F)
 #align category_theory.limits.types.coproduct_iso CategoryTheory.Limits.Types.coproductIso
+-/
 
+#print CategoryTheory.Limits.Types.coproductIso_ι_comp_hom /-
 @[simp, elementwise]
 theorem coproductIso_ι_comp_hom {J : Type u} (F : J → Type u) (j : J) :
     Sigma.ι F j ≫ (coproductIso F).Hom = fun x : F j => (⟨j, x⟩ : Σj, F j) :=
   colimit.isoColimitCocone_ι_hom (coproductColimitCocone F) ⟨j⟩
 #align category_theory.limits.types.coproduct_iso_ι_comp_hom CategoryTheory.Limits.Types.coproductIso_ι_comp_hom
+-/
 
+#print CategoryTheory.Limits.Types.coproductIso_mk_comp_inv /-
 @[simp, elementwise]
 theorem coproductIso_mk_comp_inv {J : Type u} (F : J → Type u) (j : J) :
     (↾fun x : F j => (⟨j, x⟩ : Σj, F j)) ≫ (coproductIso F).inv = Sigma.ι F j :=
   rfl
 #align category_theory.limits.types.coproduct_iso_mk_comp_inv CategoryTheory.Limits.Types.coproductIso_mk_comp_inv
+-/
 
 section Fork
 
 variable {X Y Z : Type u} (f : X ⟶ Y) {g h : Y ⟶ Z} (w : f ≫ g = f ≫ h)
 
+#print CategoryTheory.Limits.Types.typeEqualizerOfUnique /-
 /--
 Show the given fork in `Type u` is an equalizer given that any element in the "difference kernel"
 comes from `X`.
@@ -402,7 +495,9 @@ noncomputable def typeEqualizerOfUnique (t : ∀ y : Y, g y = h y → ∃! x : X
       apply (Classical.choose_spec (t (s.ι i) _)).2
       apply congr_fun hm i
 #align category_theory.limits.types.type_equalizer_of_unique CategoryTheory.Limits.Types.typeEqualizerOfUnique
+-/
 
+#print CategoryTheory.Limits.Types.unique_of_type_equalizer /-
 /-- The converse of `type_equalizer_of_unique`. -/
 theorem unique_of_type_equalizer (t : IsLimit (Fork.ofι _ w)) (y : Y) (hy : g y = h y) :
     ∃! x : X, f x = y := by
@@ -416,13 +511,17 @@ theorem unique_of_type_equalizer (t : IsLimit (Fork.ofι _ w)) (y : Y) (hy : g y
   ext ⟨⟩
   apply hx'.trans (congr_fun (fork.is_limit.lift' t _ hy').2 ⟨⟩).symm
 #align category_theory.limits.types.unique_of_type_equalizer CategoryTheory.Limits.Types.unique_of_type_equalizer
+-/
 
+#print CategoryTheory.Limits.Types.type_equalizer_iff_unique /-
 theorem type_equalizer_iff_unique :
     Nonempty (IsLimit (Fork.ofι _ w)) ↔ ∀ y : Y, g y = h y → ∃! x : X, f x = y :=
   ⟨fun i => unique_of_type_equalizer _ _ (Classical.choice i), fun k =>
     ⟨typeEqualizerOfUnique f w k⟩⟩
 #align category_theory.limits.types.type_equalizer_iff_unique CategoryTheory.Limits.Types.type_equalizer_iff_unique
+-/
 
+#print CategoryTheory.Limits.Types.equalizerLimit /-
 /-- Show that the subtype `{x : Y // g x = h x}` is an equalizer for the pair `(g,h)`. -/
 def equalizerLimit : Limits.LimitCone (parallelPair g h)
     where
@@ -432,23 +531,30 @@ def equalizerLimit : Limits.LimitCone (parallelPair g h)
       ⟨fun i => ⟨s.ι i, by apply congr_fun s.condition i⟩, rfl, fun m hm =>
         funext fun x => Subtype.ext (congr_fun hm x)⟩
 #align category_theory.limits.types.equalizer_limit CategoryTheory.Limits.Types.equalizerLimit
+-/
 
 variable (g h)
 
+#print CategoryTheory.Limits.Types.equalizerIso /-
 /-- The categorical equalizer in `Type u` is `{x : Y // g x = h x}`. -/
 noncomputable def equalizerIso : equalizer g h ≅ { x : Y // g x = h x } :=
   limit.isoLimitCone equalizerLimit
 #align category_theory.limits.types.equalizer_iso CategoryTheory.Limits.Types.equalizerIso
+-/
 
+#print CategoryTheory.Limits.Types.equalizerIso_hom_comp_subtype /-
 @[simp, elementwise]
 theorem equalizerIso_hom_comp_subtype : (equalizerIso g h).Hom ≫ Subtype.val = equalizer.ι g h :=
   rfl
 #align category_theory.limits.types.equalizer_iso_hom_comp_subtype CategoryTheory.Limits.Types.equalizerIso_hom_comp_subtype
+-/
 
+#print CategoryTheory.Limits.Types.equalizerIso_inv_comp_ι /-
 @[simp, elementwise]
 theorem equalizerIso_inv_comp_ι : (equalizerIso g h).inv ≫ equalizer.ι g h = Subtype.val :=
   limit.isoLimitCone_inv_π equalizerLimit WalkingParallelPair.zero
 #align category_theory.limits.types.equalizer_iso_inv_comp_ι CategoryTheory.Limits.Types.equalizerIso_inv_comp_ι
+-/
 
 end Fork
 
@@ -456,18 +562,21 @@ section Cofork
 
 variable {X Y Z : Type u} (f g : X ⟶ Y)
 
+#print CategoryTheory.Limits.Types.CoequalizerRel /-
 /-- (Implementation) The relation to be quotiented to obtain the coequalizer. -/
 inductive CoequalizerRel : Y → Y → Prop
   | Rel (x : X) : coequalizer_rel (f x) (g x)
 #align category_theory.limits.types.coequalizer_rel CategoryTheory.Limits.Types.CoequalizerRel
+-/
 
+#print CategoryTheory.Limits.Types.coequalizerColimit /-
 /-- Show that the quotient by the relation generated by `f(x) ~ g(x)`
 is a coequalizer for the pair `(f, g)`.
 -/
 def coequalizerColimit : Limits.ColimitCocone (parallelPair f g)
     where
   Cocone :=
-    Cofork.ofπ (Quot.mk (CoequalizerRel f g)) (funext fun x => Quot.sound (CoequalizerRel.rel x))
+    Cofork.ofπ (Quot.mk (CoequalizerRel f g)) (funext fun x => Quot.sound (CoequalizerRel.Rel x))
   IsColimit :=
     Cofork.IsColimit.mk' _ fun s =>
       ⟨Quot.lift s.π fun a b (h : CoequalizerRel f g a b) =>
@@ -476,7 +585,9 @@ def coequalizerColimit : Limits.ColimitCocone (parallelPair f g)
           exact congr_fun s.condition h_1,
         rfl, fun m hm => funext fun x => Quot.inductionOn x (congr_fun hm : _)⟩
 #align category_theory.limits.types.coequalizer_colimit CategoryTheory.Limits.Types.coequalizerColimit
+-/
 
+#print CategoryTheory.Limits.Types.coequalizer_preimage_image_eq_of_preimage_eq /-
 /-- If `π : Y ⟶ Z` is an equalizer for `(f, g)`, and `U ⊆ Y` such that `f ⁻¹' U = g ⁻¹' U`,
 then `π ⁻¹' (π '' U) = U`.
 -/
@@ -504,23 +615,30 @@ theorem coequalizer_preimage_image_eq_of_preimage_eq (π : Y ⟶ Z) (e : f ≫ 
     exact (eqv.eqv_gen_iff.mp (EqvGen.mono lem (Quot.exact _ e'))).mp hy
   · exact fun hx => ⟨x, hx, rfl⟩
 #align category_theory.limits.types.coequalizer_preimage_image_eq_of_preimage_eq CategoryTheory.Limits.Types.coequalizer_preimage_image_eq_of_preimage_eq
+-/
 
+#print CategoryTheory.Limits.Types.coequalizerIso /-
 /-- The categorical coequalizer in `Type u` is the quotient by `f g ~ g x`. -/
 noncomputable def coequalizerIso : coequalizer f g ≅ Quot (CoequalizerRel f g) :=
   colimit.isoColimitCocone (coequalizerColimit f g)
 #align category_theory.limits.types.coequalizer_iso CategoryTheory.Limits.Types.coequalizerIso
+-/
 
+#print CategoryTheory.Limits.Types.coequalizerIso_π_comp_hom /-
 @[simp, elementwise]
 theorem coequalizerIso_π_comp_hom :
     coequalizer.π f g ≫ (coequalizerIso f g).Hom = Quot.mk (CoequalizerRel f g) :=
   colimit.isoColimitCocone_ι_hom (coequalizerColimit f g) WalkingParallelPair.one
 #align category_theory.limits.types.coequalizer_iso_π_comp_hom CategoryTheory.Limits.Types.coequalizerIso_π_comp_hom
+-/
 
+#print CategoryTheory.Limits.Types.coequalizerIso_quot_comp_inv /-
 @[simp, elementwise]
 theorem coequalizerIso_quot_comp_inv :
     ↾Quot.mk (CoequalizerRel f g) ≫ (coequalizerIso f g).inv = coequalizer.π f g :=
   rfl
 #align category_theory.limits.types.coequalizer_iso_quot_comp_inv CategoryTheory.Limits.Types.coequalizerIso_quot_comp_inv
+-/
 
 end Cofork
 
@@ -536,6 +654,7 @@ variable {W X Y Z : Type u}
 
 variable (f : X ⟶ Z) (g : Y ⟶ Z)
 
+#print CategoryTheory.Limits.Types.PullbackObj /-
 /-- The usual explicit pullback in the category of types, as a subtype of the product.
 The full `limit_cone` data is bundled as `pullback_limit_cone f g`.
 -/
@@ -543,18 +662,22 @@ The full `limit_cone` data is bundled as `pullback_limit_cone f g`.
 abbrev PullbackObj : Type u :=
   { p : X × Y // f p.1 = g p.2 }
 #align category_theory.limits.types.pullback_obj CategoryTheory.Limits.Types.PullbackObj
+-/
 
 -- `pullback_obj f g` comes with a coercion to the product type `X × Y`.
 example (p : PullbackObj f g) : X × Y :=
   p
 
+#print CategoryTheory.Limits.Types.pullbackCone /-
 /-- The explicit pullback cone on `pullback_obj f g`.
 This is bundled with the `is_limit` data as `pullback_limit_cone f g`.
 -/
 abbrev pullbackCone : Limits.PullbackCone f g :=
   PullbackCone.mk (fun p : PullbackObj f g => p.1.1) (fun p => p.1.2) (funext fun p => p.2)
 #align category_theory.limits.types.pullback_cone CategoryTheory.Limits.Types.pullbackCone
+-/
 
+#print CategoryTheory.Limits.Types.pullbackLimitCone /-
 /-- The explicit pullback in the category of types, bundled up as a `limit_cone`
 for given `f` and `g`.
 -/
@@ -569,44 +692,57 @@ def pullbackLimitCone (f : X ⟶ Z) (g : Y ⟶ Z) : Limits.LimitCone (cospan f g
         Subtype.ext <|
           Prod.ext (congr_fun (w WalkingCospan.left) x) (congr_fun (w WalkingCospan.right) x)
 #align category_theory.limits.types.pullback_limit_cone CategoryTheory.Limits.Types.pullbackLimitCone
+-/
 
+#print CategoryTheory.Limits.Types.pullbackConeIsoPullback /-
 /-- The pullback cone given by the instance `has_pullbacks (Type u)` is isomorphic to the
 explicit pullback cone given by `pullback_limit_cone`.
 -/
 noncomputable def pullbackConeIsoPullback : limit.cone (cospan f g) ≅ pullbackCone f g :=
   (limit.isLimit _).uniqueUpToIso (pullbackLimitCone f g).IsLimit
 #align category_theory.limits.types.pullback_cone_iso_pullback CategoryTheory.Limits.Types.pullbackConeIsoPullback
+-/
 
+#print CategoryTheory.Limits.Types.pullbackIsoPullback /-
 /-- The pullback given by the instance `has_pullbacks (Type u)` is isomorphic to the
 explicit pullback object given by `pullback_limit_obj`.
 -/
 noncomputable def pullbackIsoPullback : pullback f g ≅ PullbackObj f g :=
   (Cones.forget _).mapIso <| pullbackConeIsoPullback f g
 #align category_theory.limits.types.pullback_iso_pullback CategoryTheory.Limits.Types.pullbackIsoPullback
+-/
 
+#print CategoryTheory.Limits.Types.pullbackIsoPullback_hom_fst /-
 @[simp]
 theorem pullbackIsoPullback_hom_fst (p : pullback f g) :
     ((pullbackIsoPullback f g).Hom p : X × Y).fst = (pullback.fst : _ ⟶ X) p :=
   congr_fun ((pullbackConeIsoPullback f g).Hom.w left) p
 #align category_theory.limits.types.pullback_iso_pullback_hom_fst CategoryTheory.Limits.Types.pullbackIsoPullback_hom_fst
+-/
 
+#print CategoryTheory.Limits.Types.pullbackIsoPullback_hom_snd /-
 @[simp]
 theorem pullbackIsoPullback_hom_snd (p : pullback f g) :
     ((pullbackIsoPullback f g).Hom p : X × Y).snd = (pullback.snd : _ ⟶ Y) p :=
   congr_fun ((pullbackConeIsoPullback f g).Hom.w right) p
 #align category_theory.limits.types.pullback_iso_pullback_hom_snd CategoryTheory.Limits.Types.pullbackIsoPullback_hom_snd
+-/
 
+#print CategoryTheory.Limits.Types.pullbackIsoPullback_inv_fst /-
 @[simp]
 theorem pullbackIsoPullback_inv_fst :
     (pullbackIsoPullback f g).inv ≫ pullback.fst = fun p => (p : X × Y).fst :=
   (pullbackConeIsoPullback f g).inv.w left
 #align category_theory.limits.types.pullback_iso_pullback_inv_fst CategoryTheory.Limits.Types.pullbackIsoPullback_inv_fst
+-/
 
+#print CategoryTheory.Limits.Types.pullbackIsoPullback_inv_snd /-
 @[simp]
 theorem pullbackIsoPullback_inv_snd :
     (pullbackIsoPullback f g).inv ≫ pullback.snd = fun p => (p : X × Y).snd :=
   (pullbackConeIsoPullback f g).inv.w right
 #align category_theory.limits.types.pullback_iso_pullback_inv_snd CategoryTheory.Limits.Types.pullbackIsoPullback_inv_snd
+-/
 
 end Pullback
 
Diff
@@ -70,7 +70,7 @@ theorem pi_map_π_apply {β : Type u} {f g : β → Type u} (α : ∀ j, f j ⟶
 def terminalLimitCone : Limits.LimitCone (Functor.empty (Type u))
     where
   Cone :=
-    { x := PUnit
+    { pt := PUnit
       π := by tidy }
   IsLimit := by tidy
 #align category_theory.limits.types.terminal_limit_cone CategoryTheory.Limits.Types.terminalLimitCone
@@ -89,7 +89,7 @@ noncomputable def isTerminalPunit : IsTerminal (PUnit : Type u) :=
 def initialColimitCocone : Limits.ColimitCocone (Functor.empty (Type u))
     where
   Cocone :=
-    { x := PEmpty
+    { pt := PEmpty
       ι := by tidy }
   IsColimit := by tidy
 #align category_theory.limits.types.initial_colimit_cocone CategoryTheory.Limits.Types.initialColimitCocone
@@ -109,7 +109,7 @@ open CategoryTheory.Limits.WalkingPair
 -- We manually generate the other projection lemmas since the simp-normal form for the legs is
 -- otherwise not created correctly.
 /-- The product type `X × Y` forms a cone for the binary product of `X` and `Y`. -/
-@[simps x]
+@[simps pt]
 def binaryProductCone (X Y : Type u) : BinaryFan X Y :=
   BinaryFan.mk Prod.fst Prod.snd
 #align category_theory.limits.types.binary_product_cone CategoryTheory.Limits.Types.binaryProductCone
@@ -324,7 +324,7 @@ noncomputable def isCoprodOfMono {X Y : Type u} (f : X ⟶ Y) [Mono f] :
 def productLimitCone {J : Type u} (F : J → Type max u v) : Limits.LimitCone (Discrete.functor F)
     where
   Cone :=
-    { x := ∀ j, F j
+    { pt := ∀ j, F j
       π := { app := fun j f => f j.as } }
   IsLimit :=
     { lift := fun s x j => s.π.app ⟨j⟩ x
@@ -353,7 +353,7 @@ theorem productIso_inv_comp_π {J : Type u} (F : J → Type max u v) (j : J) :
 def coproductColimitCocone {J : Type u} (F : J → Type u) : Limits.ColimitCocone (Discrete.functor F)
     where
   Cocone :=
-    { x := Σj, F j
+    { pt := Σj, F j
       ι := { app := fun j x => ⟨j.as, x⟩ } }
   IsColimit :=
     { desc := fun s x => s.ι.app ⟨x.1⟩ x.2
@@ -573,7 +573,7 @@ def pullbackLimitCone (f : X ⟶ Z) (g : Y ⟶ Z) : Limits.LimitCone (cospan f g
 /-- The pullback cone given by the instance `has_pullbacks (Type u)` is isomorphic to the
 explicit pullback cone given by `pullback_limit_cone`.
 -/
-noncomputable def pullbackConeIsoPullback : Limit.cone (cospan f g) ≅ pullbackCone f g :=
+noncomputable def pullbackConeIsoPullback : limit.cone (cospan f g) ≅ pullbackCone f g :=
   (limit.isLimit _).uniqueUpToIso (pullbackLimitCone f g).IsLimit
 #align category_theory.limits.types.pullback_cone_iso_pullback CategoryTheory.Limits.Types.pullbackConeIsoPullback
 
Diff
@@ -129,8 +129,8 @@ theorem binaryProductCone_snd (X Y : Type u) : (binaryProductCone X Y).snd = Pro
 def binaryProductLimit (X Y : Type u) : IsLimit (binaryProductCone X Y)
     where
   lift (s : BinaryFan X Y) x := (s.fst x, s.snd x)
-  fac' s j := Discrete.recOn j fun j => WalkingPair.casesOn j rfl rfl
-  uniq' s m w := funext fun x => Prod.ext (congr_fun (w ⟨left⟩) x) (congr_fun (w ⟨right⟩) x)
+  fac s j := Discrete.recOn j fun j => WalkingPair.casesOn j rfl rfl
+  uniq s m w := funext fun x => Prod.ext (congr_fun (w ⟨left⟩) x) (congr_fun (w ⟨right⟩) x)
 #align category_theory.limits.types.binary_product_limit CategoryTheory.Limits.Types.binaryProductLimit
 
 /-- The category of types has `X × Y`, the usual cartesian product,
@@ -208,8 +208,8 @@ def binaryCoproductCocone (X Y : Type u) : Cocone (pair X Y) :=
 def binaryCoproductColimit (X Y : Type u) : IsColimit (binaryCoproductCocone X Y)
     where
   desc := fun s : BinaryCofan X Y => Sum.elim s.inl s.inr
-  fac' s j := Discrete.recOn j fun j => WalkingPair.casesOn j rfl rfl
-  uniq' s m w := funext fun x => Sum.casesOn x (congr_fun (w ⟨left⟩)) (congr_fun (w ⟨right⟩))
+  fac s j := Discrete.recOn j fun j => WalkingPair.casesOn j rfl rfl
+  uniq s m w := funext fun x => Sum.casesOn x (congr_fun (w ⟨left⟩)) (congr_fun (w ⟨right⟩))
 #align category_theory.limits.types.binary_coproduct_colimit CategoryTheory.Limits.Types.binaryCoproductColimit
 
 /-- The category of types has `X ⊕ Y`,
@@ -328,7 +328,7 @@ def productLimitCone {J : Type u} (F : J → Type max u v) : Limits.LimitCone (D
       π := { app := fun j f => f j.as } }
   IsLimit :=
     { lift := fun s x j => s.π.app ⟨j⟩ x
-      uniq' := fun s m w => funext fun x => funext fun j => (congr_fun (w ⟨j⟩) x : _) }
+      uniq := fun s m w => funext fun x => funext fun j => (congr_fun (w ⟨j⟩) x : _) }
 #align category_theory.limits.types.product_limit_cone CategoryTheory.Limits.Types.productLimitCone
 
 /-- The categorical product in `Type u` is the type theoretic product `Π j, F j`. -/
@@ -357,7 +357,7 @@ def coproductColimitCocone {J : Type u} (F : J → Type u) : Limits.ColimitCocon
       ι := { app := fun j x => ⟨j.as, x⟩ } }
   IsColimit :=
     { desc := fun s x => s.ι.app ⟨x.1⟩ x.2
-      uniq' := fun s m w => by
+      uniq := fun s m w => by
         ext ⟨j, x⟩
         have := congr_fun (w ⟨j⟩) x
         exact this }

Changes in mathlib4

mathlib3
mathlib4
chore: split Subsingleton,Nontrivial off of Data.Set.Basic (#11832)

Moves definition of and lemmas related to Set.Subsingleton and Set.Nontrivial to a new file, so that Basic can be shorter.

Diff
@@ -9,7 +9,7 @@ import Mathlib.CategoryTheory.Limits.Shapes.BinaryProducts
 import Mathlib.CategoryTheory.Limits.Shapes.Terminal
 import Mathlib.CategoryTheory.ConcreteCategory.Basic
 import Mathlib.Tactic.CategoryTheory.Elementwise
-import Mathlib.Data.Set.Basic
+import Mathlib.Data.Set.Subsingleton
 
 #align_import category_theory.limits.shapes.types from "leanprover-community/mathlib"@"5dc6092d09e5e489106865241986f7f2ad28d4c8"
 
chore: classify porting notes referring to missing linters (#12098)

Reference the newly created issues #12094 and #12096, as well as the pre-existing #5171. Change all references to #10927 to #5171. Some of these changes were not labelled as "porting note"; change this for good measure.

Diff
@@ -647,7 +647,7 @@ instance : HasPushouts.{u} (Type u) :=
 variable {W X Y Z : Type u}
 variable (f : X ⟶ Z) (g : Y ⟶ Z)
 
--- porting note (#10927): removed @[nolint has_nonempty_instance]
+-- porting note (#5171): removed @[nolint has_nonempty_instance]
 /-- The usual explicit pullback in the category of types, as a subtype of the product.
 The full `LimitCone` data is bundled as `pullbackLimitCone f g`.
 -/
chore(*): remove empty lines between variable statements (#11418)

Empty lines were removed by executing the following Python script twice

import os
import re


# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
  for filename in files:
    if filename.endswith('.lean'):
      file_path = os.path.join(dir_path, filename)

      # Open the file and read its contents
      with open(file_path, 'r') as file:
        content = file.read()

      # Use a regular expression to replace sequences of "variable" lines separated by empty lines
      # with sequences without empty lines
      modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)

      # Write the modified content back to the file
      with open(file_path, 'w') as file:
        file.write(modified_content)
Diff
@@ -645,7 +645,6 @@ instance : HasPushouts.{u} (Type u) :=
   hasPushouts_of_hasWidePushouts.{u} (Type u)
 
 variable {W X Y Z : Type u}
-
 variable (f : X ⟶ Z) (g : Y ⟶ Z)
 
 -- porting note (#10927): removed @[nolint has_nonempty_instance]
refactor: generalize universes for colimits in Type (#11148)

This is a smaller version of #7020. Before this PR, for limits, we gave instances for small indexing categories, but for colimits, we gave instances for TypeMax. This PR changes so that we give instances for small indexing categories in both cases. This is more general and also more uniform.

Co-authored-by: Joël Riou <rioujoel@gmail.com>

Diff
@@ -641,6 +641,9 @@ instance : HasPullbacks.{u} (Type u) :=
   -- inferInstance
   hasPullbacks_of_hasWidePullbacks.{u} (Type u)
 
+instance : HasPushouts.{u} (Type u) :=
+  hasPushouts_of_hasWidePushouts.{u} (Type u)
+
 variable {W X Y Z : Type u}
 
 variable (f : X ⟶ Z) (g : Y ⟶ Z)
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -86,7 +86,7 @@ theorem pi_map_π_apply' {β : Type v} {f g : β → Type v} (α : ∀ j, f j 
 
 /-- The category of types has `PUnit` as a terminal object. -/
 def terminalLimitCone : Limits.LimitCone (Functor.empty (Type u)) where
-  -- porting note: tidy was able to fill the structure automatically
+  -- Porting note: tidy was able to fill the structure automatically
   cone :=
     { pt := PUnit
       π := (Functor.uniqueFromEmpty _).hom }
@@ -108,7 +108,7 @@ noncomputable def isTerminalPunit : IsTerminal (PUnit : Type u) :=
   terminalIsTerminal.ofIso terminalIso
 #align category_theory.limits.types.is_terminal_punit CategoryTheory.Limits.Types.isTerminalPunit
 
--- porting note: the following three instances have been added to ease
+-- Porting note: the following three instances have been added to ease
 -- the automation in a definition in `AlgebraicTopology.SimplicialSet`
 noncomputable instance : Inhabited (⊤_ (Type u)) :=
   ⟨@terminal.from (Type u) _ _ (ULift (Fin 1)) (ULift.up 0)⟩
@@ -134,7 +134,7 @@ noncomputable def isTerminalEquivIsoPUnit (X : Type u) : IsTerminal X ≃ (X ≅
 
 /-- The category of types has `PEmpty` as an initial object. -/
 def initialColimitCocone : Limits.ColimitCocone (Functor.empty (Type u)) where
-  -- porting note: tidy was able to fill the structure automatically
+  -- Porting note: tidy was able to fill the structure automatically
   cocone :=
     { pt := PEmpty
       ι := (Functor.uniqueFromEmpty _).inv }
@@ -227,7 +227,7 @@ theorem binaryProductIso_inv_comp_snd (X Y : Type u) :
   limit.isoLimitCone_inv_π (binaryProductLimitCone X Y) ⟨WalkingPair.right⟩
 #align category_theory.limits.types.binary_product_iso_inv_comp_snd CategoryTheory.Limits.Types.binaryProductIso_inv_comp_snd
 
--- porting note: it was originally @[simps (config := { typeMd := reducible })]
+-- Porting note: it was originally @[simps (config := { typeMd := reducible })]
 -- We add the option `type_md` to tell `@[simps]` to not treat homomorphisms `X ⟶ Y` in `Type*` as
 -- a function type
 /-- The functor which sends `X, Y` to the product type `X × Y`. -/
@@ -473,7 +473,7 @@ theorem coproductIso_ι_comp_hom {J : Type v} (F : J → TypeMax.{v, u}) (j : J)
   colimit.isoColimitCocone_ι_hom (coproductColimitCocone F) ⟨j⟩
 #align category_theory.limits.types.coproduct_iso_ι_comp_hom CategoryTheory.Limits.Types.coproductIso_ι_comp_hom
 
--- porting note: was @[elementwise (attr := simp)], but it produces a trivial lemma
+-- Porting note: was @[elementwise (attr := simp)], but it produces a trivial lemma
 -- removed simp attribute because it seems it never applies
 theorem coproductIso_mk_comp_inv {J : Type v} (F : J → TypeMax.{v, u}) (j : J) :
     (↾fun x : F j => (⟨j, x⟩ : Σj, F j)) ≫ (coproductIso F).inv = Sigma.ι F j :=
@@ -538,7 +538,7 @@ noncomputable def equalizerIso : equalizer g h ≅ { x : Y // g x = h x } :=
   limit.isoLimitCone equalizerLimit
 #align category_theory.limits.types.equalizer_iso CategoryTheory.Limits.Types.equalizerIso
 
--- porting note: was @[elementwise], but it produces a trivial lemma
+-- Porting note: was @[elementwise], but it produces a trivial lemma
 @[simp]
 theorem equalizerIso_hom_comp_subtype : (equalizerIso g h).hom ≫ Subtype.val = equalizer.ι g h := by
   rfl
@@ -585,7 +585,7 @@ theorem coequalizer_preimage_image_eq_of_preimage_eq (π : Y ⟶ Z) (e : f ≫ 
     rintro _ _ ⟨x⟩
     change x ∈ f ⁻¹' U ↔ x ∈ g ⁻¹' U
     rw [H]
-  -- porting note: tidy was able to fill the structure automatically
+  -- Porting note: tidy was able to fill the structure automatically
   have eqv : _root_.Equivalence fun x y => x ∈ U ↔ y ∈ U :=
     { refl := by tauto
       symm := by tauto
@@ -617,7 +617,7 @@ theorem coequalizerIso_π_comp_hom :
   colimit.isoColimitCocone_ι_hom (coequalizerColimit f g) WalkingParallelPair.one
 #align category_theory.limits.types.coequalizer_iso_π_comp_hom CategoryTheory.Limits.Types.coequalizerIso_π_comp_hom
 
--- porting note: was @[elementwise], but it produces a trivial lemma
+-- Porting note: was @[elementwise], but it produces a trivial lemma
 @[simp]
 theorem coequalizerIso_quot_comp_inv :
     ↾Quot.mk (CoequalizerRel f g) ≫ (coequalizerIso f g).inv = coequalizer.π f g :=
chore: classify removed @[nolint has_nonempty_instance] porting notes (#10929)

Classifies by adding issue number (#10927) to porting notes claiming removed @[nolint has_nonempty_instance].

Diff
@@ -645,7 +645,7 @@ variable {W X Y Z : Type u}
 
 variable (f : X ⟶ Z) (g : Y ⟶ Z)
 
--- porting note: removed @[nolint has_nonempty_instance]
+-- porting note (#10927): removed @[nolint has_nonempty_instance]
 /-- The usual explicit pullback in the category of types, as a subtype of the product.
 The full `LimitCone` data is bundled as `pullbackLimitCone f g`.
 -/
feat(CategoryTheory/Galois): decomposition in connected components (#10419)

Shows that any object in a Galois category is the sum of its connected components. Also shows that the connected components are unique up to isomorphism.

Co-authored-by: Joël Riou <37772949+joelriou@users.noreply.github.com> Co-authored-by: Christian Merten <christian@merten.dev>

Diff
@@ -710,12 +710,22 @@ theorem pullbackIsoPullback_inv_fst :
   (pullbackConeIsoPullback f g).inv.w left
 #align category_theory.limits.types.pullback_iso_pullback_inv_fst CategoryTheory.Limits.Types.pullbackIsoPullback_inv_fst
 
+@[simp]
+theorem pullbackIsoPullback_inv_fst_apply (x : (Types.pullbackCone f g).pt) :
+    (pullback.fst : _ ⟶ X) ((pullbackIsoPullback f g).inv x) = (fun p => (p.1 : X × Y).fst) x := by
+  rw [elementwise_of% pullbackIsoPullback_inv_fst]
+
 @[simp]
 theorem pullbackIsoPullback_inv_snd :
     (pullbackIsoPullback f g).inv ≫ pullback.snd = fun p => (p.1 : X × Y).snd :=
   (pullbackConeIsoPullback f g).inv.w right
 #align category_theory.limits.types.pullback_iso_pullback_inv_snd CategoryTheory.Limits.Types.pullbackIsoPullback_inv_snd
 
+@[simp]
+theorem pullbackIsoPullback_inv_snd_apply (x : (Types.pullbackCone f g).pt) :
+    (pullback.snd : _ ⟶ Y) ((pullbackIsoPullback f g).inv x) = (fun p => (p.1 : X × Y).snd) x := by
+  rw [elementwise_of% pullbackIsoPullback_inv_snd]
+
 end Pullback
 
 section Pushout
feat(CategoryTheory/Limits): pushouts in the category of sets (#9992)

This PR studies pushouts in the category of types. Specific properties of the pushout when one of the morphisms is injective are obtained.

This PR partly removes the reference to the issue https://github.com/leanprover-community/mathlib4/issues/5752 : the HasPushouts (Type _) instance can now be found automatically, but not HasPullbacks.

Co-authored-by: Joël Riou <37772949+joelriou@users.noreply.github.com>

Diff
@@ -276,7 +276,7 @@ def binaryCoproductColimitCocone (X Y : Type u) : Limits.ColimitCocone (pair X Y
 #align category_theory.limits.types.binary_coproduct_colimit_cocone CategoryTheory.Limits.Types.binaryCoproductColimitCocone
 
 /-- The categorical binary coproduct in `Type u` is the sum `X ⊕ Y`. -/
-noncomputable def binaryCoproductIso (X Y : Type u) : Limits.coprod X Y ≅ Sum X Y :=
+noncomputable def binaryCoproductIso (X Y : Type u) : Limits.coprod X Y ≅ X ⊕ Y :=
   colimit.isoColimitCocone (binaryCoproductColimitCocone X Y)
 #align category_theory.limits.types.binary_coproduct_iso CategoryTheory.Limits.Types.binaryCoproductIso
 
@@ -296,13 +296,13 @@ theorem binaryCoproductIso_inr_comp_hom (X Y : Type u) :
 
 @[elementwise (attr := simp)]
 theorem binaryCoproductIso_inl_comp_inv (X Y : Type u) :
-    ↾(Sum.inl : X ⟶ Sum X Y) ≫ (binaryCoproductIso X Y).inv = Limits.coprod.inl :=
+    ↾(Sum.inl : X ⟶ X ⊕ Y) ≫ (binaryCoproductIso X Y).inv = Limits.coprod.inl :=
   colimit.isoColimitCocone_ι_inv (binaryCoproductColimitCocone X Y) ⟨WalkingPair.left⟩
 #align category_theory.limits.types.binary_coproduct_iso_inl_comp_inv CategoryTheory.Limits.Types.binaryCoproductIso_inl_comp_inv
 
 @[elementwise (attr := simp)]
 theorem binaryCoproductIso_inr_comp_inv (X Y : Type u) :
-    ↾(Sum.inr : Y ⟶ Sum X Y) ≫ (binaryCoproductIso X Y).inv = Limits.coprod.inr :=
+    ↾(Sum.inr : Y ⟶ X ⊕ Y) ≫ (binaryCoproductIso X Y).inv = Limits.coprod.inr :=
   colimit.isoColimitCocone_ι_inv (binaryCoproductColimitCocone X Y) ⟨WalkingPair.right⟩
 #align category_theory.limits.types.binary_coproduct_iso_inr_comp_inv CategoryTheory.Limits.Types.binaryCoproductIso_inr_comp_inv
 
@@ -628,6 +628,12 @@ end Cofork
 
 section Pullback
 
+open CategoryTheory.Limits.WalkingPair
+
+open CategoryTheory.Limits.WalkingCospan
+
+open CategoryTheory.Limits.WalkingCospan.Hom
+
 -- #synth HasPullbacks.{u} (Type u)
 instance : HasPullbacks.{u} (Type u) :=
   -- FIXME does not work via `inferInstance` despite `#synth HasPullbacks.{u} (Type u)` succeeding.
@@ -635,12 +641,6 @@ instance : HasPullbacks.{u} (Type u) :=
   -- inferInstance
   hasPullbacks_of_hasWidePullbacks.{u} (Type u)
 
-open CategoryTheory.Limits.WalkingPair
-
-open CategoryTheory.Limits.WalkingCospan
-
-open CategoryTheory.Limits.WalkingCospan.Hom
-
 variable {W X Y Z : Type u}
 
 variable (f : X ⟶ Z) (g : Y ⟶ Z)
@@ -720,12 +720,200 @@ end Pullback
 
 section Pushout
 
--- #synth HasPushouts.{u} (Type u)
-instance : HasPushouts.{u} (Type u) :=
-  -- FIXME does not work via `inferInstance` despite `#synth HasPushouts.{u} (Type u)` succeeding.
-  -- https://github.com/leanprover-community/mathlib4/issues/5752
-  -- inferInstance
-  hasPushouts_of_hasWidePushouts.{u} (Type u)
+variable {S X₁ X₂ : Type u} (f : S ⟶ X₁) (g : S ⟶ X₂)
+
+/-- The pushout of two maps `f : S ⟶ X₁` and `g : S ⟶ X₂` is the quotient
+by the equivalence relation on `X₁ ⊕ X₂` generated by this relation. -/
+inductive Pushout.Rel (f : S ⟶ X₁) (g : S ⟶ X₂) : X₁ ⊕ X₂ → X₁ ⊕ X₂ → Prop
+  | inl_inr (s : S) : Pushout.Rel f g (Sum.inl (f s)) (Sum.inr (g s))
+
+/-- Construction of the pushout in the category of types, as a quotient of `X₁ ⊕ X₂`. -/
+def Pushout : Type u := _root_.Quot (Pushout.Rel f g)
+
+/-- In case `f : S ⟶ X₁` is a monomorphism, this relation is the equivalence relation
+generated by `Pushout.Rel f g`. -/
+inductive Pushout.Rel' : X₁ ⊕ X₂ → X₁ ⊕ X₂ → Prop
+  | refl (x : X₁ ⊕ X₂) : Rel' x x
+  | inl_inl (x₀ y₀ : S) (h : g x₀ = g y₀) : Rel' (Sum.inl (f x₀)) (Sum.inl (f y₀))
+  | inl_inr (s : S) : Rel' (Sum.inl (f s)) (Sum.inr (g s))
+  | inr_inl (s : S) : Rel' (Sum.inr (g s)) (Sum.inl (f s))
+
+/-- The quotient of `X₁ ⊕ X₂` by the relation `PushoutRel' f g`. -/
+def Pushout' : Type u := _root_.Quot (Pushout.Rel' f g)
+
+namespace Pushout
+
+/-- The left inclusion in the constructed pushout `Pushout f g`. -/
+@[simp]
+def inl : X₁ ⟶ Pushout f g := fun x => Quot.mk _ (Sum.inl x)
+
+/-- The right inclusion in the constructed pushout `Pushout f g`. -/
+@[simp]
+def inr : X₂ ⟶ Pushout f g := fun x => Quot.mk _ (Sum.inr x)
+
+lemma condition : f ≫ inl f g = g ≫ inr f g := by
+  ext x
+  exact Quot.sound (Rel.inl_inr x)
+
+/-- The constructed pushout cocone in the category of types. -/
+@[simps!]
+def cocone : PushoutCocone f g := PushoutCocone.mk _ _ (condition f g)
+
+/-- The cocone `cocone f g` is colimit. -/
+def isColimitCocone : IsColimit (cocone f g) :=
+  PushoutCocone.IsColimit.mk _ (fun s => Quot.lift (fun x => match x with
+      | Sum.inl x₁ => s.inl x₁
+      | Sum.inr x₂ => s.inr x₂) (by
+    rintro _ _ ⟨t⟩
+    exact congr_fun s.condition t)) (fun _ => rfl) (fun _ => rfl) (fun s m h₁ h₂ => by
+      ext ⟨x₁|x₂⟩
+      · exact congr_fun h₁ x₁
+      · exact congr_fun h₂ x₂)
+
+@[simp]
+lemma inl_rel'_inl_iff (x₁ y₁ : X₁) :
+    Rel' f g (Sum.inl x₁) (Sum.inl y₁) ↔ x₁ = y₁ ∨
+      ∃ (x₀ y₀ : S) (_ : g x₀ = g y₀), x₁ = f x₀ ∧ y₁ = f y₀ := by
+  constructor
+  · rintro (_|⟨_, _, h⟩)
+    · exact Or.inl rfl
+    · exact Or.inr ⟨_, _, h, rfl, rfl⟩
+  · rintro (rfl | ⟨_,_ , h, rfl, rfl⟩)
+    · apply Rel'.refl
+    · exact Rel'.inl_inl _ _ h
+
+@[simp]
+lemma inl_rel'_inr_iff (x₁ : X₁) (x₂ : X₂) :
+    Rel' f g (Sum.inl x₁) (Sum.inr x₂) ↔
+      ∃ (s : S), x₁ = f s ∧ x₂ = g s := by
+  constructor
+  · rintro ⟨_⟩
+    exact ⟨_, rfl, rfl⟩
+  · rintro ⟨s, rfl, rfl⟩
+    exact Rel'.inl_inr _
+
+@[simp]
+lemma inr_rel'_inr_iff (x₂ y₂ : X₂) :
+    Rel' f g (Sum.inr x₂) (Sum.inr y₂) ↔ x₂ = y₂ := by
+  constructor
+  · rintro ⟨_⟩
+    rfl
+  · rintro rfl
+    apply Rel'.refl
+
+variable {f g}
+
+lemma Rel'.symm {x y : X₁ ⊕ X₂} (h : Rel' f g x y) :
+    Rel' f g y x := by
+  obtain _|⟨_, _, h⟩|_|_ := h
+  · apply Rel'.refl
+  · exact Rel'.inl_inl _ _ h.symm
+  · exact Rel'.inr_inl _
+  · exact Rel'.inl_inr _
+
+variable (f g)
+
+lemma equivalence_rel' [Mono f] : _root_.Equivalence (Rel' f g) where
+  refl := Rel'.refl
+  symm h := h.symm
+  trans := by
+    rintro x y z (_|⟨_, _, h⟩|s|_) hyz
+    · exact hyz
+    · obtain z₁|z₂ := z
+      · rw [inl_rel'_inl_iff] at hyz
+        obtain rfl|⟨_, _, h', h'', rfl⟩ := hyz
+        · exact Rel'.inl_inl _ _ h
+        · obtain rfl := (mono_iff_injective f).1 inferInstance h''
+          exact Rel'.inl_inl _ _ (h.trans h')
+      · rw [inl_rel'_inr_iff] at hyz
+        obtain ⟨s, hs, rfl⟩ := hyz
+        obtain rfl := (mono_iff_injective f).1 inferInstance hs
+        rw [← h]
+        apply Rel'.inl_inr
+    · obtain z₁|z₂ := z
+      · replace hyz := hyz.symm
+        rw [inl_rel'_inr_iff] at hyz
+        obtain ⟨s', rfl, hs'⟩ := hyz
+        exact Rel'.inl_inl _ _ hs'
+      · rw [inr_rel'_inr_iff] at hyz
+        subst hyz
+        apply Rel'.inl_inr
+    · obtain z₁|z₂ := z
+      · rw [inl_rel'_inl_iff] at hyz
+        obtain rfl|⟨_, _, h, h', rfl⟩  := hyz
+        · apply Rel'.inr_inl
+        · obtain rfl := (mono_iff_injective f).1 inferInstance h'
+          rw [h]
+          apply Rel'.inr_inl
+      · rw [inl_rel'_inr_iff] at hyz
+        obtain ⟨s, hs, rfl⟩ := hyz
+        obtain rfl := (mono_iff_injective f).1 inferInstance hs
+        apply Rel'.refl
+
+/-- The obvious equivalence `Pushout f g ≃ Pushout' f g`. -/
+def equivPushout' : Pushout f g ≃ Pushout' f g where
+  toFun := Quot.lift (Quot.mk _) (by
+    rintro _ _ ⟨⟩
+    apply Quot.sound
+    apply Rel'.inl_inr)
+  invFun := Quot.lift (Quot.mk _) (by
+    rintro a b (_|⟨x₀, y₀, h⟩|_|_)
+    · rfl
+    · have h₀ : Rel f g _ _ := Rel.inl_inr x₀
+      rw [Quot.sound h₀, h]
+      symm
+      apply Quot.sound
+      apply Rel.inl_inr
+    · apply Quot.sound
+      apply Rel.inl_inr
+    · symm
+      apply Quot.sound
+      apply Rel.inl_inr)
+  left_inv := by rintro ⟨x⟩; rfl
+  right_inv := by rintro ⟨x⟩; rfl
+
+lemma quot_mk_eq_iff [Mono f] (a b : X₁ ⊕ X₂) :
+    (Quot.mk _ a : Pushout f g) = Quot.mk _ b ↔ Rel' f g a b := by
+  rw [← (equivalence_rel' f g).quot_mk_eq_iff]
+  exact ⟨fun h => (equivPushout' f g).symm.injective h,
+    fun h => (equivPushout' f g).injective h⟩
+
+lemma inl_eq_inr_iff [Mono f] (x₁ : X₁) (x₂ : X₂) :
+    (inl f g x₁ = inr f g x₂) ↔
+      ∃ (s : S), f s = x₁ ∧ g s = x₂ := by
+  refine' (Pushout.quot_mk_eq_iff f g (Sum.inl x₁) (Sum.inr x₂)).trans _
+  constructor
+  · rintro ⟨⟩
+    exact ⟨_, rfl, rfl⟩
+  · rintro ⟨s, rfl, rfl⟩
+    apply Rel'.inl_inr
+
+end Pushout
+
+variable {f g}
+
+lemma pushoutCocone_inl_eq_inr_imp_of_iso {c c' : PushoutCocone f g} (e : c ≅ c')
+    (x₁ : X₁) (x₂ : X₂) (h : c.inl x₁ = c.inr x₂) :
+    c'.inl x₁ = c'.inr x₂ := by
+  convert congr_arg e.hom.hom h
+  · exact congr_fun (e.hom.w WalkingSpan.left).symm x₁
+  · exact congr_fun (e.hom.w WalkingSpan.right).symm x₂
+
+lemma pushoutCocone_inl_eq_inr_iff_of_iso {c c' : PushoutCocone f g} (e : c ≅ c')
+    (x₁ : X₁) (x₂ : X₂) :
+    c.inl x₁ = c.inr x₂ ↔ c'.inl x₁ = c'.inr x₂ := by
+  constructor
+  · apply pushoutCocone_inl_eq_inr_imp_of_iso e
+  · apply pushoutCocone_inl_eq_inr_imp_of_iso e.symm
+
+lemma pushoutCocone_inl_eq_inr_iff_of_isColimit {c : PushoutCocone f g} (hc : IsColimit c)
+    (h₁ : Function.Injective f) (x₁ : X₁) (x₂ : X₂) :
+    c.inl x₁ = c.inr x₂ ↔ ∃ (s : S), f s = x₁ ∧ g s = x₂ := by
+  rw [pushoutCocone_inl_eq_inr_iff_of_iso
+    (Cocones.ext (IsColimit.coconePointUniqueUpToIso hc (Pushout.isColimitCocone f g))
+    (by aesop_cat))]
+  have := (mono_iff_injective f).2 h₁
+  apply Pushout.inl_eq_inr_iff
 
 end Pushout
 
chore(*): shake imports (#10199)
  • Remove Data.Set.Basic from scripts/noshake.json.
  • Remove an exception that was used by examples only, move these examples to a new test file.
  • Drop an exception for Order.Filter.Basic dependency on Control.Traversable.Instances, as the relevant parts were moved to Order.Filter.ListTraverse.
  • Run lake exe shake --fix.
Diff
@@ -9,6 +9,7 @@ import Mathlib.CategoryTheory.Limits.Shapes.BinaryProducts
 import Mathlib.CategoryTheory.Limits.Shapes.Terminal
 import Mathlib.CategoryTheory.ConcreteCategory.Basic
 import Mathlib.Tactic.CategoryTheory.Elementwise
+import Mathlib.Data.Set.Basic
 
 #align_import category_theory.limits.shapes.types from "leanprover-community/mathlib"@"5dc6092d09e5e489106865241986f7f2ad28d4c8"
 
feat(CategoryTheory/Galois): evaluation is injective and more basic properties (#9841)

Shows one of the key technical lemmas about Galois categories, namely that evaluation on a point of the fibre of morphisms out of a connected object is injective.

Also adds some more basic properties on when objects are initial and preservation and reflection of monomorphisms.

Diff
@@ -153,6 +153,14 @@ noncomputable def isInitialPunit : IsInitial (PEmpty : Type u) :=
   initialIsInitial.ofIso initialIso
 #align category_theory.limits.types.is_initial_punit CategoryTheory.Limits.Types.isInitialPunit
 
+/-- An object in `Type u` is initial if and only if it is empty. -/
+lemma initial_iff_empty (X : Type u) : Nonempty (IsInitial X) ↔ IsEmpty X := by
+  constructor
+  · intro ⟨h⟩
+    exact Function.isEmpty (IsInitial.to h PEmpty)
+  · intro h
+    exact ⟨IsInitial.ofIso Types.isInitialPunit <| Equiv.toIso <| Equiv.equivOfIsEmpty PEmpty X⟩
+
 open CategoryTheory.Limits.WalkingPair
 
 -- We manually generate the other projection lemmas since the simp-normal form for the legs is
feat: switch to weaker UnivLE (#8556)

Switch from the strong version of UnivLE ∀ α : Type max u v, Small.{v} α to the weaker version ∀ α : Type u, Small.{v} α.

Transfer Has/Preserves/Reflects(Co)limitsOfSize from a larger size (higher universe) to a smaller size.

In a few places it's now necessary to make the type explicit (for Lean to infer the Small instance, I think).

Also prove a characterization of UnivLE and the totality of the UnivLE relation.

A pared down version of #7695.

Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>

Diff
@@ -54,7 +54,7 @@ instance : HasProducts.{v} (Type v) := inferInstance
 
 /-- A restatement of `Types.Limit.lift_π_apply` that uses `Pi.π` and `Pi.lift`. -/
 @[simp 1001]
-theorem pi_lift_π_apply [UnivLE.{v, u}] {β : Type v} (f : β → Type u) {P : Type u}
+theorem pi_lift_π_apply {β : Type v} [Small.{u} β] (f : β → Type u) {P : Type u}
     (s : ∀ b, P ⟶ f b) (b : β) (x : P) :
     (Pi.π f b : (piObj f) → f b) (@Pi.lift β _ _ f _ P s x) = s b x :=
   congr_fun (limit.lift_π (Fan.mk P s) ⟨b⟩) x
@@ -70,7 +70,7 @@ theorem pi_lift_π_apply' {β : Type v} (f : β → Type v) {P : Type v}
 
 /-- A restatement of `Types.Limit.map_π_apply` that uses `Pi.π` and `Pi.map`. -/
 @[simp 1001]
-theorem pi_map_π_apply [UnivLE.{v, u}] {β : Type v} {f g : β → Type u}
+theorem pi_map_π_apply {β : Type v} [Small.{u} β] {f g : β → Type u}
     (α : ∀ j, f j ⟶ g j) (b : β) (x) :
     (Pi.π g b : ∏ g → g b) (Pi.map α x) = α b ((Pi.π f b : ∏ f → f b) x) :=
   Limit.map_π_apply.{v, u} _ _ _
@@ -396,45 +396,48 @@ theorem productIso_inv_comp_π {J : Type v} (F : J → TypeMax.{v, u}) (j : J) :
   limit.isoLimitCone_inv_π (productLimitCone.{v, u} F) ⟨j⟩
 #align category_theory.limits.types.product_iso_inv_comp_π CategoryTheory.Limits.Types.productIso_inv_comp_π
 
-namespace UnivLE
+namespace Small
+
+variable {J : Type v} (F : J → Type u) [Small.{u} J]
 
 /--
-A variant of `productLimitCone` using a `UnivLE` hypothesis rather than a function to `TypeMax`.
+A variant of `productLimitCone` using a `Small` hypothesis rather than a function to `TypeMax`.
 -/
-noncomputable def productLimitCone {J : Type v} (F : J → Type u) [UnivLE.{v, u}] :
+noncomputable def productLimitCone :
     Limits.LimitCone (Discrete.functor F) where
   cone :=
     { pt := Shrink (∀ j, F j)
-      π := Discrete.natTrans (fun ⟨j⟩ f => (equivShrink _).symm f j) }
+      π := Discrete.natTrans (fun ⟨j⟩ f => (equivShrink (∀ j, F j)).symm f j) }
   isLimit :=
+    have : Small.{u} (∀ j, F j) := inferInstance
     { lift := fun s x => (equivShrink _) (fun j => s.π.app ⟨j⟩ x)
       uniq := fun s m w => funext fun x => Shrink.ext <| funext fun j => by
         simpa using (congr_fun (w ⟨j⟩) x : _) }
 
 /-- The categorical product in `Type u` indexed in `Type v`
 is the type theoretic product `Π j, F j`, after shrinking back to `Type u`. -/
-noncomputable def productIso {J : Type v} (F : J → Type u) [UnivLE.{v, u}] :
+noncomputable def productIso :
     (∏ F : Type u) ≅ Shrink.{u} (∀ j, F j) :=
   limit.isoLimitCone (productLimitCone.{v, u} F)
 
 @[simp]
-theorem productIso_hom_comp_eval {J : Type v} (F : J → Type u) [UnivLE.{v, u}] (j : J) :
-    ((productIso.{v, u} F).hom ≫ fun f => (equivShrink _).symm f j) = Pi.π F j :=
+theorem productIso_hom_comp_eval (j : J) :
+    ((productIso.{v, u} F).hom ≫ fun f => (equivShrink (∀ j, F j)).symm f j) = Pi.π F j :=
   limit.isoLimitCone_hom_π (productLimitCone.{v, u} F) ⟨j⟩
 
 -- Porting note:
 -- `elementwise` seems to be broken. Applied to the previous lemma, it should produce:
 @[simp]
-theorem productIso_hom_comp_eval_apply {J : Type v} (F : J → Type u) [UnivLE.{v, u}] (j : J) (x) :
-    (equivShrink _).symm ((productIso F).hom x) j = Pi.π F j x :=
+theorem productIso_hom_comp_eval_apply (j : J) (x) :
+    (equivShrink (∀ j, F j)).symm ((productIso F).hom x) j = Pi.π F j x :=
   congr_fun (productIso_hom_comp_eval F j) x
 
 @[elementwise (attr := simp)]
-theorem productIso_inv_comp_π {J : Type v} (F : J → Type u) [UnivLE.{v, u}] (j : J) :
-    (productIso.{v, u} F).inv ≫ Pi.π F j = fun f => ((equivShrink _).symm f) j :=
+theorem productIso_inv_comp_π (j : J) :
+    (productIso.{v, u} F).inv ≫ Pi.π F j = fun f => ((equivShrink (∀ j, F j)).symm f) j :=
   limit.isoLimitCone_inv_π (productLimitCone.{v, u} F) ⟨j⟩
 
-end UnivLE
+end Small
 
 /-- The category of types has `Σ j, f j` as the coproduct of a type family `f : J → Type`.
 -/
chore(CategoryTheory): universe polymorphic CategoryTheory.Limits.Types.coproductIso (#8421)

Fixes a typo requiring matching universe levels in CategoryTheory.Limits.Types.coproductIso.

Diff
@@ -438,7 +438,7 @@ end UnivLE
 
 /-- The category of types has `Σ j, f j` as the coproduct of a type family `f : J → Type`.
 -/
-def coproductColimitCocone {J : Type u} (F : J → Type u) :
+def coproductColimitCocone {J : Type v} (F : J → TypeMax.{v, u}) :
     Limits.ColimitCocone (Discrete.functor F) where
   cocone :=
     { pt := Σj, F j
@@ -451,19 +451,19 @@ def coproductColimitCocone {J : Type u} (F : J → Type u) :
 #align category_theory.limits.types.coproduct_colimit_cocone CategoryTheory.Limits.Types.coproductColimitCocone
 
 /-- The categorical coproduct in `Type u` is the type theoretic coproduct `Σ j, F j`. -/
-noncomputable def coproductIso {J : Type u} (F : J → Type u) : ∐ F ≅ Σj, F j :=
+noncomputable def coproductIso {J : Type v} (F : J → TypeMax.{v, u}) : ∐ F ≅ Σj, F j :=
   colimit.isoColimitCocone (coproductColimitCocone F)
 #align category_theory.limits.types.coproduct_iso CategoryTheory.Limits.Types.coproductIso
 
 @[elementwise (attr := simp)]
-theorem coproductIso_ι_comp_hom {J : Type u} (F : J → Type u) (j : J) :
+theorem coproductIso_ι_comp_hom {J : Type v} (F : J → TypeMax.{v, u}) (j : J) :
     Sigma.ι F j ≫ (coproductIso F).hom = fun x : F j => (⟨j, x⟩ : Σj, F j) :=
   colimit.isoColimitCocone_ι_hom (coproductColimitCocone F) ⟨j⟩
 #align category_theory.limits.types.coproduct_iso_ι_comp_hom CategoryTheory.Limits.Types.coproductIso_ι_comp_hom
 
 -- porting note: was @[elementwise (attr := simp)], but it produces a trivial lemma
 -- removed simp attribute because it seems it never applies
-theorem coproductIso_mk_comp_inv {J : Type u} (F : J → Type u) (j : J) :
+theorem coproductIso_mk_comp_inv {J : Type v} (F : J → TypeMax.{v, u}) (j : J) :
     (↾fun x : F j => (⟨j, x⟩ : Σj, F j)) ≫ (coproductIso F).inv = Sigma.ι F j :=
   rfl
 #align category_theory.limits.types.coproduct_iso_mk_comp_inv CategoryTheory.Limits.Types.coproductIso_mk_comp_inv
chore: only four spaces for subsequent lines (#7286)

Co-authored-by: Moritz Firsching <firsching@google.com>

Diff
@@ -426,7 +426,7 @@ theorem productIso_hom_comp_eval {J : Type v} (F : J → Type u) [UnivLE.{v, u}]
 -- `elementwise` seems to be broken. Applied to the previous lemma, it should produce:
 @[simp]
 theorem productIso_hom_comp_eval_apply {J : Type v} (F : J → Type u) [UnivLE.{v, u}] (j : J) (x) :
-   (equivShrink _).symm ((productIso F).hom x) j = Pi.π F j x :=
+    (equivShrink _).symm ((productIso F).hom x) j = Pi.π F j x :=
   congr_fun (productIso_hom_comp_eval F j) x
 
 @[elementwise (attr := simp)]
chore: tidy various files (#7137)
Diff
@@ -64,8 +64,8 @@ theorem pi_lift_π_apply [UnivLE.{v, u}] {β : Type v} (f : β → Type u) {P :
 with specialized universes. -/
 theorem pi_lift_π_apply' {β : Type v} (f : β → Type v) {P : Type v}
     (s : ∀ b, P ⟶ f b) (b : β) (x : P) :
-    (Pi.π f b : (piObj f) → f b) (@Pi.lift β _ _ f _ P s x) = s b x :=
-  by simp
+    (Pi.π f b : (piObj f) → f b) (@Pi.lift β _ _ f _ P s x) = s b x := by
+  simp
 #align category_theory.limits.types.pi_lift_π_apply' CategoryTheory.Limits.Types.pi_lift_π_apply'
 
 /-- A restatement of `Types.Limit.map_π_apply` that uses `Pi.π` and `Pi.map`. -/
@@ -79,8 +79,8 @@ theorem pi_map_π_apply [UnivLE.{v, u}] {β : Type v} {f g : β → Type u}
 /-- A restatement of `Types.Limit.map_π_apply` that uses `Pi.π` and `Pi.map`,
 with specialized universes. -/
 theorem pi_map_π_apply' {β : Type v} {f g : β → Type v} (α : ∀ j, f j ⟶ g j) (b : β) (x) :
-    (Pi.π g b : ∏ g → g b) (Pi.map α x) = α b ((Pi.π f b : ∏ f → f b) x) :=
-   by simp
+    (Pi.π g b : ∏ g → g b) (Pi.map α x) = α b ((Pi.π f b : ∏ f → f b) x) := by
+  simp
 #align category_theory.limits.types.pi_map_π_apply' CategoryTheory.Limits.Types.pi_map_π_apply'
 
 /-- The category of types has `PUnit` as a terminal object. -/
chore: avoid lean3 style have/suffices (#6964)

Many proofs use the "stream of consciousness" style from Lean 3, rather than have ... := or suffices ... from/by.

This PR updates a fraction of these to the preferred Lean 4 style.

I think a good goal would be to delete the "deferred" versions of have, suffices, and let at the bottom of Mathlib.Tactic.Have

(Anyone who would like to contribute more cleanup is welcome to push directly to this branch.)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -497,8 +497,8 @@ theorem unique_of_type_equalizer (t : IsLimit (Fork.ofι _ w)) (y : Y) (hy : g y
   have hy' : y' ≫ g = y' ≫ h := funext fun _ => hy
   refine' ⟨(Fork.IsLimit.lift' t _ hy').1 ⟨⟩, congr_fun (Fork.IsLimit.lift' t y' _).2 ⟨⟩, _⟩
   intro x' hx'
-  suffices : (fun _ : PUnit => x') = (Fork.IsLimit.lift' t y' hy').1
-  rw [← this]
+  suffices (fun _ : PUnit => x') = (Fork.IsLimit.lift' t y' hy').1 by
+    rw [← this]
   apply Fork.IsLimit.hom_ext t
   funext ⟨⟩
   apply hx'.trans (congr_fun (Fork.IsLimit.lift' t _ hy').2 ⟨⟩).symm
feat: more about terminal objects in the category of types (#6401)
Diff
@@ -107,6 +107,30 @@ noncomputable def isTerminalPunit : IsTerminal (PUnit : Type u) :=
   terminalIsTerminal.ofIso terminalIso
 #align category_theory.limits.types.is_terminal_punit CategoryTheory.Limits.Types.isTerminalPunit
 
+-- porting note: the following three instances have been added to ease
+-- the automation in a definition in `AlgebraicTopology.SimplicialSet`
+noncomputable instance : Inhabited (⊤_ (Type u)) :=
+  ⟨@terminal.from (Type u) _ _ (ULift (Fin 1)) (ULift.up 0)⟩
+
+instance : Subsingleton (⊤_ (Type u)) := ⟨fun a b =>
+  congr_fun (@Subsingleton.elim (_ ⟶ ⊤_ (Type u)) _
+    (fun _ => a) (fun _ => b)) (ULift.up (0 : Fin 1))⟩
+
+noncomputable instance : Unique (⊤_ (Type u)) := Unique.mk' _
+
+/-- A type is terminal if and only if it contains exactly one element. -/
+noncomputable def isTerminalEquivUnique (X : Type u) : IsTerminal X ≃ Unique X :=
+  equivOfSubsingletonOfSubsingleton
+    (fun h => ((Iso.toEquiv (terminalIsoIsTerminal h).symm).unique))
+    (fun _ => IsTerminal.ofIso terminalIsTerminal (Equiv.toIso (Equiv.equivOfUnique _ _)))
+
+/-- A type is terminal if and only if it is isomorphic to `PUnit`. -/
+noncomputable def isTerminalEquivIsoPUnit (X : Type u) : IsTerminal X ≃ (X ≅ PUnit) := by
+  calc
+    IsTerminal X ≃ Unique X := isTerminalEquivUnique _
+    _ ≃ (X ≃ PUnit.{u + 1}) := uniqueEquivEquivUnique _ _
+    _ ≃ (X ≅ PUnit) := equivEquivIso
+
 /-- The category of types has `PEmpty` as an initial object. -/
 def initialColimitCocone : Limits.ColimitCocone (Functor.empty (Type u)) where
   -- porting note: tidy was able to fill the structure automatically
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -2,11 +2,6 @@
 Copyright (c) 2020 Scott Morrison. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
-
-! This file was ported from Lean 3 source module category_theory.limits.shapes.types
-! leanprover-community/mathlib commit 5dc6092d09e5e489106865241986f7f2ad28d4c8
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.CategoryTheory.Limits.Types
 import Mathlib.CategoryTheory.Limits.Shapes.Products
@@ -15,6 +10,8 @@ import Mathlib.CategoryTheory.Limits.Shapes.Terminal
 import Mathlib.CategoryTheory.ConcreteCategory.Basic
 import Mathlib.Tactic.CategoryTheory.Elementwise
 
+#align_import category_theory.limits.shapes.types from "leanprover-community/mathlib"@"5dc6092d09e5e489106865241986f7f2ad28d4c8"
+
 /-!
 # Special shapes for limits in `Type`.
 
feat: using UnivLE in constructing limits in Type (#5724)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com> Co-authored-by: Apurva <apurvnakade@gmail.com> Co-authored-by: Jon Eugster <eugster.jon@gmail.com> Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr> Co-authored-by: Johan Commelin <johan@commelin.net>

Diff
@@ -48,17 +48,16 @@ open CategoryTheory Limits
 
 namespace CategoryTheory.Limits.Types
 
-instance {β : Type v} (f : β → TypeMax.{v, u}) : HasProduct f :=
-HasLimitsOfShape.has_limit (Discrete.functor f)
+example : HasProducts.{v} (Type v) := inferInstance
+example [UnivLE.{v, u}] : HasProducts.{v} (Type u) := inferInstance
 
--- This must have higher priority than the instance for `TypeMax`.
--- (Merely being defined later is enough, but that is fragile.)
-instance (priority := high) {β : Type v} (f : β → Type v) : HasProduct f :=
-HasLimitsOfShape.has_limit (Discrete.functor f)
+-- This shortcut instance is required in `Mathlib.CategoryTheory.Closed.Types`,
+-- although I don't understand why, and wish it wasn't.
+instance : HasProducts.{v} (Type v) := inferInstance
 
 /-- A restatement of `Types.Limit.lift_π_apply` that uses `Pi.π` and `Pi.lift`. -/
 @[simp 1001]
-theorem pi_lift_π_apply {β : Type v} (f : β → TypeMax.{v, u}) {P : TypeMax.{v, u}}
+theorem pi_lift_π_apply [UnivLE.{v, u}] {β : Type v} (f : β → Type u) {P : Type u}
     (s : ∀ b, P ⟶ f b) (b : β) (x : P) :
     (Pi.π f b : (piObj f) → f b) (@Pi.lift β _ _ f _ P s x) = s b x :=
   congr_fun (limit.lift_π (Fan.mk P s) ⟨b⟩) x
@@ -66,26 +65,25 @@ theorem pi_lift_π_apply {β : Type v} (f : β → TypeMax.{v, u}) {P : TypeMax.
 
 /-- A restatement of `Types.Limit.lift_π_apply` that uses `Pi.π` and `Pi.lift`,
 with specialized universes. -/
-@[simp 1001]
 theorem pi_lift_π_apply' {β : Type v} (f : β → Type v) {P : Type v}
     (s : ∀ b, P ⟶ f b) (b : β) (x : P) :
     (Pi.π f b : (piObj f) → f b) (@Pi.lift β _ _ f _ P s x) = s b x :=
-  congr_fun (limit.lift_π (Fan.mk P s) ⟨b⟩) x
+  by simp
 #align category_theory.limits.types.pi_lift_π_apply' CategoryTheory.Limits.Types.pi_lift_π_apply'
 
 /-- A restatement of `Types.Limit.map_π_apply` that uses `Pi.π` and `Pi.map`. -/
 @[simp 1001]
-theorem pi_map_π_apply {β : Type v} {f g : β → TypeMax.{v, u}} (α : ∀ j, f j ⟶ g j) (b : β) (x) :
+theorem pi_map_π_apply [UnivLE.{v, u}] {β : Type v} {f g : β → Type u}
+    (α : ∀ j, f j ⟶ g j) (b : β) (x) :
     (Pi.π g b : ∏ g → g b) (Pi.map α x) = α b ((Pi.π f b : ∏ f → f b) x) :=
-  Limit.map_π_apply _ _ _
+  Limit.map_π_apply.{v, u} _ _ _
 #align category_theory.limits.types.pi_map_π_apply CategoryTheory.Limits.Types.pi_map_π_apply
 
 /-- A restatement of `Types.Limit.map_π_apply` that uses `Pi.π` and `Pi.map`,
 with specialized universes. -/
-@[simp 1001]
 theorem pi_map_π_apply' {β : Type v} {f g : β → Type v} (α : ∀ j, f j ⟶ g j) (b : β) (x) :
     (Pi.π g b : ∏ g → g b) (Pi.map α x) = α b ((Pi.π f b : ∏ f → f b) x) :=
-  Limit.map_π_apply' _ _ _
+   by simp
 #align category_theory.limits.types.pi_map_π_apply' CategoryTheory.Limits.Types.pi_map_π_apply'
 
 /-- The category of types has `PUnit` as a terminal object. -/
@@ -339,7 +337,8 @@ noncomputable def isCoprodOfMono {X Y : Type u} (f : X ⟶ Y) [Mono f] :
   exact Subtype.range_val
 #align category_theory.limits.types.is_coprod_of_mono CategoryTheory.Limits.Types.isCoprodOfMono
 
-/-- The category of types has `Π j, f j` as the product of a type family `f : J → Type`.
+/--
+The category of types has `Π j, f j` as the product of a type family `f : J → TypeMax.{v, u}`.
 -/
 def productLimitCone {J : Type v} (F : J → TypeMax.{v, u}) :
     Limits.LimitCone (Discrete.functor F) where
@@ -351,7 +350,7 @@ def productLimitCone {J : Type v} (F : J → TypeMax.{v, u}) :
       uniq := fun s m w => funext fun x => funext fun j => (congr_fun (w ⟨j⟩) x : _) }
 #align category_theory.limits.types.product_limit_cone CategoryTheory.Limits.Types.productLimitCone
 
-/-- The categorical product in `Type u` is the type theoretic product `Π j, F j`. -/
+/-- The categorical product in `TypeMax.{v, u}` is the type theoretic product `Π j, F j`. -/
 noncomputable def productIso {J : Type v} (F : J → TypeMax.{v, u}) : ∏ F ≅ ∀ j, F j :=
   limit.isoLimitCone (productLimitCone.{v, u} F)
 #align category_theory.limits.types.product_iso CategoryTheory.Limits.Types.productIso
@@ -376,6 +375,46 @@ theorem productIso_inv_comp_π {J : Type v} (F : J → TypeMax.{v, u}) (j : J) :
   limit.isoLimitCone_inv_π (productLimitCone.{v, u} F) ⟨j⟩
 #align category_theory.limits.types.product_iso_inv_comp_π CategoryTheory.Limits.Types.productIso_inv_comp_π
 
+namespace UnivLE
+
+/--
+A variant of `productLimitCone` using a `UnivLE` hypothesis rather than a function to `TypeMax`.
+-/
+noncomputable def productLimitCone {J : Type v} (F : J → Type u) [UnivLE.{v, u}] :
+    Limits.LimitCone (Discrete.functor F) where
+  cone :=
+    { pt := Shrink (∀ j, F j)
+      π := Discrete.natTrans (fun ⟨j⟩ f => (equivShrink _).symm f j) }
+  isLimit :=
+    { lift := fun s x => (equivShrink _) (fun j => s.π.app ⟨j⟩ x)
+      uniq := fun s m w => funext fun x => Shrink.ext <| funext fun j => by
+        simpa using (congr_fun (w ⟨j⟩) x : _) }
+
+/-- The categorical product in `Type u` indexed in `Type v`
+is the type theoretic product `Π j, F j`, after shrinking back to `Type u`. -/
+noncomputable def productIso {J : Type v} (F : J → Type u) [UnivLE.{v, u}] :
+    (∏ F : Type u) ≅ Shrink.{u} (∀ j, F j) :=
+  limit.isoLimitCone (productLimitCone.{v, u} F)
+
+@[simp]
+theorem productIso_hom_comp_eval {J : Type v} (F : J → Type u) [UnivLE.{v, u}] (j : J) :
+    ((productIso.{v, u} F).hom ≫ fun f => (equivShrink _).symm f j) = Pi.π F j :=
+  limit.isoLimitCone_hom_π (productLimitCone.{v, u} F) ⟨j⟩
+
+-- Porting note:
+-- `elementwise` seems to be broken. Applied to the previous lemma, it should produce:
+@[simp]
+theorem productIso_hom_comp_eval_apply {J : Type v} (F : J → Type u) [UnivLE.{v, u}] (j : J) (x) :
+   (equivShrink _).symm ((productIso F).hom x) j = Pi.π F j x :=
+  congr_fun (productIso_hom_comp_eval F j) x
+
+@[elementwise (attr := simp)]
+theorem productIso_inv_comp_π {J : Type v} (F : J → Type u) [UnivLE.{v, u}] (j : J) :
+    (productIso.{v, u} F).inv ≫ Pi.π F j = fun f => ((equivShrink _).symm f) j :=
+  limit.isoLimitCone_inv_π (productLimitCone.{v, u} F) ⟨j⟩
+
+end UnivLE
+
 /-- The category of types has `Σ j, f j` as the coproduct of a type family `f : J → Type`.
 -/
 def coproductColimitCocone {J : Type u} (F : J → Type u) :
@@ -556,6 +595,13 @@ end Cofork
 
 section Pullback
 
+-- #synth HasPullbacks.{u} (Type u)
+instance : HasPullbacks.{u} (Type u) :=
+  -- FIXME does not work via `inferInstance` despite `#synth HasPullbacks.{u} (Type u)` succeeding.
+  -- https://github.com/leanprover-community/mathlib4/issues/5752
+  -- inferInstance
+  hasPullbacks_of_hasWidePullbacks.{u} (Type u)
+
 open CategoryTheory.Limits.WalkingPair
 
 open CategoryTheory.Limits.WalkingCospan
@@ -639,4 +685,15 @@ theorem pullbackIsoPullback_inv_snd :
 
 end Pullback
 
+section Pushout
+
+-- #synth HasPushouts.{u} (Type u)
+instance : HasPushouts.{u} (Type u) :=
+  -- FIXME does not work via `inferInstance` despite `#synth HasPushouts.{u} (Type u)` succeeding.
+  -- https://github.com/leanprover-community/mathlib4/issues/5752
+  -- inferInstance
+  hasPushouts_of_hasWidePushouts.{u} (Type u)
+
+end Pushout
+
 end CategoryTheory.Limits.Types
chore: restore an elementwise lemma (#5707)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -356,13 +356,20 @@ noncomputable def productIso {J : Type v} (F : J → TypeMax.{v, u}) : ∏ F ≅
   limit.isoLimitCone (productLimitCone.{v, u} F)
 #align category_theory.limits.types.product_iso CategoryTheory.Limits.Types.productIso
 
--- porting note: was `@[elementwise (attr := simp)]`, but it produces a trivial lemma.
+-- Porting note: was `@[elementwise (attr := simp)]`, but it produces a trivial lemma
+-- It should produce the lemma below.
 @[simp]
 theorem productIso_hom_comp_eval {J : Type v} (F : J → TypeMax.{v, u}) (j : J) :
     ((productIso.{v, u} F).hom ≫ fun f => f j) = Pi.π F j :=
   rfl
 #align category_theory.limits.types.product_iso_hom_comp_eval CategoryTheory.Limits.Types.productIso_hom_comp_eval
 
+@[simp]
+theorem productIso_hom_comp_eval_apply {J : Type v} (F : J → TypeMax.{v, u}) (j : J) (x) :
+    ((productIso.{v, u} F).hom x) j = Pi.π F j x :=
+  rfl
+#align category_theory.limits.types.product_iso_hom_comp_eval_apply CategoryTheory.Limits.Types.productIso_hom_comp_eval_apply
+
 @[elementwise (attr := simp)]
 theorem productIso_inv_comp_π {J : Type v} (F : J → TypeMax.{v, u}) (j : J) :
     (productIso.{v, u} F).inv ≫ Pi.π F j = fun f => f j :=
chore: fix focusing dots (#5708)

This PR is the result of running

find . -type f -name "*.lean" -exec sed -i -E 's/^( +)\. /\1· /' {} \;
find . -type f -name "*.lean" -exec sed -i -E 'N;s/^( +·)\n +(.*)$/\1 \2/;P;D' {} \;

which firstly replaces . focusing dots with · and secondly removes isolated instances of such dots, unifying them with the following line. A new rule is placed in the style linter to verify this.

Diff
@@ -221,8 +221,8 @@ noncomputable def binaryProductIsoProd : binaryProductFunctor ≅ (prod.functor
   refine' NatIso.ofComponents (fun X => _) (fun _ => _)
   · refine' NatIso.ofComponents (fun Y => _) (fun _ => _)
     · exact ((limit.isLimit _).conePointUniqueUpToIso (binaryProductLimit X Y)).symm
-    . apply Limits.prod.hom_ext <;> simp <;> rfl
-  . ext : 2
+    · apply Limits.prod.hom_ext <;> simp <;> rfl
+  · ext : 2
     apply Limits.prod.hom_ext <;> simp <;> rfl
 #align category_theory.limits.types.binary_product_iso_prod CategoryTheory.Limits.Types.binaryProductIsoProd
 
@@ -416,9 +416,9 @@ noncomputable def typeEqualizerOfUnique (t : ∀ y : Y, g y = h y → ∃! x : X
     refine' ⟨fun i => _, _, _⟩
     · apply Classical.choose (t (s.ι i) _)
       apply congr_fun s.condition i
-    . funext i
+    · funext i
       exact (Classical.choose_spec (t (s.ι i) (congr_fun s.condition i))).1
-    . intro m hm
+    · intro m hm
       funext i
       exact (Classical.choose_spec (t (s.ι i) (congr_fun s.condition i))).2 _ (congr_fun hm i)
 #align category_theory.limits.types.type_equalizer_of_unique CategoryTheory.Limits.Types.typeEqualizerOfUnique
chore: update SHAs after #19153 was reverted (#5712)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
 
 ! This file was ported from Lean 3 source module category_theory.limits.shapes.types
-! leanprover-community/mathlib commit 70fd9563a21e7b963887c9360bd29b2393e6225a
+! leanprover-community/mathlib commit 5dc6092d09e5e489106865241986f7f2ad28d4c8
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
fix: piObj / sigmaObj precedence (#5618)
Diff
@@ -76,7 +76,7 @@ theorem pi_lift_π_apply' {β : Type v} (f : β → Type v) {P : Type v}
 /-- A restatement of `Types.Limit.map_π_apply` that uses `Pi.π` and `Pi.map`. -/
 @[simp 1001]
 theorem pi_map_π_apply {β : Type v} {f g : β → TypeMax.{v, u}} (α : ∀ j, f j ⟶ g j) (b : β) (x) :
-    (Pi.π g b : (∏ g) → g b) (Pi.map α x) = α b ((Pi.π f b : (∏ f) → f b) x) :=
+    (Pi.π g b : ∏ g → g b) (Pi.map α x) = α b ((Pi.π f b : ∏ f → f b) x) :=
   Limit.map_π_apply _ _ _
 #align category_theory.limits.types.pi_map_π_apply CategoryTheory.Limits.Types.pi_map_π_apply
 
@@ -84,7 +84,7 @@ theorem pi_map_π_apply {β : Type v} {f g : β → TypeMax.{v, u}} (α : ∀ j,
 with specialized universes. -/
 @[simp 1001]
 theorem pi_map_π_apply' {β : Type v} {f g : β → Type v} (α : ∀ j, f j ⟶ g j) (b : β) (x) :
-    (Pi.π g b : (∏ g) → g b) (Pi.map α x) = α b ((Pi.π f b : (∏ f) → f b) x) :=
+    (Pi.π g b : ∏ g → g b) (Pi.map α x) = α b ((Pi.π f b : ∏ f → f b) x) :=
   Limit.map_π_apply' _ _ _
 #align category_theory.limits.types.pi_map_π_apply' CategoryTheory.Limits.Types.pi_map_π_apply'
 
fix: change compl precedence (#5586)

Co-authored-by: Yury G. Kudryashov <urkud@urkud.name>

Diff
@@ -330,7 +330,7 @@ theorem binaryCofan_isColimit_iff {X Y : Type u} (c : BinaryCofan X Y) :
 
 /-- Any monomorphism in `Type` is a coproduct injection. -/
 noncomputable def isCoprodOfMono {X Y : Type u} (f : X ⟶ Y) [Mono f] :
-    IsColimit (BinaryCofan.mk f (Subtype.val : ↑(Set.range fᶜ) → Y)) := by
+    IsColimit (BinaryCofan.mk f (Subtype.val : ↑(Set.range f)ᶜ → Y)) := by
   apply Nonempty.some
   rw [binaryCofan_isColimit_iff]
   refine' ⟨(mono_iff_injective f).mp inferInstance, Subtype.val_injective, _⟩
chore: better TypeMax instances for limits in Type (#5535)

Preliminary to the full forward port of https://github.com/leanprover-community/mathlib/pull/19153, this is a slight generalization along with explanation of the problem with the instances.

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -38,30 +38,56 @@ We first construct terms of `IsLimit` and `LimitCone`, and then provide isomorph
 types generated by the `HasLimit` API.
 
 As an example, when setting up the monoidal category structure on `Type`
-we use the `types_has_terminal` and `types_has_binary_products` instances.
+we use the `Types.terminalLimitCone` and `Types.binaryProductLimitCone` definitions.
 -/
 
 
-universe u v
+universe v u
 
 open CategoryTheory Limits
 
 namespace CategoryTheory.Limits.Types
 
+instance {β : Type v} (f : β → TypeMax.{v, u}) : HasProduct f :=
+HasLimitsOfShape.has_limit (Discrete.functor f)
+
+-- This must have higher priority than the instance for `TypeMax`.
+-- (Merely being defined later is enough, but that is fragile.)
+instance (priority := high) {β : Type v} (f : β → Type v) : HasProduct f :=
+HasLimitsOfShape.has_limit (Discrete.functor f)
+
 /-- A restatement of `Types.Limit.lift_π_apply` that uses `Pi.π` and `Pi.lift`. -/
 @[simp 1001]
-theorem pi_lift_π_apply {β : Type u} (f : β → Type u) {P : Type u} (s : ∀ b, P ⟶ f b) (b : β)
-    (x : P) : (Pi.π f b : (∏ f) → f b) (@Pi.lift β _ _ f _ P s x) = s b x :=
+theorem pi_lift_π_apply {β : Type v} (f : β → TypeMax.{v, u}) {P : TypeMax.{v, u}}
+    (s : ∀ b, P ⟶ f b) (b : β) (x : P) :
+    (Pi.π f b : (piObj f) → f b) (@Pi.lift β _ _ f _ P s x) = s b x :=
   congr_fun (limit.lift_π (Fan.mk P s) ⟨b⟩) x
 #align category_theory.limits.types.pi_lift_π_apply CategoryTheory.Limits.Types.pi_lift_π_apply
 
+/-- A restatement of `Types.Limit.lift_π_apply` that uses `Pi.π` and `Pi.lift`,
+with specialized universes. -/
+@[simp 1001]
+theorem pi_lift_π_apply' {β : Type v} (f : β → Type v) {P : Type v}
+    (s : ∀ b, P ⟶ f b) (b : β) (x : P) :
+    (Pi.π f b : (piObj f) → f b) (@Pi.lift β _ _ f _ P s x) = s b x :=
+  congr_fun (limit.lift_π (Fan.mk P s) ⟨b⟩) x
+#align category_theory.limits.types.pi_lift_π_apply' CategoryTheory.Limits.Types.pi_lift_π_apply'
+
 /-- A restatement of `Types.Limit.map_π_apply` that uses `Pi.π` and `Pi.map`. -/
 @[simp 1001]
-theorem pi_map_π_apply {β : Type u} {f g : β → Type u} (α : ∀ j, f j ⟶ g j) (b : β) (x) :
+theorem pi_map_π_apply {β : Type v} {f g : β → TypeMax.{v, u}} (α : ∀ j, f j ⟶ g j) (b : β) (x) :
     (Pi.π g b : (∏ g) → g b) (Pi.map α x) = α b ((Pi.π f b : (∏ f) → f b) x) :=
-  Limit.map_π_apply' _ _ _
+  Limit.map_π_apply _ _ _
 #align category_theory.limits.types.pi_map_π_apply CategoryTheory.Limits.Types.pi_map_π_apply
 
+/-- A restatement of `Types.Limit.map_π_apply` that uses `Pi.π` and `Pi.map`,
+with specialized universes. -/
+@[simp 1001]
+theorem pi_map_π_apply' {β : Type v} {f g : β → Type v} (α : ∀ j, f j ⟶ g j) (b : β) (x) :
+    (Pi.π g b : (∏ g) → g b) (Pi.map α x) = α b ((Pi.π f b : (∏ f) → f b) x) :=
+  Limit.map_π_apply' _ _ _
+#align category_theory.limits.types.pi_map_π_apply' CategoryTheory.Limits.Types.pi_map_π_apply'
+
 /-- The category of types has `PUnit` as a terminal object. -/
 def terminalLimitCone : Limits.LimitCone (Functor.empty (Type u)) where
   -- porting note: tidy was able to fill the structure automatically
@@ -315,7 +341,7 @@ noncomputable def isCoprodOfMono {X Y : Type u} (f : X ⟶ Y) [Mono f] :
 
 /-- The category of types has `Π j, f j` as the product of a type family `f : J → Type`.
 -/
-def productLimitCone {J : Type u} (F : J → TypeMax.{u, v}) :
+def productLimitCone {J : Type v} (F : J → TypeMax.{v, u}) :
     Limits.LimitCone (Discrete.functor F) where
   cone :=
     { pt := ∀ j, F j
@@ -326,21 +352,21 @@ def productLimitCone {J : Type u} (F : J → TypeMax.{u, v}) :
 #align category_theory.limits.types.product_limit_cone CategoryTheory.Limits.Types.productLimitCone
 
 /-- The categorical product in `Type u` is the type theoretic product `Π j, F j`. -/
-noncomputable def productIso {J : Type u} (F : J → TypeMax.{u, v}) : ∏ F ≅ ∀ j, F j :=
-  limit.isoLimitCone (productLimitCone.{u, v} F)
+noncomputable def productIso {J : Type v} (F : J → TypeMax.{v, u}) : ∏ F ≅ ∀ j, F j :=
+  limit.isoLimitCone (productLimitCone.{v, u} F)
 #align category_theory.limits.types.product_iso CategoryTheory.Limits.Types.productIso
 
 -- porting note: was `@[elementwise (attr := simp)]`, but it produces a trivial lemma.
 @[simp]
-theorem productIso_hom_comp_eval {J : Type u} (F : J → TypeMax.{u, v}) (j : J) :
-    ((productIso.{u, v} F).hom ≫ fun f => f j) = Pi.π F j :=
+theorem productIso_hom_comp_eval {J : Type v} (F : J → TypeMax.{v, u}) (j : J) :
+    ((productIso.{v, u} F).hom ≫ fun f => f j) = Pi.π F j :=
   rfl
 #align category_theory.limits.types.product_iso_hom_comp_eval CategoryTheory.Limits.Types.productIso_hom_comp_eval
 
 @[elementwise (attr := simp)]
-theorem productIso_inv_comp_π {J : Type u} (F : J → TypeMax.{u, v}) (j : J) :
-    (productIso.{u, v} F).inv ≫ Pi.π F j = fun f => f j :=
-  limit.isoLimitCone_inv_π (productLimitCone.{u, v} F) ⟨j⟩
+theorem productIso_inv_comp_π {J : Type v} (F : J → TypeMax.{v, u}) (j : J) :
+    (productIso.{v, u} F).inv ≫ Pi.π F j = fun f => f j :=
+  limit.isoLimitCone_inv_π (productLimitCone.{v, u} F) ⟨j⟩
 #align category_theory.limits.types.product_iso_inv_comp_π CategoryTheory.Limits.Types.productIso_inv_comp_π
 
 /-- The category of types has `Σ j, f j` as the coproduct of a type family `f : J → Type`.
feat: add Aesop rules for Discrete category (#2519)

Adds a global Aesop cases rule for the Discrete category. This rule was previously added locally in several places.

Diff
@@ -48,8 +48,6 @@ open CategoryTheory Limits
 
 namespace CategoryTheory.Limits.Types
 
-attribute [local aesop safe cases (rule_sets [CategoryTheory])] Discrete
-
 /-- A restatement of `Types.Limit.lift_π_apply` that uses `Pi.π` and `Pi.lift`. -/
 @[simp 1001]
 theorem pi_lift_π_apply {β : Type u} (f : β → Type u) {P : Type u} (s : ∀ b, P ⟶ f b) (b : β)
feat: more consistent use of ext, and updating porting notes. (#5242)

Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au>

Diff
@@ -197,9 +197,9 @@ noncomputable def binaryProductIsoProd : binaryProductFunctor ≅ (prod.functor
   refine' NatIso.ofComponents (fun X => _) (fun _ => _)
   · refine' NatIso.ofComponents (fun Y => _) (fun _ => _)
     · exact ((limit.isLimit _).conePointUniqueUpToIso (binaryProductLimit X Y)).symm
-    . apply Limits.prod.hom_ext <;> dsimp <;> simp <;> rfl
+    . apply Limits.prod.hom_ext <;> simp <;> rfl
   . ext : 2
-    apply Limits.prod.hom_ext <;> dsimp <;> simp <;> rfl
+    apply Limits.prod.hom_ext <;> simp <;> rfl
 #align category_theory.limits.types.binary_product_iso_prod CategoryTheory.Limits.Types.binaryProductIsoProd
 
 /-- The sum type `X ⊕ Y` forms a cocone for the binary coproduct of `X` and `Y`. -/
chore: fix grammar 2/3 (#5002)

Part 2 of #5001

Diff
@@ -304,7 +304,7 @@ theorem binaryCofan_isColimit_iff {X Y : Type u} (c : BinaryCofan X Y) :
         split_ifs <;> exact congr_arg _ (Equiv.apply_ofInjective_symm _ ⟨_, _⟩).symm
 #align category_theory.limits.types.binary_cofan_is_colimit_iff CategoryTheory.Limits.Types.binaryCofan_isColimit_iff
 
-/-- Any monomorphism in `Type` is an coproduct injection. -/
+/-- Any monomorphism in `Type` is a coproduct injection. -/
 noncomputable def isCoprodOfMono {X Y : Type u} (f : X ⟶ Y) [Mono f] :
     IsColimit (BinaryCofan.mk f (Subtype.val : ↑(Set.range fᶜ) → Y)) := by
   apply Nonempty.some
chore: fix many typos (#4983)

These are all doc fixes

Diff
@@ -569,7 +569,7 @@ def pullbackLimitCone (f : X ⟶ Z) (g : Y ⟶ Z) : Limits.LimitCone (cospan f g
 #align category_theory.limits.types.pullback_limit_cone CategoryTheory.Limits.Types.pullbackLimitCone
 
 /-- The pullback cone given by the instance `HasPullbacks (Type u)` is isomorphic to the
-explicit pullback cone given by `pullbacklimitCone`.
+explicit pullback cone given by `pullbackLimitCone`.
 -/
 noncomputable def pullbackConeIsoPullback : limit.cone (cospan f g) ≅ pullbackCone f g :=
   (limit.isLimit _).uniqueUpToIso (pullbackLimitCone f g).isLimit
chore: cleanup Discrete porting notes (#4780)

Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au>

Diff
@@ -44,13 +44,11 @@ we use the `types_has_terminal` and `types_has_binary_products` instances.
 
 universe u v
 
-open CategoryTheory
-
-open CategoryTheory.Limits
+open CategoryTheory Limits
 
 namespace CategoryTheory.Limits.Types
 
--- attribute [local tidy] tactic.discrete_cases -- Porting note: no local, tidy or discrete_cases
+attribute [local aesop safe cases (rule_sets [CategoryTheory])] Discrete
 
 /-- A restatement of `Types.Limit.lift_π_apply` that uses `Pi.π` and `Pi.lift`. -/
 @[simp 1001]
chore: move category theory tactics to Tactic/CategoryTheory (#4461)
Diff
@@ -13,7 +13,7 @@ import Mathlib.CategoryTheory.Limits.Shapes.Products
 import Mathlib.CategoryTheory.Limits.Shapes.BinaryProducts
 import Mathlib.CategoryTheory.Limits.Shapes.Terminal
 import Mathlib.CategoryTheory.ConcreteCategory.Basic
-import Mathlib.Tactic.Elementwise
+import Mathlib.Tactic.CategoryTheory.Elementwise
 
 /-!
 # Special shapes for limits in `Type`.
fix: a missing TypeMax (#3781)

One was missed; curiously it wasn't harmful in master, but when we turn on etaExperiment globally this causes a breakage

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -319,7 +319,7 @@ noncomputable def isCoprodOfMono {X Y : Type u} (f : X ⟶ Y) [Mono f] :
 
 /-- The category of types has `Π j, f j` as the product of a type family `f : J → Type`.
 -/
-def productLimitCone {J : Type u} (F : J → Type max u v) :
+def productLimitCone {J : Type u} (F : J → TypeMax.{u, v}) :
     Limits.LimitCone (Discrete.functor F) where
   cone :=
     { pt := ∀ j, F j
@@ -353,7 +353,7 @@ def coproductColimitCocone {J : Type u} (F : J → Type u) :
     Limits.ColimitCocone (Discrete.functor F) where
   cocone :=
     { pt := Σj, F j
-      ι := Discrete.natTrans (fun ⟨j⟩ x => ⟨j, x⟩)}--{ app := fun j x => ⟨j.as, x⟩ } }
+      ι := Discrete.natTrans (fun ⟨j⟩ x => ⟨j, x⟩)}
   isColimit :=
     { desc := fun s x => s.ι.app ⟨x.1⟩ x.2
       uniq := fun s m w => by
chore: use TypeMax in CategoryTheory.Limits.Types (#3653)

Per discussion at https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/!4.233463.20universe.20constraint.20issues

Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Matthew Ballard <matt@mrb.email>

Diff
@@ -330,24 +330,20 @@ def productLimitCone {J : Type u} (F : J → Type max u v) :
 #align category_theory.limits.types.product_limit_cone CategoryTheory.Limits.Types.productLimitCone
 
 /-- The categorical product in `Type u` is the type theoretic product `Π j, F j`. -/
-noncomputable def productIso {J : Type u} (F : J → Type max u v) :
-  haveI : HasProduct F := hasLimit.{u,v} _; ∏ F ≅ ∀ j, F j :=
-  haveI : HasProduct F := hasLimit.{u,v} _; limit.isoLimitCone (productLimitCone.{u, v} F)
+noncomputable def productIso {J : Type u} (F : J → TypeMax.{u, v}) : ∏ F ≅ ∀ j, F j :=
+  limit.isoLimitCone (productLimitCone.{u, v} F)
 #align category_theory.limits.types.product_iso CategoryTheory.Limits.Types.productIso
 
 -- porting note: was `@[elementwise (attr := simp)]`, but it produces a trivial lemma.
 @[simp]
-theorem productIso_hom_comp_eval {J : Type u} (F : J → Type max u v) (j : J) :
-     haveI : HasProduct F := hasLimit.{u,v} _;
+theorem productIso_hom_comp_eval {J : Type u} (F : J → TypeMax.{u, v}) (j : J) :
     ((productIso.{u, v} F).hom ≫ fun f => f j) = Pi.π F j :=
   rfl
 #align category_theory.limits.types.product_iso_hom_comp_eval CategoryTheory.Limits.Types.productIso_hom_comp_eval
 
 @[elementwise (attr := simp)]
-theorem productIso_inv_comp_π {J : Type u} (F : J → Type max u v) (j : J) :
-    haveI : HasProduct F := hasLimit.{u,v} _;
+theorem productIso_inv_comp_π {J : Type u} (F : J → TypeMax.{u, v}) (j : J) :
     (productIso.{u, v} F).inv ≫ Pi.π F j = fun f => f j :=
-  haveI : HasProduct F := hasLimit.{u,v} _;
   limit.isoLimitCone_inv_π (productLimitCone.{u, v} F) ⟨j⟩
 #align category_theory.limits.types.product_iso_inv_comp_π CategoryTheory.Limits.Types.productIso_inv_comp_π
 
feat: port CategoryTheory.Limits.Shapes.Types (#2809)

Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Parcly Taxel <reddeloostw@gmail.com> Co-authored-by: ChrisHughes24 <chrishughes24@gmail.com>

Dependencies 2 + 235

236 files ported (99.2%)
99315 lines ported (99.9%)
Show graph

The unported dependencies are