I am working on a project whose purpose is to use rewriting of terms to solve / simplify arithmetic problems of a fixed size bit vector, which is useful as a preliminary step to some decision-making procedure, for example, based on the-blasting bit. The term βrewritingβ can generally solve the problem or otherwise produce a much simpler equivalent problem, so a combination of both can lead to significant speedup.
I know that many SMT solvers implement this strategy (e.g. Boolector, Beaver, Alt-Ergo or Z3), but it is difficult to find documents / technical reports / etc in which these rewriting steps are described in detail. In general, I only found articles in which the authors describe such simplification steps in a few paragraphs. I would like to find some document that explains in detail the use of rewriting terms: providing example rules, discussing the convenience of rewriting AC and / or other equational axioms, using rewriting strategies, etc.
Currently, I just found a technical report Decision Procedure for Fixed Width Bit Vectors that describes the normalization / simplification steps performed by CVC Lite, and I would like to find more technical reports like this! I also found a poster about Term rewriting in STP , but this is just a short summary.
I have already visited the websites of these SMT solvers, and I have looked at their publication pages ...
I would appreciate any reference or any explanation of how term rewriting is used in current versions of well-known SMT solvers. I'm especially interested in the Z3 because it looks like one of the smartest phases of simplification. For example, Z3 3. * introduced a new decision procedure for the bit vector, but, unfortunately, I could not find a single paper describing it.
source share