Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Quasiidempotence is not a proposition #1127

Merged
22 changes: 21 additions & 1 deletion src/foundation/constant-type-families.lagda.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@ module foundation.constant-type-families where
open import foundation.action-on-identifications-dependent-functions
open import foundation.action-on-identifications-functions
open import foundation.dependent-pair-types
open import foundation.identity-types
open import foundation.transport-along-identifications
open import foundation.universe-levels

open import foundation-core.commuting-squares-of-identifications
open import foundation-core.dependent-identifications
open import foundation-core.equivalences
open import foundation-core.identity-types
```

</details>
Expand Down Expand Up @@ -76,6 +76,26 @@ tr-constant-type-family :
tr-constant-type-family refl b = refl
```

### Computing dependent identifications in constant type families

```agda
module _
{l1 l2 : Level} {A : UU l1} {B : UU l2}
where

map-compute-dependent-identification-constant-type-family :
{x y : A} (p : x = y) {x' y' : B} →
x' = y' → dependent-identification (λ _ → B) p x' y'
map-compute-dependent-identification-constant-type-family p {x'} q =
tr-constant-type-family p x' ∙ q

compute-dependent-identification-constant-type-family :
{x y : A} (p : x = y) {x' y' : B} →
(x' = y') ≃ dependent-identification (λ _ → B) p x' y'
compute-dependent-identification-constant-type-family p {x'} {y'} =
equiv-concat (tr-constant-type-family p x') y'
```

### Dependent action on paths of sections of standard constant type families

```agda
Expand Down
33 changes: 29 additions & 4 deletions src/foundation/dependent-identifications.lagda.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@ open import foundation-core.dependent-identifications public
<details><summary>Imports</summary>

```agda
open import foundation.action-on-identifications-dependent-functions
open import foundation.action-on-identifications-functions
open import foundation.dependent-pair-types
open import foundation.strictly-right-unital-concatenation-identifications
open import foundation.transport-along-higher-identifications
open import foundation.universe-levels

Expand All @@ -26,7 +28,7 @@ open import foundation-core.transport-along-identifications
## Idea

We characterize dependent paths in the family of depedent paths; define the
groupoidal operators on dependent paths; define the cohrences paths: prove the
groupoidal operators on dependent paths; define the coherence paths; prove the
operators are equivalences.

## Properites
Expand Down Expand Up @@ -120,12 +122,35 @@ module _
dependent-identification B (p ∙ q) x' z'
concat-dependent-identification refl q refl q' = q'

compute-concat-dependent-identification-refl :
compute-concat-dependent-identification-left-base-refl :
{ y z : A} (q : y = z) →
{ x' y' : B y} {z' : B z} (p' : x' = y') →
( q' : dependent-identification B q y' z') →
( concat-dependent-identification refl q p' q') = ap (tr B q) p' ∙ q'
compute-concat-dependent-identification-refl refl refl q' = refl
concat-dependent-identification refl q p' q' = ap (tr B q) p' ∙ q'
compute-concat-dependent-identification-left-base-refl q refl q' = refl
```

#### Strictly right unital concatenation of dependent identifications

```agda
module _
{l1 l2 : Level} {A : UU l1} (B : A → UU l2)
where

right-strict-concat-dependent-identification :
{x y z : A} (p : x = y) (q : y = z) {x' : B x} {y' : B y} {z' : B z} →
dependent-identification B p x' y' →
dependent-identification B q y' z' →
dependent-identification B (p ∙ᵣ q) x' z'
right-strict-concat-dependent-identification p refl p' q' = p' ∙ᵣ q'

compute-right-strict-concat-dependent-identification-right-base-refl :
{ x y : A} (p : x = y) →
{ x' : B x} {y' z' : B y} (p' : dependent-identification B p x' y') →
( q' : y' = z') →
right-strict-concat-dependent-identification p refl p' q' = p' ∙ᵣ q'
compute-right-strict-concat-dependent-identification-right-base-refl q p' q' =
refl
```

#### Inverses of dependent identifications
Expand Down
105 changes: 72 additions & 33 deletions src/foundation/quasicoherently-idempotent-maps.lagda.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,15 @@ module foundation.quasicoherently-idempotent-maps where

```agda
open import foundation.1-types
open import foundation.action-on-identifications-functions
open import foundation.dependent-pair-types
open import foundation.equality-dependent-pair-types
open import foundation.homotopy-algebra
open import foundation.idempotent-maps
open import foundation.identity-types
open import foundation.negated-equality
open import foundation.negation
open import foundation.transport-along-identifications
open import foundation.universe-levels
open import foundation.whiskering-higher-homotopies-composition
open import foundation.whiskering-homotopies-composition
Expand All @@ -24,6 +28,7 @@ open import foundation-core.retractions
open import foundation-core.sets

open import synthetic-homotopy-theory.circle
open import synthetic-homotopy-theory.loop-homotopy-circle
```

</details>
Expand Down Expand Up @@ -54,13 +59,13 @@ corresponds to the definition of a _quasiidempotent map_ in {{#cite Shu17}} and
### The structure of quasicoherent idempotence on maps

```agda
coherence-is-quasicoherently-idempotent :
quasicoherence-is-idempotent :
{l : Level} {A : UU l} (f : A → A) → f ∘ f ~ f → UU l
coherence-is-quasicoherently-idempotent f I = f ·l I ~ I ·r f
quasicoherence-is-idempotent f I = f ·l I ~ I ·r f

is-quasicoherently-idempotent : {l : Level} {A : UU l} → (A → A) → UU l
is-quasicoherently-idempotent f =
Σ (f ∘ f ~ f) (coherence-is-quasicoherently-idempotent f)
Σ (f ∘ f ~ f) (quasicoherence-is-idempotent f)

module _
{l : Level} {A : UU l} {f : A → A} (H : is-quasicoherently-idempotent f)
Expand All @@ -70,7 +75,7 @@ module _
is-idempotent-is-quasicoherently-idempotent = pr1 H

coh-is-quasicoherently-idempotent :
coherence-is-quasicoherently-idempotent f
quasicoherence-is-idempotent f
( is-idempotent-is-quasicoherently-idempotent)
coh-is-quasicoherently-idempotent = pr2 H
```
Expand Down Expand Up @@ -99,7 +104,7 @@ module _
( is-quasicoherently-idempotent-quasicoherently-idempotent-map)

coh-quasicoherently-idempotent-map :
coherence-is-quasicoherently-idempotent
quasicoherence-is-idempotent
( map-quasicoherently-idempotent-map)
( is-idempotent-quasicoherently-idempotent-map)
coh-quasicoherently-idempotent-map =
Expand All @@ -114,16 +119,44 @@ module _

## Properties

### The identity function is quasicoherently idempotent

In fact, any idempotence witness of the identity function is quasicoherent.

```agda
module _
{l : Level} {A : UU l} (H : is-idempotent (id {A = A}))
where

quasicoherence-is-idempotent-id :
quasicoherence-is-idempotent id H
quasicoherence-is-idempotent-id = left-unit-law-left-whisker-comp H

is-quasicoherently-idempotent-is-idempotent-id :
is-quasicoherently-idempotent (id {A = A})
is-quasicoherently-idempotent-is-idempotent-id =
( H , quasicoherence-is-idempotent-id)

module _
{l : Level} {A : UU l}
where

is-quasicoherently-idempotent-id :
is-quasicoherently-idempotent (id {A = A})
is-quasicoherently-idempotent-id =
is-quasicoherently-idempotent-is-idempotent-id refl-htpy
```

### Being quasicoherently idempotent on a set is a property

```agda
module _
{l : Level} {A : UU l} (is-set-A : is-set A) (f : A → A)
where

is-prop-coherence-is-quasicoherently-idempotent-is-set :
(I : f ∘ f ~ f) → is-prop (coherence-is-quasicoherently-idempotent f I)
is-prop-coherence-is-quasicoherently-idempotent-is-set I =
is-prop-quasicoherence-is-idempotent-is-set :
(I : f ∘ f ~ f) → is-prop (quasicoherence-is-idempotent f I)
is-prop-quasicoherence-is-idempotent-is-set I =
is-prop-Π
( λ x →
is-set-is-prop
Expand All @@ -136,7 +169,7 @@ module _
is-prop-is-quasicoherently-idempotent-is-set =
is-prop-Σ
( is-prop-is-idempotent-is-set is-set-A f)
( is-prop-coherence-is-quasicoherently-idempotent-is-set)
( is-prop-quasicoherence-is-idempotent-is-set)

is-quasicoherently-idempotent-is-set-Prop : Prop l
is-quasicoherently-idempotent-is-set-Prop =
Expand Down Expand Up @@ -171,16 +204,22 @@ Two distinct witnesses that it is idempotent are given by `t ↦ refl` and
`t ↦ loop`. Both of these are quasicoherent, because

```text
coherence-is-quasicoherently-idempotent id I ≐ (id ·l I ~ I ·r id) ≃ (I ~ I).
quasicoherence-is-idempotent id I ≐ (id ·l I ~ I ·r id) ≃ (I ~ I).
```

To formalize this result, we first need that the loop of the circle is
nontrivial.

```text
is-not-prop-is-quasicoherently-idempotent-id-circle :
```agda
is-not-prop-is-quasicoherently-idempotent-id-𝕊¹ :
¬ (is-prop (is-quasicoherently-idempotent (id {A = 𝕊¹})))
is-not-prop-is-quasicoherently-idempotent-id-circle = ?
is-not-prop-is-quasicoherently-idempotent-id-𝕊¹ H =
nonequal-Π
( loop-htpy-𝕊¹)
( refl-htpy)
( base-𝕊¹)
( is-not-refl-ev-base-loop-htpy-𝕊¹)
( ap pr1
( eq-is-prop H
{ is-quasicoherently-idempotent-is-idempotent-id loop-htpy-𝕊¹}
{ is-quasicoherently-idempotent-is-idempotent-id refl-htpy}))
```

### Idempotent maps on sets are quasicoherently idempotent
Expand Down Expand Up @@ -208,11 +247,11 @@ module _
(i : B → A) (r : A → B) (H : is-retraction i r)
where

coherence-is-quasicoherently-idempotent-inclusion-retraction :
coherence-is-quasicoherently-idempotent
quasicoherence-is-idempotent-inclusion-retraction :
quasicoherence-is-idempotent
( i ∘ r)
( is-idempotent-inclusion-retraction i r H)
coherence-is-quasicoherently-idempotent-inclusion-retraction =
quasicoherence-is-idempotent-inclusion-retraction =
( inv-preserves-comp-left-whisker-comp i r (i ·l H ·r r)) ∙h
( double-whisker-comp²
( i)
Expand All @@ -223,7 +262,7 @@ module _
is-quasicoherently-idempotent (i ∘ r)
is-quasicoherently-idempotent-inclusion-retraction =
( is-idempotent-inclusion-retraction i r H ,
coherence-is-quasicoherently-idempotent-inclusion-retraction)
quasicoherence-is-idempotent-inclusion-retraction)
```

### Quasicoherent idempotence is preserved by homotopies
Expand All @@ -237,13 +276,13 @@ module _
where

abstract
coherence-is-quasicoherently-idempotent-htpy :
quasicoherence-is-idempotent-htpy :
(H : g ~ f) →
coherence-is-quasicoherently-idempotent g
quasicoherence-is-idempotent g
( is-idempotent-htpy
( is-idempotent-is-quasicoherently-idempotent F)
( H))
coherence-is-quasicoherently-idempotent-htpy H =
quasicoherence-is-idempotent-htpy H =
homotopy-reasoning
( g ·l is-idempotent-htpy I H)
~ ( H ·r (g ∘ g)) ∙h
Expand Down Expand Up @@ -317,7 +356,7 @@ module _
( is-idempotent-is-quasicoherently-idempotent F)
( H)
pr2 (is-quasicoherently-idempotent-htpy H) =
coherence-is-quasicoherently-idempotent-htpy H
quasicoherence-is-idempotent-htpy H

is-quasicoherently-idempotent-inv-htpy :
f ~ g → is-quasicoherently-idempotent g
Expand All @@ -326,7 +365,7 @@ module _
( is-idempotent-is-quasicoherently-idempotent F)
( inv-htpy H)
pr2 (is-quasicoherently-idempotent-inv-htpy H) =
coherence-is-quasicoherently-idempotent-htpy (inv-htpy H)
quasicoherence-is-idempotent-htpy (inv-htpy H)
```

### Realigning the coherence of a quasicoherent idempotence proof
Expand All @@ -341,18 +380,18 @@ module _
(I : f ∘ f ~ f)
where

coherence-is-quasicoherently-idempotent-is-idempotent-htpy :
quasicoherence-is-idempotent-is-idempotent-htpy :
is-idempotent-is-quasicoherently-idempotent F ~ I →
coherence-is-quasicoherently-idempotent f I
coherence-is-quasicoherently-idempotent-is-idempotent-htpy α =
quasicoherence-is-idempotent f I
quasicoherence-is-idempotent-is-idempotent-htpy α =
( left-whisker-comp² f (inv-htpy α)) ∙h
( coh-is-quasicoherently-idempotent F) ∙h
( right-whisker-comp² α f)

coherence-is-quasicoherently-idempotent-is-idempotent-inv-htpy :
quasicoherence-is-idempotent-is-idempotent-inv-htpy :
I ~ is-idempotent-is-quasicoherently-idempotent F →
coherence-is-quasicoherently-idempotent f I
coherence-is-quasicoherently-idempotent-is-idempotent-inv-htpy α =
quasicoherence-is-idempotent f I
quasicoherence-is-idempotent-is-idempotent-inv-htpy α =
( left-whisker-comp² f α) ∙h
( coh-is-quasicoherently-idempotent F) ∙h
( right-whisker-comp² (inv-htpy α) f)
Expand All @@ -361,13 +400,13 @@ module _
is-idempotent-is-quasicoherently-idempotent F ~ I →
is-quasicoherently-idempotent f
is-quasicoherently-idempotent-is-idempotent-htpy α =
( I , coherence-is-quasicoherently-idempotent-is-idempotent-htpy α)
( I , quasicoherence-is-idempotent-is-idempotent-htpy α)

is-quasicoherently-idempotent-is-idempotent-inv-htpy :
I ~ is-idempotent-is-quasicoherently-idempotent F →
is-quasicoherently-idempotent f
is-quasicoherently-idempotent-is-idempotent-inv-htpy α =
( I , coherence-is-quasicoherently-idempotent-is-idempotent-inv-htpy α)
( I , quasicoherence-is-idempotent-is-idempotent-inv-htpy α)
```

### Not every idempotent map is quasicoherently idempotent
Expand Down
10 changes: 5 additions & 5 deletions src/foundation/split-idempotent-maps.lagda.md
Original file line number Diff line number Diff line change
Expand Up @@ -525,11 +525,11 @@ module _
where

abstract
coherence-is-quasicoherently-idempotent-is-split-idempotent :
coherence-is-quasicoherently-idempotent f
quasicoherence-is-idempotent-is-split-idempotent :
quasicoherence-is-idempotent f
( is-idempotent-is-split-idempotent H)
coherence-is-quasicoherently-idempotent-is-split-idempotent =
coherence-is-quasicoherently-idempotent-is-idempotent-htpy
quasicoherence-is-idempotent-is-split-idempotent =
quasicoherence-is-idempotent-is-idempotent-htpy
( is-quasicoherently-idempotent-inv-htpy
( is-quasicoherently-idempotent-inclusion-retraction
( inclusion-is-split-idempotent H)
Expand All @@ -543,7 +543,7 @@ module _
is-quasicoherently-idempotent f
is-quasicoherently-idempotent-is-split-idempotent =
( is-idempotent-is-split-idempotent H ,
coherence-is-quasicoherently-idempotent-is-split-idempotent)
quasicoherence-is-idempotent-is-split-idempotent)

module _
{l1 l2 : Level} {A : UU l1} (H : split-idempotent-map l2 A)
Expand Down
1 change: 1 addition & 0 deletions src/synthetic-homotopy-theory.lagda.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ open import synthetic-homotopy-theory.iterated-suspensions-of-pointed-types publ
open import synthetic-homotopy-theory.join-powers-of-types public
open import synthetic-homotopy-theory.joins-of-maps public
open import synthetic-homotopy-theory.joins-of-types public
open import synthetic-homotopy-theory.loop-homotopy-circle public
open import synthetic-homotopy-theory.loop-spaces public
open import synthetic-homotopy-theory.maps-of-prespectra public
open import synthetic-homotopy-theory.mere-spheres public
Expand Down
Loading
Loading