Skip to content

DomainTheory.Taboos.ClassicalLiftingOfNaturalNumbers

Tom de Jong, 22 & 23 June 2024

We formalize what we've known for a long time: if the poset pictured below

   0   1   2   3   ...
     \ \   / /
      \ \ / /
         ⊥

is ω-complete/directed complete, then Bishop's LPO holds.


{-# OPTIONS --safe --without-K #-}

open import MLTT.Spartan

open import UF.FunExt
open import UF.PropTrunc

module DomainTheory.Taboos.ClassicalLiftingOfNaturalNumbers
        (pt : propositional-truncations-exist)
        (fe : Fun-Ext)
       where

open PropositionalTruncation pt

open import DomainTheory.Basics.Dcpo pt fe 𝓤₀

open import CoNaturals.Type renaming (ℕ∞-to-ℕ→𝟚 to ε)
open import MLTT.Two-Properties
open import MLTT.Plus-Properties
open import Taboos.LPO


The poset is defined as follows. Notice that the set of natural numbers is
ordered discretely.

NB: In this file, and this file only, we denote this poset by ℕ⊥. In
CoNaturals/Sharp this notation is reserved for the lifting of the natural
numbers which constructively *does* yield a directed complete
poset. Classically, the constructions are equivalent, as formalized in
Lifting.Miscelanea-PropExt-FunExt. Indeed, this is the case *only* classically,
as this file shows by deriving a constructive taboo from the assumption that ℕ⊥
is directed complete.


ℕ⊥ : 𝓤₀ ̇
ℕ⊥ = 𝟙{𝓤₀} + 

_⊑_ : ℕ⊥  ℕ⊥  𝓤₀ ̇
inl   x = 𝟙
inr n  x = inr n  x


We now state the main results, postponing the proof.

In fact, we show that just having upper bounds of ω-chains (so not necessarily
least ones) gives LPO.


ℕ⊥-is-ω-complete-gives-LPO : is-ω-complete _⊑_  LPO

ℕ⊥-is-directed-complete-gives-LPO : is-directed-complete _⊑_  LPO

ℕ⊥-has-upperbounds-for-ω-chains-gives-LPO :
   ((α :   ℕ⊥)
        is-ω-chain _⊑_ α
        (Σ x  ℕ⊥ , is-upperbound _⊑_ x α))
  LPO


We need a few preliminaries before giving the proof.


inr-not-⊑-inl : {n : }  ¬ (inr n  inl )
inr-not-⊑-inl p = +disjoint (p ⁻¹)

⊑-refl : (x : ℕ⊥)  x  x
⊑-refl (inl ) = 
⊑-refl (inr n) = refl

⊑-refl-= : {x y : ℕ⊥}  x  y  x  y
⊑-refl-= refl = ⊑-refl _

⊑-trans : (x y z : ℕ⊥)  x  y  y  z  x  z
⊑-trans (inl ) y z p q = 
⊑-trans (inr n) y z refl q = q


We now prove the main result.

In TypeTopology, LPO states that is decidable whether a decreasing binary sequence
u : ℕ∞ is finite or not. The equivalence with the traditional formulation is
formalized in Taboos.LPO.

We write ε u n for evaluating the binary sequence u at index n.

Given such u, we construct χ : ℕ → ℕ⊥ such that

   • χ n = ⊥ = inl ⋆ ⇔ ε u n = ₁;
   • χ n = inr m     ⇔ m is the least integer ≤ n such that ε u m = ₀.

We then show that χ is an ω-chain and that from an upper bound we can decide,
via some case splitting, whether u is finite or not, i.e., whether u is always ₁
or attains ₀ somewhere.


private
 module construction (u : ℕ∞) where

  χ :   ℕ⊥
  χ n = 𝟚-equality-cases I II
   where
    I : ε u n    ℕ⊥
    I p = inr (size (bounded-is-finite fe n u p))
    II : ε u n    ℕ⊥
    II _ = inl 

  module _
          {n : }
          (p : ε u n  )
         where

   χ-numeral : 
   χ-numeral = size (bounded-is-finite fe n u p)

   χ-eq : χ n  inr χ-numeral
   χ-eq = 𝟚-equality-cases₀ p

   χ-numeral-eq : ℕ-to-ℕ∞ χ-numeral  u
   χ-numeral-eq = size-property (bounded-is-finite fe n u p)

  χ-otherwise : {n : }  ε u n    χ n  inl 
  χ-otherwise p = 𝟚-equality-cases₁ p

  χ-is-ω-chain : (n : )  χ n  χ (succ n)
  χ-is-ω-chain n = 𝟚-equality-cases I II
   where
    II : ε u n    χ n  χ (succ n)
    II p = transport⁻¹ (_⊑ χ (succ n)) (χ-otherwise p) 
    I : ε u n    χ n  χ (succ n)
    I p = ⊑-refl-= I₁
     where
      q : ε u (succ n)  
      q = stays-zero u p
      I₁ = χ n               =⟨ χ-eq p 
           inr (χ-numeral p) =⟨ I₂ 
           inr (χ-numeral q) =⟨ (χ-eq q) ⁻¹ 
           χ (succ n)        
       where
        I₂ = ap inr (ℕ-to-ℕ∞-lc (χ-numeral-eq p  (χ-numeral-eq q) ⁻¹))

  inl-case : is-upperbound _⊑_ (inl ) χ
            is-decidable (is-finite' u)
  inl-case ub = inr I
   where
    I : ¬ (is-finite' u)
    I (n , refl) = inr-not-⊑-inl II
     where
      p : ε u n  
      p = ℕ-to-ℕ∞-diagonal₀ n
      II : inr (χ-numeral p)  inl 
      II = transport (_⊑ inl ) (χ-eq p) (ub n)

  inr-case : {m : }  is-upperbound _⊑_ (inr m) χ
            is-decidable (is-finite' u)
  inr-case {m} ub = 𝟚-equality-cases I II
   where
    I : ε u m    is-decidable (is-finite' u)
    I p = inl (χ-numeral p , ((χ-numeral-eq p) ⁻¹))
    II : ε u m    is-decidable (is-finite' u)
    II p = inr III
     where
      III : ¬ is-finite' u
      III (n , refl) = diff (inr-lc eq)
       where
        q : ε u n  
        q = ℕ-to-ℕ∞-diagonal₀ n

        eq = inr n             =⟨ (ap inr (ℕ-to-ℕ∞-lc (χ-numeral-eq q)))⁻¹ 
             inr (χ-numeral q) =⟨ transport (_⊑ inr m) (χ-eq q) (ub n) 
             inr m             

        diff : n  m
        diff e = zero-is-not-one (     =⟨ (ℕ-to-ℕ∞-diagonal₀ n) ⁻¹ 
                                  ε u n =⟨ ap (ε u) e 
                                  ε u m =⟨ p 
                                       )


This completes the technical details and we are ready to give the proofs.


ℕ⊥-has-upperbounds-for-ω-chains-gives-LPO ν seq =
 equality-cases s (I s s-is-ub) (II s s-is-ub)
  where
   open construction seq
   module _
           (s : ℕ⊥)
           (s-is-ub : is-upperbound _⊑_ s χ)
          where
    I : (u : 𝟙)  s  inl u  is-decidable (is-finite' seq)
    I  refl = inl-case s-is-ub
    II : (m : )  s  inr m  is-decidable (is-finite' seq)
    II m refl = inr-case s-is-ub

   s : ℕ⊥
   s = pr₁ (ν χ χ-is-ω-chain)
   s-is-ub : is-upperbound _⊑_ s χ
   s-is-ub = pr₂ (ν χ χ-is-ω-chain)

ℕ⊥-is-ω-complete-gives-LPO comp =
 ℕ⊥-has-upperbounds-for-ω-chains-gives-LPO
   α c  the-sup _⊑_ (comp α c) ,
           sup-is-upperbound _⊑_ (sup-property _⊑_ (comp α c)))

ℕ⊥-is-directed-complete-gives-LPO comp =
 ℕ⊥-is-ω-complete-gives-LPO
   α c  comp  α (ω-chains-are-directed _⊑_ ⊑-refl ⊑-trans α c))