← Latest papers
💻 computer science

Crash-free Deductive Verifiers

This paper advocates for the use of fuzzing as a practical method to enhance the reliability and robustness of complex deductive verifiers, demonstrating its effectiveness through the prototype tool AValAnCHE, which successfully identified multiple issues in the VerCors verifier.

Original authors: Wander Nauta, Marcus Gerhold, Marieke Huisman

Published 2026-04-22
📖 5 min read🧠 Deep dive

Original authors: Wander Nauta, Marcus Gerhold, Marieke Huisman

Original paper licensed under CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). This is an AI-generated explanation of the paper below. It is not written or endorsed by the authors. For technical accuracy, refer to the original paper. Read full disclaimer

Imagine you have built a magnificent, high-tech magic mirror called a "Deductive Verifier." This mirror doesn't just show your reflection; it looks at your software code and promises, "I guarantee this program will never crash, never lose data, and always behave exactly as you intended."

The problem? The mirror itself is made of glass, gears, and complex wiring. If the mirror has a crack in its own glass, or if a gear gets stuck, the mirror might shatter when you try to look at a tricky reflection. In the world of software, this means the tool crashes, freezes, or gives a confusing error message instead of doing its job.

This paper is about a team of engineers (Wander, Marcus, and Marieke) who decided to stop worrying about whether the mirror's logic was perfect and started worrying about whether the mirror was tough enough to survive a storm.

Here is the story of how they did it, using simple analogies.

1. The Problem: The "Glass House" of Verification

For years, these magic mirrors (tools like VerCors, Dafny, and VeriFast) were built by academic researchers. They were brilliant at proving math, but they were like delicate glass houses. If you threw a weird, unexpected rock at them (a strange piece of code), they might shatter.

The authors realized: "We can't verify the verifier perfectly because the tool is too huge and complex. So, how do we make sure it doesn't break when real people use it?"

2. The Solution: The "Fuzzing" Storm

Enter Fuzzing.

Imagine you have a bouncer at a very strict club (the Verifier). The bouncer checks IDs (code) to let people in. Usually, people bring normal IDs. But what if you hired a chaos machine to throw millions of random, weird, and slightly broken IDs at the bouncer every second?

  • The Chaos Machine (Fuzzer): This is a robot that generates random code. It doesn't care if the code makes sense. It just throws everything at the wall.
  • The Goal: We aren't trying to see if the code is good. We are trying to see if the bouncer (the tool) passes out (crashes) when he sees something weird.

If the bouncer passes out, we know he has a weak spot. We can then fix his legs (the code) so he can stand up again.

3. The New Tool: AValAnCHE

The authors built a prototype tool called AValAnCHE (a name that sounds like a avalanche, which is fitting because it's a flood of tests).

Think of AValAnCHE as a super-organized chaos coordinator.

  • It has different "arms" (strategies) to throw rocks at the mirror.
    • The Blind Thrower: Just throws random garbage. (This didn't work well; the mirror just ignored it).
    • The Grammar Architect: Builds rocks that look like they belong in the club (syntactically correct) but might still be weird inside.
    • The Smart Architect: Builds rocks that are not only shaped right but also make logical sense.

AValAnCHE runs these strategies against the VerCors mirror. It watches closely. If the mirror shatters, AValAnCHE catches the broken pieces, takes a photo of the crack, and says, "Hey, developers! Look at this! We found a bug!"

4. The Results: Finding the Cracks

The experiment was a huge success. By throwing these "storms" of random code at the VerCors tool, they found dozens of cracks that no one had noticed before.

Here are a few examples of the weird rocks they threw that broke the mirror:

  • The Empty Box: They tried to verify a program with an empty "enum" (a list of options). The tool panicked and crashed.
  • The Name Game: They used a name made entirely of the letters "u" and "l" (like ullll). The tool choked on it.
  • The Forbidden Keyword: They used a special word in the wrong language (like using a French word in an English sentence). The tool didn't know how to say "No, that's wrong," so it just broke.

They found that the tool was crashing on things that were technically "allowed" by the grammar but not actually handled by the code.

5. Why This Matters

The authors showed that this "Chaos Machine" approach isn't just for VerCors. They tried it on other magic mirrors (like Dafny and VeriFast) and found cracks there, too.

The Big Takeaway:
You don't need to be a mathematician to make a tool robust. You just need to be a torture tester. By constantly hitting the tool with weird, random, and unexpected inputs, you force it to grow stronger.

The Analogy Summary

  • The Verifier: A high-tech security guard.
  • The Code: The ID card.
  • The Bug: A crack in the guard's armor.
  • Fuzzing: A machine that throws millions of weird, fake, or broken ID cards at the guard every second.
  • AValAnCHE: The supervisor who records which ID cards made the guard fall over, so the armor can be fixed.

The paper concludes that if we want these tools to be used by regular developers (not just math wizards), they need to be crash-free. And the best way to make them crash-free is to break them first, on purpose, using a "Fuzzing Storm."

Drowning in papers in your field?

Get daily digests of the most novel papers matching your research keywords — with technical summaries, in your language.

Try Digest →