如何在Z3中表示整数无穷大?

时间:2015-09-15 21:47:27

标签: z3

我需要能够比较两个整数表达式,它们可能包括文字整数,加法,一元否定,整数常量和无穷大,并决定它们之间的不等式是否可以满足。这是一个更大的程序的一部分,所以我没有办法提前知道这些表达式是什么样的。

我考虑过定义一个整数常量并让它取任何值,但后来我意识到Infinity< 5会令人满意。

我考虑过定义一个常量并进行一个普遍量化的断言,它大于所有整数,但我不知道它应该说是什么。如果我告诉Z3我的无穷大的常数是整数,我想它可能会很高兴地试着找到我最大的整数!我很确定这不会以我想要的方式结束。

1 个答案:

答案 0 :(得分:0)

我将创建一个由整数和布尔值组成的复合类型,该布尔值表示此特定值是否为无穷大。然后,您需要在此定义算术。例如,如果其中一个操作数是无穷大,那么加法的结果也是无穷大。否则,它是整数的实际总和。比较将以类似的方式定义(基于案例)。

无需在Z3系统中实际创建类型。只需在代码中的int / bool对中创建值。一些辅助函数可以做到这一点。

这样做可能会给Z3带来更难的问题,甚至可能会升级你正在使用的逻辑。