-
Notifications
You must be signed in to change notification settings - Fork 4
Symbolic Heap Syntax
Attestor supports a limited fragment of symbolic heap separation logic with inductive predicate definitions to provide initial states. The syntax of these symbolic heaps is as follows:
PREDICATE( VAR{TYPE}, ..., VAR{TYPE} ) <= VAR{TYPE}, ..., VAR{TYPE} | FORMULA
Here, PREDICATE
is a predicate symbol consisting of a non-empty string of letters and digits.
Moreover, VAR{TYPE}
declares a variable named VAR
of type TYPE
, i.e. TYPE
corresponds to the class or primitive data type of objects or values that may be assigned to variable VAR
.
Variables left of <=
correspond to free variables of PREDICATE
and will be interpreted as program variables.
Variables declared right of <=
and left of |
are interpreted as existentially quantified variables.
The delimiter |
is omitted if no variables are existentially quantified.
The symbolic heap itself is given by the FORMULA
afterwards, which is defined according to the following context-free grammar:
FORMULA ::= VAR.FIELD -> VAR | VAR.FIELD -> null | FORMULA * FORMULA | VAR = VAR | VAR = CONST | PRED(VAR (, VAR)*)
Here, VAR
corresponds to the name of a previously declared variable, FIELD
is an identifier of a selector, null
is a constant referring to the null reference, and CONST
refers to constants null
, or numerical constants such as 0
, -1
, or 1
. Finally, PRED(VAR (,VAR)*)
denotes a call of predicate PRED
with the provided comma-separated list of parameters. Please notice that dangling pointers are not supported.