|
| 1 | +\ingroup module_hidden |
| 2 | +\defgroup goto-checker goto-checker |
| 3 | + |
| 4 | +# Folder goto-checker |
| 5 | + |
| 6 | +\author Peter Schrammel |
| 7 | + |
| 8 | +The \ref goto-checker directory contains interfaces for the verification of |
| 9 | +goto-programs. |
| 10 | + |
| 11 | +There are three main concepts: |
| 12 | +* Property |
| 13 | +* Goto Verifier |
| 14 | +* Incremental Goto Checker |
| 15 | + |
| 16 | +A property has a `property_id` and identifies an assertion that is either |
| 17 | +part of the goto model or generated in the course of executing the verification |
| 18 | +algorithm. A verification algorithm determines the `status` of a property, |
| 19 | +i.e. whether the property has passed verification, failed, is yet to be |
| 20 | +analyzed, etc. See \ref property_infot. |
| 21 | + |
| 22 | +A goto verifier aims at determining and reporting |
| 23 | +the status of all or some of the properties, _independently_ of the |
| 24 | +actual verification algorithm (e.g. path-merging symbolic execution, |
| 25 | +path-wise symbolic execution, abstract interpretation). |
| 26 | +See \ref goto_verifiert. |
| 27 | + |
| 28 | +An incremental goto checker is used by a goto verifier to execute the |
| 29 | +verification algorithm. Incremental goto checkers keep the state of the |
| 30 | +analysis and can be queried by the goto verifier repeatedly to return |
| 31 | +their results incrementally. A query to an incremental goto checker |
| 32 | +either returns when a violated property has been found or the |
| 33 | +verification algorithm has terminated. If a violated property has been |
| 34 | +found then additional information (e.g. a trace) can be retrieved |
| 35 | +from the incremental goto checker (if it supports that). |
| 36 | +See \ref incremental_goto_checkert. |
| 37 | + |
| 38 | +The combination of these three concepts enables: |
| 39 | +* _Verification algorithms can be used interchangeably._ |
| 40 | + There is a single, small interface for our verification engines. |
| 41 | +* _Verification results reporting is uniform across all engines._ |
| 42 | + Downstream tools can use the reporting output without knowing |
| 43 | + which verification algorithm was at work. |
| 44 | +* _Building variants of verification engines becomes easy._ |
| 45 | + Goto verifier and incremental goto checker implementations are built from |
| 46 | + small building blocks. It should therefore be easy to build variants |
| 47 | + by implementing these interfaces instead of hooking into a monolithic engine. |
| 48 | +* _The code becomes easier to maintain._ |
| 49 | + There are N things that do one thing each rather than one thing that does |
| 50 | + N things. New variants of verification algorithms can be added and removed |
| 51 | + without impacting others. |
| 52 | + |
| 53 | +There are the following variants of goto verifiers at the moment: |
| 54 | +* \ref all_properties_verifier_with_trace_storaget : Determines the status of |
| 55 | + all properties and outputs results when the verification algorithm has |
| 56 | + terminated. A trace ends at a violated property. |
| 57 | +* \ref all_properties_verifiert : Determines the status of all properties and |
| 58 | + outputs verification results incrementally. In contrast to |
| 59 | + \ref all_properties_verifier_with_trace_storaget, |
| 60 | + \ref all_properties_verifiert does not require to store any traces. |
| 61 | + A trace ends at a violated property. |
| 62 | + |
| 63 | +There are the following variants of incremental goto checkers at the moment: |
| 64 | +* \ref multi_path_symex_checkert : The default mode of goto-symex. It explores |
| 65 | + all paths and applies aggressive path merging to generate a formula |
| 66 | + (aka 'equation') that is passed to the SAT/SMT solver. It supports |
| 67 | + determining the status of all properties, but not adding new properties |
| 68 | + after the first invocation. |
| 69 | +* \ref multi_path_symex_only_checkert : Same as \ref multi_path_symex_checkert, |
| 70 | + but does not call the SAT/SMT solver. It can only decide the status of |
| 71 | + properties by the simplifications that goto-symex performs. |
| 72 | +* There are variants for Java that perform a Java-specific preprocessing: |
| 73 | + \ref java_multi_path_symex_checkert, |
| 74 | + \ref java_multi_path_symex_only_checkert |
0 commit comments