Session 26: Distributive categories and linear categories
2. Matrix multiplication in linear categories
A category with zero maps in which every 'identity matrix'...
f = \begin{bmatrix} 1_{X} & 0_{XY} \\ 0_{YX} & 1_{Y} \end{bmatrix} : X + Y \rightarrow X \times Y
is an isomorphism is called a linear category.
Linear categories can be formalised in Lean using a combination of the HasZeroMorphisms and HasBinaryBiproducts type classes, which we print below for reference.
#print HasZeroMorphisms
#print HasBinaryBiproducts
In a category with zero morphisms, a binary biproduct is a BinaryBicone whose cone is a limit cone and whose cocone is a colimit cocone. We print the definition of BinaryBicone below for reference.
#print BinaryBicone
3. Sum of maps in a linear category
Using the [given] definitions of matrix multiplication and addition of maps, prove the following formula for matrix multiplication:
\begin{bmatrix} f_{AX} & f_{AY} \\ f_{BX} & f_{BY} \end{bmatrix} \cdot \begin{bmatrix} g_{XU} & g_{XV} \\ g_{YU} & g_{YV} \end{bmatrix} = \begin{bmatrix} g_{XU} \circ f_{AX} + g_{YU} \circ f_{AY} & g_{XV} \circ f_{AX} + g_{YV} \circ f_{AY} \\ g_{XU} \circ f_{BX} + g_{YU} \circ f_{BY} & g_{XV} \circ f_{BX} + g_{YV} \circ f_{BY} \end{bmatrix}
Solution: Exercise 1
We start by defining the required 2Γ2 matrix of morphisms in a linear category.
noncomputable def matrix2x2 {π : Type u} [Category.{v, u} π]
[HasZeroMorphisms π] [HasBinaryBiproducts π]
{Cβ Cβ A B : π}
(fββ : Cβ βΆ A) (fββ : Cβ βΆ B)
(fββ : Cβ βΆ A) (fββ : Cβ βΆ B) :
Cβ β Cβ βΆ A β B :=
biprod.lift (biprod.desc fββ fββ) (biprod.desc fββ fββ)
In the solution below, we make our linear category Preadditive in order to have access to addition of morphisms. (We also use simp to discharge the last three of the four required equalities, since all four follow the same pattern.)
example {π : Type u} [Category.{v, u} π]
[Preadditive π] [HasBinaryBiproducts π]
{A B X Y U V : π}
(fAX : A βΆ X) (fAY : A βΆ Y) (fBX : B βΆ X) (fBY : B βΆ Y)
(gXU : X βΆ U) (gXV : X βΆ V) (gYU : Y βΆ U) (gYV : Y βΆ V) :
matrix2x2 gXU gXV gYU gYV β matrix2x2 fAX fAY fBX fBY =
matrix2x2
((gXU β fAX) + (gYU β fAY)) ((gXV β fAX) + (gYV β fAY))
((gXU β fBX) + (gYU β fBY)) ((gXV β fBX) + (gYV β fBY)) := π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ matrix2x2 gXU gXV gYU gYV β matrix2x2 fAX fAY fBX fBY =
matrix2x2 (gXU β fAX + gYU β fAY) (gXV β fAX + gYV β fAY) (gXU β fBX + gYU β fBY) (gXV β fBX + gYV β fBY)
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ biprod.fst β matrix2x2 gXU gXV gYU gYV β matrix2x2 fAX fAY fBX fBY =
biprod.fst β matrix2x2 (gXU β fAX + gYU β fAY) (gXV β fAX + gYV β fAY) (gXU β fBX + gYU β fBY) (gXV β fBX + gYV β fBY)π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ biprod.snd β matrix2x2 gXU gXV gYU gYV β matrix2x2 fAX fAY fBX fBY =
biprod.snd β matrix2x2 (gXU β fAX + gYU β fAY) (gXV β fAX + gYV β fAY) (gXU β fBX + gYU β fBY) (gXV β fBX + gYV β fBY)
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ biprod.fst β matrix2x2 gXU gXV gYU gYV β matrix2x2 fAX fAY fBX fBY =
biprod.fst β matrix2x2 (gXU β fAX + gYU β fAY) (gXV β fAX + gYV β fAY) (gXU β fBX + gYU β fBY) (gXV β fBX + gYV β fBY)π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ biprod.snd β matrix2x2 gXU gXV gYU gYV β matrix2x2 fAX fAY fBX fBY =
biprod.snd β matrix2x2 (gXU β fAX + gYU β fAY) (gXV β fAX + gYV β fAY) (gXU β fBX + gYU β fBY) (gXV β fBX + gYV β fBY) π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ (biprod.snd β matrix2x2 gXU gXV gYU gYV β matrix2x2 fAX fAY fBX fBY) β biprod.inl =
(biprod.snd β
matrix2x2 (gXU β fAX + gYU β fAY) (gXV β fAX + gYV β fAY) (gXU β fBX + gYU β fBY) (gXV β fBX + gYV β fBY)) β
biprod.inlπ:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ (biprod.snd β matrix2x2 gXU gXV gYU gYV β matrix2x2 fAX fAY fBX fBY) β biprod.inr =
(biprod.snd β
matrix2x2 (gXU β fAX + gYU β fAY) (gXV β fAX + gYV β fAY) (gXU β fBX + gYU β fBY) (gXV β fBX + gYV β fBY)) β
biprod.inr π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ (biprod.fst β matrix2x2 gXU gXV gYU gYV β matrix2x2 fAX fAY fBX fBY) β biprod.inl =
(biprod.fst β
matrix2x2 (gXU β fAX + gYU β fAY) (gXV β fAX + gYV β fAY) (gXU β fBX + gYU β fBY) (gXV β fBX + gYV β fBY)) β
biprod.inlπ:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ (biprod.fst β matrix2x2 gXU gXV gYU gYV β matrix2x2 fAX fAY fBX fBY) β biprod.inr =
(biprod.fst β
matrix2x2 (gXU β fAX + gYU β fAY) (gXV β fAX + gYV β fAY) (gXU β fBX + gYU β fBY) (gXV β fBX + gYV β fBY)) β
biprod.inrπ:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ (biprod.snd β matrix2x2 gXU gXV gYU gYV β matrix2x2 fAX fAY fBX fBY) β biprod.inl =
(biprod.snd β
matrix2x2 (gXU β fAX + gYU β fAY) (gXV β fAX + gYV β fAY) (gXU β fBX + gYU β fBY) (gXV β fBX + gYV β fBY)) β
biprod.inlπ:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ (biprod.snd β matrix2x2 gXU gXV gYU gYV β matrix2x2 fAX fAY fBX fBY) β biprod.inr =
(biprod.snd β
matrix2x2 (gXU β fAX + gYU β fAY) (gXV β fAX + gYV β fAY) (gXU β fBX + gYU β fBY) (gXV β fBX + gYV β fBY)) β
biprod.inr π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ (biprod.snd β
biprod.lift (biprod.desc gXU gYU) (biprod.desc gXV gYV) β
biprod.lift (biprod.desc fAX fBX) (biprod.desc fAY fBY)) β
biprod.inr =
(biprod.snd β
biprod.lift (biprod.desc (gXU β fAX + gYU β fAY) (gXU β fBX + gYU β fBY))
(biprod.desc (gXV β fAX + gYV β fAY) (gXV β fBX + gYV β fBY))) β
biprod.inr
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ (biprod.fst β
biprod.lift (biprod.desc gXU gYU) (biprod.desc gXV gYV) β
biprod.lift (biprod.desc fAX fBX) (biprod.desc fAY fBY)) β
biprod.inl =
(biprod.fst β
biprod.lift (biprod.desc (gXU β fAX + gYU β fAY) (gXU β fBX + gYU β fBY))
(biprod.desc (gXV β fAX + gYV β fAY) (gXV β fBX + gYV β fBY))) β
biprod.inl π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ ((biprod.fst β biprod.lift (biprod.desc gXU gYU) (biprod.desc gXV gYV)) β
biprod.lift (biprod.desc fAX fBX) (biprod.desc fAY fBY)) β
biprod.inl =
(biprod.fst β
biprod.lift (biprod.desc (gXU β fAX + gYU β fAY) (gXU β fBX + gYU β fBY))
(biprod.desc (gXV β fAX + gYV β fAY) (gXV β fBX + gYV β fBY))) β
biprod.inl
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ (biprod.desc gXU gYU β biprod.lift (biprod.desc fAX fBX) (biprod.desc fAY fBY)) β biprod.inl =
(biprod.fst β
biprod.lift (biprod.desc (gXU β fAX + gYU β fAY) (gXU β fBX + gYU β fBY))
(biprod.desc (gXV β fAX + gYV β fAY) (gXV β fBX + gYV β fBY))) β
biprod.inl
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ (gXU β biprod.desc fAX fBX + gYU β biprod.desc fAY fBY) β biprod.inl =
(biprod.fst β
biprod.lift (biprod.desc (gXU β fAX + gYU β fAY) (gXU β fBX + gYU β fBY))
(biprod.desc (gXV β fAX + gYV β fAY) (gXV β fBX + gYV β fBY))) β
biprod.inl
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ (gXU β biprod.desc fAX fBX) β biprod.inl + (gYU β biprod.desc fAY fBY) β biprod.inl =
(biprod.fst β
biprod.lift (biprod.desc (gXU β fAX + gYU β fAY) (gXU β fBX + gYU β fBY))
(biprod.desc (gXV β fAX + gYV β fAY) (gXV β fBX + gYV β fBY))) β
biprod.inl
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ gXU β biprod.desc fAX fBX β biprod.inl + (gYU β biprod.desc fAY fBY) β biprod.inl =
(biprod.fst β
biprod.lift (biprod.desc (gXU β fAX + gYU β fAY) (gXU β fBX + gYU β fBY))
(biprod.desc (gXV β fAX + gYV β fAY) (gXV β fBX + gYV β fBY))) β
biprod.inl
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ gXU β fAX + (gYU β biprod.desc fAY fBY) β biprod.inl =
(biprod.fst β
biprod.lift (biprod.desc (gXU β fAX + gYU β fAY) (gXU β fBX + gYU β fBY))
(biprod.desc (gXV β fAX + gYV β fAY) (gXV β fBX + gYV β fBY))) β
biprod.inl
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ gXU β fAX + gYU β biprod.desc fAY fBY β biprod.inl =
(biprod.fst β
biprod.lift (biprod.desc (gXU β fAX + gYU β fAY) (gXU β fBX + gYU β fBY))
(biprod.desc (gXV β fAX + gYV β fAY) (gXV β fBX + gYV β fBY))) β
biprod.inl
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ gXU β fAX + gYU β fAY =
(biprod.fst β
biprod.lift (biprod.desc (gXU β fAX + gYU β fAY) (gXU β fBX + gYU β fBY))
(biprod.desc (gXV β fAX + gYV β fAY) (gXV β fBX + gYV β fBY))) β
biprod.inl
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ gXU β fAX + gYU β fAY = biprod.desc (gXU β fAX + gYU β fAY) (gXU β fBX + gYU β fBY) β biprod.inl
All goals completed! π
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ (biprod.fst β
biprod.lift (biprod.desc gXU gYU) (biprod.desc gXV gYV) β
biprod.lift (biprod.desc fAX fBX) (biprod.desc fAY fBY)) β
biprod.inr =
(biprod.fst β
biprod.lift (biprod.desc (gXU β fAX + gYU β fAY) (gXU β fBX + gYU β fBY))
(biprod.desc (gXV β fAX + gYV β fAY) (gXV β fBX + gYV β fBY))) β
biprod.inr All goals completed! π
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ (biprod.snd β
biprod.lift (biprod.desc gXU gYU) (biprod.desc gXV gYV) β
biprod.lift (biprod.desc fAX fBX) (biprod.desc fAY fBY)) β
biprod.inl =
(biprod.snd β
biprod.lift (biprod.desc (gXU β fAX + gYU β fAY) (gXU β fBX + gYU β fBY))
(biprod.desc (gXV β fAX + gYV β fAY) (gXV β fBX + gYV β fBY))) β
biprod.inl All goals completed! π
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:Preadditive πinstβ:HasBinaryBiproducts πA:πB:πX:πY:πU:πV:πfAX:A βΆ XfAY:A βΆ YfBX:B βΆ XfBY:B βΆ YgXU:X βΆ UgXV:X βΆ VgYU:Y βΆ UgYV:Y βΆ Vβ’ (biprod.snd β
biprod.lift (biprod.desc gXU gYU) (biprod.desc gXV gYV) β
biprod.lift (biprod.desc fAX fBX) (biprod.desc fAY fBY)) β
biprod.inr =
(biprod.snd β
biprod.lift (biprod.desc (gXU β fAX + gYU β fAY) (gXU β fBX + gYU β fBY))
(biprod.desc (gXV β fAX + gYV β fAY) (gXV β fBX + gYV β fBY))) β
biprod.inr All goals completed! π
Prove that a category with initial and terminal objects has zero maps if and only if an initial object is isomorphic to a terminal object.
Solution: Exercise 2
The equivalence follows from the universal properties of initial and terminal objects.
example {π : Type u} [Category.{v, u} π]
[HasInitial π] [HasTerminal π] :
Nonempty (HasZeroMorphisms π) β Nonempty (β₯_ π β
β€_ π) := π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:HasInitial πinstβ:HasTerminal πβ’ Nonempty (HasZeroMorphisms π) β Nonempty (β₯_ π β
β€_ π)
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:HasInitial πinstβ:HasTerminal πβ’ Nonempty (HasZeroMorphisms π) β Nonempty (β₯_ π β
β€_ π)π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:HasInitial πinstβ:HasTerminal πβ’ Nonempty (β₯_ π β
β€_ π) β Nonempty (HasZeroMorphisms π)
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:HasInitial πinstβ:HasTerminal πβ’ Nonempty (HasZeroMorphisms π) β Nonempty (β₯_ π β
β€_ π) π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:HasInitial πinstβ:HasTerminal πhZero:HasZeroMorphisms πβ’ Nonempty (β₯_ π β
β€_ π)
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:HasInitial πinstβ:HasTerminal πhZero:HasZeroMorphisms πβ’ β₯_ π β
β€_ π
All goals completed! π
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:HasInitial πinstβ:HasTerminal πβ’ Nonempty (β₯_ π β
β€_ π) β Nonempty (HasZeroMorphisms π) π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:HasInitial πinstβ:HasTerminal πhIso:β₯_ π β
β€_ πβ’ Nonempty (HasZeroMorphisms π)
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:HasInitial πinstβ:HasTerminal πhIso:β₯_ π β
β€_ πβ’ HasZeroMorphisms π
exact {
zero X Y := β¨initial.to Y β hIso.inv β terminal.from Xβ©
comp_zero := π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:HasInitial πinstβ:HasTerminal πhIso:β₯_ π β
β€_ πβ’ β {X Y : π} (f : X βΆ Y) (Z : π), 0 β f = 0
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:HasInitial πinstβ:HasTerminal πhIso:β₯_ π β
β€_ πX:πY:πf:X βΆ YZ:πβ’ 0 β f = 0
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:HasInitial πinstβ:HasTerminal πhIso:β₯_ π β
β€_ πX:πY:πf:X βΆ YZ:πβ’ (initial.to Z β hIso.inv β terminal.from Y) β f = initial.to Z β hIso.inv β terminal.from X
repeat π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:HasInitial πinstβ:HasTerminal πhIso:β₯_ π β
β€_ πX:πY:πf:X βΆ YZ:πβ’ initial.to Z β hIso.inv β terminal.from Y β f = initial.to Z β hIso.inv β terminal.from X
All goals completed! π
zero_comp := π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:HasInitial πinstβ:HasTerminal πhIso:β₯_ π β
β€_ πβ’ β (X : π) {Y Z : π} (f : Y βΆ Z), f β 0 = 0
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:HasInitial πinstβ:HasTerminal πhIso:β₯_ π β
β€_ πX:πY:πZ:πf:Y βΆ Zβ’ f β 0 = 0
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:HasInitial πinstβ:HasTerminal πhIso:β₯_ π β
β€_ πX:πY:πZ:πf:Y βΆ Zβ’ f β initial.to Y β hIso.inv β terminal.from X = initial.to Z β hIso.inv β terminal.from X
π:Type uinstβΒ²:Category.{v, u} πinstβΒΉ:HasInitial πinstβ:HasTerminal πhIso:β₯_ π β
β€_ πX:πY:πZ:πf:Y βΆ Zβ’ (f β initial.to Y) β hIso.inv β terminal.from X = initial.to Z β hIso.inv β terminal.from X
All goals completed! π
}