mirror of
https://github.com/Z3Prover/z3
synced 2025-04-13 04:28:17 +00:00
address some of the ugliness pointed out by abandoned pull request #5008
This commit is contained in:
parent
8b5094fe73
commit
e722589810
|
@ -11,6 +11,7 @@ Usage:
|
|||
import common_z3 as CM_Z3
|
||||
"""
|
||||
|
||||
import ctypes
|
||||
from .z3 import *
|
||||
|
||||
def vset(seq, idfun=None, as_list=True):
|
||||
|
@ -140,7 +141,7 @@ def is_expr_val(v):
|
|||
|
||||
|
||||
|
||||
def get_vars(f,rs=[]):
|
||||
def get_vars(f, rs = None):
|
||||
"""
|
||||
>>> x,y = Ints('x y')
|
||||
>>> a,b = Bools('a b')
|
||||
|
@ -148,6 +149,9 @@ def get_vars(f,rs=[]):
|
|||
[x, y, a, b]
|
||||
|
||||
"""
|
||||
if rs is None:
|
||||
rs = []
|
||||
|
||||
if z3_debug():
|
||||
assert is_expr(f)
|
||||
|
||||
|
@ -174,11 +178,8 @@ def mk_var(name,vsort):
|
|||
v = Bool(name)
|
||||
elif vsort.kind() == Z3_DATATYPE_SORT:
|
||||
v = Const(name, vsort)
|
||||
|
||||
else:
|
||||
assert False, 'Cannot handle this sort (s: %sid: %d)'\
|
||||
%(vsort,vsort.kind())
|
||||
|
||||
raise TypeError(f"Cannot handle this sort (s: {vsort}id: {vsort.kind()})")
|
||||
return v
|
||||
|
||||
|
||||
|
@ -231,7 +232,6 @@ def prove(claim,assume=None,verbose=0):
|
|||
if z3_debug():
|
||||
assert not assume or is_expr(assume)
|
||||
|
||||
|
||||
to_prove = claim
|
||||
if assume:
|
||||
if z3_debug():
|
||||
|
@ -247,8 +247,6 @@ def prove(claim,assume=None,verbose=0):
|
|||
|
||||
to_prove = Implies(assume,to_prove)
|
||||
|
||||
|
||||
|
||||
if verbose >= 2:
|
||||
print('assume: ')
|
||||
print(assume)
|
||||
|
@ -316,8 +314,6 @@ def get_models(f,k):
|
|||
assert is_expr(f)
|
||||
assert k >= 1
|
||||
|
||||
|
||||
|
||||
s = Solver()
|
||||
s.add(f)
|
||||
|
||||
|
@ -325,12 +321,9 @@ def get_models(f,k):
|
|||
i = 0
|
||||
while s.check() == sat and i < k:
|
||||
i = i + 1
|
||||
|
||||
m = s.model()
|
||||
|
||||
if not m: #if m == []
|
||||
break
|
||||
|
||||
models.append(m)
|
||||
|
||||
|
||||
|
@ -461,27 +454,27 @@ def myBinOp(op,*L):
|
|||
if L:
|
||||
if len(L)==1:
|
||||
return L[0]
|
||||
else:
|
||||
if op == Z3_OP_OR:
|
||||
return Or(L)
|
||||
elif op == Z3_OP_AND:
|
||||
if op == Z3_OP_AND:
|
||||
return And(L)
|
||||
else: #IMPLIES
|
||||
return Implies(L[0],L[1])
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def myAnd(*L): return myBinOp(Z3_OP_AND,*L)
|
||||
def myOr(*L): return myBinOp(Z3_OP_OR,*L)
|
||||
def myImplies(a,b):return myBinOp(Z3_OP_IMPLIES,[a,b])
|
||||
def myAnd(*L):
|
||||
return myBinOp(Z3_OP_AND,*L)
|
||||
|
||||
def myOr(*L):
|
||||
return myBinOp(Z3_OP_OR,*L)
|
||||
|
||||
def myImplies(a,b):
|
||||
return myBinOp(Z3_OP_IMPLIES,[a,b])
|
||||
|
||||
|
||||
Iff = lambda f: And(Implies(f[0],f[1]),Implies(f[1],f[0]))
|
||||
|
||||
|
||||
|
||||
def model_str(m,as_str=True):
|
||||
"""
|
||||
Returned a 'sorted' model (so that it's easier to see)
|
||||
|
|
Loading…
Reference in a new issue