Martin Escardo, December 2020
A notion of disconnectedness. This is different from homotopy
disconnectedness in the sense of the HoTT book. It is based on the
topological, rather than homotopical, interpretation of types.
A discussion of such models is in
M.H. Escardo and Chuangjie Xu. A constructive manifestation of the
Kleene-Kreisel continuous functionals. Annals of Pure and Applied
Logic, 2016.
and
M.H. Escardo and Thomas Streicher. Annals of Pure and Applied Logic,
2016.
\begin{code}
{-# OPTIONS --safe --without-K #-}
module TypeTopology.DisconnectedTypes where
open import MLTT.Spartan
open import MLTT.Two-Properties
open import Naturals.Properties
open import UF.DiscreteAndSeparated
open import UF.Equiv
open import UF.Hedberg
open import UF.Retracts
\end{code}
The following notions of disconnectedness are data rather than
property.
\begin{code}
is-disconnected₀ : 𝓤 ̇ → 𝓤 ̇
is-disconnected₀ X = retract 𝟚 of X
is-disconnected₁ : 𝓤 ̇ → 𝓤 ̇
is-disconnected₁ X = Σ p ꞉ (X → 𝟚) , fiber p ₀ × fiber p ₁
is-disconnected₂ : 𝓤 ̇ → 𝓤 ⁺ ̇
is-disconnected₂ {𝓤} X = Σ X₀ ꞉ 𝓤 ̇ , Σ X₁ ꞉ 𝓤 ̇ , X₀ × X₁ × (X ≃ X₀ + X₁)
is-disconnected₃ : 𝓤 ̇ → 𝓤 ⁺ ̇
is-disconnected₃ {𝓤} X = Σ X₀ ꞉ 𝓤 ̇ , Σ X₁ ꞉ 𝓤 ̇ , X₀ × X₁ × (retract (X₀ + X₁) of X)
is-disconnected-eq : (X : 𝓤 ̇ )
→ (is-disconnected₀ X → is-disconnected₁ X)
× (is-disconnected₁ X → is-disconnected₂ X)
× (is-disconnected₂ X → is-disconnected₃ X)
× (is-disconnected₃ X → is-disconnected₀ X)
is-disconnected-eq {𝓤} X = (f , g , h , k)
where
f : (Σ p ꞉ (X → 𝟚) , Σ s ꞉ (𝟚 → X) , p ∘ s ∼ id)
→ Σ p ꞉ (X → 𝟚) , (Σ x ꞉ X , p x = ₀) × (Σ x ꞉ X , p x = ₁)
f (p , s , e) = p , (s ₀ , e ₀) , (s ₁ , e ₁)
g : (Σ p ꞉ (X → 𝟚) , (Σ x ꞉ X , p x = ₀) × (Σ x ꞉ X , p x = ₁))
→ Σ X₀ ꞉ 𝓤 ̇ , Σ X₁ ꞉ 𝓤 ̇ , X₀ × X₁ × (X ≃ X₀ + X₁)
g (p , (x₀ , e₀) , (x₁ , e₁)) = (Σ x ꞉ X , p x = ₀) ,
(Σ x ꞉ X , p x = ₁) ,
(x₀ , e₀) ,
(x₁ , e₁) ,
qinveq ϕ (γ , γϕ , ϕγ)
where
ϕ : X → (Σ x ꞉ X , p x = ₀) + (Σ x ꞉ X , p x = ₁)
ϕ x = 𝟚-equality-cases
(λ (r₀ : p x = ₀) → inl (x , r₀))
(λ (r₁ : p x = ₁) → inr (x , r₁))
γ : (Σ x ꞉ X , p x = ₀) + (Σ x ꞉ X , p x = ₁) → X
γ (inl (x , r₀)) = x
γ (inr (x , r₁)) = x
ϕγ : ϕ ∘ γ ∼ id
ϕγ (inl (x , r₀)) = 𝟚-equality-cases₀ r₀
ϕγ (inr (x , r₁)) = 𝟚-equality-cases₁ r₁
γϕ : γ ∘ ϕ ∼ id
γϕ x = 𝟚-equality-cases
(λ (r₀ : p x = ₀) → ap γ (𝟚-equality-cases₀ r₀))
(λ (r₁ : p x = ₁) → ap γ (𝟚-equality-cases₁ r₁))
h : (Σ X₀ ꞉ 𝓤 ̇ , Σ X₁ ꞉ 𝓤 ̇ , X₀ × X₁ × (X ≃ X₀ + X₁))
→ (Σ X₀ ꞉ 𝓤 ̇ , Σ X₁ ꞉ 𝓤 ̇ , X₀ × X₁ × (retract (X₀ + X₁) of X))
h (X₀ , X₁ , x₀ , x₁ , (γ , (ϕ , γϕ) , _)) = (X₀ , X₁ , x₀ , x₁ , (γ , ϕ , γϕ))
k : (Σ X₀ ꞉ 𝓤 ̇ , Σ X₁ ꞉ 𝓤 ̇ , X₀ × X₁ × (retract (X₀ + X₁) of X))
→ Σ p ꞉ (X → 𝟚) , Σ s ꞉ (𝟚 → X) , p ∘ s ∼ id
k (X₀ , X₁ , x₀ , x₁ , (γ , ϕ , γϕ)) = p , s , ps
where
p : X → 𝟚
p x = Cases (γ x) (λ _ → ₀) (λ _ → ₁)
s : 𝟚 → X
s ₀ = ϕ (inl x₀)
s ₁ = ϕ (inr x₁)
ps : p ∘ s ∼ id
ps ₀ = ap (cases (λ _ → ₀) (λ _ → ₁)) (γϕ (inl x₀))
ps ₁ = ap (cases (λ _ → ₀) (λ _ → ₁)) (γϕ (inr x₁))
\end{code}
The following is our official notion of disconnectedness (logically
equivalent to the other ones):
\begin{code}
is-disconnected : 𝓤 ̇ → 𝓤 ̇
is-disconnected = is-disconnected₀
\end{code}
Some examples:
\begin{code}
𝟚-is-disconnected : is-disconnected 𝟚
𝟚-is-disconnected = identity-retraction
ℕ-is-disconnected : is-disconnected ℕ
ℕ-is-disconnected = (r , s , rs)
where
r : ℕ → 𝟚
r zero = ₀
r (succ n) = ₁
s : 𝟚 → ℕ
s ₀ = zero
s ₁ = succ zero
rs : (n : 𝟚) → r (s n) = n
rs ₀ = refl
rs ₁ = refl
types-with-isolated-point-different-from-another-point-are-disconnected
: {Y : 𝓥 ̇ }
→ (Σ y₀ ꞉ Y , Σ y₁ ꞉ Y , (y₀ ≠ y₁) × is-isolated y₀ )
→ is-disconnected Y
types-with-isolated-point-different-from-another-point-are-disconnected
(y₀ , y₁ , ne , i) = 𝟚-retract-of-non-trivial-type-with-isolated-point ne i
discrete-types-with-two-different-points-are-disconnected
: {Y : 𝓥 ̇ }
→ (Σ y₀ ꞉ Y , Σ y₁ ꞉ Y , y₀ ≠ y₁)
→ is-discrete Y
→ is-disconnected Y
discrete-types-with-two-different-points-are-disconnected (y₀ , y₁ , ne) d =
types-with-isolated-point-different-from-another-point-are-disconnected
(y₀ , y₁ , ne , d y₀)
ℕ-is-disconnected' : is-disconnected ℕ
ℕ-is-disconnected' = discrete-types-with-two-different-points-are-disconnected
(0 , 1 , succ-no-fp 0)
ℕ-is-discrete
retract-is-disconnected : {X : 𝓤 ̇ } {Y : 𝓥 ̇ }
→ retract X of Y
→ is-disconnected X
→ is-disconnected Y
retract-is-disconnected = retracts-compose
\end{code}
TODO. Define totally disconnected. Then maybe for compact types the
notions of total disconnectedness and total separatedness agree.
The negation of disconnectedness can be expressed positively in
various equivalent ways.
\begin{code}
open import TypeTopology.TotallySeparated
open import UF.FunExt
open import UF.Subsingletons
open import UF.Subsingletons-FunExt
is-connected₀ : 𝓤 ̇ → 𝓤 ̇
is-connected₀ X = (f : X → 𝟚) → wconstant f
is-connected₁ : 𝓤 ̇ → 𝓤 ̇
is-connected₁ X = ¬ is-disconnected X
is-connected₂ : 𝓤 ̇ → 𝓤 ̇
is-connected₂ X = (x y : X) → x =₂ y
connected₀-types-are-connected₂ : {X : 𝓤 ̇ } → is-connected₀ X → is-connected₂ X
connected₀-types-are-connected₂ i x y p = i p x y
connected₂-types-are-connected₀ : {X : 𝓤 ̇ } → is-connected₂ X → is-connected₀ X
connected₂-types-are-connected₀ ϕ f x y = ϕ x y f
connected₀-types-are-connected₁ : {X : 𝓤 ̇ } → is-connected₀ X → is-connected₁ X
connected₀-types-are-connected₁ c (r , s , rs) = n (c r)
where
n : ¬ wconstant r
n κ = zero-is-not-one (₀ =⟨ (rs ₀)⁻¹ ⟩
r (s ₀) =⟨ κ (s ₀) (s ₁) ⟩
r (s ₁) =⟨ rs ₁ ⟩
₁ ∎)
disconnected-types-are-not-connected : {X : 𝓤 ̇ }
→ is-disconnected X
→ ¬ is-connected₀ X
disconnected-types-are-not-connected c d = connected₀-types-are-connected₁ d c
connected₁-types-are-is-connected₀ : {X : 𝓤 ̇ }
→ is-connected₁ X
→ is-connected₀ X
connected₁-types-are-is-connected₀ {𝓤} {X} n f x y =
𝟚-is-¬¬-separated (f x) (f y) ϕ
where
ϕ : ¬¬ (f x = f y)
ϕ u = n (f , s , fs)
where
s : 𝟚 → X
s ₀ = 𝟚-equality-cases
(λ (p₀ : f x = ₀) → x)
(λ (p₁ : f x = ₁) → y)
s ₁ = 𝟚-equality-cases
(λ (p₀ : f x = ₀) → y)
(λ (p₁ : f x = ₁) → x)
a : f x = ₁ → f y = ₀
a p = different-from-₁-equal-₀ (λ (q : f y = ₁) → u (p ∙ (q ⁻¹)))
b : f x = ₀ → f y = ₁
b p = different-from-₀-equal-₁ (λ (q : f y = ₀) → u (p ∙ q ⁻¹))
fs : f ∘ s ∼ id
fs ₀ = 𝟚-equality-cases
(λ (p₀ : f x = ₀) → f (s ₀) =⟨ ap f (𝟚-equality-cases₀ p₀) ⟩
f x =⟨ p₀ ⟩
₀ ∎)
(λ (p₁ : f x = ₁) → f (s ₀) =⟨ ap f (𝟚-equality-cases₁ p₁) ⟩
f y =⟨ a p₁ ⟩
₀ ∎)
fs ₁ = 𝟚-equality-cases
(λ (p₀ : f x = ₀) → f (s ₁) =⟨ ap f (𝟚-equality-cases₀ p₀) ⟩
f y =⟨ b p₀ ⟩
₁ ∎)
(λ (p₁ : f x = ₁) → f (s ₁) =⟨ ap f (𝟚-equality-cases₁ p₁) ⟩
f x =⟨ p₁ ⟩
₁ ∎)
is-connected : 𝓤 ̇ → 𝓤 ̇
is-connected = is-connected₀
being-connected-is-prop : {X : 𝓤 ̇ } → Fun-Ext → is-prop (is-connected X)
being-connected-is-prop fe = Π₃-is-prop fe (λ f x y → 𝟚-is-set)
\end{code}