Lean Kernel Arena / orphan-rec

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