これは宿題であり、私はそれに多くの問題を抱えています。私はAlloyを使ってライブラリをモデル化しています。ここでは、オブジェクトの定義は以下のとおりです。オブジェクトを1つのセットに入れるか、別のセットに入れるかを選択できます。
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
}
}
私はこれを試してみました
...しかし、それは働いていない...本は常に棚にあります。 「すべての本のために、貸し出されていなければ、それは棚に載っている。そうでなければ、それは出ている」と言いたい。
修正、例、およびヒントを高く評価します。
なぜ2つのステートメントから始めませんか?すべての本のために、本は棚に置かれているか(xor)出ている。すべての書籍について、「本は貸し出されています」は、それが外にあることを意味します。もしあなたがそれから始めれば、あなたは合成文を作りたいと思っているところから作業することができます。 – ccoakley