By Martin Escardo, 2 September 2011.
Modified in December 2011 assuming function extensionality (which is
not used directly in this module, but instead in
GenericConvergentSequence).
We prove that the generic convergent sequence ℕ∞ is compact, or
searchable, which amounts to Theorem-3·6 of the paper
https://www.cs.bham.ac.uk/~mhe/papers/omniscient-journal-revised.pdf
http://www.cs.bham.ac.uk/~mhe/.talks/dagstuhl2011/omniscient.pdf
(Continuity axioms and the fan principle are not assumed.)
\begin{code}
{-# OPTIONS --safe --without-K #-}
open import MLTT.Spartan
open import UF.FunExt
module TypeTopology.GenericConvergentSequenceCompactness (fe : funext 𝓤₀ 𝓤₀) where
open import CoNaturals.Type
open import MLTT.Two-Properties
open import Notation.CanonicalMap
open import TypeTopology.CompactTypes
open import UF.DiscreteAndSeparated
open import UF.PropTrunc
\end{code}
We recall the main notions defined in the above imported modules:
\begin{code}
private
module recall {X : 𝓤 ̇ } where
recall₀ : is-compact∙ X = (Π p ꞉ (X → 𝟚) , Σ x₀ ꞉ X , (p x₀ = ₁ → Π x ꞉ X , p x = ₁))
recall₁ : is-compact X = (Π p ꞉ (X → 𝟚) , (Σ x ꞉ X , p x = ₀) + (Π x ꞉ X , p x = ₁))
recall₂ : is-discrete X = ((x y : X) → (x = y) + (x ≠ y))
recall₀ = by-definition
recall₁ = by-definition
recall₂ = by-definition
\end{code}
This is the main theorem proved in this module.
\begin{code}
ℕ∞-compact∙ : is-compact∙ ℕ∞
ℕ∞-compact∙ p = a , Lemma
where
α : ℕ → 𝟚
α 0 = p (ι 0)
α (succ n) = min𝟚 (α n) (p (ι (succ n)))
d : is-decreasing α
d n = Lemma[minab≤₂a] {α n}
a : ℕ∞
a = (α , d)
Dagger₀ : (n : ℕ) → a = ι n → p (ι n) = ₀
Dagger₀ 0 r = p (ι 0) =⟨ refl ⟩
α 0 =⟨ ap (λ - → ι - 0) r ⟩
ι (ι 0) 0 =⟨ refl ⟩
₀ ∎
Dagger₀ (succ n) r = p (ι (succ n)) =⟨ w ⁻¹ ⟩
α (succ n) =⟨ ap (λ - → ι - (succ n)) r ⟩
ι (ι (succ n)) (succ n) =⟨ ℕ-to-ℕ∞-diagonal₀ n ⟩
₀ ∎
where
t = α n =⟨ ap (λ - → ι - n) r ⟩
ι (ι (succ n)) n =⟨ ℕ-to-ℕ∞-diagonal₁ n ⟩
₁ ∎
w = α (succ n) =⟨ ap (λ - → min𝟚 - (p (ι (succ n)))) t ⟩
min𝟚 ₁ (p (ι (succ n))) =⟨ refl ⟩
p (ι (succ n)) ∎
Dagger₁ : a = ∞ → (n : ℕ) → p (ι n) = ₁
Dagger₁ r 0 = p (ι 0) =⟨ refl ⟩
α 0 =⟨ ap (λ - → ι - 0) r ⟩
ι ∞ 0 =⟨ refl ⟩
₁ ∎
Dagger₁ r (succ n) = p (ι (succ n)) =⟨ w ⁻¹ ⟩
α (succ n) =⟨ ap (λ - → ι - (succ n)) r ⟩
ι ∞ (succ n) =⟨ refl ⟩
₁ ∎
where
s : α n = ₁
s = ap (λ - → ι - n) r
w = α (succ n) =⟨ ap (λ - → min𝟚 - (p (ι (succ n)))) s ⟩
min𝟚 ₁ (p (ι (succ n))) =⟨ refl ⟩
p (ι (succ n)) ∎
Lemma₀ : (n : ℕ) → a = ι n → p a = ₀
Lemma₀ n t = p a =⟨ ap p t ⟩
p (ι n) =⟨ Dagger₀ n t ⟩
₀ ∎
Claim₀ : p a = ₁ → (n : ℕ) → a ≠ ι n
Claim₀ r n s = equal-₁-different-from-₀ r (Lemma₀ n s)
Claim₁ : p a = ₁ → a = ∞
Claim₁ r = not-finite-is-∞ fe (Claim₀ r)
Claim₂ : p a = ₁ → (n : ℕ) → p (ι n) = ₁
Claim₂ r = Dagger₁ (Claim₁ r)
Claim₃ : p a = ₁ → p ∞ = ₁
Claim₃ r = p ∞ =⟨ (ap p (Claim₁ r))⁻¹ ⟩
p a =⟨ r ⟩
₁ ∎
Lemma : p a = ₁ → (v : ℕ∞) → p v = ₁
Lemma r = ℕ∞-𝟚-density fe (Claim₂ r) (Claim₃ r)
\end{code}
Corollaries:
\begin{code}
ℕ∞-compact : is-compact ℕ∞
ℕ∞-compact = compact∙-types-are-compact ℕ∞-compact∙
ℕ∞-Compact : is-Compact ℕ∞ {𝓤}
ℕ∞-Compact = compact-types-are-Compact ℕ∞-compact
ℕ∞-Π-Compact : is-Π-Compact ℕ∞ {𝓤}
ℕ∞-Π-Compact = Σ-Compact-types-are-Π-Compact ℕ∞ ℕ∞-Compact
ℕ∞-Compact∙ : is-Compact∙ ℕ∞ {𝓤}
ℕ∞-Compact∙ = Compact-pointed-gives-Compact∙ ℕ∞-Compact ∞
ℕ∞→ℕ-is-discrete : is-discrete (ℕ∞ → ℕ)
ℕ∞→ℕ-is-discrete = discrete-to-power-compact-is-discrete fe ℕ∞-compact (λ u → ℕ-is-discrete)
ℕ∞→𝟚-is-discrete : is-discrete (ℕ∞ → 𝟚)
ℕ∞→𝟚-is-discrete = discrete-to-power-compact-is-discrete fe ℕ∞-compact (λ u → 𝟚-is-discrete)
module _ (fe' : FunExt) (pt : propositional-truncations-exist) where
open import TypeTopology.WeaklyCompactTypes fe' pt
ℕ∞-is-∃-compact : is-∃-compact ℕ∞
ℕ∞-is-∃-compact = compact-types-are-∃-compact ℕ∞-compact
ℕ∞-is-Π-compact : is-Π-compact ℕ∞
ℕ∞-is-Π-compact = ∃-compact-types-are-Π-compact ℕ∞-is-∃-compact
\end{code}