Skip to content

Commit 72b4ab1

Browse files
Add goto-checker documentation
1 parent 8ad3bb4 commit 72b4ab1

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed

src/goto-checker/README.md

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
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. multi-path 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 stop_on_fail_verifiert: Checks all properties, but terminates
55+
as soon as the first violated property is found and reports this violation.
56+
A trace ends at a violated property.
57+
* \ref all_properties_verifier_with_trace_storaget: Determines the status of
58+
all properties and outputs results when the verification algorithm has
59+
terminated. A trace ends at a violated property.
60+
* \ref all_propertiest: Determines the status of all properties and
61+
outputs verification results continuously. In contrast to
62+
\ref all_properties_verifier_with_trace_storaget, \ref all_propertiest
63+
does not require to store any traces.
64+
A trace ends at a violated property.
65+
66+
There are the following variants of incremental goto checkers at the moment:
67+
* \ref multi_path_symex_checkert: The default mode of goto-symex. It explores
68+
all paths and applies aggressive path merging to generate a formula
69+
(aka 'equation') that is passed to the SAT/SMT solver. It supports
70+
determining the status of all properties, but not adding new properties
71+
after the first invocation.
72+
* \ref multi_path_symex_only_checkert: Same as \ref multi_path_symex_checkert,
73+
but does not call the SAT/SMT solver. It can only decide the status of
74+
properties by the simplifications that goto-symex performs.
75+
* There are variants for Java that perform a Java-specific preprocessing:
76+
\ref java_multi_path_symex_checkert,
77+
\ref java_multi_path_symex_only_checkert

0 commit comments

Comments
 (0)