open import Data.Fin using (Fin)
open import Data.Nat using (; suc)

module CBPV.Base.Terms where

variable n n′ : 
variable m : Fin n

mutual
  data Val :   Set where
    #_ : Fin n  Val n
    unit : Val n
    ⟪_⟫ : Comp n  Val n
    ⟨_,_⟩ : Val n  Val n  Val n
    inl : Val n  Val n
    inr : Val n  Val n

  data Comp :   Set where
    ƛ_ : Comp (suc n)  Comp n
    _·_ : Comp n  Val n  Comp n
    _»_ : Val n  Comp n  Comp n
    _! : Val n  Comp n
    ⟨_,_⟩ : Comp n  Comp n  Comp n
    projl : Comp n  Comp n
    projr : Comp n  Comp n
    return_ : Val n  Comp n
    $⟵_⋯_ : Comp n  Comp (suc n)  Comp n
    $≔_⋯_ : Val n  Comp (suc (suc n))  Comp n
    case_inl⇒_inr⇒_ : Val n  Comp (suc n)  Comp (suc n)  Comp n

variable V V′ V₁ V₂ : Val n
variable M N M′ M″ N′ M₁ M₂ : Comp n

infix 5 ƛ_
infixl 7 _»_
infix 6 _!
infix 6 return_
infixl 7 _·_
infix 9 #_
infixr 5 $⟵_⋯_
infixr 5 $≔_⋯_
infixl 5 case_inl⇒_inr⇒_
infix 5 ⟪_⟫