2013-05-10 6 views
1

전 집합을 보편적으로 정량화 된 의미로 설정 한 관계 및 연산으로 인코딩 집합입니다. 단항 조건 자 p (예 : v < 4, v> 4, ..)를 만족하는 요소를 선택하여 새 세트를 생성하는 세트에 대해 선택 연산자를 사용합니다. 이 연산자로 인해, 내 수식에 간단한 산술 술어가 있습니다. 이러한 식의 예 Z3 부호화 아래 주어진 - 예상대로평등 및 부등식이있는 EPR 수식

(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은 그러한 공식에 대한 의사 결정 절차입니까? 수식을 결정할 수 있도록 내 조건을 어떻게 제한해야합니까?

업데이트 - 위 공식 집합은 관계형 대수의 결합 쿼리로 표현할 수 있지만 부등식이 있습니다.

답변

2

수식은 Z3에서 지원하는 결정 가능한 조각입니다. 엄밀히 말하면, 수식어에 x < c 형태의 원자를 사용하기 때문에 공식은 EPR에 없습니다. Z3 guide (한정 기호 섹션)에는 Z3에서 결정할 수있는 많은 단편이 나와 있습니다. 이러한 조각 중 일부는 매우 비쌉니다 (예 : NEXPTIME-hard). 따라서 Z3은 합리적인 시간 내에 문제를 해결하지 못하거나 메모리가 부족할 수 있습니다.