Это домашнее задание, и у меня много проблем с ним. Я использую Alloy для моделирования библиотеки. Вот определения объектов:
sig Library {
patrons : set Person,
on_shelves : set Book,
}
sig Book {
authors : set Person,
loaned_to : set Person,
}
sig Person{}
Тогда нам нужно иметь факт, который гласит, что каждая книга либо на полке, либо достается покупателю. Однако они не могут быть в обоих местах.
// Every book must either be loaned to a patron or
// on the shelves.
fact AllBooksLoanedOrOnShelves {}
Я пробовал это...
fact AllBooksLoanedOrOnShelves {
some b : Book {
one b.loaned_to =>
no (b & Library.on_shelves)
else
b in Library.on_shelves
}
}
Но не получается... книги всегда на полках. хочется сказать: «Для каждой книги, если она не выдается напрокат, она стоит на полке. В противном случае она отсутствует».
Исправления, примеры и подсказки приветствуются.