像 SMT-LIB 2 中的 C 一样截断整数

Truncate Integers Like C in SMT-LIB 2

我正在将符号执行引擎的符号输出以 SMT-LIB 2 格式传递给 Z3。我需要它来截断整数,就像它们在 C 中一样。所以 (assert (= 1 (/ 3 2))) 将是 SAT.

这些公式也可能有浮点数,因此并非所有除法都应截断。只是整数除法。

如何做到这一点?

整数除法简称为div:

(assert (= 1 (div 3 2)))
(check-sat)

这会产生:

sat