module Core.Term import Core.Thinning import public Data.Fin -- Definition ------------------------------------------------------------------ public export data Term : Nat -> Type where Var : Fin n -> Term n Set : Term n Pi : Term n -> Term (S n) -> Term n Abs : Term (S n) -> Term n App : Term n -> Term n -> Term n %name Term t, u, v -- Weakening ------------------------------------------------------------------- public export wkn : Term m -> m `Thins` n -> Term n wkn (Var i) thin = Var (wkn i thin) wkn Set thin = Set wkn (Pi t u) thin = Pi (wkn t thin) (wkn u $ keep thin) wkn (Abs t) thin = Abs (wkn t $ keep thin) wkn (App t u) thin = App (wkn t thin) (wkn u thin)