Skip to content

Commit 79d73bf

Browse files
Preunivalence implies strong preunivalence (#1364)
As demonstrated by Evan Cavallo, strong preunivalence follows from preunivalence + function extensionality. By an analogous proof, preunivalent categories are strongly preunivalent.
1 parent fc2c4cc commit 79d73bf

15 files changed

+302
-46
lines changed

.vscode/agda.code-snippets

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,19 @@
2121
"description": "Equational reasoning",
2222
"prefix": ["equational-reasoning"]
2323
},
24-
"Homotopy-reasoning": {
24+
"Homotopy reasoning": {
2525
"body": ["homotopy-reasoning ? ~ ? by ?"],
26-
"description": "Homotopy-reasoning",
26+
"description": "Homotopy reasoning",
2727
"prefix": ["homotopy-reasoning"]
2828
},
29-
"Equivalence-reasoning": {
29+
"Equivalence reasoning": {
3030
"body": ["equivalence-reasoning ? ≃ ? by ?"],
31-
"description": "Equivalence-reasoning",
31+
"description": "Equivalence reasoning",
3232
"prefix": ["equivalence-reasoning"]
33+
},
34+
"Retract reasoning": {
35+
"body": ["retract-reasoning ? retract-of ? by ?"],
36+
"description": "Retract reasoning",
37+
"prefix": ["retract-reasoning"]
3338
}
3439
}

src/category-theory/cores-precategories.lagda.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,10 @@ module _
121121
iso-Precategory (core-precategory-Precategory C) x y ≃ iso-Precategory C x y
122122
inv-compute-iso-core-Precategory =
123123
inv-compute-iso-Pregroupoid (core-pregroupoid-Precategory C)
124+
125+
inclusion-iso-core-Precategory :
126+
iso-Precategory C x y → iso-Precategory (core-precategory-Precategory C) x y
127+
inclusion-iso-core-Precategory = map-equiv compute-iso-core-Precategory
124128
```
125129

126130
### The core is replete

src/category-theory/isomorphisms-in-precategories.lagda.md

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ open import foundation.retractions
2222
open import foundation.sections
2323
open import foundation.sets
2424
open import foundation.subtypes
25+
open import foundation.transport-along-identifications
2526
open import foundation.universe-levels
2627
```
2728

@@ -420,7 +421,7 @@ module _
420421
is-section-hom-inv-is-iso-Precategory C p
421422
```
422423

423-
### Inverses of isomorphisms
424+
### The inverse operation on isomorphisms
424425

425426
```agda
426427
module _
@@ -527,6 +528,49 @@ module _
527528
( is-section-hom-inv-iso-Precategory C f)
528529
```
529530

531+
### The 3-for-2 property of isomorphisms
532+
533+
```agda
534+
module _
535+
{l1 l2 : Level}
536+
(C : Precategory l1 l2)
537+
{x y z : obj-Precategory C}
538+
(f : hom-Precategory C x y)
539+
(g : hom-Precategory C y z)
540+
where
541+
542+
is-iso-left-factor-Precategory :
543+
is-iso-Precategory C f →
544+
is-iso-Precategory C (comp-hom-Precategory C g f) →
545+
is-iso-Precategory C g
546+
is-iso-left-factor-Precategory F GF =
547+
tr
548+
( is-iso-Precategory C)
549+
( equational-reasoning
550+
( comp-hom-Precategory C
551+
( comp-hom-Precategory C g f)
552+
( hom-inv-is-iso-Precategory C F))
553+
= ( comp-hom-Precategory C
554+
( g)
555+
( comp-hom-Precategory C f ( hom-inv-is-iso-Precategory C F)))
556+
by
557+
associative-comp-hom-Precategory C
558+
( g)
559+
( f)
560+
( hom-inv-is-iso-Precategory C F)
561+
= (comp-hom-Precategory C g (id-hom-Precategory C))
562+
by
563+
ap
564+
( comp-hom-Precategory C g)
565+
( is-section-hom-inv-is-iso-Precategory C F)
566+
= g
567+
by right-unit-law-comp-hom-Precategory C g)
568+
( is-iso-comp-is-iso-Precategory C GF (is-iso-inv-is-iso-Precategory C F))
569+
```
570+
571+
> It remains to formalize the implication
572+
> `is-iso g → is-iso (g ∘ f) → is-iso f`.
573+
530574
### The inverse operation is a fibered involution on isomorphisms
531575

532576
```agda
@@ -706,6 +750,37 @@ module _
706750
equiv-precomp-hom-is-iso-Precategory C (is-iso-iso-Precategory C f) z
707751
```
708752

753+
```agda
754+
module _
755+
{l1 l2 : Level}
756+
(C : Precategory l1 l2)
757+
{x y : obj-Precategory C}
758+
(f : iso-Precategory C x y)
759+
(z : obj-Precategory C)
760+
where
761+
762+
precomp-iso-Precategory : iso-Precategory C y z → iso-Precategory C x z
763+
precomp-iso-Precategory g = comp-iso-Precategory C g f
764+
765+
is-equiv-precomp-iso-Precategory : is-equiv precomp-iso-Precategory
766+
is-equiv-precomp-iso-Precategory =
767+
is-equiv-subtype-is-equiv
768+
( is-prop-is-iso-Precategory C)
769+
( is-prop-is-iso-Precategory C)
770+
( precomp-hom-Precategory C (hom-iso-Precategory C f) z)
771+
( λ g is-iso-g →
772+
is-iso-comp-is-iso-Precategory C is-iso-g (is-iso-iso-Precategory C f))
773+
( is-equiv-precomp-hom-iso-Precategory C f z)
774+
( λ g →
775+
is-iso-left-factor-Precategory C (hom-iso-Precategory C f) g
776+
( is-iso-iso-Precategory C f))
777+
778+
equiv-precomp-iso-Precategory :
779+
iso-Precategory C y z ≃ iso-Precategory C x z
780+
equiv-precomp-iso-Precategory =
781+
( precomp-iso-Precategory , is-equiv-precomp-iso-Precategory)
782+
```
783+
709784
### A morphism `f` is an isomorphism if and only if postcomposition by `f` is an equivalence
710785

711786
**Proof:** If `f` is an isomorphism with inverse `f⁻¹`, then postcomposing with

src/category-theory/strongly-preunivalent-categories.lagda.md

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ open import foundation.1-types
1616
open import foundation.cartesian-product-types
1717
open import foundation.dependent-pair-types
1818
open import foundation.embeddings
19+
open import foundation.equality-dependent-pair-types
20+
open import foundation.equivalences
21+
open import foundation.fibers-of-maps
1922
open import foundation.functoriality-dependent-pair-types
2023
open import foundation.identity-types
2124
open import foundation.propositional-maps
@@ -80,8 +83,8 @@ module _
8083
is-preunivalent-Precategory 𝒞
8184
is-preunivalent-is-strongly-preunivalent-Precategory H x y =
8285
is-emb-is-prop-map
83-
( backward-implication-subuniverse-equality-duality
84-
( is-prop-Prop)
86+
( backward-implication-structured-equality-duality
87+
( is-prop-equiv')
8588
( H x)
8689
( x)
8790
( iso-eq-Precategory 𝒞 x)
@@ -367,6 +370,44 @@ module _
367370
( is-1-type-obj-Strongly-Preunivalent-Category 𝒞)
368371
```
369372

373+
## Preunivalent categories are strongly preunivalent
374+
375+
```agda
376+
is-strongly-preunivalent-is-preunivalent-Precategory :
377+
{l1 l2 : Level} (𝒞 : Precategory l1 l2) →
378+
is-preunivalent-Precategory 𝒞 → is-strongly-preunivalent-Precategory 𝒞
379+
is-strongly-preunivalent-is-preunivalent-Precategory 𝒞 pua x (y , α) (y' , α') =
380+
is-prop-equiv
381+
( equivalence-reasoning
382+
( (y , α) = (y' , α'))
383+
≃ Eq-Σ (y , α) (y' , α') by equiv-pair-eq-Σ (y , α) (y' , α')
384+
≃ fiber
385+
( iso-eq-Precategory 𝒞 y y')
386+
( comp-iso-Precategory 𝒞 α' (inv-iso-Precategory 𝒞 α))
387+
by
388+
equiv-tot
389+
( λ where
390+
refl →
391+
equivalence-reasoning
392+
(α = α')
393+
≃ ( comp-iso-Precategory 𝒞 α (inv-iso-Precategory 𝒞 α) =
394+
comp-iso-Precategory 𝒞 α' (inv-iso-Precategory 𝒞 α))
395+
by
396+
equiv-ap
397+
( equiv-precomp-iso-Precategory 𝒞 (inv-iso-Precategory 𝒞 α) y)
398+
( α)
399+
( α')
400+
≃ ( id-iso-Precategory 𝒞 =
401+
comp-iso-Precategory 𝒞 α' (inv-iso-Precategory 𝒞 α))
402+
by
403+
equiv-concat
404+
( inv (right-inverse-law-comp-iso-Precategory 𝒞 α))
405+
( comp-iso-Precategory 𝒞 α' (inv-iso-Precategory 𝒞 α))))
406+
( is-prop-map-is-emb
407+
( pua y y')
408+
( comp-iso-Precategory 𝒞 α' (inv-iso-Precategory 𝒞 α)))
409+
```
410+
370411
## See also
371412

372413
- [The strong preunivalence axiom](foundation.strong-preunivalence.md)

src/foundation-core/equality-dependent-pair-types.lagda.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ open import foundation-core.equivalences
1616
open import foundation-core.function-types
1717
open import foundation-core.homotopies
1818
open import foundation-core.identity-types
19+
open import foundation-core.retracts-of-types
1920
open import foundation-core.transport-along-identifications
2021
```
2122

@@ -112,10 +113,12 @@ module _
112113
( is-section-pair-eq-Σ s t)
113114
114115
equiv-pair-eq-Σ : (s t : Σ A B) → (s = t) ≃ Eq-Σ s t
115-
pr1 (equiv-pair-eq-Σ s t) = pair-eq-Σ
116-
pr2 (equiv-pair-eq-Σ s t) = is-equiv-pair-eq-Σ s t
116+
equiv-pair-eq-Σ s t = (pair-eq-Σ , is-equiv-pair-eq-Σ s t)
117117
118-
η-pair : (t : Σ A B) → (pair (pr1 t) (pr2 t)) = t
118+
retract-pair-eq-Σ : (s t : Σ A B) → (s = t) retract-of (Eq-Σ s t)
119+
retract-pair-eq-Σ s t = (pair-eq-Σ , eq-pair-Σ' , is-section-pair-eq-Σ s t)
120+
121+
η-pair : (t : Σ A B) → (pr1 t , pr2 t) = t
119122
η-pair t = refl
120123
```
121124

src/foundation-core/identity-types.lagda.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ module _
240240
241241
assoc :
242242
{x y z w : A} (p : x = y) (q : y = z) (r : z = w) →
243-
((p ∙ q) ∙ r)(p ∙ (q ∙ r))
243+
(p ∙ q) ∙ r = p ∙ (q ∙ r)
244244
assoc refl q r = refl
245245
```
246246

@@ -268,13 +268,13 @@ module _
268268
269269
double-assoc :
270270
{x y z w v : A} (p : x = y) (q : y = z) (r : z = w) (s : w = v) →
271-
(((p ∙ q) ∙ r) ∙ s) = p ∙ (q ∙ (r ∙ s))
271+
((p ∙ q) ∙ r) ∙ s = p ∙ (q ∙ (r ∙ s))
272272
double-assoc refl q r s = assoc q r s
273273
274274
triple-assoc :
275275
{x y z w v u : A}
276276
(p : x = y) (q : y = z) (r : z = w) (s : w = v) (t : v = u) →
277-
((((p ∙ q) ∙ r) ∙ s) ∙ t) = p ∙ (q ∙ (r ∙ (s ∙ t)))
277+
(((p ∙ q) ∙ r) ∙ s) ∙ t = p ∙ (q ∙ (r ∙ (s ∙ t)))
278278
triple-assoc refl q r s t = double-assoc q r s t
279279
```
280280

@@ -298,7 +298,7 @@ module _
298298
left-inv : {x y : A} (p : x = y) → inv p ∙ p = refl
299299
left-inv refl = refl
300300
301-
right-inv : {x y : A} (p : x = y) → p ∙ (inv p) = refl
301+
right-inv : {x y : A} (p : x = y) → p ∙ inv p = refl
302302
right-inv refl = refl
303303
```
304304

@@ -355,11 +355,11 @@ module _
355355
where
356356
357357
is-retraction-inv-concat :
358-
{x y z : A} (p : x = y) (q : y = z) → (inv p ∙ (p ∙ q)) = q
358+
{x y z : A} (p : x = y) (q : y = z) → inv p ∙ (p ∙ q) = q
359359
is-retraction-inv-concat refl q = refl
360360
361361
is-section-inv-concat :
362-
{x y z : A} (p : x = y) (r : x = z) → (p ∙ (inv p ∙ r)) = r
362+
{x y z : A} (p : x = y) (r : x = z) → p ∙ (inv p ∙ r) = r
363363
is-section-inv-concat refl r = refl
364364
365365
is-retraction-inv-concat' :

src/foundation-core/retracts-of-types.lagda.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,37 @@ module _
203203
( retraction-retract r')
204204
```
205205

206+
## Retract reasoning
207+
208+
Retracts can be constructed by equational reasoning in the following way:
209+
210+
```text
211+
retract-reasoning
212+
X retract-of Y by retract-1
213+
retract-of Z by retract-2
214+
retract-of V by retract-3
215+
```
216+
217+
The retract constructed in this way is
218+
`comp-retract retract-3 (comp-retract retract-2 retract-1)`, i.e., the retract
219+
is associated fully to the right.
220+
221+
```agda
222+
infixl 1 retract-reasoning_
223+
infixl 0 step-retract-reasoning
224+
225+
retract-reasoning_ :
226+
{l1 : Level} (X : UU l1) → X retract-of X
227+
retract-reasoning X = id-retract
228+
229+
step-retract-reasoning :
230+
{l1 l2 l3 : Level} {X : UU l1} {Y : UU l2} →
231+
(X retract-of Y) → (Z : UU l3) → (Y retract-of Z) → (X retract-of Z)
232+
step-retract-reasoning e Z f = comp-retract f e
233+
234+
syntax step-retract-reasoning e Z f = e retract-of Z by f
235+
```
236+
206237
## See also
207238

208239
- [Retracts of maps](foundation.retracts-of-maps.md)

0 commit comments

Comments
 (0)