Repository navigation
feat(stdlib): the first member, bytes and text over Bytes (#92) - #153
Conversation
A `stdlib/` project beside `compiler/` (module prefix `LexLeanStd`) whose `Text` module declares `startsWith`, `endsWith`, `trim`, `lines`, `splitOn`, `joinWith`, and `find` as production roots for `rust-std`, each admitting exactly the effects its closure realizes. `SL-01` (suite `stdlib`, SPEC.md §17.22) checks the eligibility of the seven roots, runs each member's lowered program under the calculus evaluator and its rendered package under the pinned rustc on a seeded corpus against Rust's standard library, detects a planted character class in `trim`, and compares the certified packages the production export publishes with the committed ones. The project passes the example gates beside `compiler/`; `check-production-export` compares its packages. The register has 382 IDs. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The rust-std packages the production export publishes for the seven members of LexLeanStd.Text, compared by check-production-export and SL-01. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ed compiler (#92) Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The register has 388 rows; SL-01 stays the last row, and RT-04 keeps the wording of #156. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The register has 392 rows; SL-01 stays the last row. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#146 brought main to 392 rows with SP-14, the total this branch had reached with SL-01, so the counts merged without a conflict at 392. The register holds 393 rows; every count says so, and SL-01 stays the last row. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… moved the identity Refs #92. Only bootstrap/ is regenerated; stdlib/ belongs to #153. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012skqc8ahSxQGZ9urVg4tt2
|
FYI from the axiom-parser pilot (#160, which vendors
Generated by Claude Code |
|
@humuhumu33, #159 is merged: main is How I will treat the gap, so you do not spend a run on it. #159 changes only CI ( If you push anything to this branch before then, the exception is void and the run on the new head is the one I wait for. Please do not merge main into it for this. (R3: the first commit registers Generated by Claude Code |
CHANGELOG.md and VERIFICATION.md conflicted (both kept). The merge was checked by the maintainer before the push: validate-model 393 ids, validate-spec-links 393, check-test-inventory (five parts), check-golden, and conformance_rp_07, rp_13, rp_14 and sl_01 pass on it; #159 changes no generated artifact, so the run on the previous head (22 of 22 green) is the evidence for the rest. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013QppGKetUURseXowZun9KY
afflom
left a comment
There was a problem hiding this comment.
Approved at 8591c0c84, as a non-author.
What ran. Run 38982809506 on 48e06da1: all 22 checks green (host legs, examples, rest with SL-01, the 14 Atlas jobs, repro, honesty). 8591c0c84 is that head plus one merge commit of main ccd37ec7 (#159) that I made and pushed: CHANGELOG.md and VERIFICATION.md conflicted and both sides are kept. #159 changes only CI, the inventory, the join's toolchain check and the harness, no generated artifact, so the run on 48e06da1 stays the evidence for everything but the merge itself. I checked the merge before pushing: validate-model 393 ids, validate-spec-links 393 bijective, check-test-inventory (five parts, SL-01 in rest), check-golden (stdlib: 7 artifacts equal), and conformance_rp_07, rp_13, rp_14, sl_01 pass (sl_01 in 399 s with the Lean-backed export). Main's push run after the merge is the backstop.
Against #92's stdlib lane.
stdlib/is a language-1.2 project (LexLeanStd.Text) written in the notation; seven roots forrust-std, each admitting exactly the effects its closure realizes.SL-01: each member's lowered program under the calculus evaluator (600 runs) and its rendered package under the pinned rustc (3,000 runs) agree with the Rust oracle on a seeded corpus; a planted character class intrimis detected; under the pinned Lean the production export certifies every member (A, B, E) into packages byte-identical to the committed ones.- Honest scope:
trimistrim_ascii; there are no theorems over the members (Bytesequality by evaluation is #91 stage 2), so the module's behavior is held by the differential, which isbuildevidence and is described as such.check-goldenandcheck-production-exportreadstdlib/beside the examples.
Not blocking. The first commit registers SL-01, writes the case and the module together, so R3's order is not in the history; the gates check existence, not order.
Merging with a merge commit pinned to this head.
Generated by Claude Code
…into issue-30-language-model Both sides appended to the register: model/ids.toml, SPEC.md §31 and the conformance test list keep SL-01 and then LM-01..LM-03 and LM-13, in the order SPEC.md already had. The register count is 397 (main's 393 plus the four LM rows) in README.md, SPEC.md, repository.rs, spec_links.rs and the CHANGELOG entry, which keeps both sides. No language-1.2 version moved. Generated records are regenerated for the combined tree in the next commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ith #159 and #153 stdlib/lexlean.lock moves from main's 7c6ad912... to the merged tree's 7a7834c6... (ID substitution only, as every other lock moved); goldens, calculus packages, CONFORMANCE.md and ERRORS.md, negative fixtures, the production export (stdlib's packages included), and every example's verification records, stdlib's included, are rewritten for the combined tree. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rows (generated records taken from main, to be regenerated)
…3f0c7 into #155) Main moved under this branch with #162 (source packages), #153 (stdlib), #160 (bootstrap) and #165 (PK-05). The merge keeps this branch's side of the four points that matter (the 53 renamed private names of LexLeanText.lex.tex, legacy certificate E rendered with legacy_decoder() and no `import all`, SM-33, the decoder) and takes main's tree for every generated record, which is regenerated here. - register 404 (403 on main + SM-33): README, SPEC §31 total, table.len(), spec_links.rs set by hand; - language-1.2 compiler-semantics ID 91b3cb51... -> 63dd4c08...: every lock that carried the old one is substituted and `lock --check` is current; - regenerated in order: check-golden, check-fixtures, check-calculus, check-production-export, verify-examples (the language-1.2 examples, compiler, stdlib, bootstrap; languages 1.0/1.1 examples are untouched by this branch and were not rewritten), validate-model --write; - local checks passed: validate-model, validate-spec-links, check-test-inventory, check-golden, conformance_{sm_33,lm_02,sp_14,rt_02,rt_04,bs_01,pk_05,rp_07,rp_14, rp_11,sl_01,sp_05,sp_09}. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013QppGKetUURseXowZun9KY
Stdlib lane of #92, member 1 of the order the issue sets: bytes and text over
Bytes. Not the effects boundary (§3), which stays with afflom. SHA-256 is claimed under #126 and stays out.What this adds
stdlib/, a language-1.2 project besidecompiler/(module prefixLexLeanStd), written in the authoring notation and verified by the examples leg exactly ascompiler/is (expected/build,expected/verifycommitted). First moduleText, seven production roots forrust-std:startsWith (subject prefix : Bytes) : Bool<[u8]>::starts_withendsWith (subject suffix : Bytes) : Bool<[u8]>::ends_withtrim (subject : Bytes) : Bytes<[u8]>::trim_asciilines (subject : Bytes) : List Bytesstr::lineson UTF-8 inputsplitOn (subject : Bytes) (delimiter : UInt8) : List Bytes<[u8]>::splitjoinWith (pieces : List Bytes) (separator : Bytes) : Bytes<[Vec<u8>]>::joinfind (subject needle : Bytes) : Option Natstr::findon UTF-8 inputWritten as the spike did (B1–B3): components over
Bytes, character classes byequalonUInt8, noStringscalar iteration; scans areiterate_untilunder the subject's length, accumulationslist_fold, so the members carryrecursionwhere they realize a library template (fix(production): a primitive realized by a library template carries the recursion effect (step 1 of #105) #129) and each declaration admits exactly the effects its closure realizes.SL-01(new suitestdlib, SPEC.md §17.22, register 382): the project checks and builds and the seven roots are eligible with exactly their declared effects; each member's lowered program under the calculus evaluator (600 runs) and its renderedrust-stdpackage under the pinned rustc (3 000 runs) agree with the Rust oracle on a seeded corpus of edge cases and random inputs; a planted character class intrim(form feed → vertical tab) is detected; and under the pinned Lean the production export certifies every member (A, B, E) into packages byte-identical to the committed ones undertests/production-export/stdlib/, each realizing the program the differential ran.Harness:
production_export::EXPORTEDaddsstdlibto whatcheck-production-exportcompares (PX-01keeps its two examples);P::stdlib();verify-examplesandcheck-goldendiscoverstdlib/besidecompiler/.What it does not do
Bytesequality by evaluation is B4 ([v0.4] #27 stage 6: complete the closed Rust AST so the runtime is generated from the calculus #91 stage 2). Until then the module's behavior is held by the differential only, as §2.B4 of the issue says.String-typed members: text is handled as UTF-8 bytes (§17.22 says so).Evidence
SL-01on Linux x86-64 with the pinned toolchain,just vv(see the CI run). The planted defect record is in VERIFICATION.md.Closes nothing; #92 stays open for the remaining members (sorting, JSON, hex/decimal), one PR each.
🤖 Generated with Claude Code