import BidirTT.Syntax

namespace BidirTT

mutual
  inductive Val where
    | var  : Nat → Val
    | app  : Val → Val → Val
    | fst  : Val → Val
    | snd  : Val → Val
    | lam  : Closure → Val
    | pi   : Val → Closure → Val
    | sig  : Val → Closure → Val
    | pair : Val → Val → Val
    | nat  : Val
    | zero : Val
    | succ : Val → Val
    | natElim : Val → Val → Val → Val → Val
    | unit : Val
    | triv : Val
    | unitElim : Val → Val → Val → Val
    | empty : Val
    | emptyElim : Val → Val → Val
    | id   : Val → Val → Val → Val
    | refl : Val
    | idElim : Val → Val → Val → Val → Val
    | univ : Nat → Val

  inductive Closure where
    | mk : List Val → Tm → Closure
end

abbrev Env := List Val
abbrev Lvl := Nat

instance : Inhabited Val := ⟨.univ 0⟩
instance : Inhabited Closure := ⟨.mk [] (.univ 0)⟩

end BidirTT
