Chuangjie Xu 2012 (updated in February 2015)

\begin{code}

{-# OPTIONS --without-K #-}

module UsingSetoid.Space.Coverage where

open import Preliminaries.SetsAndFunctions hiding (_+_)
open import Preliminaries.NaturalNumber
open import Preliminaries.Sequence
open import Continuity.UniformContinuity
open import UsingSetoid.Setoid

\end{code}

The site we are working with is the monoid of uniformly continuous
endo-functions of the Cantor space with a coverage in which, for each
natural number n, there is a family of concatenation maps "cons s"
indexed by finite binary sequence s of length n.

The monoid of uniformly continuous ₂ℕ → ₂ℕ:

\begin{code}

C : Subset E-map-₂ℕ-₂ℕ
C (t , _) = uniformly-continuous-₂ℕ t

Lemma[◎-UC] : ∀ t → t ∈ C → ∀ t' → t' ∈ C → (t ◎ t') ∈ C
Lemma[◎-UC] (t , _) tC (t' , _) t'C = Lemma[∘-UC] t tC t' t'C

\end{code}

The coverage axiom amounts to uniform continuity of endo-functions of
the Cantor space in the following sense.

\begin{code}

Theorem[Coverage-axiom] : ∀(m : ℕ) → ∀(t : E-map-₂ℕ-₂ℕ) → t ∈ C →
                   Σ \(n : ℕ) → ∀(s : ₂Fin n) →
                    Σ \(s' : ₂Fin m) → Σ \(t' : E-map-₂ℕ-₂ℕ) →
                     (t' ∈ C) × (∀ α → pr₁ t (cons s α) ≣ cons s' (pr₁ t' α))
Theorem[Coverage-axiom] m (t , et) tC = n , prf
 where
  n : ℕ
  n = pr₁ (tC m)
  prf : ∀(s : ₂Fin n) → Σ \(s' : ₂Fin m) → Σ \(t' : E-map-₂ℕ-₂ℕ) →
         (t' ∈ C) × (∀ α → t (cons s α) ≣ cons s' (pr₁ t' α))
  prf s = s' ,  (t' , et') , t'C , ex
   where
    s' : ₂Fin m
    s' = take m (t (cons s 0̄))
    t' : ₂ℕ → ₂ℕ
    t' α = drop m (t (cons s α))
    et' : ∀ α α' → α ≣ α' → t' α ≣ t' α'
    et' α α' e = Lemma[≣-drop] m _ _ (et _ _ (cons-E-map s _ _ e))
    t'C : (t' , et') ∈ C
    t'C k = Lemma[LM-₂ℕ-least-modulus] t' l prt'
     where
      ucts : uniformly-continuous-₂ℕ (t ∘ (cons s))
      ucts = Lemma[∘-UC] t tC (cons s) (Lemma[cons-UC] s)
      l : ℕ
      l = pr₁ (ucts (k + m))
      prts : ∀(α β : ₂ℕ) → α ≡[ l ] β → t (cons s α) ≡[ k + m ] t (cons s β)
      prts = pr₁ (pr₂ (ucts (k + m)))
      eq : ∀(α : ₂ℕ) → ∀(i : ℕ) → t' α i ≡ t (cons s α) (i + m)
      eq α i = Lemma[drop+] m (t (cons s α)) i
      claim₀ : ∀(α β : ₂ℕ) → α ≡[ l ] β → t (cons s α) ≡[ k + m ] t (cons s β) →
                ∀(i : ℕ) → i < k → t' α i ≡ t' β i
      claim₀ α β el ekm i i<k = sclaim₂ · (eq β i)⁻¹
       where
        sclaim₀ : ∀(i : ℕ) → i < (k + m) → t (cons s α) i ≡ t (cons s β) i
        sclaim₀ = Lemma[≡[]-<] ekm
        sclaim₁ : t (cons s α) (i + m) ≡ t (cons s β) (i + m)
        sclaim₁ = sclaim₀ (i + m) (Lemma[a<b→a+c<b+c] i k m i<k)
        sclaim₂ : t' α i ≡ t (cons s β) (i + m)
        sclaim₂ = eq α i · sclaim₁ 
      claim₁ : ∀(α β : ₂ℕ) → α ≡[ l ] β
             → t (cons s α) ≡[ k + m ] t (cons s β) → t' α ≡[ k ] t' β
      claim₁ α β el ekm = Lemma[<-≡[]] (claim₀ α β el ekm)
      prt' : ∀(α β : ₂ℕ) → α ≡[ l ] β → t' α ≡[ k ] t' β
      prt' α β el = claim₁ α β el (prts α β el)
    ex : ∀(α : ₂ℕ) → ∀(i : ℕ) → t (cons s α) i ≡ cons s' (t' α) i
    ex α i = sclaim₀ · sclaim₃
     where
      sclaim₀ : t (cons s α) i ≡ cons (take m (t (cons s α))) (t' α) i
      sclaim₀ = (Lemma[cons-take-drop] m (t (cons s α)) i)⁻¹
      sclaim₁ : t (cons s α) ≡[ m ] t (cons s 0̄)
      sclaim₁ = pr₁ (pr₂ (tC m)) (cons s α) (cons s 0̄) (Lemma[cons-≡[]] s α 0̄)
      sclaim₂ : take m (t (cons s α)) ≡ s'
      sclaim₂ = Lemma[≡[]-take] sclaim₁
      sclaim₃ : cons (take m (t (cons s α))) (t' α) i ≡ cons s' (t' α) i
      sclaim₃ = ap (λ x → cons x (t' α) i) sclaim₂

\end{code}