Martin Escardo and Tom de Jong, August 2024
Moved from the file InjectiveTypes.CounterExamples on 12 September 2024.
\begin{code}
{-# OPTIONS --safe --without-K #-}
open import UF.PropTrunc
module Apartness.Properties
(pt : propositional-truncations-exist)
where
open import Apartness.Definition
open import MLTT.Spartan
open import MLTT.Two-Properties
open import Naturals.Properties
open import NotionsOfDecidability.DecidableClassifier
open import Taboos.LPO
open import Taboos.WLPO
open import TypeTopology.Cantor renaming (_♯_ to _♯[𝟚ᴺ]_) hiding (_=⟦_⟧_)
open import TypeTopology.TotallySeparated
open import UF.Base
open import UF.ClassicalLogic
open import UF.DiscreteAndSeparated renaming (_♯_ to ♯[Π])
open import UF.FunExt
open import UF.Size
open import UF.Subsingletons
open import UF.Subsingletons-FunExt
open Apartness pt
open PropositionalTruncation pt
open total-separatedness-via-apartness pt
\end{code}
We define an apartness relation to be nontrivial if it tells two points apart.
\begin{code}
has-two-points-apart : {X : 𝓤 ̇ } → Apartness X 𝓥 → 𝓥 ⊔ 𝓤 ̇
has-two-points-apart {𝓤} {𝓥} {X} (_♯_ , α) = Σ (x , y) ꞉ X × X , (x ♯ y)
Nontrivial-Apartness : 𝓤 ̇ → (𝓥 : Universe) → 𝓥 ⁺ ⊔ 𝓤 ̇
Nontrivial-Apartness X 𝓥 = Σ a ꞉ Apartness X 𝓥 , has-two-points-apart a
\end{code}
Assuming weak excluded middle, every type with two distinct points can be
equipped with a nontrivial apartness relation.
\begin{code}
WEM-gives-that-type-with-two-distinct-points-has-nontrivial-apartness
: funext 𝓤 𝓤₀
→ {X : 𝓤 ̇ }
→ has-two-distinct-points X
→ typal-WEM 𝓤
→ Nontrivial-Apartness X 𝓤
WEM-gives-that-type-with-two-distinct-points-has-nontrivial-apartness
{𝓤} fe {X} htdp wem = γ
where
s : (x y z : X) → x ≠ y → (x ≠ z) + (y ≠ z)
s x y z d =
Cases (wem (x ≠ z))
(λ (a : ¬ (x ≠ z)) → inr (λ {refl → a d}))
(λ (b : ¬¬ (x ≠ z)) → inl (three-negations-imply-one b))
c : is-cotransitive _≠_
c x y z d = ∣ s x y z d ∣
γ : Nontrivial-Apartness X 𝓤
γ = (_≠_ ,
((λ x y → negations-are-props fe) ,
≠-is-irrefl ,
(λ x y → ≠-sym) , c)) ,
htdp
WEM-gives-that-type-with-two-distinct-points-has-nontrivial-apartness⁺
: funext 𝓤 𝓤₀
→ {X : 𝓤 ⁺ ̇ }
→ is-locally-small X
→ has-two-distinct-points X
→ typal-WEM 𝓤
→ Nontrivial-Apartness X 𝓤
WEM-gives-that-type-with-two-distinct-points-has-nontrivial-apartness⁺
{𝓤} fe {X} ls ((x₀ , x₁) , d) wem = γ
where
_♯_ : X → X → 𝓤 ̇
x ♯ y = x ≠⟦ ls ⟧ y
s : (x y z : X) → x ♯ y → (x ♯ z) + (y ♯ z)
s x y z a = Cases (wem (x ♯ z)) (inr ∘ f) (inl ∘ g)
where
f : ¬ (x ♯ z) → y ♯ z
f = contrapositive
(λ (e : y =⟦ ls ⟧ z) → transport (x ♯_) (=⟦ ls ⟧-gives-= e) a)
g : ¬¬ (x ♯ z) → x ♯ z
g = three-negations-imply-one
c : is-cotransitive _♯_
c x y z d = ∣ s x y z d ∣
γ : Nontrivial-Apartness X 𝓤
γ = (_♯_ ,
(λ x y → negations-are-props fe) ,
(λ x → ≠⟦ ls ⟧-irrefl) ,
(λ x y → ≠⟦ ls ⟧-sym) ,
c) ,
(x₀ , x₁) , ≠-gives-≠⟦ ls ⟧ d
\end{code}
In particular, weak excluded middle yields a nontrivial apartness relation on
any universe.
\begin{code}
WEM-gives-non-trivial-apartness-on-universe
: funext (𝓤 ⁺) 𝓤₀
→ typal-WEM (𝓤 ⁺)
→ Nontrivial-Apartness (𝓤 ̇ ) (𝓤 ⁺)
WEM-gives-non-trivial-apartness-on-universe fe =
WEM-gives-that-type-with-two-distinct-points-has-nontrivial-apartness
fe
universe-has-two-distinct-points
\end{code}
Further properties of apartness relations can be found in the following file
InjectiveTypes.CounterExamples. In particular, it is shown that the universe
can't have any nontrivial apartness unless weak excluded middle holds.
Added 31 January 2025 by Tom de Jong and Martin Escardo.
\begin{code}
EM-gives-tight-apartness-is-≠ : DNE 𝓥
→ (X : 𝓤 ̇ )
→ ((_♯_ , _ , _) : Tight-Apartness X 𝓥)
→ ((x y : X) → x ♯ y ↔ x ≠ y)
EM-gives-tight-apartness-is-≠ dne X (_♯_ , ♯-is-apartness , ♯-is-tight) x y = III
where
I : x ♯ y → x ≠ y
I = not-equal-if-apart _♯_ ♯-is-apartness
II : x ≠ y → x ♯ y
II ν = dne (x ♯ y)
(apartness-is-prop-valued _♯_ ♯-is-apartness x y)
(contrapositive (♯-is-tight x y) ν)
III : x ♯ y ↔ x ≠ y
III = I , II
\end{code}
Added 1 February 2025 by Tom de Jong.
The above shows that classically any type can have at most one tight
apartness (the one given by negation of equality). We show that the
Cantor type 𝟚ᴺ := (ℕ → 𝟚) cannot be shown to have at most one tight
apartness relation in constructive mathematics: the statement that the
Cantor type has at most one tight apartness relation implies (WLPO ⇒ LPO)
which is a constructive taboo as there are (topological) models of
intuitionistic set theory that validate WLPO but not LPO, see the
fifth page and Theorem 5.1 of the paper below.
Matt Hendtlass and Robert Lubarsky. 'Separating Fragments of WLEM, LPO, and MP'
The Journal of Symbolic Logic. Vol. 81, No. 4, 2016, pp. 1315-1343.
DOI: 10.1017/jsl.2016.38
URL: https://www.math.fau.edu/people/faculty/lubarsky/separating-llpo.pdf
\begin{code}
At-Most-One-Tight-Apartness : (X : 𝓤 ̇ ) (𝓥 : Universe) → (𝓥 ⁺ ⊔ 𝓤) ̇
At-Most-One-Tight-Apartness X 𝓥 = is-prop (Tight-Apartness X 𝓥)
At-Most-One-Tight-Apartness-on-Cantor-gives-WLPO-implies-LPO
: Fun-Ext
→ At-Most-One-Tight-Apartness 𝟚ᴺ 𝓤₀
→ WLPO-variation₂
→ LPO-variation
At-Most-One-Tight-Apartness-on-Cantor-gives-WLPO-implies-LPO fe hyp wlpo = VI
where
_♯_ = _♯[𝟚ᴺ]_
has-root : 𝟚ᴺ → 𝓤₀ ̇
has-root α = Σ n ꞉ ℕ , α n = ₀
P⁺ : (α : 𝟚ᴺ) → Σ b ꞉ 𝟚 , (b = ₀ ↔ ¬¬ (has-root α))
× (b = ₁ ↔ ¬ (has-root α))
P⁺ α = boolean-value' (wlpo α)
P : 𝟚ᴺ → 𝟚
P α = pr₁ (P⁺ α)
P-specification₀ : (α : 𝟚ᴺ) → P α = ₀ ↔ ¬¬ (has-root α)
P-specification₀ α = pr₁ (pr₂ (P⁺ α))
P-specification₁ : (α : 𝟚ᴺ) → P α = ₁ ↔ ¬ (has-root α)
P-specification₁ α = pr₂ (pr₂ (P⁺ α))
P-of-𝟏-is-₁ : P 𝟏 = ₁
P-of-𝟏-is-₁ = rl-implication (P-specification₁ 𝟏) I
where
I : ¬ has-root (λ n → ₁)
I (n , p) = one-is-not-zero p
P-differentiates-at-𝟏-specification : (α : 𝟚ᴺ)
→ P α ≠ P 𝟏 ↔ ¬¬ (has-root α)
P-differentiates-at-𝟏-specification α = I , II
where
I : P α ≠ P 𝟏 → ¬¬ has-root α
I ν = lr-implication (P-specification₀ α) I₂
where
I₁ : P α = ₁ → P α = ₀
I₁ e = 𝟘-elim (ν (e ∙ P-of-𝟏-is-₁ ⁻¹))
I₂ : P α = ₀
I₂ = 𝟚-equality-cases id I₁
II : ¬¬ has-root α → P α ≠ P 𝟏
II ν e = ν (lr-implication (P-specification₁ α) (e ∙ P-of-𝟏-is-₁))
I : (α : 𝟚ᴺ) → ¬¬ (has-root α) → α ♯₂ 𝟏
I α ν = ∣ P , rl-implication (P-differentiates-at-𝟏-specification α) ν ∣
II : (α : 𝟚ᴺ) → α ♯ 𝟏 ↔ has-root α
II α = II₁ , II₂
where
II₁ : α ♯ 𝟏 → has-root α
II₁ a = pr₁ has-root' , 𝟚-equality-cases id (λ p → 𝟘-elim (pr₂ has-root' p))
where
has-root' : Σ n ꞉ ℕ , α n ≠ ₁
has-root' = apartness-criterion-converse α 𝟏 a
II₂ : has-root α → α ♯ 𝟏
II₂ (n , p) = apartness-criterion α 𝟏
(n , λ (q : α n = ₁) → zero-is-not-one (p ⁻¹ ∙ q))
III : (α : 𝟚ᴺ) → α ♯₂ 𝟏 → α ♯ 𝟏
III α = Idtofun (eq α 𝟏)
where
eq : (α β : 𝟚ᴺ) → α ♯₂ β = α ♯ β
eq α β =
happly
(happly
(ap pr₁
(hyp (_♯₂_ ,
♯₂-is-apartness ,
♯₂-is-tight (Cantor-is-totally-separated fe))
(_♯_ ,
♯-is-apartness fe pt ,
♯-is-tight fe)))
α)
β
IV : (α : 𝟚ᴺ) → ¬¬-stable (has-root α)
IV α ν = lr-implication (II α) (III α (I α ν))
recall : (α : 𝟚ᴺ) → type-of (wlpo α) = is-decidable (¬ (has-root α))
recall α = refl
V : (α : 𝟚ᴺ) → is-decidable (has-root α)
V α = κ (wlpo α)
where
κ : is-decidable (¬ (has-root α)) → is-decidable (has-root α)
κ (inl p) = inr p
κ (inr q) = inl (IV α q)
VI : LPO-variation
VI = V
\end{code}
Added 5 February 2025 by Tom de Jong.
A simpler theorem with a much stronger conclusion is possible, following a
generalization of an idea of Andrew Swan.
We record some basic general results first.
\begin{code}
≠-is-apartness-on-discrete-type : funext 𝓤 𝓤₀
→ {X : 𝓤 ̇ }
→ is-discrete X
→ is-apartness _≠_
≠-is-apartness-on-discrete-type fe {X} X-discrete =
(λ x y → negations-are-props fe)
, ≠-is-irrefl
, (λ x y → ≠-sym)
, (λ x y z a → I x y z a (X-discrete x z))
where
I : (x y z : X) → x ≠ y
→ (x = z) + ¬ (x = z)
→ (x ≠ z) ∨ (y ≠ z)
I x y z a (inl refl) = ∣ inr (≠-sym a) ∣
I x y z a (inr ν) = ∣ inl ν ∣
≠-is-tight-on-discrete-type : {X : 𝓤 ̇ }
→ is-discrete X
→ is-tight _≠_
≠-is-tight-on-discrete-type = discrete-is-¬¬-separated
At-Most-One-Tight-Apartness-on-discrete-type-with-two-distinct-points-gives-DNE
: funext 𝓤 𝓤₀
→ (X : 𝓤 ̇ )
→ has-two-distinct-points X
→ is-discrete X
→ At-Most-One-Tight-Apartness X 𝓤
→ DNE 𝓤
At-Most-One-Tight-Apartness-on-discrete-type-with-two-distinct-points-gives-DNE
{𝓤} fe X ((x₀ , x₁) , x₀-is-not-x₁) X-discrete hyp P P-is-prop = II
where
_♯_ : X → X → 𝓤 ̇
x ♯ y = P × (x ≠ y)
pv : is-prop-valued _♯_
pv x y = ×-is-prop P-is-prop (negations-are-props fe)
ir : is-irreflexive _♯_
ir x (p , ν) = ≠-is-irrefl x ν
sy : is-symmetric _♯_
sy x y (p , ν) = (p , ≠-sym ν)
ct : is-cotransitive _♯_
ct x y z (p , ν) = κ (X-discrete x z)
where
κ : (x = z) + (x ≠ z) → (x ♯ z) ∨ (y ♯ z)
κ (inl refl) = ∣ inr (p , ≠-sym ν) ∣
κ (inr ν') = ∣ inl (p , ν') ∣
tg : ¬¬ P → is-tight _♯_
tg dnp x y na = discrete-is-¬¬-separated X-discrete x y I
where
I : ¬ (x ≠ y)
I ν = dnp (λ (p : P) → na (p , ν))
I : ¬¬ P → x₀ ♯ x₁
I dnp = Idtofun ((eq x₀ x₁) ⁻¹) x₀-is-not-x₁
where
eq : (x y : X) → (x ♯ y) = (x ≠ y)
eq x y =
happly
(happly
(ap pr₁
(hyp (_♯_ , (pv , ir , sy , ct) , tg dnp)
(_≠_ , ≠-is-apartness-on-discrete-type fe X-discrete ,
≠-is-tight-on-discrete-type X-discrete)))
x)
y
II : ¬¬ P → P
II dnp = pr₁ (I dnp)
At-Most-One-Tight-Apartness-on-ℕ-gives-DNE
: funext 𝓤₀ 𝓤₀
→ At-Most-One-Tight-Apartness ℕ 𝓤₀
→ DNE 𝓤₀
At-Most-One-Tight-Apartness-on-ℕ-gives-DNE fe =
At-Most-One-Tight-Apartness-on-discrete-type-with-two-distinct-points-gives-DNE
fe ℕ ((0 , 1) , zero-not-positive 0) ℕ-is-discrete
\end{code}
Added 5th February 2025 by Martin Escardo. We improve the above result
by Tom de Jong and Andrew Swan. If a type has exactly one tight
apartness with two points apart, then double negation elimination, and
hence excluded middle, hold.
\begin{code}
Exactly-One-Tight-Apartness-on-type-with-two-points-apart-gives-DNE
: {X : 𝓤 ̇ }
((_♯_ , a , _) : Tight-Apartness X 𝓤)
→ has-two-points-apart (_♯_ , a)
→ At-Most-One-Tight-Apartness X 𝓤
→ DNE 𝓤
Exactly-One-Tight-Apartness-on-type-with-two-points-apart-gives-DNE
{𝓤} {X}
(_♯_ , a@(♯-pv , ♯-irrefl , ♯-sym , ♯-cot) , ♯-tight)
((x₀ , x₁) , x₀-apart-from-x₁)
α P P-is-prop = VI
where
_♯ᴾ_ : X → X → 𝓤 ̇
x ♯ᴾ y = P × (x ♯ y)
♯ᴾ-pv : is-prop-valued _♯ᴾ_
♯ᴾ-pv x y = ×-is-prop P-is-prop (♯-pv x y)
♯ᴾ-irrefl : is-irreflexive _♯ᴾ_
♯ᴾ-irrefl x (p , ν) = ♯-irrefl x ν
♯ᴾ-sym : symmetric _♯ᴾ_
♯ᴾ-sym x y (p , ν) = (p , ♯-sym x y ν)
♯ᴾ-cot : is-cotransitive _♯ᴾ_
♯ᴾ-cot x y z (p , ν) = ∥∥-functor f (♯-cot x y z ν)
where
f : (x ♯ z) + (y ♯ z) → (x ♯ᴾ z) + (y ♯ᴾ z)
f (inl l) = inl (p , l)
f (inr r) = inr (p , r)
♯ᴾ-tight : ¬¬ P → is-tight _♯ᴾ_
♯ᴾ-tight dnp x y na = ♯-tight x y I
where
I : ¬ (x ♯ y)
I ν = dnp (λ (p : P) → na (p , ν))
aᴾ : is-apartness _♯ᴾ_
aᴾ = (♯ᴾ-pv , ♯ᴾ-irrefl , ♯ᴾ-sym , ♯ᴾ-cot)
II : ¬¬ P → x₀ ♯ᴾ x₁
II dnp = Idtofun (V ⁻¹) x₀-apart-from-x₁
where
III : _♯ᴾ_ = _♯_
III = ap pr₁ (α (_♯ᴾ_ , aᴾ , ♯ᴾ-tight dnp)
(_♯_ , a , ♯-tight))
IV : {x : X} → x ♯ᴾ_ = x ♯_
IV {x} = happly III x
V : {x y : X} → x ♯ᴾ y = x ♯ y
V {x} {y} = happly IV y
VI : ¬¬ P → P
VI = pr₁ ∘ II
\end{code}
The previous result is a particular case, of course:
\begin{code}
At-Most-One-Tight-Apartness-on-discrete-type-with-two-distinct-points-gives-DNE'
: funext 𝓤 𝓤₀
→ {X : 𝓤 ̇ }
→ is-discrete X
→ has-two-distinct-points X
→ At-Most-One-Tight-Apartness X 𝓤
→ DNE 𝓤
At-Most-One-Tight-Apartness-on-discrete-type-with-two-distinct-points-gives-DNE'
fe δ
= Exactly-One-Tight-Apartness-on-type-with-two-points-apart-gives-DNE
(_≠_ , ≠-is-apartness-on-discrete-type fe δ , ≠-is-tight-on-discrete-type δ)
\end{code}