Z3
Public Member Functions | Data Fields
Optimize Class Reference
+ Inheritance diagram for Optimize:

Public Member Functions

def __init__ (self, ctx=None)
 
def __deepcopy__ (self, memo={})
 
def __del__ (self)
 
def set (self, *args, **keys)
 
def help (self)
 
def param_descrs (self)
 
def assert_exprs (self, *args)
 
def add (self, *args)
 
def __iadd__ (self, fml)
 
def assert_and_track (self, a, p)
 
def add_soft (self, arg, weight="1", id=None)
 
def maximize (self, arg)
 
def minimize (self, arg)
 
def push (self)
 
def pop (self)
 
def check (self, *assumptions)
 
def reason_unknown (self)
 
def model (self)
 
def unsat_core (self)
 
def lower (self, obj)
 
def upper (self, obj)
 
def lower_values (self, obj)
 
def upper_values (self, obj)
 
def from_file (self, filename)
 
def from_string (self, s)
 
def assertions (self)
 
def objectives (self)
 
def __repr__ (self)
 
def sexpr (self)
 
def statistics (self)
 
- Public Member Functions inherited from Z3PPObject
def use_pp (self)
 

Data Fields

 ctx
 
 optimize
 

Detailed Description

Optimize API provides methods for solving using objective functions and weighted soft constraints

Definition at line 7414 of file z3py.py.

Constructor & Destructor Documentation

◆ __init__()

def __init__ (   self,
  ctx = None 
)

Definition at line 7417 of file z3py.py.

7417  def __init__(self, ctx=None):
7418  self.ctx = _get_ctx(ctx)
7419  self.optimize = Z3_mk_optimize(self.ctx.ref())
7420  Z3_optimize_inc_ref(self.ctx.ref(), self.optimize)
7421 

◆ __del__()

def __del__ (   self)

Definition at line 7425 of file z3py.py.

7425  def __del__(self):
7426  if self.optimize is not None and self.ctx.ref() is not None:
7427  Z3_optimize_dec_ref(self.ctx.ref(), self.optimize)
7428 

Member Function Documentation

◆ __deepcopy__()

def __deepcopy__ (   self,
  memo = {} 
)

Definition at line 7422 of file z3py.py.

7422  def __deepcopy__(self, memo={}):
7423  return Optimize(self.optimize, self.ctx)
7424 

◆ __iadd__()

def __iadd__ (   self,
  fml 
)

Definition at line 7459 of file z3py.py.

7459  def __iadd__(self, fml):
7460  self.add(fml)
7461  return self
7462 

◆ __repr__()

def __repr__ (   self)
Return a formatted string with all added rules and constraints.

Definition at line 7586 of file z3py.py.

7586  def __repr__(self):
7587  """Return a formatted string with all added rules and constraints."""
7588  return self.sexpr()
7589 

◆ add()

def add (   self,
args 
)
Assert constraints as background axioms for the optimize solver. Alias for assert_expr.

Definition at line 7455 of file z3py.py.

7455  def add(self, *args):
7456  """Assert constraints as background axioms for the optimize solver. Alias for assert_expr."""
7457  self.assert_exprs(*args)
7458 

Referenced by Optimize.__iadd__().

◆ add_soft()

def add_soft (   self,
  arg,
  weight = "1",
  id = None 
)
Add soft constraint with optional weight and optional identifier.
   If no weight is supplied, then the penalty for violating the soft constraint
   is 1.
   Soft constraints are grouped by identifiers. Soft constraints that are
   added without identifiers are grouped by default.

Definition at line 7492 of file z3py.py.

7492  def add_soft(self, arg, weight = "1", id = None):
7493  """Add soft constraint with optional weight and optional identifier.
7494  If no weight is supplied, then the penalty for violating the soft constraint
7495  is 1.
7496  Soft constraints are grouped by identifiers. Soft constraints that are
7497  added without identifiers are grouped by default.
7498  """
7499  if _is_int(weight):
7500  weight = "%d" % weight
7501  elif isinstance(weight, float):
7502  weight = "%f" % weight
7503  if not isinstance(weight, str):
7504  raise Z3Exception("weight should be a string or an integer")
7505  if id is None:
7506  id = ""
7507  id = to_symbol(id, self.ctx)
7508  v = Z3_optimize_assert_soft(self.ctx.ref(), self.optimize, arg.as_ast(), weight, id)
7509  return OptimizeObjective(self, v, False)
7510 

◆ assert_and_track()

def assert_and_track (   self,
  a,
  p 
)
Assert constraint `a` and track it in the unsat core using the Boolean constant `p`.

If `p` is a string, it will be automatically converted into a Boolean constant.

>>> x = Int('x')
>>> p3 = Bool('p3')
>>> s = Optimize()
>>> s.assert_and_track(x > 0,  'p1')
>>> s.assert_and_track(x != 1, 'p2')
>>> s.assert_and_track(x < 0,  p3)
>>> print(s.check())
unsat
>>> c = s.unsat_core()
>>> len(c)
2
>>> Bool('p1') in c
True
>>> Bool('p2') in c
False
>>> p3 in c
True

Definition at line 7463 of file z3py.py.

7463  def assert_and_track(self, a, p):
7464  """Assert constraint `a` and track it in the unsat core using the Boolean constant `p`.
7465 
7466  If `p` is a string, it will be automatically converted into a Boolean constant.
7467 
7468  >>> x = Int('x')
7469  >>> p3 = Bool('p3')
7470  >>> s = Optimize()
7471  >>> s.assert_and_track(x > 0, 'p1')
7472  >>> s.assert_and_track(x != 1, 'p2')
7473  >>> s.assert_and_track(x < 0, p3)
7474  >>> print(s.check())
7475  unsat
7476  >>> c = s.unsat_core()
7477  >>> len(c)
7478  2
7479  >>> Bool('p1') in c
7480  True
7481  >>> Bool('p2') in c
7482  False
7483  >>> p3 in c
7484  True
7485  """
7486  if isinstance(p, str):
7487  p = Bool(p, self.ctx)
7488  _z3_assert(isinstance(a, BoolRef), "Boolean expression expected")
7489  _z3_assert(isinstance(p, BoolRef) and is_const(p), "Boolean expression expected")
7490  Z3_optimize_assert_and_track(self.ctx.ref(), self.optimize, a.as_ast(), p.as_ast())
7491 

◆ assert_exprs()

def assert_exprs (   self,
args 
)
Assert constraints as background axioms for the optimize solver.

Definition at line 7443 of file z3py.py.

7443  def assert_exprs(self, *args):
7444  """Assert constraints as background axioms for the optimize solver."""
7445  args = _get_args(args)
7446  s = BoolSort(self.ctx)
7447  for arg in args:
7448  if isinstance(arg, Goal) or isinstance(arg, AstVector):
7449  for f in arg:
7450  Z3_optimize_assert(self.ctx.ref(), self.optimize, f.as_ast())
7451  else:
7452  arg = s.cast(arg)
7453  Z3_optimize_assert(self.ctx.ref(), self.optimize, arg.as_ast())
7454 

Referenced by Optimize.add().

◆ assertions()

def assertions (   self)
Return an AST vector containing all added constraints.

Definition at line 7578 of file z3py.py.

7578  def assertions(self):
7579  """Return an AST vector containing all added constraints."""
7580  return AstVector(Z3_optimize_get_assertions(self.ctx.ref(), self.optimize), self.ctx)
7581 

◆ check()

def check (   self,
assumptions 
)
Check satisfiability while optimizing objective functions.

Definition at line 7527 of file z3py.py.

7527  def check(self, *assumptions):
7528  """Check satisfiability while optimizing objective functions."""
7529  assumptions = _get_args(assumptions)
7530  num = len(assumptions)
7531  _assumptions = (Ast * num)()
7532  for i in range(num):
7533  _assumptions[i] = assumptions[i].as_ast()
7534  return CheckSatResult(Z3_optimize_check(self.ctx.ref(), self.optimize, num, _assumptions))
7535 

◆ from_file()

def from_file (   self,
  filename 
)
Parse assertions and objectives from a file

Definition at line 7570 of file z3py.py.

7570  def from_file(self, filename):
7571  """Parse assertions and objectives from a file"""
7572  Z3_optimize_from_file(self.ctx.ref(), self.optimize, filename)
7573 

◆ from_string()

def from_string (   self,
  s 
)
Parse assertions and objectives from a string

Definition at line 7574 of file z3py.py.

7574  def from_string(self, s):
7575  """Parse assertions and objectives from a string"""
7576  Z3_optimize_from_string(self.ctx.ref(), self.optimize, s)
7577 

◆ help()

def help (   self)
Display a string describing all available options.

Definition at line 7435 of file z3py.py.

7435  def help(self):
7436  """Display a string describing all available options."""
7437  print(Z3_optimize_get_help(self.ctx.ref(), self.optimize))
7438 

◆ lower()

def lower (   self,
  obj 
)

Definition at line 7550 of file z3py.py.

7550  def lower(self, obj):
7551  if not isinstance(obj, OptimizeObjective):
7552  raise Z3Exception("Expecting objective handle returned by maximize/minimize")
7553  return obj.lower()
7554 

◆ lower_values()

def lower_values (   self,
  obj 
)

Definition at line 7560 of file z3py.py.

7560  def lower_values(self, obj):
7561  if not isinstance(obj, OptimizeObjective):
7562  raise Z3Exception("Expecting objective handle returned by maximize/minimize")
7563  return obj.lower_values()
7564 

◆ maximize()

def maximize (   self,
  arg 
)
Add objective function to maximize.

Definition at line 7511 of file z3py.py.

7511  def maximize(self, arg):
7512  """Add objective function to maximize."""
7513  return OptimizeObjective(self, Z3_optimize_maximize(self.ctx.ref(), self.optimize, arg.as_ast()), True)
7514 

◆ minimize()

def minimize (   self,
  arg 
)
Add objective function to minimize.

Definition at line 7515 of file z3py.py.

7515  def minimize(self, arg):
7516  """Add objective function to minimize."""
7517  return OptimizeObjective(self, Z3_optimize_minimize(self.ctx.ref(), self.optimize, arg.as_ast()), False)
7518 

◆ model()

def model (   self)
Return a model for the last check().

Definition at line 7540 of file z3py.py.

7540  def model(self):
7541  """Return a model for the last check()."""
7542  try:
7543  return ModelRef(Z3_optimize_get_model(self.ctx.ref(), self.optimize), self.ctx)
7544  except Z3Exception:
7545  raise Z3Exception("model is not available")
7546 

Referenced by FuncInterp.translate().

◆ objectives()

def objectives (   self)
returns set of objective functions

Definition at line 7582 of file z3py.py.

7582  def objectives(self):
7583  """returns set of objective functions"""
7584  return AstVector(Z3_optimize_get_objectives(self.ctx.ref(), self.optimize), self.ctx)
7585 

◆ param_descrs()

def param_descrs (   self)
Return the parameter description set.

Definition at line 7439 of file z3py.py.

7439  def param_descrs(self):
7440  """Return the parameter description set."""
7441  return ParamDescrsRef(Z3_optimize_get_param_descrs(self.ctx.ref(), self.optimize), self.ctx)
7442 

◆ pop()

def pop (   self)
restore to previously created backtracking point

Definition at line 7523 of file z3py.py.

7523  def pop(self):
7524  """restore to previously created backtracking point"""
7525  Z3_optimize_pop(self.ctx.ref(), self.optimize)
7526 

◆ push()

def push (   self)
create a backtracking point for added rules, facts and assertions

Definition at line 7519 of file z3py.py.

7519  def push(self):
7520  """create a backtracking point for added rules, facts and assertions"""
7521  Z3_optimize_push(self.ctx.ref(), self.optimize)
7522 

◆ reason_unknown()

def reason_unknown (   self)
Return a string that describes why the last `check()` returned `unknown`.

Definition at line 7536 of file z3py.py.

7536  def reason_unknown(self):
7537  """Return a string that describes why the last `check()` returned `unknown`."""
7538  return Z3_optimize_get_reason_unknown(self.ctx.ref(), self.optimize)
7539 

◆ set()

def set (   self,
args,
**  keys 
)
Set a configuration option. The method `help()` return a string containing all available options.

Definition at line 7429 of file z3py.py.

7429  def set(self, *args, **keys):
7430  """Set a configuration option. The method `help()` return a string containing all available options.
7431  """
7432  p = args2params(args, keys, self.ctx)
7433  Z3_optimize_set_params(self.ctx.ref(), self.optimize, p.params)
7434 

◆ sexpr()

def sexpr (   self)
Return a formatted string (in Lisp-like format) with all added constraints. We say the string is in s-expression format.

Definition at line 7590 of file z3py.py.

7590  def sexpr(self):
7591  """Return a formatted string (in Lisp-like format) with all added constraints. We say the string is in s-expression format.
7592  """
7593  return Z3_optimize_to_string(self.ctx.ref(), self.optimize)
7594 

Referenced by Optimize.__repr__().

◆ statistics()

def statistics (   self)
Return statistics for the last check`.

Definition at line 7595 of file z3py.py.

7595  def statistics(self):
7596  """Return statistics for the last check`.
7597  """
7598  return Statistics(Z3_optimize_get_statistics(self.ctx.ref(), self.optimize), self.ctx)
7599 
7600 
7601 
7602 

◆ unsat_core()

def unsat_core (   self)

Definition at line 7547 of file z3py.py.

7547  def unsat_core(self):
7548  return AstVector(Z3_optimize_get_unsat_core(self.ctx.ref(), self.optimize), self.ctx)
7549 

◆ upper()

def upper (   self,
  obj 
)

Definition at line 7555 of file z3py.py.

7555  def upper(self, obj):
7556  if not isinstance(obj, OptimizeObjective):
7557  raise Z3Exception("Expecting objective handle returned by maximize/minimize")
7558  return obj.upper()
7559 

◆ upper_values()

def upper_values (   self,
  obj 
)

Definition at line 7565 of file z3py.py.

7565  def upper_values(self, obj):
7566  if not isinstance(obj, OptimizeObjective):
7567  raise Z3Exception("Expecting objective handle returned by maximize/minimize")
7568  return obj.upper_values()
7569 

Field Documentation

◆ ctx

ctx

◆ optimize

optimize
Z3_optimize_pop
void Z3_API Z3_optimize_pop(Z3_context c, Z3_optimize d)
Backtrack one level.
z3py.UserPropagateBase.__init__
def __init__(self, s, ctx=None)
Definition: z3py.py:10597
Z3_optimize_assert_and_track
void Z3_API Z3_optimize_assert_and_track(Z3_context c, Z3_optimize o, Z3_ast a, Z3_ast t)
Assert tracked hard constraint to the optimization context.
Z3_optimize_dec_ref
void Z3_API Z3_optimize_dec_ref(Z3_context c, Z3_optimize d)
Decrement the reference counter of the given optimize context.
Z3_optimize_get_reason_unknown
Z3_string Z3_API Z3_optimize_get_reason_unknown(Z3_context c, Z3_optimize d)
Retrieve a string that describes the last status returned by Z3_optimize_check.
z3::range
expr range(expr const &lo, expr const &hi)
Definition: z3++.h:3518
Z3_optimize_from_string
void Z3_API Z3_optimize_from_string(Z3_context c, Z3_optimize o, Z3_string s)
Parse an SMT-LIB2 string with assertions, soft constraints and optimization objectives....
Z3_optimize_get_objectives
Z3_ast_vector Z3_API Z3_optimize_get_objectives(Z3_context c, Z3_optimize o)
Return objectives on the optimization context. If the objective function is a max-sat objective it is...
Z3_optimize_get_statistics
Z3_stats Z3_API Z3_optimize_get_statistics(Z3_context c, Z3_optimize d)
Retrieve statistics information from the last call to Z3_optimize_check.
Z3_optimize_get_assertions
Z3_ast_vector Z3_API Z3_optimize_get_assertions(Z3_context c, Z3_optimize o)
Return the set of asserted formulas on the optimization context.
Z3_optimize_get_param_descrs
Z3_param_descrs Z3_API Z3_optimize_get_param_descrs(Z3_context c, Z3_optimize o)
Return the parameter description set for the given optimize object.
z3py.UserPropagateBase.pop
def pop(self, num_scopes)
Definition: z3py.py:10662
z3py.to_symbol
def to_symbol(s, ctx=None)
Definition: z3py.py:109
Z3_optimize_assert_soft
unsigned Z3_API Z3_optimize_assert_soft(Z3_context c, Z3_optimize o, Z3_ast a, Z3_string weight, Z3_symbol id)
Assert soft constraint to the optimization context.
Z3_optimize_maximize
unsigned Z3_API Z3_optimize_maximize(Z3_context c, Z3_optimize o, Z3_ast t)
Add a maximization constraint.
Z3_optimize_to_string
Z3_string Z3_API Z3_optimize_to_string(Z3_context c, Z3_optimize o)
Print the current context as a string.
z3py.UserPropagateBase.push
def push(self)
Definition: z3py.py:10659
z3py.UserPropagateBase.__del__
def __del__(self)
Definition: z3py.py:10622
z3py.is_const
def is_const(a)
Definition: z3py.py:1182
Z3_optimize_check
Z3_lbool Z3_API Z3_optimize_check(Z3_context c, Z3_optimize o, unsigned num_assumptions, Z3_ast const assumptions[])
Check consistency and produce optimal values.
Z3_optimize_assert
void Z3_API Z3_optimize_assert(Z3_context c, Z3_optimize o, Z3_ast a)
Assert hard constraint to the optimization context.
Z3_optimize_from_file
void Z3_API Z3_optimize_from_file(Z3_context c, Z3_optimize o, Z3_string s)
Parse an SMT-LIB2 file with assertions, soft constraints and optimization objectives....
Z3_optimize_set_params
void Z3_API Z3_optimize_set_params(Z3_context c, Z3_optimize o, Z3_params p)
Set parameters on optimization context.
Z3_mk_optimize
Z3_optimize Z3_API Z3_mk_optimize(Z3_context c)
Create a new optimize context.
z3py.Bool
def Bool(name, ctx=None)
Definition: z3py.py:1588
Z3_optimize_push
void Z3_API Z3_optimize_push(Z3_context c, Z3_optimize d)
Create a backtracking point.
Z3_optimize_get_unsat_core
Z3_ast_vector Z3_API Z3_optimize_get_unsat_core(Z3_context c, Z3_optimize o)
Retrieve the unsat core for the last Z3_optimize_check The unsat core is a subset of the assumptions ...
Z3_optimize_get_model
Z3_model Z3_API Z3_optimize_get_model(Z3_context c, Z3_optimize o)
Retrieve the model for the last Z3_optimize_check.
z3py.UserPropagateBase.add
def add(self, e)
Definition: z3py.py:10668
z3py.args2params
def args2params(arguments, keywords, ctx=None)
Definition: z3py.py:5111
z3py.BoolSort
def BoolSort(ctx=None)
Definition: z3py.py:1553
Z3_optimize_get_help
Z3_string Z3_API Z3_optimize_get_help(Z3_context c, Z3_optimize t)
Return a string containing a description of parameters accepted by optimize.
Z3_optimize_minimize
unsigned Z3_API Z3_optimize_minimize(Z3_context c, Z3_optimize o, Z3_ast t)
Add a minimization constraint.
Z3_optimize_inc_ref
void Z3_API Z3_optimize_inc_ref(Z3_context c, Z3_optimize d)
Increment the reference counter of the given optimize context.