У меня есть декларация в Alloy
sig Card{}
sig ATM {card : disj set Card}
и я преобразовал его в Z3 так:
1- (declare-sort ATM)
2- (declare-fun isATM (ATM) Bool)
3- (declare-sort Card)
4- (declare-fun isCard (Card) Bool)
5- (declare-fun card (ATM Card) Bool)
6- (assert(forall ((c Card) (atm ATM)) (=> (card atm c) (and(isATM atm) (isCard c)))))
7- (declare-fun disjSetCard (ATM) Card)
8- (assert(forall ((atm ATM) (c Card)) (=> (card atm c)(= c(disjSetCard atm)))))
check sat
Вопрос в строке 7, как заставить функцию disjSetCard
возвращать (disj set)
карт вместо одной карты. Мой код правильный или есть другое решение, пожалуйста?