A toy programming language with a cubical type system, implemented in Rust.
This doesn't aim to do anything beyond what other cubically typed languages support, I've mainly been using it as an exercise to help with understanding Cohen, Coquand, Huber and Mörtberg's Cubical Type Theory paper.
### Example Syntax
The following term defines path-composition for a type A. (See section 4, example 4 of the CTT paper for details.)
Lambda (a: A) =>
Lambda (b: A) =>
Lambda (c: A) =>
Lambda (p: Path A a b) =>
Lambda (q: Path A b c) =>
PathBind i =>
Comp j A [(i=0)->a, (i=1)->q j] (p i)
Feature checklist:
- Pi types
- Path types
- Face systems
- Composition
- Kan filling
- Sigma types
- Other operations derived from comp
- transport
- contraction
- pres
- equiv
- Glueing
- Universes
Side goals:
- Nat
- A circle type
- What else do we need to write a proof term for FundamentGrp(S1) == Z?
- Support for more general interval/face formulae