Skip to content

Commit

Permalink
Path-cosplit maps (#1153)
Browse files Browse the repository at this point in the history
A (mere) `k`-path-cosplit map is defined inductively
- A (mere) `-2`-path-cosplit map is a map that is (merely) a retract
- A (mere) `k+1`-path-cosplit map is a map whose action on
identifications is (merely) `k`-path-cosplit.

We show
- Mere `k`-path-cosplitting is a property
- `k`-truncated maps are `k`-path-cosplit
- (merely) `k`-path-cosplit maps are (merely) `k+1`-path-cosplit
- types that map into `k`-truncated types via (mere) `k`-path-cosplit
maps are `k`-truncated
- (mere) `k`-path-cosplit maps into `k`-truncated types are
`k`-truncated.
  • Loading branch information
fredrik-bakke committed Jun 5, 2024
1 parent dafc57a commit 270c39f
Show file tree
Hide file tree
Showing 8 changed files with 370 additions and 17 deletions.
40 changes: 25 additions & 15 deletions src/foundation-core/contractible-maps.lagda.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ open import foundation-core.fibers-of-maps
open import foundation-core.function-types
open import foundation-core.homotopies
open import foundation-core.identity-types
open import foundation-core.retractions
open import foundation-core.sections
```

</details>
Expand Down Expand Up @@ -48,35 +50,43 @@ module _

```agda
module _
{l1 l2 : Level} {A : UU l1} {B : UU l2} {f : A β†’ B}
{l1 l2 : Level} {A : UU l1} {B : UU l2} {f : A β†’ B} (H : is-contr-map f)
where

map-inv-is-contr-map : is-contr-map f β†’ B β†’ A
map-inv-is-contr-map H y = pr1 (center (H y))
map-inv-is-contr-map : B β†’ A
map-inv-is-contr-map y = pr1 (center (H y))

is-section-map-inv-is-contr-map :
(H : is-contr-map f) β†’ (f ∘ (map-inv-is-contr-map H)) ~ id
is-section-map-inv-is-contr-map H y = pr2 (center (H y))
is-section f map-inv-is-contr-map
is-section-map-inv-is-contr-map y = pr2 (center (H y))

is-retraction-map-inv-is-contr-map :
(H : is-contr-map f) β†’ ((map-inv-is-contr-map H) ∘ f) ~ id
is-retraction-map-inv-is-contr-map H x =
is-retraction f map-inv-is-contr-map
is-retraction-map-inv-is-contr-map x =
ap
( pr1 {B = Ξ» z β†’ (f z) = (f x)})
( pr1 {B = Ξ» z β†’ (f z = f x)})
( ( inv
( contraction
( H (f x))
( ( map-inv-is-contr-map H (f x)) ,
( is-section-map-inv-is-contr-map H (f x))))) βˆ™
( ( map-inv-is-contr-map (f x)) ,
( is-section-map-inv-is-contr-map (f x))))) βˆ™
( contraction (H (f x)) (x , refl)))

section-is-contr-map : section f
section-is-contr-map =
( map-inv-is-contr-map , is-section-map-inv-is-contr-map)

retraction-is-contr-map : retraction f
retraction-is-contr-map =
( map-inv-is-contr-map , is-retraction-map-inv-is-contr-map)

abstract
is-equiv-is-contr-map : is-contr-map f β†’ is-equiv f
is-equiv-is-contr-map H =
is-equiv-is-contr-map : is-equiv f
is-equiv-is-contr-map =
is-equiv-is-invertible
( map-inv-is-contr-map H)
( is-section-map-inv-is-contr-map H)
( is-retraction-map-inv-is-contr-map H)
( map-inv-is-contr-map)
( is-section-map-inv-is-contr-map)
( is-retraction-map-inv-is-contr-map)
```

### Any coherently invertible map is a contractible map
Expand Down
5 changes: 5 additions & 0 deletions src/foundation-core/injective-maps.lagda.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,3 +153,8 @@ is-injective-is-contr :
is-contr A β†’ is-injective f
is-injective-is-contr f H p = eq-is-contr H
```

## See also

- [Embeddings](foundation-core.embeddings.md)
- [Path-cosplit maps](foundation.path-cosplit-maps.md)
2 changes: 2 additions & 0 deletions src/foundation.lagda.md
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,7 @@ open import foundation.mere-equality public
open import foundation.mere-equivalences public
open import foundation.mere-functions public
open import foundation.mere-logical-equivalences public
open import foundation.mere-path-cosplit-maps public
open import foundation.monomorphisms public
open import foundation.morphisms-arrows public
open import foundation.morphisms-binary-relations public
Expand Down Expand Up @@ -287,6 +288,7 @@ open import foundation.partial-functions public
open import foundation.partial-sequences public
open import foundation.partitions public
open import foundation.path-algebra public
open import foundation.path-cosplit-maps public
open import foundation.path-split-maps public
open import foundation.perfect-images public
open import foundation.permutations-spans-families-of-types public
Expand Down
2 changes: 1 addition & 1 deletion src/foundation/inhabited-types.lagda.md
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ pr2 (Ξ£-Inhabited-Type X Y) =
```agda
map-is-inhabited :
{l1 l2 : Level} {A : UU l1} {B : UU l2} β†’
(f : (A β†’ B)) β†’ is-inhabited A β†’ is-inhabited B
(f : A β†’ B) β†’ is-inhabited A β†’ is-inhabited B
map-is-inhabited f = map-trunc-Prop f
```

Expand Down
5 changes: 5 additions & 0 deletions src/foundation/injective-maps.lagda.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,3 +104,8 @@ module _
pr1 (is-injective-Prop H f) = is-injective f
pr2 (is-injective-Prop H f) = is-prop-is-injective H f
```

## See also

- [Embeddings](foundation-core.embeddings.md)
- [Path-cosplit maps](foundation.path-cosplit-maps.md)
171 changes: 171 additions & 0 deletions src/foundation/mere-path-cosplit-maps.lagda.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
# Mere path-cosplit maps

```agda
module foundation.mere-path-cosplit-maps where
```

<details><summary>Imports</summary>

```agda
open import foundation.action-on-identifications-functions
open import foundation.dependent-pair-types
open import foundation.inhabited-types
open import foundation.iterated-dependent-product-types
open import foundation.logical-equivalences
open import foundation.propositional-truncations
open import foundation.truncated-maps
open import foundation.truncation-levels
open import foundation.universe-levels

open import foundation-core.contractible-maps
open import foundation-core.contractible-types
open import foundation-core.equivalences
open import foundation-core.propositions
open import foundation-core.retractions
open import foundation-core.truncated-types
```

</details>

## Idea

In Homotopy Type Theory, there are multiple nonequivalent ways to state that a
map is "injective" that are more or less informed by the homotopy structures of
its domain and codomain. A
{{#concept "mere path-cosplit map" Disambiguation="between types" Agda=is-mere-path-cosplit}}
is one such notion, lying somewhere between
[embeddings](foundation-core.embeddings.md) and
[injective maps](foundation-core.injective-maps.md). In fact, given an integer
`k β‰₯ -2`, if we understand `k`-injective map to mean the `k+2`-dimensional
[action on identifications](foundation.action-on-higher-identifications-functions.md)
has a converse map, then we have proper inclusions

```text
k-injective maps βŠƒ k-path-cosplit maps βŠƒ k-truncated maps.
```

While `k`-truncatedness answers the question:

> At which dimension is the action on higher identifications of a function
> always an [equivalence](foundation-core.equivalences.md)?

Mere `k`-path-cosplitting instead answers the question:

> At which dimension is the action merely a
> [retract](foundation-core.retracts-of-types.md)?

Thus a _merely `-2`-path-cosplit map_ is a map that merely is a retract. A
_merely `k+1`-path-cosplit map_ is a map whose
[action on identifications](foundation.action-on-identifications-functions.md)
is merely `k`-path-cosplit.

We show that mere `k`-path-cosplittness coincides with `k`-truncatedness when
the codomain is `k`-truncated, but more generally mere `k`-path-cosplitting may
only induce mere retracts on higher homotopy groups.

## Definitions

```agda
is-mere-path-cosplit :
{l1 l2 : Level} (k : 𝕋) {A : UU l1} {B : UU l2} β†’ (A β†’ B) β†’ UU (l1 βŠ” l2)
is-mere-path-cosplit neg-two-𝕋 f = is-inhabited (retraction f)
is-mere-path-cosplit (succ-𝕋 k) {A} f =
(x y : A) β†’ is-mere-path-cosplit k (ap f {x} {y})
```

## Properties

### Being merely path-cosplit is a property

```agda
is-prop-is-mere-path-cosplit :
{l1 l2 : Level} (k : 𝕋) {A : UU l1} {B : UU l2} (f : A β†’ B) β†’
is-prop (is-mere-path-cosplit k f)
is-prop-is-mere-path-cosplit neg-two-𝕋 f =
is-property-is-inhabited (retraction f)
is-prop-is-mere-path-cosplit (succ-𝕋 k) f =
is-prop-Ξ  (Ξ» x β†’ is-prop-Ξ  Ξ» y β†’ is-prop-is-mere-path-cosplit k (ap f))

is-mere-path-cosplit-Prop :
{l1 l2 : Level} (k : 𝕋) {A : UU l1} {B : UU l2} β†’ (A β†’ B) β†’ Prop (l1 βŠ” l2)
is-mere-path-cosplit-Prop k f =
(is-mere-path-cosplit k f , is-prop-is-mere-path-cosplit k f)
```

### If a map is `k`-truncated then it is merely `k`-path-cosplit

```agda
is-mere-path-cosplit-is-trunc :
{l1 l2 : Level} (k : 𝕋) {A : UU l1} {B : UU l2} {f : A β†’ B} β†’
is-trunc-map k f β†’ is-mere-path-cosplit k f
is-mere-path-cosplit-is-trunc neg-two-𝕋 is-trunc-f =
unit-trunc-Prop (retraction-is-contr-map is-trunc-f)
is-mere-path-cosplit-is-trunc (succ-𝕋 k) {f = f} is-trunc-f x y =
is-mere-path-cosplit-is-trunc k
( is-trunc-map-ap-is-trunc-map k f is-trunc-f x y)
```

### If a map is `k`-path-cosplit then it is merely `k+1`-path-cosplit

```agda
is-mere-path-cosplit-succ-is-mere-path-cosplit :
{l1 l2 : Level} (k : 𝕋) {A : UU l1} {B : UU l2} {f : A β†’ B} β†’
is-mere-path-cosplit k f β†’ is-mere-path-cosplit (succ-𝕋 k) f
is-mere-path-cosplit-succ-is-mere-path-cosplit
neg-two-𝕋 {f = f} is-cosplit-f x y =
rec-trunc-Prop
( is-mere-path-cosplit-Prop neg-two-𝕋 (ap f))
( Ξ» r β†’ unit-trunc-Prop (retraction-ap f r))
( is-cosplit-f)
is-mere-path-cosplit-succ-is-mere-path-cosplit (succ-𝕋 k) is-cosplit-f x y =
is-mere-path-cosplit-succ-is-mere-path-cosplit k (is-cosplit-f x y)
```

### If a type maps into a `k`-truncted type via a merely `k`-path-cosplit map then it is `k`-truncated

```agda
is-trunc-domain-is-mere-path-cosplit-is-trunc-codomain :
{l1 l2 : Level} (k : 𝕋) {A : UU l1} {B : UU l2} {f : A β†’ B} β†’
is-trunc k B β†’ is-mere-path-cosplit k f β†’ is-trunc k A
is-trunc-domain-is-mere-path-cosplit-is-trunc-codomain neg-two-𝕋
{A} {B} {f} is-trunc-B =
rec-trunc-Prop
( is-trunc-Prop neg-two-𝕋 A)
( Ξ» r β†’ is-trunc-retract-of (f , r) is-trunc-B)
is-trunc-domain-is-mere-path-cosplit-is-trunc-codomain
(succ-𝕋 k) {A} {B} {f} is-trunc-B is-cosplit-f x y =
is-trunc-domain-is-mere-path-cosplit-is-trunc-codomain k
( is-trunc-B (f x) (f y))
( is-cosplit-f x y)
```

This result generalizes the following statements:

- A type that injects into a set is a set.

- A type that embeds into a `k+1`-truncated type is `k+1`-truncated.

- A type that maps into a `k`-truncated type via a `k`-truncated map is
`k`-truncated.

### If the codomain of a mere `k`-path-cosplit map is `k`-truncated then the map is `k`-truncated

```agda
is-trunc-map-is-mere-path-cosplit-is-trunc-codomain :
{l1 l2 : Level} (k : 𝕋) {A : UU l1} {B : UU l2} {f : A β†’ B} β†’
is-trunc k B β†’ is-mere-path-cosplit k f β†’ is-trunc-map k f
is-trunc-map-is-mere-path-cosplit-is-trunc-codomain k is-trunc-B is-cosplit-f =
is-trunc-map-is-trunc-domain-codomain k
( is-trunc-domain-is-mere-path-cosplit-is-trunc-codomain k
( is-trunc-B)
( is-cosplit-f))
( is-trunc-B)
```

## See also

- [Path-cosplit maps](foundation.path-cosplit-maps.md)
- [Path-split maps](foundation.path-cosplit-maps.md)
- [Injective maps](foundation-core.injective-maps.md)
- [Truncated maps](foundation-core.truncated-maps.md)
- [Embeddings](foundation-core.embeddings.md)
Loading

0 comments on commit 270c39f

Please sign in to comment.