You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Two formal-track deliverables on the shared dev branch (the one-branch
policy keeps both here; happy to split if you'd rather review them
separately).
---
## Commit 1 — F-5: `render_ty` per-face renaming is injective (no
collision)
Mechanizes **F-5** (`docs/PROOF-NEEDS.adoc`). `lib/face.ml`'s
`render_ty` rewrites a fixed type-name vocabulary per face — `Unit`,
`Bool`, `Option[_]`. F-5 asks whether that ever **collapses two distinct
canonical types onto one displayed string** — pointedly, Js renders
`Unit` as `"null"` and `Option[T]` as `"T | null"`, sharing the `"null"`
lexeme.
`formal/F5_RenderFaithful.v` models the vocabulary (`cty`), the
displayed lexemes (`name`), and the rendered form (`rty`), mirroring
`render_ty` as `render : face → cty → rty`. Faithful to the whole-string
Unit/Bool match and the canonical-inner Option rewrite (Js
`Option[Option[Int]]` ⇒ `"Option[Int] | null"`).
- `render_inj` — every face's renaming is injective (the non-collapse
guarantee).
- `js_no_collapse` / `cafe_no_collapse` / `option_never_atom` — `Unit`
and `Option[T]` never read as one type despite the shared `"null"`/`"?"`
lexeme.
Status: F-5 `absent → partial`.
## Commit 2 — Real-lift R0: `RealWasm.v` + `REAL-LIFT.adoc`
Begins **PROOF-NEEDS §6 Wave 3** — replacing the toy models with the
real AST + real typed-WASM semantics.
- **`formal/REAL-LIFT.adoc`** — the engineering plan, grounded in
`lib/ast.ml` (the real ~30-constructor `expr`) and `lib/wasm.ml` (the
real WebAssembly-1.0 IR). Coq module structure
(`RealWasm`/`RealWasmSem`/`RealAst`/`RealAstSem`/`RealCompile`/`RealPreservation`)
and a strict-superset fragment ladder
**R0→R1→R2→R-mem→R-float→R-str→R-call→R-wrap→R-eff**, each axiom-free
before the next, with the strategy for each hard part (loops/termination
via fuel, linear memory, abstract floats, the post-typecheck elaboration
nodes, effects gated on #555).
- **`formal/RealWasm.v`** — **R0**, the first stone. Re-targets the
*actual* `lib/wasm.ml` `instr`/`value_type` names (vs the toy K-1's
ad-hoc machine) for the pure i32 numeric core: stack-machine `wexec`,
arity checker `wcheck`, and `wexec_sound` — *arity-checked code never
gets stuck*, the target-side invariant the real K-1 rests on. i32 ≔ `Z`
(wrap deferred to rung R-wrap).
This concretely settles the "real lift" framing from the gap analysis:
it's a milestone ladder, not one monolith, and **R0 is landed**. R1
(real `RealAst`/`RealAstSem`/`RealCompile` for the int/bool/let fragment
→ first real `⟦compile p⟧ = ⟦p⟧`) is next.
---
All proofs axiom-free. `formal/` now **16 files, 27 `Print Assumptions`
closure reports** (verified: full dep-order recompile, no `Axioms:`).
Wired into `_CoqProject` / `justfile` / `.hypatia-ignore` /
`README.adoc`; `PROOF-NEEDS.adoc` updated (F-5 row, K-1 row, §6 Waves 1
& 3).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01KPG9mEQXFyA3k7NWAzMNMr
---------
Co-authored-by: hyperpolymath <paraordinate@yahoo.co.uk>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
0 commit comments