Martin Escardo. 19th December 2020, June 2023.
General properties of W-types.
Notice that we don't assume any axioms from univalent foundations
other than function extensionality, but that we formulate and prove
properties in univalent style.
\begin{code}
{-# OPTIONS --safe --without-K #-}
open import MLTT.Spartan
module W.Properties (X : 𝓤 ̇ ) (A : X → 𝓥 ̇ ) where
open import UF.Base
open import UF.Equiv
open import UF.EquivalenceExamples
open import UF.FunExt
open import UF.Retracts
open import UF.Sets
open import UF.Subsingletons
open import UF.Subsingletons-FunExt
open import W.Type
private
𝕎 = W X A
\end{code}
We first show that the identity type of 𝕎 is equivalent to _=ʷ_
defined as follows.
\begin{code}
_=ʷ_ : 𝕎 → 𝕎 → 𝓤 ⊔ 𝓥 ̇
ssup x f =ʷ ssup x' f' = Σ p ꞉ x = x' , ((a : A x) → f a =ʷ f' (transport A p a))
=ʷ-refl : (w : 𝕎) → w =ʷ w
=ʷ-refl (ssup x f) = refl , (λ a → =ʷ-refl (f a))
singleton-typeʷ : 𝕎 → 𝓤 ⊔ 𝓥 ̇
singleton-typeʷ w = Σ t ꞉ 𝕎 , w =ʷ t
W-center : (w : 𝕎) → singleton-typeʷ w
W-center w = w , =ʷ-refl w
W-centrality : Fun-Ext → (w : 𝕎) (σ : singleton-typeʷ w) → W-center w = σ
W-centrality fe w@(ssup x f) σ@(ssup x g , refl , u) = IV
where
have-u : (a : A x) → f a =ʷ g a
have-u = u
IH : (a : A x) → W-center (f a) = (g a , u a)
IH a = W-centrality fe (f a) (g a , u a)
I : (λ a → W-center (f a)) = (λ a → g a , u a)
I = dfunext fe IH
π : (Σ h ꞉ (A x → 𝕎) , ((a : A x) → f a =ʷ h a))
→ singleton-typeʷ (ssup x f)
π (h , v) = ssup x h , refl , v
II : (f , λ a → =ʷ-refl (f a)) =[ domain π ] (g , u)
II = ap ΠΣ-distr I
III : (ssup x f , refl , (λ a → =ʷ-refl (f a))) = (ssup x g , refl , u)
III = ap π II
IV = W-center w =⟨ refl ⟩
ssup x f , refl , (λ a → =ʷ-refl (f a)) =⟨ III ⟩
ssup x g , refl , u =⟨ refl ⟩
σ ∎
singleton-typesʷ-are-singletons : Fun-Ext
→ (w : 𝕎) → is-singleton (singleton-typeʷ w)
singleton-typesʷ-are-singletons fe w = W-center w , W-centrality fe w
\end{code}
From this it follows that the canonical map from the native notion of
𝕎-identity to the alternative notion of 𝕎-identity defined above is an
equivalence:
\begin{code}
idtoidʷ : (w t : 𝕎) → w = t → w =ʷ t
idtoidʷ w w refl = =ʷ-refl w
idtoidʷ-is-equiv : Fun-Ext → (w t : 𝕎) → is-equiv (idtoidʷ w t)
idtoidʷ-is-equiv fe w = I
where
f : singleton-type w → singleton-typeʷ w
f = NatΣ (idtoidʷ w)
f-is-equiv : is-equiv f
f-is-equiv = maps-of-singletons-are-equivs f
(singleton-types-are-singletons w)
(singleton-typesʷ-are-singletons fe w)
I : (t : 𝕎) → is-equiv (idtoidʷ w t)
I = NatΣ-equiv-gives-fiberwise-equiv (idtoidʷ w) f-is-equiv
idtoidʷ-≃ : Fun-Ext → (w t : 𝕎) → (w = t) ≃ (w =ʷ t)
idtoidʷ-≃ fe w t = idtoidʷ w t , idtoidʷ-is-equiv fe w t
\end{code}
We now describe ways to "construct" and "destruct" native 𝕎
identifications, which are mutually inverse and hence induce an
equivalence.
\begin{code}
to-W-= : {x : X} {φ : A x → 𝕎}
{x' : X} {φ' : A x' → 𝕎}
→ (Σ p ꞉ x = x' , (φ = φ' ∘ transport A p))
→ ssup x φ =[ 𝕎 ] ssup x' φ'
to-W-= {x} {φ} {x} {φ'} (refl , f) = ap (ssup x) f
from-W-= : {x : X} {φ : A x → 𝕎}
{x' : X} {φ' : A x' → 𝕎}
→ ssup x φ =[ 𝕎 ] ssup x' φ'
→ (Σ p ꞉ x = x' , (φ = φ' ∘ transport A p))
from-W-= refl = refl , refl
to-from-W-= : {x : X} {φ : A x → 𝕎}
{x' : X} {φ' : A x' → 𝕎}
→ (q : ssup x φ =[ 𝕎 ] ssup x' φ')
→ to-W-= (from-W-= q) = q
to-from-W-= refl = refl
from-to-W-= : {x : X} {φ : A x → 𝕎}
{x' : X} {φ' : A x' → 𝕎}
→ (σ : Σ p ꞉ x = x' , (φ = φ' ∘ transport A p))
→ from-W-= (to-W-= {x} {φ} {x'} {φ'} σ) = σ
from-to-W-= (refl , refl) = refl
W-= : {x : X} {φ : A x → 𝕎}
{x' : X} {φ' : A x' → 𝕎}
→ (ssup x φ =[ 𝕎 ] ssup x' φ')
≃ (Σ p ꞉ x = x' , (φ = φ' ∘ transport A p))
W-= {x} {φ} {x'} {φ'} = qinveq
from-W-=
(to-W-= ,
to-from-W-= ,
from-to-W-= {x} {φ} {x'} {φ'})
\end{code}
From this we conclude that if X is a proposition or a set, then 𝕎 is a
proposition or a set respectively:
\begin{code}
W-is-prop : funext 𝓥 (𝓤 ⊔ 𝓥)
→ is-prop X
→ is-prop 𝕎
W-is-prop fe X-is-prop (ssup x φ) (ssup x' φ') = γ
where
p : x = x'
p = X-is-prop x x'
IH : (a : A x) → φ a = φ' (transport A p a)
IH a = W-is-prop fe X-is-prop (φ a) (φ' (transport A p a))
γ : ssup x φ = ssup x' φ'
γ = to-W-= (p , dfunext fe IH)
W-is-set : funext 𝓥 (𝓤 ⊔ 𝓥)
→ is-set X
→ is-set 𝕎
W-is-set fe X-is-set {ssup x φ} {ssup x' φ'} = γ
where
S = Σ p ꞉ x = x' , (φ ∼ φ' ∘ transport A p)
IH : (p : x = x') (a : A x) → is-prop (φ a = φ' (transport A p a))
IH p a = W-is-set fe X-is-set {φ a} {φ' (transport A p a)}
α : is-prop S
α = Σ-is-prop X-is-set (λ p → Π-is-prop fe (IH p))
β : retract (ssup x φ = ssup x' φ') of S
β = (λ (p , h) → to-W-= (p , dfunext fe h)) ,
(λ p → pr₁ (from-W-= p) , happly (pr₂ (from-W-= p))) ,
h
where
h : (λ (p : ssup x (λ v → φ v) = ssup x' (λ v → φ' v))
→ to-W-= (pr₁ (from-W-= p) , dfunext fe (happly (pr₂ (from-W-= p)))))
∼ id
h refl = ap (ssup x) (dfunext fe (happly refl)) =⟨ I ⟩
ap (ssup x) refl =⟨ refl ⟩
refl ∎
where
I = ap (ap (ssup x)) (funext-happly fe φ φ refl)
γ : is-prop (ssup x φ = ssup x' φ')
γ = retract-of-prop β α
\end{code}
Notice that, in both cases, we didn't need to assume anything about
the family A to deduce the truncation level of the type 𝕎 = W X A.
Only the truncation level of X matters.