Martin Escardo, November 2023.
\begin{code}
{-# OPTIONS --safe --without-K #-}
module CoNaturals.Type2Properties where
open import CoNaturals.Type hiding (is-finite')
open import CoNaturals.GenericConvergentSequence2
open import CoNaturals.Equivalence
open import MLTT.Spartan
open import MLTT.Two-Properties
open import Notation.CanonicalMap
open import TypeTopology.Cantor
open import UF.DiscreteAndSeparated
open import UF.Equiv
open import UF.FunExt
open import UF.Subsingletons
private
T = T-cantor
ϕ = ϕ-cantor
γ = γ-cantor
instance
Canonical-Map-ℕ-ℕ∞' : Canonical-Map ℕ ℕ∞'
ι {{Canonical-Map-ℕ-ℕ∞'}} = ℕ-to-ℕ∞'
canonical-map-ℕ∞'-ℕ→𝟚 : Canonical-Map ℕ∞' (ℕ → 𝟚)
ι {{canonical-map-ℕ∞'-ℕ→𝟚}} = ℕ∞'-to-ℕ→𝟚
module _ (fe : funext₀) where
open ℕ∞-equivalence fe
trivial-fact : (i : ℕ) → ϕ (ℕ∞-to-ℕ→𝟚 ∞) i = ₀
trivial-fact 0 = refl
trivial-fact (succ i) = refl
Zero-preservation : ℕ∞-to-ℕ∞' Zero = Zero'
Zero-preservation = to-subtype-= (has-at-most-one-₁-is-prop fe) (dfunext fe I)
where
I : ϕ (ι Zero) ∼ ι Zero'
I 0 = refl
I (succ i) = trivial-fact 0
Succ-preservation : (u : ℕ∞) → ℕ∞-to-ℕ∞' (Succ u) = Succ' (ℕ∞-to-ℕ∞' u)
Succ-preservation u@(α , d) = to-subtype-= (has-at-most-one-₁-is-prop fe) II
where
I : ϕ (ℕ∞-to-ℕ→𝟚 (Succ u)) ∼ cons ₀ (ι (ℕ∞-to-ℕ∞' u))
I 0 = refl
I (succ _) = refl
II : ϕ (ℕ∞-to-ℕ→𝟚 (Succ u)) = cons ₀ (ι (ℕ∞-to-ℕ∞' u))
II = dfunext fe I
∞-preservation : ℕ∞-to-ℕ∞' ∞ = ∞'
∞-preservation = to-subtype-= (has-at-most-one-₁-is-prop fe)
(dfunext fe trivial-fact)
∞-gives-∞' : (u : ℕ∞') → ℕ∞'-to-ℕ∞ u = ∞ → u = ∞'
∞-gives-∞' u e =
u =⟨ II₀ ⟩
ℕ∞-to-ℕ∞' (ℕ∞'-to-ℕ∞ u) =⟨ II₁ ⟩
ℕ∞-to-ℕ∞' ∞ =⟨ II₂ ⟩
∞' ∎
where
II₀ = (inverses-are-sections' ℕ∞-to-ℕ∞'-≃ u)⁻¹
II₁ = ap ℕ∞-to-ℕ∞' e
II₂ = ∞-preservation
∞'-gives-∞ : (u : ℕ∞) → ℕ∞-to-ℕ∞' u = ∞' → u = ∞
∞'-gives-∞ u e =
u =⟨ (inverses-are-retractions' ℕ∞-to-ℕ∞'-≃ u)⁻¹ ⟩
ℕ∞'-to-ℕ∞ (ℕ∞-to-ℕ∞' u) =⟨ ap ℕ∞'-to-ℕ∞ e ⟩
ℕ∞'-to-ℕ∞ ∞' =⟨ ap ℕ∞'-to-ℕ∞ (∞-preservation ⁻¹) ⟩
ℕ∞'-to-ℕ∞ (ℕ∞-to-ℕ∞' ∞) =⟨ inverses-are-retractions' ℕ∞-to-ℕ∞'-≃ ∞ ⟩
∞ ∎
finite-preservation : (n : ℕ) → ℕ∞-to-ℕ∞' (ι n) = ι n
finite-preservation 0 = Zero-preservation
finite-preservation (succ n) =
ℕ∞-to-ℕ∞' (ι (succ n)) =⟨ refl ⟩
ℕ∞-to-ℕ∞' (Succ (ι n)) =⟨ Succ-preservation (ι n) ⟩
Succ' (ℕ∞-to-ℕ∞' (ι n)) =⟨ ap Succ' (finite-preservation n) ⟩
Succ' (ι n) =⟨ refl ⟩
ι (succ n) ∎
finite-gives-finite' : (u : ℕ∞') → is-finite (ℕ∞'-to-ℕ∞ u) → is-finite' u
finite-gives-finite' u (n , e) = III
where
I : is-finite' (ι n)
I = ℕ-to-ℕ∞'-is-finite' n
II = ι n =⟨ (finite-preservation n)⁻¹ ⟩
ℕ∞-to-ℕ∞' (ι n) =⟨ ap ℕ∞-to-ℕ∞' e ⟩
ℕ∞-to-ℕ∞' (ℕ∞'-to-ℕ∞ u) =⟨ inverses-are-sections' ℕ∞-to-ℕ∞'-≃ u ⟩
u ∎
III : is-finite' u
III = transport is-finite' II I
finite'-preservation : (n : ℕ) → ℕ∞'-to-ℕ∞ (ι n) = ι n
finite'-preservation n =
ℕ∞'-to-ℕ∞ (ι n) =⟨ I ⟩
ℕ∞'-to-ℕ∞ (ℕ∞-to-ℕ∞' (ι n)) =⟨ II ⟩
ι n ∎
where
I = (ap ℕ∞'-to-ℕ∞ (finite-preservation n))⁻¹
II = inverses-are-retractions' ℕ∞-to-ℕ∞'-≃ (ι n)
ℕ-to-ℕ∞'-lc : left-cancellable ℕ-to-ℕ∞'
ℕ-to-ℕ∞'-lc {n} {n'} e =
ℕ-to-ℕ∞-lc (
ι n =⟨ (finite'-preservation n)⁻¹ ⟩
ℕ∞'-to-ℕ∞ (ι n) =⟨ ap ℕ∞'-to-ℕ∞ e ⟩
ℕ∞'-to-ℕ∞ (ι n') =⟨ finite'-preservation n' ⟩
ι n' ∎)
ℕ-to-ℕ∞'-diagonal : (n : ℕ) → ℕ∞'-to-ℕ→𝟚 (ι n) n = ₁
ℕ-to-ℕ∞'-diagonal 0 = refl
ℕ-to-ℕ∞'-diagonal (succ n) = ℕ-to-ℕ∞'-diagonal n
diagonal-lemma : (n : ℕ) (u : ℕ∞') → ℕ∞'-to-ℕ→𝟚 u n = ₁ → u = ι n
diagonal-lemma n u p = ℕ∞'-to-ℕ→𝟚-lc fe (dfunext fe f)
where
I : ℕ∞'-to-ℕ→𝟚 u n = ℕ∞'-to-ℕ→𝟚 (ι n) n
I = ℕ∞'-to-ℕ→𝟚 u n =⟨ p ⟩
₁ =⟨ (ℕ-to-ℕ∞'-diagonal n)⁻¹ ⟩
ℕ∞'-to-ℕ→𝟚 (ι n) n ∎
II : (i : ℕ) → n ≠ i → ℕ∞'-to-ℕ→𝟚 u i = ℕ∞'-to-ℕ→𝟚 (ι n) i
II i ν =
ℕ∞'-to-ℕ→𝟚 u i =⟨ II₀ ⟩
₀ =⟨ II₁ ⁻¹ ⟩
ℕ∞'-to-ℕ→𝟚 (ι n) i ∎
where
II₀ = different-from-₁-equal-₀
(λ (e : ℕ∞'-to-ℕ→𝟚 u i = ₁)
→ ν (ℕ∞'-index-uniqueness u p e))
II₁ = different-from-₁-equal-₀
(λ (e : ℕ∞'-to-ℕ→𝟚 (ι n) i = ₁)
→ ν (ℕ∞'-index-uniqueness (ι n) (ℕ-to-ℕ∞'-diagonal n) e))
f : (i : ℕ) → ℕ∞'-to-ℕ→𝟚 u i = ℕ∞'-to-ℕ→𝟚 (ι n) i
f i = Cases (ℕ-is-discrete n i)
(λ (q : n = i)
→ transport (λ - → ℕ∞'-to-ℕ→𝟚 u - = ℕ∞'-to-ℕ→𝟚 (ι n) -) q I)
(λ (ν : n ≠ i)
→ II i ν)
size'-property' : {u : ℕ∞'} (φ : is-finite' u) → ι (size' {u} φ) = u
size'-property' {u} φ = II ⁻¹
where
I : ℕ∞'-to-ℕ→𝟚 u (size' {u} φ) = ₁
I = size'-property {u} φ
II : u = ι (size' {u} φ)
II = diagonal-lemma (size' {u} φ) u I
finite'-is-natural : (u : ℕ∞') → is-finite' u → Σ n ꞉ ℕ , u = ι n
finite'-is-natural u (n , p) = (n , diagonal-lemma n u p)
finite'-gives-finite : (u : ℕ∞) → is-finite' (ℕ∞-to-ℕ∞' u) → is-finite u
finite'-gives-finite u (n , e) = III
where
I : is-finite (ι n)
I = ℕ-to-ℕ∞-is-finite n
II = ι n =⟨ II₀ ⟩
ℕ∞'-to-ℕ∞ (ι n) =⟨ II₁ ⟩
ℕ∞'-to-ℕ∞ (ℕ∞-to-ℕ∞' u) =⟨ II₂ ⟩
u ∎
where
II₀ = (finite'-preservation n)⁻¹
II₁ = ap ℕ∞'-to-ℕ∞ ((diagonal-lemma n (ℕ∞-to-ℕ∞' u) e)⁻¹)
II₂ = inverses-are-retractions' ℕ∞-to-ℕ∞'-≃ u
III : is-finite u
III = transport is-finite II I
finite'-isolated : (n : ℕ) → is-isolated (ℕ-to-ℕ∞' n)
finite'-isolated n u = I (finite-isolated fe n (ℕ∞'-to-ℕ∞ u))
where
I : is-decidable (ι n = ℕ∞'-to-ℕ∞ u) → is-decidable (ι n = u)
I (inl e) = inl (ι n =⟨ (finite-preservation n)⁻¹ ⟩
ℕ∞-to-ℕ∞' (ι n) =⟨ ap ℕ∞-to-ℕ∞' e ⟩
ℕ∞-to-ℕ∞' (ℕ∞'-to-ℕ∞ u) =⟨ ℕ∞-ε u ⟩
u ∎)
I (inr ν) = inr (λ (e : ι n = u)
→ ν (ι n =⟨ (finite'-preservation n)⁻¹ ⟩
ℕ∞'-to-ℕ∞ (ι n) =⟨ ap ℕ∞'-to-ℕ∞ e ⟩
ℕ∞'-to-ℕ∞ u ∎))
ℕ∞'-equality-criterion : (x y : ℕ∞')
→ ((n : ℕ) → ι n = x → ι n = y)
→ ((n : ℕ) → ι n = y → ι n = x)
→ x = y
ℕ∞'-equality-criterion x y f g = ℕ∞'-to-ℕ→𝟚-lc fe V
where
I : (n : ℕ) (x y : ℕ∞')
→ (ι n = x → ι n = y)
→ ℕ∞'-to-ℕ→𝟚 x n ≤₂ ℕ∞'-to-ℕ→𝟚 y n
I n x y h = ≤₂-criterion a
where
a : ℕ∞'-to-ℕ→𝟚 x n = ₁ → ℕ∞'-to-ℕ→𝟚 y n = ₁
a e = ℕ∞'-to-ℕ→𝟚 y n =⟨ (ap (λ - → - n) IV)⁻¹ ⟩
ℕ∞'-to-ℕ→𝟚 (ι n) n =⟨ ℕ-to-ℕ∞'-diagonal n ⟩
₁ ∎
where
II : ι n = x
II = (diagonal-lemma n x e)⁻¹
III : ι n = y
III = h II
IV : ℕ∞'-to-ℕ→𝟚 (ι n) = ℕ∞'-to-ℕ→𝟚 y
IV = ap ℕ∞'-to-ℕ→𝟚 III
V : ℕ∞'-to-ℕ→𝟚 x = ℕ∞'-to-ℕ→𝟚 y
V = dfunext fe (λ n → ≤₂-anti (I n x y (f n)) (I n y x (g n)))
open import TypeTopology.TotallySeparated
ℕ∞'-is-totally-separated : is-totally-separated ℕ∞'
ℕ∞'-is-totally-separated = equiv-to-totally-separated
ℕ∞-to-ℕ∞'-≃
(ℕ∞-is-totally-separated fe)
\end{code}