(proof-new) Updates to strings skolem cache. (#4524)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Tue, 26 May 2020 14:51:13 +0000 (09:51 -0500)
committerGitHub <noreply@github.com>
Tue, 26 May 2020 14:51:13 +0000 (09:51 -0500)
commit978f45596117f815fee943edceb9f8edf9c26c32
treeef81fa4b39f0c4c53f7c800823445e93d5625bd8
parentdbba8bce14b23c7bb2f3b08cbbbf441054386ee5
(proof-new) Updates to strings skolem cache. (#4524)

This PR makes strings skolem cache call the ProofSkolemCache. This is required for proper proof checking, as it makes all skolems be associated with their formal definition, encapsulated by a witness term.

It furthermore makes skolem sharing more uniform and aggressive by noting that most string skolems correspond to purification variables (typically for some substr term). A purification variable for a term that rewrites to a constant can be replaced by the constant itself.

It also introduces an attribute IndexVarAttribute which is used to ensure reductions involving universal variables are deterministic.
src/theory/strings/core_solver.cpp
src/theory/strings/skolem_cache.cpp
src/theory/strings/skolem_cache.h
src/theory/strings/theory_strings_utils.cpp
src/theory/strings/theory_strings_utils.h