==========================
 =                        =
 =  §3.1  Majorizability  =
 =                        =
 ==========================

    Chuangjie Xu, July 2019

    Updated in February 2020

We construct majorants of T-terms via the monadic translation whose
correctness is guaranteed by the Fundamental Theorem of Logical Relation.

References

□ W. 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
open import TAuxiliaries

module Majorizability where

\end{code}

■ A nucleus for majorizability

\begin{code}

 : Ty
 = ι

η : {Γ : Cxt}  T Γ (ι  )
η = Lam ν₀
--   λn.n

--
-- κ g n  is the maximum of g(i) for all i < n.
--
κ : {Γ : Cxt}  T Γ ((ι  )    )
κ = Φ
-- Lam (Rec · (ν₀ · Zero) · Lam (Lam (Max · ν₀ · (ν₂ · (Suc · ν₁)))))
-- i.e.
-- κ g  0      = g 0
-- κ g (suc n) = max (κ g n) (g (suc n))

κ-spec : {i j : }  i  j
        {Γ : Cxt} (γ :  Γ ⟧ˣ)
        (g :   )  g i   κ ⟧ᵐ γ g j
κ-spec = Φ-spec

--
-- Instantiate the translation by importing the following module
-- with the nucleus (Jι, η, κ)
--
open import GentzenTranslation  η κ

\end{code}

■ Howard's majorizability relation

\begin{code}

--
-- The base case is just the usual ordering on ℕ
--
_⊲ι_ :  ι ⟧ʸ    ⟧ʸ  Set
_⊲ι_ = _≤_

--
-- η preserves the logical relation
--
⊲η : {Γ : Cxt} (γ :  Γ ⟧ˣ) (n :  ι ⟧ʸ)  n ⊲ι  η ⟧ᵐ γ n
⊲η _ n = ≤refl

--
-- κ preserves the logical relation
--
⊲κ : {Γ : Cxt} (γ :  Γ ⟧ˣ) {f :  ι  ι ⟧ʸ} {g :  ι   ⟧ʸ}
    (∀ i  f i ⊲ι g i)   {n a}  n ⊲ι a  f n ⊲ι  κ ⟧ᵐ γ g a
⊲κ γ {f} {g} ζ {x} θ = ≤trans (ζ x) (κ-spec θ γ g)

open import LogicalRelation  η κ _⊲ι_ ⊲η ⊲κ

--
-- Howard's majorizability relation extends ≤ to all types of T
--
_⊲_ : {ρ : Ty}   ρ ⟧ʸ    ρ ⟩ᴶ ⟧ʸ  Set
_⊲_ = _R_
-- i.e.
-- n ⊲ι     m = n ≤ m
-- u ⊲[σ×τ] v = (pr₁ u ⊲σ pr₁ v) ∧ (pr₂ u ⊲τ pr₂ v)
-- f ⊲[σ→τ] g = ∀ x y → x ⊲σ y → f x ⊲τ g y

\end{code}

■ Corollary: Every closed T term is majorized by its translation.

\begin{code}

Cor[Maj] : {ρ : Ty} (t : T ε ρ)   t    t  
Cor[Maj] t = FTLR t 

\end{code}