Repository navigation
#124: the general performance corpus (PC-01, PC-02, L4.6 of #106) - #289
Conversation
examples/performance-corpus is the one registered object over which every acceptance criterion about the performance of compiled programs quantifies. Its manifest corpus.toml (lexlean/performance-corpus/1) fixes the closed kinds integer-kernels, byte-parsing, long-folds, maps-and-sets, recursion and compiler, and one row per member: identifier <kind>/<name>, production root, the targets and effects the root declares, and its contract. PC-01 reads the manifest against the production roots of the checked project and refuses an unknown field, an unregistered kind, a root that is not a production root or is declared otherwise, a kind without member and precondition, or with both. PC-02 keeps the corpus general by structure (no source package, no lexicon source outside the project, no address or repository name in any file) and exports every member through lexlean::api::production, kernel-checked, one output per member and target. The compiler kind states its precondition (the compiler as a production root, SPEC.md 17.23) and has no member while it does not hold. New family PC (suite performance-corpus), SPEC.md 28.7, register 445. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…#124) RP-11 reads the count sentence against the register size, now 445 with PC-01 and PC-02. NS-01 requires every module under spec/src to be an entrypoint; src/IdsPC.lex.tex was missing from the list. The lock is regenerated because it pins the project configuration digest. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Pushed e0ba1cc. It answers both aarch64 failures: |
|
Maintainer: read, and in the Generated by Claude Code |
CHANGELOG.md and VERIFICATION.md carry both sides, the line first. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…NGELOG bullet (#124) PC is a new family, so PC-01 and PC-02 keep their numbers; the line added AU-14 and RP-17 in their own families. SPEC.md regenerated by cargo xtask validate-model --write. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Merge-line round after #286, #290 and #288 landed. The head is f8a8279 and contains
Local, at f8a8279: CI on f8a8279 is running (honesty, plan, repro pending at this writing). Nothing is marked or merged; this waits for the maintainer's review. |
|
Merged into |
README takes the line and counts 450 registered IDs (PC-01, PC-02 landed); the PD, RB and SP rows end at PD-09, RB-20 and SP-29. SPEC.md and spec/lexlean.lock take the line and are regenerated in the next commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rated records after merging #289 The language-1.2 compiler-semantics ID of this branch (50c7b59d) differs from the line's, so spec/lexlean.lock, examples/performance-corpus/lexlean.lock and expected/, the golden, fixtures, calculus and production export are rewritten by their writers; verify-examples --write ran without the Atlas. SPEC.md is the projection of spec/src. The Atlas records are not regenerated. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…e-bounds CHANGELOG and VERIFICATION keep both sides, the line first. README takes the line, counts 448 registered IDs (RP-17, PC-01 and PC-02 landed) and ends the PF row at PF-24. SPEC.md and spec/lexlean.lock take the line and are regenerated in the next commit. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…rated records after merging #289 The language-1.2 compiler-semantics ID of this branch (9fdf4d30) differs from the line's, so spec/lexlean.lock, examples/performance-corpus/lexlean.lock and expected/, the golden, fixtures, calculus and production export are rewritten by their writers; verify-examples --write ran without the Atlas. SPEC.md is the projection of spec/src. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ail-call The line took PC-01 and PC-02 (register 447); RB-21 keeps its number, the register is 448. README and SPEC.md state 448, the CHANGELOG bullet ends "Register 448". CHANGELOG.md and VERIFICATION.md merged with both sides, the line's first. The spec lock keeps this change's compiler-semantics ID (138ffb62...) with the line's project config hash (it now lists IdsPC). The performance corpus is a language-1.2 project, so its lock, build manifest and oracle files regenerate under the moved compiler-semantics ID; the calculus records, the verification records and the golden oracles are rewritten for it. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…otheses # Conflicts: # README.md # SPEC.md # VERIFICATION.md # spec/lexlean.lock
Plan item L4.6 of #106; closes nothing on its own, #124 stays open for the per-issue wording the owner applies.
Design
What the corpus is. One registered object: the language-1.2 project
examples/performance-corpus(module prefixCorpus) with the manifestcorpus.toml(lexlean/performance-corpus/1). A criterion quantifies over it by namingperformance-corpus, a kind, or a member by its identifier<kind>/<name>, never a program outside it.Members. The manifest fixes the closed kinds
integer-kernels,byte-parsing,long-folds,maps-and-sets,recursion,compiler, and one[[member]]row per member: identifier, kind, production root, the targets and effects the root declares, and a one-sentence contract (the function over the inputs it admits). Every member is exactly one production root of the project; every root is the root of at most one member.The compiler kind. It is a registered gap, not a stub: the row states its precondition (the compiler is itself a production root, §17.23, L2.1/#27) and has no member while that precondition does not hold. The check enforces the pair "precondition ⇔ no member", and the set of kinds with a precondition is fixed to
compilerby the register, so populating it is a register-visible change.Mechanical membership (
PC-01). The manifest is read against the production roots of the checked project (never against its own text): unknown field, unregistered kind, a root that is not a production root or is declared with other targets or effects, a kind without precondition and without member, or with both, each fails naming the defect.General, by structure (
PC-02, C1). A list of consumer names would itself name a consumer, so "no member is consumer-specific" is a structural rule: no[[source_package]], no lexicon source outside the project (builtin or a path inside it), and no file of the corpus holding a network address or naming a repository. Then every member exports throughlexlean::api::productionin every declared target with statuskernel-checked, one output per member and target, and the bundle replaysbindings-verified.Where it is stated. SPEC.md §28.7 (new), register rows
PC-01/PC-02(new familyPC, suiteperformance-corpus), featurefeatures/suites/performance-corpus.feature, casescrates/conformance/src/cases/performance_corpus.rs. The new family avoids a numbering race with the sibling v0.5 PRs; nothing here needs renumbering on rebase.Members (one per kind, each a real production root that exports)
integer-kernels/requantizeCorpus.IntKernels.requantizebyte-parsing/wordCorpus.ByteParse.wordlong-folds/momentsCorpus.LongFolds.momentsmaps-and-sets/tallyCorpus.MapsSets.tallyrecursion/tree_statsCorpus.Recursion.treeStatsrecursion/bisectCorpus.Recursion.bisectcompilerrequantizeis the general form of the fold-laws kernel (offset, multiplier, divisor, bounds as parameters, no literal from any consumer).worddecodes four bytes big-endian throughindex/to_nat, so its lowered program has no decimal text (the residual afflom recorded on #114).bisectis well-founded recursion with evidence whose self call is a tail call;treeStatsis structural recursion that is not.Register
PC-01the corpus definition and its mechanical membership check.PC-02no consumer-specific member, every member exports.Register 445 (
validate-model), §31 bijective (validate-spec-links).Evidence
Run on WSL Ubuntu, Linux x86-64, with the pinned Lean 4.32.1 and Rust 1.97.1 (details in the VERIFICATION.md record "The performance corpus"):
cargo xtask validate-model: 445 ids, meta-gate and audits clean;validate-spec-links: 445 rows bijective.cargo test -p repo-conformance --test bdd(meta-gate),cargo clippy -p repo-conformance --all-targets --all-features -D warnings,cargo fmt --check,cargo xtask check-test-inventory: pass.conformance_pc_01: pass;conformance_pc_02: pass, exporting the 6 members as 8 outputs, eachkernel-checked, bundle replayedbindings-verified.lexlean verifyon the corpus: 5 modules verified;cargo xtask verify-examples --write: 138 normalized records forperformance-corpus(attestation f92c50059ffb4f27a91ee7d43d5ca29d4ecd7c7d0e7cff63c1984b54ac344441), compiler/stdlib/bootstrap records unchanged;cargo xtask check-golden --write: oracles for the new example only, no other example changed.compilerkind, a source package) each fail the case naming the defect; recorded in VERIFICATION.md.Not verified here
just vvwas not run on this host; see the list above for the gates that were.openrow (C5).🤖 Generated with Claude Code