具有平等和不平等的EPR公式

时间:2013-05-10 22:54:56

标签: logic z3 smt decidable

我将集合编码为关系和操作集合作为普遍量化的含义。我通过选择满足一元谓词p的元素(例如:v< 4,v> 4,...)来生成新集合的集合上有选择运算符。由于这个运算符,我的公式中有简单的算术谓词。下面给出了这种公式的Z3编码示例 -

(set-option :mbqi true)
(set-option :model-compact true)                                                                                 

;; Rmem and Rmem1 are sets of Int                                                                                 
(declare-fun Rmem (Int) Bool)
(declare-fun Rmem1 (Int) Bool)
(declare-const v Int)
(declare-const v1 Int)
(declare-const x Int) 
;; Rmem = Rmem1 U {x}
(assert (forall ((n Int)) (= (Rmem n)(or (Rmem1 n) (= n x)))))
;; Select(m<v1) from Rmem1 = {}
(assert (forall ((m Int)) (= false (and (Rmem1 m) (< m v1)))))
(assert (or (< v x) (= v x)))
(assert (or (< v v) (= v v1)))

(assert (exists ((q Int)) (and (Rmem q) (< q v))))
(check-sat)
(get-model)

正如预期的那样,Z3返回UNSAT以获得上述公式。但是,我的问题是 -

  1. 鉴于我可以用prenex普通形式编写我的公式,它还在EPR课吗?
  2. 这些公式是否可判定? z3是这种公式的决策程序吗?我应该如何约束我的谓词,使得公式是可判定的?
  3. 更新 - 上述公式集可以表示为关系代数中的联合查询,但具有不等式。

1 个答案:

答案 0 :(得分:2)

您的公式是Z3支持的可判定片段。从技术上讲,该公式不在EPR中,因为您在量词中使用x < c形式的原子。 Z3 guide(量词部分)描述了可以由Z3决定的许多片段。注意,这些片段中的一些非常昂贵(例如,NEXPTIME-hard)。因此,Z3可能仍然无法在合理的时间内解决它们,或者内存不足。