Sprinkles of extensionality for your vanilla type theory

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?