Следующий код Сплав говорит, что каждый номер имеет набор ключей:Как можно ограничить сплаймом множество внутри своего подмножества?
sig Key {}
sig Room {
keys: set Key
}
keys
отношение должно быть ограничено. Как бы то ни было, он допускает такие случаи, как: ключ K1 используется в кучке комнат. Ой! Мы этого не хотим. Мы хотим, чтобы каждый ключ использовался только с одной комнатой. Вот график, иллюстрирующий вселенную действительных случаев (и подмножество экземпляров, что мы на самом деле хотим, чтобы):
Множество случаев, что мы на самом деле хотим красиво выражается этот сплав код:
Room lone -> Key
Экземпляры для этого кода сплава изображены на приведенном выше рисунке небольшим кружком.
Итак, как мы ограничиваем keys
? Один из ответов таков: создать факт сплава, который говорит следующее:
keys in Room lone -> Key
Подумайте, что это графически говорит. Он говорит, что большой круг должен находиться внутри маленького круга (см. Ниже). Разве это не странно? Как круг может быть внутри своего круга? Может ли кто-нибудь дать мне интуицию об этом, пожалуйста? Кажется странным.
Отлично! Спасибо @Aleksandar Milicevic! –