=========================================
= =
= A Kolmogorov-style translation of T =
= =
=========================================
Chuangjie Xu, July 2019
References.
□ Tarmo Uustalu. Monad translating inductive and coinductive types.
In: H. Geuvers, F. Wiedijk (Eds.), Types for Proofs and Programs
(TYPES 2002). Lecture Notes in Computer Science, vol 2646, Springer,
2002, pp. 299–315.
\begin{code}
{-# OPTIONS --without-K --safe #-}
open import Tplus
module KolmogorovTranslation
(J : Ty → Ty)
(η : {Γ : Cxt} {σ : Ty} → T Γ (σ ⇾ J σ))
(κ : {Γ : Cxt} {σ τ : Ty} → T Γ ((σ ⇾ J τ) ⇾ J σ ⇾ J τ))
where
⟨_⟩ᴷᵒ ⟨_⟩ : Ty → Ty
⟨ ρ ⟩ᴷᵒ = J ⟨ ρ ⟩
⟨ ι ⟩ = ι
⟨ σ ⊠ τ ⟩ = ⟨ σ ⟩ᴷᵒ ⊠ ⟨ τ ⟩ᴷᵒ
⟨ σ ⊞ τ ⟩ = ⟨ σ ⟩ᴷᵒ ⊞ ⟨ τ ⟩ᴷᵒ
⟨ σ ⇾ τ ⟩ = ⟨ σ ⟩ᴷᵒ ⇾ ⟨ τ ⟩ᴷᵒ
⟪_⟫ᴷᵒ : Cxt → Cxt
⟪ ε ⟫ᴷᵒ = ε
⟪ Γ ₊ ρ ⟫ᴷᵒ = ⟪ Γ ⟫ᴷᵒ ₊ ⟨ ρ ⟩ᴷᵒ
⟨_⟩ᵛ : {Γ : Cxt} {ρ : Ty} → ∥ ρ ∈ Γ ∥ → ∥ ⟨ ρ ⟩ᴷᵒ ∈ ⟪ Γ ⟫ᴷᵒ ∥
⟨ zero ⟩ᵛ = zero
⟨ succ i ⟩ᵛ = succ ⟨ i ⟩ᵛ
infixl 20 _◇_
_◇_ : {Γ : Cxt} {σ τ : Ty} → T Γ (J (σ ⇾ J τ)) → T Γ σ → T Γ (J τ)
f ◇ a = κ · Lam (ν₀ · wkn a) · f
Rec◇ : {Γ : Cxt} {ρ : Ty} → T Γ (ρ ⇾ (J ι ⇾ J (J ρ ⇾ J ρ)) ⇾ ι ⇾ J ρ)
Rec◇ = Lam (Lam (Rec · (η · ν₁) · Lam (Lam (ν₂ · (η · ν₁) ◇ ν₀))))
infix 60 _ᴷᵒ
_ᴷᵒ : {Γ : Cxt} {ρ : Ty} → T Γ ρ → T ⟪ Γ ⟫ᴷᵒ ⟨ ρ ⟩ᴷᵒ
Var i ᴷᵒ = Var ⟨ i ⟩ᵛ
Lam t ᴷᵒ = η · Lam (t ᴷᵒ)
(f · a) ᴷᵒ = f ᴷᵒ ◇ a ᴷᵒ
Zero ᴷᵒ = η · Zero
Succ ᴷᵒ = η · (κ · Lam (η · (Succ · ν₀)))
Rec ᴷᵒ = η · (κ · Lam (η · (κ · Lam (η · (κ · (Rec◇ · ν₁ · ν₀))))))
Pair ᴷᵒ = η · Lam (η · Lam (η · (Pair · ν₁ · ν₀)))
Pr1 ᴷᵒ = η · (κ · Pr1)
Pr2 ᴷᵒ = η · (κ · Pr2)
Inj1 ᴷᵒ = η · Lam (η · (Inj1 · ν₀))
Inj2 ᴷᵒ = η · Lam (η · (Inj2 · ν₀))
Case ᴷᵒ = η · (κ · Lam (η · (κ · Lam (η · (κ · (Case · ν₁ · ν₀))))))
\end{code}