=============================
= =
= Example: majorizability =
= =
=============================
Chuangjie Xu, July 2019
References.
□ William A. Howard. Hereditarily majorizable functionals of finite
type. In Metamathematical investigation of intuitionistic
Arithmetic and Analysis, volume 344 of Lecture Notes in Mathematics,
pages 454–461. Springer, Berlin, 1973.
\begin{code}
{-# OPTIONS --without-K --safe #-}
open import Preliminaries
open import T
module Majorizability where
\end{code}
■ A nucleus for majorants
\begin{code}
κ : (ℕ → ℕ) → ℕ → ℕ
κ = φ
KE : {ρ : Ty} → (ℕ → ⟦ ρ ⟧ʸ) → ℕ → ⟦ ρ ⟧ʸ
KE {ι} g = κ g
KE {_ ⇾ ρ} g = λ n a → KE (λ x → g x a) n
⟦_⟧ᴶ : {Γ : Cxt} {ρ : Ty} → T Γ ρ → ⟦ Γ ⟧ˣ → ⟦ ρ ⟧ʸ
⟦ Var i ⟧ᴶ γ = γ ₍ i ₎
⟦ Lam t ⟧ᴶ γ = λ a → ⟦ t ⟧ᴶ (γ , a)
⟦ f · a ⟧ᴶ γ = ⟦ f ⟧ᴶ γ (⟦ a ⟧ᴶ γ)
⟦ Zero ⟧ᴶ _ = zero
⟦ Succ ⟧ᴶ _ = succ
⟦ Rec ⟧ᴶ _ = λ a f → KE (rec a f)
infixl 90 _ᴶ
_ᴶ : {ρ : Ty} → T ε ρ → ⟦ ρ ⟧ʸ
t ᴶ = ⟦ t ⟧ᴶ ⋆
\end{code}
■ Theorem: Every closed term t is majoraized by its J-translation.
\begin{code}
_maj_ : {ρ : Ty} → ⟦ ρ ⟧ʸ → ⟦ ρ ⟧ʸ → Set
_maj_ {ι} n m = n ≥ m
_maj_ {σ ⇾ τ} f g = {x y : ⟦ σ ⟧ʸ} → x maj y → (f x) maj (g y)
Theorem : {ρ : Ty} (t : T ε ρ) → t ᴶ maj ⟦ t ⟧
\end{code}
■ Proof
\begin{code}
_majˣ_ : {Γ : Cxt} → ⟦ Γ ⟧ˣ → ⟦ Γ ⟧ˣ → Set
_majˣ_ {ε} ⋆ ⋆ = 𝟙
_majˣ_ {Γ ₊ ρ} (δ , x) (γ , y) = (δ majˣ γ) × (x maj y)
maj[Var] : {Γ : Cxt} {ρ : Ty} {δ : ⟦ Γ ⟧ˣ} {γ : ⟦ Γ ⟧ˣ}
→ δ majˣ γ → (i : ∥ ρ ∈ Γ ∥) → (δ ₍ i ₎) maj (γ ₍ i ₎)
maj[Var] (_ , θ) zero = θ
maj[Var] (ζ , _) (succ i) = maj[Var] ζ i
maj[KE] : {ρ : Ty}
→ {f g : ℕ → ⟦ ρ ⟧ʸ} → ((i : ℕ) → (f i) maj (g i))
→ (KE f) maj g
maj[KE] {ι} ζ χ = ≤trans (ζ _) (φ-spec χ)
maj[KE] {σ ⇾ τ} ζ χ = λ ξ → maj[KE] (λ i → ζ i ξ) χ
Lemma[maj] : {Γ : Cxt} {ρ : Ty} (t : T Γ ρ)
→ {δ γ : ⟦ Γ ⟧ˣ} → δ majˣ γ
→ (⟦ t ⟧ᴶ δ) maj (⟦ t ⟧ᵐ γ)
Lemma[maj] (Var i) ζ = maj[Var] ζ i
Lemma[maj] (Lam t) ζ = λ θ → Lemma[maj] t (ζ , θ)
Lemma[maj] (f · a) ζ = Lemma[maj] f ζ (Lemma[maj] a ζ)
Lemma[maj] Zero ζ = ≤zero
Lemma[maj] Succ ζ = ≤succ
Lemma[maj] Rec ζ {x} {y} χ {f} {g} ξ = maj[KE] claim
where
claim : (i : ℕ) → rec x f i maj rec y g i
claim 0 = χ
claim (succ i) = ξ ≤refl (claim i)
Theorem t = Lemma[maj] t {⋆} {⋆} ⋆
\end{code}