Во-первых, то, как вы ограничили breakfastfree
и breakfastReserved
, всегда будет и тем и другим.Вам нужно использовать lone
(без объекта или объекта):
sig breakFast {
breakfastfree:lone Free,
breakfastReserved:lone Reserved
}
Затем вы можете написать факт:
fact{
all t: Table | let breakf = t.breakfast |
#(breakf.breakfastfree+breakf.breakfastReserved) = 1
}
или, проще, просто:
sig breakFast {
breakfastfree: lone Free,
breakfastReserved: lone Reserved
}
{
#(breakfastfree+breakfastReserved) = 1
}
Тем не менее, я бы посоветовал вам использовать что-то вроде
sig breakFast {
breakfastReserved: lone Reserved
}
и относиться к no breakfastReserved
как к «свободному».Тебе больше не нужны никакие факты.