Lean Kernel Arena / perf/irrelevance-refutes

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%)