Martin Escardo 2012.
The following says that a particular kind of discontinuity for
functions p : ℕ∞ → ₂ is a taboo. Equivalently, it says that the
convergence of the constant sequence ₀ to the number ₁ in the type
of binary numbers is a taboo. A Brouwerian continuity axiom is
that any convergent sequence in the type ₂ of binary numbers must
be eventually constant (which we don't postulate).
\begin{code}
{-# OPTIONS --safe --without-K #-}
open import MLTT.Spartan
open import UF.FunExt
module Taboos.BasicDiscontinuity (fe : funext₀) where
open import CoNaturals.Type
open import MLTT.Plus-Properties
open import MLTT.Two-Properties
open import Notation.CanonicalMap
open import Taboos.WLPO
basic-discontinuity : (ℕ∞ → 𝟚) → 𝓤₀ ̇
basic-discontinuity p = ((n : ℕ) → p (ι n) = ₀) × (p ∞ = ₁)
basic-discontinuity-taboo : (p : ℕ∞ → 𝟚)
→ basic-discontinuity p
→ WLPO
basic-discontinuity-taboo p (f , r) u = 𝟚-equality-cases lemma₀ lemma₁
where
fact₀ : u = ∞ → p u = ₁
fact₀ t = p u =⟨ ap p t ⟩
p ∞ =⟨ r ⟩
₁ ∎
fact₁ : p u ≠ ₁ → u ≠ ∞
fact₁ = contrapositive fact₀
fact₂ : p u = ₀ → u ≠ ∞
fact₂ = fact₁ ∘ equal-₀-different-from-₁
lemma₀ : p u = ₀ → (u = ∞) + (u ≠ ∞)
lemma₀ s = inr (fact₂ s)
fact₃ : p u = ₁ → ((n : ℕ) → u ≠ ι n)
fact₃ t n s = zero-is-not-one (₀ =⟨ (f n)⁻¹ ⟩
p (ι n) =⟨ (ap p s)⁻¹ ⟩
p u =⟨ t ⟩
₁ ∎)
lemma₁ : p u = ₁ → (u = ∞) + (u ≠ ∞)
lemma₁ t = inl (not-finite-is-∞ fe (fact₃ t))
\end{code}
The converse also holds. It shows that any proof of WLPO is a
discontinuous function, which we use to build a discontinuous function
of type ℕ∞ → 𝟚.
\begin{code}
WLPO-is-discontinuous : WLPO
→ Σ p ꞉ (ℕ∞ → 𝟚), basic-discontinuity p
WLPO-is-discontinuous f = p , (d , d∞)
where
p : ℕ∞ → 𝟚
p u = equality-cases (f u) case₀ case₁
where
case₀ : (r : u = ∞) → f u = inl r → 𝟚
case₀ r s = ₁
case₁ : (r : u ≠ ∞) → f u = inr r → 𝟚
case₁ r s = ₀
d : (n : ℕ) → p (ι n) = ₀
d n = equality-cases (f (ι n)) case₀ case₁
where
case₀ : (r : ι n = ∞) → f (ι n) = inl r → p (ι n) = ₀
case₀ r s = 𝟘-elim (∞-is-not-finite n (r ⁻¹))
case₁ : (g : ι n ≠ ∞) → f (ι n) = inr g → p (ι n) = ₀
case₁ g = ap (λ - → equality-cases - (λ r s → ₁) (λ r s → ₀))
d∞ : p ∞ = ₁
d∞ = equality-cases (f ∞) case₀ case₁
where
case₀ : (r : ∞ = ∞) → f ∞ = inl r → p ∞ = ₁
case₀ r = ap (λ - → equality-cases - (λ r s → ₁) (λ r s → ₀))
case₁ : (g : ∞ ≠ ∞) → f ∞ = inr g → p ∞ = ₁
case₁ g = 𝟘-elim (g refl)
\end{code}
If two discrete-valued functions defined on ℕ∞ agree, they have to
agree at ∞ too, unless WLPO holds:
\begin{code}
open import NotionsOfDecidability.Decidable
open import UF.DiscreteAndSeparated
module _ {D : 𝓤 ̇ } (d : is-discrete D) where
disagreement-taboo' : (p q : ℕ∞ → D)
→ ((n : ℕ) → p (ι n) = q (ι n))
→ p ∞ ≠ q ∞
→ WLPO
disagreement-taboo' p q f g = basic-discontinuity-taboo r (r-lemma , r-lemma∞)
where
A : ℕ∞ → 𝓤 ̇
A u = p u = q u
δ : (u : ℕ∞) → is-decidable (p u = q u)
δ u = d (p u) (q u)
r : ℕ∞ → 𝟚
r = characteristic-map A δ
r-lemma : (n : ℕ) → r (ι n) = ₀
r-lemma n = characteristic-map-property₀-back A δ (ι n) (f n)
r-lemma∞ : r ∞ = ₁
r-lemma∞ = characteristic-map-property₁-back A δ ∞ (λ a → g a)
agreement-cotaboo' : ¬ WLPO
→ (p q : ℕ∞ → D)
→ ((n : ℕ) → p (ι n) = q (ι n))
→ p ∞ = q ∞
agreement-cotaboo' φ p q f = discrete-is-¬¬-separated d (p ∞) (q ∞)
(contrapositive (disagreement-taboo' p q f) φ)
disagreement-taboo : (p q : ℕ∞ → 𝟚)
→ ((n : ℕ) → p (ι n) = q (ι n))
→ p ∞ ≠ q ∞
→ WLPO
disagreement-taboo = disagreement-taboo' 𝟚-is-discrete
agreement-cotaboo : ¬ WLPO
→ (p q : ℕ∞ → 𝟚)
→ ((n : ℕ) → p (ι n) = q (ι n))
→ p ∞ = q ∞
agreement-cotaboo = agreement-cotaboo' 𝟚-is-discrete
\end{code}
Added 23rd August 2023. Variation.
\begin{code}
basic-discontinuity' : (ℕ∞ → ℕ∞) → 𝓤₀ ̇
basic-discontinuity' f = ((n : ℕ) → f (ι n) = ι 0) × (f ∞ = ι 1)
basic-discontinuity-taboo' : (f : ℕ∞ → ℕ∞)
→ basic-discontinuity' f
→ WLPO
basic-discontinuity-taboo' f (f₀ , f₁) = VI
where
I : (u : ℕ∞) → f u = ι 0 → u ≠ ∞
I u p q = Zero-not-Succ
(ι 0 =⟨ p ⁻¹ ⟩
f u =⟨ ap f q ⟩
f ∞ =⟨ f₁ ⟩
ι 1 ∎)
II : (u : ℕ∞) → f u ≠ ι 0 → u = ∞
II u ν = not-finite-is-∞ fe III
where
III : (n : ℕ) → u ≠ ι n
III n refl = V IV
where
IV : f (ι n) = ι 0
IV = f₀ n
V : f (ι n) ≠ ι 0
V = ν
VI : WLPO
VI u = Cases (finite-isolated fe 0 (f u))
(λ (p : ι 0 = f u) → inr (I u (p ⁻¹)))
(λ (ν : ι 0 ≠ f u) → inl (II u (≠-sym ν)))
\end{code}
Added 13th November 2023.
\begin{code}
open import Notation.Order
ℕ∞-linearity-taboo : ((u v : ℕ∞) → (u ≼ v) + (v ≼ u))
→ WLPO
ℕ∞-linearity-taboo δ = III
where
g : (u v : ℕ∞) → (u ≼ v) + (v ≼ u) → 𝟚
g u v (inl _) = ₀
g u v (inr _) = ₁
f : ℕ∞ → ℕ∞ → 𝟚
f u v = g u v (δ u v)
I₀ : (n : ℕ) → f (ι n) ∞ = ₀
I₀ n = a (δ (ι n) ∞)
where
a : (d : (ι n ≼ ∞) + (∞ ≼ ι n)) → g (ι n) ∞ d = ₀
a (inl _) = refl
a (inr ℓ) = 𝟘-elim (≼-gives-not-≺ ∞ (ι n) ℓ (∞-≺-largest n))
I₁ : (n : ℕ) → f ∞ (ι n) = ₁
I₁ n = b (δ ∞ (ι n))
where
b : (d : (∞ ≼ ι n) + (ι n ≼ ∞)) → g ∞ (ι n) d = ₁
b (inl ℓ) = 𝟘-elim (≼-gives-not-≺ ∞ (ι n) ℓ (∞-≺-largest n))
b (inr _) = refl
II : (b : 𝟚) → f ∞ ∞ = b → WLPO
II ₀ e = basic-discontinuity-taboo p II₀
where
p : ℕ∞ → 𝟚
p x = complement (f ∞ x)
II₀ : ((n : ℕ) → p (ι n) = ₀) × (p ∞ = ₁)
II₀ = (λ n → p (ι n) =⟨ refl ⟩
complement (f ∞ (ι n)) =⟨ ap complement (I₁ n) ⟩
complement ₁ =⟨ refl ⟩
₀ ∎) ,
(p ∞ =⟨ refl ⟩
complement (f ∞ ∞) =⟨ ap complement e ⟩
complement ₀ =⟨ refl ⟩
₁ ∎)
II ₁ e = basic-discontinuity-taboo p II₁
where
p : ℕ∞ → 𝟚
p x = f x ∞
II₁ : ((n : ℕ) → p (ι n) = ₀) × (p ∞ = ₁)
II₁ = I₀ , e
III : WLPO
III = II (f ∞ ∞) refl
\end{code}