pi/src/Normalize.idr

47 lines
1.1 KiB
Idris

module Normalize
import Term
import Value
import Ctx
import Misc
import Data.Nat
%default total
public export
asTerm : NF -> Term 0
asTerm NType = TType
asTerm (NLam ty sc) = TLam (asTerm ty) sc
asTerm (NPi ty sc) = TPi (asTerm ty) sc
public export
fromNF : NF -> Glue
fromNF nf = MkGlue (asTerm nf) (const (pure nf))
mutual
evalClosure : {n : Nat} -> Closure Term -> PI (Term n)
evalClosure (MkClosure ctx term) = eval [] ctx term >>= pure . weaken0 . asTerm
lookupLocal : (n : Nat) -> Ctx Term m -> LT n m -> PI NF
lookupLocal = ?how
public export
eval : {n : Nat} -> List (Closure Term) -> Ctx Term n -> Term n -> PI NF
eval stack env TType = pure NType
-- dirty
eval (thunk :: stack) env (TLam _ sc) = eval stack (!(assert_total (evalClosure thunk)) :: env) sc
eval stack env (TApp f x) = eval (MkClosure env x :: stack) env x
eval stack env (TVar m p) = lookupLocal m env p
eval stack env (TPi ty sc) = ?idk
eval [] env (TLam ty sc) = ?what
public export
fromTerm : Term 0 -> Glue
fromTerm term = MkGlue term (eval [] Nil)