|
|
1
2
位向量逻辑总是可判定的;因此,虽然事情可能需要很长时间,但z3可以解决所有位向量问题。当然,如果所涉及的位向量大小很大,那么解算器可能需要非常长的时间,或者在找到解决方案之前耗尽内存。乘法和加密算法是典型的例子,随着位大小的增加,这些算法总是会造成困难。 另一方面,我们有非线性整数问题。他们没有决策程序,虽然z3“尽了最大努力”,但由于理论原因,这些问题通常超出了范围。您可以在堆栈溢出帖子中找到许多这样的实例。这是最近的一个: Z3 returns model not available |
|
2
1
如果你只是想看到Z3“非常努力”,你可以尝试数字分解。
或者,构建一个简单的哈希函数并获得预映像:
我所做的就是看看怎么做
SHA-1
定义了。然后,我实现了一个简单的版本。SHA-1由非常简单的操作组成,如移位、加法、异或。从这个模板中,您可以构造一个简单的哈希函数来进行测试。那么你说
为了娱乐您,我将当场编写一个简单的哈希函数:
这实际上是一个功能性哈希实现(但不安全)。您可以使用操作、轮数和位向量大小。你可以断言
例如,您还可以应用更奇特的约束
我个人觉得这种能力非常迷人。 |