-
Notifications
You must be signed in to change notification settings - Fork 63
/
Rezk.lagda.md
183 lines (150 loc) · 6.23 KB
/
Rezk.lagda.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
<!--
```agda
open import Cat.Functor.FullSubcategory
open import Cat.Instances.Functor
open import Cat.Instances.Sets
open import Cat.Functor.Base
open import Cat.Functor.Hom
open import Cat.Prelude
open import Data.Image
import Cat.Functor.Reasoning.FullyFaithful as Ffr
import Cat.Reasoning as Cr
```
-->
```agda
module Cat.Univalent.Rezk where
```
<!--
```agda
private variable
o h o' h' : Level
open Precategory
open Functor
```
-->
# The Rezk completion
In the same way that we can [freely] complete a proset into a poset, it
is possible to, in a universal way, replace any precategory $\cA$ by
a category $\widehat{\cA}$, such that there is a weak equivalence (a
[fully faithful], [essentially surjective] functor) $\cA \to
\widehat{\cA}$, such that any map from $\cA$ to a [univalent
category] $\cC$ factors uniquely through $\widehat{\cA}$.
[freely]: Cat.Functor.Adjoint.html
[fully faithful]: Cat.Functor.Base.html#ff-functors
[essentially surjective]: Cat.Functor.Base.html#essential-fibres
[univalent category]: Cat.Univalent.html
The construction is essentially piecing together a handful of
pre-existing results: The univalence principle for $n$-types implies
that [Sets is a univalent category][setu], and [functor categories with
univalent codomain are univalent][funcu]; The [Yoneda lemma] implies
that any precategory $\cA$ admits a [full inclusion] into
$[\cA\op, \Sets]$, and [full subcategories of univalent categories
are univalent][fullu] --- so, like Grothendieck cracking the nut, the
sea of theory has risen to the point where our result is trivial:
[setu]: Cat.Instances.Sets.html
[funcu]: Cat.Instances.Functor.html#functor-categories
[Yoneda lemma]: Cat.Functor.Hom.html#the-yoneda-embedding
[full inclusion]: Cat.Functor.FullSubcategory.html#from-full-inclusions
[fullu]: Cat.Functor.FullSubcategory.html#Restrict-is-category
```agda
module Rezk-large (A : Precategory o h) where
Rezk-completion : Precategory (o ⊔ lsuc h) (o ⊔ h)
Rezk-completion = Full-inclusion→Full-subcat {F = よ A} (よ-is-fully-faithful A)
Rezk-completion-is-category : is-category Rezk-completion
Rezk-completion-is-category =
Restrict-is-category _ (λ _ → squash)
(Functor-is-category Sets-is-category)
Complete : Functor A Rezk-completion
Complete = Ff-domain→Full-subcat {F = よ A} (よ-is-fully-faithful A)
Complete-is-ff : is-fully-faithful Complete
Complete-is-ff = is-fully-faithful-domain→Full-subcat
{F = よ _} (よ-is-fully-faithful _)
Complete-is-eso : is-eso Complete
Complete-is-eso = is-eso-domain→Full-subcat {F = よ _} (よ-is-fully-faithful _)
```
However, this construction is a bit disappointing, because we've had to
pass to a _larger_ universe than the one we started with. If originally
we had $\cA$ with objects living in a universe $o$ and homs in $h$,
we now have $\widehat{\cA}$ with objects living in $o \sqcup (1 + h)$.
It's unavoidable that the objects in $\widehat{\cA}$ will live in an
universe $\widehat{o}$ satisfying $(o \sqcup h) \le \widehat{o}$, since
we want their identity type to be equivalent to something living in $h$,
but going up a level is unfortunate. However, it's also avoidable!
Since $\psh(\cA)$ is a category, isomorphism is an [identity system]
on its objects, which lives at the level of its morphisms --- $o \sqcup h$
--- rather than of its objects, $o \sqcup (1 + h)$. Therefore, using the
construction of [small images], we may take $\im \yo_{\cA}$ to be a
$o \sqcup h$-type!
[identity system]: 1Lab.Path.IdentitySystem.html
[small images]: Data.Image.html
```agda
module _ (A : Precategory o h) where
private
PSh[A] = PSh h A
module PSh[A] = Precategory PSh[A]
PSh[A]-is-cat : is-category PSh[A]
PSh[A]-is-cat = Functor-is-category Sets-is-category
module よim = Replacement PSh[A]-is-cat (よ₀ A)
Rezk-completion : Precategory (o ⊔ h) (o ⊔ h)
Rezk-completion .Ob = よim.Image
Rezk-completion .Hom x y = よim.embed x => よim.embed y
Rezk-completion .Hom-set _ _ = PSh[A].Hom-set _ _
Rezk-completion .id = PSh[A].id
Rezk-completion ._∘_ = PSh[A]._∘_
Rezk-completion .idr = PSh[A].idr
Rezk-completion .idl = PSh[A].idl
Rezk-completion .assoc = PSh[A].assoc
```
Our resized Rezk completion $\widehat{\cA}$ factors the Yoneda
embedding $\yo_\cA$ as a functor
$$
\cA \xto{\sim} \widehat{\cA} \mono \psh(\cA)
$$
where the first functor is a weak equivalence, and the second functor is
fully faithful. Let's first define the functors:
```agda
complete : Functor A Rezk-completion
complete .F₀ = よim.inc
complete .F₁ = よ A .F₁
complete .F-id = よ A .F-id
complete .F-∘ = よ A .F-∘
Rezk↪PSh : Functor Rezk-completion (PSh h A)
Rezk↪PSh .F₀ = よim.embed
Rezk↪PSh .F₁ f = f
Rezk↪PSh .F-id = refl
Rezk↪PSh .F-∘ _ _ = refl
```
From the existence of the second functor, we can piece together
pre-existing lemmas about the image and about identity systems in
general to show that this resized Rezk completion is also a category: We
can pull back the identity system on $\psh(\cA)$ to one on
$\widehat{\cA}$, since we know of a (type-theoretic) embedding
between their types of objects.
That gives us an identity system which is slightly off, that of
"$\psh(\cA)$-isomorphisms on the image of the functor
$\widehat{\cA} \mono \psh(\cA)$", but since we know that this
functor is fully faithful, that's equivalent to what we want.
```agda
private module Rezk↪PSh = Ffr Rezk↪PSh id-equiv
abstract
Rezk-completion-is-category : is-category Rezk-completion
Rezk-completion-is-category =
transfer-identity-system
(pullback-identity-system
PSh[A]-is-cat
(_ , よim.embed-is-embedding))
(λ _ _ → Rezk↪PSh.iso-equiv e⁻¹)
λ x → Cr.≅-pathp Rezk-completion refl refl refl
```
It remains to show that the functor $\cA \to \widehat{\cA}$ is a
weak equivalence. It's fully faithful because the Yoneda embedding is,
and it's essentially surjective because it's _literally_
surjective-on-objects.
```agda
complete-is-ff : is-fully-faithful complete
complete-is-ff = よ-is-fully-faithful A
complete-is-eso : is-eso complete
complete-is-eso x = do
t ← よim.inc-is-surjective x
pure (t .fst , path→iso (t .snd))
```