Z3 定义自定义量词

Z3 定义自定义量词,z3,quantifiers,Z3,Quantifiers,我试图让Z3验证一些在符号中使用迭代最大值的形式证明。例如,对于f函数(↑i:0≤ i

我试图让Z3验证一些在符号中使用迭代最大值的形式证明。例如,对于f函数(↑i:0≤ i (↑i:p(i):f(i))≤ x(∀i:p(i):f(i)≤ 十)

p是i类型上的谓词。有没有办法在Z3中定义这样一个量词

这对于我的证明是非常方便的,所以我希望它尽可能接近这个定义


谢谢

在Z3中没有直接的方法来定义这种粘合剂。Z3基于经典的简单排序一阶逻辑,其中唯一的绑定是通用的和存在的量化。特别是,Z3不允许您直接编写lambda表达式。使用包含嵌套绑定的Z3证明定理的一种方法是首先应用lambda提升,然后尝试证明得到的一阶公式

在您的示例中,您希望定义一个常量max_p_f。 具有以下特性:

forall i: p(i) => max_p_f >= f(i)
(exists i: p(i) & max_p_f = f(i)) or (forall i . not p(i))
比如(假设域上定义了上确界等) 您必须为要应用max函数的每个p,f组合创建常量

在高阶逻辑的证明助手中,定义这样的函数是标准的。 Isabelle定理证明器在映射时应用与上述类似的变换
对一级后端(E、Vamper、Z3等)的证明义务。

谢谢!我看看我能用这个做什么!