Reimplementing Mizar in Rust
Mario Carneiro
TL;DR
This work presents mizar-rs, a Rust reimplementation of Mizar's core proof-c checking and analysis components, enabling external proof export and substantial performance gains. By reencoding the checker and analyzer and integrating them with a modular pipeline, the authors verify the entire Mizar Mathematical Library (MML) in under 12 minutes on 8 cores, achieving roughly a 4–5× speedup over the Pascal baseline. They also use this project to audit the original system, uncovering several soundness bugs (four major issues plus an auxiliary one) and coordinating fixes with MML maintainers, illustrating the value of external checkers for reliability. The work discusses architectural decisions, parsing and name-resolution challenges, and the potential of proof-export tooling, while outlining future directions such as removing language-imposed constraints and extending the system beyond verification toward complete proof export.
Abstract
This paper describes a new open-source proof processing tool, mizar-rs, a wholesale reimplementation of core parts of the Mizar proof system, written in Rust. In particular, the "checker" and "analyzer" of Mizar are implemented, which together form the trusted core of Mizar. This is to our knowledge the first and only external implementation of these components. Thanks to the loose coupling of Mizar's passes, it is possible to use the checker as a drop-in replacement for the original, and we have used this to verify the entire MML in 11.8 minutes on 8 cores, a 4.8x speedup over the original Pascal implementation. Since Mizar is not designed to have a small trusted core, checking Mizar proofs entails following Mizar closely, so our ability to detect bugs is limited. Nevertheless, we were able to find multiple memory errors, four soundness bugs in the original (which were not being exploited in MML), in addition to one non-critical bug which was being exploited in 46 different MML articles. We hope to use this checker as a base for proof export tooling, as well as revitalizing development of the language.
