这是家庭作业,我遇到了很多麻烦。我正在使用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
    }
}
但它不起作用……书总是在书架上。想说,“每一本书,如果不借,就上架。否则,就出去了。”
非常感谢更正、示例和提示。