Lean Kernel Arena / corner-cases/eta-struct-major-no-whnf

Test "corner-cases/eta-struct-major-no-whnf"

Expected: 🤷 either · Size: 32.2 KB · Lines: 582 · lean4export: 3.1.0 · Lean: 4.34.1 · Timeout: 1.0 m · 📄 Declaration · 🔗 Source

Structure eta on a recursor's major premise, applied before trying to reduce the major to a constructor.

prodConst loopPair is Prod.rec (fun _ _ => 1) loopPair, and loopPair is an Acc.rec whose major premise is a proof with no weak head normal form (built from Coquand's paradox, via propext). A checker that first reduces the major premise to weak head normal form, as the official kernel does today, does not terminate here. Expanding the major premise to (loopPair.1, loopPair.2) first lets the recursor fire without ever looking at loopPair, and the equation with 1 holds.

The result of the reduction is the same either way (structure eta is part of the theory), so the question is only one of termination of the algorithm. The official kernel may adopt this order, see https://github.com/leanprover/lean4/pull/15351 and the overall plan in https://github.com/leanprover/lean4/issues/14977.

Checker Result ⏱️ 🧠
sokonanoda ⌛ 0 ms 0 B
mathgraph ⌛ 0 ms 0 B
nanoclo ⌛ 0 ms 0 B
con-ron 💥 49 ms 82.3 MB
nanobruijn ⌛ 0 ms 0 B
nanoda ⌛ 0 ms 0 B
lazylean ⌛ 0 ms 0 B
con-leche 💥 83 ms 41.1 MB
eink0rn 🚫 12.5 s 3.6 GB
official ⌛ 0 ms 0 B
ind-models ⌛ 0 ms 0 B
lean4lean ✋ 97 ms 98.9 MB
tenet ✋ 38.4 s 233.7 MB
tenet-hs ✋ 1.3 m 72.3 MB
lean4cobol 🚫 401 ms 13.7 MB
evmlean ⌛ 0 ms 0 B
mini ⌛ 0 ms 0 B
overfull ⌛ 0 ms 0 B
metalean-slow 🚫 33 ms 73.8 MB
tenet-jvm ⌛ 0 ms 0 B
nanoclo-fortran ⌛ 0 ms 0 B
kiota ⌛ 0 ms 0 B
metalean-fast 💥 7.6 s 1.1 GB
canonical-min ✋ 389 ms 1.1 GB
rpylean ⌛ 0 ms 0 B
vow-lean-kernel 👍 936 ms 16.8 MB
parse-only 👍 29 ms 65.8 MB