String support via creating string constraints and progressively instantiating the universal constraints as needed. More...
#include <util/union_find_replace.h>#include <solvers/refinement/bv_refinement.h>#include "string_constraint_generator.h"#include "string_dependencies.h"#include "string_refinement_util.h"Go to the source code of this file.
String support via creating string constraints and progressively instantiating the universal constraints as needed.
The procedure is described in the PASS paper at HVC'13: "PASS: String Solving with Parameterized Array and Interval Automaton" by Guodong Li and Indradeep Ghosh
Definition in file string_refinement.h.
Definition at line 61 of file string_refinement.h.
Definition at line 38 of file string_refinement.h.
Definition at line 57 of file string_refinement.h.
Definition at line 31 of file string_refinement.h.
Definition at line 53 of file string_refinement.h.
Symbol resolution for expressions of type string typet.
We record equality between these expressions in the output if one of the function calls depends on them.
Definition at line 470 of file string_refinement.cpp.
Create an equivalent expression where array accesses and 'with' expressions are replaced by 'if' expressions, in particular:
arr[index], where: arr := {12, 24, 48} the constructed expression will be: index==0 ? 12 : index==1 ? 24 : 48arr[index], where: arr := array_of(12) with {0:=24} with {2:=42} the constructed expression will be: index==0 ? 24 : index==2 ? 42 : 12(g1?arr1:arr2)[x] where arr1 := {12} and arr2 := {34}, the constructed expression will be: g1 ? 12 : 34{ }[x] returns a fresh symbol, this corresponds to a non-deterministic result Note that if left_propagate is set to true, the with case will result in something like: index <= 0 ? 24 : index <= 2 ? 42 : 12 Definition at line 1282 of file string_refinement.cpp.