Skip to content

feat: replace the C++ kernel with InLean, a verified Lean port (experiment) - #16353

Draft
nomeata wants to merge 3 commits into
joachim/inlean-addfrom
joachim/inlean-kernel
Draft

nomeata wants to merge 3 commits into
joachim/inlean-addfrom
joachim/inlean-kernel

Conversation

@nomeata

@nomeata nomeata commented Nov 9, 2026 •

Copy link
Copy Markdown
Collaborator

This PR replaces the kernel's C++ type checker with InLean, a Lean port of the con-leche checker that works directly on Lean.Expr and Lean.Kernel.Environment and that con-leche proves sound. It is based on the companion PR from branch joachim/inlean-add, which adds InLean (src/Lean/Kernel/InLean/) to the stdlib without using it, together with the Lean bodies of Expr.mkData, Expr.mkAppData and Level.mkData and a cherry-pick of #16146; the split lets the benchmarks show the cost of compiling InLean separately from the cost of switching the kernel. This PR's own diff is the switch: src/kernel/{type_checker,inductive,quot}.cpp and the C++ helpers only they used are deleted, and the new module Lean.Kernel.InLean.Core provides lean_add_decl, lean_elab_add_decl (and their _without_checking variants) and lean_kernel_{is_def_eq,whnf,check} as @[export] functions; Lean imports it instead of Lean.Kernel.InLean.AddDecl. Lean.Replay replays a literal's support declarations (Nat, String and their constructors) before it, as InLean requires them to be present. The rest of src/Lean/Kernel/InLean/ is the checker. It is generated from con-leche's InLean/ by a script that only adds the copyright header and prelude, renames the namespace and drops InLean's copy of Init.Util's withIsExclusive (con-leche's toolchain, v4.35.0, lacks it). The core (whnf, inference, definitional equality) follows con-leche's cached checker function by function. Inductive declarations go through an unverified generator (IndGen, the generating half of inductive.cpp); nothing it produces is added unless con-leche's verified inductive check accepts it. It is an experiment, opened for discussion and to run CI.

What is proved (in con-leche, InLeanProof/AddDeclProof.lean). InLeanProof.addDeclSound: let a kernel environment be related to a con-leche environment that has a model of Lean's type theory, and let InLean accept a safe, non-axiom declaration into it. Then an extension of that con-leche environment, still with a model, is related to the new kernel environment. The relation EnvRel says that InLean finds a constant at a name exactly where con-leche's environment does, with related entries and projection tables, and that every projection body InLean builds is in range. Proofs ignore unsafe and partial constants (InLean hides them from safe checks), and the relation allows sorryAx on Lean's side. The theorem holds for every setting of the resource limits below. A corollary, InLeanProof.no_false, says that starting from an environment with a model, InLean never adds a safe constant of type False. The proof is a simulation of con-leche's cached checker, whose soundness con-leche proves against its set-theoretic model. It uses the axioms propext, Classical.choice and Quot.sound, plus three facts about Expr.mkData, Expr.mkAppData and Level.mkData. Con-leche states these three as axioms; with the companion PR they are theorems about the new Lean bodies (tests/elab/expr_mkData_bodies.lean; Expr.mkData takes a 32-bit hash here, a 64-bit one in con-leche's v4.35.0). The proof stops short of the following, which remain trusted:

  • the C implementations of these three functions compute their Lean bodies (the test compares them on sample and boundary inputs);
  • Kernel.Environment.find? and add behave as maps;
  • the glue in Core.lean, whose unsafeBaseIO reads the heartbeat counter and the cancellation token and counts unfoldings;
  • Init.Util's withIsExclusive, which reads a reference count only to decide what to memoize;
  • the compiler and runtime.

The theorem is stated for con-leche's axiom policy. The kernel here runs under the official one (coreAxioms) and takes the prelude's Nat operations as given (uncertifiedNatOps).

The kernel is slower than the C++ one. Measured on 2026-11-08, on the v4.35.0 base and before the last round of changes, a stage2 build cost 15 % more instructions. In elab_bench, big_struct_dep1 cost 4.0 times the instructions, big_match 2.1 times, mut_rec_wf 1.7 times, big_beq and big_beq_rec 1.5 times, and big_struct 1.4 times. Its allocations count against the elaborator's maxHeartbeats. Measured on 2026-11-09 at this head: every elab_bench file passes at bench size (TEST_BENCH=1), and the #mutual_block command of deriving_mutual_block takes 182.2 M heartbeats (the limit is 200 M; 268.5 M before the recursor telescopes were closed in one pass).

Test changes. With them, all tests pass locally except elab/async_systems_info, which fails in our sandbox on an unmodified build too.

  • Deleted: elab_fail/kernelQuotNameCollision: InLean rejects a declaration at a reserved name unless it matches its pin. The axiom the test declares before init_quot is therefore rejected up front, and the collision under test cannot arise. Note that the elaborator keeps the rejected axiom, and init_quot then panics in AsyncConsts.add ("duplicate normalized declaration name"). The C++ kernel could hit this too; no test covers it now.

  • Semantics changes, expectations updated:

    • elab/inductive_rec_proj: projections of an indexed structure-like type are declined. Meta issue: Lean Kernel Logic renovation #14977 keeps projections only for non-indexed types.
    • elab/10475: Kernel.check returns the type with lets substituted. The issue is about the result being closed, which still holds; the expectation now reads True/Prop.
    • elab/grind_nestedDecidable_kernel_issue: the control case, which replaces Grind.nestedDecidable by a definition with a regular hint, no longer times out. The C++ kernel spends its heartbeats comparing the Decidable.reflects_decide proofs' types; InLean does not reduce these proofs.
  • Rewritten to avoid an incidental clash: server_interactive/completion7 and completionEOF declared their own And in a prelude file, where InLean expects the pinned And. It is renamed Duo (same length, so the tested positions stay).

  • Error text only, expectations updated. The verdicts are the C++ kernel's; the messages are (InLean) …, worded like the C++ ones where the check is the same:

    • elab: 10577, bvarcrash, impossibleTactic, invalidProjection, issue10424, issue12746, issue9018, issue_14576, issue_14576_min, issue_14576_nonuniform, kernelErrorFollowup, kernelImaxProp, kernelMutualDupName, kernelNestedAuxName, kernelProjIdx, magical, mutualLevelParams, nat_size_limit, pow_exploit, recconstructorcrash, reprove, skipKernelTC, thmIsProp;
    • elab_fail: 1781, 2125, partialIssue, sanitychecks;
    • pkg: leanchecker (AddFalse, ReplaceAxiom), module (PartialImported).

    elab/12520_1 matches the rejection's exception: it now also accepts InLean's .other message for the type mismatch.

    issue14484 gains a #guard_msgs, because the C++ message contained a synthetic sorry and was filtered out, while InLean's is shown.

  • Added: elab/inleanQuotTwice checks that a second quotient declaration is a no-op, as in the C++ kernel (Lean.Replay sends one for each quotient constant).

  • In the companion PR: elab/expr_mkData_bodies checks the new Lean bodies against the C implementations, elab/csimpCore lists InLean's @[csimp] lemmas, and perf: hash all bits of large Nat literals in Expr #16146 adds elab/issue15686.

The kernel keeps these behaviours: the limits maxRecDepth (16 times, on the checker's nesting depth), maxHeartbeats (allocations since the kernel was entered, where the C++ kernel counted its own steps), the cancellation token, LEAN_NAT_MAX_SIZE (with #14849's evaluation of Nat.pow and Nat.shiftLeft at any 32-bit second argument) and the diagnostics' unfold counters; and the C++ messages for an unsafe or partial constant used in a safe declaration. Two binder telescopes are compared as is_def_eq_binding does, each domain and the innermost bodies instantiated once. Theorems are never unfolded, as #14977 plans, and proof irrelevance is tried before head normalisation, as the C++ kernel does since #15103.

🤖 Generated with Claude Code

@nomeata

nomeata commented Nov 9, 2026

Copy link
Copy Markdown
Collaborator Author

!bench

@leanprover-radar

leanprover-radar commented Nov 9, 2026 •

Copy link
Copy Markdown

Benchmark results for a8de4cf against da4295a are in. There are significant results. @nomeata

  • 🟥 build exited with code 1
  • 🟥 other exited with code 1

No significant changes detected.

@github-actions github-actions Bot added the toolchain-available A toolchain is available for this PR, at leanprover/lean4-pr-releases:pr-release-NNNN label Nov 9, 2026
@nomeata

nomeata commented Nov 9, 2026

Copy link
Copy Markdown
Collaborator Author

!bench

@leanprover-radar

leanprover-radar commented Nov 9, 2026 •

Copy link
Copy Markdown

Benchmark results for f1b97ea against da4295a are in. There are significant results. @nomeata

  • 🟥 build//instructions: +711.4G (+7.50%)
  • 🟥 other exited with code 1

Large changes (5✅, 153🟥)

  • 🟥 build//wall-clock: +9s (+7.17%)
  • 🟥 build/module/Init.Data.Array.Extract//instructions: +14.3G (+52.15%)
  • 🟥 build/module/Init.Data.Array.Lemmas//instructions: +6.7G (+16.08%)
  • 🟥 build/module/Init.Data.BitVec.Bitblast//instructions: +15.0G (+39.10%)
  • 🟥 build/module/Init.Data.BitVec.Lemmas//instructions: +35.1G (+38.21%)
  • 🟥 build/module/Init.Data.Int.DivMod.Lemmas//instructions: +8.9G (+30.40%)
  • 🟥 build/module/Init.Data.Nat.Lemmas//instructions: +5.8G (+30.65%)
  • 🟥 build/module/Init.Data.Range.Polymorphic.IntLemmas//instructions: +5.3G (+25.38%)
  • 🟥 build/module/Init.Data.Range.Polymorphic.NatLemmas//instructions: +5.2G (+19.58%)
  • 🟥 build/module/Init.Data.String.Lemmas.Pattern.String.ForwardSearcher//instructions: +5.2G (+41.69%)
  • 🟥 build/module/Init.Data.Vector.Extract//instructions: +9.7G (+49.89%)
  • 🟥 build/module/Init.Grind.Ring.Kronecker//instructions: +8.8G (+20.70%)
  • 🟥 build/module/Lean.EnvExtension//instructions: +5.7G (+55.34%)
  • 🟥 build/module/Std.Data.DTreeMap.Internal.Balancing//instructions: +13.7G (+28.94%)
  • 🟥 build/module/Std.Data.DTreeMap.Internal.Model//instructions: +6.6G (+13.68%)
  • 🟥 build/module/Std.Data.DTreeMap.Internal.Operations//instructions: +5.9G (+19.15%)
  • 🟥 build/profile/blocked (unaccounted)//wall-clock: +27s (+27.82%)
  • 🟥 build/profile/type checking//wall-clock: +1m 11s (+78.23%)
  • 🟥 build/stat/imported bytes//bytes: +2GiB (+1.63%)
  • 🟥 build/stat/imported consts//amount: +1.6M (+1.78%)
  • and 137 more
  • and 1 hidden

Medium changes (3✅, 137🟥)

  • 🟥 build//task-clock: +1m 23s (+4.81%)
  • 🟥 build/lakeprof/longest build path//instructions: +118.3G (+9.89%)
  • 🟥 build/lakeprof/longest rebuild path//instructions: +45.0G (+8.65%)
  • 🟥 build/module/Init.Data.Array.BinSearch//instructions: +2.5G (+54.34%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Array.Erase//instructions: +1.0G (+18.38%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Array.QSort.Basic//instructions: +2.0G (+38.55%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.ByteArray.Lemmas//instructions: +1.3G (+29.51%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Char.Ordinal//instructions: +1.0G (+27.89%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Dyadic.Basic//instructions: +2.4G (+28.81%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Fin.Lemmas//instructions: +1.9G (+23.62%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Int.Bitwise.Lemmas//instructions: +1.4G (+41.36%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Int.LemmasAux//instructions: +4.4G (+58.79%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Int.Linear//instructions: +1.8G (+9.05%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Iterators.Lemmas.Combinators.FilterMap//instructions: +1.1G (+8.26%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap//instructions: +2.2G (+8.80%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Lemmas//instructions: +2.4G (+7.93%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.MapIdx//instructions: +1.6G (+21.69%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Nat.Basic//instructions: +1.4G (+28.11%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Nat.Count//instructions: +1.2G (+39.12%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Nat.Erase//instructions: +1.1G (+36.40%) (reduced significance based on absolute threshold)
  • and 120 more

Small changes (12✅, 2559🟥)

  • 🟥 build/lakeprof/longest build path//wall-clock: +10s (+8.33%)
  • ✅ build/profile/linting//wall-clock: -1s (-3.19%)
  • ✅ build/profile/simp//wall-clock: -6s (-5.93%)
  • ✅ build/profile/tactic execution//wall-clock: -10s (-7.46%)
  • 🟥 elab/big_do//instructions: +38.1M (+0.25%)
  • 🟥 elab/big_match_nat_split//task-clock: +47ms (+7.13%)
  • 🟥 elab/big_match_nat_split//wall-clock: +46ms (+6.79%)
  • 🟥 elab/big_match_partial//maxrss: +21MiB (+1.19%)
  • 🟥 elab/big_struct//wall-clock: +20ms (+11.66%)
  • ✅ elab/big_struct_dep//maxrss: -29MiB (-5.92%)
  • ✅ elab/big_struct_dep1//maxrss: -21MiB (-5.06%)
  • 🟥 elab/big_struct_dep1//task-clock: +27ms (+7.59%)
  • 🟥 elab/big_struct_dep1//wall-clock: +23ms (+6.94%)
  • 🟥 elab/bv_decide_incremental//maxrss: +32MiB (+1.61%)
  • 🟥 elab/bv_stress_replicate//task-clock: +45ms (+4.25%)
  • 🟥 elab/bv_stress_structures_1//task-clock: +316ms (+29.59%)
  • 🟥 elab/bv_stress_structures_2//maxrss: +41MiB (+6.61%)
  • ✅ elab/cbv_aes//maxrss: -40MiB (-6.32%)
  • 🟥 elab/cbv_decide//maxrss: +33MiB (+1.85%)
  • 🟥 elab/cbv_decide//task-clock: +162ms (+6.94%)
  • and 43 more
  • and 2508 hidden

@nomeata

nomeata commented Nov 10, 2026

Copy link
Copy Markdown
Collaborator Author

!bench

@leanprover-radar

leanprover-radar commented Nov 10, 2026 •

Copy link
Copy Markdown

Benchmark results for c19e9cc against da4295a are in. There are significant results. @nomeata

  • 🟥 build//instructions: +711.9G (+7.50%)

Large changes (5✅, 214🟥)

  • 🟥 build//wall-clock: +9s (+7.54%)
  • 🟥 build/module/Init.Data.Array.Extract//instructions: +14.3G (+52.14%)
  • 🟥 build/module/Init.Data.Array.Lemmas//instructions: +6.7G (+16.10%)
  • 🟥 build/module/Init.Data.BitVec.Bitblast//instructions: +15.0G (+39.09%)
  • 🟥 build/module/Init.Data.BitVec.Lemmas//instructions: +35.1G (+38.21%)
  • 🟥 build/module/Init.Data.Int.DivMod.Lemmas//instructions: +8.9G (+30.40%)
  • 🟥 build/module/Init.Data.Nat.Lemmas//instructions: +5.8G (+30.65%)
  • 🟥 build/module/Init.Data.Range.Polymorphic.IntLemmas//instructions: +5.3G (+25.37%)
  • 🟥 build/module/Init.Data.Range.Polymorphic.NatLemmas//instructions: +5.2G (+19.60%)
  • 🟥 build/module/Init.Data.String.Lemmas.Pattern.String.ForwardSearcher//instructions: +5.3G (+42.78%)
  • 🟥 build/module/Init.Data.Vector.Extract//instructions: +9.7G (+49.88%)
  • 🟥 build/module/Init.Grind.Ring.Kronecker//instructions: +8.8G (+20.69%)
  • 🟥 build/module/Lean.EnvExtension//instructions: +5.7G (+55.30%)
  • 🟥 build/module/Std.Data.DTreeMap.Internal.Balancing//instructions: +13.7G (+28.97%)
  • 🟥 build/module/Std.Data.DTreeMap.Internal.Model//instructions: +6.6G (+13.66%)
  • 🟥 build/module/Std.Data.DTreeMap.Internal.Operations//instructions: +5.9G (+19.11%)
  • 🟥 build/profile/blocked (unaccounted)//wall-clock: +27s (+27.61%)
  • 🟥 build/profile/type checking//wall-clock: +1m 12s (+79.22%)
  • 🟥 build/stat/imported bytes//bytes: +2GiB (+1.63%)
  • 🟥 build/stat/imported consts//amount: +1.6M (+1.78%)
  • and 198 more
  • and 1 hidden

Medium changes (3✅, 149🟥)

  • 🟥 build//task-clock: +1m 22s (+4.79%)
  • 🟥 build/lakeprof/longest build path//instructions: +107.2G (+8.95%)
  • 🟥 build/lakeprof/longest rebuild path//instructions: +44.9G (+8.62%)
  • 🟥 build/module/Init.Data.Array.BinSearch//instructions: +2.5G (+54.20%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Array.Erase//instructions: +1.0G (+18.37%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Array.QSort.Basic//instructions: +2.0G (+38.48%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.ByteArray.Lemmas//instructions: +1.3G (+29.53%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Char.Ordinal//instructions: +1.0G (+27.90%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Dyadic.Basic//instructions: +2.4G (+28.80%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Fin.Lemmas//instructions: +1.9G (+23.61%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Int.Bitwise.Lemmas//instructions: +1.4G (+41.39%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Int.LemmasAux//instructions: +4.4G (+58.76%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Int.Linear//instructions: +1.8G (+9.04%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Iterators.Lemmas.Combinators.FilterMap//instructions: +1.1G (+8.24%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap//instructions: +2.2G (+8.78%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Lemmas//instructions: +2.4G (+7.92%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.MapIdx//instructions: +1.6G (+21.67%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Nat.Basic//instructions: +1.4G (+28.09%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Nat.Count//instructions: +1.2G (+39.18%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Nat.Erase//instructions: +1.1G (+36.38%) (reduced significance based on absolute threshold)
  • and 132 more

Small changes (11✅, 2572🟥)

  • 🟥 build/lakeprof/longest build path//wall-clock: +9s (+7.84%)
  • ✅ build/profile/linting//wall-clock: -1s (-3.20%)
  • ✅ build/profile/simp//wall-clock: -7s (-6.35%)
  • ✅ build/profile/tactic execution//wall-clock: -10s (-7.39%)
  • 🟥 compiled/rbmap_checkpoint2//maxrss: +396kiB (+0.13%)
  • 🟥 compiled/server_startup//instructions: +2.8M (+0.80%)
  • 🟥 elab/big_do//instructions: +37.3M (+0.24%)
  • 🟥 elab/big_match_partial//maxrss: +22MiB (+1.25%)
  • ✅ elab/big_struct_dep//maxrss: -29MiB (-6.08%)
  • ✅ elab/big_struct_dep1//maxrss: -26MiB (-6.04%)
  • 🟥 elab/big_struct_dep1//wall-clock: +22ms (+6.63%)
  • 🟥 elab/bv_decide_incremental//maxrss: +32MiB (+1.59%)
  • 🟥 elab/bv_normalize_cast//wall-clock: +13ms (+11.25%)
  • 🟥 elab/bv_stress_replicate//task-clock: +52ms (+4.92%)
  • 🟥 elab/bv_stress_structures_1//wall-clock: +238ms (+29.32%)
  • 🟥 elab/bv_stress_structures_2//maxrss: +33MiB (+5.36%)
  • ✅ elab/cbv_aes//maxrss: -40MiB (-6.34%)
  • 🟥 elab/cbv_decide//maxrss: +35MiB (+1.98%)
  • 🟥 elab/cbv_decide//task-clock: +168ms (+7.16%)
  • 🟥 elab/cbv_decide//wall-clock: +165ms (+7.00%)
  • and 54 more
  • and 2509 hidden

@nomeata

nomeata commented Nov 10, 2026

Copy link
Copy Markdown
Collaborator Author

!bench

@leanprover-radar

leanprover-radar commented Nov 10, 2026 •

Copy link
Copy Markdown

Benchmark results for cf1c79f against da4295a are in. There are significant results. @nomeata

  • 🟥 build//instructions: +671.7G (+7.08%)

Large changes (5✅, 203🟥)

  • 🟥 build//wall-clock: +9s (+7.08%)
  • 🟥 build/module/Init.Data.Array.Extract//instructions: +13.3G (+48.74%)
  • 🟥 build/module/Init.Data.Array.Lemmas//instructions: +6.2G (+14.96%)
  • 🟥 build/module/Init.Data.BitVec.Bitblast//instructions: +13.8G (+35.93%)
  • 🟥 build/module/Init.Data.BitVec.Lemmas//instructions: +32.3G (+35.16%)
  • 🟥 build/module/Init.Data.Int.DivMod.Lemmas//instructions: +8.2G (+28.10%)
  • 🟥 build/module/Init.Data.Nat.Lemmas//instructions: +5.3G (+28.46%)
  • 🟥 build/module/Init.Data.Vector.Extract//instructions: +9.2G (+47.12%)
  • 🟥 build/module/Init.Grind.Ring.Kronecker//instructions: +8.0G (+18.75%)
  • 🟥 build/module/Lean.EnvExtension//instructions: +5.3G (+50.93%)
  • 🟥 build/module/Std.Data.DTreeMap.Internal.Balancing//instructions: +13.0G (+27.48%)
  • 🟥 build/module/Std.Data.DTreeMap.Internal.Model//instructions: +6.2G (+12.86%)
  • 🟥 build/module/Std.Data.DTreeMap.Internal.Operations//instructions: +5.5G (+17.79%)
  • 🟥 build/profile/blocked (unaccounted)//wall-clock: +24s (+25.38%)
  • 🟥 build/profile/type checking//wall-clock: +1m 7s (+73.48%)
  • 🟥 build/stat/imported bytes//bytes: +2GiB (+1.63%)
  • 🟥 build/stat/imported consts//amount: +1.6M (+1.79%)
  • 🟥 build/stat/imported modules//amount: +34.1k (+1.88%)
  • 🟥 compiled/ilean_roundtrip//instructions: +1.4M (+0.01%)
  • 🟥 compiled/incr_header_load//instructions: +3.1M (+0.87%)
  • and 187 more
  • and 1 hidden

Medium changes (4✅, 141🟥)

  • 🟥 build//task-clock: +1m 24s (+4.89%)
  • 🟥 build/lakeprof/longest build path//instructions: +107.9G (+9.01%)
  • 🟥 build/lakeprof/longest rebuild path//instructions: +41.8G (+8.03%)
  • 🟥 build/module/Init.Data.Array.BinSearch//instructions: +2.3G (+50.75%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Array.QSort.Basic//instructions: +1.9G (+36.07%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.ByteArray.Lemmas//instructions: +1.2G (+26.99%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Dyadic.Basic//instructions: +2.2G (+26.51%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Fin.Lemmas//instructions: +1.8G (+21.71%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Int.Bitwise.Lemmas//instructions: +1.3G (+38.04%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Int.LemmasAux//instructions: +4.1G (+55.24%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Int.Linear//instructions: +1.7G (+8.27%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Iterators.Lemmas.Combinators.FilterMap//instructions: +1.1G (+7.84%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap//instructions: +2.1G (+8.28%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Lemmas//instructions: +2.2G (+7.31%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.MapIdx//instructions: +1.5G (+20.04%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Nat.Basic//instructions: +1.3G (+26.08%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Nat.Count//instructions: +1.1G (+36.32%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Nat.Range//instructions: +2.0G (+32.12%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Nat.Sublist//instructions: +1.5G (+39.99%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Nat.TakeDrop//instructions: +3.0G (+35.03%) (reduced significance based on absolute threshold)
  • and 125 more

Small changes (10✅, 2582🟥)

  • 🟥 build/lakeprof/longest build path//wall-clock: +7s (+5.96%)
  • ✅ build/profile/simp//wall-clock: -6s (-5.27%)
  • ✅ build/profile/tactic execution//wall-clock: -8s (-6.32%)
  • 🟥 compiled/incr_header_load//maxrss: +12MiB (+2.04%)
  • 🟥 compiled/parser//instructions: +1.4M (+0.00%)
  • 🟥 compiled/server_startup//instructions: +2.7M (+0.76%)
  • 🟥 elab/big_deceq_rec//wall-clock: +46ms (+9.66%)
  • 🟥 elab/big_do//instructions: +38.3M (+0.25%)
  • 🟥 elab/big_match_nat_split//task-clock: +46ms (+7.01%)
  • 🟥 elab/big_match_nat_split//wall-clock: +46ms (+6.77%)
  • ✅ elab/big_struct_dep1//maxrss: -22MiB (-5.22%)
  • 🟥 elab/big_struct_dep1//task-clock: +28ms (+7.98%)
  • 🟥 elab/big_struct_dep1//wall-clock: +27ms (+8.11%)
  • 🟥 elab/bv_decide_incremental//maxrss: +27MiB (+1.34%)
  • 🟥 elab/bv_stress_replicate//task-clock: +38ms (+3.57%)
  • 🟥 elab/bv_stress_structures_1//wall-clock: +232ms (+28.56%)
  • 🟥 elab/bv_stress_structures_2//maxrss: +31MiB (+5.01%)
  • ✅ elab/cbv_aes//maxrss: -36MiB (-5.69%)
  • 🟥 elab/cbv_arm_ldst//task-clock: +1s (+23.88%)
  • 🟥 elab/cbv_decide//maxrss: +31MiB (+1.73%)
  • and 57 more
  • and 2515 hidden

@nomeata

nomeata commented Nov 11, 2026

Copy link
Copy Markdown
Collaborator Author

!bench

@leanprover-radar

leanprover-radar commented Nov 11, 2026 •

Copy link
Copy Markdown

Benchmark results for feb42b1 against da4295a are in. There are significant results. @nomeata

  • 🟥 build//instructions: +1.9T (+20.08%)

Large changes (8✅, 189🟥)

  • 🟥 build//maxrss: +287MiB (+28.36%)
  • 🟥 build//task-clock: +3m 15s (+11.31%)
  • 🟥 build//wall-clock: +52s (+40.94%)
  • 🟥 build/lakeprof/longest build path//instructions: +997.8G (+83.34%)
  • 🟥 build/lakeprof/longest build path//wall-clock: +52s (+41.13%)
  • 🟥 build/lakeprof/longest rebuild path//instructions: +1.3T (+241.14%)
  • 🟥 build/lakeprof/longest rebuild path//wall-clock: +1m 18s (+112.88%)
  • 🟥 build/module/Init.Data.Array.Extract//instructions: +10.6G (+38.72%)
  • 🟥 build/module/Init.Data.BitVec.Bitblast//instructions: +10.2G (+26.49%)
  • 🟥 build/module/Init.Data.BitVec.Lemmas//instructions: +23.8G (+25.93%)
  • 🟥 build/module/Init.Data.Int.DivMod.Lemmas//instructions: +6.1G (+20.92%)
  • 🟥 build/module/Init.Data.Vector.Extract//instructions: +7.4G (+38.10%)
  • 🟥 build/module/Init.Grind.Ring.Kronecker//instructions: +5.8G (+13.66%)
  • 🟥 build/module/Std.Data.DTreeMap.Internal.Balancing//instructions: +9.9G (+20.97%)
  • 🟥 build/module/Std.Data.DTreeMap.Internal.Model//instructions: +5.1G (+10.54%)
  • 🟥 build/profile/blocked (unaccounted)//wall-clock: +37s (+38.03%)
  • 🟥 build/profile/type checking//wall-clock: +2m 8s (+139.46%)
  • 🟥 build/stat/imported bytes//bytes: +2GiB (+1.66%)
  • 🟥 build/stat/imported consts//amount: +1.7M (+1.80%)
  • 🟥 build/stat/imported modules//amount: +34.1k (+1.88%)
  • and 176 more
  • and 1 hidden

Medium changes (4✅, 118🟥)

  • 🟥 build/module/Init.Data.Array.BinSearch//instructions: +1.8G (+40.09%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Array.Lemmas//instructions: +4.7G (+11.32%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Array.QSort.Basic//instructions: +1.5G (+28.86%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Dyadic.Basic//instructions: +1.7G (+20.12%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Fin.Lemmas//instructions: +1.3G (+16.39%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Int.LemmasAux//instructions: +3.2G (+43.10%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Int.Linear//instructions: +1.2G (+5.82%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap//instructions: +1.9G (+7.33%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Lemmas//instructions: +1.7G (+5.76%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.MapIdx//instructions: +1.1G (+15.21%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Nat.Range//instructions: +1.5G (+24.11%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Nat.Sublist//instructions: +1.1G (+29.92%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Nat.TakeDrop//instructions: +2.2G (+26.43%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Sort.Impl//instructions: +2.6G (+30.63%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Sort.Lemmas//instructions: +2.2G (+18.44%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.ToArray//instructions: +2.9G (+21.01%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Nat.Bitwise.Basic//instructions: +1.0G (+117.59%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Nat.Bitwise.Lemmas//instructions: +1.5G (+17.66%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Nat.Fold//instructions: +1.7G (+24.89%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Nat.Lemmas//instructions: +4.0G (+21.36%) (reduced significance based on absolute threshold)
  • and 102 more

Small changes (9✅, 2608🟥)

  • 🟥 build/profile/.olean serialization//wall-clock: +3s (+4.18%)
  • 🟥 build/profile/grind ring//wall-clock: +4ms (+170.13%)
  • 🟥 compiled/parser//instructions: +1.4M (+0.00%)
  • 🟥 compiled/server_startup//instructions: +2.6M (+0.75%)
  • 🟥 compiled/workspaceSymbolsNewRanges//maxrss: +4MiB (+5.98%)
  • 🟥 elab/big_deceq//task-clock: +25ms (+6.68%)
  • 🟥 elab/big_deceq//wall-clock: +24ms (+5.93%)
  • 🟥 elab/big_deceq_rec//task-clock: +35ms (+7.87%)
  • 🟥 elab/big_deceq_rec//wall-clock: +37ms (+7.87%)
  • 🟥 elab/big_do//instructions: +35.4M (+0.23%)
  • 🟥 elab/big_match//instructions: +28.6M (+0.37%)
  • 🟥 elab/big_match_nat_split//task-clock: +31ms (+4.77%)
  • 🟥 elab/big_match_nat_split//wall-clock: +30ms (+4.41%)
  • 🟥 elab/big_match_partial//maxrss: +26MiB (+1.47%)
  • 🟥 elab/big_omega_MT//maxrss: +24MiB (+4.59%)
  • ✅ elab/big_struct_dep1//maxrss: -20MiB (-4.68%)
  • 🟥 elab/big_struct_dep1//task-clock: +26ms (+7.50%)
  • 🟥 elab/big_struct_dep1//wall-clock: +23ms (+6.88%)
  • 🟥 elab/bv_decide_incremental//maxrss: +39MiB (+1.99%)
  • 🟥 elab/bv_stress_replicate//task-clock: +45ms (+4.24%)
  • and 58 more
  • and 2539 hidden

@nomeata

nomeata commented Nov 11, 2026

Copy link
Copy Markdown
Collaborator Author

!bench

@leanprover-radar

leanprover-radar commented Nov 11, 2026 •

Copy link
Copy Markdown

Benchmark results for 522ac85 against da4295a are in. There are significant results. @nomeata

  • 🟥 build//instructions: +1.4T (+14.33%)

Large changes (5✅, 170🟥)

  • 🟥 build//task-clock: +2m 43s (+9.46%)
  • 🟥 build//wall-clock: +17s (+13.33%)
  • 🟥 build/lakeprof/longest build path//instructions: +468.6G (+39.14%)
  • 🟥 build/lakeprof/longest rebuild path//instructions: +731.0G (+140.38%)
  • 🟥 build/lakeprof/longest rebuild path//wall-clock: +42s (+61.15%)
  • 🟥 build/module/Init.Data.Array.Extract//instructions: +6.8G (+24.74%)
  • 🟥 build/module/Init.Data.BitVec.Bitblast//instructions: +9.1G (+23.63%)
  • 🟥 build/module/Init.Data.BitVec.Lemmas//instructions: +21.4G (+23.27%)
  • 🟥 build/module/Init.Data.Int.DivMod.Lemmas//instructions: +5.4G (+18.43%)
  • 🟥 build/module/Init.Grind.Ring.Kronecker//instructions: +5.3G (+12.41%)
  • 🟥 build/module/Std.Data.DTreeMap.Internal.Balancing//instructions: +8.8G (+18.57%)
  • 🟥 build/profile/blocked (unaccounted)//wall-clock: +35s (+36.03%)
  • 🟥 build/profile/simp//wall-clock: +18s (+16.05%)
  • 🟥 build/profile/type checking//wall-clock: +1m 28s (+96.12%)
  • 🟥 build/stat/imported bytes//bytes: +2GiB (+1.66%)
  • 🟥 build/stat/imported consts//amount: +1.7M (+1.80%)
  • 🟥 build/stat/imported modules//amount: +34.1k (+1.88%)
  • 🟥 compiled/ilean_roundtrip//instructions: +1.4M (+0.01%)
  • 🟥 compiled/incr_header_load//instructions: +3.1M (+0.87%)
  • 🟥 compiled/incr_header_save//maxrss: +37MiB (+1.97%)
  • and 154 more
  • and 1 hidden

Medium changes (6✅, 123🟥)

  • 🟥 build/lakeprof/longest build path//wall-clock: +16s (+12.97%)
  • 🟥 build/module/Init.Data.Array.BinSearch//instructions: +1.7G (+36.17%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Array.Lemmas//instructions: +4.3G (+10.47%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Array.QSort.Basic//instructions: +1.4G (+26.39%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Dyadic.Basic//instructions: +1.3G (+15.71%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Fin.Lemmas//instructions: +1.2G (+14.81%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Int.LemmasAux//instructions: +2.4G (+31.87%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Int.Linear//instructions: +1.3G (+6.17%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap//instructions: +1.9G (+7.30%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Lemmas//instructions: +1.8G (+6.05%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.MapIdx//instructions: +1.0G (+14.18%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Nat.Range//instructions: +1.3G (+20.97%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Nat.TakeDrop//instructions: +1.9G (+22.70%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Sort.Impl//instructions: +2.3G (+27.63%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Sort.Lemmas//instructions: +2.0G (+16.77%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.ToArray//instructions: +2.6G (+18.69%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Nat.Bitwise.Basic//instructions: +1.0G (+117.50%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Nat.Bitwise.Lemmas//instructions: +1.4G (+16.28%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Nat.Fold//instructions: +1.6G (+23.36%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Nat.Lemmas//instructions: +3.5G (+18.39%) (reduced significance based on absolute threshold)
  • and 109 more

Small changes (8✅, 2620🟥)

  • 🟥 build//maxrss: +88MiB (+8.72%)
  • 🟥 build/profile/.olean serialization//wall-clock: +2s (+4.01%)
  • 🟥 build/profile/compilation (IR)//wall-clock: +294ms (+5.04%)
  • 🟥 build/profile/compilation (LCNF impure)//wall-clock: +1s (+4.44%)
  • 🟥 build/profile/compilation (LCNF mono)//wall-clock: +2s (+4.44%)
  • 🟥 build/profile/import//wall-clock: +6s (+5.99%)
  • 🟥 build/profile/parsing//wall-clock: +929ms (+3.62%)
  • 🟥 compiled/incr_header_load//maxrss: +12MiB (+1.95%)
  • 🟥 compiled/server_startup//instructions: +2.8M (+0.79%)
  • 🟥 elab/big_deceq_rec//maxrss: +19MiB (+1.13%)
  • 🟥 elab/big_deceq_rec//wall-clock: +39ms (+8.16%)
  • 🟥 elab/big_match_nat//maxrss: +14MiB (+0.83%)
  • 🟥 elab/big_match_nat_split//maxrss: +14MiB (+0.78%)
  • 🟥 elab/big_match_nat_split//task-clock: +45ms (+6.85%)
  • 🟥 elab/big_match_nat_split//wall-clock: +47ms (+6.80%)
  • 🟥 elab/big_omega_MT//maxrss: +21MiB (+4.03%)
  • ✅ elab/big_struct_dep1//maxrss: -23MiB (-5.46%)
  • 🟥 elab/big_struct_dep1//wall-clock: +22ms (+6.59%)
  • 🟥 elab/bitvec_zero_counts//maxrss: +16MiB (+1.75%)
  • 🟥 elab/bv_stress_replicate//task-clock: +49ms (+4.57%)
  • and 68 more
  • and 2540 hidden

Claude and others added 3 commits November 11, 2026 23:56
`Lean.Replay` (used by `leanchecker`, also `--from-export`) replays constants in dependency order, but a literal records no dependency on `Nat`/`String` and their constructors, which the InLean kernel requires to be present before it types a literal. Replay them first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This PR makes InLean, the Lean port of con-leche's verified checker added in `src/Lean/Kernel/InLean/`, the kernel, and deletes the C++ type checker, inductive-type and quotient modules (`src/kernel/{type_checker,inductive,quot}.cpp`).

The kernel entry points `lean_add_decl`, `lean_add_decl_without_checking`, `lean_elab_add_decl`, `lean_elab_add_decl_without_checking` and `lean_kernel_{is_def_eq,whnf,check}` are `@[export]` functions in the new module `Lean.Kernel.InLean.Core`, which `Lean` now imports; the `@&` borrow annotations of their `@[extern]` declarations in `Lean.Environment` are dropped, as an `@[export]` function takes owned arguments. `Kernel.Environment.add`, `markQuotInit` and `Environment.updateBaseAfterKernelAdd` stay private; `Core` reaches them with `import all Lean.Environment`. The C++ helpers only the old checker used are deleted; `mk_rec_name` moves to `library/util`.

`addDecl` honours the C++ kernel's limits: the nesting depth is bounded by 16 times `maxRecDepth`, numerals by `LEAN_NAT_MAX_SIZE`, and the checker polls the cancellation token and `maxHeartbeats`. Kernel errors are `Kernel.Exception.other "(InLean) …"`, with the C++ kernel's wording where the check is the same. In core the axiom policy is the official kernel's (any axiom, `sorryAx` usable); a STOPGAP flag (`uncertifiedNatOps`) lets the literal fast path fire on pinned Nat operations whose certificates cannot be checked in Init's source order or that a `module` importer sees as axioms. A second quotient declaration is a no-op, as in the C++ kernel.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The kernel reports its errors as `Kernel.Exception.other "(InLean) …"`, so the tests that compare kernel error text expect that text; where InLean's message differs from the C++ kernel's (e.g. a type mismatch in `12520_1`, projections of indexed structure-like types, which the kernel declines in `inductive_rec_proj`), the tests expect InLean's.

* `issue14484`: the error of `assumptionFreeFalse` is now shown: the C++ kernel's message mentioned the synthetic `sorry` in the axiom's type and was filtered, InLean's text does not.
* `10475`: `Kernel.check` substitutes the `let` values in the inferred type, so the types are `True` and `Prop`; the second check succeeds as the issue requires.
* `grind_nestedDecidable_kernel_issue` also checks its regular-wrapper control.
* `completion7` and `completionEOF` declare their own `And` in a `prelude` file; InLean reserves the names of the basis blocks it pins, so they use `Duo` (the same length, so the positions stay).
* `kernelQuotNameCollision` is deleted: it declares an axiom at `Quot.lift` before `init_quot` and expects the quotient declaration to be rejected; InLean reserves the quotient's names and rejects the axiom itself, so that situation cannot arise.
* `inleanQuotTwice` (new) checks that a second quotient declaration is a no-op.
* The `leanchecker` and `module` package tests expect the new messages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@nomeata
nomeata force-pushed the joachim/inlean-kernel branch from 522ac85 to 409fb81 Compare November 12, 2026 00:12
@nomeata
nomeata changed the base branch from master to joachim/inlean-add November 12, 2026 00:12
@nomeata

nomeata commented Nov 12, 2026

Copy link
Copy Markdown
Collaborator Author

!bench

@leanprover-radar

leanprover-radar commented Nov 12, 2026 •

Copy link
Copy Markdown

Benchmark results for 409fb81 against 1c92992 are in. There are significant results. @nomeata

  • 🟥 build//instructions: +653.7G (+6.41%)

Large changes (7✅, 148🟥)

  • 🟥 build//wall-clock: +15s (+12.00%)
  • 🟥 build/lakeprof/longest build path//instructions: +468.5G (+39.12%)
  • 🟥 build/lakeprof/longest rebuild path//instructions: +380.0G (+43.66%)
  • 🟥 build/lakeprof/longest rebuild path//wall-clock: +18s (+19.10%)
  • 🟥 build/module/Init.Data.Array.Extract//instructions: +6.8G (+24.77%)
  • 🟥 build/module/Init.Data.BitVec.Bitblast//instructions: +9.1G (+23.64%)
  • 🟥 build/module/Init.Data.BitVec.Lemmas//instructions: +21.4G (+23.25%)
  • 🟥 build/module/Init.Data.Int.DivMod.Lemmas//instructions: +5.4G (+18.39%)
  • 🟥 build/module/Init.Grind.Ring.Kronecker//instructions: +5.3G (+12.47%)
  • 🟥 build/module/Std.Data.DTreeMap.Internal.Balancing//instructions: +8.8G (+18.53%)
  • 🟥 build/profile/blocked (unaccounted)//wall-clock: +28s (+26.86%)
  • 🟥 build/profile/type checking//wall-clock: +1m 8s (+61.35%)
  • 🟥 elab/big_beq//instructions: +2.3G (+37.80%)
  • 🟥 elab/big_beq//task-clock: +160ms (+26.67%)
  • 🟥 elab/big_beq//wall-clock: +161ms (+25.71%)
  • 🟥 elab/big_beq_rec//instructions: +4.3G (+39.74%)
  • 🟥 elab/big_beq_rec//task-clock: +306ms (+35.58%)
  • 🟥 elab/big_beq_rec//wall-clock: +307ms (+34.58%)
  • 🟥 elab/big_deceq//instructions: +270.8M (+9.30%)
  • 🟥 elab/big_deceq_rec//instructions: +512.9M (+13.31%)
  • and 134 more
  • and 1 hidden

Medium changes (3✅, 91🟥)

  • 🟥 build/lakeprof/longest build path//wall-clock: +17s (+14.02%)
  • 🟥 build/module/Init.Data.Array.BinSearch//instructions: +1.7G (+36.14%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Array.Lemmas//instructions: +4.3G (+10.48%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Array.QSort.Basic//instructions: +1.4G (+26.38%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Dyadic.Basic//instructions: +1.3G (+15.23%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Fin.Lemmas//instructions: +1.2G (+14.82%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Int.LemmasAux//instructions: +2.4G (+31.82%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Int.Linear//instructions: +1.3G (+6.14%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap//instructions: +1.9G (+7.29%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Lemmas//instructions: +1.8G (+6.08%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.MapIdx//instructions: +1.0G (+14.17%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Nat.Range//instructions: +1.3G (+20.95%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Nat.TakeDrop//instructions: +1.9G (+22.65%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Sort.Impl//instructions: +2.3G (+27.55%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.Sort.Lemmas//instructions: +2.0G (+16.74%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.List.ToArray//instructions: +2.6G (+18.71%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Nat.Bitwise.Basic//instructions: +1.0G (+116.76%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Nat.Bitwise.Lemmas//instructions: +1.4G (+16.32%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Nat.Fold//instructions: +1.6G (+23.31%) (reduced significance based on absolute threshold)
  • 🟥 build/module/Init.Data.Nat.Lemmas//instructions: +3.5G (+18.40%) (reduced significance based on absolute threshold)
  • and 74 more

Small changes (25✅, 2218🟥)

  • 🟥 build//maxrss: +96MiB (+9.45%)
  • 🟥 build//task-clock: +54s (+2.97%)
  • ✅ build/profile/.olean serialization//wall-clock: -3s (-4.85%)
  • ✅ build/profile/tactic execution//wall-clock: -8s (-6.04%)
  • ✅ compiled/bitvec_zero_counts//task-clock: -13ms (-6.53%)
  • ✅ compiled/bitvec_zero_counts//wall-clock: -14ms (-6.44%)
  • ✅ compiled/ilean_roundtrip//instructions: -38.9k (-0.00%)
  • ✅ compiled/liasolver//instructions: -36.6k (-0.00%)
  • ✅ compiled/phashmap//instructions: -34.8k (-0.00%)
  • ✅ compiled/rbmap_library//instructions: -43.0k (-0.00%)
  • ✅ compiled/workspaceSymbolsNewRanges//instructions: -36.6k (-0.01%)
  • 🟥 elab/big_beq_rec//maxrss: +12MiB (+0.69%)
  • 🟥 elab/big_deceq//task-clock: +24ms (+6.45%)
  • 🟥 elab/big_deceq//wall-clock: +23ms (+5.85%)
  • 🟥 elab/big_deceq_rec//wall-clock: +37ms (+7.65%)
  • ✅ elab/big_match_nat_split//maxrss: -9MiB (-0.53%)
  • 🟥 elab/big_match_nat_split//task-clock: +44ms (+6.72%)
  • 🟥 elab/big_match_nat_split//wall-clock: +43ms (+6.26%)
  • 🟥 elab/big_omega//maxrss: +21MiB (+4.02%)
  • 🟥 elab/big_omega_MT//maxrss: +23MiB (+4.30%)
  • and 40 more
  • and 2183 hidden

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

toolchain-available A toolchain is available for this PR, at leanprover/lean4-pr-releases:pr-release-NNNN

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants