Minimalist reimplementation of pion
-
dependent lambda calculus
- local variables
- integer and boolean literals
-
let
expressions -
fun
expressions -
forall
expressions - function application expressions
- propositional equality
- type universes
-
unification
- inferring types of unnanotated parameters
- hole expressions
- implicit arguments
- specialization
- generalization
- pruning
-
recursion
-
fix
-
let rec
- single recursive value binding
- mutually recursive value bindings
- termination checking
-
-
aggregate types
- dependent pairs
- record types
- sum types
- row types
-
pattern matching
-
if
expressions- dependent
if
expressions
- dependent
- single-layer pattern matching over integers and booleans
- multi-layer pattern matching compilation w/ coverage checking
- or-patterns
- and-patterns
- as-patterns
- pattern guards
-
-
user interface
-
pion check
-
pion repl
-
pion fmt
- "commands" a la Lean4/Rocq (eg
#check term
,#print metavars
)
-
-
documentation
- code comments
- tutorial
- typing rules
- bibliography
- spec