Andrew Sneap, April 2023 Note that this file is incomplete. \begin{code} {-# OPTIONS --without-K --safe #-} open import MLTT.Spartan open import Notation.Order open import UF.FunExt open import UF.PropTrunc open import UF.Powerset open import UF.Subsingletons open import TWA.Thesis.AndrewSneap.DyadicRationals module TWA.Thesis.AndrewSneap.DyadicReals (pe : PropExt) (pt : propositional-truncations-exist) (fe : FunExt) (dy : Dyadics) where open PropositionalTruncation pt open Dyadics dy open import UF.Subsingletons-FunExt \end{code} This file defines Dedekind reals using Dyadic Rationals. The code is this file is based upon the work in the lagda file, in most cases simply changing ℚ to ℤ[1/2] is all that is necessary. http://math.andrej.com/wp-content/uploads/2008/08/abstract-cca2008.pdf "The rationals may be replaced by any dense Archimedean subring of R with decidable order", and as in "Efficient Computation with Dedekind Reals" we implement Dedekind reals using dyadic rationals. The definition of the reals follows, by first defining the four properties that a real satisfies. \begin{code} inhabited-left : (L : 𝓟 ℤ[1/2]) → 𝓤₀ ̇ inhabited-left L = ∃ p ꞉ ℤ[1/2] , p ∈ L inhabited-right : (R : 𝓟 ℤ[1/2]) → 𝓤₀ ̇ inhabited-right R = ∃ q ꞉ ℤ[1/2] , q ∈ R rounded-left : (L : 𝓟 ℤ[1/2]) → 𝓤₀ ̇ rounded-left L = (x : ℤ[1/2]) → (x ∈ L ↔ (∃ p ꞉ ℤ[1/2] , (x < p) × p ∈ L)) rounded-right : (R : 𝓟 ℤ[1/2]) → 𝓤₀ ̇ rounded-right R = (x : ℤ[1/2]) → x ∈ R ↔ (∃ q ꞉ ℤ[1/2] , (q < x) × q ∈ R) disjoint : (L R : 𝓟 ℤ[1/2]) → 𝓤₀ ̇ disjoint L R = (p q : ℤ[1/2]) → p ∈ L × q ∈ R → p < q located : (L R : 𝓟 ℤ[1/2]) → 𝓤₀ ̇ located L R = (p q : ℤ[1/2]) → p < q → p ∈ L ∨ q ∈ R isCut : (L R : 𝓟 ℤ[1/2]) → 𝓤₀ ̇ isCut L R = inhabited-left L × inhabited-right R × rounded-left L × rounded-right R × disjoint L R × located L R ℝ-d : 𝓤₁ ̇ ℝ-d = Σ (L , R) ꞉ 𝓟 ℤ[1/2] × 𝓟 ℤ[1/2] , isCut L R \end{code} Now we can introduce notation to obtain specific cuts, or refer to a rational inhabiting a cut. This is useful for readability purposes. \begin{code} lower-cut-of : ℝ-d → 𝓟 ℤ[1/2] lower-cut-of ((L , R) , _) = L upper-cut-of : ℝ-d → 𝓟 ℤ[1/2] upper-cut-of ((L , R) , _) = R in-lower-cut : ℤ[1/2] → ℝ-d → 𝓤₀ ̇ in-lower-cut q ((L , R) , _) = q ∈ L in-upper-cut : ℤ[1/2] → ℝ-d → 𝓤₀ ̇ in-upper-cut q ((L , R) , _) = q ∈ R inhabited-from-real-L : (x : ℝ-d) → inhabited-left (lower-cut-of x) inhabited-from-real-L ((L , R) , inhab-L , inhab-R , rounded-L , rounded-R , disjoint , located) = inhab-L inhabited-from-real-R : (x : ℝ-d) → inhabited-right (upper-cut-of x) inhabited-from-real-R ((L , R) , inhab-L , inhab-R , rounded-L , rounded-R , disjoint , located) = inhab-R rounded-from-real-L1 : (x : ℝ-d) → (k : ℤ[1/2]) → k ∈ lower-cut-of x → ∃ p ꞉ ℤ[1/2] , k < p × p ∈ lower-cut-of x rounded-from-real-L1 ((L , R) , inhab-L , inhab-R , rounded-L , rounded-R , disjoint , located) k = pr₁ (rounded-L k) rounded-from-real-L2 : (x : ℝ-d) → (k : ℤ[1/2]) → ∃ p ꞉ ℤ[1/2] , k < p × p ∈ lower-cut-of x → k ∈ lower-cut-of x rounded-from-real-L2 ((L , R) , inhab-L , inhab-R , rounded-L , rounded-R , disjoint , located) k = pr₂ (rounded-L k) rounded-from-real-R1 : (x : ℝ-d) → (k : ℤ[1/2]) → k ∈ upper-cut-of x → ∃ q ꞉ ℤ[1/2] , q < k × q ∈ upper-cut-of x rounded-from-real-R1 ((L , R) , inhab-L , inhab-R , rounded-L , rounded-R , disjoint , located) k = pr₁ (rounded-R k) rounded-from-real-R2 : (x : ℝ-d) → (k : ℤ[1/2]) → ∃ q ꞉ ℤ[1/2] , q < k × q ∈ upper-cut-of x → k ∈ upper-cut-of x rounded-from-real-R2 ((L , R) , inhab-L , inhab-R , rounded-L , rounded-R , disjoint , located) k = pr₂ (rounded-R k) located-from-real : (x : ℝ-d) → (p q : ℤ[1/2]) → p < q → p ∈ lower-cut-of x ∨ q ∈ upper-cut-of x located-from-real ((L , R) , inhab-L , inhab-R , rounded-L , rounded-R , disjoint , located) = located instance Strict-Order-ℤ[1/2]-ℝ-d : Strict-Order ℤ[1/2] ℝ-d _<_ {{Strict-Order-ℤ[1/2]-ℝ-d}} = in-lower-cut Strict-Order-ℝ-d-ℤ[1/2] : Strict-Order ℝ-d ℤ[1/2] _<_ {{Strict-Order-ℝ-d-ℤ[1/2]}} = λ y q → in-upper-cut q y \end{code} We now define negation and addition from the operations on dyadic rationals. ℝd- : ℝ-d → ℝ-d ℝd- x = (L , R) , {!!} where L R : 𝓟 ℤ[1/2] L p = x < (ℤ[1/2]- p) , ∈-is-prop (upper-cut-of x) (ℤ[1/2]- p) R q = (ℤ[1/2]- q) < x , ∈-is-prop (lower-cut-of x) (ℤ[1/2]- q) _ℝd+_ : ℝ-d → ℝ-d → ℝ-d x ℝd+ y = (L , R) , {!!} where L R : 𝓟 ℤ[1/2] L p = (∃ (r , s) ꞉ ℤ[1/2] × ℤ[1/2] , r ∈ lower-cut-of x × s ∈ lower-cut-of y × (p = r ℤ[1/2]+ s)) , ∃-is-prop R q = (∃ (r , s) ꞉ ℤ[1/2] × ℤ[1/2] , r ∈ upper-cut-of x × s ∈ upper-cut-of y × (q = r ℤ[1/2]+ s)) , ∃-is-prop Order and equality: \begin{code} _ℝ-d≤_ : ℝ-d → ℝ-d → 𝓤₀ ̇ _ℝ-d≤_ x y = (r : ℤ[1/2]) → r ∈ lower-cut-of x → r ∈ lower-cut-of y isCut-is-prop : (L R : 𝓟 ℤ[1/2]) → is-prop (isCut L R) isCut-is-prop L R = ×₆-is-prop ∃-is-prop ∃-is-prop (Π-is-prop (fe _ _) (λ _ → ×-is-prop (Π-is-prop (fe _ _) (λ _ → ∃-is-prop)) (Π-is-prop (fe _ _) (λ _ → ∈-is-prop L _)))) (Π-is-prop (fe _ _) (λ _ → ×-is-prop (Π-is-prop (fe _ _) (λ _ → ∃-is-prop)) (Π-is-prop (fe _ _) (λ _ → ∈-is-prop R _)))) (Π-is-prop (fe _ _) (λ p → Π-is-prop (fe _ _) (λ q → Π-is-prop (fe _ _) (λ _ → <ℤ[1/2]-is-prop p q)))) (Π-is-prop (fe _ _) (λ _ → Π-is-prop (fe _ _) (λ _ → Π-is-prop (fe _ _) (λ _ → ∨-is-prop)))) same-cuts-gives-equality : (x@((Lx , Rx) , _) y@((Ly , Ry) , _) : ℝ-d) → Lx ⊆ Ly → Ly ⊆ Lx → Rx ⊆ Ry → Ry ⊆ Rx → Id x y same-cuts-gives-equality ((Lx , Rx) , _) ((Ly , Ry) , _) f g h i = to-subtype-= (λ (L , R) → isCut-is-prop L R) (ap (_, Rx) (subset-extensionality (pe _) (fe _ _) f g) ∙ ap (Ly ,_) (subset-extensionality (pe _) (fe _ _) h i)) \end{code} From dyadic: ℤ[1/2]-to-ℝ-d : ℤ[1/2] → ℝ-d ℤ[1/2]-to-ℝ-d x = (L , R) , {!!} where L R : 𝓟 ℤ[1/2] L p = p ≤ x , ≤ℤ[1/2]-is-prop p x R q = x ≤ q , ≤ℤ[1/2]-is-prop x q