Vincent Rahli, 14 March 2015.
This is a variant of the proof given by Martin Escardo in
https://doi.org/10.1016/j.entcs.2013.09.010 (MFPS XXIX) that does not
use the formal oracle Ω, and instead directly shows the relation
between ⟦_⟧ and B⟦_⟧ (see R's definition and main-lemma). Then, as
before in dialogue-tree-correct, we use generic sequence to consult
the ``oracle'' α.
\begin{code}
{-# OPTIONS --safe --without-K #-}
module EffectfulForcing.MFPSAndVariations.WithoutOracle where
open import MLTT.Spartan
open import EffectfulForcing.MFPSAndVariations.Combinators
open import EffectfulForcing.MFPSAndVariations.Continuity
open import EffectfulForcing.MFPSAndVariations.Dialogue
open import EffectfulForcing.MFPSAndVariations.CombinatoryT
open import EffectfulForcing.MFPSAndVariations.MFPS-XXIX using (B-Set⟦_⟧ ; Kleisli-extension ; zero' ; succ' ; iter')
B⟦_⟧ : {σ : type} → T σ → B-Set⟦ σ ⟧
B⟦ Zero ⟧ = zero'
B⟦ Succ ⟧ = succ'
B⟦ Iter ⟧ = iter'
B⟦ K ⟧ = Ķ
B⟦ S ⟧ = Ş
B⟦ t · u ⟧ = B⟦ t ⟧ (B⟦ u ⟧)
dialogue-tree : T((ι ⇒ ι) ⇒ ι) → B ℕ
dialogue-tree t = B⟦ t ⟧ generic
R : {σ : type} → Baire → Set⟦ σ ⟧ → B-Set⟦ σ ⟧ → Set
R {ι} α n d = n = dialogue d α
R {σ ⇒ τ} α f f' = (x : Set⟦ σ ⟧)
(x' : B-Set⟦ σ ⟧)
→ R {σ} α x x'
→ R {τ} α (f x) (f' x')
R-kleisli-lemma : (σ : type)
(α : Baire)
(g : ℕ → Set⟦ σ ⟧)
(g' : ℕ → B-Set⟦ σ ⟧)
→ ((k : ℕ) → R α (g k) (g' k))
→ (n : ℕ)
(n' : B ℕ)
→ R α n n'
→ R α (g n) (Kleisli-extension g' n')
R-kleisli-lemma ι α g g' rg n n' rn =
g n =⟨ rg n ⟩
dialogue (g' n) α =⟨ ap (λ - → dialogue (g' -) α) rn ⟩
dialogue (g' (dialogue n' α)) α =⟨ decode-kleisli-extension g' n' α ⟩
dialogue (Kleisli-extension g' n') α ∎
R-kleisli-lemma (σ ⇒ τ) α g g' rg n n' rn
= λ y y' ry → R-kleisli-lemma
τ
α
(λ k → g k y)
(λ k → g' k y')
(λ k → rg k y y' ry)
n
n'
rn
main-lemma : {σ : type} (t : T σ) (α : Baire) → R α ⟦ t ⟧ (B⟦ t ⟧)
main-lemma Zero = λ α → refl
main-lemma Succ = λ α n n' rn →
succ n =⟨ ap succ rn ⟩
succ (dialogue n' α) =⟨ decode-α-is-natural succ n' α ⟩
decode α (succ' n') ∎
main-lemma {(σ ⇒ .σ) ⇒ .σ ⇒ ι ⇒ .σ} Iter = lemma
where
lemma : (α : Baire)
(f : Set⟦ σ ⟧ → Set⟦ σ ⟧)
(f' : B-Set⟦ σ ⟧ → B-Set⟦ σ ⟧)
→ R {σ ⇒ σ} α f f'
→ (x : Set⟦ σ ⟧)
(x' : B-Set⟦ σ ⟧)
→ R {σ} α x x'
→ (n : ℕ)
(n' : B ℕ)
→ R {ι} α n n'
→ R {σ} α (iter f x n) (Kleisli-extension (iter f' x') n')
lemma α f f' rf x x' rx = R-kleisli-lemma σ α g g' rg
where
g : ℕ → Set⟦ σ ⟧
g k = iter f x k
g' : ℕ → B-Set⟦ σ ⟧
g' k = iter f' x' k
rg : (k : ℕ) → R α (g k) (g' k)
rg zero = rx
rg (succ k) = rf (g k) (g' k) (rg k)
main-lemma K = λ α x x' rx y y' ry → rx
main-lemma S = λ α f f' rf g g' rg x x' rx → rf x x' rx (g x) (g' x') (rg x x' rx)
main-lemma (t · u) = λ α → main-lemma t α ⟦ u ⟧ B⟦ u ⟧ (main-lemma u α)
dialogue-tree-correct : (t : T ((ι ⇒ ι) ⇒ ι))
(α : Baire)
→ ⟦ t ⟧ α = dialogue (dialogue-tree t) α
dialogue-tree-correct t α =
⟦ t ⟧ α =⟨ main-lemma t α α generic lemma ⟩
dialogue (B⟦ t ⟧ generic) α =⟨ refl ⟩
dialogue (dialogue-tree t) α ∎
where
lemma : (n : ℕ)
(n' : B ℕ)
→ n = dialogue n' α
→ α n = dialogue (generic n') α
lemma n n' rn = α n =⟨ ap α rn ⟩
α (dialogue n' α) =⟨ generic-diagram α n' ⟩
decode α (generic n') =⟨ refl ⟩
dialogue (generic n') α ∎
eloquence-theorem : (f : Baire → ℕ)
→ is-T-definable f
→ eloquent f
eloquence-theorem f (t , r) =
(dialogue-tree t ,
(λ α → dialogue (dialogue-tree t) α =⟨ (dialogue-tree-correct t α)⁻¹ ⟩
⟦ t ⟧ α =⟨ ap (λ - → - α) r ⟩
f α ∎))
eloquence-corollary₀ : (f : Baire → ℕ)
→ is-T-definable f
→ is-continuous f
eloquence-corollary₀ f d = eloquent-functions-are-continuous
f
(eloquence-theorem f d)
eloquence-corollary₁ : (f : Baire → ℕ)
→ is-T-definable f
→ is-uniformly-continuous (C-restriction f)
eloquence-corollary₁ f d = eloquent-functions-are-UC
(C-restriction f)
(restriction-is-eloquent f (eloquence-theorem f d))