If one wishes to re-implement the calculus of inductive constructions, what is the "shortest" path towards this? In particular, what actually goes on inside the kernel?
My mental model says that we need two things:
- ability to compute / reduce terms to values.
- ability to type check to ensure that proofs are correct.
However, since the language is dependently typed, the type-checker will most likely depend on the ability to compute when deciding two types are equal.
So, really, what is the operational semantics of the Coq evaluator? What are the type checking inference rules? And how difficult are they to implement?
I'd like a stable, standard reference of these two facts so I can re-implement a small CIC kernel.