Lean Kernel Arena / con-ron

Checker "con-ron"

Version: ed86414 · 📄 Declaration · 🔗 Source

con-ron is con-leche ported to Rust: the same checking algorithm, but with its own term representation — expressions are hash-consed into per-constructor arrays and named by 32-bit handles, with a persistent tier for the environment and a scratch tier per declaration.

The port is verified against con-leche in two steps. A Lean twin of con-leche's pure checker, written over the same data structures as the Rust, is proved to refine con-leche's; and Aeneas translates the Rust checker back into Lean, where it is proved to refine the twin: where the Rust function succeeds, it computes what the twin computes. So con-leche's consistency statement — if it accepts a set of declarations then they have a model in set theory, and in particular no theorem of False is accepted — carries over to what this binary accepts, modulo Aeneas as a Rust-to-Lean translator and the unverified driver (reading the file, scheduling threads).

That makes it less a high-assurance verification effort of its own than a second body for the same verified checker: a proof accepted by both is protected against a bug in Lean's compiler or runtime — the bignum library included — which the Rust build does not share, while still resting on a machine-checked consistency argument.

Like con-leche it runs in --verified mode here (the mode the theorem is about), with four worker threads for the check phase; it ingests raw lean4export NDJSON with no preprocessor and no subprocess, and an axiom it does not recognise makes it decline the stream rather than reject it. Exit codes are the arena's: 0 accept, 1 reject, 2 decline, 3 error. Running out of memory is none of them — a failed allocation aborts the process (SIGABRT) — so exhaustion can never be read as a rejection.

Single-threaded it retires a little under half of con-leche's instructions, and on Mathlib about two thirds of nanoda's. Written by AI under close human supervision from Joachim Breitner at the Lean FRO.

Soundness (rightfully rejected tests)

77 ✅ 0 ❌ 3 🚫

Completeness (rightfully accepted tests)

132 ✅ 0 ❌ 6 🚫

Corner cases (no outcome prescribed)

30 ✅ 0 🚫

Test Expected Result ⏱️ 🧠
cedar 👍 🚫 7.59 s 1023.4 MB
con-leche 👍 👍 49.0 s (÷2.3) 873.1 MB (+2%)
cslib 👍 👍 3.10 min (÷2.8) 3.1 GB (-10%)
init 👍 👍 31.8 s (÷2.1) 619.0 MB (+9%)
init-prelude 👍 👍 178 ms (÷2.0) 79.8 MB (+9%)
mathlib 👍 👍 9.37 min (÷3.4) 6.6 GB (-33%)
navier-stokes-euler 👍 👍 3.18 min (÷3.5) 1.7 GB (-32%)
reachability 👍 👍 15.6 s (-34%) 2.5 GB (+51%)
std 👍 👍 49.8 s (÷2.3) 961.5 MB (+3%)
26 478 ms 49.8 MB
closure-level-subst ✋ ✋ 22.1 ms 37.9 MB
constlevels ✋ ✋ 22.3 ms 37.9 MB
ctor-num-fields ✋ ✋ 0.789 ms 11.9 MB
eta-ctor-alias ✋ ✋ 22.1 ms 35.8 MB
forged-quot-ind ✋ ✋ 21.6 ms 37.6 MB
k-rec-conv ✋ ✋ 22.3 ms 39.7 MB
large-elim-param ✋ ✋ 22.1 ms 37.7 MB
large-elim-prop-bool ✋ ✋ 22.2 ms 37.6 MB
level-imax-leq ✋ ✋ 0.708 ms 11.5 MB
level-imax-normalization ✋ ✋ 22.1 ms 33.8 MB
loose-bvar-value ✋ ✋ 22.0 ms 37.7 MB
nat-rec-k-lie ✋ ✋ 0.701 ms 11.7 MB
nat-rec-rules ✋ ✋ 0.716 ms 11.9 MB
nested-name-capture ✋ ✋ 23.1 ms 37.9 MB
nested-rec-rule-nfields ✋ ✋ 23.2 ms 39.8 MB
nested-unused-param ✋ ✋ 23.5 ms 37.7 MB
orphan-rec ✋ ✋ 0.684 ms 11.9 MB
pi-closure-context ✋ ✋ 22.0 ms 35.7 MB
proj-non-structure ✋ ✋ 22.1 ms 37.6 MB
proj-of-imax-prop ✋ ✋ 22.5 ms 37.9 MB
proj-of-stuck-prop ✋ ✋ 27.1 ms 41.8 MB
proj-of-subst-prop ✋ ✋ 30.5 ms 45.9 MB
rec-k-lie ✋ ✋ 0.693 ms 11.6 MB
rec-missing-ih ✋ ✋ 27.8 ms 43.7 MB
rec-of-subst-prop ✋ ✋ 30.8 ms 49.8 MB
unit-rec-rule ✋ ✋ 22.1 ms 38.0 MB
1 702 ms 42.1 MB
alg-conv-trans-acc 🤷 ✋ 24.7 ms 41.9 MB
alg-conv-trans-acc-left 🤷 👍 24.7 ms 42.1 MB
alg-conv-trans-acc-right 🤷 👍 24.8 ms 41.9 MB
alg-conv-trans-quot 🤷 ✋ 22.1 ms 35.9 MB
alg-conv-trans-quot-left 🤷 ✋ 22.1 ms 37.8 MB
alg-conv-trans-quot-left-def 🤷 👍 22.1 ms 37.7 MB
alg-conv-trans-quot-right 🤷 👍 22.1 ms 37.7 MB
eta-ctor 🤷 ✋ 22.2 ms 37.9 MB
eta-rec-struct 🤷 ✋ 22.2 ms 37.6 MB
eta-rule-k 🤷 ✋ 22.0 ms 35.7 MB
eta-struct-major-and 🤷 👍 22.1 ms 37.9 MB
eta-struct-major-and-no-whnf 🤷 👍 22.6 ms 37.8 MB
eta-struct-major-no-whnf 🤷 👍 23.0 ms 39.8 MB
eta-unit-like-nested 🤷 ✋ 22.4 ms 37.9 MB
eta-unit-like-pi 🤷 ✋ 22.1 ms 34.0 MB
eta-unit-like-proof-field 🤷 ✋ 22.1 ms 37.9 MB
eta-unit-like-struct 🤷 ✋ 22.2 ms 37.9 MB
imax-nested-absorption 🤷 👍 22.0 ms 39.7 MB
imax-right-successor 🤷 👍 22.0 ms 39.7 MB
large-elim-maybe-prop 🤷 👍 22.1 ms 37.9 MB
let-value-type-mismatch 🤷 ✋ 22.0 ms 40.0 MB
nested-nonuniform-param 🤷 ✋ 22.2 ms 37.7 MB
nested-redex-aux 🤷 👍 23.6 ms 39.8 MB
positivity-whnf 🤷 ✋ 22.1 ms 37.6 MB
proj-maybe-prop 🤷 👍 22.3 ms 37.8 MB
proj-maybe-prop-past 🤷 👍 22.3 ms 38.0 MB
proof-param-ok 👍 👍 22.1 ms 37.8 MB
proof-param-swap 🤷 ✋ 22.0 ms 37.8 MB
subject-reduction-redex 🤷 ✋ 24.8 ms 42.0 MB
subject-reduction-reduct 🤷 ✋ 24.8 ms 41.9 MB
vanishing-occurrence 🤷 👍 22.2 ms 37.9 MB
8 181 ms 39.9 MB
extra-rec ✋ ✋ 0.684 ms 11.8 MB
inductive-undeclared-universe ✋ ✋ 22.0 ms 37.8 MB
level-index-out-of-order 👍 🚫 21.9 ms 39.7 MB
nat-lit-add 👍 👍 22.8 ms 39.6 MB
nat-lit-add-bad ✋ ✋ 22.8 ms 39.9 MB
nat-lit-ble 👍 👍 22.9 ms 39.9 MB
nat-lit-sub 👍 👍 22.9 ms 39.7 MB
orphan-ctor ✋ ✋ 0.685 ms 11.7 MB
proj-of-prop ✋ ✋ 22.1 ms 35.9 MB
sparse-name-index 👍 🚫 21.9 ms 39.7 MB
31 58.3 s (-28%) 5.3 GB
app-lam 👍 👍 4.54 s (-6%) 2.8 GB (+100%)
args-before-unfold 👍 👍 26.7 ms (-26%) 41.1 MB (-38%)
beta-ladder 👍 👍 1.40 s (-16%) 963.3 MB (+93%)
church-numerals 👍 👍 40.6 ms (-13%) 64.5 MB (-18%)
discarded-argument 👍 👍 27.3 ms (÷6.1) 40.0 MB (-39%)
discarded-argument-match 👍 👍 39.6 ms (÷3.6) 52.3 MB (-23%)
folded-constant-first 👍 👍 29.5 ms (-28%) 46.5 MB (-33%)
folded-constant-last 👍 👍 29.5 ms (-28%) 46.6 MB (-32%)
fueled-chain 👍 👍 52.3 ms (÷2.4) 74.2 MB (-2%)
grind-ring-5 👍 👍 1.40 s (-35%) 334.8 MB (+47%)
identical-nesting 👍 👍 22.2 ms (-21%) 37.7 MB (-43%)
irrelevance-before-evaluation 👍 👍 22.5 ms (-22%) 38.1 MB (-42%)
irrelevance-refutes 👍 👍 22.2 ms (-22%) 39.8 MB (-40%)
let-fold 👍 👍 1.42 s (×25) 481.9 MB (×7.3)
let-ladder 👍 👍 765 ms (-24%) 666.3 MB (×2.1)
magma-list-deep-n21 👍 👍 1.87 s (-31%) 368.9 MB (-45%)
magma-list-deep-n36 👍 👍 22.3 s (-37%) 2.5 GB (÷3.2)
magma-list-pair-n21 👍 👍 15.2 s (-18%) 5.3 GB (+33%)
magma-list-pair-n7 👍 👍 1.38 s (-18%) 526.0 MB (+24%)
magma-string-n4 👍 👍 2.05 s (-42%) 224.3 MB (+85%)
magma-string-pair-n9 👍 👍 5.31 s (-35%) 784.5 MB (-22%)
proj-cheap-struct 👍 👍 25.1 ms (-27%) 39.8 MB (-40%)
proj-lazy-struct 👍 👍 23.6 ms (-24%) 39.8 MB (-39%)
proj-stuck-struct 👍 👍 23.8 ms (-25%) 39.7 MB (-39%)
prop-struct-projections 👍 👍 92.5 ms (-7%) 67.9 MB (-3%)
refute-cheap-first ✋ ✋ 22.5 ms (-46%) 37.8 MB (-45%)
refute-cheap-last ✋ ✋ 29.1 ms (÷6.2) 40.2 MB (-42%)
repeated-subproblem 👍 👍 22.4 ms (-22%) 37.7 MB (-43%)
shared-subterm 👍 👍 41.2 ms (-29%) 46.2 MB (-37%)
shift-cascade 👍 👍 26.7 ms (-42%) 50.1 MB (-26%)
unroll-versus-evaluate 👍 👍 23.1 ms (-26%) 40.5 MB (-39%)
135 2.81 s 39.9 MB
001_basicDef 👍 👍 21.9 ms 39.9 MB
002_badDef ✋ ✋ 22.0 ms 39.7 MB
003_arrowType 👍 👍 22.0 ms 39.5 MB
004_dependentType 👍 👍 22.0 ms 39.7 MB
005_constType 👍 👍 21.9 ms 39.7 MB
006_betaReduction 👍 👍 22.0 ms 37.7 MB
007_betaReduction2 👍 👍 22.0 ms 38.0 MB
008_forallSortWhnf 👍 👍 22.0 ms 39.6 MB
009_forallSortBad ✋ ✋ 22.0 ms 39.8 MB
010_nonTypeType ✋ ✋ 22.0 ms 39.8 MB
011_nonTypeAxiom ✋ ✋ 21.9 ms 39.7 MB
012_nonPropThm ✋ ✋ 22.0 ms 39.9 MB
013_thmProof 👍 👍 22.0 ms 38.0 MB
014_selfProof ✋ ✋ 22.0 ms 39.6 MB
015_levelComp1 👍 👍 22.0 ms 39.7 MB
016_levelComp2 👍 👍 22.0 ms 39.8 MB
017_levelComp3 👍 👍 22.0 ms 39.7 MB
018_levelParams 👍 👍 22.0 ms 37.9 MB
019_tut06_bad01 ✋ ✋ 21.9 ms 39.8 MB
020_levelComp4 👍 👍 21.9 ms 39.6 MB
021_levelComp5 👍 👍 22.0 ms 39.7 MB
022_imax1 👍 👍 22.0 ms 39.9 MB
023_imax2 👍 👍 21.9 ms 39.9 MB
024_levelMaxComm 👍 👍 22.0 ms 39.8 MB
025_levelMaxAssoc 👍 👍 22.0 ms 39.9 MB
026_levelMaxIdem 👍 👍 22.0 ms 39.7 MB
027_levelMaxAbsorb 👍 👍 22.0 ms 39.9 MB
028_inferVar 👍 👍 22.0 ms 39.7 MB
029_defEqLambda 👍 👍 21.9 ms 37.7 MB
030_peano1 👍 👍 22.1 ms 37.8 MB
031_peano2 👍 👍 22.1 ms 37.9 MB
032_peano3 👍 👍 22.1 ms 37.8 MB
033_letType 👍 👍 22.0 ms 39.7 MB
034_letTypeDep 👍 🚫 22.0 ms 39.7 MB
035_letRed 👍 🚫 22.0 ms 37.7 MB
036_empty 👍 👍 22.0 ms 39.7 MB
037_boolType 👍 👍 22.0 ms 39.8 MB
038_twoBool 👍 👍 22.1 ms 37.6 MB
039_andType 👍 👍 22.0 ms 37.7 MB
040_prodType 👍 👍 22.1 ms 35.8 MB
041_pprodType 👍 👍 22.1 ms 37.7 MB
042_pUnitType 👍 👍 22.1 ms 37.9 MB
043_eqType 👍 👍 22.0 ms 37.7 MB
044_natDef 👍 👍 22.1 ms 37.8 MB
045_rbTreeDef 👍 👍 22.8 ms 37.7 MB
046_inductBadNonSort ✋ ✋ 22.0 ms 39.8 MB
047_inductBadNonSort2 ✋ 🚫 22.0 ms 39.8 MB
048_inductLevelParam ✋ ✋ 22.0 ms 39.8 MB
049_inductTooFewParams ✋ ✋ 22.0 ms 39.7 MB
050_inductWrongCtorParams ✋ ✋ 0.687 ms 9.7 MB
051_inductWrongCtorResParams ✋ ✋ 0.688 ms 11.8 MB
052_inductWrongCtorResLevel ✋ ✋ 0.695 ms 11.9 MB
053_inductInIndex ✋ ✋ 0.685 ms 9.7 MB
054_indNeg ✋ ✋ 0.683 ms 9.7 MB
055_reduceCtorParam.mk 👍 👍 22.1 ms 37.6 MB
056_reduceCtorType.mk ✋ ✋ 0.690 ms 11.7 MB
057_indNegReducible ✋ ✋ 0.697 ms 11.7 MB
058_predWithTypeField 👍 👍 22.0 ms 39.8 MB
059_typeWithTypeField 👍 👍 22.0 ms 39.8 MB
060_typeWithTypeFieldPoly 👍 👍 22.1 ms 39.7 MB
061_typeWithTooHighTypeField.mk ✋ ✋ 0.685 ms 9.6 MB
062_emptyRec 👍 👍 22.0 ms 39.7 MB
063_boolRec 👍 👍 22.0 ms 37.9 MB
064_twoBoolRec 👍 👍 22.1 ms 37.9 MB
065_andRec 👍 👍 22.0 ms 37.8 MB
066_prodRec 👍 👍 22.1 ms 33.8 MB
067_pprodRec 👍 👍 22.1 ms 33.6 MB
068_punitRec 👍 👍 22.1 ms 37.6 MB
069_eqRec 👍 👍 22.0 ms 37.8 MB
070_nRec 👍 👍 22.1 ms 37.7 MB
071_rbTreeRef 👍 👍 22.8 ms 37.7 MB
072_boolPropRec 👍 👍 22.0 ms 37.8 MB
073_BogusRecursor ✋ ✋ 0.689 ms 9.6 MB
074_existsRec 👍 👍 22.1 ms 33.8 MB
075_typeSingletonRecReduction 👍 👍 22.1 ms 37.7 MB
076_sortElimPropRec 👍 👍 22.1 ms 37.8 MB
077_sortElimProp2Rec 👍 👍 22.2 ms 37.7 MB
078_boolRecEqns 👍 👍 22.1 ms 37.6 MB
079_prodRecEqns 👍 👍 22.2 ms 37.9 MB
080_nRecReduction 👍 👍 22.2 ms 37.5 MB
081_listRecReduction 👍 👍 22.5 ms 39.8 MB
082_RBTree.id_spec 👍 👍 23.8 ms 39.7 MB
083_And.right 👍 👍 22.0 ms 37.7 MB
084_Prod.snd 👍 👍 22.1 ms 37.6 MB
085_PProd.snd 👍 👍 22.1 ms 33.9 MB
086_PSigma.snd 👍 👍 22.2 ms 33.8 MB
087_projOutOfRange ✋ ✋ 22.0 ms 37.7 MB
088_projNotStruct ✋ ✋ 22.1 ms 37.8 MB
089_projProp1 👍 👍 22.2 ms 37.6 MB
090_projProp2 ✋ ✋ 22.2 ms 37.8 MB
091_projProp3 👍 👍 22.2 ms 37.8 MB
092_projProp4 ✋ ✋ 22.2 ms 37.6 MB
093_projProp5 ✋ ✋ 22.2 ms 37.8 MB
094_projProp6 ✋ ✋ 22.2 ms 37.7 MB
095_projDataIndexRec 👍 👍 22.2 ms 37.7 MB
096_projIndexData ✋ ✋ 22.5 ms 37.6 MB
097_projIndexData2 ✋ ✋ 22.5 ms 37.7 MB
098_projRed 👍 👍 22.2 ms 37.9 MB
099_ruleK 👍 👍 22.0 ms 35.8 MB
100_ruleKbad ✋ ✋ 22.0 ms 35.7 MB
101_ruleKAcc ✋ ✋ 22.3 ms 37.8 MB
102_aNatLit 👍 👍 22.0 ms 37.9 MB
103_natLitEq 👍 👍 22.0 ms 37.7 MB
104_proofIrrelevance 👍 👍 22.0 ms 37.7 MB
105_proofIrrelevanceBad ✋ ✋ 22.0 ms 39.8 MB
106_proofIrrelevanceWhnf 👍 👍 22.0 ms 37.5 MB
107_proofIrrelevanceUnderBinder 👍 🚫 22.0 ms 37.8 MB
108_unitEta1 👍 👍 22.1 ms 37.7 MB
109_unitEta2 👍 👍 22.1 ms 37.7 MB
110_unitEta3 👍 👍 22.1 ms 37.7 MB
111_indexedUnitEta ✋ ✋ 22.1 ms 37.7 MB
112_structEta 👍 👍 22.3 ms 37.7 MB
113_indexedStructEta ✋ ✋ 22.2 ms 38.0 MB
114_funEta 👍 👍 22.0 ms 35.6 MB
115_funEtaDep 👍 👍 22.0 ms 33.8 MB
116_funEtaBad ✋ ✋ 22.0 ms 33.7 MB
117_reflOccLeft ✋ ✋ 0.704 ms 11.8 MB
118_reflOccInIndex ✋ ✋ 0.706 ms 11.6 MB
119_reduceCtorParamRefl.mk 👍 👍 22.1 ms 37.6 MB
120_reduceCtorParamRefl2.mk 👍 👍 22.1 ms 37.7 MB
121_rTreeRec 👍 👍 22.1 ms 37.8 MB
122_rtreeRecReduction 👍 👍 22.2 ms 37.8 MB
123_accRecType 👍 👍 22.3 ms 37.8 MB
124_accRecReduction 👍 👍 22.3 ms 37.9 MB
125_accRecNoEta ✋ ✋ 22.3 ms 37.7 MB
126_quotMkType 👍 👍 22.0 ms 37.8 MB
127_quotIndType 👍 👍 22.0 ms 37.8 MB
128_quotLiftType 👍 👍 22.0 ms 37.8 MB
129_quotSoundType 👍 👍 22.0 ms 37.9 MB
130_quotLiftReduction 👍 👍 22.1 ms 37.9 MB
131_quotIndReduction 👍 👍 22.0 ms 37.8 MB
132_dup_defs ✋ ✋ 21.9 ms 39.7 MB
133_dup_ind_def ✋ ✋ 22.0 ms 37.6 MB
134_dup_ctor_def ✋ ✋ 22.0 ms 37.5 MB
135_dup_rec_def ✋ ✋ 22.0 ms 37.6 MB
136_misnamed_rec_user ✋ ✋ 22.0 ms 39.7 MB
137_dup_rec_def2 ✋ ✋ 22.0 ms 35.8 MB
138_dup_ctor_rec ✋ ✋ 22.0 ms 37.7 MB
139_DupConCon ✋ ✋ 0.691 ms 10.0 MB
140_falseFromUnsafe ✋ 🚫 0.685 ms 11.7 MB
141_falseFromPartial ✋ 🚫 0.685 ms 11.5 MB