Lean Kernel Arena / undecidability/alg-conv-trans-acc

Test "undecidability/alg-conv-trans-acc"

Expected: 🤷 either · Size: 66.0 KB · Lines: 1.2 k · lean4export: 3.1.0 · Lean: 4.29.1 · 📄 Declaration · 🔗 Source

As Lean's type theory has undecidable conversion (a.k.a. definitional equality), there are bound to be gaps between so called "algorithmic" conversion (that which is implemented by a typechecker), and the "declarative" conversion.

In the official kernel, algorithmic conversion fails to be transitive. f 1 a is a normal form: a is a variable, so Acc.rec cannot fire on it. Proof irrelevance admits any other proof of Acc (· < ·) 1 in its place, and Acc.intro 1 fun _ => Acc.inv a carries a constructor at the head, so it reduces. left is that substitution, right the reduction it unblocks, and trans chains the two.

acc asks for the endpoints on their own, which means inventing the middle term: choosing, among the proofs of a proposition, the one that happens to reduce the right way. The kernel has no reason to go looking, the left side being normal already, and unfolding regardless does not terminate here, as each step makes the term larger.

References:

  • Mario Carneiro, The Type Theory of Lean, MSc thesis
Checker Result ⏱️ 🧠
mathgraph 1 ms 59.9 MB
ind-models 65 ms 103.4 MB
official-nightly 35 ms 67.1 MB
evmlean 26.5 s 231.0 MB
nanoda 3 ms 3.3 MB
mini 173 ms 69.2 MB
lean4lean 84 ms 105.9 MB
sokonanoda 1 ms 63.9 MB
zignodamus 1 ms 5.6 MB
nanoclo 2 ms 53.4 MB
nanobruijn 5 ms 18.2 MB
kiota 3 ms 10.8 MB
official 35 ms 66.2 MB
vow-lean-kernel 349 ms 8.7 MB
rpylean 3 ms 11.7 MB
official-v4.28.0 42 ms 71.6 MB
still-nanoda 3 ms 3.0 MB
nyaya 9 ms 11.8 MB
parse-only 👍 31 ms 62.2 MB