定义自定义量词

时间:2012-07-06 00:56:12

标签: z3 quantifiers

我正在尝试让Z3验证一些在表示法中使用迭代最大值的正式证明。例如,对于fa函​​数(↑i:0≤i

(↑i:p(i):f(i))≤x< => (∀i:p(i):f(i)≤x)

用p表示i的类型。有没有办法在Z3中定义这样的量词?

制作我的证据非常方便,所以我希望尽可能接近这个定义。

谢谢!

1 个答案:

答案 0 :(得分:3)

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

在您的示例中,您要定义常量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))

说(假设supremum是在域上定义的,等等) 您必须为要应用max函数的每个p,f组合创建常量。

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