我什么时候应该在 Z3 中使用函数而不是变量?

When should I use a function instead of a variable in Z3?

我在 Z3 中编写了两个数独求解器,一次使用 81 个变量,一次使用将 x 和 y 坐标映射到 square[x][y] 中的数字的函数。 我猜也可以使用数组来代替。

python Z3 变量数组、Z3 数组或 Z3 中的函数有什么区别? 我应该什么时候使用哪个?

这个问题没有普遍适用的答案。通常有不止一种方法来模拟问题,而且在实践中永远不清楚哪一种是最好的。作为一般规则,将其保留在一个理论中是有意义的,因为这样可以避免代价高昂的跨理论推理;即,坚持使用位向量或(有界)整数,但不要尝试将整数转换为位向量(例如,int2bv 项基本上被 Z3 视为未解释)。此外,众所周知,有比 Z3 中实现的解决方案更好的解决数组问题的解决方案,因此如果它们不是真正必要的,它有助于消除它们。