是否有任何函数可用于计算Z3/cvc4中以2为底的对数?

是否有任何函数可用于计算Z3/cvc4中以2为底的对数?,z3,cvc4,Z3,Cvc4,我想证明一个简化,它涉及到计算以2为底的对数。z3/cvc4中是否有任何函数可用于计算它?简单的回答是,两种工具中的整数都无法直接获得支持。对于无界整数,存在通过固定常数进行Presburger幂运算的决策过程。由此可以构造对数函数(反之亦然)。我不是专家,但我的理解是,这些问题相当复杂。有关更多信息: 我不知道这些算法的任何现有实现 对于有界整数,即[a,b]中的x,其中a和b是数字,没有特定于解算器的支持,但您可以对此进行建模。首先创建一个排序整数的skolem常量s。然后使用断言

我想证明一个简化,它涉及到计算以2为底的对数。z3/cvc4中是否有任何函数可用于计算它?

简单的回答是,两种工具中的整数都无法直接获得支持。对于无界整数,存在通过固定常数进行Presburger幂运算的决策过程。由此可以构造对数函数(反之亦然)。我不是专家,但我的理解是,这些问题相当复杂。有关更多信息:

我不知道这些算法的任何现有实现

对于有界整数,即[a,b]中的x,其中a和b是数字,没有特定于解算器的支持,但您可以对此进行建模。首先创建一个排序整数的skolem常量s。然后使用断言强制解释s:

(and (=> (2^0 <= x < 2^1)  (= s 0))
     (=> (2^1 <= x < 2^2)  (= s 1))
     ...
     (=> (2^i <= x < 2^{i+1}) (s = i)) ; for all 2^i in [a,b] and i >= 0.
)

简单的回答是,两种工具中的整数都无法直接获得支持。对于无界整数,存在通过固定常数进行Presburger幂运算的决策过程。由此可以构造对数函数(反之亦然)。我不是专家,但我的理解是,这些问题相当复杂。有关更多信息:

我不知道这些算法的任何现有实现

对于有界整数,即[a,b]中的x,其中a和b是数字,没有特定于解算器的支持,但您可以对此进行建模。首先创建一个排序整数的skolem常量s。然后使用断言强制解释s:

(and (=> (2^0 <= x < 2^1)  (= s 0))
     (=> (2^1 <= x < 2^2)  (= s 1))
     ...
     (=> (2^i <= x < 2^{i+1}) (s = i)) ; for all 2^i in [a,b] and i >= 0.
)
另外,xAlive确实有一个log2(foo)函数。 它使用类似于Tim给出的线性编码。

Alive确实有一个log2(foo)函数。
它使用的线性编码与Tim给出的编码类似。

在哪种理论中,您需要对数基2计算:位向量、整数还是实数?@Tim-位向量和整数。@Tim-在ALIVe(自动LLVM InstCombine验证器)工具中也可用吗?在哪种理论中,您需要对数基2计算:位向量、整数,或者reals?@Tim-位向量和整数。@Tim-它也可以在ALIVe(自动LLVM InstCombine验证器)工具中使用吗?谢谢你的澄清。谢谢你的澄清。
(=> (bvsgt x (_ bv0 k)))  (= (bvlshr x s) (_ bv1 k))