Todd Waugh Ambridge, January 2024
# Examples of closeness spaces
\begin{code}
{-# OPTIONS --without-K --safe #-}
open import MLTT.Spartan
open import CoNaturals.Type
renaming (ℕ-to-ℕ∞ to _↑)
hiding (max)
open import Notation.Order
open import Naturals.Order
open import NotionsOfDecidability.Complemented
open import UF.DiscreteAndSeparated
open import UF.FunExt
open import UF.Subsingletons
open import UF.Embeddings
open import MLTT.Two-Properties
open import Fin.Type
open import Fin.Bishop
open import Fin.Embeddings
open import UF.Equiv
open import MLTT.SpartanList hiding (⟨_⟩; _∷_)
module TWA.Thesis.Chapter3.ClosenessSpaces-Examples (fe : FunExt) where
open import TWA.Thesis.Chapter2.Sequences
open import TWA.Thesis.Chapter2.Vectors
open import TWA.Thesis.Chapter2.Finite
open import TWA.Thesis.Chapter3.ClosenessSpaces fe
open import TWA.Closeness fe hiding (is-ultra; is-closeness)
\end{code}
## Trivial closeness spaces
\begin{code}
𝟘-clospace : is-closeness-space (𝟘 {𝓤})
𝟘-clospace = (λ ()) , ((λ ()) , (λ ()) , ((λ ()) , (λ ())))
𝟙-clospace : is-closeness-space (𝟙 {𝓤})
𝟙-clospace
= (λ _ _ → ∞)
, (λ _ _ _ → refl)
, (λ _ → refl)
, (λ _ _ → refl)
, (λ _ _ _ _ _ → refl)
\end{code}
## Discrete closeness spaces
\begin{code}
discrete-clofun'' : {X : 𝓤 ̇ } (x y : X)
→ is-decidable (x = y)
→ ℕ∞
discrete-clofun'' x y (inl _) = ∞
discrete-clofun'' x y (inr _) = 0 ↑
discrete-clofun' : {X : 𝓤 ̇ } → is-discrete X → X → X → ℕ∞
discrete-clofun' d x y = discrete-clofun'' x y (d x y)
discrete-clofun''-e : {X : 𝓤 ̇ } (x y : X)
→ (d : is-decidable (x = y))
→ discrete-clofun'' x y d = ∞ → x = y
discrete-clofun''-e x y (inl e) cxy=∞ = e
discrete-clofun''-e x y (inr f) cxy=∞
= 𝟘-elim (zero-is-not-one (ap (λ - → ℕ∞-to-ℕ→𝟚 - 0) cxy=∞))
discrete-clofun''-i : {X : 𝓤 ̇ } (x : X)
→ (d : is-decidable (x = x))
→ discrete-clofun'' x x d = ∞
discrete-clofun''-i x (inl _) = refl
discrete-clofun''-i x (inr f) = 𝟘-elim (f refl)
discrete-clofun''-s : {X : 𝓤 ̇ } (x y : X)
→ (d : is-decidable (x = y))
→ (d' : is-decidable (y = x))
→ discrete-clofun'' x y d
= discrete-clofun'' y x d'
discrete-clofun''-s x y (inl _) (inl _) = refl
discrete-clofun''-s x y (inr _) (inr _) = refl
discrete-clofun''-s x y (inl e) (inr f) = 𝟘-elim (f (e ⁻¹))
discrete-clofun''-s x y (inr f) (inl e) = 𝟘-elim (f (e ⁻¹))
discrete-clofun''-u : {X : 𝓤 ̇ } (x y z : X)
→ (d : is-decidable (x = y))
→ (d' : is-decidable (y = z))
→ (d'' : is-decidable (x = z))
→ min (discrete-clofun'' x y d )
(discrete-clofun'' y z d' )
≼ discrete-clofun'' x z d''
discrete-clofun''-u x y z _ _ (inl _) _ _
= refl
discrete-clofun''-u x y z (inl _) (inr _) (inr _) _
= id
discrete-clofun''-u x y z (inr _) _ (inr _) _
= id
discrete-clofun''-u x x x (inl refl) (inl refl) (inr f)
= 𝟘-elim (f refl)
discrete-clofun'-is-clofun : {X : 𝓤 ̇ } (d : is-discrete X)
→ is-closeness (discrete-clofun' d)
discrete-clofun'-is-clofun d
= (λ x y → discrete-clofun''-e x y (d x y))
, (λ x → discrete-clofun''-i x (d x x))
, (λ x y → discrete-clofun''-s x y (d x y) (d y x))
, (λ x y z → discrete-clofun''-u x y z (d x y) (d y z) (d x z))
discrete-clospace : {X : 𝓤 ̇ } (d : is-discrete X)
→ is-closeness-space X
discrete-clospace d
= discrete-clofun' d , discrete-clofun'-is-clofun d
D-ClosenessSpace : {X : 𝓤 ̇ } → is-discrete X → ClosenessSpace 𝓤
D-ClosenessSpace {𝓤} {X} d = X , discrete-clospace d
finite-totally-bounded
: {X : 𝓤 ̇ } (f : finite-linear-order X) (d : is-discrete X)
→ pointed X
→ totally-bounded (D-ClosenessSpace d) 𝓤
finite-totally-bounded f d x 0
= pointed-has-a-0-net (D-ClosenessSpace d) x
finite-totally-bounded {𝓤} {X} f d x (succ ε)
= X , (id , id , η) , f
where
η : (x : X) → C (D-ClosenessSpace d) (succ ε) x x
η x n _ = ap (λ - → ℕ∞-to-ℕ→𝟚 - n) (i⟨ D-ClosenessSpace d ⟩ x)
discrete-apart-implies-closeness-0
: {X : 𝓤 ̇ }
→ (d : is-discrete X)
→ (x y : X)
→ x ≠ y
→ c⟨ D-ClosenessSpace d ⟩ x y = 0 ↑
discrete-apart-implies-closeness-0 d x y f = γ (d x y)
where
γ : (dxy : is-decidable (x = y)) → discrete-clofun'' x y dxy = Zero
γ (inl e) = 𝟘-elim (f e)
γ (inr _) = refl
discrete-closeness-succ-implies-equal
: {X : 𝓤 ̇ }
→ (d : is-discrete X)
→ (x y : X)
→ (n : ℕ)
→ C (D-ClosenessSpace d) (succ n) x y
→ x = y
discrete-closeness-succ-implies-equal d x y n Csnxy
= γ (d x y) (Csnxy n (<-gives-⊏ n (succ n) (<-succ n)))
where
γ : (dxy : is-decidable (x = y))
→ ℕ∞-to-ℕ→𝟚 (discrete-clofun'' x y dxy) n = ₁
→ x = y
γ (inl e) _ = e
γ (inr f) cxyₙ=₁ = 𝟘-elim (zero-is-not-one cxyₙ=₁)
\end{code}
## Disjoint union of closeness spaces
\begin{code}
+-clofun' : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ (⟨ X ⟩ + ⟨ Y ⟩ → ⟨ X ⟩ + ⟨ Y ⟩ → ℕ∞)
+-clofun' X Y (inl x₁) (inl x₂) = c⟨ X ⟩ x₁ x₂
+-clofun' X Y (inr y₁) (inr y₂) = c⟨ Y ⟩ y₁ y₂
+-clofun' X Y (inl x₁) (inr y₂) = 0 ↑
+-clofun' X Y (inr y₁) (inl x₂) = 0 ↑
+-clofun'-e : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ indistinguishable-are-equal (+-clofun' X Y)
+-clofun'-e X Y (inl x₁) (inl x₂) q
= ap inl (e⟨ X ⟩ x₁ x₂ q)
+-clofun'-e X Y (inr y₁) (inr y₂) q
= ap inr (e⟨ Y ⟩ y₁ y₂ q)
+-clofun'-e X Y (inl x₁) (inr y₂) f
= 𝟘-elim (zero-is-not-one (ap (λ - → ℕ∞-to-ℕ→𝟚 - 0) f))
+-clofun'-e X Y (inr y₁) (inl x₂) f
= 𝟘-elim (zero-is-not-one (ap (λ - → ℕ∞-to-ℕ→𝟚 - 0) f))
+-clofun'-i : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ self-indistinguishable (+-clofun' X Y)
+-clofun'-i X Y (inl x) = i⟨ X ⟩ x
+-clofun'-i X Y (inr y) = i⟨ Y ⟩ y
+-clofun'-s : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ is-symmetric (+-clofun' X Y)
+-clofun'-s X Y (inl x₁) (inl x₂) = s⟨ X ⟩ x₁ x₂
+-clofun'-s X Y (inr y₁) (inr y₂) = s⟨ Y ⟩ y₁ y₂
+-clofun'-s X Y (inl x₁) (inr y₂) = refl
+-clofun'-s X Y (inr y₁) (inl x₂) = refl
+-clofun'-u : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ is-ultra (+-clofun' X Y)
+-clofun'-u X Y (inl x₁) (inl x₂) (inl x₃) = u⟨ X ⟩ x₁ x₂ x₃
+-clofun'-u X Y (inr y₁) (inr y₂) (inr y₃) = u⟨ Y ⟩ y₁ y₂ y₃
+-clofun'-u X Y (inl x₁) (inl x₂) (inr y₃) n mina₀=₁
= Lemma[min𝟚ab=₀] (inr refl) ⁻¹ ∙ mina₀=₁
+-clofun'-u X Y (inr y₁) (inr y₂) (inl x₃) n mina₀=₁
= Lemma[min𝟚ab=₀] (inr refl) ⁻¹ ∙ mina₀=₁
+-clofun'-u X Y (inl x₁) (inr y₂) _ _ ()
+-clofun'-u X Y (inr y₁) (inl x₂) _ _ ()
+-clofun'-is-clofun : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ is-closeness (+-clofun' X Y)
+-clofun'-is-clofun X Y
= +-clofun'-e X Y
, +-clofun'-i X Y
, +-clofun'-s X Y
, +-clofun'-u X Y
+-clospace : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ is-closeness-space (⟨ X ⟩ + ⟨ Y ⟩)
+-clospace X Y = +-clofun' X Y , +-clofun'-is-clofun X Y
+-ClosenessSpace : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ ClosenessSpace (𝓤 ⊔ 𝓥)
+-ClosenessSpace X Y = (⟨ X ⟩ + ⟨ Y ⟩) , +-clospace X Y
+-preserves-nets : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ (ε : ℕ)
→ (X' : 𝓤' ̇ ) (Y' : 𝓥' ̇ )
→ X' is ε net-of X
→ Y' is ε net-of Y
→ (X' + Y') is ε net-of (+-ClosenessSpace X Y)
+-preserves-nets X Y ε X' Y'
((gx , hx , ηx) , fx) ((gy , hy , ηy) , fy) = (g , h , η) , f
where
g : X' + Y' → ⟨ X ⟩ + ⟨ Y ⟩
g (inl x') = inl (gx x')
g (inr y') = inr (gy y')
h : ⟨ X ⟩ + ⟨ Y ⟩ → X' + Y'
h (inl x ) = inl (hx x)
h (inr y ) = inr (hy y)
η : (x : ⟨ X ⟩ + ⟨ Y ⟩) → C (+-ClosenessSpace X Y) ε x (g (h x))
η (inl x ) = ηx x
η (inr y ) = ηy y
f : finite-linear-order (X' + Y')
f = +-is-finite fx fy
+-totally-bounded : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ totally-bounded X 𝓤'
→ totally-bounded Y 𝓥'
→ totally-bounded (+-ClosenessSpace X Y) (𝓤' ⊔ 𝓥')
+-totally-bounded X Y tx ty ε
= (X' + Y') , (+-preserves-nets X Y ε X' Y' X'-is-ε-net Y'-is-ε-net)
where
X' = pr₁ (tx ε)
Y' = pr₁ (ty ε)
X'-is-ε-net = pr₂ (tx ε)
Y'-is-ε-net = pr₂ (ty ε)
+-C-left : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ (x₁ x₂ : ⟨ X ⟩)
→ (ε : ℕ) → C (+-ClosenessSpace X Y) ε (inl x₁) (inl x₂)
→ C X ε x₁ x₂
+-C-left X Y x₁ x₂ ε Cxy n = Cxy n
\end{code}
## Binary product of closeness spaces
\begin{code}
×-clofun' : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ (⟨ X ⟩ × ⟨ Y ⟩ → ⟨ X ⟩ × ⟨ Y ⟩ → ℕ∞)
×-clofun' X Y (x₁ , y₁) (x₂ , y₂)
= min (c⟨ X ⟩ x₁ x₂) (c⟨ Y ⟩ y₁ y₂)
min-∞-l : (u v : ℕ∞) → min u v = ∞ → u = ∞
min-∞-l u v min=∞
= to-subtype-= (being-decreasing-is-prop (fe _ _))
(dfunext (fe _ _)
(λ i → Lemma[min𝟚ab=₁→a=₁] (ap (λ - → ℕ∞-to-ℕ→𝟚 - i) min=∞)))
min-∞-r : (u v : ℕ∞) → min u v = ∞ → v = ∞
min-∞-r u v min=∞
= to-subtype-= (being-decreasing-is-prop (fe _ _))
(dfunext (fe _ _)
(λ i → Lemma[min𝟚ab=₁→b=₁] (ap (λ - → ℕ∞-to-ℕ→𝟚 - i) min=∞)))
×-clofun'-e : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ indistinguishable-are-equal (×-clofun' X Y)
×-clofun'-e X Y (x₁ , y₁) (x₂ , y₂) cxy=∞
= ap (_, y₁) (e⟨ X ⟩ x₁ x₂ cx=∞) ∙ ap (x₂ ,_) (e⟨ Y ⟩ y₁ y₂ cy=∞)
where
cx=∞ : c⟨ X ⟩ x₁ x₂ = ∞
cx=∞ = min-∞-l (c⟨ X ⟩ x₁ x₂) (c⟨ Y ⟩ y₁ y₂) cxy=∞
cy=∞ : c⟨ Y ⟩ y₁ y₂ = ∞
cy=∞ = min-∞-r (c⟨ X ⟩ x₁ x₂) (c⟨ Y ⟩ y₁ y₂) cxy=∞
×-clofun'-i : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ self-indistinguishable (×-clofun' X Y)
×-clofun'-i X Y (x , y)
= ap (λ - → min - (c⟨ Y ⟩ y y)) (i⟨ X ⟩ x)
∙ ap ( min ∞ ) (i⟨ Y ⟩ y)
×-clofun'-s : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ is-symmetric (×-clofun' X Y)
×-clofun'-s X Y (x₁ , y₁) (x₂ , y₂)
= ap (λ - → min - (c⟨ Y ⟩ y₁ y₂)) (s⟨ X ⟩ x₁ x₂)
∙ ap ( min (c⟨ X ⟩ x₂ x₁) ) (s⟨ Y ⟩ y₁ y₂)
min𝟚-abcd : {a b c d : 𝟚} → a = c → b = d → min𝟚 a b = min𝟚 c d
min𝟚-abcd {a} {b} {.a} {.b} refl refl = refl
min𝟚-abcd-ac : (a b c d : 𝟚)
→ min𝟚 (min𝟚 a b) (min𝟚 c d) = ₁
→ min𝟚 a c = ₁
min𝟚-abcd-ac ₁ ₁ ₁ ₁ e = refl
min𝟚-abcd-bd : (a b c d : 𝟚)
→ min𝟚 (min𝟚 a b) (min𝟚 c d) = ₁
→ min𝟚 b d = ₁
min𝟚-abcd-bd ₁ ₁ ₁ ₁ e = refl
minℕ∞-abcdef : (a b c d e f : ℕ∞)
→ min a b ≼ e → min c d ≼ f
→ min (min a c) (min b d) ≼ min e f
minℕ∞-abcdef a b c d e f mab≼e mcd≼f n minabcd=₁
= Lemma[a=₁→b=₁→min𝟚ab=₁]
(mab≼e n (min𝟚-abcd-ac
(ℕ∞-to-ℕ→𝟚 a n) (ℕ∞-to-ℕ→𝟚 c n) (ℕ∞-to-ℕ→𝟚 b n) (ℕ∞-to-ℕ→𝟚 d n)
minabcd=₁))
(mcd≼f n (min𝟚-abcd-bd
(ℕ∞-to-ℕ→𝟚 a n) (ℕ∞-to-ℕ→𝟚 c n) (ℕ∞-to-ℕ→𝟚 b n) (ℕ∞-to-ℕ→𝟚 d n)
minabcd=₁))
×-clofun'-u : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ is-ultra (×-clofun' X Y)
×-clofun'-u X Y (x₁ , y₁) (x₂ , y₂) (x₃ , y₃)
= minℕ∞-abcdef
(c⟨ X ⟩ x₁ x₂) (c⟨ X ⟩ x₂ x₃)
(c⟨ Y ⟩ y₁ y₂) (c⟨ Y ⟩ y₂ y₃)
(c⟨ X ⟩ x₁ x₃) (c⟨ Y ⟩ y₁ y₃)
(u⟨ X ⟩ x₁ x₂ x₃) (u⟨ Y ⟩ y₁ y₂ y₃)
×-clofun'-is-clofun : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ is-closeness (×-clofun' X Y)
×-clofun'-is-clofun X Y
= ×-clofun'-e X Y
, ×-clofun'-i X Y
, ×-clofun'-s X Y
, ×-clofun'-u X Y
×-clospace : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ is-closeness-space (⟨ X ⟩ × ⟨ Y ⟩)
×-clospace X Y = ×-clofun' X Y , ×-clofun'-is-clofun X Y
×-ClosenessSpace : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ ClosenessSpace (𝓤 ⊔ 𝓥)
×-ClosenessSpace X Y = (⟨ X ⟩ × ⟨ Y ⟩) , (×-clospace X Y)
×-C-left : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ (x₁ x₂ : ⟨ X ⟩) (y₁ y₂ : ⟨ Y ⟩)
→ (ε : ℕ) → C (×-ClosenessSpace X Y) ε (x₁ , y₁) (x₂ , y₂)
→ C X ε x₁ x₂
×-C-left X Y x₁ x₂ y₁ y₂ ε Cxy n = Lemma[min𝟚ab=₁→a=₁] ∘ (Cxy n)
×-C-right : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ (x₁ x₂ : ⟨ X ⟩) (y₁ y₂ : ⟨ Y ⟩)
→ (ε : ℕ) → C (×-ClosenessSpace X Y) ε (x₁ , y₁) (x₂ , y₂)
→ C Y ε y₁ y₂
×-C-right X Y x₁ x₂ y₁ y₂ ε Cxy n = Lemma[min𝟚ab=₁→b=₁] ∘ (Cxy n)
×-C-combine : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ (x₁ x₂ : ⟨ X ⟩) (y₁ y₂ : ⟨ Y ⟩)
→ (ε : ℕ)
→ C X ε x₁ x₂
→ C Y ε y₁ y₂
→ C (×-ClosenessSpace X Y) ε (x₁ , y₁) (x₂ , y₂)
×-C-combine X Y x₁ x₂ y₁ y₂ ε Cεx₁x₂ Cεy₁y₂ n n⊏ε
= Lemma[a=₁→b=₁→min𝟚ab=₁] (Cεx₁x₂ n n⊏ε) (Cεy₁y₂ n n⊏ε)
×-preserves-nets : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ (ε : ℕ)
→ (X' : 𝓤' ̇ ) (Y' : 𝓥' ̇ )
→ X' is ε net-of X
→ Y' is ε net-of Y
→ (X' × Y') is ε net-of (×-ClosenessSpace X Y)
×-preserves-nets X Y ε X' Y'
((gx , hx , ηx) , fx) ((gy , hy , ηy) , fy) = (g , h , η) , f
where
g : X' × Y' → ⟨ X ⟩ × ⟨ Y ⟩
g (x' , y') = gx x' , gy y'
h : ⟨ X ⟩ × ⟨ Y ⟩ → X' × Y'
h (x , y ) = hx x , hy y
η : (x : ⟨ X ⟩ × ⟨ Y ⟩) → C (×-ClosenessSpace X Y) ε x (g (h x))
η (x , y )
= ×-C-combine X Y x (gx (hx x)) y (gy (hy y)) ε (ηx x) (ηy y)
f : finite-linear-order (X' × Y')
f = ×-is-finite fx fy
×-totally-bounded : (X : ClosenessSpace 𝓤) (Y : ClosenessSpace 𝓥)
→ totally-bounded X 𝓤'
→ totally-bounded Y 𝓥'
→ totally-bounded (×-ClosenessSpace X Y) (𝓤' ⊔ 𝓥')
×-totally-bounded X Y tx ty ε
= (X' × Y') , (×-preserves-nets X Y ε X' Y' X'-is-ε-net Y'-is-ε-net)
where
X' = pr₁ (tx ε)
Y' = pr₁ (ty ε)
X'-is-ε-net = pr₂ (tx ε)
Y'-is-ε-net = pr₂ (ty ε)
\end{code}
## Vector closeness spaces
\begin{code}
vec-ClosenessSpace : (n : ℕ) (X : Fin n → ClosenessSpace 𝓤)
→ ClosenessSpace 𝓤
vec-clospace : (n : ℕ) (X : Fin n → ClosenessSpace 𝓤)
→ is-closeness-space (vec n (⟨_⟩ ∘ X))
vec-ClosenessSpace n X = (vec n (⟨_⟩ ∘ X)) , vec-clospace n X
vec-clospace 0 X = (λ _ _ → ∞) , e , i , s , u
where
e : indistinguishable-are-equal (λ _ _ → ∞)
e ⟨⟩ ⟨⟩ _ = refl
i : self-indistinguishable (λ _ _ → ∞)
i ⟨⟩ = refl
s : is-symmetric (λ _ _ → ∞)
s ⟨⟩ ⟨⟩ = refl
u : is-ultra (λ _ _ → ∞)
u ⟨⟩ ⟨⟩ ⟨⟩ _ _ = refl
vec-clospace (succ n) X
= ×-clospace (X 𝟎) (vec-ClosenessSpace n (X ∘ suc))
vec-totally-bounded : (n : ℕ) (X : Fin n → ClosenessSpace 𝓤)
→ ((i : Fin n) → totally-bounded (X i) 𝓥)
→ totally-bounded (vec-ClosenessSpace n X) 𝓥
vec-totally-bounded 0 X t ϵ = 𝟙 , ((g , h , η) , 𝟙-is-finite)
where
g : 𝟙 → vec 0 (⟨_⟩ ∘ X)
g _ = ⟨⟩
h : vec 0 (⟨_⟩ ∘ X) → 𝟙
h _ = ⋆
η : (x : vec 0 (⟨_⟩ ∘ X)) → C (vec-ClosenessSpace 0 X) ϵ x ⟨⟩
η ⟨⟩ = C-refl (vec-ClosenessSpace 0 X) ϵ ⟨⟩
vec-totally-bounded (succ n) X t
= ×-totally-bounded
(X 𝟎) (vec-ClosenessSpace n (X ∘ suc))
(t 𝟎) (vec-totally-bounded n (X ∘ suc) (t ∘ suc))
Vec-clospace : (X : ClosenessSpace 𝓤) (n : ℕ)
→ is-closeness-space (Vec ⟨ X ⟩ n)
Vec-clospace X n = vec-clospace n (λ _ → X)
Vec-ClosenessSpace : (X : ClosenessSpace 𝓤) (n : ℕ)
→ ClosenessSpace 𝓤
Vec-ClosenessSpace X n = Vec ⟨ X ⟩ n , Vec-clospace X n
Vec-totally-bounded : (X : ClosenessSpace 𝓤) (n : ℕ)
→ totally-bounded X 𝓥
→ totally-bounded (Vec-ClosenessSpace X n) 𝓥
Vec-totally-bounded X n t = vec-totally-bounded n (λ _ → X) (λ _ → t)
\end{code}
## Least closeness pseudocloseness space
\begin{code}
Least-clofun : (X : 𝓤 ̇ ) (Y : ClosenessSpace 𝓥)
→ {n : ℕ}
→ Vec X n
→ ((X → ⟨ Y ⟩) → (X → ⟨ Y ⟩) → ℕ∞)
Least-clofun X Y {n} v f g
= pr₁ (Vec-clospace Y n) (vec-map f v) (vec-map g v)
Least-clofun-is-psclofun
: (X : 𝓤 ̇ ) (Y : ClosenessSpace 𝓥)
→ {n : ℕ}
→ (v : Vec X n)
→ is-pseudocloseness (Least-clofun X Y v)
Least-clofun-is-psclofun X Y {n} v
= (λ f → pr₁ (pr₂ γ) (vec-map f v))
, (λ f g → pr₁ (pr₂ (pr₂ γ)) (vec-map f v) (vec-map g v))
, (λ f g h → pr₂ (pr₂ (pr₂ γ)) (vec-map f v) (vec-map g v) (vec-map h v))
where
γ : is-closeness (pr₁ (Vec-clospace Y n))
γ = pr₂ (Vec-clospace Y n)
Least-PseudoClosenessSpace : (X : 𝓤 ̇ ) (Y : ClosenessSpace 𝓥)
→ (f : X → ⟨ Y ⟩)
→ {n : ℕ}
→ Vec X n
→ PseudoClosenessSpace (𝓤 ⊔ 𝓥)
Least-PseudoClosenessSpace X Y f v
= (X → ⟨ Y ⟩)
, Least-clofun X Y v
, Least-clofun-is-psclofun X Y v
close-to-close : (X : ClosenessSpace 𝓤)
→ (Y : ClosenessSpace 𝓥)
→ (Z : ClosenessSpace 𝓦)
→ (f : ⟨ X ⟩ → ⟨ Y ⟩ → ⟨ Z ⟩)
→ {n : ℕ} (v : Vec ⟨ Y ⟩ n)
→ ((y : ⟨ Y ⟩) → f-ucontinuous X Z (λ x → f x y))
→ ((g : ⟨ Y ⟩ → ⟨ Z ⟩) → f-ucontinuous' (ι X)
(Least-PseudoClosenessSpace ⟨ Y ⟩ Z g v)
f)
close-to-close X Y Z f {0} ⟨⟩ _ k ε = 0 , λ _ _ _ _ _ → refl
close-to-close X Y Z f {succ n} v@(y :: ys) ϕʸ g ε = δ , γ
where
IH = close-to-close X Y Z f ys ϕʸ g ε
δ δ₁ δ₂ : ℕ
δ₁ = pr₁ (ϕʸ y ε)
δ₂ = pr₁ IH
δ = max δ₁ δ₂
γ : (x₁ x₂ : ⟨ X ⟩) → C X δ x₁ x₂
→ C' (Least-PseudoClosenessSpace ⟨ Y ⟩ Z g v) ε (f x₁) (f x₂)
γ x₁ x₂ Cx₁x₂ n z
= Lemma[a=₁→b=₁→min𝟚ab=₁]
(pr₂ (ϕʸ y ε) x₁ x₂
(C-mono X δ δ₁ (max-≤-upper-bound δ₁ δ₂) x₁ x₂ Cx₁x₂) n z)
(pr₂ IH x₁ x₂
(C-mono X δ δ₂ (max-≤-upper-bound' δ₂ δ₁) x₁ x₂ Cx₁x₂) n z)
\end{code}
## Subtype closeness spaces
\begin{code}
↪-clospace : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X ↪ Y)
→ is-closeness-space Y
→ is-closeness-space X
↪-clospace {𝓤} {𝓥} {X} {Y} (f , η) (cy , ey , iy , sy , uy)
= c , e , i , s , u
where
c : X → X → ℕ∞
c x y = cy (f x) (f y)
e : indistinguishable-are-equal c
e x y cxy=∞
= ap pr₁ (η (f y) (x , ey (f x) (f y) cxy=∞) (y , refl))
i : self-indistinguishable c
i x = iy (f x)
s : is-symmetric c
s x y = sy (f x) (f y)
u : is-ultra c
u x y z = uy (f x) (f y) (f z)
↪-ClosenessSpace : {X : 𝓤 ̇ } (Y : ClosenessSpace 𝓥)
→ X ↪ ⟨ Y ⟩
→ ClosenessSpace 𝓤
↪-ClosenessSpace {𝓤} {𝓥} {X} Y f = X , ↪-clospace f (pr₂ Y)
Σ-clospace : {X : 𝓤 ̇ }
→ (P : X → 𝓥 ̇ )
→ (p : (x : X) → is-prop (P x))
→ is-closeness-space X
→ is-closeness-space (Σ P)
Σ-clospace P p i = ↪-clospace (pr₁ , pr₁-is-embedding p) i
Σ-ClosenessSpace : (X : ClosenessSpace 𝓤)
→ (P : ⟨ X ⟩ → 𝓥 ̇ )
→ (p : (x : ⟨ X ⟩) → is-prop (P x))
→ ClosenessSpace (𝓤 ⊔ 𝓥)
Σ-ClosenessSpace {𝓤} {𝓥} X P p
= Σ P , Σ-clospace P p (pr₂ X)
≃-ClosenessSpace : {X : 𝓤 ̇ } (Y : ClosenessSpace 𝓥)
→ X ≃ ⟨ Y ⟩
→ ClosenessSpace 𝓤
≃-ClosenessSpace Y e
= ↪-ClosenessSpace Y (equivs-embedding e)
≃-preserves-nets : {X : 𝓤 ̇ } (Y : ClosenessSpace 𝓥)
→ (e : X ≃ ⟨ Y ⟩)
→ (ε : ℕ)
→ (Y' : 𝓥' ̇ )
→ Y' is ε net-of Y
→ Y' is ε net-of (≃-ClosenessSpace Y e)
≃-preserves-nets Y (f , ((g , η) , (h , μ))) ε Y' ((gₙ , hₙ , ηₙ) , fₙ)
= (g ∘ gₙ , hₙ ∘ f
, λ x
→ C-trans Y ε (f x) (gₙ (hₙ (f x))) (f (g (gₙ (hₙ (f x))))) (ηₙ (f x))
(closeness-∞-implies-ϵ-close Y (gₙ (hₙ (f x))) (f (g (gₙ (hₙ (f x)))))
(identical-implies-closeness-∞ Y _ _ (η (gₙ (hₙ (f x))) ⁻¹)) ε))
, fₙ
≃-totally-bounded : {X : 𝓤 ̇ }
→ (Y : ClosenessSpace 𝓥)
→ (e : X ≃ ⟨ Y ⟩)
→ totally-bounded Y 𝓥'
→ totally-bounded (≃-ClosenessSpace Y e) 𝓥'
≃-totally-bounded Y e t ε
= pr₁ (t ε) , ≃-preserves-nets Y e ε (pr₁ (t ε)) (pr₂ (t ε))
\end{code}
## Discrete sequence closeness spaces
\begin{code}
decidable-𝟚 : {X : 𝓤 ̇ } → is-decidable X → 𝟚
decidable-𝟚 (inl _) = ₁
decidable-𝟚 (inr _) = ₀
decidable-𝟚₁ : {X : 𝓤 ̇ } (d : is-decidable X)
→ X
→ decidable-𝟚 d = ₁
decidable-𝟚₁ (inl x) _ = refl
decidable-𝟚₁ (inr ¬x) x = 𝟘-elim (¬x x)
decidable-𝟚₀ : {X : 𝓤 ̇ } (d : is-decidable X)
→ ¬ X
→ decidable-𝟚 d = ₀
decidable-𝟚₀ (inl x) ¬x = 𝟘-elim (¬x x)
decidable-𝟚₀ (inr ¬x) _ = refl
𝟚-decidable₁ : {X : 𝓤 ̇ } (d : is-decidable X)
→ decidable-𝟚 d = ₁ → X
𝟚-decidable₁ (inl x) _ = x
𝟚-decidable₀ : {X : 𝓤 ̇ } (d : is-decidable X)
→ decidable-𝟚 d = ₀
→ ¬ X
𝟚-decidable₀ (inr ¬x) _ = ¬x
decidable-seq-𝟚 : {X : ℕ → 𝓤 ̇ } → is-complemented X → (ℕ → 𝟚)
decidable-seq-𝟚 d n = decidable-𝟚 (d (succ n))
discrete-seq-clofun'
: {X : ℕ → 𝓤 ̇ } → ((i : ℕ) → is-discrete (X i)) → Π X → Π X → (ℕ → 𝟚)
discrete-seq-clofun' d α β
= decidable-seq-𝟚 (∼ⁿ-decidable d α β)
discrete-seq-clofun'-e
: {X : ℕ → 𝓤 ̇ }
→ (d : (i : ℕ) → is-discrete (X i))
→ (α β : Π X)
→ ((n : ℕ) → discrete-seq-clofun' d α β n = ₁)
→ α = β
discrete-seq-clofun'-e d α β f
= dfunext (fe _ _)
(λ n → 𝟚-decidable₁ (∼ⁿ-decidable d α β (succ n))
(f n) n (<-succ n))
discrete-seq-clofun'-i
: {X : ℕ → 𝓤 ̇ }
→ (d : (i : ℕ) → is-discrete (X i))
→ (α : Π X)
→ (n : ℕ) → discrete-seq-clofun' d α α n = ₁
discrete-seq-clofun'-i d α n
= decidable-𝟚₁ (∼ⁿ-decidable d α α (succ n)) (λ _ _ → refl)
discrete-seq-clofun'-s
: {X : ℕ → 𝓤 ̇ }
→ (d : (i : ℕ) → is-discrete (X i))
→ (α β : Π X)
→ (n : ℕ)
→ discrete-seq-clofun' d α β n = discrete-seq-clofun' d β α n
discrete-seq-clofun'-s d α β n
= γ (∼ⁿ-decidable d α β (succ n)) (∼ⁿ-decidable d β α (succ n))
where
γ : (dαβ : is-decidable ((α ∼ⁿ β) (succ n)))
→ (dβα : is-decidable ((β ∼ⁿ α) (succ n)))
→ decidable-𝟚 dαβ = decidable-𝟚 dβα
γ (inl _) (inl _) = refl
γ (inr _) (inr _) = refl
γ (inl f) (inr g) = 𝟘-elim (g (∼ⁿ-sym α β (succ n) f))
γ (inr f) (inl g) = 𝟘-elim (f (∼ⁿ-sym β α (succ n) g))
discrete-seq-clofun'-u
: {X : ℕ → 𝓤 ̇ }
→ (d : (i : ℕ) → is-discrete (X i))
→ (α β ζ : Π X)
→ (n : ℕ)
→ min𝟚 (discrete-seq-clofun' d α β n)
(discrete-seq-clofun' d β ζ n) = ₁
→ discrete-seq-clofun' d α ζ n = ₁
discrete-seq-clofun'-u d α β ζ n
= γ (∼ⁿ-decidable d α β (succ n))
(∼ⁿ-decidable d β ζ (succ n))
(∼ⁿ-decidable d α ζ (succ n))
where
γ : (dαβ : is-decidable ((α ∼ⁿ β) (succ n)))
→ (dβζ : is-decidable ((β ∼ⁿ ζ) (succ n)))
→ (dαζ : is-decidable ((α ∼ⁿ ζ) (succ n)))
→ min𝟚 (decidable-𝟚 dαβ) (decidable-𝟚 dβζ) = ₁
→ decidable-𝟚 dαζ = ₁
γ _ _ (inl _) _ = refl
γ (inl α∼ⁿβ) (inl β∼ⁿζ) (inr ¬α∼ⁿζ) m
= 𝟘-elim (¬α∼ⁿζ (λ i i<n → α∼ⁿβ i i<n ∙ β∼ⁿζ i i<n))
∼ⁿ-decidable-𝟚-decreasing
: {X : ℕ → 𝓤 ̇ }
→ (d : (i : ℕ) → is-discrete (X i))
→ (α β : Π X)
→ is-decreasing (discrete-seq-clofun' d α β)
∼ⁿ-decidable-𝟚-decreasing d α β n
= ≤₂-criterion (γ (∼ⁿ-decidable d α β (succ n))
(∼ⁿ-decidable d α β (succ (succ n))))
where
γ : (dαβₛₙ : is-decidable ((α ∼ⁿ β) (succ n)))
→ (dαβₛₛₙ : is-decidable ((α ∼ⁿ β) (succ (succ n))))
→ decidable-𝟚 dαβₛₛₙ = ₁
→ decidable-𝟚 dαβₛₙ = ₁
γ (inl _) (inl _) _ = refl
γ (inl _) (inr _) _ = refl
γ (inr ¬α∼ˢⁿβ) (inl α∼ˢˢⁿβ) _
= (𝟘-elim ∘ ¬α∼ˢⁿβ)
(λ i i<sn → α∼ˢˢⁿβ i
(<-trans i (succ n) (succ (succ n)) i<sn
(<-succ (succ n))))
discrete-seq-clofun
: {X : ℕ → 𝓤 ̇ }
→ ((i : ℕ) → is-discrete (X i))
→ Π X → Π X → ℕ∞
discrete-seq-clofun d α β
= discrete-seq-clofun' d α β
, ∼ⁿ-decidable-𝟚-decreasing d α β
discrete-seq-clofun-e
: {X : ℕ → 𝓤 ̇ }
→ (d : (i : ℕ) → is-discrete (X i))
→ indistinguishable-are-equal (discrete-seq-clofun d)
discrete-seq-clofun-e d α β cαβ=∞
= discrete-seq-clofun'-e d α β (λ n → ap (λ - → ℕ∞-to-ℕ→𝟚 - n) cαβ=∞)
discrete-seq-clofun-i : {X : ℕ → 𝓤 ̇ }
→ (d : (i : ℕ) → is-discrete (X i))
→ self-indistinguishable (discrete-seq-clofun d)
discrete-seq-clofun-i d α
= to-subtype-= (being-decreasing-is-prop (fe _ _))
(dfunext (fe _ _) (discrete-seq-clofun'-i d α))
discrete-seq-clofun-s : {X : ℕ → 𝓤 ̇ }
→ (d : (i : ℕ) → is-discrete (X i))
→ is-symmetric (discrete-seq-clofun d)
discrete-seq-clofun-s d α β
= to-subtype-= (being-decreasing-is-prop (fe _ _))
(dfunext (fe _ _) (discrete-seq-clofun'-s d α β))
discrete-seq-clofun-u : {X : ℕ → 𝓤 ̇ }
→ (d : (i : ℕ) → is-discrete (X i))
→ is-ultra (discrete-seq-clofun d)
discrete-seq-clofun-u = discrete-seq-clofun'-u
discrete-seq-clofun-c : {X : ℕ → 𝓤 ̇ }
→ (d : (i : ℕ) → is-discrete (X i))
→ is-closeness (discrete-seq-clofun d)
discrete-seq-clofun-c d = discrete-seq-clofun-e d
, discrete-seq-clofun-i d
, discrete-seq-clofun-s d
, discrete-seq-clofun-u d
discrete-seq-clospace : {X : ℕ → 𝓤 ̇ }
→ ((i : ℕ) → is-discrete (X i))
→ is-closeness-space (Π X)
discrete-seq-clospace d = discrete-seq-clofun d
, discrete-seq-clofun-c d
ΠD-ClosenessSpace : {X : ℕ → 𝓤 ̇ }
→ (d : (i : ℕ) → is-discrete (X i))
→ ClosenessSpace 𝓤
ΠD-ClosenessSpace {𝓤} {X} d = Π X , discrete-seq-clospace d
∼ⁿ-to-C' : {X : ℕ → 𝓤 ̇ }
→ (d : (i : ℕ) → is-discrete (X i))
→ (α β : Π X) (n : ℕ)
→ (α ∼ⁿ β) n
→ C (ΠD-ClosenessSpace d) n α β
∼ⁿ-to-C' d α β (succ n) α∼ⁿβ i i<n
= is-decreasing' (discrete-seq-clofun d α β)
n i (⊏-gives-< i (succ n) i<n)
(decidable-𝟚₁ (∼ⁿ-decidable d α β (succ n)) α∼ⁿβ)
C-to-∼ⁿ' : {X : ℕ → 𝓤 ̇ }
→ (d : (i : ℕ) → is-discrete (X i))
→ (α β : Π X) (n : ℕ)
→ C (ΠD-ClosenessSpace d) n α β
→ (α ∼ⁿ β) n
C-to-∼ⁿ' d α β (succ n) Cαβ i i<n
= 𝟚-decidable₁ (∼ⁿ-decidable d α β (succ n))
(Cαβ n (<-gives-⊏ n (succ n) (<-succ n))) i i<n
ℕ→D-ClosenessSpace : {X : 𝓤 ̇ }
→ (d : is-discrete X)
→ ClosenessSpace 𝓤
ℕ→D-ClosenessSpace {𝓤} {X} d = ΠD-ClosenessSpace (λ _ → d)
∼ⁿ-to-C : {X : 𝓤 ̇ } → (d : is-discrete X)
→ (α β : (ℕ → X)) (n : ℕ)
→ (α ∼ⁿ β) n
→ C (ℕ→D-ClosenessSpace d) n α β
∼ⁿ-to-C d = ∼ⁿ-to-C' (λ _ → d)
C-to-∼ⁿ : {X : 𝓤 ̇ } → (d : is-discrete X)
→ (α β : (ℕ → X)) (n : ℕ)
→ C (ℕ→D-ClosenessSpace d) n α β
→ (α ∼ⁿ β) n
C-to-∼ⁿ d = C-to-∼ⁿ' (λ _ → d)
ΠF-totally-bounded : {F : ℕ → 𝓤 ̇ }
→ (d : (i : ℕ) → is-discrete (F i))
→ (f : (i : ℕ) → finite-linear-order (F i))
→ Π F
→ totally-bounded (ΠD-ClosenessSpace d) 𝓤
ΠF-totally-bounded {𝓤} {F} d f α ϵ
= vec ϵ (F ∘ ⟦_⟧)
, (Vec-to-Seq ϵ (α ∘ succ ^ ϵ) , Seq-to-Vec ϵ , γ)
, vec-is-finite ϵ (f ∘ ⟦_⟧)
where
γ : (β : ⟨ ΠD-ClosenessSpace d ⟩)
→ C (ΠD-ClosenessSpace d) ϵ β
(Vec-to-Seq ϵ (α ∘ succ ^ ϵ) (Seq-to-Vec ϵ β))
γ β n n⊏ϵ = decidable-𝟚₁ (∼ⁿ-decidable d _ _ _)
(λ i i<sn → Seq-to-Vec-∼ ϵ (α ∘ succ ^ ϵ) β i
(≤-<-trans i n ϵ i<sn (⊏-gives-< n ϵ n⊏ϵ)))
ℕ→F-totally-bounded : {F : 𝓤 ̇ }
→ (d : is-discrete F)
→ (f : finite-linear-order F) → F
→ totally-bounded (ℕ→D-ClosenessSpace d) 𝓤
ℕ→F-totally-bounded {𝓤} {F} d f x₀
= ΠF-totally-bounded (λ _ → d) (λ _ → f) (λ _ → x₀)
\end{code}
## Infinitary product of closeness spaces
\begin{code}
Π-clofun' : (T : ℕ → ClosenessSpace 𝓤)
→ Π (⟨_⟩ ∘ T) → Π (⟨_⟩ ∘ T) → (ℕ → 𝟚)
Π-clofun' T x y zero = ℕ∞-to-ℕ→𝟚 (c⟨ T 0 ⟩ (x 0) (y 0)) 0
Π-clofun' T x y (succ n)
= min𝟚 (ℕ∞-to-ℕ→𝟚 (c⟨ T 0 ⟩ (x 0) (y 0)) (succ n))
(Π-clofun' (T ∘ succ) (x ∘ succ) (y ∘ succ) n)
Π-clofun'-d : (T : ℕ → ClosenessSpace 𝓤)
→ (x y : Π (⟨_⟩ ∘ T))
→ is-decreasing (Π-clofun' T x y)
Π-clofun'-d T x y zero
= ≤₂-trans _ _ _ Lemma[minab≤₂a] (pr₂ (c⟨ T 0 ⟩ (x 0) (y 0)) 0)
Π-clofun'-d T x y (succ n)
= min𝟚-preserves-≤ (pr₂ (c⟨ T 0 ⟩ (x 0) (y 0)) (succ n))
(Π-clofun'-d (T ∘ succ) (x ∘ succ) (y ∘ succ) n)
Π-clofun'-all : (T : ℕ → ClosenessSpace 𝓤)
→ (x y : Π (⟨_⟩ ∘ T))
→ Π-clofun' T x y ∼ (λ i → ₁)
→ (n : ℕ)
→ (ℕ∞-to-ℕ→𝟚 (c⟨ T n ⟩ (x n) (y n))) ∼ (λ i → ₁)
Π-clofun'-all T x y cxy∼∞ 0 zero = cxy∼∞ 0
Π-clofun'-all T x y cxy∼∞ 0 (succ i)
= Lemma[min𝟚ab=₁→a=₁] (cxy∼∞ (succ i))
Π-clofun'-all T x y cxy∼∞ (succ n)
= Π-clofun'-all (T ∘ succ) (x ∘ succ) (y ∘ succ)
(λ i → Lemma[min𝟚ab=₁→b=₁] (cxy∼∞ (succ i))) n
Π-clofun'-e : (T : ℕ → ClosenessSpace 𝓤)
→ (x y : Π (⟨_⟩ ∘ T))
→ Π-clofun' T x y ∼ (λ i → ₁) → x = y
Π-clofun'-e T x y f
= dfunext (fe _ _)
(λ i → e⟨ T i ⟩ (x i) (y i)
(to-subtype-= (being-decreasing-is-prop (fe _ _))
(dfunext (fe _ _) (Π-clofun'-all T x y f i))))
Π-clofun'-i : (T : ℕ → ClosenessSpace 𝓤)
→ (x : Π (⟨_⟩ ∘ T)) → Π-clofun' T x x ∼ (λ i → ₁)
Π-clofun'-i T x 0 = ap (λ - → ℕ∞-to-ℕ→𝟚 - 0) (i⟨ T 0 ⟩ (x 0))
Π-clofun'-i T x (succ n)
= Lemma[a=₁→b=₁→min𝟚ab=₁]
(ap (λ - → ℕ∞-to-ℕ→𝟚 - (succ n)) (i⟨ T 0 ⟩ (x 0)))
(Π-clofun'-i (T ∘ succ) (x ∘ succ) n)
Π-clofun'-s : (T : ℕ → ClosenessSpace 𝓤)
→ (x y : Π (⟨_⟩ ∘ T))
→ Π-clofun' T x y ∼ Π-clofun' T y x
Π-clofun'-s T x y zero
= ap (λ - → ℕ∞-to-ℕ→𝟚 - 0) (s⟨ T 0 ⟩ (x 0) (y 0))
Π-clofun'-s T x y (succ n)
= ap (λ - → min𝟚 - (Π-clofun' (T ∘ succ) (x ∘ succ) (y ∘ succ) n))
(ap (λ - → pr₁ - (succ n)) (s⟨ T 0 ⟩ (x 0) (y 0)))
∙ ap (λ - → min𝟚 (pr₁ (c⟨ T 0 ⟩ (y 0) (x 0)) (succ n)) -)
(Π-clofun'-s (T ∘ succ) (x ∘ succ) (y ∘ succ) n)
Lemma[min𝟚abcd=₁→min𝟚ac=₁] : (a b c d : 𝟚)
→ min𝟚 (min𝟚 a b) (min𝟚 c d) = ₁
→ min𝟚 a c = ₁
Lemma[min𝟚abcd=₁→min𝟚ac=₁] ₁ ₁ ₁ ₁ e = refl
Lemma[min𝟚abcd=₁→min𝟚bd=₁] : (a b c d : 𝟚)
→ min𝟚 (min𝟚 a b) (min𝟚 c d) = ₁
→ min𝟚 b d = ₁
Lemma[min𝟚abcd=₁→min𝟚bd=₁] ₁ ₁ ₁ ₁ e = refl
Π-clofun'-u : (T : ℕ → ClosenessSpace 𝓤)
→ (x y z : Π (⟨_⟩ ∘ T))
→ (n : ℕ)
→ min𝟚 (Π-clofun' T x y n) (Π-clofun' T y z n) = ₁
→ Π-clofun' T x z n = ₁
Π-clofun'-u T x y z 0 η
= u⟨ T 0 ⟩ (x 0) (y 0) (z 0) 0 η
Π-clofun'-u T x y z (succ n) η
= Lemma[a=₁→b=₁→min𝟚ab=₁]
(u⟨ T 0 ⟩ (x 0) (y 0) (z 0) (succ n)
(Lemma[min𝟚abcd=₁→min𝟚ac=₁]
(ℕ∞-to-ℕ→𝟚 (c⟨ T 0 ⟩ (x 0) (y 0)) (succ n))
(Π-clofun' (T ∘ succ) (x ∘ succ) (y ∘ succ) n)
(ℕ∞-to-ℕ→𝟚 (c⟨ T 0 ⟩ (y 0) (z 0)) (succ n))
(Π-clofun' (T ∘ succ) (y ∘ succ) (z ∘ succ) n)
η))
(Π-clofun'-u (T ∘ succ) (x ∘ succ) (y ∘ succ) (z ∘ succ) n
(Lemma[min𝟚abcd=₁→min𝟚bd=₁]
(ℕ∞-to-ℕ→𝟚 (c⟨ T 0 ⟩ (x 0) (y 0)) (succ n))
(Π-clofun' (T ∘ succ) (x ∘ succ) (y ∘ succ) n)
(ℕ∞-to-ℕ→𝟚 (c⟨ T 0 ⟩ (y 0) (z 0)) (succ n))
(Π-clofun' (T ∘ succ) (y ∘ succ) (z ∘ succ) n)
η))
Π-clofun : (T : ℕ → ClosenessSpace 𝓤)
→ Π (⟨_⟩ ∘ T) → Π (⟨_⟩ ∘ T) → ℕ∞
Π-clofun T x y = (Π-clofun' T x y) , (Π-clofun'-d T x y)
Π-clofun-e : (T : ℕ → ClosenessSpace 𝓤)
→ indistinguishable-are-equal (Π-clofun T)
Π-clofun-e T x y f
= Π-clofun'-e T x y (λ i → ap (λ - → pr₁ - i) f)
Π-clofun-i : (T : ℕ → ClosenessSpace 𝓤)
→ self-indistinguishable (Π-clofun T)
Π-clofun-i T x
= to-subtype-= (being-decreasing-is-prop (fe _ _))
(dfunext (fe _ _) (Π-clofun'-i T x))
Π-clofun-s : (T : ℕ → ClosenessSpace 𝓤)
→ is-symmetric (Π-clofun T)
Π-clofun-s T x y
= to-subtype-= (being-decreasing-is-prop (fe _ _))
(dfunext (fe _ _) (Π-clofun'-s T x y))
Π-clofun-u : (T : ℕ → ClosenessSpace 𝓤)
→ is-ultra (Π-clofun T)
Π-clofun-u = Π-clofun'-u
Π-clofun-c : (T : ℕ → ClosenessSpace 𝓤)
→ is-closeness (Π-clofun T)
Π-clofun-c T = Π-clofun-e T , Π-clofun-i T
, Π-clofun-s T , Π-clofun-u T
Π-clospace : (T : ℕ → ClosenessSpace 𝓤)
→ is-closeness-space (Π (⟨_⟩ ∘ T))
Π-clospace T = Π-clofun T , Π-clofun-c T
Π-ClosenessSpace : (T : ℕ → ClosenessSpace 𝓤)
→ ClosenessSpace 𝓤
Π-ClosenessSpace T = Π (⟨_⟩ ∘ T) , Π-clospace T
Π-totally-bounded : (T : ℕ → ClosenessSpace 𝓤)
→ ((n : ℕ) → ⟨ T n ⟩)
→ ((n : ℕ) → totally-bounded (T n) 𝓦)
→ totally-bounded (Π-ClosenessSpace T) 𝓦
Π-totally-bounded {𝓤} {𝓦} T p t 0
= pointed-has-a-0-net (Π-ClosenessSpace T) p
Π-totally-bounded {𝓤} {𝓦} T p t (succ ϵ)
= (t₀' × IH') , (g , h , η) , f
where
c₀ = pr₁ (pr₂ (T 0))
t₀ = t 0 (succ ϵ)
t₀' = pr₁ t₀
t₀'-is-sϵ-net = pr₂ t₀
g₀' = pr₁ (pr₁ t₀'-is-sϵ-net)
h₀' = pr₁ (pr₂ (pr₁ t₀'-is-sϵ-net))
η₀' = pr₂ (pr₂ (pr₁ t₀'-is-sϵ-net))
IH = Π-totally-bounded (T ∘ succ) (p ∘ succ) (t ∘ succ) ϵ
IH' = pr₁ IH
IH'-is-ϵ-net = pr₂ IH
gₛ' = pr₁ (pr₁ IH'-is-ϵ-net)
hₛ' = pr₁ (pr₂ (pr₁ IH'-is-ϵ-net))
ηₛ' = pr₂ (pr₂ (pr₁ IH'-is-ϵ-net))
g : t₀' × IH' → Π (⟨_⟩ ∘ T)
g (x' , αₛ') = g₀' x' ∷ gₛ' αₛ'
h : Π (⟨_⟩ ∘ T) → t₀' × IH'
h α = h₀' (α 0) , hₛ' (α ∘ succ)
η : (x : Π (⟨_⟩ ∘ T)) → C (Π-ClosenessSpace T) (succ ϵ) x (g (h x))
η α 0 = η₀' (α 0) 0
η α (succ n) n⊏ϵ
= Lemma[a=₁→b=₁→min𝟚ab=₁]
(η₀' (α 0) (succ n) n⊏ϵ)
(ηₛ' (α ∘ succ) n n⊏ϵ)
f : finite-linear-order (t₀' × IH')
f = ×-is-finite (pr₂ t₀'-is-sϵ-net) (pr₂ IH'-is-ϵ-net)
Π-clofuns-id' : {T : ℕ → 𝓤 ̇ }
→ (d : (i : ℕ) → is-discrete (T i))
→ (x y : Π T)
→ discrete-seq-clofun' d x y
∼ Π-clofun' (λ n → D-ClosenessSpace (d n)) x y
Π-clofuns-id' d x y 0 = γ (∼ⁿ-decidable d x y 1) (d 0 (x 0) (y 0))
where
γ : (dx∼¹y : is-decidable ((x ∼ⁿ y) 1))
→ (dxy₀ : is-decidable (x 0 = y 0))
→ decidable-𝟚 dx∼¹y = pr₁ (discrete-clofun'' (x 0) (y 0) dxy₀) 0
γ (inl _) (inl _) = refl
γ (inr _) (inr _) = refl
γ (inl x∼¹y) (inr x₀≠y₀) = 𝟘-elim (x₀≠y₀ (x∼¹y 0 ⋆))
γ (inr ¬x∼¹y) (inl x₀=y₀) = 𝟘-elim (¬x∼¹y γ')
where
γ' : (x ∼ⁿ y) 1
γ' 0 ⋆ = x₀=y₀
Π-clofuns-id' d x y (succ i)
= γ (∼ⁿ-decidable d x y (succ (succ i))) (d 0 (x 0) (y 0))
where
γ' : x 0 = y 0
→ ((x ∘ succ) ∼ⁿ (y ∘ succ)) (succ i)
→ (x ∼ⁿ y) (succ (succ i))
γ' x₀=y₀ tx∼ˢⁱty 0 _ = x₀=y₀
γ' x₀=y₀ tx∼ˢⁱty (succ j) = tx∼ˢⁱty j
γ : (dx∼ˢˢⁱy : is-decidable ((x ∼ⁿ y) (succ (succ i))))
→ (dxy₀ : is-decidable (x 0 = y 0))
→ decidable-𝟚 dx∼ˢˢⁱy
= min𝟚 (pr₁ (discrete-clofun'' (x 0) (y 0) dxy₀) (succ i))
(Π-clofun' (λ n → D-ClosenessSpace (d (succ n)))
(x ∘ succ) (y ∘ succ) i)
γ (inl x∼ˢˢⁱy) (inl _)
= Lemma[a=₁→b=₁→min𝟚ab=₁] refl
(Π-clofuns-id' (d ∘ succ) (x ∘ succ) (y ∘ succ) i ⁻¹
∙ decidable-𝟚₁ (∼ⁿ-decidable (d ∘ succ) _ _ _)
(x∼ˢˢⁱy ∘ succ)) ⁻¹
γ (inl x∼ˢˢⁱy) (inr x₀≠y₀) = 𝟘-elim (x₀≠y₀ (x∼ˢˢⁱy 0 ⋆))
γ (inr ¬x∼ˢˢⁱy) (inl x₀=y₀)
= Lemma[min𝟚ab=₀]
(inr (Π-clofuns-id' (d ∘ succ) (x ∘ succ) (y ∘ succ) i ⁻¹
∙ decidable-𝟚₀ (∼ⁿ-decidable (d ∘ succ) _ _ _)
(λ tx∼ˢⁱty → ¬x∼ˢˢⁱy (γ' x₀=y₀ tx∼ˢⁱty)))) ⁻¹
γ (inr ¬x∼ˢˢⁱy) (inr x₀≠y₀) = refl
Π-clofuns-id
: {T : ℕ → 𝓤 ̇ }
→ (d : (i : ℕ) → is-discrete (T i))
→ c⟨ ΠD-ClosenessSpace d ⟩
= c⟨ Π-ClosenessSpace (λ n → D-ClosenessSpace (d n)) ⟩
Π-clofuns-id d
= dfunext (fe _ _) (λ x → dfunext (fe _ _) (λ y →
to-subtype-= (being-decreasing-is-prop (fe _ _))
(dfunext (fe _ _) (Π-clofuns-id' d x y))))
Π-C-combine : (T : ℕ → ClosenessSpace 𝓤)
→ (x₁ x₂ : ⟨ T 0 ⟩) (y₁ y₂ : Π (⟨_⟩ ∘ T ∘ succ))
→ (ε : ℕ)
→ C (T 0) (succ ε) x₁ x₂
→ C (Π-ClosenessSpace (T ∘ succ)) ε y₁ y₂
→ C (Π-ClosenessSpace T) (succ ε) (x₁ ∷ y₁) (x₂ ∷ y₂)
Π-C-combine T x₁ x₂ y₁ y₂ ε Cεx₁x₂ Cεy₁y₂ 0
= Cεx₁x₂ 0
Π-C-combine T x₁ x₂ y₁ y₂ ε Cεx₁x₂ Cεy₁y₂ (succ n) sn⊏ε
= Lemma[a=₁→b=₁→min𝟚ab=₁]
(Cεx₁x₂ (succ n) sn⊏ε)
(Cεy₁y₂ n sn⊏ε)
Π-C-eta : (T : ℕ → ClosenessSpace 𝓤)
→ (α : Π (⟨_⟩ ∘ T))
→ (ε : ℕ)
→ C (Π-ClosenessSpace T) ε α (α 0 ∷ (α ∘ succ))
Π-C-eta T α ε 0 = C-refl (T 0) ε (α 0) 0
Π-C-eta T α (succ ε) (succ n)
= Π-C-combine T (α 0) (α 0) (α ∘ succ) (α ∘ succ) ε
(C-refl (T 0) (succ ε) (α 0))
(C-refl (Π-ClosenessSpace (T ∘ succ)) ε (α ∘ succ))
(succ n)
\end{code}
## Specific examples of closeness spaces
\begin{code}
𝟚ᴺ-ClosenessSpace : ClosenessSpace 𝓤₀
𝟚ᴺ-ClosenessSpace = ℕ→D-ClosenessSpace 𝟚-is-discrete
𝟚ᴺ×𝟚ᴺ-ClosenessSpace : ClosenessSpace 𝓤₀
𝟚ᴺ×𝟚ᴺ-ClosenessSpace
= ×-ClosenessSpace 𝟚ᴺ-ClosenessSpace 𝟚ᴺ-ClosenessSpace
ℕ∞-ClosenessSpace : ClosenessSpace 𝓤₀
ℕ∞-ClosenessSpace
= Σ-ClosenessSpace 𝟚ᴺ-ClosenessSpace is-decreasing
(being-decreasing-is-prop (fe _ _))
open import TWA.Thesis.Chapter5.SignedDigit
𝟛ᴺ-ClosenessSpace : ClosenessSpace 𝓤₀
𝟛ᴺ-ClosenessSpace = ℕ→D-ClosenessSpace 𝟛-is-discrete
𝟛ᴺ×𝟛ᴺ-ClosenessSpace : ClosenessSpace 𝓤₀
𝟛ᴺ×𝟛ᴺ-ClosenessSpace
= ×-ClosenessSpace 𝟛ᴺ-ClosenessSpace 𝟛ᴺ-ClosenessSpace
\end{code}