3

I'm doing quantifier elimination on LIA using F# and Z3 3.2 API.

Z3 used to have QUANT_ARITH configuration which indicates the use of Cooper's method or the Omega test for LIA quantifier elimination. But that option was replaced by ELIM_QUANTIFIERS in Z3 2.6 (see Z3 release notes).

I want to ask internally how Z3 3.2 knows which method to use for quantifier elimination? Can users affect the choice of method like QUANT_ARITH before?

Furthermore, with the introduction of strategy specification language, will Z3 allow us to customize quantifier elimination by extending or combining these methods?

pad
  • 41,040
  • 7
  • 92
  • 166

1 Answers1

3

The quantifier elimination module was re-implemented. The new implementation should be faster and correct. The latest Z3 does not have a implementation of Cooper’s method or Omega test. You can find more details about the actual quantifier elimination procedure used in Z3 at: “Linear Quantifier Elimination as an Abstract Decision Procedure, Nikolaj Bjørner, IJCAR 2010”.

Regarding the strategy specification language, we will eventually expose tactics for performing quantifier elimination. We are currently working on this infrastructure, more news are coming soon.

Leonardo de Moura
  • 21,065
  • 2
  • 47
  • 53
  • 1
    I'm still confused. The above paper mentioned several implementations of quantifier elimination which include Cooper's algorithm and Omega test, but I haven't seen those options exposed in Z3. Was the paper written before the quantifier elimination module was re-implemented? – pad Oct 19 '11 at 09:38
  • The old and new implementations coexisted for a short period of time. The old (containing Cooper's method and Omega test) was officially deleted on November of 2010. – Leonardo de Moura Oct 19 '11 at 16:45