Dependent types can make your developments (be they programs or proofs) dramatically safer by allowing you to prove that you implemented what you intended. Unfortunately, they can also make your developments dramatically more boring by requiring you to elaborate those proofs in often painstaking detail. For this reason, dependently typed languages typically allow you to cheat by postulating some facts as axioms. However, type theory is not just about which types are inhabited; it’s about how things compute. Computationally, an axiom is a stuck term, so it prevents you from evaluating your programs. What if you could postulate not just axioms, but also arbitrary rewrite rules?
[1]
Olivier Hermant,et al.
The λΠ-calculus Modulo as a Universal Proof Language
,
2012,
PxTP.
[2]
Frédéric Blanqui,et al.
Definitions by rewriting in the calculus of constructions
,
2001,
Proceedings 16th Annual IEEE Symposium on Logic in Computer Science.
[3]
Thorsten Altenkirch,et al.
Observational equality, now!
,
2007,
PLPV.
[4]
Pierre-Yves Strub,et al.
Coq Modulo Theory
,
2010,
CSL.
[5]
Conor McBride,et al.
New equations for neutral terms: a sound and complete decision procedure, formalized
,
2013,
DTP '13.