A project formalizing the Rocq proof assistant in Rocq itself, providing tools for metaprogramming and developing certified plugins.
MetaRocq is a metaprogramming framework for the Rocq proof assistant that formalizes Rocq's own implementation within Rocq. It provides tools for quoting, manipulating, and verifying Rocq terms, enabling the development of certified plugins and transformations. The project solves the problem of building reliable, verified metaprogramming tools directly inside the proof assistant.
Researchers and developers working with the Rocq proof assistant who need to create verified plugins, compilers, or tactics, or who are interested in formalizing metatheory and extraction procedures.
Developers choose MetaRocq because it offers a fully verified foundation for metaprogramming in Rocq, with certified type checkers, erasure procedures, and a formalized calculus, ensuring correctness and reliability for advanced tooling.
Metaprogramming, verified meta-theory and implementation of Rocq in Rocq
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Formalizes Coq's calculus (PCUIC) with proven metatheoretical properties like confluence and subject reduction, providing a solid basis for building correct tools.
Includes a fuel-free, verified type checker and erasure procedure extracted for use within Coq, ensuring reliability for plugin development and extraction pipelines.
Template-Rocq offers quoting of Coq terms into an inductive syntax tree and a monad for environment handling, simplifying complex metaprogramming tasks.
Backed by multiple academic papers and a large team, with a mature codebase (~300k LoC) indicating robustness and ongoing innovation.
Template-Rocq does not cover eta-expansion and template polymorphism, limiting support for some advanced Coq constructs as admitted in the README.
Requires deep understanding of Coq internals and non-trivial installation, with documentation geared towards researchers rather than practical developers.
The verified type checker and erasure may have overhead compared to Coq's native implementations, as hinted by the time comparison command in Safe Checker.