about summary refs log tree commit diff
path: root/README.md
blob: 40bfde5befa405afd84a724e68e665f105b78866 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# toytt

this is an attempt of mine to implement a typechecker for a minimal dependent
type theory in the style of martin-löf. at the time of writing this, it has the
following features:

- type of booleans w/ dependent eliminator
- pi and sigma connectives
- universe that contains itself (lol)
- that's it

it probably has lots of bugs as well.

## example

```
$ dune exec toytt
(\b -> bool-elim b at x -> bool [ true => false, false => true ] :: (b : bool) -> bool) false
true : bool
```

at the moment the interface is a broken REPL which exits if you make a mistake
(TODO). the above example illustrates the syntax for lambdas, boolean
intro & elim, inline type annotations (`::`) and pi types with the boolean
not-function applied to `false` (which evaluates to `true`).

## todo list (in descending order of importance and/or realizability)

- [x] figure out how to recover variable names in pretty-printing so we don't
  have to print de bruijn indices all the time
- [x] build a better repl
- [ ] improve error messages
- [ ] implement top-level definitions
- [x] implement less aggrevating syntax for non-dependent function & pair types
- [ ] add a type of natural numbers
- [ ] replace type-in-type with a proper (cumulative?) hierarchy of universes
  -> maybe use the mugen library or figure out typical ambiguity?
- [ ] implement inductive types/families
- [ ] implement axioms (probably easy)
- [ ] do HoTT stuff (maybe implement a form of cubical type theory? or stick with
  book HoTT, which is probably much easier)
- ...