z3python:没有异或运算符?

use*_*703 2 z3 z3py

我在 Z3 python 中有这个代码:

x = Bool('x')
y = Bool('y')
z = Bool('z')
z == (x xor y)
s = Solver()
s.add(z == True)
print s.check()
Run Code Online (Sandbox Code Playgroud)

但是此代码在运行时报告以下错误:

c.py(4): error: invalid syntax
Run Code Online (Sandbox Code Playgroud)

如果我替换xorand,则没有问题。所以这意味着不支持异或?

Leo*_*ura 6

你应该使用Xor(a, b). 此外,要创建表示公式 的 Z3 表达式a and b,我们必须使用And(a, b). 在 Python 中,我们不能重载运算符andor。这是一个示例Xor可在rise4fun 在线获得)。

x = Bool('x')
y = Bool('y')
z = Xor(x, y)
s = Solver()
s.add(z)
print s.check()
print s.model()
Run Code Online (Sandbox Code Playgroud)

  • (x 和 y) 没有构建新的 Z3 表达式。它没有做你想做的事。在Python中,(x and y)计算x,如果返回False,则结果为False。否则,它返回评估 y 的结果。因此,当 x 和 y 是 Z3 表达式时,(x 和 y) 的计算结果为 Z3 表达式 y。 (2认同)