joule-code-remediate: formal_fix prints each proof figure with its grade, not as "measured" #261
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/formal-fix-energy-label"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What was wrong
joule-code-remediate'sformal_fixexample printed each candidate's proof energy as "N µJ measured".That figure is not a reading. On the decision-procedure ladder the example uses, it is wall time × proof-solvers' default power, a figure no host calibrated.
CascadeResultgrades itEstimator, and the harness's ownFormalEntrydocs say the same.The fix
The example now prints the grade the result already carries:
That output is from a run on the build host with real z3.
How it was found
I searched main for energy figures labelled "measured" that are not readings. This was the only one left. The other hits either print their label according to the grade (
energy_probe,l3-jouleclaw), or seal the receipt UNMETERED when the rail is not live (the wai meters).🤖 Generated with Claude Code
The example printed each candidate's proof energy as "N µJ measured". On the decision-procedure ladder it runs, that figure is wall time × the proof-solvers default power, which no host calibrated: CascadeResult grades it Estimator, and joule-code-remediate's own docs say so. The example now prints the grade the result carries: UNPROVED — z3 found a counter-model ... (590377 µJ, Estimator) PROVED by Some(Smt) — ... (199948 µJ, Estimator) Found by a sweep of main for figures labelled "measured" that are not readings. It was the only one left. The other hits print the grade conditionally (energy_probe, l3-jouleclaw) or seal UNMETERED when the rail is not live (the wai meters). Co-Authored-By: Claude Opus 5.5 <[email protected]>