z3 4.0에서 다음 코드를 사용하여 수식을 CNF로 변환했습니다.Tseitin 인코딩에서 모델 만족
(goals
(goal
; ------ snip -------
;
; Lot's of lines here
;
; ------ snap -------
:precision precise :depth 2)
)
내가 goal
다음에 표현의 각각 CNF의 한 절입니다 즉, 모든 표현이를 산출하기 위해 conjuncted해야 가정 하였다
(set-logic QF_UF)
(
set-option
:produce-models
true
)
; ------ snip -------
;
; declarations,
; and assert statement
; of "original" formula
; here.
;
; ------ snap -------
(
apply
(
then
(
!
simplify
:elim-and
true
)
tseitin-cnf
)
)
나는 다음과 같은 무언가를 얻을 실제 공식. 이 연결을 "인코딩 된"수식이라고합니다.
명백히 원래 공식과 인코딩 된 공식은 동일하지 않습니다. 인코딩 된 공식에 Tseitin 인코딩을 수행하는 새로운 변수 k!0, k!1, ...
이 포함되어 있기 때문입니다. 그러나, 나는 그들이 동등한, 또는 실제로 그들은 같은 모델 (k!i
변수를 무시)에 의해 만족하고 있다고 기대했다.
즉, 나는 (encoded formula) AND (NOT original formula)
이 만족스럽지 않을 것으로 기대하고 있었다. 불행하게도 이것은 사실이 아닌 것 같습니다. 이 수표가 실제로 sat
을 반환하는 반례가 있습니다.
z3의 버그입니까? 잘못 사용하고 있습니까? 아니면 내 가정이 유효하지 않습니까?
를 사용합니다. 예제를 어딘가에 게시 할 수 있습니까? 전체 예제를 보지 않고도 어떤 일이 진행되고 있는지보기가 어렵습니다. –