-
Notifications
You must be signed in to change notification settings - Fork 41
UltimateEliminator
The Idea of this project ist to combine the quantifier elimination of Ultimate with the SMTInterpol.
-
SMT-Comp 2019: https://smt-comp.github.io/2019/index.html
-
Benchmarks(Non incremental): http://smtlib.cs.uiowa.edu/benchmarks.shtml
-
StarExec: https://www.starexec.org
-
Participation paper of the Ultimate Eliminator https://smt-comp.github.io/2019/system-descriptions/2019UltimateEliminator.pdf
- UltimateEliminator
- QuantifierOverapproximatingSolver
- SmtParser
- UltimateEliminatorSmtcomp2019
Change "boolean inUltimateEliminatorMode = false;" in SmtParser to "true". TODO: Use the Preference Page of the SmtParser Plugin.
Run UltimateEliminatorSmtcomp2019 as "JUnit Plug-in Test". This will run UltiamteEliminator on SMT-Comp 2019 Benchmarks. The Benchmarks used in UltimateEliminatorSmtcomp2019 need to be in the Folder "examples/local/2019smtcomp/". The result is written in a new File in this Folder: "ultimate/surefirereports/de.uni_freiburg.informatik.ultimate.ultimatetest.suites.traceabstraction.UltimateEliminatorSmtcomp2019/"
The quantifierelimination itself could use SMT-Solver. We have to make sure the quantifierelimination can only assert quantifier free Terms.
Ignore the assertion if the term is quantified.
If the formula is not quantifier free, we overaproximate the asserted Term. This means we try to find a formula F' for a formula F so that the implikation F ==> F' applies. F and F' are not equivalent, therefor if check-sat returns "sat" we have to return "unknown" instead.
- Quantifier Pusher, replace qunatified subterms with "true".
- Simple Skolemization: If the first quantifier block is exist quantified, we replace the quantified variables with constants.
- Try SMT-Solver before quantifier elimination.
- assert all quantifier free formulas first.
- Throughout this section a,b,c are non-zero constants, d is some constant and x,y,z are variables.
- The term
a*x=b*y+c*z+d
can be represented by the AffineRelation class. - In order to simplify our notation we will sometimes use
/
for integer division and%
for integer modulo, although the SMT-LIB notation isdiv
andmod
and in SMT-LIB/
is the division for reals.
-
If our terms have sort Real then
a*x=b*y+c*z+d
is equivalent tox=(b/a)*y+(c/a)*z+(d/a)
. -
The same holds for versions of this relation where the relation symbol is not
=
but<
,<=
,>
,=>
, or!=
. -
If our terms have sort Int then
a*x=b*y+c*z+d
is in gerneral not equivalent tox=(b/a)*y+(c/a)*z+(d/a)
. (make yourself an example?) -
If our terms have sort Int then
a*x=b*y+c*z+d
is equivalent tox=(b/a)*y+(c/a)*z+(d/a)
if b,c,d are divisible by a (i.e.,b mod a = 0
,c mod a = 0
andd mod a = 0
. -
For terms t1,t2, the formula
∃x. t1<=x /\ x<=t2
is equivalent to t1<=t2. A general version of this is called transitive inequality resolution TIR and implemented in the class XnfTir. (The general version supports several conjuncts, strict inequalities, disequalities and there is a dual version for universal quantification.)
- If our terms have sort Int then
a*x=b*y+c*z+d
is equivalent to(x=(b*y+c*z+d) div a) /\ ((b*y+c*z+d) mod a = 0)
. - If our terms have sort Int then
a*x<=b*y+c*z+d
is equivalent tox<=(b*y+c*z+d) div a
(without any additional modulo constraint!). - The same holds the strict inequality relation
<
. - If our terms have sort Int then
a*x>=b*y+c*z+d
is equivalent tox>=(b*y+c*z+d) div a /\ (b*y+c*z+d) mod a = 0 \/ x>=((b*y+c*z+d) div a) + 1
- The same holds the strict inequality relation
>
.
- Solve Div Subterms of form y = (x div d) for
x
(Subject) - Solve Nestings of Mod and/or Div Subterms
- Use solve Mod/Div Subterms for a subject in the quantifier Elimination (DER) if the subject is a quantified variable
- Home
- Ultimate Development
- Ultimate Build System
- Documentation
- Project Topics