Martin Escardo 2012 Combinatory version of Gödel's System T and its standard set-theoretic semantics. \begin{code} {-# OPTIONS --safe --without-K #-} module EffectfulForcing.MFPSAndVariations.CombinatoryT where open import MLTT.Spartan open import EffectfulForcing.MFPSAndVariations.Continuity open import EffectfulForcing.MFPSAndVariations.Combinators open import UF.Base data type : 𝓤₀ ̇ where ι : type _⇒_ : type → type → type data T : (σ : type) → 𝓤₀ ̇ where Zero : T ι Succ : T (ι ⇒ ι) Iter : {σ : type} → T ((σ ⇒ σ) ⇒ σ ⇒ ι ⇒ σ) K : {σ τ : type} → T (σ ⇒ τ ⇒ σ) S : {ρ σ τ : type} → T ((ρ ⇒ σ ⇒ τ) ⇒ (ρ ⇒ σ) ⇒ ρ ⇒ τ) _·_ : {σ τ : type} → T (σ ⇒ τ) → T σ → T τ infixr 1 _⇒_ infixl 1 _·_ Set⟦_⟧ : type → 𝓤₀ ̇ Set⟦ ι ⟧ = ℕ Set⟦ σ ⇒ τ ⟧ = Set⟦ σ ⟧ → Set⟦ τ ⟧ ⟦_⟧ : {σ : type} → T σ → Set⟦ σ ⟧ ⟦ Zero ⟧ = zero ⟦ Succ ⟧ = succ ⟦ Iter ⟧ = iter ⟦ K ⟧ = Ķ ⟦ S ⟧ = Ş ⟦ t · u ⟧ = ⟦ t ⟧ ⟦ u ⟧ is-T-definable : {σ : type} → Set⟦ σ ⟧ → 𝓤₀ ̇ is-T-definable {σ} x = Σ t ꞉ T σ , ⟦ t ⟧ = x \end{code} System T extended with oracles. \begin{code} data TΩ : (σ : type) → 𝓤₀ ̇ where Ω : TΩ (ι ⇒ ι) Zero : TΩ ι Succ : TΩ (ι ⇒ ι) Iter : {σ : type} → TΩ ((σ ⇒ σ) ⇒ σ ⇒ ι ⇒ σ) K : {σ τ : type} → TΩ (σ ⇒ τ ⇒ σ) S : {ρ σ τ : type} → TΩ ((ρ ⇒ σ ⇒ τ) ⇒ (ρ ⇒ σ) ⇒ ρ ⇒ τ) _·_ : {σ τ : type} → TΩ (σ ⇒ τ) → TΩ σ → TΩ τ ⟦_⟧' : {σ : type} → TΩ σ → Baire → Set⟦ σ ⟧ ⟦ Ω ⟧' α = α ⟦ Zero ⟧' α = zero ⟦ Succ ⟧' α = succ ⟦ Iter ⟧' α = iter ⟦ K ⟧' α = Ķ ⟦ S ⟧' α = Ş ⟦ t · u ⟧' α = ⟦ t ⟧' α (⟦ u ⟧' α) embedding : {σ : type} → T σ → TΩ σ embedding Zero = Zero embedding Succ = Succ embedding Iter = Iter embedding K = K embedding S = S embedding (t · u) = embedding t · embedding u preservation : {σ : type} → (t : T σ) → (α : Baire) → ⟦ t ⟧ = ⟦ embedding t ⟧' α preservation Zero α = refl preservation Succ α = refl preservation Iter α = refl preservation K α = refl preservation S α = refl preservation (t · u) α = ap₂ id (preservation t α) (preservation u α) \end{code}