The z3 version is unpinned, and it discharges proof obligations
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 14
- Forks
- 2
- Avg merge
- 12h 42m
- Merged PRs (30d)
- 61
Description
Recording a divergence rather than a failure. Seam verification shells out to z3, and nothing pins which one.
Observed
| machine | z3 |
|---|---|
| macOS M4 (brew) | 4.15.4 |
| Ubuntu 24.04 build box (apt) | 4.8.12 |
Seven years apart. Both currently pass the suite, so this is not biting today.
Why it is worth a ticket anyway
z3 is not a formatter or a linter — it decides proof obligations. src/hir/seam.rs and src/hir/prover.rs spawn it to discharge relaxed transfer-edge obligations in QF_BV, and the answer determines whether a diagnostic fires:
Command::new("z3")
A solver difference does not surface as "z3 disagreed". It surfaces as a missing W1027, or an expected-failure test that passes — which reads as a compiler regression and would be debugged as one. scripts/setup_linux.sh already has a comment saying exactly this about z3 being absent; the same reasoning applies to it being a different version.
QF_BV is decidable and both solvers should agree on satisfiability, so the realistic risks are narrower than "wrong answer":
- a query that times out on one version and not the other;
- reliance on model output whose formatting or variable ordering shifted;
- an incompleteness or bug fixed between 4.8 and 4.15 that changes an edge case.
Suggested
- record the
z3 --versionalongside the other provenance the suite already captures, so a divergence is visible in the log rather than inferred later; - decide a minimum version and check it in
setup.shnext to the LLVM version check (#365); - pin it in
scripts/setup_linux.shif a minimum is chosen.
Not proposing to vendor z3. The ask is that the version be recorded and bounded, so that "the solver changed" is a hypothesis someone can rule out in a minute rather than after a day of bisecting the compiler.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the z3 invocations in src/hir/seam.rs and src/hir/prover.rs, then inspect the existing provenance capture and version check in setup.sh and scripts/setup_linux.sh. Compare the setup flow with the LLVM check in #365 and determine where the z3 version should be recorded and bounded. Done means the suite exposes its z3 version and setup enforces the chosen minimum, with relevant checks passing.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust, shell
- Domain
- build-system, compilers
- Issue type
- Feature
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 62/100