SHOW:
|
|
- or go back to the newest paste.
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 |