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

Logic 具有等式和不等式的EPR公式,logic,z3,smt,decidable,Logic,Z3,Smt,Decidable,我将集合编码为关系,将集合上的运算编码为普遍量化的含义。我有一个集合上的选择操作符,它通过选择满足一元谓词p(例如:v4,…)的元素来生成新的集合。由于这个运算符,我的公式中有简单的算术谓词。下面给出了这种公式的示例Z3编码- (set-option :mbqi true) (set-option :model-compact true)

我将集合编码为关系,将集合上的运算编码为普遍量化的含义。我有一个集合上的选择操作符,它通过选择满足一元谓词p(例如:v4,…)的元素来生成新的集合。由于这个运算符,我的公式中有简单的算术谓词。下面给出了这种公式的示例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)
(设置选项:mbqi true)
(设置选项:model compact true)
;; Rmem和Rmem1是Int的集合
(Rmem(Int)布尔)
(1(整数)布尔)
(声明常量v Int)
(声明常量v1 Int)
(声明常量x Int)
;; Rmem=rmem1u{x}
(assert(forall((n Int))(=(Rmem-n)(或(Rmem1-n)(=nx‘‘)’))

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