如何在 z3py 中声明一个自然数变量?

How to declare a natural number variable in z3py?

我想在我的约束中推理自然数。

我知道我可以做类似的事情:

x = Int('x')然后添加一个约束即x >= 0。但是有没有更好的方法来做到这一点,这样我就不必在每次声明变量时都添加额外的约束?

不幸的是,没有“好的”方法来模拟自然。最好的办法是根据需要添加 >= 0 约束。请注意,您需要在每次数学运算后执行此操作,尤其是减法。

如果机器算法是可以接受的(即,对某些 n 取模 2^n;通常是 n=32n=64),那么 bit-vectors 走得更远。请注意,在 SMTLib 中 bit-vectors 是无符号的,只有操作是无符号的。因此,您无需一直设置 >= 0 形式的额外约束即可逃脱。请参阅 Is there an UnsignedIntSort in Z3? 进行讨论。