S2S: An Efficient Solver for Separation Logic
entailment and satisfiability problems of separation logic with
satisfiability problems of string logic with
License: academic use only.
Warranty information:
program ::= (cell_definition | inductive_definition | command )*
cell_definition ::=
'ddata' cell_name '{' (type ID;)* '}' '.'
inductive_definition ::=
'pred' inductive_name'<'(variable:type)+ '>' '==' formula ('or' formula)* '.'
command ::=
| 'checksat' formula.
| 'checkent' formula '|-' formula '.'
formula ::=
| heap_formula '&' pure_formula
| '(' 'exists' variable '.' formula ')'
heap_formula ::=
| 'emp'
| variable '::' cell_name '<' expression* '>'
| inductive_name '(' expression+ ')'
| heap_formula '*' heap_formula
pure_formula ::=
| 'true'
| 'false'
| exp '=' exp
| exp '!=' exp
| exp '>' exp
| exp '>=' exp
| exp '<' exp
| exp '<=' exp
| '!' pure_formula
| pure_formula '&' pure_formula
| pure_formula '|' pure_formula
| '(' 'exists' variable '.' pure_formula ')'
| '(' 'forall' variable '.' pure_formula ')'
exp ::=
| integer
| variable
| char | word
| null
| '-' exp
| expr '+' exp
| exp '-' exp
| integer '\*' exp
type ::=
| 'int'
| cell_name
variable ::= ID
cell_name ::= ID
inductive_name ::= ID
ID ::= [a-zA-Z_][a-zA-Z0-9_]*
integer ::= [0-9]+
ddata RefSll_t {
RefSll_t next;
int data;
}.
pred lsls< in:RefSll_t,dt1:int,len1:int,out:RefSll_t,dt2:int,len2:int > ==
emp & in = out & dt1 = dt2 & len1 = len2
or (exists u,dt3,len3: in::RefSll_t * lsls(u,dt3,len3,out,dt2,len2) & dt1 < dt3+0 & len1 = len3+1).
checksat lsls(u_emp,d1,n1,z_emp,d2,n2) * z_emp::RefSll_t * lsls(y_emp,d3,n3,w_emp,d4,n4) & d1 != d2 & n3 = n4+3.