Lean Kernel Arena / corner-cases/nested-nonuniform-param

Test "corner-cases/nested-nonuniform-param"

Expected: 🤷 either · Size: 9.2 KB · Lines: 142 · lean4export: 3.1.0 · Lean: 4.34.1 · 📄 Declaration · 🔗 Source

Checks that a parameter supplied to a nested inductive occurrence really acts as the datatype's parameter, i.e. that it is the parameter itself and does not change between recursive occurrences (as is already enforced for non-nested occurrences).

The inductive E : W → Type has constructor E.mk : (w : W) → L (E ⟨false⟩) → E w, where L (α : Type) is nested. The occurrence E ⟨false⟩ inside the nested L uses the constant ⟨false⟩ in the position of E's parameter, instead of the actual parameter w. That argument is type-correct, so it is not caught by merely type-checking the nested application (leanprover/lean4#14577); a correct checker must also verify that it is the expected parameter.

This particular declaration is not known to yield a proof of False: here L stores no value of type α, so the nested occurrence is phantom and E w is isomorphic to Unit for every w. The variant where L actually stores an α (so recursion would descend into an E ⟨false⟩ while the motive is fixed at E w) is already rejected by the kernel's positivity check ("non valid occurrence"). Since it is not a demonstrated unsoundness, it is not settled whether a checker should accept or reject it, so the expected outcome is either and the test does not count towards completeness or soundness.

Origin: raised by @arthur-adjedj on leanprover/lean4#14577 (https://github.com/leanprover/lean4/pull/14577#issuecomment-5101819377) as a case not covered by that PR's fix; related to leanprover/lean4#14576.

Checker Result ⏱️ 🧠
sokonanoda ✋ 1 ms 40.3 MB
mathgraph ✋ 1 ms 34.0 MB
nanoclo 👍 1 ms 49.6 MB
con-ron ✋ 23 ms 60.9 MB
nanobruijn 👍 1 ms 10.4 MB
nanoda 👍 1 ms 3.4 MB
lazylean 👍 1 ms 21.7 MB
con-leche ✋ 4 ms 20.2 MB
eink0rn 👍 2 ms 13.3 MB
official ✋ 28 ms 67.1 MB
ind-models ✋ 100 ms 103.8 MB
lean4lean 👍 28 ms 97.8 MB
tenet ✋ 129 ms 45.2 MB
tenet-hs ✋ 1 ms 9.3 MB
lean4cobol 👍 6 ms 13.4 MB
evmlean 👍 1.9 s 254.4 MB
mini 🚫 34 ms 73.7 MB
overfull 👍 21.3 s 47.0 MB
metalean-slow 👍 30 ms 72.0 MB
tenet-jvm 👍 110 ms 65.6 MB
nanoclo-fortran 👍 1 ms 4.6 MB
kiota 👍 1 ms 7.3 MB
metalean-fast 👍 30 ms 73.2 MB
canonical-min 🚫 387 ms 1.1 GB
rpylean 👍 1 ms 4.4 MB
vow-lean-kernel 👍 101 ms 8.6 MB
parse-only 👍 28 ms 66.3 MB