У меня есть следующая модель Alloy, которая описывает группу людей. упростить задачу. Вот пример фрагмента кода.
sig groupofpeople {
member: set person,
country: Country
}{
#person=2
}
sig people {
teamleader: Bool,
position: String
}
Итак, теперь у нас есть два человека в группе. Далее я хочу добавить некоторые ограничения для людей в группе. Например, я хочу, чтобы у двух человек в группе всегда был один руководитель и один член команды. Для этого я использую следующий факт:
fact {
all n: people , m: people - n {
n.teamleader not in m.teamleader
}
}
Теперь я столкнулся с проблемой, которая мешает мне двигаться вперед. Желаемая модель, которую я ищу, заключается в том, что если страна группы — «США», то позиция руководителя группы — «US_TL», а позиция члена команды — «US_TM». Если страна «Великобритания», то позиция руководителя команды — «UK_TL», позиция члена команды — «UK_TM» и так далее.
Я попытался добавить что-то вроде:
all n: groupofpeople {
(n.country in US => (
n.member.position="US_TL" or
n.member.position= "US_TM")) or
(n.country in UK => (
n.member.position ="UK_TL" or
n.member.position = "UK_TM"))
}
Но с прогнозом явно что-то не так, и модель не может генерировать для меня правильные решения. Не могли бы вы помочь мне определить проблему в моей модели?