Todd Waugh Ambridge, January 2024 # Uniform continuity of signed-digit operations \begin{code} {-# OPTIONS --without-K --safe #-} open import MLTT.Spartan open import UF.FunExt open import Notation.Order open import Naturals.Order open import TWA.Thesis.Chapter2.Sequences open import TWA.Thesis.Chapter5.SignedDigit module TWA.Thesis.Chapter6.SignedDigitContinuity (fe : FunExt) where open import TWA.Thesis.Chapter3.ClosenessSpaces fe open import TWA.Thesis.Chapter3.ClosenessSpaces-Examples fe open import TWA.Thesis.Chapter6.SequenceContinuity fe \end{code} ## Negation \begin{code} neg-ucontinuous' : seq-f-ucontinuous¹ neg neg-ucontinuous' = map-ucontinuous' flip neg-ucontinuous : f-ucontinuous 𝟛ᴺ-ClosenessSpace 𝟛ᴺ-ClosenessSpace neg neg-ucontinuous = seq-f-ucontinuous¹-to-closeness 𝟛-is-discrete 𝟛-is-discrete neg neg-ucontinuous' \end{code} ## Binary midpoint \begin{code} div2-ucontinuous' : seq-f-ucontinuous¹ div2 div2-ucontinuous' zero = 0 , λ α β _ k () div2-ucontinuous' (succ ε) = succ (succ ε) , γ ε where γ : (ε : ℕ) → (α β : ℕ → 𝟝) → (α ∼ⁿ β) (succ (succ ε)) → (div2 α ∼ⁿ div2 β) (succ ε) γ ε α β α∼ⁿβ 0 ⋆ = ap (λ - → pr₁ (div2-aux - (α 1))) (α∼ⁿβ 0 ⋆) ∙ ap (λ - → pr₁ (div2-aux (β 0) -)) (α∼ⁿβ 1 ⋆) γ (succ ε) α β α∼ⁿβ (succ k) = γ ε α' β' α∼ⁿβ' k where α' = pr₂ (div2-aux (α 0) (α 1)) ∷ (tail (tail α)) β' = pr₂ (div2-aux (β 0) (β 1)) ∷ (tail (tail β)) α∼ⁿβ' : (α' ∼ⁿ β') (succ (succ ε)) α∼ⁿβ' 0 ⋆ = ap (λ - → pr₂ (div2-aux - (α 1))) (α∼ⁿβ 0 ⋆) ∙ ap (λ - → pr₂ (div2-aux (β 0) -)) (α∼ⁿβ 1 ⋆) α∼ⁿβ' (succ j) = α∼ⁿβ (succ (succ j)) mid-ucontinuous' : seq-f-ucontinuous² mid mid-ucontinuous' = seq-f-ucontinuous¹²-comp div2 add2 div2-ucontinuous' (zipWith-ucontinuous' _+𝟛_) mid-ucontinuous : f-ucontinuous (×-ClosenessSpace 𝟛ᴺ-ClosenessSpace 𝟛ᴺ-ClosenessSpace) 𝟛ᴺ-ClosenessSpace (uncurry mid) mid-ucontinuous = seq-f-ucontinuous²-to-closeness 𝟛-is-discrete 𝟛-is-discrete 𝟛-is-discrete mid mid-ucontinuous' mid-l-ucontinuous : (y : 𝟛ᴺ) → f-ucontinuous 𝟛ᴺ-ClosenessSpace 𝟛ᴺ-ClosenessSpace (λ x → mid x y) mid-l-ucontinuous y = seq-f-ucontinuous¹-to-closeness 𝟛-is-discrete 𝟛-is-discrete (λ x → mid x y) (seq-f-ucontinuous²-left mid mid-ucontinuous' y) mid-r-ucontinuous : (x : 𝟛ᴺ) → f-ucontinuous 𝟛ᴺ-ClosenessSpace 𝟛ᴺ-ClosenessSpace (λ y → mid x y) mid-r-ucontinuous x = seq-f-ucontinuous¹-to-closeness 𝟛-is-discrete 𝟛-is-discrete (λ y → mid x y) (seq-f-ucontinuous²-right mid mid-ucontinuous' x) \end{code} ## Infinitary midpoint \begin{code} bigMid'-ucontinuous' : seq-f-ucontinuousᴺ bigMid' bigMid'-ucontinuous' ε = dδ ε , d≤δ ε , γ ε where d : ℕ → ℕ d 0 = 0 d (succ ε) = succ (succ ε) δ : ℕ → ℕ δ 0 = 0 δ (succ ε) = succ (succ (succ (δ ε))) dδ : ℕ → ℕ × ℕ dδ ε = d ε , δ ε d≤δ : (n : ℕ) → d n ≤ δ n d≤δ 0 = ≤-refl 0 d≤δ 1 = ⋆ d≤δ (succ (succ n)) = ≤-trans n (succ (δ n)) (succ (succ (succ (δ n)))) (d≤δ (succ n)) (≤-trans (δ n) (succ (δ n)) (succ (succ (δ n))) (≤-succ (δ n)) (≤-succ (succ (δ n)))) pr₁δs< : (n : ℕ) → d n < d (succ n) pr₁δs< zero = ⋆ pr₁δs< (succ n) = ≤-refl n γ : (ε : ℕ) → (x₁ x₂ : (ℕ → 𝟛ᴺ)) → ((n : ℕ) → n < d ε → (x₁ n ∼ⁿ x₂ n) (δ ε)) → (bigMid' x₁ ∼ⁿ bigMid' x₂) ε γ (succ ε) αs βs αs∼ⁿβs zero k<ε = ap (λ - → (- +𝟛 -) +𝟝 (αs 0 1 +𝟛 αs 1 0)) (αs∼ⁿβs 0 ⋆ 0 ⋆) ∙ ap (λ - → (βs 0 0 +𝟛 βs 0 0) +𝟝 (- +𝟛 αs 1 0)) (αs∼ⁿβs 0 ⋆ 1 ⋆) ∙ ap (λ - → (βs 0 0 +𝟛 βs 0 0) +𝟝 (βs 0 1 +𝟛 -)) (αs∼ⁿβs 1 ⋆ 0 ⋆) γ (succ (succ ε)) αs βs αs∼ⁿβs (succ k) = γ (succ ε) αs' βs' αs∼ⁿβs' k where αs' = mid (tail (tail (αs 0))) (tail (αs 1)) ∷ tail (tail αs) βs' = mid (tail (tail (βs 0))) (tail (βs 1)) ∷ tail (tail βs) αs∼ⁿβs' : (n : ℕ) → n < d (succ ε) → (αs' n ∼ⁿ βs' n) (δ (succ ε)) αs∼ⁿβs' zero n<d i i<d = pr₂ (mid-ucontinuous' (δ (succ ε))) (tail (tail (αs 0))) (tail (tail (βs 0))) (tail (αs 1) ) (tail (βs 1) ) (λ i → αs∼ⁿβs zero ⋆ (succ (succ i))) (λ i i≤δϵ → αs∼ⁿβs 1 ⋆ (succ i) (≤-trans i _ _ i≤δϵ (≤-succ (δ ε)))) i i<d αs∼ⁿβs' (succ n) n<d i i≤δϵ = αs∼ⁿβs (succ (succ n)) n<d i (≤-trans i (succ (succ (δ ε))) (succ (succ (succ (succ (succ (δ ε)))))) i≤δϵ (≤-+ (δ ε) 3)) div4-ucontinuous' : seq-f-ucontinuous¹ div4 div4-ucontinuous' zero = 0 , λ α β _ k () div4-ucontinuous' (succ ε) = succ (succ ε) , γ ε where γ : (ε : ℕ) → (α β : ℕ → 𝟡) → (α ∼ⁿ β) (succ (succ ε)) → (div4 α ∼ⁿ div4 β) (succ ε) γ ε α β α∼ⁿβ 0 ⋆ = ap (λ - → pr₁ (div4-aux - (α 1))) (α∼ⁿβ 0 ⋆) ∙ ap (λ - → pr₁ (div4-aux (β 0) -)) (α∼ⁿβ 1 ⋆) γ (succ ε) α β α∼ⁿβ (succ k) = γ ε α' β' α∼ⁿβ' k where α' = pr₂ (div4-aux (α 0) (α 1)) ∷ (tail (tail α)) β' = pr₂ (div4-aux (β 0) (β 1)) ∷ (tail (tail β)) α∼ⁿβ' : (α' ∼ⁿ β') (succ (succ ε)) α∼ⁿβ' 0 ⋆ = ap (λ - → pr₂ (div4-aux - (α 1))) (α∼ⁿβ 0 ⋆) ∙ ap (λ - → pr₂ (div4-aux (β 0) -)) (α∼ⁿβ 1 ⋆) α∼ⁿβ' (succ j) = α∼ⁿβ (succ (succ j)) bigMid-ucontinuous' : seq-f-ucontinuousᴺ bigMid bigMid-ucontinuous' ε = dδ , d≤δ , ϕ where γ = bigMid'-ucontinuous' (pr₁ (div4-ucontinuous' ε)) dδ : ℕ × ℕ dδ = pr₁ γ d≤δ : pr₁ dδ ≤ pr₂ dδ d≤δ = pr₁ (pr₂ γ) ϕ : (x₁ x₂ : ℕ → 𝟛ᴺ) → ((n : ℕ) → n < pr₁ dδ → ((x₁ n) ∼ⁿ (x₂ n)) (pr₂ dδ)) → (bigMid x₁ ∼ⁿ bigMid x₂) ε ϕ αs βs αs∼ⁿβs = pr₂ (div4-ucontinuous' ε) (bigMid' αs) (bigMid' βs) (pr₂ (pr₂ γ) αs βs αs∼ⁿβs) \end{code} ## Multiplication \begin{code} mul-ucontinuous' : seq-f-ucontinuous² mul mul-ucontinuous' ε = δ ε , γ ε where δ : ℕ → ℕ × ℕ δ ε = pr₁ (bigMid-ucontinuous' ε) γ : (ε : ℕ) → (α₁ α₂ : 𝟛ᴺ) (β₁ β₂ : 𝟛ᴺ) → (α₁ ∼ⁿ α₂) (pr₁ (δ ε)) → (β₁ ∼ⁿ β₂) (pr₂ (δ ε)) → (mul α₁ β₁ ∼ⁿ mul α₂ β₂) ε γ ε α₁ α₂ β₁ β₂ α∼ β∼ = pr₂ (pr₂ (bigMid-ucontinuous' ε)) (zipWith digitMul α₁ (λ _ → β₁)) (zipWith digitMul α₂ (λ _ → β₂)) (λ n n<d k k<δ → ap (_*𝟛 β₁ k) (α∼ n n<d) ∙ ap (α₂ n *𝟛_) (β∼ k k<δ)) mul-ucontinuous : f-ucontinuous (×-ClosenessSpace 𝟛ᴺ-ClosenessSpace 𝟛ᴺ-ClosenessSpace) 𝟛ᴺ-ClosenessSpace (uncurry mul) mul-ucontinuous = seq-f-ucontinuous²-to-closeness 𝟛-is-discrete 𝟛-is-discrete 𝟛-is-discrete mul mul-ucontinuous' mul-l-ucontinuous : (y : 𝟛ᴺ) → f-ucontinuous 𝟛ᴺ-ClosenessSpace 𝟛ᴺ-ClosenessSpace (λ x → mul x y) mul-l-ucontinuous y = seq-f-ucontinuous¹-to-closeness 𝟛-is-discrete 𝟛-is-discrete (λ x → mul x y) (seq-f-ucontinuous²-left mul mul-ucontinuous' y) mul-b-ucontinuous : f-ucontinuous 𝟛ᴺ-ClosenessSpace 𝟛ᴺ-ClosenessSpace (λ x → mul x x) mul-b-ucontinuous = seq-f-ucontinuous¹-to-closeness 𝟛-is-discrete 𝟛-is-discrete (λ x → mul x x) (seq-f-ucontinuous²-both mul mul-ucontinuous') \end{code}