Tom de Jong, 3 - 5 March 2020
As suggested by Martin Escardo.
The (usual) order on the dyadic rationals
\begin{code}
{-# OPTIONS --safe --without-K #-}
open import MLTT.Spartan
open import DyadicsInductive.Dyadics
open import UF.Subsingletons
\end{code}
We inductively define an order ≺ on 𝔻 and prove that it is transitive and
linear.
We also show that is is "dense" and "has no endpoints", but formulated using Σ
rather than ∃. Although the proper formulation would use ∃ (to ensure that being
dense and having no endpoints is property, rather than structure), we still
prove the Σ-versions for two reasons:
- we can easily prove them and derive the ∃-versions from them;
- so that this module does not depend on propositional truncation.
\begin{code}
module DyadicsInductive.DyadicOrder where
\end{code}
We defined ≺ by using the translation (from 𝔻 to (-1,1)) as set out in Dyadic.
\begin{code}
_≺_ : 𝔻 → 𝔻 → 𝓤₀ ̇
middle ≺ middle = 𝟘
middle ≺ left y = 𝟘
middle ≺ right y = 𝟙
left x ≺ middle = 𝟙
left x ≺ left y = x ≺ y
left x ≺ right y = 𝟙
right x ≺ middle = 𝟘
right x ≺ left y = 𝟘
right x ≺ right y = x ≺ y
\end{code}
Monotonicity of left and right holds by definition (so we will never call these
lemmas), but we record them here for clarity.
\begin{code}
left-monotone : {x y : 𝔻} → x ≺ y → left x ≺ left y
left-monotone = id
right-monotone : {x y : 𝔻} → x ≺ y → right x ≺ right y
right-monotone = id
\end{code}
\begin{code}
≺-is-prop-valued : (x y : 𝔻) → is-prop (x ≺ y)
≺-is-prop-valued middle middle = 𝟘-is-prop
≺-is-prop-valued middle (left y) = 𝟘-is-prop
≺-is-prop-valued middle (right y) = 𝟙-is-prop
≺-is-prop-valued (left x) middle = 𝟙-is-prop
≺-is-prop-valued (left x) (left y) = ≺-is-prop-valued x y
≺-is-prop-valued (left x) (right y) = 𝟙-is-prop
≺-is-prop-valued (right x) middle = 𝟘-is-prop
≺-is-prop-valued (right x) (left y) = 𝟘-is-prop
≺-is-prop-valued (right x) (right y) = ≺-is-prop-valued x y
≺-is-transitive : (x y z : 𝔻) → x ≺ y → y ≺ z → x ≺ z
≺-is-transitive middle middle z = 𝟘-induction
≺-is-transitive middle (left y) middle = 𝟘-induction
≺-is-transitive middle (left y) (left z) = 𝟘-induction
≺-is-transitive middle (left y) (right z) = 𝟘-induction
≺-is-transitive middle (right y) middle _ = id
≺-is-transitive middle (right y) (left z) _ = id
≺-is-transitive middle (right y) (right z) _ _ = ⋆
≺-is-transitive (left x) middle middle _ _ = ⋆
≺-is-transitive (left x) middle (left z) _ = 𝟘-induction
≺-is-transitive (left x) middle (right z) _ = id
≺-is-transitive (left x) (left y) middle _ = id
≺-is-transitive (left x) (left y) (left z) = ≺-is-transitive x y z
≺-is-transitive (left x) (left y) (right z) _ = id
≺-is-transitive (left x) (right y) middle _ _ = ⋆
≺-is-transitive (left x) (right y) (left z) _ = 𝟘-induction
≺-is-transitive (left x) (right y) (right z) _ _ = ⋆
≺-is-transitive (right x) middle z = 𝟘-induction
≺-is-transitive (right x) (left y) z = 𝟘-induction
≺-is-transitive (right x) (right y) middle _ = id
≺-is-transitive (right x) (right y) (left z) _ = id
≺-is-transitive (right x) (right y) (right z) = ≺-is-transitive x y z
≺-is-linear : (x y : 𝔻) → x ≠ y → x ≺ y + y ≺ x
≺-is-linear middle middle p = 𝟘-induction (p refl)
≺-is-linear middle (left y) _ = inr ⋆
≺-is-linear middle (right y) _ = inl ⋆
≺-is-linear (left x) middle _ = inl ⋆
≺-is-linear (left x) (left y) lx≠ly = ≺-is-linear x y x≠y
where
x≠y : x ≠ y
x≠y = contrapositive (ap left) lx≠ly
≺-is-linear (left x) (right y) _ = inl ⋆
≺-is-linear (right x) middle _ = inr ⋆
≺-is-linear (right x) (left y) _ = inr ⋆
≺-is-linear (right x) (right y) rx≠ry = ≺-is-linear x y x≠y
where
x≠y : x ≠ y
x≠y = contrapositive (ap right) rx≠ry
\end{code}
Discreteness of 𝔻 and linearity of ≺ imply that ≺ is trichotomous, i.e. for
every x y : 𝔻 , x ≺ y or x = y or y ≺ x holds. The lemmas after
≺-is-trichotomous show that exactly one of these is the case, as witnessed by
trichotomy-is-a-singleton.
\begin{code}
≺-is-trichotomous : (x y : 𝔻) → x ≺ y + (x = y) + (y ≺ x)
≺-is-trichotomous x y = cases a b (𝔻-is-discrete x y)
where
a : x = y → (x ≺ y) + (x = y) + (y ≺ x)
a = inr ∘ inl
b : (x ≠ y) → (x ≺ y) + (x = y) + (y ≺ x)
b n = cases c d (≺-is-linear x y n)
where
c : x ≺ y → (x ≺ y) + (x = y) + (y ≺ x)
c = inl
d : y ≺ x → (x ≺ y) + (x = y) + (y ≺ x)
d = inr ∘ inr
≺-to-≠ : {x y : 𝔻} → x ≺ y → x ≠ y
≺-to-≠ {middle} {middle} = 𝟘-induction
≺-to-≠ {middle} {left y} = 𝟘-induction
≺-to-≠ {middle} {right y} _ = middle-is-not-right
≺-to-≠ {left x} {middle} _ = (λ p → middle-is-not-left (p ⁻¹))
≺-to-≠ {left x} {left y} x≺y = contrapositive left-lc (≺-to-≠ x≺y)
≺-to-≠ {left x} {right y} _ = left-is-not-right
≺-to-≠ {right x} {middle} = 𝟘-induction
≺-to-≠ {right x} {left y} = 𝟘-induction
≺-to-≠ {right x} {right y} x≺y = contrapositive right-lc (≺-to-≠ x≺y)
≺-to-≠' : {x y : 𝔻} → y ≺ x → x ≠ y
≺-to-≠' l e = ≺-to-≠ l (e ⁻¹)
=-to-¬≺ : {x y : 𝔻} → x = y → ¬ (x ≺ y)
=-to-¬≺ e l = ≺-to-≠ l e
=-to-¬≺' : {x y : 𝔻} → x = y → ¬ (y ≺ x)
=-to-¬≺' e l = ≺-to-≠ l (e ⁻¹)
≺-to-¬≺ : (x y : 𝔻) → x ≺ y → ¬ (y ≺ x)
≺-to-¬≺ middle middle = 𝟘-induction
≺-to-¬≺ middle (left y) = 𝟘-induction
≺-to-¬≺ middle (right y) _ = id
≺-to-¬≺ (left x) middle _ = id
≺-to-¬≺ (left x) (left y) = ≺-to-¬≺ x y
≺-to-¬≺ (left x) (right y) _ = id
≺-to-¬≺ (right x) middle = 𝟘-induction
≺-to-¬≺ (right x) (left y) = 𝟘-induction
≺-to-¬≺ (right x) (right y) = ≺-to-¬≺ x y
trichotomy-is-a-singleton : {x y : 𝔻} → is-singleton (x ≺ y + (x = y) + y ≺ x)
trichotomy-is-a-singleton {x} {y} =
pointed-props-are-singletons (≺-is-trichotomous x y) γ
where
γ : is-prop (x ≺ y + (x = y) + y ≺ x)
γ = +-is-prop (≺-is-prop-valued x y) h g
where
h : is-prop ((x = y) + y ≺ x)
h = +-is-prop 𝔻-is-set (≺-is-prop-valued y x) =-to-¬≺'
g : x ≺ y → ¬ ((x = y) + y ≺ x)
g l = cases a b
where
a : x ≠ y
a = ≺-to-≠ l
b : ¬ (y ≺ x)
b = ≺-to-¬≺ x y l
\end{code}
Next, we prove that ≺ has no endpoints and is dense (although formulated with Σ,
as explained at the top of this file).
\begin{code}
left-≺ : (x : 𝔻) → left x ≺ x
left-≺ middle = ⋆
left-≺ (left x) = left-≺ x
left-≺ (right x) = ⋆
≺-right : (x : 𝔻) → x ≺ right x
≺-right middle = ⋆
≺-right (left x) = ⋆
≺-right (right x) = ≺-right x
≺-has-no-left-endpoint-Σ : (x : 𝔻) → Σ y ꞉ 𝔻 , y ≺ x
≺-has-no-left-endpoint-Σ x = left x , left-≺ x
≺-has-no-right-endpoint-Σ : (x : 𝔻) → Σ y ꞉ 𝔻 , x ≺ y
≺-has-no-right-endpoint-Σ x = right x , ≺-right x
≺-is-dense-Σ : (x y : 𝔻) → x ≺ y → Σ z ꞉ 𝔻 , x ≺ z × z ≺ y
≺-is-dense-Σ middle (right y) _ = right (left y) , ⋆ , left-≺ y
≺-is-dense-Σ (left x) middle _ = left (right x) , ≺-right x , ⋆
≺-is-dense-Σ (left x) (left y) x≺y = γ (≺-is-dense-Σ x y x≺y)
where
γ : (Σ z ꞉ 𝔻 , x ≺ z × z ≺ y) → Σ z ꞉ 𝔻 , left x ≺ z × z ≺ left y
γ (z , x≺z , z≺y) = left z , x≺z , z≺y
≺-is-dense-Σ (left x) (right y) _ = middle , ⋆ , ⋆
≺-is-dense-Σ (right x) middle = 𝟘-induction
≺-is-dense-Σ (right x) (left y) = 𝟘-induction
≺-is-dense-Σ (right x) (right y) l = γ (≺-is-dense-Σ x y l)
where
γ : (Σ z ꞉ 𝔻 , x ≺ z × z ≺ y) → Σ z ꞉ 𝔻 , right x ≺ z × z ≺ right y
γ (z , m , n) = right z , m , n
\end{code}
Binary interpolation is a generalisation of density, which can, in our case, be
proved from density using trichotomy of ≺.
We will need this property to construct the (rounded) ideal completion of
(𝔻 , ≺).
\begin{code}
≺-interpolation₂-Σ : (x₁ x₂ y : 𝔻) → x₁ ≺ y → x₂ ≺ y
→ Σ z ꞉ 𝔻 , x₁ ≺ z × x₂ ≺ z × z ≺ y
≺-interpolation₂-Σ x₁ x₂ y l₁ l₂ = cases₃ a b c (≺-is-trichotomous x₁ x₂)
where
a : x₁ ≺ x₂ → Σ z ꞉ 𝔻 , x₁ ≺ z × x₂ ≺ z × z ≺ y
a k = γ (≺-is-dense-Σ x₂ y l₂)
where
γ : (Σ z ꞉ 𝔻 , x₂ ≺ z × z ≺ y) → Σ z ꞉ 𝔻 , x₁ ≺ z × x₂ ≺ z × z ≺ y
γ (z , m , n) = z , ≺-is-transitive x₁ x₂ z k m , m , n
b : x₁ = x₂ → Σ z ꞉ 𝔻 , x₁ ≺ z × x₂ ≺ z × z ≺ y
b refl = γ (≺-is-dense-Σ x₁ y l₁)
where
γ : (Σ z ꞉ 𝔻 , x₁ ≺ z × z ≺ y) → Σ z ꞉ 𝔻 , x₁ ≺ z × x₂ ≺ z × z ≺ y
γ (z , m , n) = z , m , m , n
c : x₂ ≺ x₁ → Σ z ꞉ 𝔻 , x₁ ≺ z × x₂ ≺ z × z ≺ y
c k = γ (≺-is-dense-Σ x₁ y l₁)
where
γ : (Σ z ꞉ 𝔻 , x₁ ≺ z × z ≺ y) → Σ z ꞉ 𝔻 , x₁ ≺ z × x₂ ≺ z × z ≺ y
γ (z , m , n) = z , m , ≺-is-transitive x₂ x₁ z k m , n
\end{code}