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 |