mutant
nanofil also mutation campaign
A mutant is a checked module with one item changed, inserted or deleted: a check deleted or moved, its bounds, rights or alignment changed, a raw access's offset moved by one, a free inserted between evidence and its use, a reuse form given another proof, a poll edge removed, or a data object's or alias's linkage, target or name changed. Prolog's and Rocq's validators judge each, and must agree.
rocq/mutants.plprints up to 150 mutants per item;judge_validapplies each change, computesvalid_itemsof the whole module and compares it withir:valid_module/1's verdict;rocq/valid.shruns it.The mutation campaign is the full matrix,
checks.x86_64-linux.nanofil-rocq-full, run only when asked. The routine check setsNANOFIL_MUTANTS=0and compares base verdicts only.Mutants test rejection as well as acceptance; eight bugs planted in Validate.v were each caught.
The subtlety: a mutant is outside, not judged, when it is itself outside the core subset, or changes a signature, data or alias that an outside function refers to.