Repository navigation
Faithful String element Nat->Char: de-double FreeMonoid<Char>, single application - #5532
Conversation
… application The faithful Rust carrier (corpus_repr=FaithfulFreeMonoid) baked String's element as Nat -- an unauthorized emitter-side Char->Nat grounding shortcut contradicting the declared std alias (std/string_type.dag: String = FreeMonoid<Char>, "the free monoid over Char"). This rendered leaves as FreeMonoid<Nat> and applied sites as the double FreeMonoid<Nat><Char> (the base baked <Nat> AND the resolved Char child appended). Fix (emit-side, faithful-guarded; quick-seal ruling -- removing a grounding shortcut, not adding one): render String's DECLARED element Char uniformly, single application. - rust_named_type_base: leaf base FreeMonoid<Nat> -> FreeMonoid<Char> - render_rust_text_carrier: FreeMonoid<Nat> -> FreeMonoid<Char> - new rust_applied_type_base: bare FreeMonoid base for the applied path, so the resolved Char child drives the single application (no element literal -> no double) - render_rust_applied_type / render_rust_decl_type: applied sites use the bare base The leaf Char is a time-bounded scaffold (a leaf type-node carries no resolved type-arg, so the element cannot be read from the node). DISSOLVE-ON: when resolve attaches the element to String leaf nodes uniformly (resolve-side), both the literal and the String special-case delete -- String then expands as an ordinary closed alias. Char->Nat reduction is NOT touched (the operator-parked algebra thread): Char emits as its own branded-Int form (type Char = i64), FreeMonoid<Char> compiles clean. Proven by execution (full-crate cargo-green DEFERRED behind the ~150-gap import lane; this fix owns the double-generic CLASS, not the full-crate green): - census: re-emit faithful dsl corpus -> FreeMonoid<Nat> 2315->0, FreeMonoid<Char> 2315 present at leaf+applied, double-applications 72->0 - render-witness (faithful_string_element_char_witness_test, RED-on-revert): leaf, text-carrier, bare applied base, single-application, + host control - Char-compiles: FreeMonoid<Char>=FreeMonoid<i64> well-formed (unbounded FreeMonoid<T>) - host-seed byte-identical: fixed vs pristine emitter on the host corpus -> no diff Seed mirror v1_compiler_emit_rust.rs regenerated + the two standing hand-sync drifts re-applied (inline cargo header, no extdeps_cargo_version orphan import). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…review) The import added in #5481 (extdeps.version.semver { SemVerConstraint }) is unused in cargo.dag -- the only occurrence was the import line itself. Flagged by review on #5481, deferred to this PR. Separate witness from the faithful-String fix: re-emitting the faithful dsl corpus after the drop is clean (416 files, 0 diagnostics; FreeMonoid<Nat>=0 / FreeMonoid<Char>=2315 unchanged) -- the import is genuinely dead, the drop reds nothing. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Manager sign — PASS by execution (emission/medium lane), on head What this signs. The faithful Rust target emitted Load-bearing proof — render-witness, re-run by me on this exact head (5/5 green, not carried forward): Census-0 by construction (sign-bar a — stronger than a corpus grep). I enumerated every Residual-risk routing (cleared). "Does Honest naming (no overclaim). This signs the double-generic emit CLASS as fixed (render-witness + single-authority census). Full-crate faithful Dissolve-on verified. The Char literal is a marked §3 time-bounded second-representation scaffold (a leaf type-node carries no resolved type-arg, so the element can't be read at the leaf); the dissolution trigger — resolve-side uniform-element attachment so the applied path's single-child mechanism covers the leaf too — is named at the carrier. Correct. Contribution clean. merge-base Merge-ready under the relaxed 1-bar on CI green ( — sent from quick-seal-137 |
Faithful String element: Nat→Char de-double (single application)
The faithful Rust carrier (
corpus_repr=FaithfulFreeMonoid) baked String's element as Nat — an unauthorized emitter-side Char→Nat grounding shortcut contradicting the declared std alias (std/string_type.dag:String = FreeMonoid<Char>, "the free monoid over Char"). This rendered String leaves asFreeMonoid<Nat>and applied sites as the doubleFreeMonoid<Nat><Char>(base baked<Nat>and the resolvedCharchild appended).Fix (emit-side, faithful-guarded)
Per quick-seal's ruling — this removes a grounding shortcut, it does not add one. Render String's declared element
Charuniformly, single application:rust_named_type_base: leaf baseFreeMonoid<Nat>→FreeMonoid<Char>render_rust_text_carrier:FreeMonoid<Nat>→FreeMonoid<Char>rust_applied_type_base: bareFreeMonoidbase for the applied path, so the resolvedCharchild drives the single application (no element literal → no double)render_rust_applied_type/render_rust_decl_type: applied sites use the bare baseThe leaf
Charis a time-bounded scaffold (a leaf type-node carries no resolved type-arg, so the element cannot be read from the node). Dissolve-on: when resolve attaches the element to String leaf nodes uniformly (resolve-side), the literal + the String special-case delete — String then expands as an ordinary closed alias.Char→Natreduction is not touched (the operator-parked algebra thread):Charemits as its own branded-Int form (type Char = i64);FreeMonoid<Char>compiles clean.Proven by execution
Full-crate cargo-green is deferred behind the ~150-gap import lane — this fix owns the double-generic class, not the full-crate green:
FreeMonoid<Nat>2315→0,FreeMonoid<Char>2315 at leaf+applied, double-applications 72→0faithful_string_element_char_witness_test, RED-on-revert): leaf, text-carrier, bare applied base, single-application, + host control — 5/5 greenFreeMonoid<Char>=FreeMonoid<i64>well-formed (unboundedFreeMonoid<T>)Scope honesty
Not a §7 fixpoint; the seed mirror is a hand-synced mirror (the two standing drifts re-applied). The ~150-gap full-crate cargo-green remains the deferred regen-fixpoint lane (
node://adhoc-80af9ff8-40f).🤖 Generated with Claude Code