Test "orphan-rec"
Expected: ✋ reject · Size: 1.4 KB · Lines: 21 · lean4export: 3.1.0 · Lean: 4.29.1 · 📄 Declaration
Proof of False from a recursor that claims not to belong to any inductive
type.
The export contains False exactly as the prelude has it — an empty
Prop-valued inductive with no constructors — together with its ordinary
False.rec. Smuggled into the same inductive block is a second recursor,
named rogue, whose type is False itself, which has no motives, no minor
premises and no rules, and whose all field is the empty list. The theorem
inconsistent : False is then simply rogue.
This is the sibling of extra-rec, and it defeats the obvious fix for it. A
checker that associates each exported recursor with the inductive type named
in its all field, and then requires the recursors so associated with an
inductive type to be exactly the ones it derives from that declaration, still
accepts rogue: False is associated with False.rec and nothing else, and
rogue is associated with nothing at all, so no comparison ever looks at it —
yet it is added to the environment and inhabits the genuine empty type.
A checker must therefore reject any recursor it did not itself derive from an
inductive declaration, rather than only checking the recursors that point at
one. The same hole is reachable by pointing all at a name that has no
declaration in the export (that variant is what orphan-ctor does on the
constructor side).
Nanoda accepted this export until it was fixed.
| Checker | Result | ⏱️ | 🧠 | |||
|---|---|---|---|---|---|---|
| mathgraph | ✋ | 1 ms | 29.6 MB | |||
| nanoda | ✋ | 0 ms | 3.3 MB | |||
| nanobruijn | ✋ | 1 ms | 3.3 MB | |||
| ind-models | ✋ | 58 ms | 103.7 MB | |||
| official | ✋ | 27 ms | 66.2 MB | |||
| lean4lean | ✋ | 28 ms | 97.4 MB | |||
| evmlean | ✋ | 488 ms | 133.4 MB | |||
| mini | ✋ | 34 ms | 73.7 MB | |||
| sokonanoda | 👍 | 1 ms | 30.0 MB | |||
| nanoclo | 👍 | 1 ms | 41.4 MB | |||
| zignodamus | 👍 | 0 ms | 4.1 MB | |||
| vow-lean-kernel | ✋ | 43 ms | 8.1 MB | |||
| official-v4.28.0 | ✋ | 34 ms | 74.2 MB | |||
| still-nanoda | 👍 | 0 ms | 3.1 MB | |||
| kiota | ✋ | 1 ms | 6.6 MB | |||
| rpylean | ✋ | 1 ms | 8.2 MB | |||
| nyaya | 👍 | 2 ms | 9.1 MB | |||
| parse-only | 👍 | 27 ms | 65.2 MB |