Skip to content

Commit 7b6bb74

Browse files
TOTBWFplt-amy
andauthored
Facts about Adjoints (#439)
# Description The following PR proves a bunch of random facts about adjoints. The most notable results are: - A characterization of when a left/right adjoint is full or faithful - A characterization of when a right adjoint is conservative - All of Borceux 3.6 This requires a bit of machinery to set up: in particular, we need a bit of theory about strong monos. In light of this, I've factored out a lot of the proofs about strong epis into general results about orthogonal maps. I've also done a naming/API standardization pass on `StrongEpi`, and renamed it to `Strong.Epi` to make `Strong.Mono` a bit more well organized. There are also a bunch of misc. reasoning combinator additions, including `Cat.Natural.Reasoning`. ## Checklist Before submitting a merge request, please check the items below: - [x] I've read [the contributing guidelines](https://github.com/plt-amy/1lab/blob/main/CONTRIBUTING.md). - [x] The imports of new modules have been sorted with `support/sort-imports.hs` (or `nix run --experimental-features nix-command -f . sort-imports`). - [x] All new code blocks have "agda" as their language. If your change affects many files without adding substantial content, and you don't want your name to appear on those pages (for example, treewide refactorings or reformattings), start the commit message and PR title with `chore:`. --------- Co-authored-by: Amélia Liao <me@amelia.how>
1 parent cfe1171 commit 7b6bb74

29 files changed

+1854
-218
lines changed

src/Borceux.lagda.md

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ open import Algebra.Group.Free hiding (_◆_)
1111
open import Algebra.Group.Ab
1212
1313
open import Cat.Diagram.Coequaliser.RegularEpi
14+
open import Cat.Functor.Adjoint.Epireflective
1415
open import Cat.Functor.Adjoint.Representable
1516
open import Cat.Instances.Elements.Covariant renaming (∫ to ∫cov)
1617
open import Cat.Instances.StrictCat.Cohesive hiding (Disc)
@@ -58,14 +59,14 @@ open import Cat.Functor.Subcategory
5859
open import Cat.Instances.Delooping
5960
open import Cat.Instances.StrictCat
6061
open import Cat.Morphism.Orthogonal
62+
open import Cat.Morphism.Strong.Epi
6163
open import Cat.Bi.Instances.Spans
6264
open import Cat.Diagram.Idempotent
6365
open import Cat.Diagram.Limit.Base
6466
open import Cat.Diagram.Limit.Cone
6567
open import Cat.Functor.Hom.Yoneda
6668
open import Cat.Functor.Properties
6769
open import Cat.Instances.Discrete
68-
open import Cat.Morphism.StrongEpi
6970
open import Cat.Diagram.Equaliser
7071
open import Cat.Diagram.Separator
7172
open import Cat.Instances.Functor
@@ -382,7 +383,7 @@ _ = has-section+monic→invertible
382383

383384
## 2 Limits
384385

385-
## 2.1 Products
386+
### 2.1 Products
386387

387388
<!--
388389
```agda
@@ -405,7 +406,7 @@ _ = is-indexed-product-assoc
405406
* Proposition 2.1.5: `Indexed-product-unique`{.Agda}
406407
* Proposition 2.1.6: `is-indexed-product-assoc`{.Agda}
407408

408-
## 2.2 Coproducts
409+
### 2.2 Coproducts
409410

410411
<!--
411412
```agda
@@ -419,7 +420,7 @@ _ = is-indexed-coproduct-assoc
419420
* Proposition 2.2.2: `is-indexed-coproduct→iso`{.Agda}
420421
* Proposition 2.2.3: `is-indexed-coproduct-assoc`{.Agda}
421422

422-
## 2.3 Initial and terminal objects
423+
### 2.3 Initial and terminal objects
423424

424425
<!--
425426
```agda
@@ -438,7 +439,7 @@ _ = Zero-group-is-zero
438439
* a. `Sets-initial`{.Agda}, `Sets-terminal`{.Agda}
439440
* b. 🚧 `Zero-group-is-zero`{.Agda}
440441

441-
## 2.4 Equalizers, coequalizers
442+
### 2.4 Equalizers, coequalizers
442443

443444
<!--
444445
```agda
@@ -456,7 +457,7 @@ _ = equaliser+epi→invertible
456457
* Proposition 2.4.4: `id-is-equaliser`{.Agda}
457458
* Proposition 2.4.5: `equaliser+epi→invertible`{.Agda}
458459

459-
## 2.5 Pullbacks, pushouts
460+
### 2.5 Pullbacks, pushouts
460461

461462
<!--
462463
```agda
@@ -709,6 +710,26 @@ _ = is-reflective
709710

710711
### 3.6 Epireflective subcategories
711712

713+
<!--
714+
```agda
715+
_ = is-epireflective
716+
_ = epireflective+strong-mono→unit-invertible
717+
_ = factor+strong-mono-unit-invertible→epireflective
718+
_ = is-strong-epireflective
719+
_ = strong-epireflective+mono→unit-invertible
720+
_ = factor+mono-unit-invertible→strong-epireflective
721+
```
722+
-->
723+
724+
* Definition 3.6.1: `is-epireflective`{.Agda}
725+
* Proposition 3.6.2:
726+
* (1 ⇒ 2): `epireflective+strong-mono→unit-invertible`{.Agda}
727+
* (2 ⇒ 1): `factor+strong-mono-unit-invertible→epireflective`{.Agda}
728+
* Definition 3.6.2: `is-strong-epireflective`{.Agda}
729+
* Proposition 3.6.4:
730+
* (1 ⇒ 2): `strong-epireflective+mono→unit-invertible`{.Agda}
731+
* (2 ⇒ 1): `factor+mono-unit-invertible→strong-epireflective`{.Agda}
732+
712733
### 3.7 Kan extensions
713734

714735
<!--
@@ -765,9 +786,9 @@ _ = Karoubi-is-completion
765786
```agda
766787
_ = is-regular-epi
767788
_ = is-strong-epi
768-
_ = strong-epi-compose
769-
_ = strong-epi-cancell
770-
_ = strong-epi+mono→is-invertible
789+
_ = strong-epi-
790+
_ = strong-epi-cancelr
791+
_ = strong-epi+mono→invertible
771792
_ = is-regular-epi→is-strong-epi
772793
_ = is-strong-epi→is-extremal-epi
773794
_ = equaliser-lifts→is-strong-epi
@@ -778,9 +799,9 @@ _ = is-extremal-epi→is-strong-epi
778799
* Definition 4.3.1: `is-regular-epi`{.Agda}
779800
* Definition 4.3.5: `is-strong-epi`{.Agda}
780801
* Proposition 4.3.6:
781-
* 1. `strong-epi-compose`{.Agda}
782-
* 2. `strong-epi-cancel-l`{.Agda}
783-
* 3. `strong-epi-mono→is-invertible`{.Agda}
802+
* 1. `strong-epi-`{.Agda}
803+
* 2. `strong-epi-cancelr`{.Agda}
804+
* 3. `strong-epi-mono→invertible`{.Agda}
784805
* 4. `is-regular-epi→is-strong-epi`{.Agda}
785806
* 5. `is-strong-epi→is-extremal-epi`{.Agda}
786807
* Proposition 4.3.7:

src/Cat/Bi/Instances/Relations.lagda.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
{-# OPTIONS --lossy-unification #-}
44
open import Cat.Diagram.Pullback.Properties
55
open import Cat.Morphism.Factorisation
6-
open import Cat.Morphism.StrongEpi
6+
open import Cat.Morphism.Strong.Epi
77
open import Cat.Instances.Functor
88
open import Cat.Instances.Product
99
open import Cat.Diagram.Pullback
@@ -168,7 +168,7 @@ point of view informed by parametricity, one might argue that this is
168168
not only the correct move, but the _only possible_ way of turning a map
169169
into a subobject.]
170170
171-
[strong epimorphism]: Cat.Morphism.StrongEpi.html
171+
[strong epimorphism]: Cat.Morphism.Strong.Epi.html
172172
173173
```agda
174174
it : Hom (inter .apex) (a ⊗₀ c)

src/Cat/Diagram/Projective/Strong.lagda.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ open import Data.Set.Surjection
1616
open import Data.Dec
1717
1818
import Cat.Diagram.Separator.Strong
19+
import Cat.Morphism.Strong.Epi
1920
import Cat.Diagram.Projective
20-
import Cat.Morphism.StrongEpi
2121
import Cat.Reasoning
2222
```
2323
-->
@@ -31,7 +31,7 @@ module Cat.Diagram.Projective.Strong
3131
<!--
3232
```agda
3333
open Cat.Diagram.Projective C
34-
open Cat.Morphism.StrongEpi C
34+
open Cat.Morphism.Strong.Epi C
3535
open Cat.Reasoning C
3636
```
3737
-->

src/Cat/Diagram/Separator.lagda.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ open import Cat.Prelude
2727
2828
open import Data.Dec.Base
2929
30-
import Cat.Morphism.StrongEpi
30+
import Cat.Morphism.Strong.Epi
3131
import Cat.Reasoning
3232
```
3333
-->
@@ -38,7 +38,7 @@ module Cat.Diagram.Separator {o ℓ} (C : Precategory o ℓ) where
3838

3939
<!--
4040
```agda
41-
open Cat.Morphism.StrongEpi C
41+
open Cat.Morphism.Strong.Epi C
4242
open Cat.Reasoning C
4343
open _=>_
4444
```

src/Cat/Diagram/Separator/Regular.lagda.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ open import Cat.Diagram.Coequaliser
1111
open import Cat.Prelude
1212
1313
import Cat.Diagram.Separator.Strong
14-
import Cat.Morphism.StrongEpi
14+
import Cat.Morphism.Strong.Epi
1515
import Cat.Diagram.Separator
1616
import Cat.Reasoning
1717
```
@@ -26,7 +26,7 @@ module Cat.Diagram.Separator.Regular
2626

2727
<!--
2828
```agda
29-
open Cat.Morphism.StrongEpi C
29+
open Cat.Morphism.Strong.Epi C
3030
open Cat.Diagram.Separator.Strong C coprods
3131
open Cat.Diagram.Separator C
3232
open Cat.Reasoning C

src/Cat/Diagram/Separator/Strong.lagda.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ open import Cat.Functor.Joint
1414
open import Cat.Functor.Hom
1515
open import Cat.Prelude
1616
17-
import Cat.Morphism.StrongEpi
17+
import Cat.Morphism.Strong.Epi
1818
import Cat.Diagram.Separator
1919
import Cat.Reasoning
2020
```
@@ -29,7 +29,7 @@ module Cat.Diagram.Separator.Strong
2929

3030
<!--
3131
```agda
32-
open Cat.Morphism.StrongEpi C
32+
open Cat.Morphism.Strong.Epi C
3333
open Cat.Diagram.Separator C
3434
open Cat.Reasoning C
3535
open Copowers coprods
@@ -192,9 +192,9 @@ by showing that it is both a strong epi and a monomorphism.
192192

193193
```agda
194194
strong-separator→conservative {s = s} strong {A = a} {B = b} {f = f} f∘-inv =
195-
strong-epi+mono→is-invertible
196-
f-mono
195+
strong-epi+mono→invertible
197196
f-strong-epi
197+
f-mono
198198
where
199199
module f∘- = Equiv (f ∘_ , is-invertible→is-equiv f∘-inv)
200200
```
@@ -238,7 +238,7 @@ immediately see that $f$ is a strong epi.
238238
```agda
239239
f-strong-epi : is-strong-epi f
240240
f-strong-epi =
241-
strong-epi-cancell f f* $
241+
strong-epi-cancelr f f* $
242242
subst is-strong-epi (sym f*-factors) strong
243243
```
244244

@@ -302,9 +302,9 @@ so we omit the details.
302302
</summary>
303303
```agda
304304
strong-separating-family→jointly-conservative Idx sᵢ strong {x = a} {y = b} {f = f} f∘ᵢ-inv =
305-
strong-epi+mono→is-invertible
306-
f-mono
305+
strong-epi+mono→invertible
307306
f-strong-epi
307+
f-mono
308308
where
309309
module f∘- {i : ∣ Idx ∣} = Equiv (_ , is-invertible→is-equiv (f∘ᵢ-inv i))
310310
@@ -325,7 +325,7 @@ strong-separating-family→jointly-conservative Idx sᵢ strong {x = a} {y = b}
325325
326326
f-strong-epi : is-strong-epi f
327327
f-strong-epi =
328-
strong-epi-cancell f f* $
328+
strong-epi-cancelr f f* $
329329
subst is-strong-epi (sym f*-factors) strong
330330
331331
jointly-conservative→extremal-separating-family Idx sᵢ lex f∘-conservative m f p =

src/Cat/Functor/Adjoint.lagda.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ open import Cat.Functor.Base
1515
open import Cat.Prelude
1616
1717
import Cat.Functor.Reasoning as Func
18+
import Cat.Natural.Reasoning
1819
import Cat.Reasoning
1920
```
2021
-->
@@ -78,8 +79,8 @@ record _⊣_ (L : Functor C D) (R : Functor D C) : Type (adj-level C D) where
7879
unit : Id => (R F∘ L)
7980
counit : (L F∘ R) => Id
8081
81-
module unit = _=>_ unit
82-
module counit = _=>_ counit renaming (η to ε)
82+
module unit = Cat.Natural.Reasoning unit
83+
module counit = Cat.Natural.Reasoning counit renaming (η to ε)
8384
8485
open unit using (η) public
8586
open counit using (ε) public
@@ -165,7 +166,7 @@ module _
165166
```
166167
-->
167168

168-
## Adjuncts {defines=adjuncts}
169+
## Adjuncts {defines="adjunct left-adjunct right-adjunct"}
169170

170171
Another view on adjunctions, one which is productive when thinking about
171172
adjoint *endo*functors $L \dashv R$, is the concept of _adjuncts_. Any

0 commit comments

Comments
 (0)