在 Z3 求解器中,有没有一种方法可以用支持算术运算的定点表示法来表示数字

In Z3 solver , is there a way to represent numbers in fixed point notation with arithmetic operations support

在 Z3 求解器中,我想使用定点表示法表示数字并执行四舍五入的算术运算。

例子:假设X、Y、Z代表定点数类型,

X[4,3]  Total 4 digits number with 3 digits after the decimal.
Y[4,2]   
Z[4,1]
Assign fixed point numbers to X, Y
X = 1.234  ( here there are total 4 digits & decimal digits are 3 )
Y = 45.67
Perform the Fixed point numbers Arithmetic operation

Z = X * Y(结果56.35678需要四舍五入赋给Z即56.36)

我了解到,Z3支持数字的浮点理论,但不支持算术运算的数字的定点理论! 有没有计划支持数字的不动点理论?如果没有,是否有任何方法可以使用 Z3 求解器中的任何现有理论和示例来实现此目的?

提前感谢您的帮助!

我从 Z3 论坛获得了有关数字不动点理论的信息。 请在下面找到 link 以获取信息

An SMT Theory of Fixed-Point Arithmetic

它通过 PySMT 提供了一个 API 来处理定点数:

SOAR Lab - PySMT - Fixed Points

您随时可以在 https://github.com/Z3Prover/z3/issues

“请求”此类功能

但 SMT 求解器通常遵循 SMTLib 倡议;因此,除非 SMTLib 提出定点数的“逻辑”,否则它不太可能实现。看这里:http://smtlib.cs.uiowa.edu/

有一个 SMTLib 讨论论坛,您可以在其中post提出您的请求并寻求指导:https://groups.google.com/forum/#!forum/smt-lib

但是,在当前功能范围内,开箱即用不支持这些类型的号码。鉴于此,我会尝试在 SMT 求解器的“外部”建模并使用常规整数库,但具体细节取决于您要投资多少以及您要处理的问题类型。 (例如,您可以用两个整数表示定点数,一个用于“整数”部分,一个用于“分数”部分,然后自己完成所有算术和舍入等。这可能需要大量工作,但鉴于目前没有对这些数字的直接支持,这可能是您最好的选择。)