Todd Waugh Ambridge, January 2024 \begin{code} {-# OPTIONS --without-K --safe #-} open import MLTT.Spartan open import UF.Subsingletons open import UF.FunExt open import MLTT.SpartanList hiding (_∷_;⟨_⟩;[_]) open import TWA.Thesis.Chapter2.Sequences open import TWA.Thesis.Chapter2.Vectors open import TWA.Thesis.Chapter5.SignedDigit module TWA.Thesis.Chapter6.SignedDigitExamples (fe : FunExt) (pe : PropExt) where open import TWA.Thesis.Chapter3.ClosenessSpaces fe hiding (decidable-predicate;decidable-uc-predicate) open import TWA.Thesis.Chapter3.ClosenessSpaces-Examples fe open import TWA.Thesis.Chapter3.SearchableTypes fe open import TWA.Thesis.Chapter4.ApproxOrder fe open import TWA.Thesis.Chapter4.ParametricRegression fe open import TWA.Thesis.Chapter6.SequenceContinuity fe open import TWA.Thesis.Chapter6.SignedDigitContinuity fe open import TWA.Thesis.Chapter6.SignedDigitSearch fe pe open import TWA.Thesis.Chapter6.SignedDigitOrder fe \end{code} ## Representations we will use \begin{code} -1𝟚ᴺ -1/2𝟚ᴺ O𝟚ᴺ 1/4𝟚ᴺ 1/3𝟚ᴺ 1/2𝟚ᴺ 1𝟚ᴺ : 𝟚ᴺ -1𝟚ᴺ = repeat ₀ -1/2𝟚ᴺ = ₀ ∷ (₀ ∷ repeat ₁) O𝟚ᴺ = ₀ ∷ repeat ₁ 1/4𝟚ᴺ = ₀ ∷ (₁ ∷ (₀ ∷ repeat ₁)) 1/2𝟚ᴺ = ₁ ∷ (₁ ∷ repeat ₀) 1𝟚ᴺ = repeat ₁ 1/3𝟚ᴺ 0 = ₁ 1/3𝟚ᴺ 1 = ₀ 1/3𝟚ᴺ (succ (succ n)) = 1/3𝟚ᴺ n -1𝟛ᴺ -1/2𝟛ᴺ O𝟛ᴺ 1/4𝟛ᴺ 1/3𝟛ᴺ 1/2𝟛ᴺ 1𝟛ᴺ : 𝟛ᴺ -1𝟛ᴺ = -1𝟚ᴺ ↑ -1/2𝟛ᴺ = -1/2𝟚ᴺ ↑ O𝟛ᴺ = O𝟚ᴺ ↑ 1/4𝟛ᴺ = 1/4𝟚ᴺ ↑ 1/3𝟛ᴺ = 1/3𝟚ᴺ ↑ 1/2𝟛ᴺ = 1/2𝟚ᴺ ↑ 1𝟛ᴺ = 1𝟚ᴺ ↑ _/2 _/4 : 𝟛ᴺ → 𝟛ᴺ x /2 = mid x (repeat O) x /4 = (x /2) /2 /2 \end{code} ## Search examples \begin{code} module Search-Example1 where predicate : ℕ → decidable-uc-predicate 𝓤₀ 𝟛ᴺ-ClosenessSpace predicate ϵ = approx-order-f-uc-predicate-l 𝟛ᴺ-ClosenessSpace 𝟛ᴺ-ClosenessSpace (λ x → mid (neg x) (repeat O)) (f-ucontinuous-comp 𝟛ᴺ-ClosenessSpace 𝟛ᴺ-ClosenessSpace 𝟛ᴺ-ClosenessSpace neg (λ x → mid x (repeat O)) neg-ucontinuous (mid-l-ucontinuous (repeat O))) _≤ⁿ𝟛ᴺ_ ≤ⁿ𝟛ᴺ-is-approx-order ϵ 1/4𝟛ᴺ search-test-tb : ℕ → 𝟛ᴺ search-test-tb ϵ = pr₁ (𝟛ᴺ-csearchable-tb (predicate ϵ)) search-test : ℕ → 𝟛ᴺ search-test ϵ = pr₁ (𝟛ᴺ-csearchable (predicate ϵ)) search-test-tb' : ℕ → 𝟚ᴺ search-test-tb' ϵ = pr₁ (𝟚ᴺ-csearchable-tb (↑-pred (predicate ϵ))) search-test' : ℕ → 𝟚ᴺ search-test' ϵ = pr₁ (𝟚ᴺ-csearchable (↑-pred (predicate ϵ))) module Search-Example2 where predicate : ℕ → decidable-uc-predicate 𝓤₀ 𝟛ᴺ-ClosenessSpace predicate ϵ = C-f-decidable-uc-predicate-l 𝟛ᴺ-ClosenessSpace 𝟛ᴺ-ClosenessSpace (λ x → mul x x) (seq-f-ucontinuous¹-to-closeness 𝟛-is-discrete 𝟛-is-discrete (λ x → mul x x) (seq-f-ucontinuous²-both mul mul-ucontinuous')) ϵ 1/2𝟛ᴺ search-test-tb : ℕ → 𝟛ᴺ search-test-tb ϵ = pr₁ (𝟛ᴺ-csearchable-tb (predicate ϵ)) search-test : ℕ → 𝟛ᴺ search-test ϵ = pr₁ (𝟛ᴺ-csearchable (predicate ϵ)) search-test-tb' : ℕ → 𝟚ᴺ search-test-tb' ϵ = pr₁ (𝟚ᴺ-csearchable-tb (↑-pred (predicate ϵ))) search-test' : ℕ → 𝟚ᴺ search-test' ϵ = pr₁ (𝟚ᴺ-csearchable (↑-pred (predicate ϵ))) module Search-Example3 where predicate : ℕ → decidable-uc-predicate 𝓤₀ 𝟛ᴺ×𝟛ᴺ-ClosenessSpace predicate ϵ = C-f-decidable-uc-predicate-l 𝟛ᴺ×𝟛ᴺ-ClosenessSpace 𝟛ᴺ-ClosenessSpace (uncurry mid) mid-ucontinuous ϵ O𝟛ᴺ search-test-tb : ℕ → 𝟛ᴺ × 𝟛ᴺ search-test-tb ϵ = pr₁ (𝟛ᴺ×𝟛ᴺ-csearchable-tb (predicate ϵ)) search-test-tb' : ℕ → 𝟚ᴺ × 𝟚ᴺ search-test-tb' ϵ = pr₁ (𝟚ᴺ×𝟚ᴺ-csearchable-tb (⤊-pred (predicate ϵ))) search-test : ℕ → 𝟛ᴺ × 𝟛ᴺ search-test ϵ = pr₁ (𝟛ᴺ×𝟛ᴺ-csearchable (predicate ϵ)) search-test' : ℕ → 𝟚ᴺ × 𝟚ᴺ search-test' ϵ = pr₁ (𝟚ᴺ×𝟚ᴺ-csearchable (⤊-pred (predicate ϵ))) \end{code} ## Optimisation examples \begin{code} module Optimisation-Example1 where opt-test : ℕ → 𝟛ᴺ opt-test ϵ = pr₁ (𝟛ᴺ→𝟛ᴺ-global-opt neg neg-ucontinuous ϵ) opt-test' : ℕ → 𝟚ᴺ opt-test' ϵ = pr₁ (𝟚ᴺ→𝟛ᴺ-global-opt (neg ∘ _↑) (f-ucontinuous-comp 𝟚ᴺ-ClosenessSpace 𝟛ᴺ-ClosenessSpace 𝟛ᴺ-ClosenessSpace _↑ neg ↑-ucontinuous neg-ucontinuous) ϵ) module Optimisation-Example2 where opt-test : ℕ → 𝟛ᴺ opt-test ϵ = pr₁ (𝟛ᴺ→𝟛ᴺ-global-opt (λ x → mul x x) (seq-f-ucontinuous¹-to-closeness 𝟛-is-discrete 𝟛-is-discrete (λ x → mul x x) (seq-f-ucontinuous²-both mul mul-ucontinuous')) ϵ) opt-test' : ℕ → 𝟚ᴺ opt-test' ϵ = pr₁ (𝟚ᴺ→𝟛ᴺ-global-opt ((λ x → mul x x) ∘ _↑) (f-ucontinuous-comp 𝟚ᴺ-ClosenessSpace 𝟛ᴺ-ClosenessSpace 𝟛ᴺ-ClosenessSpace _↑ (λ x → mul x x) ↑-ucontinuous (seq-f-ucontinuous¹-to-closeness 𝟛-is-discrete 𝟛-is-discrete (λ x → mul x x) (seq-f-ucontinuous²-both mul mul-ucontinuous'))) ϵ) \end{code} ## Regression examples \begin{code} module Regression-Example (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥) (g : ⟨ Y ⟩ → ⟨ X ⟩) (ϕᵍ : f-ucontinuous Y X g) (tb : totally-bounded Y 𝓥') (S : csearchable 𝓤₀ Y) (M : ⟨ X ⟩ → (𝟛ᴺ → 𝟛ᴺ)) (𝓞 : 𝟛ᴺ → 𝟛ᴺ) {n : ℕ} (observations : Vec 𝟛ᴺ n) (ϕᴹ : (y : 𝟛ᴺ) → f-ucontinuous X 𝟛ᴺ-ClosenessSpace λ x → M x y) where 𝟛ᴺ→𝟛ᴺ-PseudoClosenessSpace : (𝟛ᴺ → 𝟛ᴺ) → PseudoClosenessSpace 𝓤₀ 𝟛ᴺ→𝟛ᴺ-PseudoClosenessSpace f = Least-PseudoClosenessSpace 𝟛ᴺ 𝟛ᴺ-ClosenessSpace f observations y₀ : ⟨ Y ⟩ y₀ = csearchable-pointed 𝓤₀ Y S ϕᴸ : (f : 𝟛ᴺ → 𝟛ᴺ) → f-ucontinuous' (ι Y) (𝟛ᴺ→𝟛ᴺ-PseudoClosenessSpace f) (λ x → M (g x)) ϕᴸ = close-to-close Y 𝟛ᴺ-ClosenessSpace 𝟛ᴺ-ClosenessSpace (M ∘ g) observations (λ y → f-ucontinuous-comp Y X 𝟛ᴺ-ClosenessSpace g (λ x → M x y) ϕᵍ (ϕᴹ y)) opt reg : (𝟛ᴺ → 𝟛ᴺ) → ℕ → ⟨ Y ⟩ opt f ϵ = (pr₁ (optimisation-convergence Y (𝟛ᴺ→𝟛ᴺ-PseudoClosenessSpace 𝓞) y₀ tb (M ∘ g) f (ϕᴸ f) ϵ)) reg f ϵ = (p-regressor Y (𝟛ᴺ→𝟛ᴺ-PseudoClosenessSpace 𝓞) S ϵ (λ y → M (g y)) (ϕᴸ f) f) reg𝓞 opt𝓞 : ℕ → ⟨ Y ⟩ reg𝓞 = reg 𝓞 opt𝓞 = opt 𝓞 module Regression-ExampleDistortionProne (X : ClosenessSpace 𝓤) (tb : totally-bounded X 𝓥') (S : csearchable 𝓤₀ X) (M : ⟨ X ⟩ → (𝟛ᴺ → 𝟛ᴺ)) (𝓞 : 𝟛ᴺ → 𝟛ᴺ) (Ψ : (𝟛ᴺ → 𝟛ᴺ) → (𝟛ᴺ → 𝟛ᴺ)) {n : ℕ} (observations : Vec 𝟛ᴺ n) (ϕᴹ : (y : 𝟛ᴺ) → f-ucontinuous X 𝟛ᴺ-ClosenessSpace λ x → M x y) where open Regression-Example X X id (id-ucontinuous X) tb S M (Ψ 𝓞) observations ϕᴹ regΨ𝓞 optΨ𝓞 : ℕ → ⟨ X ⟩ regΨ𝓞 = reg𝓞 optΨ𝓞 = opt𝓞 module Regression-Example1a where M : 𝟛ᴺ → (𝟛ᴺ → 𝟛ᴺ) M x y = mid (neg x) y 𝓞 : 𝟛ᴺ → 𝟛ᴺ 𝓞 = mid 1/3𝟛ᴺ observations : Vec 𝟛ᴺ 3 observations = -1𝟛ᴺ :: (O𝟛ᴺ :: [ 1𝟛ᴺ ]) ϕᴹ : (y : 𝟛ᴺ) → f-ucontinuous 𝟛ᴺ-ClosenessSpace 𝟛ᴺ-ClosenessSpace (λ x → mid (neg x) y) ϕᴹ y = f-ucontinuous-comp 𝟛ᴺ-ClosenessSpace 𝟛ᴺ-ClosenessSpace 𝟛ᴺ-ClosenessSpace neg (λ x → mid x y) neg-ucontinuous (seq-f-ucontinuous¹-to-closeness 𝟛-is-discrete 𝟛-is-discrete (λ x → mid x y) (seq-f-ucontinuous²-left mid mid-ucontinuous' y)) open Regression-Example 𝟛ᴺ-ClosenessSpace 𝟚ᴺ-ClosenessSpace _↑ ↑-ucontinuous 𝟚ᴺ-totally-bounded 𝟚ᴺ-csearchable-tb M 𝓞 observations ϕᴹ public Ψ : (𝟛ᴺ → 𝟛ᴺ) → (𝟛ᴺ → 𝟛ᴺ) Ψ f x = mid x (x /4) open Regression-ExampleDistortionProne 𝟛ᴺ-ClosenessSpace 𝟛ᴺ-totally-bounded 𝟛ᴺ-csearchable-tb M 𝓞 Ψ observations ϕᴹ public module Regression-Example1b where M : 𝟛ᴺ × 𝟛ᴺ → (𝟛ᴺ → 𝟛ᴺ) M (p₁ , p₂) x = mid p₁ (mid p₂ x) ϕᴹ : (x : 𝟛ᴺ) → f-ucontinuous 𝟛ᴺ×𝟛ᴺ-ClosenessSpace 𝟛ᴺ-ClosenessSpace (λ (p₁ , p₂) → mid p₁ (mid p₂ x)) ϕᴹ x = seq-f-ucontinuous²-to-closeness 𝟛-is-discrete 𝟛-is-discrete 𝟛-is-discrete (λ p₁ p₂ → mid p₁ (mid p₂ x)) (seq-f-ucontinuous²-comp mid mid mid-ucontinuous' mid-ucontinuous' x) open Regression-Example1a using (𝓞;observations;Ψ) open Regression-Example 𝟛ᴺ×𝟛ᴺ-ClosenessSpace 𝟚ᴺ×𝟚ᴺ-ClosenessSpace _⤊ ⤊-ucontinuous 𝟚ᴺ×𝟚ᴺ-totally-bounded 𝟚ᴺ×𝟚ᴺ-csearchable-tb M 𝓞 observations ϕᴹ public open Regression-ExampleDistortionProne 𝟛ᴺ×𝟛ᴺ-ClosenessSpace 𝟛ᴺ×𝟛ᴺ-totally-bounded 𝟛ᴺ×𝟛ᴺ-csearchable-tb M 𝓞 Ψ observations ϕᴹ public module Regression-Example2 where M : 𝟛ᴺ × 𝟛ᴺ → (𝟛ᴺ → 𝟛ᴺ) M (p₁ , p₂) x = mid p₁ (mul p₂ x) 𝓞 : 𝟛ᴺ → 𝟛ᴺ 𝓞 = M (1/3𝟛ᴺ , 1/2𝟛ᴺ) observations : Vec 𝟛ᴺ 2 observations = -1/2𝟛ᴺ :: [ 1/2𝟛ᴺ ] ϕᴹ : (y : 𝟛ᴺ) → f-ucontinuous (×-ClosenessSpace 𝟛ᴺ-ClosenessSpace 𝟛ᴺ-ClosenessSpace) 𝟛ᴺ-ClosenessSpace (λ x → M x y) ϕᴹ y = seq-f-ucontinuous²-to-closeness 𝟛-is-discrete 𝟛-is-discrete 𝟛-is-discrete (λ α β → M (α , β) y) (seq-f-ucontinuous²-comp mid mul mid-ucontinuous' mul-ucontinuous' y) open Regression-Example 𝟛ᴺ×𝟛ᴺ-ClosenessSpace 𝟚ᴺ×𝟚ᴺ-ClosenessSpace _⤊ ⤊-ucontinuous 𝟚ᴺ×𝟚ᴺ-totally-bounded 𝟚ᴺ×𝟚ᴺ-csearchable-tb M 𝓞 observations ϕᴹ public module Regression-Example1a-Optimisation where open Regression-Example1a regressed-parameter : ℕ → 𝟛ᴺ regressed-parameter = _↑ ∘ (opt 𝓞) regressed-function : ℕ → (𝟛ᴺ → 𝟛ᴺ) regressed-function = M ∘ regressed-parameter module Regression-Example1a-SearchDistortionFree where open Regression-Example1a regressed-parameter : ℕ → 𝟛ᴺ regressed-parameter = _↑ ∘ (reg𝓞) regressed-function : ℕ → (𝟛ᴺ → 𝟛ᴺ) regressed-function = M ∘ regressed-parameter module Regression-Example1a-SearchDistortionProne where open Regression-Example1a regressed-parameter : ℕ → 𝟛ᴺ regressed-parameter = regΨ𝓞 regressed-function : ℕ → (𝟛ᴺ → 𝟛ᴺ) regressed-function = M ∘ regressed-parameter module Regression-Example1a-OptimisationDistortionProne where open Regression-Example1a regressed-parameter : ℕ → 𝟛ᴺ regressed-parameter = _↑ ∘ opt (Ψ 𝓞) regressed-function : ℕ → (𝟛ᴺ → 𝟛ᴺ) regressed-function = M ∘ regressed-parameter module Regression-Example1b-DistortionProne where open Regression-Example1b regressed-parameter : ℕ → 𝟛ᴺ × 𝟛ᴺ regressed-parameter = regΨ𝓞 regressed-function : ℕ → (𝟛ᴺ → 𝟛ᴺ) regressed-function = M ∘ regressed-parameter module Regression-Example2-SearchDistortionFree where open Regression-Example2 regressed-parameter : ℕ → 𝟛ᴺ × 𝟛ᴺ regressed-parameter ϵ = α ↑ , β ↑ where αβ = reg𝓞 ϵ α = pr₁ αβ β = pr₂ αβ regressed-function : ℕ → (𝟛ᴺ → 𝟛ᴺ) regressed-function = M ∘ regressed-parameter \end{code}