저는 Z3에서 (배열을 사용하여 정의 된) 쌍 쌍 사이의 부분 관계 (아래 코드에서 C라고 함)를 정의하려고합니다. 반사성, transitivity 및 antisymmetry를 정의하는 3 assert를 썼지 만 Z3은 "unknown"을 반환하고 나는 그 이유를 이해하지 못합니다.parthood definition in Z3
(define-sort Set() (Array Int Bool))
(declare-rel C (Set Set))
; reflexivity
(assert (forall ((X Set)) (C X X)))
; transitive
(assert (forall ((X Set)(Y Set)(Z Set))
(=>
(and (C X Y) (C Y Z))
(C X Z)
)
))
; antisymmetric
(assert (forall ((X Set)(Y Set))
(=>
(and (C X Y) (C Y X))
(= X Y)
)
))
(check-sat)
반 대칭성이 다른 2 개의 어설 션 중 하나로 고려 될 때만 알 수 없음이 반환된다는 것을 알아 챘습니다. 반 대칭성을 고려한 경우 Z3은 알 수없는 값을 반환하지 않습니다. 반 대칭성이없는 반사성과 과도 성을 생각해 보면 마찬가지입니다.