Todd Waugh Ambridge, January 2024 # Examples of approximate orders \begin{code} {-# OPTIONS --without-K --safe #-} open import MLTT.Spartan open import UF.FunExt open import UF.DiscreteAndSeparated open import Notation.Order open import Naturals.Order open import UF.Subsingletons open import UF.Subsingletons-FunExt open import UF.Sets open import Quotient.Type using (is-prop-valued;is-equiv-relation) open import UF.Embeddings open import CoNaturals.Type renaming (ℕ-to-ℕ∞ to _↑ ; Zero-smallest to zero-minimal ; ∞-largest to ∞-maximal) open import Fin.Type open import Fin.Bishop open import UF.PropTrunc open import Taboos.WLPO open import Taboos.BasicDiscontinuity open import TWA.Thesis.Chapter2.Finite open import TWA.Thesis.Chapter2.Sequences module TWA.Thesis.Chapter4.ApproxOrder-Examples (fe : FunExt) where open import TWA.Thesis.Chapter3.ClosenessSpaces fe open import TWA.Thesis.Chapter3.ClosenessSpaces-Examples fe open import TWA.Thesis.Chapter4.ApproxOrder fe \end{code} ## Subtype orders \begin{code} inclusion-order : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } → (f : X → Y) (_≤_ : Y → Y → 𝓦 ̇) → X → X → 𝓦 ̇ inclusion-order f _≤_ x₁ x₂ = f x₁ ≤ f x₂ inclusion-order-is-preorder : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y) → (_≤_ : Y → Y → 𝓦 ̇) → is-preorder _≤_ → is-preorder (inclusion-order f _≤_) inclusion-order-is-preorder {𝓤} {𝓥} {𝓦} {X} {Y} f _≤_ (r' , t' , p') = r , t , p where r : reflexive (inclusion-order f _≤_) r x = r' (f x) t : transitive (inclusion-order f _≤_) t x y z = t' (f x) (f y) (f z) p : is-prop-valued (inclusion-order f _≤_) p x y = p' (f x) (f y) embedding-order-is-partial-order : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y) → is-embedding f → (_≤_ : Y → Y → 𝓦 ̇) → is-partial-order _≤_ → is-partial-order (inclusion-order f _≤_) embedding-order-is-partial-order {𝓤} {𝓥} {𝓦} {X} {Y} f i _≤_ (pre , a') = inclusion-order-is-preorder f _≤_ pre , a where a : antisymmetric (inclusion-order f _≤_) a x y fx≤fy fy≤fx = ap pr₁ (i (f y) (x , a' (f x) (f y) fx≤fy fy≤fx) (y , refl)) inclusion-order-is-linear-preorder : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y) → (_≤_ : Y → Y → 𝓦 ̇) → is-linear-preorder _≤_ → is-linear-preorder (inclusion-order f _≤_) inclusion-order-is-linear-preorder {𝓤} {𝓥} {𝓦} {X} {Y} f _≤_ (pre , l') = inclusion-order-is-preorder f _≤_ pre , l where l : linear (inclusion-order f _≤_) l x y = l' (f x) (f y) embedding-order-is-linear-order : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y) → is-embedding f → (_≤_ : Y → Y → 𝓦 ̇) → is-linear-order _≤_ → is-linear-order (inclusion-order f _≤_) embedding-order-is-linear-order {𝓤} {𝓥} {𝓦} {X} {Y} f i _≤_ ((pre , a') , l') = embedding-order-is-partial-order f i _≤_ (pre , a') , pr₂ (inclusion-order-is-linear-preorder f _≤_ (pre , l')) inclusion-approx-order : {X : 𝓤 ̇ } {Y : ClosenessSpace 𝓥} (f : X → ⟨ Y ⟩) → (_≤ⁿ_ : ⟨ Y ⟩ → ⟨ Y ⟩ → ℕ → 𝓦 ̇) → X → X → ℕ → 𝓦 ̇ inclusion-approx-order f _≤ⁿ_ x y = f x ≤ⁿ f y Σ-order : {X : 𝓤 ̇ } (P : X → 𝓥 ̇ ) (_≤_ : X → X → 𝓦 ̇) → Σ P → Σ P → 𝓦 ̇ Σ-order P _≤_ (x , _) (y , _) = x ≤ y Σ-order-is-preorder : {X : 𝓤 ̇ } (P : X → 𝓥 ̇ ) (_≤_ : X → X → 𝓦 ̇ ) → is-preorder _≤_ → is-preorder (Σ-order P _≤_) Σ-order-is-preorder P _≤_ (r' , t' , p') = r , t , p where r : reflexive (Σ-order P _≤_) r (x , _) = r' x t : transitive (Σ-order P _≤_) t (x , _) (y , _) (z , _) = t' x y z p : is-prop-valued (Σ-order P _≤_) p (x , _) (y , _) = p' x y Σ-approx-order : {X : 𝓤 ̇ } → (P : X → 𝓥 ̇ ) → (_≤ⁿ_ : X → X → ℕ → 𝓦 ̇) → Σ P → Σ P → ℕ → 𝓦 ̇ Σ-approx-order P _≤ⁿ_ (x , _) (y , _) = x ≤ⁿ y Σ-approx-order-is-approx-order : (X : ClosenessSpace 𝓤) → (P : ⟨ X ⟩ → 𝓥 ̇ ) → (p : (x : ⟨ X ⟩) → is-prop (P x)) → (_≤ⁿ_ : ⟨ X ⟩ → ⟨ X ⟩ → ℕ → 𝓦' ̇) → is-approx-order X _≤ⁿ_ → is-approx-order (Σ-ClosenessSpace X P p) (Σ-approx-order P _≤ⁿ_) Σ-approx-order-is-approx-order X P p' _≤ⁿ_ a = (λ ϵ → (r ϵ , t ϵ , p ϵ) , l ϵ) , d , c where r : (ϵ : ℕ) → reflexive (λ x y → Σ-approx-order P _≤ⁿ_ x y ϵ) r ϵ x = ≤ⁿ-refl X a ϵ (pr₁ x) t : (ϵ : ℕ) → transitive (λ x y → Σ-approx-order P _≤ⁿ_ x y ϵ) t ϵ x y z = ≤ⁿ-trans X a ϵ (pr₁ x) (pr₁ y) (pr₁ z) p : (ϵ : ℕ) → is-prop-valued (λ x y → Σ-approx-order P _≤ⁿ_ x y ϵ) p ϵ x y = ≤ⁿ-prop X a ϵ (pr₁ x) (pr₁ y) l : (ϵ : ℕ) → linear (λ x y → Σ-approx-order P _≤ⁿ_ x y ϵ) l ϵ x y = ≤ⁿ-linear X a ϵ (pr₁ x) (pr₁ y) d : (ϵ : ℕ) (x y : Σ P) → is-decidable (Σ-approx-order P _≤ⁿ_ x y ϵ) d ϵ x y = ≤ⁿ-decidable X a ϵ (pr₁ x) (pr₁ y) c : (ϵ : ℕ) (x y : ⟨ Σ-ClosenessSpace X P p' ⟩) → C (Σ-ClosenessSpace X P p') ϵ x y → Σ-approx-order P _≤ⁿ_ x y ϵ c ϵ x y = ≤ⁿ-close X a ϵ (pr₁ x) (pr₁ y) module ΣOrder-Relates (pt : propositional-truncations-exist) where open PropositionalTruncation pt open ApproxOrder-Relates pt Σ-approx-order-relates : (X : ClosenessSpace 𝓤) → (P : ⟨ X ⟩ → 𝓥 ̇ ) → (p : (x : ⟨ X ⟩) → is-prop (P x)) → (_≤ⁿ_ : ⟨ X ⟩ → ⟨ X ⟩ → ℕ → 𝓦' ̇) → (a : is-approx-order X _≤ⁿ_) → (_≤_ : ⟨ X ⟩ → ⟨ X ⟩ → 𝓦 ̇ ) → (i : is-preorder _≤_) → approx-order-relates X _≤ⁿ_ a _≤_ i → approx-order-relates (Σ-ClosenessSpace X P p) (Σ-approx-order P _≤ⁿ_) (Σ-approx-order-is-approx-order X P p _≤ⁿ_ a) (Σ-order P _≤_) (Σ-order-is-preorder P _≤_ i) Σ-approx-order-relates X P p _≤ⁿ_ a _≤_ i (rel→ , rel←) = (λ (x , _) (y , _) → rel→ x y) , (λ (x , _) (y , _) → rel← x y) \end{code} ## Finite orders \begin{code} _≤Fin_ : {n : ℕ} → Fin n → Fin n → 𝓤₀ ̇ _≤Fin_ {succ n} 𝟎 y = 𝟙 _≤Fin_ {succ n} (suc x) 𝟎 = 𝟘 _≤Fin_ {succ n} (suc x) (suc y) = x ≤Fin y ≤Fin-is-preorder : {n : ℕ} → is-preorder (_≤Fin_ {n}) ≤Fin-is-preorder {n} = r , t , p where r : {n : ℕ} → reflexive (_≤Fin_ {n}) r {succ n} 𝟎 = ⋆ r {succ n} (suc x) = r x t : {n : ℕ} → transitive (_≤Fin_ {n}) t {succ n} 𝟎 y z _ _ = ⋆ t {succ n} (suc x) (suc y) (suc z) = t x y z p : {n : ℕ} → is-prop-valued (_≤Fin_ {n}) p {succ n} 𝟎 y = 𝟙-is-prop p {succ n} (suc x) 𝟎 = 𝟘-is-prop p {succ n} (suc x) (suc y) = p x y ≤Fin-is-partial-order : {n : ℕ} → is-partial-order (_≤Fin_ {n}) ≤Fin-is-partial-order {n} = ≤Fin-is-preorder , a' where a' : {n : ℕ} → antisymmetric (_≤Fin_ {n}) a' {succ n} 𝟎 𝟎 x≤y y≤x = refl a' {succ n} (suc x) (suc y) x≤y y≤x = ap suc (a' x y x≤y y≤x) ≤Fin-is-linear-preorder : {n : ℕ} → is-linear-preorder (_≤Fin_ {n}) ≤Fin-is-linear-preorder {n} = ≤Fin-is-preorder , l where l : {n : ℕ} → linear (_≤Fin_ {n}) l {succ n} 𝟎 y = inl ⋆ l {succ n} (suc x) 𝟎 = inr ⋆ l {succ n} (suc x) (suc y) = l x y ≤Fin-is-linear-order : {n : ℕ} → is-linear-order (_≤Fin_ {n}) ≤Fin-is-linear-order {n} = ≤Fin-is-partial-order , pr₂ ≤Fin-is-linear-preorder finite-order : {F : 𝓤 ̇ } → finite-linear-order F → F → F → 𝓤₀ ̇ finite-order (n , (g , _)) = inclusion-order g _≤Fin_ finite-order-is-partial-order : {F : 𝓤 ̇ } → (f : finite-linear-order F) → is-partial-order (finite-order f) finite-order-is-partial-order (n , (g , i)) = embedding-order-is-partial-order g (equivs-are-embeddings g i) _≤Fin_ ≤Fin-is-partial-order finite-order-is-linear-preorder : {F : 𝓤 ̇ } → (f : finite-linear-order F) → is-linear-preorder (finite-order f) finite-order-is-linear-preorder (n , (g , _)) = inclusion-order-is-linear-preorder g _≤Fin_ ≤Fin-is-linear-preorder finite-order-is-linear-order : {F : 𝓤 ̇ } → (f : finite-linear-order F) → is-linear-order (finite-order f) finite-order-is-linear-order (n , (g , i)) = embedding-order-is-linear-order g (equivs-are-embeddings g i) _≤Fin_ ≤Fin-is-linear-order \end{code} ## Discrete-sequence orders \begin{code} discrete-lexicorder : {D : 𝓤 ̇ } → is-discrete D → (_≤_ : D → D → 𝓥 ̇ ) → (α β : ℕ → D) → 𝓤 ⊔ 𝓥 ̇ discrete-lexicorder f _≤_ α β = (n : ℕ) → (α ∼ⁿ β) n → α n ≤ β n discrete-lexicorder-is-preorder : {D : 𝓤 ̇ } (d : is-discrete D) → (_≤_ : D → D → 𝓥 ̇ ) → is-partial-order _≤_ → is-preorder (discrete-lexicorder d _≤_) discrete-lexicorder-is-preorder d _≤_ ((r' , t' , p') , a') = r , t , p where r : reflexive (discrete-lexicorder d _≤_) r x n _ = r' (x n) t : transitive (discrete-lexicorder d _≤_) t x y z x≤y y≤z 0 x∼ⁿz = t' (x 0) (y 0) (z 0) (x≤y 0 (λ _ ())) (y≤z 0 (λ _ ())) t x y z x≤y y≤z (succ n) x∼ⁿz = t (tail x) (tail y) (tail z) γ₁ γ₂ n (x∼ⁿz ∘ succ) where e : x 0 = y 0 e = a' (x 0) (y 0) (x≤y 0 (λ _ ())) (transport (y 0 ≤_) (x∼ⁿz 0 ⋆ ⁻¹) (y≤z 0 (λ _ ()))) γ₁ : discrete-lexicorder d _≤_ (tail x) (tail y) γ₁ i tx∼ⁿty = x≤y (succ i) ζ where ζ : (x ∼ⁿ y) (succ i) ζ 0 j<si = e ζ (succ j) j<si = tx∼ⁿty j j<si γ₂ : (i : ℕ) → (tail y ∼ⁿ tail z) i → y (succ i) ≤ z (succ i) γ₂ i ty∼ⁿtz = y≤z (succ i) ζ where ζ : (y ∼ⁿ z) (succ i) ζ 0 j<si = e ⁻¹ ∙ x∼ⁿz 0 ⋆ ζ (succ j) j<si = ty∼ⁿtz j j<si p : is-prop-valued (discrete-lexicorder d _≤_) p x y = Π-is-prop (fe _ _) (λ _ → Π-is-prop (fe _ _) (λ _ → p' _ _)) finite-lexicorder : {F : 𝓤 ̇ } (f : finite-linear-order F) (d : is-discrete F) → (_<_ : F → F → 𝓦 ̇ ) → (ℕ → F) → (ℕ → F) → 𝓤 ⊔ 𝓦 ̇ finite-lexicorder f d _<_ = discrete-lexicorder d _<_ linear-finite-lexicorder-implies-linear-ℕ∞-order : {F : 𝓤 ̇ } (f@(n , _) : finite-linear-order F) → n > 1 → linear (discrete-lexicorder (finite-is-discrete f) (finite-order f)) → linear _≼ℕ∞_ linear-finite-lexicorder-implies-linear-ℕ∞-order {𝓤} {F} f@(succ (succ n) , (g , (h , η) , _)) _ l u v = Cases (l (ρ ∘ pr₁ u) (ρ ∘ pr₁ v)) (inl ∘ γ u v) (inr ∘ γ v u) where _≤Fᴺ_ = discrete-lexicorder (finite-is-discrete f) (finite-order f) d₀ d₁ : F d₀ = h 𝟎 d₁ = h 𝟏 ρ : 𝟚 → F ρ ₀ = d₀ ρ ₁ = d₁ γ : (u v : ℕ∞) → (ρ ∘ pr₁ u) ≤Fᴺ (ρ ∘ pr₁ v) → u ≼ v γ u v u≤v n uₙ=1 = ₁-gρ-maximal (pr₁ v n) (transport (λ - → g (ρ -) ≤Fin g (ρ (pr₁ v n))) uₙ=1 (u≤v n (λ i i<n → ap ρ (u∼ⁿv n uₙ=1 i i<n)))) where ₁-gρ-maximal : (y : 𝟚) → g (ρ ₁) ≤Fin g (ρ y) → y = ₁ ₁-gρ-maximal ₀ gh1≤gh0 = 𝟘-elim (transport (λ - → ¬ (- ≤Fin g (h 𝟎))) (η 𝟏 ⁻¹) (transport (λ - → ¬ (𝟏 ≤Fin -)) (η 𝟎 ⁻¹) id) gh1≤gh0) ₁-gρ-maximal ₁ _ = refl u∼ⁿv : (n : ℕ) → pr₁ u n = ₁ → (pr₁ u ∼ⁿ pr₁ v) n u∼ⁿv (succ n) uₙ=₁ i i<sn = ⊏-trans' i (succ n) u i<sn uₙ=₁ ∙ ⊏-trans'' v n i i<sn (γ u v u≤v n (⊏-back u n uₙ=₁)) ⁻¹ linear-finite-lexicorder-implies-WLPO : {F : 𝓤 ̇ } (f@(n , _) : finite-linear-order F) → n > 1 → linear (discrete-lexicorder (finite-is-discrete f) (finite-order f)) → WLPO linear-finite-lexicorder-implies-WLPO f n>1 = ℕ∞-linearity-taboo (fe 𝓤₀ 𝓤₀) ∘ linear-finite-lexicorder-implies-linear-ℕ∞-order f n>1 discrete-approx-lexicorder : {D : 𝓤 ̇ } → is-discrete D → (_≤_ : D → D → 𝓥 ̇ ) → (α β : ℕ → D) → ℕ → 𝓤 ⊔ 𝓥 ̇ discrete-approx-lexicorder d _≤_ α β n = (i : ℕ) → i < n → (α ∼ⁿ β) i → α i ≤ β i discrete-approx-lexicorder-reduce : {D : 𝓤 ̇ } (ds : is-discrete D) → (_≤_ : D → D → 𝓥 ̇ ) → (x y : ℕ → D) (ϵ : ℕ) → discrete-approx-lexicorder ds _≤_ x y (succ ϵ) → discrete-approx-lexicorder ds _≤_ x y ϵ discrete-approx-lexicorder-reduce ds _≤_ x y ϵ x≤y i i<ϵ = x≤y i (<-trans i ϵ (succ ϵ) i<ϵ (<-succ ϵ)) discrete-approx-lexicorder-is-approx-order : {D : 𝓤 ̇ } (ds : is-discrete D) → (_≤_ : D → D → 𝓥 ̇ ) (s : is-linear-order _≤_) → is-approx-order (ℕ→D-ClosenessSpace ds) (discrete-approx-lexicorder ds _≤_) discrete-approx-lexicorder-is-approx-order {𝓤} {𝓥} {D} ds _≤_ (((r' , t' , p') , a') , l') = (λ ϵ → (r ϵ , t ϵ , p ϵ) , l ϵ) , d , c where r : (n : ℕ) → reflexive (λ x y → discrete-approx-lexicorder ds _≤_ x y n) r n x i i<n _ = r' (x i) t : (n : ℕ) → transitive (λ x y → discrete-approx-lexicorder ds _≤_ x y n) t n x y z x≤y y≤z 0 i<n x∼ⁱz = t' (x 0) (y 0) (z 0) (x≤y 0 i<n (λ _ ())) (y≤z 0 i<n (λ _ ())) t (succ n) x y z x≤y y≤z (succ i) i<n x∼ⁱz = t n (tail x) (tail y) (tail z) γ₁ γ₂ i i<n (x∼ⁱz ∘ succ) where e : x 0 = y 0 e = a' (x 0) (y 0) (x≤y 0 ⋆ (λ _ ())) (transport (y 0 ≤_) (x∼ⁱz 0 ⋆ ⁻¹) (y≤z 0 ⋆ (λ _ ()))) γ₁ : (j : ℕ) → j < n → (tail x ∼ⁿ tail y) j → x (succ j) ≤ y (succ j) γ₁ j j<n tx∼ʲty = x≤y (succ j) j<n ζ where ζ : (x ∼ⁿ y) (succ j) ζ 0 k<sj = e ζ (succ k) k<sj = tx∼ʲty k k<sj γ₂ : (j : ℕ) → j < n → (tail y ∼ⁿ tail z) j → y (succ j) ≤ z (succ j) γ₂ j j<n ty∼ʲtz = y≤z (succ j) j<n ζ where ζ : (y ∼ⁿ z) (succ j) ζ 0 k<sj = e ⁻¹ ∙ x∼ⁱz 0 ⋆ ζ (succ k) k<sj = ty∼ʲtz k k<sj p : (n : ℕ) → is-prop-valued (λ x y → discrete-approx-lexicorder ds _≤_ x y n) p n x y = Π-is-prop (fe _ _) (λ _ → Π-is-prop (fe _ _) (λ _ → Π-is-prop (fe _ _) (λ _ → p' _ _))) l : (ϵ : ℕ) → (x y : ℕ → D) → discrete-approx-lexicorder ds _≤_ x y ϵ + discrete-approx-lexicorder ds _≤_ y x ϵ l 0 x y = inl (λ _ ()) l (succ ϵ) x y = γ (l ϵ (tail x) (tail y)) (l' (head x) (head y)) (ds (head x) (head y)) where γ : discrete-approx-lexicorder ds _≤_ (tail x) (tail y) ϵ + discrete-approx-lexicorder ds _≤_ (tail y) (tail x) ϵ → (head x ≤ head y) + (head y ≤ head x) → (head x = head y) + (head x ≠ head y) → discrete-approx-lexicorder ds _≤_ x y (succ ϵ) + discrete-approx-lexicorder ds _≤_ y x (succ ϵ) γ (inl tx≤ᵉty) (inl hx≤hy) _ = inl ζ where ζ : discrete-approx-lexicorder ds _≤_ x y (succ ϵ) ζ 0 i<sϵ x∼ⁱy = hx≤hy ζ (succ i) i<sϵ x∼ⁱy = tx≤ᵉty i i<sϵ (x∼ⁱy ∘ succ) γ (inl tx≤ᵉty) (inr hy≤hx) (inl hx=hy) = inl ζ where ζ : discrete-approx-lexicorder ds _≤_ x y (succ ϵ) ζ 0 i<sϵ y∼ⁱx = transport (head x ≤_) hx=hy (r' (head x)) ζ (succ i) i<sϵ x∼ⁱy = tx≤ᵉty i i<sϵ (x∼ⁱy ∘ succ) γ (inl tx≤ᵉty) (inr hy≤hx) (inr hx≠hy) = inr ζ where ζ : discrete-approx-lexicorder ds _≤_ y x (succ ϵ) ζ 0 i<sϵ y∼ⁱx = hy≤hx ζ (succ i) i<sϵ y∼ⁱx = 𝟘-elim (hx≠hy (y∼ⁱx 0 ⋆ ⁻¹)) γ (inr ty≤ᵉtx) (inr hy≤hx) _ = inr ζ where ζ : discrete-approx-lexicorder ds _≤_ y x (succ ϵ) ζ 0 i<sϵ y∼ⁱx = hy≤hx ζ (succ i) i<sϵ y∼ⁱx = ty≤ᵉtx i i<sϵ (y∼ⁱx ∘ succ) γ (inr ty≤ᵉtx) (inl hx≤hy) (inl hx=hy) = inr ζ where ζ : discrete-approx-lexicorder ds _≤_ y x (succ ϵ) ζ 0 i<sϵ x∼ⁱy = transport (_≤ head x) hx=hy (r' (head x)) ζ (succ i) i<sϵ y∼ⁱx = ty≤ᵉtx i i<sϵ (y∼ⁱx ∘ succ) γ (inr ty≤ᵉtx) (inl hx≤hy) (inr hx≠hy) = inl ζ where ζ : discrete-approx-lexicorder ds _≤_ x y (succ ϵ) ζ 0 i<sϵ x∼ⁱy = hx≤hy ζ (succ i) i<sϵ x∼ⁱy = 𝟘-elim (hx≠hy (x∼ⁱy 0 ⋆)) d : (ϵ : ℕ) (x y : ℕ → D) → is-decidable (discrete-approx-lexicorder ds _≤_ x y ϵ) d 0 x y = inl (λ _ ()) d (succ ϵ) x y = Cases (d ϵ x y) (λ x≤ᵉy → γ₁ x≤ᵉy (∼ⁿ-decidable (λ _ → ds) x y ϵ) (discrete-reflexive-antisym-linear-order-is-decidable ds _≤_ r' a' l' (x ϵ) (y ϵ))) γ₂ where γ₁ : discrete-approx-lexicorder ds _≤_ x y ϵ → is-decidable ((x ∼ⁿ y) ϵ) → is-decidable (x ϵ ≤ y ϵ) → is-decidable (discrete-approx-lexicorder ds _≤_ x y (succ ϵ)) γ₁ x≤ᵉy (inl x∼ᵉy) (inl xϵ≤yϵ) = inl ζ where ζ : discrete-approx-lexicorder ds _≤_ x y (succ ϵ) ζ i i<sϵ x∼ⁱy = Cases (<-split i ϵ i<sϵ) (λ i<ϵ → x≤ᵉy i i<ϵ x∼ⁱy) (λ i=ϵ → transport (λ - → x - ≤ y -) (i=ϵ ⁻¹) xϵ≤yϵ) γ₁ x≤ᵉy (inl x∼ᵉy) (inr ¬xϵ≤yϵ) = inr (λ x≤ˢᵉy → ¬xϵ≤yϵ (x≤ˢᵉy ϵ (<-succ ϵ) x∼ᵉy)) γ₁ x≤ᵉy (inr ¬x∼ᵉy) _ = inl ζ where ζ : discrete-approx-lexicorder ds _≤_ x y (succ ϵ) ζ i i<sϵ x∼ⁱy = Cases (<-split i ϵ i<sϵ) (λ i<ϵ → x≤ᵉy i i<ϵ x∼ⁱy) (λ i=ϵ → 𝟘-elim (¬x∼ᵉy (transport (x ∼ⁿ y) i=ϵ x∼ⁱy))) γ₂ : ¬ discrete-approx-lexicorder ds _≤_ x y ϵ → is-decidable (discrete-approx-lexicorder ds _≤_ x y (succ ϵ)) γ₂ ¬x≤ᵉy = inr (λ x≤ˢᵉy → ¬x≤ᵉy (discrete-approx-lexicorder-reduce ds _≤_ x y ϵ x≤ˢᵉy)) c : (ϵ : ℕ) → (x y : ℕ → D) → C (ℕ→D-ClosenessSpace ds) ϵ x y → discrete-approx-lexicorder ds _≤_ x y ϵ c ϵ x y Cϵxy i i<ϵ x∼ⁱy = transport (x i ≤_) (C-to-∼ⁿ ds x y ϵ Cϵxy i i<ϵ) (r' (x i)) module LexicographicOrder-Relates (pt : propositional-truncations-exist) where open PropositionalTruncation pt open ApproxOrder-Relates pt discrete-approx-lexicorder-relates→ : {D : 𝓤 ̇ } (ds : is-discrete D) (i : is-set D) → (_≤_ : D → D → 𝓥 ̇ ) → (discrete-approx-lexicorder ds _≤_) relates-to→ (discrete-lexicorder ds _≤_) discrete-approx-lexicorder-relates→ ds i _≤_ x y Πx≤ⁿy n = Πx≤ⁿy (succ n) n (<-succ n) discrete-approx-lexicorder-relates← : {D : 𝓤 ̇ } (ds : is-discrete D) (i : is-set D) → (_≤_ : D → D → 𝓥 ̇ ) → discrete-approx-lexicorder ds _≤_ relates-to← discrete-lexicorder ds _≤_ discrete-approx-lexicorder-relates← ds i _≤_ α β α≤β = ∣ 0 , (λ _ _ i _ → α≤β i) ∣ discrete-approx-lexicorder-relates : {D : 𝓤 ̇ } (ds : is-discrete D) (i : is-set D) → (_≤_ : D → D → 𝓥 ̇ ) (s : is-linear-order _≤_) → approx-order-relates (ℕ→D-ClosenessSpace ds) (discrete-approx-lexicorder ds _≤_) (discrete-approx-lexicorder-is-approx-order ds _≤_ s) (discrete-lexicorder ds _≤_) (discrete-lexicorder-is-preorder ds _≤_ (pr₁ s)) discrete-approx-lexicorder-relates ds i _≤_ _ = discrete-approx-lexicorder-relates→ ds i _≤_ , discrete-approx-lexicorder-relates← ds i _≤_ \end{code} ## Specific example orders \begin{code} ℕ→𝟚-lexicorder : (ℕ → 𝟚) → (ℕ → 𝟚) → 𝓤₀ ̇ ℕ→𝟚-lexicorder = discrete-lexicorder 𝟚-is-discrete (finite-order 𝟚-is-finite) ℕ∞-lexicorder : ℕ∞ → ℕ∞ → 𝓤₀ ̇ ℕ∞-lexicorder = Σ-order is-decreasing ℕ→𝟚-lexicorder ℕ→𝟚-lexicorder-is-preorder : is-preorder ℕ→𝟚-lexicorder ℕ→𝟚-lexicorder-is-preorder = discrete-lexicorder-is-preorder 𝟚-is-discrete (finite-order 𝟚-is-finite) (finite-order-is-partial-order 𝟚-is-finite) ℕ∞-lexicorder-is-preorder : is-preorder ℕ∞-lexicorder ℕ∞-lexicorder-is-preorder = Σ-order-is-preorder is-decreasing ℕ→𝟚-lexicorder ℕ→𝟚-lexicorder-is-preorder ℕ→𝟚-approx-lexicorder : (ℕ → 𝟚) → (ℕ → 𝟚) → ℕ → 𝓤₀ ̇ ℕ→𝟚-approx-lexicorder = discrete-approx-lexicorder 𝟚-is-discrete (finite-order 𝟚-is-finite) ℕ→𝟚-approx-lexicorder-is-approx-order : is-approx-order 𝟚ᴺ-ClosenessSpace ℕ→𝟚-approx-lexicorder ℕ→𝟚-approx-lexicorder-is-approx-order = discrete-approx-lexicorder-is-approx-order 𝟚-is-discrete (finite-order 𝟚-is-finite) (finite-order-is-linear-order 𝟚-is-finite) ℕ∞-approx-lexicorder : ℕ∞ → ℕ∞ → ℕ → 𝓤₀ ̇ ℕ∞-approx-lexicorder = Σ-approx-order is-decreasing ℕ→𝟚-approx-lexicorder ℕ∞-approx-lexicorder-is-approx-order : is-approx-order ℕ∞-ClosenessSpace ℕ∞-approx-lexicorder ℕ∞-approx-lexicorder-is-approx-order = Σ-approx-order-is-approx-order 𝟚ᴺ-ClosenessSpace is-decreasing (being-decreasing-is-prop (fe _ _)) ℕ→𝟚-approx-lexicorder ℕ→𝟚-approx-lexicorder-is-approx-order \end{code}