Skip to content

Commit 37ae8b1

Browse files
Add goto-checker documentation
1 parent 093718a commit 37ae8b1

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

src/goto-checker/README.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
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

Comments
 (0)