libdo

Untitled

Oct 16th, 2017
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import Data.Vect
  2.  
  3. ||| Constant Types
  4. data ANTConst = I Int | BI Integer | Fl Double | Ch Char | Str String
  5.  
  6. ||| Context
  7. ||| @n total number of vars
  8. data ANTContext : {n : Nat} -> Type
  9. data Expr : ANTContext -> Type
  10.  
  11. data ANTContext : {n : Nat} -> Type where
  12. AddVar : (ctx : ANTContext {n}) -> Expr ctx -> ANTContext {n=(S n)}
  13.  
  14. getExpr : (ctx : ANTContext) -> Fin n -> Expr ctx
  15. getExpr (AddVar c e) 0 = e
  16. getExpr (AddVar c e) (S n) = getExpr c n
  17.  
  18. betaEq : Expr ctx -> Expr ctx -> Type
  19. betaEq = ?x
  20.  
  21. ||| This represents when a context implies something. It is laid out
  22. ||| as the basic rules of the type theory system
  23. ||| Taken from https://eb.host.cs.st-andrews.ac.uk/drafts/impldtp.pdf page 11
  24. data Expr : ANTContext -> Type where
  25. ||| G |- f : (x : S) -> T G |- s : S
  26. ||| App ----------------------------------
  27. ||| G |- f s : T[s/x]
  28. App : (ctx : ANTContext {n})
  29. -> (fInd : Fin n)
  30. -> (sInd : Fin n)
  31. -> ?betaEq (getExpr ctx fInd) (getExpr ctx sInd)
  32. -> Expr ctx
  33. ||| G;\x:S |- e : T G |- (x : S) -> T : Type(n)
  34. ||| Lam ---------------------------------------------
  35. ||| G |- \x:S.e : (x : S) -> T
  36. ||| Given a context, an arg type within that context, and an expression
  37. ||| that uses that var, returns a Lam (variable name not specified
  38. ||| since we are using DeBrujin indexes)
  39. Lam : (ctx : ANTContext) -> (argType : Expr ctx)
  40. -> Expr (AddVar ctx argType) -> Expr ctx
Add Comment
Please, Sign In to add comment