Zulip Chat Archive
Stream: Is there code for X?
Topic: CategoryTheory.Limits.IsBinaryProduct
William Sørensen (Nov 01 2025 at 22:12):
HI is there code like this in mathlib? Ive not been able to find it and its quite surprising
import Mathlib.CategoryTheory.Limits.Shapes.BinaryProducts
namespace CategoryTheory.Limits
universe u
variable {𝓒 : Type u} [Category 𝓒] {X Y P : 𝓒} (fst : P ⟶ X) (snd : P ⟶ Y)
def IsBinaryProduct :=
Limits.IsLimit (Limits.BinaryFan.mk fst snd)
def IsBinaryProduct.ofUniqueHom {fst snd}
(lift : {T : 𝓒} → (T ⟶ X) → (T ⟶ Y) → (T ⟶ P))
(hl₁ : ∀ {T} (f : T ⟶ X) (g : T ⟶ Y), lift f g ≫ fst = f)
(hl₂ : ∀ {T} (f : T ⟶ X) (g : T ⟶ Y), lift f g ≫ snd = g)
(uniq : ∀ {T} (f : T ⟶ X) (g : T ⟶ Y) (m : T ⟶ P), m ≫ fst = f → m ≫ snd = g → m = lift f g)
: IsBinaryProduct fst snd :=
Limits.BinaryFan.IsLimit.mk _ lift hl₁ hl₂ uniq
theorem IsBinaryProduct.hasBinaryProduct (h : IsBinaryProduct fst snd) : HasBinaryProduct X Y :=
⟨⟨{ cone := BinaryFan.mk fst snd, isLimit := h }⟩⟩
noncomputable def productIsBinaryProduct [HasBinaryProduct X Y]
: IsBinaryProduct (prod.fst : X ⨯ Y ⟶ X) prod.snd :=
IsBinaryProduct.ofUniqueHom
prod.lift
prod.lift_fst
prod.lift_snd
(fun {T} f g m hf hg => by
dsimp
ext
· rw [hf, prod.lift_fst f g]
· rw [hg, prod.lift_snd f g])
end CategoryTheory.Limits
Joël Riou (Nov 02 2025 at 00:01):
Your definition IsBinaryProduct.ofUniqueHom essentially duplicates BinaryFan.IsLimit.mk which you are using. The last one productIsBinaryProduct is prodIsProd (which I found by doing apply?).
William Sørensen (Nov 02 2025 at 10:22):
Hmm fair enough. I just really like the is-/hasterminal interface for code discovery but this might just be because I’m trying to formalise my course as I learn it
Last updated: Dec 20 2025 at 21:32 UTC