module Algebra.Quasigroup.Instances.Initial where
The initial quasigroupπ
The empty type trivially forms a quasigroup.
private variable
: Level
β
open Total-hom
: β {β} β Quasigroup β
Empty-quasigroup = to-quasigroup β₯-quasigroup where
Empty-quasigroup open make-quasigroup
: make-quasigroup (Lift _ β₯)
β₯-quasigroup .quasigroup-is-set = hlevel 2
β₯-quasigroup ._β_ ()
β₯-quasigroup ._⧡_ ()
β₯-quasigroup ._/_ ()
β₯-quasigroup ./-invl ()
β₯-quasigroup ./-invr ()
β₯-quasigroup .⧡-invr ()
β₯-quasigroup .⧡-invl () β₯-quasigroup
Moreover, the empty quasigroup is an initial object in the category of quasigroups, as there is a unique function out of the empty type.
: is-initial (Quasigroups β) Empty-quasigroup
Empty-quasigroup-is-initial .centre .hom ()
Empty-quasigroup-is-initial A .centre .preserves .is-quasigroup-hom.pres-β ()
Empty-quasigroup-is-initial A .paths f = ext Ξ» ()
Empty-quasigroup-is-initial A
: Initial (Quasigroups β)
Initial-quasigroup .Initial.bot = Empty-quasigroup
Initial-quasigroup .Initial.hasβ₯ = Empty-quasigroup-is-initial Initial-quasigroup
In fact, the empty quasigroup is a strict initial object.
Initial-quasigroup-is-strict: is-strict-initial (Quasigroups β) Initial-quasigroup
=
Initial-quasigroup-is-strict (Quasigroups _) Initial-quasigroup $ Ξ» A f β ext Ξ» a β
make-is-strict-initial (Lift.lower (f # a)) absurd
: Strict-initial (Quasigroups β)
Strict-initial-quasigroup .Strict-initial.initial =
Strict-initial-quasigroup
Initial-quasigroup.Strict-initial.has-is-strict =
Strict-initial-quasigroup Initial-quasigroup-is-strict