Lean Kernel Arena / proj-of-prop

Test "proj-of-prop"

Expected: ✋ reject · Size: 3.9 KB · Lines: 56 · lean4export: 3.1.0 · Lean: 4.29.1 · 📄 Declaration · 🔗 Source

A proof of False via a projection from a Prop-typed structure whose constructor was applied to an ill-typed argument. The exported term is

badFalse : False := (Wrapper.mk True.intro).p

where Wrapper : Prop has a single field p : False, so Wrapper.mk expects a proof of False but is given True.intro : True.

A sound checker must reject this. A checker that types a projection by inferring (rather than checking) its structure argument — i.e. that trusts the structure to be well-typed instead of verifying the constructor's argument types against its binders — will accept it, because Wrapper.mk True.intro still formally inhabits Wrapper at the structural level, and the p projection is then read back out at the declared field type False.

Checker Result ⏱️ 🧠
nanoda 1 ms 2.9 MB
nanobruijn 2 ms 3.2 MB
official-nightly 31 ms 57.0 MB
official 31 ms 67.7 MB
official-v4.28.0 38 ms 71.8 MB
lean4lean 58 ms 86.6 MB
mini 38 ms 71.0 MB
vow-lean-kernel 🚫 83 ms 7.8 MB
evmlean 601 ms 128.2 MB
always-decline 🚫 1 ms 2.9 MB
sokonanoda 2 ms 2.9 MB
rpylean 2 ms 7.9 MB
still-nanoda 2 ms 2.9 MB
always-reject 1 ms 2.9 MB
parse-only 👍 37 ms 71.1 MB
always-accept 👍 1 ms 2.9 MB