Tom de Jong, 12 & 13 May 2020.
We specialize the work of Directed.lagda to ℕ-indexed diagrams.
\begin{code}
{-# OPTIONS --safe --without-K #-}
open import MLTT.Spartan
open import UF.PropTrunc
open import UF.FunExt
module DomainTheory.Bilimits.Sequential
(pt : propositional-truncations-exist)
(fe : Fun-Ext)
(𝓤 𝓣 : Universe)
where
open PropositionalTruncation pt
open import DomainTheory.Basics.Dcpo pt fe 𝓤₀
open import DomainTheory.Basics.Miscelanea pt fe 𝓤₀
open import DomainTheory.Bilimits.Directed pt fe 𝓤₀ 𝓤 𝓣
open import Naturals.Addition renaming (_+_ to _+'_)
open import Naturals.Properties
open import Naturals.Order hiding (subtraction')
open import Notation.Order
open import UF.DiscreteAndSeparated
open import UF.Equiv
open import UF.EquivalenceExamples
open import UF.Subsingletons
module SequentialDiagram
(𝓓 : ℕ → DCPO {𝓤} {𝓣})
(ε : (n : ℕ) → ⟨ 𝓓 n ⟩ → ⟨ 𝓓 (succ n) ⟩)
(π : (n : ℕ) → ⟨ 𝓓 (succ n) ⟩ → ⟨ 𝓓 n ⟩)
(επ-deflation : (n : ℕ) (x : ⟨ 𝓓 (succ n) ⟩) → ε n (π n x) ⊑⟨ 𝓓 (succ n) ⟩ x )
(ε-section-of-π : (n : ℕ) → π n ∘ ε n ∼ id )
(ε-is-continuous : (n : ℕ) → is-continuous (𝓓 n) (𝓓 (succ n)) (ε n))
(π-is-continuous : (n : ℕ) → is-continuous (𝓓 (succ n)) (𝓓 n) (π n))
where
\end{code}
We start by introducing some helper functions that will enable us to define
functions by induction on the difference m - n for two natural numbers n and m
with n ≤ m.
We use left-addition and subtraction' below instead of right-addition and
subtraction, because addition is defined by induction on its second argument. So
we get more definitional equalities using this approach.
\begin{code}
left-addition-is-embedding : (n m : ℕ) → is-prop (Σ k ꞉ ℕ , n +' k = m)
left-addition-is-embedding n m =
equiv-to-prop γ (right-addition-is-embedding n m)
where
γ : (Σ k ꞉ ℕ , n +' k = m) ≃ (Σ k ꞉ ℕ , k +' n = m)
γ = Σ-cong ϕ
where
ϕ : (k : ℕ) → (n +' k = m) ≃ (k +' n = m)
ϕ k = logically-equivalent-props-are-equivalent ℕ-is-set ℕ-is-set
(λ p → addition-commutativity k n ∙ p)
(λ q → addition-commutativity n k ∙ q)
subtraction' : (n m : ℕ) → n ≤ m → Σ k ꞉ ℕ , n +' k = m
subtraction' n m l = k , q
where
k : ℕ
k = pr₁ (subtraction n m l)
q : n +' k = m
q = addition-commutativity n k ∙ pr₂ (subtraction n m l)
\end{code}
Define repeated compositions of εs.
\begin{code}
ε⁺-helper : (n m k : ℕ) → n +' k = m → ⟨ 𝓓 n ⟩ → ⟨ 𝓓 m ⟩
ε⁺-helper n n zero refl = id
ε⁺-helper n m (succ k) refl = ε (n +' k) ∘ IH
where
IH : ⟨ 𝓓 n ⟩ → ⟨ 𝓓 (n +' k) ⟩
IH = ε⁺-helper n (n +' k) k refl
ε⁺-helper-on-succ : (n m k : ℕ) (p : n +' succ k = succ m)
→ ε⁺-helper n (succ m) (succ k) p
∼ ε m ∘ ε⁺-helper n m k (succ-lc p)
ε⁺-helper-on-succ n m k refl x = refl
ε⁺-helper-Σ : (n m : ℕ) → (Σ k ꞉ ℕ , n +' k = m) → ⟨ 𝓓 n ⟩ → ⟨ 𝓓 m ⟩
ε⁺-helper-Σ n m (k , p) = ε⁺-helper n m k p
ε⁺ : {n m : ℕ} → n ≤ m → ⟨ 𝓓 n ⟩ → ⟨ 𝓓 m ⟩
ε⁺ {n} {m} l = ε⁺-helper-Σ n m (subtraction' n m l)
\end{code}
Similarly for π.
\begin{code}
π⁺-helper : (n m k : ℕ) → n +' k = m → ⟨ 𝓓 m ⟩ → ⟨ 𝓓 n ⟩
π⁺-helper n n zero refl = id
π⁺-helper n m (succ k) refl = IH ∘ π (n +' k)
where
IH : ⟨ 𝓓 (n +' k) ⟩ → ⟨ 𝓓 n ⟩
IH = π⁺-helper n (n +' k) k refl
π⁺-helper-on-succ : (n m k : ℕ) (p : n +' succ k = succ m)
→ π⁺-helper n (succ m) (succ k) p
∼ π⁺-helper n m k (succ-lc p) ∘ π m
π⁺-helper-on-succ n m k refl x = refl
π⁺-helper-Σ : (n m : ℕ) → (Σ k ꞉ ℕ , n +' k = m) → ⟨ 𝓓 m ⟩ → ⟨ 𝓓 n ⟩
π⁺-helper-Σ n m (k , p) = π⁺-helper n m k p
π⁺ : {n m : ℕ} → (n ≤ m) → ⟨ 𝓓 m ⟩ → ⟨ 𝓓 n ⟩
π⁺ {n} {m} l = π⁺-helper-Σ n m (subtraction' n m l)
\end{code}
Since ε n ∘ π n is a deflation, so is ε⁺ l ∘ π⁺ l for l : n ≤ m.
\begin{code}
ε⁺π⁺-deflation-helper : (n m k : ℕ) (p : n +' k = m) (x : ⟨ 𝓓 m ⟩)
→ ε⁺-helper n m k p (π⁺-helper n m k p x) ⊑⟨ 𝓓 m ⟩ x
ε⁺π⁺-deflation-helper n n zero refl x = reflexivity (𝓓 n) x
ε⁺π⁺-deflation-helper n m (succ k) refl x =
ε⁺-helper n m (succ k) refl (π⁺-helper n m (succ k) refl x) ⊑⟨ 𝓓 m ⟩[ u₁ ]
ε (n +' k) (ε' (π' (π (n +' k) x))) ⊑⟨ 𝓓 m ⟩[ u₂ ]
ε (n +' k) (π (n +' k) x) ⊑⟨ 𝓓 m ⟩[ u₃ ]
x ∎⟨ 𝓓 m ⟩
where
ε' : ⟨ 𝓓 n ⟩ → ⟨ 𝓓 (n +' k) ⟩
ε' = ε⁺-helper n (n +' k) k refl
π' : ⟨ 𝓓 (n +' k) ⟩ → ⟨ 𝓓 n ⟩
π' = π⁺-helper n (n +' k) k refl
u₁ = reflexivity (𝓓 m) (ε⁺-helper n (n +' succ k) (succ k) refl
(π⁺-helper n (n +' succ k) (succ k) refl x))
u₂ = mon (ε' (π' (π (n +' k) x))) (π (n +' k) x) IH
where
mon : is-monotone (𝓓 (n +' k)) (𝓓 (succ (n +' k))) (ε (n +' k))
mon = monotone-if-continuous (𝓓 (n +' k)) (𝓓 (succ (n +' k)))
(ε (n +' k) , ε-is-continuous (n +' k))
IH : ε' (π' (π (n +' k) x)) ⊑⟨ 𝓓 (n +' k) ⟩ π (n +' k) x
IH = ε⁺π⁺-deflation-helper n (n +' k) k refl (π (n +' k) x)
u₃ = επ-deflation (n +' k) x
ε⁺π⁺-deflation : {n m : ℕ} (l : n ≤ m) (x : ⟨ 𝓓 m ⟩)
→ ε⁺ {n} {m} l (π⁺ {n} {m} l x) ⊑⟨ 𝓓 m ⟩ x
ε⁺π⁺-deflation {n} {m} l = ε⁺π⁺-deflation-helper n m k q
where
k : ℕ
k = pr₁ (subtraction n m l)
q : n +' k = m
q = addition-commutativity n k ∙ pr₂ (subtraction n m l)
\end{code}
Since ε n is a section of π n, so is ε⁺ l of π⁺ l for l : n ≤ m.
\begin{code}
ε⁺-section-of-π⁺-helper : (n m k : ℕ) (p : n +' k = m)
→ π⁺-helper n m k p ∘ ε⁺-helper n m k p ∼ id
ε⁺-section-of-π⁺-helper n n zero refl x = refl
ε⁺-section-of-π⁺-helper n m (succ k) refl x =
π⁺-helper n m (succ k) refl (ε⁺-helper n m (succ k) refl x) =⟨ refl ⟩
π' (π (n +' k) (ε (n +' k) (ε' x))) =⟨ q ⟩
π' (id (ε' x)) =⟨ IH ⟩
x ∎
where
ε' : ⟨ 𝓓 n ⟩ → ⟨ 𝓓 (n +' k) ⟩
ε' = ε⁺-helper n (n +' k) k refl
π' : ⟨ 𝓓 (n +' k) ⟩ → ⟨ 𝓓 n ⟩
π' = π⁺-helper n (n +' k) k refl
q = ap π' (ε-section-of-π (n +' k) (ε' x))
IH = ε⁺-section-of-π⁺-helper n (n +' k) k refl x
ε⁺-section-of-π⁺ : {n m : ℕ} (l : n ≤ m)
→ π⁺ l ∘ ε⁺ {n} {m} l ∼ id
ε⁺-section-of-π⁺ {n} {m} l = ε⁺-section-of-π⁺-helper n m k q
where
k : ℕ
k = pr₁ (subtraction n m l)
q : n +' k = m
q = addition-commutativity n k ∙ pr₂ (subtraction n m l)
\end{code}
Since ε and π are continuous, so are ε⁺ and π⁺.
\begin{code}
ε⁺-is-continuous-helper : (n m k : ℕ) (p : n +' k = m)
→ is-continuous (𝓓 n) (𝓓 m) (ε⁺-helper n m k p)
ε⁺-is-continuous-helper n n zero refl = id-is-continuous (𝓓 n)
ε⁺-is-continuous-helper n m (succ k) refl =
∘-is-continuous (𝓓 n) (𝓓 (n +' k)) (𝓓 m)
(ε⁺-helper n (n +' k) k refl) (ε (n +' k)) IH (ε-is-continuous (n +' k))
where
IH : is-continuous (𝓓 n) (𝓓 (n +' k)) (ε⁺-helper n (n +' k) k refl)
IH = ε⁺-is-continuous-helper n (n +' k) k refl
ε⁺-is-continuous : {n m : ℕ} (l : n ≤ m)
→ is-continuous (𝓓 n) (𝓓 m) (ε⁺ {n} {m} l)
ε⁺-is-continuous {n} {m} l = ε⁺-is-continuous-helper n m k q
where
k : ℕ
k = pr₁ (subtraction n m l)
q : n +' k = m
q = addition-commutativity n k ∙ pr₂ (subtraction n m l)
π⁺-is-continuous-helper : (n m k : ℕ) (p : n +' k = m)
→ is-continuous (𝓓 m) (𝓓 n) (π⁺-helper n m k p)
π⁺-is-continuous-helper n n zero refl = id-is-continuous (𝓓 n)
π⁺-is-continuous-helper n m (succ k) refl =
∘-is-continuous (𝓓 m) (𝓓 (n +' k)) (𝓓 n)
(π (n +' k)) (π⁺-helper n (n +' k) k refl) (π-is-continuous (n +' k)) IH
where
IH : is-continuous (𝓓 (n +' k)) (𝓓 n) (π⁺-helper n (n +' k) k refl)
IH = π⁺-is-continuous-helper n (n +' k) k refl
π⁺-is-continuous : {n m : ℕ} (l : n ≤ m)
→ is-continuous (𝓓 m) (𝓓 n) (π⁺ {n} {m} l)
π⁺-is-continuous {n} {m} l = π⁺-is-continuous-helper n m k q
where
k : ℕ
k = pr₁ (subtraction n m l)
q : n +' k = m
q = addition-commutativity n k ∙ pr₂ (subtraction n m l)
\end{code}
(ε⁺ ≤-refl n) and (π⁺ ≤-refl n) are both the identity on 𝓓 n.
\begin{code}
ε⁺-id : (n : ℕ) → ε⁺ {n} {n} (≤-refl n) ∼ id
ε⁺-id n x = ε⁺ {n} {n} (≤-refl n) x =⟨ refl ⟩
ε⁺-helper-Σ n n s x =⟨ q ⟩
ε⁺-helper-Σ n n (zero , refl) x =⟨ refl ⟩
x ∎
where
s : Σ k ꞉ ℕ , n +' k = n
s = subtraction' n n (≤-refl n)
q = ap (λ - → ε⁺-helper-Σ n n - x)
(left-addition-is-embedding n n s (zero , refl))
π⁺-id : (n : ℕ) → π⁺ {n} {n} (≤-refl n) ∼ id
π⁺-id n x = π⁺ {n} {n} (≤-refl n) x =⟨ refl ⟩
π⁺-helper-Σ n n s x =⟨ q ⟩
π⁺-helper-Σ n n (zero , refl) x =⟨ refl ⟩
x ∎
where
s : Σ k ꞉ ℕ , n +' k = n
s = subtraction' n n (≤-refl n)
q = ap (λ - → π⁺-helper-Σ n n - x)
(left-addition-is-embedding n n s (zero , refl))
\end{code}
The most laborious part: composing two ε⁺s is ε⁺ on ≤-trans. And similarly for π⁺.
\begin{code}
ε⁺-comp-helper : {n m k : ℕ} (a b : ℕ) (p : n +' a = m) (q : m +' b = k)
→ ε⁺-helper m k b q ∘ ε⁺-helper n m a p
∼ ε⁺-helper n k (a +' b)
((addition-associativity n a b) ⁻¹ ∙ ap (λ - → - +' b) p ∙ q)
ε⁺-comp-helper {n} {m} {k} a zero refl refl x = refl
ε⁺-comp-helper {n} {m} {k} a (succ b) refl refl x =
ε _ (ε⁺-helper (n +' a) _ b refl (ε⁺-helper n _ a refl x)) =⟨ i ⟩
ε _ (ε⁺-helper n (n +' a +' b) (a +' b) p x) =⟨ refl ⟩
ε _ (ε⁺-helper-Σ n (n +' a +' b) (a +' b , p) x) =⟨ ii ⟩
ε _ (ε⁺-helper-Σ n (n +' a +' b) (a +' b , succ-lc p') x) =⟨ refl ⟩
ε _ (ε⁺-helper n (n +' a +' b) (a +' b) (succ-lc p') x) =⟨ iii ⟩
ε⁺-helper n (n +' a +' succ b) (succ (a +' b)) p' x =⟨ refl ⟩
ε⁺-helper n (n +' a +' succ b) (a +' succ b) p' x ∎
where
p : n +' (a +' b) = n +' a +' b
p = addition-associativity n a b ⁻¹
p' : n +' (a +' succ b) = n +' a +' succ b
p' = addition-associativity n a (succ b) ⁻¹
i = ap (ε (n +' a +' b)) (IH x)
where
IH : ε⁺-helper (n +' a) (n +' a +' b) b refl ∘ ε⁺-helper n (n +' a) a refl
∼ ε⁺-helper n (n +' a +' b) (a +' b) (addition-associativity n a b ⁻¹)
IH = ε⁺-comp-helper {n} {n +' a} {n +' a +' b} a b refl refl
ii = ap (λ - → ε (n +' a +' b) (ε⁺-helper-Σ n (n +' a +' b) - x)) h
where
h : a +' b , p = a +' b , succ-lc p'
h = left-addition-is-embedding n (n +' a +' b)
(a +' b , p) (a +' b , succ-lc p')
iii = (ε⁺-helper-on-succ n (n +' a +' b) (a +' b) p' x) ⁻¹
ε⁺-comp : {n m k : ℕ} (l₁ : n ≤ m) (l₂ : m ≤ k)
→ ε⁺ {m} {k} l₂ ∘ ε⁺ {n} {m} l₁ ∼ ε⁺ (≤-trans n m k l₁ l₂)
ε⁺-comp {n} {m} {k} l₁ l₂ x =
ε⁺ {m} {k} l₂ (ε⁺ {n} {m} l₁ x) =⟨ refl ⟩
ε⁺-helper m k b q (ε⁺-helper n m a p x) =⟨ i ⟩
ε⁺-helper n k (a +' b) r x =⟨ refl ⟩
ε⁺-helper-Σ n k (a +' b , r) x =⟨ ii ⟩
ε⁺-helper-Σ n k s x =⟨ refl ⟩
ε⁺ (≤-trans n m k l₁ l₂) x ∎
where
a : ℕ
a = pr₁ (subtraction' n m l₁)
p : n +' a = m
p = pr₂ (subtraction' n m l₁)
b : ℕ
b = pr₁ (subtraction' m k l₂)
q : m +' b = k
q = pr₂ (subtraction' m k l₂)
r : n +' (a +' b) = k
r = (addition-associativity n a b) ⁻¹ ∙ ap (λ - → - +' b) p ∙ q
s : Σ c ꞉ ℕ , n +' c = k
s = subtraction' n k (≤-trans n m k l₁ l₂)
i = ε⁺-comp-helper a b p q x
ii = ap (λ - → ε⁺-helper-Σ n k - x) h
where
h : a +' b , r = s
h = left-addition-is-embedding n k (a +' b , r) s
π⁺-comp-helper : {n m k : ℕ} (a b : ℕ) (p : n +' a = m) (q : m +' b = k)
→ π⁺-helper n m a p ∘ π⁺-helper m k b q
∼ π⁺-helper n k (a +' b)
((addition-associativity n a b) ⁻¹ ∙ ap (λ - → - +' b) p ∙ q)
π⁺-comp-helper {n} {m} {k} a zero refl refl x = refl
π⁺-comp-helper {n} {m} {k} a (succ b) refl refl x =
π⁺-helper n _ a refl (π⁺-helper (n +' a) _ b refl (π _ x)) =⟨ IH ⟩
π⁺-helper n (n +' a +' b) (a +' b) p (π _ x) =⟨ refl ⟩
π⁺-helper-Σ n (n +' a +' b) (a +' b , p) (π _ x) =⟨ i ⟩
π⁺-helper-Σ n (n +' a +' b) (a +' b , succ-lc p') (π _ x) =⟨ refl ⟩
π⁺-helper n (n +' a +' b) (a +' b) (succ-lc p') (π _ x) =⟨ ii ⟩
π⁺-helper n (n +' a +' succ b) (a +' succ b) p' x ∎
where
p : n +' (a +' b) = n +' a +' b
p = addition-associativity n a b ⁻¹
p' : n +' (a +' succ b) = n +' a +' succ b
p' = addition-associativity n a (succ b) ⁻¹
IH = π⁺-comp-helper a b refl refl (π (n +' a +' b) x)
i = ap (λ - → π⁺-helper-Σ n (n +' a +' b) - (π _ x)) h
where
h : a +' b , p = a +' b , succ-lc p'
h = left-addition-is-embedding n (n +' a +' b)
(a +' b , p) (a +' b , succ-lc p')
ii = π⁺-helper-on-succ n (n +' a +' b) (a +' b) p' x ⁻¹
π⁺-comp : {n m k : ℕ} (l₁ : n ≤ m) (l₂ : m ≤ k)
→ π⁺ {n} {m} l₁ ∘ π⁺ {m} {k} l₂ ∼ π⁺ (≤-trans n m k l₁ l₂)
π⁺-comp {n} {m} {k} l₁ l₂ x =
π⁺ {n} {m} l₁ (π⁺ {m} {k} l₂ x) =⟨ refl ⟩
π⁺-helper n m a p (π⁺-helper m k b q x) =⟨ i ⟩
π⁺-helper n k (a +' b) r x =⟨ refl ⟩
π⁺-helper-Σ n k (a +' b , r) x =⟨ ii ⟩
π⁺-helper-Σ n k s x =⟨ refl ⟩
π⁺ (≤-trans n m k l₁ l₂) x ∎
where
a : ℕ
a = pr₁ (subtraction' n m l₁)
p : n +' a = m
p = pr₂ (subtraction' n m l₁)
b : ℕ
b = pr₁ (subtraction' m k l₂)
q : m +' b = k
q = pr₂ (subtraction' m k l₂)
r : n +' (a +' b) = k
r = (addition-associativity n a b) ⁻¹ ∙ ap (λ - → - +' b) p ∙ q
s : Σ c ꞉ ℕ , n +' c = k
s = subtraction' n k (≤-trans n m k l₁ l₂)
i = π⁺-comp-helper a b p q x
ii = ap (λ - → π⁺-helper-Σ n k - x) h
where
h : a +' b , r = s
h = left-addition-is-embedding n k (a +' b , r) s
ε-in-terms-of-ε⁺ : (n : ℕ) → ε n ∼ ε⁺ {n} {succ n} (≤-succ n)
ε-in-terms-of-ε⁺ n x =
ε n x =⟨ refl ⟩
ε⁺-helper n (succ n) 1 refl x =⟨ refl ⟩
ε⁺-helper-Σ n (succ n) (1 , refl) x =⟨ p ⟩
ε⁺-helper-Σ n (succ n) s x =⟨ refl ⟩
ε⁺ (≤-succ n) x ∎
where
s : Σ k ꞉ ℕ , n +' k = succ n
s = subtraction' n (succ n) (≤-succ n)
p = ap (λ - → ε⁺-helper-Σ n (succ n) - x)
(left-addition-is-embedding n (succ n) (1 , refl) s)
π-in-terms-of-π⁺ : (n : ℕ) → π n ∼ π⁺ {n} {succ n} (≤-succ n)
π-in-terms-of-π⁺ n x =
π n x =⟨ refl ⟩
π⁺-helper n (succ n) 1 refl x =⟨ refl ⟩
π⁺-helper-Σ n (succ n) (1 , refl) x =⟨ p ⟩
π⁺-helper-Σ n (succ n) s x =⟨ refl ⟩
π⁺ (≤-succ n) x ∎
where
s : Σ k ꞉ ℕ , n +' k = succ n
s = subtraction' n (succ n) (≤-succ n)
p = ap (λ - → π⁺-helper-Σ n (succ n) - x)
(left-addition-is-embedding n (succ n) (1 , refl) s)
\end{code}
Finally, we can open the directed preorder module with the above parameters.
\begin{code}
open Diagram
{𝓤₀} {ℕ}
_≤_
(λ {n} → ≤-refl n)
(λ {n} {m} {k} → ≤-trans n m k)
≤-is-prop-valued
∣ zero ∣
(λ n m → ∣ n +' m , ≤-+ n m , ≤-+' n m ∣)
𝓓
ε⁺
π⁺
(λ {n} {m} → ε⁺π⁺-deflation {n} {m})
(λ {n} {m} → ε⁺-section-of-π⁺ {n} {m})
ε⁺-is-continuous
π⁺-is-continuous
ε⁺-id
π⁺-id
ε⁺-comp
π⁺-comp
public
module _
(𝓔 : DCPO {𝓤'} {𝓣'})
(f : (n : ℕ) → ⟨ 𝓔 ⟩ → ⟨ 𝓓 n ⟩)
(h : (n : ℕ) → π n ∘ f (succ n) ∼ f n)
where
commute-with-πs-lemma-helper : (n m k : ℕ) (p : n +' k = m)
→ π⁺-helper n m k p ∘ f m ∼ f n
commute-with-πs-lemma-helper n n zero refl y = refl
commute-with-πs-lemma-helper n m (succ k) refl y =
(π⁺-helper n (n +' succ k) (succ k) refl ∘ f (n +' succ k)) y =⟨ refl ⟩
(π⁺-helper n (n +' k) k refl ∘ π (n +' k) ∘ f (n +' succ k)) y =⟨ q ⟩
π⁺-helper n (n +' k) k refl (f (n +' k) y) =⟨ IH y ⟩
f n y ∎
where
IH : π⁺-helper n (n +' k) k refl ∘ f (n +' k) ∼ f n
IH = commute-with-πs-lemma-helper n (n +' k) k refl
q = ap (π⁺-helper n (n +' k) k refl) (h (n +' k) y)
commute-with-πs-lemma : (n m : ℕ) (l : n ≤ m)
→ π⁺ l ∘ f m ∼ f n
commute-with-πs-lemma n m l y = π⁺ l (f m y) =⟨ refl ⟩
π⁺-helper-Σ n m s (f m y) =⟨ q ⟩
f n y ∎
where
s : Σ k ꞉ ℕ , n +' k = m
s = subtraction' n m l
q = commute-with-πs-lemma-helper n m (pr₁ s) (pr₂ s) y
module _
(𝓔 : DCPO {𝓤'} {𝓣'})
(g : (n : ℕ) → ⟨ 𝓓 n ⟩ → ⟨ 𝓔 ⟩)
(h : (n : ℕ) → g (succ n) ∘ ε n ∼ g n)
where
commute-with-εs-lemma-helper : (n m k : ℕ) (p : n +' k = m)
→ g m ∘ ε⁺-helper n m k p ∼ g n
commute-with-εs-lemma-helper n n zero refl x = refl
commute-with-εs-lemma-helper n m (succ k) refl x =
(g (succ (n +' k)) ∘ ε⁺-helper n (n +' succ k) (succ k) refl) x =⟨ refl ⟩
(g (succ (n +' k)) ∘ ε (n +' k) ∘ ε⁺-helper n (n +' k) k refl) x =⟨ q ⟩
g (n +' k) (ε⁺-helper n (n +' k) k refl x) =⟨ IH x ⟩
g n x ∎
where
IH : g (n +' k) ∘ ε⁺-helper n (n +' k) k refl ∼ g n
IH = commute-with-εs-lemma-helper n (n +' k) k refl
q = h (n +' k) (ε⁺-helper n (n +' k) k refl x)
commute-with-εs-lemma : (n m : ℕ) (l : n ≤ m)
→ g m ∘ ε⁺ l ∼ g n
commute-with-εs-lemma n m l x = g m (ε⁺ l x) =⟨ refl ⟩
g m (ε⁺-helper-Σ n m s x) =⟨ q ⟩
g n x ∎
where
s : Σ k ꞉ ℕ , n +' k = m
s = subtraction' n m l
q = commute-with-εs-lemma-helper n m (pr₁ s) (pr₂ s) x
\end{code}