Todd Waugh Ambridge, January 2024
# Structural properties of ternary Boehm encodings
\begin{code}
{-# OPTIONS --without-K --safe #-}
open import Integers.Addition renaming (_+_ to _ℤ+_)
open import Notation.Order
open import Integers.Order
open import Integers.Type
open import MLTT.Spartan
open import Naturals.Addition renaming (_+_ to _ℕ+_)
open import TWA.Thesis.Chapter5.Integers
module TWA.Thesis.Chapter5.BoehmStructure where
\end{code}
## downLeft, downMid and downRight
\begin{code}
downLeft downMid downRight : ℤ → ℤ
downLeft a = a ℤ+ a
downMid a = succℤ (downLeft a)
downRight a = succℤ (downMid a)
\end{code}
## downLeft and downRight properties
\begin{code}
pred-downMid : (a : ℤ) → predℤ (downMid a) = downLeft a
pred-downMid a = predsuccℤ _
pred-downRight : (a : ℤ) → predℤ (downRight a) = downMid a
pred-downRight a = predsuccℤ _
pred-pred-downRight
: (a : ℤ) → predℤ (predℤ (downRight a)) = downLeft a
pred-pred-downRight a = ap predℤ (predsuccℤ _) ∙ predsuccℤ _
downLeft-monotone' : (a b : ℤ) → ((n , _) : a ≤ℤ b)
→ downLeft a +pos (n ℕ+ n) = downLeft b
downLeft-monotone' a b (n , refl)
= ap ((a ℤ+ a) ℤ+_) (distributivity-pos-addition n n ⁻¹)
∙ ℤ+-rearrangement (a ℤ+ a) (pos n) (pos n) ⁻¹
∙ ap (λ - → (- +pos n) +pos n) (ℤ+-comm a a)
∙ ap (_+pos n)
(ℤ+-assoc a a (pos n)
∙ ap (a ℤ+_) (ℤ+-comm a (pos n))
∙ ℤ+-assoc a (pos n) a ⁻¹)
∙ ℤ+-assoc (a +pos n) a (pos n)
ℤ≤<-trans : (a b c : ℤ) → a ≤ℤ b → b <ℤ c → a <ℤ c
ℤ≤<-trans a b c (m , refl) (n , refl)
= m ℕ+ n
, (ap (succℤ a ℤ+_) (distributivity-pos-addition m n ⁻¹)
∙ ℤ+-assoc (succℤ a) (pos m) (pos n) ⁻¹
∙ ap (_+pos n) (ℤ-left-succ-pos a m))
downLeft<<downRight : (a b : ℤ) → a <ℤ b → downLeft a <ℤ downRight b
downLeft<<downRight a b (n , refl)
= (succ (succ (succ (n ℕ+ n))))
, ap (succℤ ∘ succℤ)
(ap succℤ
(ap (_+pos (n ℕ+ n)) (ℤ-left-succ a a ⁻¹)
∙ ap ((succℤ a ℤ+ a) ℤ+_) (distributivity-pos-addition n n ⁻¹)
∙ ℤ+-rearrangement (succℤ a ℤ+ a) (pos n) (pos n) ⁻¹
∙ ap (λ - → (- +pos n) +pos n) (ℤ+-comm (succℤ a) a)
∙ ap (_+pos n)
(ℤ+-assoc a (succℤ a) (pos n)
∙ ap (a ℤ+_) (ℤ+-comm (succℤ a) (pos n))
∙ ℤ+-assoc a (pos n) (succℤ a) ⁻¹)
∙ ℤ+-assoc (a +pos n) (succℤ a) (pos n))
∙ ℤ-left-succ (a +pos n) (succℤ a +pos n) ⁻¹
∙ ap (_ℤ+ (succℤ a +pos n)) (ℤ-left-succ-pos a n ⁻¹))
downLeft<downRight
: (a : ℤ) (n : ℕ)
→ rec a downLeft (succ n) <ℤ rec a downRight (succ n)
downLeft<downRight a zero = 1 , refl
downLeft<downRight a (succ n)
= downLeft<<downRight _ _ (downLeft<downRight a n)
downLeft≤downRight
: (a : ℤ) (n : ℕ) → rec a downLeft n ≤ℤ rec a downRight n
downLeft≤downRight a 0 = zero , refl
downLeft≤downRight a (succ n) = <-is-≤ _ _ (downLeft<downRight a n)
downLeft-≤-succ : (a : ℤ) → downLeft a ≤ℤ downLeft (succℤ a)
downLeft-≤-succ a
= 2 , (ap succℤ (ℤ-left-succ a a ⁻¹) ∙ ℤ-right-succ (succℤ a) a ⁻¹)
downLeft-monotone : (a b : ℤ) → a ≤ℤ b → downLeft a ≤ℤ downLeft b
downLeft-monotone = ≤-succ-to-monotone downLeft downLeft-≤-succ
downLeftⁿ-monotone : (a b : ℤ) (n : ℕ) → a ≤ℤ b
→ rec a downLeft (succ n) ≤ℤ rec b downLeft (succ n)
downLeftⁿ-monotone a b 0 a≤b
= downLeft-monotone a b a≤b
downLeftⁿ-monotone a b (succ n) a≤b
= downLeft-monotone _ _ (downLeftⁿ-monotone a b n a≤b)
downRight-≤-succ : (a : ℤ) → downRight a ≤ℤ downRight (succℤ a)
downRight-≤-succ a = 2 , ap (succℤ ∘ succℤ) (pr₂ (downLeft-≤-succ a))
downRight-monotone : (a b : ℤ) → a ≤ℤ b → downRight a ≤ℤ downRight b
downRight-monotone = ≤-succ-to-monotone downRight downRight-≤-succ
downRightⁿ-monotone
: (a b : ℤ) (n : ℕ)
→ a ≤ℤ b
→ rec a downRight (succ n) ≤ℤ rec b downRight (succ n)
downRightⁿ-monotone a b 0 a≤b
= downRight-monotone a b a≤b
downRightⁿ-monotone a b (succ n) a≤b
= downRight-monotone _ _ (downRightⁿ-monotone a b n a≤b)
downLeft≤<downRight : (a b : ℤ) → a ≤ℤ b → downLeft a <ℤ downRight b
downLeft≤<downRight a b a≤b
= ℤ≤<-trans _ _ _ (downLeft-monotone _ _ a≤b) (downLeft<downRight b 0)
downLeft≠downMid : (a b : ℤ) → a = b → downLeft a ≠ downMid b
downLeft≠downMid a a refl
= ℤ-less-not-equal (downLeft a) (downMid a)
(0 , refl)
downLeft≠downRight : (a b : ℤ) → a = b → downLeft a ≠ downRight b
downLeft≠downRight a a refl
= ℤ-less-not-equal (downLeft a) (downRight a)
(1 , refl)
downMid≠downRight : (a b : ℤ) → a = b → downMid a ≠ downRight b
downMid≠downRight a a refl
= ℤ-less-not-equal (downMid a) (downRight a)
(0 , refl)
downRight=downLeft : (a : ℤ) → downRight a = downLeft (succℤ a)
downRight=downLeft a
= ap succℤ (ℤ-left-succ a a ⁻¹ ∙ ℤ+-comm (succℤ a) a)
∙ ℤ-left-succ a (succℤ a) ⁻¹
\end{code}
## below and below'
\begin{code}
_below_ : ℤ → ℤ → 𝓤₀ ̇
a below b = downLeft b ≤ a ≤ downRight b
downLeft-below : (a : ℤ) → downLeft a below a
downLeft-below a = (0 , refl) , (2 , refl)
downMid-below : (a : ℤ) → downMid a below a
downMid-below a = (1 , refl) , (1 , refl)
downRight-below : (a : ℤ) → downRight a below a
downRight-below a = (2 , refl) , (0 , refl)
_below'_ : ℤ → ℤ → 𝓤₀ ̇
a below' b = (a = downLeft b) + (a = downMid b) + (a = downRight b)
below'-implies-below : (a b : ℤ) → a below' b → a below b
below'-implies-below .(downLeft b) b (inl refl )
= downLeft-below b
below'-implies-below .(downMid b) b (inr (inl refl))
= downMid-below b
below'-implies-below .(downRight b) b (inr (inr refl))
= downRight-below b
below-implies-below' : (a b : ℤ) → a below b → a below' b
below-implies-below' a b ((0 , e) , _)
= inl (e ⁻¹)
below-implies-below' a b ((1 , e) , _)
= (inr ∘ inl) (e ⁻¹)
below-implies-below' a b ((2 , e) , _)
= (inr ∘ inr) (e ⁻¹)
below-implies-below' a b ((succ (succ (succ _)) , _) , (0 , f))
= (inr ∘ inr) f
below-implies-below' a b ((succ (succ (succ _)) , _) , (1 , f))
= (inr ∘ inl) (succℤ-lc f)
below-implies-below' a b ((succ (succ (succ _)) , _) , (2 , f))
= inl (succℤ-lc (succℤ-lc f))
below-implies-below' a b
((succ (succ (succ n)) , e) , (succ (succ (succ m)) , f))
= 𝟘-elim (k≠2 k=2)
where
k : ℕ
k = (succ (succ (succ (succ (succ (succ (n ℕ+ m)))))))
η : downLeft b +pos k = downRight b
η = ap ((succℤ ^ 6) ∘ downLeft b ℤ+_)
(distributivity-pos-addition n m ⁻¹)
∙ ap (succℤ ^ 6)
(ℤ+-assoc (downLeft b) (pos n) (pos m) ⁻¹)
∙ ap (succℤ ^ 5)
(ℤ-left-succ-pos (downLeft b +pos n) m ⁻¹)
∙ ap (succℤ ^ 4)
(ℤ-left-succ-pos (succℤ (downLeft b +pos n)) m ⁻¹)
∙ ap (succℤ ^ 3)
(ℤ-left-succ-pos ((succℤ ^ 2) (downLeft b +pos n)) m ⁻¹)
∙ ap ((succℤ ^ 3) ∘ (_+pos m)) e
∙ f
ζ : downLeft b +pos 2 = downRight b
ζ = refl
k=2 : k = 2
k=2 = pos-lc (ℤ+-lc (pos k) (pos 2) (downLeft b) (η ∙ ζ ⁻¹))
k≠2 : k ≠ 2
k≠2 = λ ()
\end{code}
## upLeft and upRight
\begin{code}
upRight : ℤ → ℤ
upRight x = sign x (num x /2)
upLeft : ℤ → ℤ
upLeft x = upRight (predℤ x)
\end{code}
## upLeft and upRight properties
\begin{code}
upRight-suc : (a : ℤ) → upRight (succℤ (succℤ a)) = succℤ (upRight a)
upRight-suc (pos zero) = refl
upRight-suc (pos (succ zero)) = refl
upRight-suc (pos (succ (succ x))) = refl
upRight-suc (negsucc zero) = refl
upRight-suc (negsucc (succ zero)) = refl
upRight-suc (negsucc (succ (succ x))) = refl
upRight-pred : (a : ℤ) → upRight (predℤ (predℤ a)) = predℤ (upRight a)
upRight-pred (pos 0) = refl
upRight-pred (pos 1) = refl
upRight-pred (pos (succ (succ x))) = refl
upRight-pred (negsucc 0) = refl
upRight-pred (negsucc 1) = refl
upRight-pred (negsucc (succ (succ x))) = refl
upLeft-suc : (a : ℤ) → upLeft (succℤ (succℤ a)) = succℤ (upLeft a)
upLeft-suc (pos zero) = refl
upLeft-suc (pos (succ zero)) = refl
upLeft-suc (pos (succ (succ x))) = refl
upLeft-suc (negsucc zero) = refl
upLeft-suc (negsucc (succ zero)) = refl
upLeft-suc (negsucc (succ (succ x))) = refl
upLeft-pred : (a : ℤ) → upLeft (predℤ (predℤ a)) = predℤ (upLeft a)
upLeft-pred = upRight-pred ∘ predℤ
upRight-succ-pos : (a : ℕ) → upRight (pos a) ≤ℤ upRight (succℤ (pos a))
upRight-succ-pos 0 = 0 , refl
upRight-succ-pos 1 = 1 , refl
upRight-succ-pos (succ (succ a))
= m , (ℤ-left-succ-pos (pos (a /2)) m ∙ ap succℤ (pr₂ IH))
where
IH = upRight-succ-pos a
m = pr₁ IH
upRight-succ-negsucc
: (a : ℕ) → upRight (negsucc a) ≤ℤ upRight (succℤ (negsucc a))
upRight-succ-negsucc 0 = 1 , refl
upRight-succ-negsucc 1 = 0 , refl
upRight-succ-negsucc (succ (succ a))
= m , (ℤ-left-pred-pos (negsucc (a /2)) m
∙ ap predℤ (pr₂ IH)
∙ upRight-pred _ ⁻¹
∙ ap (upRight ∘ predℤ) (predsuccℤ _))
where
IH = upRight-succ-negsucc a
m = pr₁ IH
upRight-≤-succ : (a : ℤ) → upRight a ≤ℤ upRight (succℤ a)
upRight-≤-succ = ℤ-elim (λ a → upRight a ≤ℤ upRight (succℤ a))
upRight-succ-pos upRight-succ-negsucc
upRight-monotone : (a b : ℤ) → a ≤ℤ b → upRight a ≤ℤ upRight b
upRight-monotone = ≤-succ-to-monotone upRight upRight-≤-succ
upLeft-monotone : (a b : ℤ) → a ≤ℤ b → upLeft a ≤ℤ upLeft b
upLeft-monotone a b (n , refl)
= upRight-monotone _ _ (n , ℤ-left-pred-pos a n)
upRight≤upLeft-succ : (a : ℤ) → upRight a = upLeft (succℤ a)
upRight≤upLeft-succ a = ap upRight (predsuccℤ _ ⁻¹)
upRight≤upLeft : (a b : ℤ) → a <ℤ b → upRight a ≤ℤ upLeft b
upRight≤upLeft a b (n , refl)
= transport (_≤ℤ upLeft (succℤ a +pos n)) (upRight≤upLeft-succ a ⁻¹)
(upLeft-monotone _ _ (n , refl))
upRight-<-succ-succ : (a : ℤ) → upRight a <ℤ upRight (succℤ (succℤ a))
upRight-<-succ-succ a
= transport (upRight a <ℤ_) (upRight-suc a ⁻¹) (0 , refl)
upRight-<<' : (a b : ℤ) (n : ℕ) → (a +pos succ n) = predℤ b
→ upRight a <ℤ upRight b
upRight-<<' a b zero e
= transport (λ - → upRight a <ℤ upRight -)
(ap succℤ e ∙ succpredℤ _)
(upRight-<-succ-succ a)
upRight-<<' a b (succ n) e
= transport (λ - → upRight a <ℤ upRight -)
(ap succℤ e ∙ succpredℤ _)
(ℤ≤-trans _ _ _ (upRight-<-succ-succ a)
(upRight-monotone _ _
(succ n , ap succℤ (ℤ-left-succ-pos (succℤ a) n
∙ ap succℤ (ℤ-left-succ-pos a n)))))
upRight-<< : (a b : ℤ) → a <ℤ predℤ b → upRight a <ℤ upRight b
upRight-<< a b (n , e)
= upRight-<<' a b n (ℤ-left-succ-pos a n ⁻¹ ∙ e)
upLeft-<< : (a b : ℤ) → a <ℤ b → upLeft a <ℤ upRight b
upLeft-<< a b (n , refl)
= upRight-<< (predℤ a) b
(n , (ap (_+pos n) (succpredℤ _) ∙ predsuccℤ _ ⁻¹
∙ ap predℤ (ℤ-left-succ-pos a n ⁻¹)))
\end{code}
## above and above'
\begin{code}
_above_ : ℤ → ℤ → 𝓤₀ ̇
b above a = upLeft a ≤ℤ b ≤ℤ upRight a
_above'_ : ℤ → ℤ → 𝓤₀ ̇
a above' b = (a = upLeft b) + (a = upRight b)
upLeft-=-+-pos : (a : ℕ) → (upLeft (pos a) = upRight (pos a))
+ (succℤ (upLeft (pos a)) = upRight (pos a))
upLeft-=-+-pos 0 = inr refl
upLeft-=-+-pos 1 = inl refl
upLeft-=-+-pos (succ (succ a))
= Cases (upLeft-=-+-pos a)
(λ l → inl (upLeft-suc (pos a) ∙ ap succℤ l))
(λ r → inr (ap succℤ (upLeft-suc (pos a) ∙ r)))
upLeft-=-+-negsucc
: (a : ℕ)
→ (upLeft (negsucc a) = upRight (negsucc a))
+ (succℤ (upLeft (negsucc a)) = upRight (negsucc a))
upLeft-=-+-negsucc 0 = inl refl
upLeft-=-+-negsucc 1 = inr refl
upLeft-=-+-negsucc (succ (succ a))
= Cases (upLeft-=-+-negsucc a)
(λ l → inl (upLeft-pred (negsucc a) ∙ ap predℤ l))
(λ r → inr (predsuccℤ _ ⁻¹ ∙ ap predℤ r))
upLeft-=-+
: (a : ℤ) → (upLeft a = upRight a) + (succℤ (upLeft a) = upRight a)
upLeft-=-+ = ℤ-elim _ upLeft-=-+-pos upLeft-=-+-negsucc
upLeft≤upRight : (a : ℤ) → upLeft a ≤ℤ upRight a
upLeft≤upRight a = upRight-monotone _ _ (1 , succpredℤ _)
upLeft-upRight-mono : (a b : ℤ) → a ≤ℤ b → upLeft a ≤ℤ upRight b
upLeft-upRight-mono a b a≤b
= ℤ≤-trans _ _ _ (upLeft-monotone _ _ a≤b) (upLeft≤upRight b)
upLeft≤upRightⁿ : (a : ℤ) (n : ℕ) → rec a upLeft n ≤ℤ rec a upRight n
upLeft≤upRightⁿ a 0 = ℤ≤-refl a
upLeft≤upRightⁿ a 1 = upLeft≤upRight a
upLeft≤upRightⁿ a (succ (succ n))
= upLeft-upRight-mono _ _ (upLeft≤upRightⁿ a (succ n))
upLeft-above : (a : ℤ) → upLeft a above a
upLeft-above a = ℤ≤-refl _ , upLeft≤upRight a
upRight-above : (a : ℤ) → upRight a above a
upRight-above a = upLeft≤upRight a , ℤ≤-refl _
above'-implies-above : (a b : ℤ) → a above' b → a above b
above'-implies-above .(upLeft b) b (inl refl) = upLeft-above b
above'-implies-above .(upRight b) b (inr refl) = upRight-above b
above-implies-above' : (a b : ℤ) → a above b → a above' b
above-implies-above' a b (l≤a , a≤r)
= Cases (ℤ≤-split (upLeft b) a l≤a)
(λ l<a → Cases (ℤ≤-split a (upRight b) a≤r)
(λ a<r → 𝟘-elim
(Cases (upLeft-=-+ b)
(λ e → ℤ-less-not-bigger-or-equal (upLeft b) a
l<a
(transport (a ≤ℤ_) (e ⁻¹) a≤r))
(λ e → ℤ-less-not-bigger-or-equal a (upRight b)
a<r
(transport (_≤ℤ a) e l<a))))
inr)
(inl ∘ _⁻¹)
\end{code}
## Relationship between below and above
\begin{code}
upRight-downLeft-pos : (b : ℕ) → pos b = upRight (downLeft (pos b))
upRight-downLeft-pos 0 = refl
upRight-downLeft-pos (succ b)
= ap succℤ (upRight-downLeft-pos b)
∙ upRight-suc (downLeft (pos b)) ⁻¹
∙ ap (upRight ∘ succℤ) (ℤ-left-succ-pos (pos b) b ⁻¹)
upRight-downLeft-negsucc
: (b : ℕ) → negsucc b = upRight (downLeft (negsucc b))
upRight-downLeft-negsucc 0 = refl
upRight-downLeft-negsucc (succ b)
= ap predℤ (upRight-downLeft-negsucc b)
∙ upRight-pred (downLeft (negsucc b)) ⁻¹
∙ ap (upRight ∘ predℤ) (ℤ-left-pred-negsucc (negsucc b) b ⁻¹)
upRight-downMid-pos : (b : ℕ) → pos b = upRight (downMid (pos b))
upRight-downMid-pos 0 = refl
upRight-downMid-pos (succ b)
= ap succℤ (upRight-downMid-pos b)
∙ upRight-suc (downMid (pos b)) ⁻¹
∙ ap (upRight ∘ succℤ ∘ succℤ) (ℤ-left-succ-pos (pos b) b ⁻¹)
upRight-downMid-negsucc
: (b : ℕ) → negsucc b = upRight (downMid (negsucc b))
upRight-downMid-negsucc 0 = refl
upRight-downMid-negsucc (succ b)
= ap predℤ (upRight-downMid-negsucc b)
∙ upRight-pred (downMid (negsucc b)) ⁻¹
∙ ap (upRight ∘ predℤ) (predsuccℤ _)
∙ ap upRight (ℤ-left-pred-negsucc (negsucc b) b ⁻¹)
∙ ap upRight (succpredℤ _ ⁻¹)
upRight-downLeft : (a : ℤ) → a = upRight (downLeft a)
upRight-downLeft
= ℤ-elim _ upRight-downLeft-pos upRight-downLeft-negsucc
upRight-downMid : (a : ℤ) → a = upRight (downMid a)
upRight-downMid = ℤ-elim _ upRight-downMid-pos upRight-downMid-negsucc
upRight-downRight : (a : ℤ) → succℤ a = upRight (downRight a)
upRight-downRight a = ap succℤ (upRight-downLeft a)
∙ upRight-suc (downLeft a) ⁻¹
upLeft-downLeft : (a : ℤ) → succℤ (upLeft (downLeft a)) = a
upLeft-downLeft a = upRight-suc (predℤ (downLeft a)) ⁻¹
∙ ap (upRight ∘ succℤ) (succpredℤ _)
∙ upRight-downMid a ⁻¹
upLeft-downMid : (a : ℤ) → upLeft (downMid a) = a
upLeft-downMid a = ap upRight (pred-downMid a) ∙ upRight-downLeft a ⁻¹
upLeft-downRight : (a : ℤ) → upLeft (downRight a) = a
upLeft-downRight a
= ap upRight (pred-downRight a) ∙ upRight-downMid a ⁻¹
below-implies-above-dL : (b : ℤ) → b above (downLeft b)
below-implies-above-dL b
= (1 , upLeft-downLeft b)
, (0 , upRight-downLeft b)
below-implies-above-dM : (b : ℤ) → b above (downMid b)
below-implies-above-dM b
= (0 , upLeft-downMid b)
, (0 , upRight-downMid b)
below-implies-above-dR : (b : ℤ) → b above (downRight b)
below-implies-above-dR b
= (0 , upLeft-downRight b)
, (1 , upRight-downRight b)
below'-implies-above : (a b : ℤ) → a below' b → b above a
below'-implies-above .(downLeft b) b (inl refl)
= below-implies-above-dL b
below'-implies-above .(downMid b) b (inr (inl refl))
= below-implies-above-dM b
below'-implies-above .(downRight b) b (inr (inr refl))
= below-implies-above-dR b
dL-transform : (a : ℤ) → downLeft (succℤ a) = (succℤ ^ 2) (downLeft a)
dL-transform a = ℤ-left-succ a (succℤ a) ∙ ap succℤ (ℤ-right-succ a a)
dL-transform-pred
: (a : ℤ) → downLeft (predℤ a) = (predℤ ^ 2) (downLeft a)
dL-transform-pred a
= ℤ-left-pred a (predℤ a) ∙ ap predℤ (ℤ-right-pred a a)
dR-transform
: (a : ℤ) → downRight (succℤ a) = (succℤ ^ 2) (downRight a)
dR-transform a = ap (succℤ ^ 2) (dL-transform a)
dR-transform-pred
: (a b : ℤ) → downRight (predℤ a) = (predℤ ^ 2) (downRight a)
dR-transform-pred a b = ap (succℤ ^ 2) (dL-transform-pred a)
∙ ap succℤ (succpredℤ _)
∙ succpredℤ _
∙ predsuccℤ _ ⁻¹
∙ ap predℤ (predsuccℤ _ ⁻¹)
downLeft-upRight : (b : ℤ) → downLeft (upRight b) ≤ℤ b
downLeft-upRight
= ℤ-elim _ downLeft-upRight-pos downLeft-upRight-negsucc
where
downLeft-upRight-pos : (b : ℕ) → downLeft (upRight (pos b)) ≤ℤ pos b
downLeft-upRight-pos 0 = 0 , refl
downLeft-upRight-pos 1 = 1 , refl
downLeft-upRight-pos (succ (succ b))
= transport (_≤ℤ succℤ (succℤ (pos b)))
((ap downLeft (upRight-suc (pos b))
∙ dL-transform (upRight (pos b))) ⁻¹)
(ℤ≤-succⁿ-inj _ _ 2 (downLeft-upRight-pos b))
downLeft-upRight-negsucc
: (b : ℕ) → downLeft (upRight (negsucc b)) ≤ℤ negsucc b
downLeft-upRight-negsucc 0 = 1 , refl
downLeft-upRight-negsucc 1 = 0 , refl
downLeft-upRight-negsucc (succ (succ b))
= transport (_≤ℤ predℤ (predℤ (negsucc b)))
((ap downLeft (upRight-pred (negsucc b))
∙ dL-transform-pred (upRight (negsucc b))) ⁻¹)
(ℤ≤-predⁿ-inj _ _ 2 (downLeft-upRight-negsucc b))
downLeft-upLeft : (b : ℤ) → downLeft (upLeft b) ≤ℤ b
downLeft-upLeft b
= ℤ≤-trans _ _ _
(downLeft-monotone _ _ (upLeft≤upRight b))
(downLeft-upRight b)
downRight-upLeft-pos : (b : ℕ) → pos b ≤ℤ downRight (upLeft (pos b))
downRight-upLeft-pos 0 = 0 , refl
downRight-upLeft-pos 1 = 1 , refl
downRight-upLeft-pos (succ (succ b))
= transport ((succℤ ^ 2) (pos b) ≤ℤ_)
((ap downRight (upLeft-suc (pos b))
∙ dR-transform (upLeft (pos b))) ⁻¹)
(ℤ≤-succⁿ-inj _ _ 2 (downRight-upLeft-pos b))
downRight-upLeft-negsucc
: (b : ℕ) → negsucc b ≤ℤ downRight (upLeft (negsucc b))
downRight-upLeft-negsucc 0 = 1 , refl
downRight-upLeft-negsucc 1 = 0 , refl
downRight-upLeft-negsucc (succ (succ b))
= transport ((predℤ ^ 2) (negsucc b) ≤ℤ_)
((ap downRight (upLeft-pred (negsucc b))
∙ dR-transform-pred (upLeft (negsucc b)) (pos b)) ⁻¹)
(ℤ≤-predⁿ-inj _ _ 2 (downRight-upLeft-negsucc b))
downRight-upLeft : (b : ℤ) → b ≤ℤ downRight (upLeft b)
downRight-upLeft
= ℤ-elim _ downRight-upLeft-pos downRight-upLeft-negsucc
downRight-upRight : (b : ℤ) → b ≤ℤ downRight (upRight b)
downRight-upRight b
= ℤ≤-trans _ _ _
(downRight-upLeft b)
(downRight-monotone _ _ (upLeft≤upRight b))
above-upRight : (b : ℤ) → b below (upRight b)
above-upRight b = downLeft-upRight b , downRight-upRight b
above-upLeft : (b : ℤ) → b below (upLeft b)
above-upLeft b = downLeft-upLeft b , downRight-upLeft b
above'-implies-below : (a b : ℤ) → a above' b → b below a
above'-implies-below .(upLeft b) b (inl refl) = above-upLeft b
above'-implies-below .(upRight b) b (inr refl) = above-upRight b
above-implies-below : (a b : ℤ) → a above b → b below a
above-implies-below a b
= above'-implies-below a b ∘ above-implies-above' a b
below-implies-above : (a b : ℤ) → a below b → b above a
below-implies-above a b
= below'-implies-above a b ∘ below-implies-below' a b
above-downLeft : (a : ℤ) → a above (downLeft a)
above-downLeft a
= below-implies-above (downLeft a) a (downLeft-below a)
above-downMid : (a : ℤ) → a above (downMid a)
above-downMid a
= below-implies-above (downMid a) a (downMid-below a)
above-downRight : (a : ℤ) → a above (downRight a)
above-downRight a
= below-implies-above (downRight a) a (downRight-below a)
\end{code}