(exists k) i * k > = 4 and k > 1.但是,当我试着跟踪的时候,(assert (exists ((k Int)) (and (>= (* i k) 4(当i和k都是实数时)对于整数来说,消除量词是不是更难?
我在我的系统中使用Z3 C <2>。我在我的系统中添加了一些对带有量词的整数的非线性约束。在这种情况下,使
这在我使用幻影类型时最常见(例如,表示平衡树的深度)。AFAIK GHC没有任何类型的exists量词。它只允许 (直接或使用GADT)。举个例子,我希望有这样的函数:somethingPrintable :: Int -> (exists a .(Show a) => a)fromList :: [a] ->
我目前正在使用Z3 C++ API来解决位向量上的查询。有些查询可能在顶层包含一个存在量词。
通常情况下,量词消除很简单,并且可以由Z3快速执行。但是,在量词消除返回到枚举数千个可行解决方案的情况下,我想放弃这一策略,并以其他方式处理查询。我试过用“尝试-为”策略包装‘qe’-策略,希望如果量词消除失败(比如100 if ),我会知道我最好以其他方式处理查询。不幸的是,“尝试-for”策略无法取消量词消除(对于任何时间限制)。是否有任何方法或启发式来确定量词消除是否需要