Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,31 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.9.0] - 2026-05-27

**Theme: i64 T1 result-correspondence lifts against the aligned model.**

v0.9.0 picks up what v0.8.0 set up. v0.8.0 (the "honest foundation") aligned
`Compilation.v` with the real Rust codegen and shipped 26 type-only pseudo-op
axioms + tactics + flag-correspondence lemmas. v0.9.0 layers the value-correspondence
on top: 26 new `_spec` axioms equate every i64 pseudo-op's result to the WASM-spec
function, then 30 existence-only (T2) i64 proofs are lifted to result-correspondence
(T1), and the 5 strategically-`Admitted` theorems #150 carried over are discharged.

**Net delta:** previously had 36 i64 theorems Qed at T2 plus 5 admits.
Now has **30 new T1 Qeds + 5 discharged T1 Qeds = 35 i64 T1 Qeds**, with 5 honest
admit carry-overs (Add/Sub/And/Or/Xor) whose proofs depend on missing helper
lemmas (ADDS/ADC carry-propagation; SUBS/SBC borrow-propagation; halves-distribute
over bitwise, blocked by Rocq 9 `Z.mod_mod`).

**Falsification statement.** v0.9.0 is wrong if (a) any of the 35 newly-T1 i64
theorems is shown to disagree with the WASM reference for a value pair the
theorem covers (the `_spec` axioms are inconsistent with `Compilation.v`),
(b) any of the 5 honest-Admitted carry-overs is claimed `Qed.` anywhere in the
release artifacts, (c) `bazel test //coq:verify_proofs` goes red on a clean
v0.9.0 checkout, or (d) any newly-added `_spec` axiom claims a result the Rust
codegen does not actually produce (cross-checked against `docs/analysis/I64_CODEGEN_SURVEY.md`).

### Added

- **i64 pseudo-op result-correspondence axioms (v0.9.0 PR 1 precursor).**
Expand Down
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ resolver = "2"
# semver to publish, so the convention now catches up: workspace
# version follows the release tag, bumped pre-tag in the release
# checklist. See docs/release-process.md.
version = "0.8.0"
version = "0.9.0"
edition = "2024"
rust-version = "1.88"
authors = ["PulseEngine Team"]
Expand Down
2 changes: 1 addition & 1 deletion MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ module(
name = "synth",
# Kept in lockstep with [workspace.package] version in Cargo.toml.
# Both are bumped pre-tag — see docs/release-process.md.
version = "0.8.0",
version = "0.9.0",
)

# Bazel dependencies
Expand Down
2 changes: 1 addition & 1 deletion crates/synth-backend-awsm/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ categories.workspace = true
description = "aWsm backend integration for the Synth compiler"

[dependencies]
synth-core = { path = "../synth-core", version = "0.8.0" }
synth-core = { path = "../synth-core", version = "0.9.0" }
anyhow.workspace = true
thiserror.workspace = true
4 changes: 2 additions & 2 deletions crates/synth-backend-riscv/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ categories.workspace = true
description = "RISC-V encoder, ELF builder, PMP allocator, and bare-metal startup for synth"

[dependencies]
synth-core = { path = "../synth-core", version = "0.8.0" }
synth-synthesis = { path = "../synth-synthesis", version = "0.8.0" }
synth-core = { path = "../synth-core", version = "0.9.0" }
synth-synthesis = { path = "../synth-synthesis", version = "0.9.0" }
anyhow.workspace = true
thiserror.workspace = true
tracing.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/synth-backend-wasker/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ categories.workspace = true
description = "Wasker backend integration for the Synth compiler"

[dependencies]
synth-core = { path = "../synth-core", version = "0.8.0" }
synth-core = { path = "../synth-core", version = "0.9.0" }
anyhow.workspace = true
thiserror.workspace = true
4 changes: 2 additions & 2 deletions crates/synth-backend/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ default = ["arm-cortex-m"]
arm-cortex-m = ["synth-synthesis"]

[dependencies]
synth-core = { path = "../synth-core", version = "0.8.0" }
synth-synthesis = { path = "../synth-synthesis", version = "0.8.0", optional = true }
synth-core = { path = "../synth-core", version = "0.9.0" }
synth-synthesis = { path = "../synth-synthesis", version = "0.9.0", optional = true }
anyhow.workspace = true
thiserror.workspace = true
16 changes: 8 additions & 8 deletions crates/synth-cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,18 @@ verify = ["synth-verify"]
# Path deps carry `version` so `cargo publish` rewrites them to the
# crates.io coordinate. Bumping the workspace version requires
# updating these in lockstep — see docs/release-process.md.
synth-core = { path = "../synth-core", version = "0.8.0" }
synth-frontend = { path = "../synth-frontend", version = "0.8.0" }
synth-synthesis = { path = "../synth-synthesis", version = "0.8.0" }
synth-backend = { path = "../synth-backend", version = "0.8.0" }
synth-core = { path = "../synth-core", version = "0.9.0" }
synth-frontend = { path = "../synth-frontend", version = "0.9.0" }
synth-synthesis = { path = "../synth-synthesis", version = "0.9.0" }
synth-backend = { path = "../synth-backend", version = "0.9.0" }

# Optional external backends
synth-backend-awsm = { path = "../synth-backend-awsm", version = "0.8.0", optional = true }
synth-backend-wasker = { path = "../synth-backend-wasker", version = "0.8.0", optional = true }
synth-backend-riscv = { path = "../synth-backend-riscv", version = "0.8.0", optional = true }
synth-backend-awsm = { path = "../synth-backend-awsm", version = "0.9.0", optional = true }
synth-backend-wasker = { path = "../synth-backend-wasker", version = "0.9.0", optional = true }
synth-backend-riscv = { path = "../synth-backend-riscv", version = "0.9.0", optional = true }

# Optional verification (requires z3)
synth-verify = { path = "../synth-verify", version = "0.8.0", optional = true, features = ["z3-solver", "arm"] }
synth-verify = { path = "../synth-verify", version = "0.9.0", optional = true, features = ["z3-solver", "arm"] }

# Optional PulseEngine WASM optimizer
# Uncomment when loom crate is available:
Expand Down
2 changes: 1 addition & 1 deletion crates/synth-frontend/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ description = "WASM/WAT parser and module decoder frontend for the Synth compile
# Internal path deps carry an explicit version so `cargo publish`
# can rewrite to the crates.io coordinate. `path` is used for
# in-workspace builds; `version` is what crates.io sees.
synth-core = { path = "../synth-core", version = "0.8.0" }
synth-core = { path = "../synth-core", version = "0.9.0" }

wasmparser.workspace = true
wasm-encoder.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/synth-opt/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ categories.workspace = true
description = "Peephole optimization passes for the Synth compiler"

[dependencies]
synth-cfg = { path = "../synth-cfg", version = "0.8.0" }
synth-cfg = { path = "../synth-cfg", version = "0.9.0" }

[dev-dependencies]
criterion = { version = "0.5", features = ["html_reports"] }
Expand Down
6 changes: 3 additions & 3 deletions crates/synth-synthesis/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ categories.workspace = true
description = "WASM-to-ARM instruction selection and peephole optimizer"

[dependencies]
synth-core = { path = "../synth-core", version = "0.8.0" }
synth-cfg = { path = "../synth-cfg", version = "0.8.0" }
synth-opt = { path = "../synth-opt", version = "0.8.0" }
synth-core = { path = "../synth-core", version = "0.9.0" }
synth-cfg = { path = "../synth-cfg", version = "0.9.0" }
synth-opt = { path = "../synth-opt", version = "0.9.0" }
serde.workspace = true
anyhow.workspace = true
thiserror.workspace = true
Expand Down
8 changes: 4 additions & 4 deletions crates/synth-verify/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ arm = ["synth-synthesis"]

[dependencies]
# Core dependencies (always required)
synth-core = { path = "../synth-core", version = "0.8.0" }
synth-cfg = { path = "../synth-cfg", version = "0.8.0" }
synth-opt = { path = "../synth-opt", version = "0.8.0" }
synth-core = { path = "../synth-core", version = "0.9.0" }
synth-cfg = { path = "../synth-cfg", version = "0.9.0" }
synth-opt = { path = "../synth-opt", version = "0.9.0" }

# ARM synthesis (optional, behind 'arm' feature)
synth-synthesis = { path = "../synth-synthesis", version = "0.8.0", optional = true }
synth-synthesis = { path = "../synth-synthesis", version = "0.9.0", optional = true }

# SMT solver for formal verification
z3 = { version = "0.19", features = ["static-link-z3"], optional = true }
Expand Down
Loading