|
ESBMC
Efficient SMT-based Context-Bounded Model Checker
|
One verdict per property for a whole verification run. More...
#include <property_verdict.h>
Public Member Functions | |
| void | record (const std::string &property, property_verdictt verdict, const property_locationt &loc, const std::string ¬e="") |
Records verdict for property at loc, annotated with note. | |
| void | promote_unchecked_to_passed () |
| Raises every NotChecked entry recorded since the last begin_round() or clear() to Passed. | |
| void | note_incomplete () |
| Records that a phase stopped before every property reached a verdict, disarming proofs until the next round completes. | |
| void | begin_round () |
| Starts the round of a k-step strategy's next base case, incomplete until complete_round(). | |
| void | complete_round () |
| Records that the round's base case solved every claim it raised. | |
| bool | is_incomplete () const |
| Whether a phase since the last clear() or complete_round() stopped short, or the round's base case has not completed. | |
| bool | all_passed () const |
| Whether every property in the table reached Passed. | |
| std::size_t | size () const |
| How many distinct properties have been checked. | |
| bool | has_violation () const |
| Whether any property has been found violated. | |
| std::map< std::string, property_resultt > | snapshot () const |
| A copy of the results recorded so far, keyed by property. | |
| void | clear () |
| Discards all verdicts. | |
One verdict per property for a whole verification run.
--multi-property re-checks every property in every thread interleaving, and a property can be discharged under one schedule while being violated under another. Reporting each check as it happens then prints contradictory verdicts for a single source assertion (esbmc/esbmc discussion #6391). Recording verdicts here instead lets the run report each property once, with the dominant verdict.
| bool property_verdict_tablet::all_passed | ( | ) | const |
Whether every property in the table reached Passed.
A k-step run's verdict follows its table (ยง4 of docs/roadmap/multi-property-strategy-plan.md), so a row it could not settle, or settled only vacuously, is not a proof of the program.
| void property_verdict_tablet::begin_round | ( | ) |
Starts the round of a k-step strategy's next base case, incomplete until complete_round().
A row this round never records is not promoted.
| void property_verdict_tablet::clear | ( | ) |
Discards all verdicts.
|
inline |
Records that the round's base case solved every claim it raised.
|
inline |
Whether any property has been found violated.
Lock-free, so it stays usable from the SIGALRM timeout handler, which must report an already-established violation before _exit() discards it.
|
inline |
Whether a phase since the last clear() or complete_round() stopped short, or the round's base case has not completed.
| void property_verdict_tablet::note_incomplete | ( | ) |
Records that a phase stopped before every property reached a verdict, disarming proofs until the next round completes.
| void property_verdict_tablet::promote_unchecked_to_passed | ( | ) |
Raises every NotChecked entry recorded since the last begin_round() or clear() to Passed.
Call only once the run has established that all properties hold – a monolithic UNSAT refutes the disjunction of every claim violation, so each claim holds – and never after a merely bounded round such as a k-induction base case. Does nothing while is_incomplete().
| void property_verdict_tablet::record | ( | const std::string & | property, |
| property_verdictt | verdict, | ||
| const property_locationt & | loc, | ||
| const std::string & | note = "" ) |
Records verdict for property at loc, annotated with note.
Keeps the dominant verdict when the property has already been checked. Safe to call from parallel solver threads.
loc is required rather than defaulted: the report sorts and groups on it, so a caller that does not know where its property is would silently sort to the top of the table with no file or line.
| std::size_t property_verdict_tablet::size | ( | ) | const |
How many distinct properties have been checked.
| std::map< std::string, property_resultt > property_verdict_tablet::snapshot | ( | ) | const |
A copy of the results recorded so far, keyed by property.