1

I am using the Z3 solver with Python API to tackle a Circuit SAT problem. It consists of many Xor expressions with up to 21 inputs and three-input And expressions. Z3 is able to solve my smaller examples but does not cope with the bigger ones.

Rather than creating the Solver object with

s = Solver()

I tried to optimize the solver tactics like in

t = Then('simplify', 'symmetry-reduce', 'aig', 'tseitin-cnf', 'sat' )
s = t.solver()

I got the tactics list via describe_tactics()

Unfortunately, my attempts have not been fruitful. The default sequence of tactics seems to do a pretty good job. The tactics tutorial previously available in rise4fun is no longer accessible.

Another attempt - without visible effect - was to set the phase parameter, as I am expecting the majority of my variables to have false values. (cf related post)

set_option("sat.phase", "always-false")

What sequence of tactics is recommended for Circuit SAT problems?

Community
  • 1
  • 1
Axel Kemper
  • 10,544
  • 2
  • 31
  • 54
  • There are no "recommended" tactic for this type of problem and I suspect it will depend heavily on what exactly appears in the problem, e.g., large numbers of xor constraints can make things very difficult to solve. Z3py is not available on rise4fun anymore, the the (smt2-) strategies is still available here: http://rise4fun.com/Z3/tutorial/strategies – Christoph Wintersteiger Nov 09 '15 at 10:42

0 Answers0