Тактика ctx-solver-simplify
работает только для логических переменных, поэтому как мне поступить с переменными в конечной области (например, какую тактику использовать)? Например, если z
может принимать только 3 значения 0,1,2
, то как упростить Or(z==0,z==1,z==2)
до true
?
Кроме того, даже для логических выражений тактика ctx-solver-simplify
не упрощается полностью. Например:
x,y,z = z3.Bools('x y z')
c1 = z3.And(x==True,y==True,z==True)
c2 = z3.And(x==True,y==True,z==False)
c3 = z3.And(x==True,y==False,z==True)
c4 = z3.And(x==True,y==True,z==False)
z3.Tactic('ctx-solver-simplify')(z3.Or([c1,c2,c3,c4]))
[[Or(And(x, z), And(x == True, y == True, z == False))]]
Как мне получить что-то вроде And(x, Or(z, y))
?
Спасибо !