我们可以通过z3实项的分子/分母表示来限制它的值吗?

我们可以通过z3实项的分子/分母表示来限制它的值吗?,z3,Z3,在z3中,实数项的值由两个整数的除表示:分子和分母。我经常发现实际值(作为z3问题的解决方案)的分子和分母非常大,如下所示: 29176049827299110215982818410792217459/804618286561124267999713087296957062500 -5568952981581824123215411102649719164259083/4272120792496289300944476637003193523343750 对于具有较小分子和分母的替代解决方案(

在z3中,实数项的值由两个整数的除表示:分子和分母。我经常发现实际值(作为z3问题的解决方案)的分子和分母非常大,如下所示:

29176049827299110215982818410792217459/804618286561124267999713087296957062500 -5568952981581824123215411102649719164259083/4272120792496289300944476637003193523343750


对于具有较小分子和分母的替代解决方案(同一问题),这些实变量通常有其他赋值。我只是想知道我是否可以限制分子和分母(例如,关于数字的数量)。实际上,我正在为此寻找一个z3功能。提前感谢您的回答。

一般来说,Z3中的实数表示为分子和分母的比率是不正确的。这将限制Z3为理性。对于Z3返回无理数的示例,请尝试:

(declare-const x Real)
(assert (= (* x x) 2.0))
(check-sat)
(get-model)

也就是说,对于许多具体问题,Z3确实会以实数的理性表示来响应。我认为这经常发生在你的问题可能被重新规范化并用整数来解决的时候。在这些情况下,您可以尝试使用与中的答案类似的技术,强迫您的问题在理性中得到解决。然后,你可以断言你的数字有一个分子
p
,对于某些常数
p_max

,Z3中没有任何用于有界复杂度模型的工具。这是一个有趣的观点,但我们没有一种方法来控制对具有小数值表示的模型的搜索。谢谢您的回复。我只是想知道你是否愿意添加这个特性。另外两条评论:(1)如果你在你的模型中添加装饰性的限制,特别是混合实数和整数运算,你可能会导致Z3失败。(2) 如果您只想得到更合理的结果,并且可以使用十进制近似值,则可以使用
(set option:pp.decimal true)
启动.smt2文件。