Test "perf/irrelevance-refutes"
Expected: 👍 accept · Size: 13.1 KB · Lines: 244 · lean4export: 3.1.0 · Lean: 4.34.1 · Timeout: 50.0 s · 📄 Declaration · 🔗 Source
The declaration to check is
f 100000 (slowRefl 100000) = f 100001 (slowRefl 100001)
proved by rfl, where f ignores its arguments and slowRefl m : m = m
is a Nat.rec over m, so unfolding it to rfl takes Θ(m) steps.
Both sides apply f, so a checker may first compare the arguments, find
them different, and then unfold f. Comparing the literals refutes for
Θ(1). Comparing the proofs, proof irrelevance refutes them by their
types, 100000 = 100000 against 100001 = 100001, also for Θ(1): two
proofs of propositions that are not defeq are not defeq. A checker that
takes only proof irrelevance's positive answer, and otherwise unfolds the
proofs, evaluates both recursions for Θ(m).
Official reaches the proofs first. f is a regular definition at the head
of both sides, so lazy_delta_reduction_step tries the arguments before
unfolding it, and is_def_eq_args compares them last to first. (The
congruence fallback at the end of is_def_eq_core, is_def_eq_app,
compares first to last, but it is not reached here.) For the proofs,
is_def_eq_core stops on is_def_eq_proof_irrel's l_false.
Distilled from decide +kernel on Rat arithmetic, e.g.
(1 : Rat) / 1000000000 * ((1000000 : Int) : Rat) = 1 / 1000, where the
proofs are Nat.gcd_dvd terms by well-founded recursion and the
comparison that reaches them is of Int.divExact's arguments, last to first.
| Checker | Result | ⏱️ | 🧠 | |||
|---|---|---|---|---|---|---|
| logos-kernel | 👍 | 0.482 ms | (÷59) | 4.6 MB | (÷15) | |
| nano-lean | 👍 | 0.597 ms | (÷48) | 24.3 MB | (÷2.7) | |
| sokonanoda | 👍 | 0.869 ms | (÷33) | 27.8 MB | (÷2.4) | |
| pestka | 👍 | 0.939 ms | (÷30) | 10.7 MB | (÷6.2) | |
| kefir | 👍 | 1.02 ms | (÷28) | 6.3 MB | (÷11) | |
| nanoclo | 👍 | 0.834 ms | (÷34) | 49.4 MB | (-26%) | |
| kefir-wasm | 👍 | 160 ms | (×5.6) | 96.5 MB | (+45%) | |
| con-ron | 👍 | 22.2 ms | (-22%) | 39.8 MB | (-40%) | |
| con-agua | 👍 | 18.3 ms | (-36%) | 11.1 MB | (÷6.0) | |
| nanoda | 👍 | 0.815 ms | (÷35) | 3.3 MB | (÷20) | |
| lazylean | 👍 | 1.29 ms | (÷22) | 21.4 MB | (÷3.1) | |
| con-leche | 👍 | 4.35 ms | (÷6.6) | 21.1 MB | (÷3.1) | |
| pestka-wasm | 👍 | 94.2 ms | (×3.3) | 100.2 MB | (+51%) | |
| tenet-jvm | 👍 | 124 ms | (×4.3) | 64.5 MB | (-3%) | |
| eink0rn | 👍 | 1.74 ms | (÷16) | 12.4 MB | (÷5.4) | |
| official | 👍 | 28.6 ms | (0%) | 66.5 MB | (0%) | |
| ind-models | 👍 | 102 ms | (×3.6) | 108.4 MB | (+63%) | |
| lean4lean | 👍 | 28.6 ms | (0%) | 95.2 MB | (+43%) | |
| tenet | 👍 | 141 ms | (×4.9) | 44.7 MB | (-33%) | |
| tenet-hs | 👍 | 1.70 ms | (÷17) | 9.3 MB | (÷7.2) | |
| ocaml4lean | 👍 | 14.0 ms | (÷2.0) | 24.6 MB | (÷2.7) | |
| lean4cobol | 👍 | 8.30 ms | (÷3.4) | 13.7 MB | (÷4.9) | |
| evmlean | ⌛ | 0 ms | 0 B | |||
| overfull | 👍 | 36.1 s | (×1264) | 46.9 MB | (-29%) | |
| vow-lean-kernel | ⌛ | 0 ms | 0 B | |||
| mini | 🚫 | 34.6 ms | 74.2 MB | |||
| canonical-min | 👍 | 389 ms | (×14) | 1.1 GB | (×16) | |
| kiota | 👍 | 1.15 ms | (÷25) | 9.1 MB | (÷7.3) | |
| metalean-slow | 🚫 | 31.1 ms | 73.6 MB | |||
| nanobruijn | 👍 | 1.27 ms | (÷23) | 11.5 MB | (÷5.8) | |
| metalean-fast | 👍 | 31.0 ms | (+9%) | 74.3 MB | (+12%) | |
| nanoclo-fortran | 👍 | 1.31 ms | (÷22) | 4.5 MB | (÷15) | |
| rpylean | 👍 | 217 ms | (×7.6) | 155.5 MB | (×2.3) | |
| mathgraph | 👍 | 0.779 ms | (÷37) | 37.7 MB | (-43%) | |
| parse-only | 👍 | 28.0 ms | (-2%) | 66.2 MB | (0%) |