Skip to content

Commit 2b1172a

Browse files
committed
def: empty quasigroups
1 parent 452117a commit 2b1172a

File tree

2 files changed

+94
-1
lines changed

2 files changed

+94
-1
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
---
2+
description: |
3+
The initial quasigroup.
4+
---
5+
<!--
6+
```agda
7+
open import Algebra.Quasigroup
8+
9+
open import Cat.Displayed.Total
10+
open import Cat.Diagram.Initial
11+
open import Cat.Prelude hiding (_/_)
12+
```
13+
-->
14+
15+
```agda
16+
module Algebra.Quasigroup.Instances.Initial where
17+
```
18+
19+
# The initial quasigroup {defines="initial-quasigroup empty-quasigroup"}
20+
21+
The empty type trivially forms a [[quasigroup]].
22+
23+
<!--
24+
```agda
25+
private variable
26+
ℓ : Level
27+
28+
open Total-hom
29+
```
30+
-->
31+
32+
```agda
33+
Empty-quasigroup : ∀ {ℓ} → Quasigroup ℓ
34+
Empty-quasigroup = to-quasigroup ⊥-quasigroup where
35+
open make-quasigroup
36+
37+
⊥-quasigroup : make-quasigroup (Lift _ ⊥)
38+
⊥-quasigroup .quasigroup-is-set = hlevel 2
39+
⊥-quasigroup ._⋆_ ()
40+
⊥-quasigroup ._⧵_ ()
41+
⊥-quasigroup ._/_ ()
42+
⊥-quasigroup ./-invl ()
43+
⊥-quasigroup ./-invr ()
44+
⊥-quasigroup .⧵-invr ()
45+
⊥-quasigroup .⧵-invl ()
46+
```
47+
48+
Moreover, the empty quasigroup is an [[initial object]] in the category
49+
of quasigroups, as there is a unique function out of the empty type.
50+
51+
```agda
52+
Empty-quasigroup-is-initial : is-initial (Quasigroups ℓ) Empty-quasigroup
53+
Empty-quasigroup-is-initial A .centre .hom ()
54+
Empty-quasigroup-is-initial A .centre .preserves .is-quasigroup-hom.pres-⋆ ()
55+
Empty-quasigroup-is-initial A .paths f = ext λ ()
56+
57+
Initial-quasigroup : Initial (Quasigroups ℓ)
58+
Initial-quasigroup .Initial.bot = Empty-quasigroup
59+
Initial-quasigroup .Initial.has⊥ = Empty-quasigroup-is-initial
60+
```
61+
62+
In fact, the empty quasigroup is a [[strict initial object]].
63+
64+
```agda
65+
Initial-quasigroup-is-strict
66+
: is-strict-initial (Quasigroups ℓ) Initial-quasigroup
67+
Initial-quasigroup-is-strict =
68+
make-is-strict-initial (Quasigroups _) Initial-quasigroup $ λ A f → ext λ a →
69+
absurd (Lift.lower (f # a))
70+
```
71+
72+
<!--
73+
```agda
74+
Strict-initial-quasigroup : Strict-initial (Quasigroups ℓ)
75+
Strict-initial-quasigroup .Strict-initial.initial =
76+
Initial-quasigroup
77+
Strict-initial-quasigroup .Strict-initial.has-is-strict =
78+
Initial-quasigroup-is-strict
79+
```
80+
-->

src/Cat/Diagram/Initial.lagda.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ a proposition:
9393
(x1 .has⊥ ob) (x2 .has⊥ ob) i
9494
```
9595

96-
## Strictness
96+
## Strictness {defines="strict-initial-object"}
9797

9898
An initial object is said to be *[strict]* if every morphism into it is an *iso*morphism.
9999
This is a categorical generalization of the fact that if one can write a function $X \to \bot$ then $X$ must itself be empty.
@@ -121,6 +121,19 @@ Strictness is a property of, not structure on, an initial object.
121121
is-strict-initial-is-prop i = hlevel 1
122122
```
123123

124+
As maps out of initial objects are unique, it suffices to show that
125+
every map $\text{!`} \circ f = id$ for every $f : X \to \bot$ to establish that $\bot$ is a
126+
strict initial object.
127+
128+
```agda
129+
make-is-strict-initial
130+
: (i : Initial)
131+
→ (∀ x → (f : Hom x (i .bot)) → (¡ i) ∘ f ≡ id)
132+
→ is-strict-initial i
133+
make-is-strict-initial i p x f =
134+
make-invertible (¡ i) (¡-unique₂ i (f ∘ ¡ i) id) (p x f)
135+
```
136+
124137
<!--
125138
```agda
126139
module _ {o h} {C : Precategory o h} where

0 commit comments

Comments
 (0)