Martin Escardo 2012 \begin{code} {-# OPTIONS --safe --without-K #-} module EffectfulForcing.MFPSAndVariations.Dialogue where open import MLTT.Spartan open import MLTT.Athenian open import EffectfulForcing.MFPSAndVariations.Continuity data D (X : 𝓤 ̇ ) (Y : 𝓥 ̇ ) (Z : 𝓦 ̇ ) : 𝓤 ⊔ 𝓥 ⊔ 𝓦 ̇ where η : Z → D X Y Z β : (Y → D X Y Z) → X → D X Y Z dialogue : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } {Z : 𝓦 ̇ } → D X Y Z → (X → Y) → Z dialogue (η z) α = z dialogue (β φ x) α = dialogue (φ(α x)) α eloquent : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } {Z : 𝓦 ̇ } → ((X → Y) → Z) → 𝓤 ⊔ 𝓥 ⊔ 𝓦 ̇ eloquent f = Σ d ꞉ D _ _ _ , dialogue d ∼ f B : 𝓤 ̇ → 𝓤 ̇ B = D ℕ ℕ dialogue-continuity : (d : B ℕ) → is-continuous (dialogue d) dialogue-continuity (η n) α = ([] , lemma) where lemma : ∀ α' → α =⟪ [] ⟫ α' → n = n lemma α' r = refl dialogue-continuity (β φ i) α = ((i ∷ is) , lemma) where IH : (i : ℕ) → is-continuous (dialogue (φ (α i))) IH i = dialogue-continuity (φ (α i)) is : List ℕ is = pr₁ (IH i α) lemma : (α' : Baire) → α =⟪ i ∷ is ⟫ α' → dialogue (φ (α i)) α = dialogue (φ (α' i)) α' lemma α' (r ∷ rs) = dialogue (φ (α i)) α =⟨ pr₂ (IH i α) α' rs ⟩ dialogue (φ (α i)) α' =⟨ ap (λ n → dialogue (φ n) α') r ⟩ dialogue (φ (α' i)) α' ∎ eloquent-functions-are-continuous : (f : Baire → ℕ) → eloquent f → is-continuous f eloquent-functions-are-continuous f (d , e) = continuity-extensional (dialogue d) f e (dialogue-continuity d) C : 𝓤 ̇ → 𝓤 ̇ C = D ℕ 𝟚 dialogue-UC : (d : C ℕ) → is-uniformly-continuous (dialogue d) dialogue-UC (η n) = ([] , λ α α' n → refl) dialogue-UC (β φ i) = ((i ∷ s) , lemma) where IH : (j : 𝟚) → is-uniformly-continuous (dialogue(φ j)) IH j = dialogue-UC (φ j) s : 𝟚 → BT ℕ s j = pr₁ (IH j) lemma : ∀ α α' → α =⟦ i ∷ s ⟧ α' → dialogue (φ (α i)) α = dialogue (φ (α' i)) α' lemma α α' (r ∷ l) = dialogue (φ (α i)) α =⟨ ap (λ j → dialogue (φ j) α) r ⟩ dialogue (φ (α' i)) α =⟨ pr₂ (IH (α' i)) α α' (l (α' i)) ⟩ dialogue (φ (α' i)) α' ∎ eloquent-functions-are-UC : (f : Cantor → ℕ) → eloquent f → is-uniformly-continuous f eloquent-functions-are-UC f (d , e) = UC-extensional (dialogue d) f e (dialogue-UC d) prune : B ℕ → C ℕ prune (η n) = η n prune (β φ i) = β (λ j → prune (φ (embedding-𝟚-ℕ j))) i prune-behaviour : (d : B ℕ) (α : Cantor) → dialogue (prune d) α = C-restriction (dialogue d) α prune-behaviour (η n) α = refl prune-behaviour (β φ n) α = prune-behaviour (φ (embedding-𝟚-ℕ (α n))) α restriction-is-eloquent : (f : Baire → ℕ) → eloquent f → eloquent (C-restriction f) restriction-is-eloquent f (d , c) = (prune d , (λ α → dialogue (prune d) α =⟨ prune-behaviour d α ⟩ C-restriction (dialogue d) α =⟨ c (embedding-C-B α) ⟩ f (embedding-C-B α) ∎)) \end{code} B is a monad. \begin{code} kleisli-extension : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } → (X → B Y) → B X → B Y kleisli-extension f (η x) = f x kleisli-extension f (β φ i) = β (λ j → kleisli-extension f (φ j)) i B-functor : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } → (X → Y) → B X → B Y B-functor f = kleisli-extension (η ∘ f) decode : {X : 𝓤 ̇ } → Baire → B X → X decode α d = dialogue d α decode-α-is-natural : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (g : X → Y) (d : B X) (α : Baire) → g (decode α d) = decode α (B-functor g d) decode-α-is-natural g (η x) α = refl decode-α-is-natural g (β φ i) α = decode-α-is-natural g (φ(α i)) α decode-kleisli-extension : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → B Y) (d : B X) (α : Baire) → decode α (f (decode α d)) = decode α (kleisli-extension f d) decode-kleisli-extension f (η x) α = refl decode-kleisli-extension f (β φ i) α = decode-kleisli-extension f (φ(α i)) α \end{code} The generic element. \begin{code} generic : B ℕ → B ℕ generic = kleisli-extension (β η) generic-diagram : (α : Baire) (d : B ℕ) → α (decode α d) = decode α (generic d) generic-diagram α (η n) = refl generic-diagram α (β φ n) = generic-diagram α (φ (α n)) \end{code}