私は、人々のグループを説明する次の Alloy モデルを持っています。問題を単純化します。これがサンプルコードスニップです。
sig groupofpeople {
member: set person,
country: Country
}{
#person=2
}
sig people {
teamleader: Bool,
position: String
}
これで、グループに 2 人が参加しました。次に、グループ内の人々にいくつかの制限を追加したいと思います。たとえば、グループ内の 2 人には、常に 1 人のチーム リーダーと 1 人のチーム メンバーが必要です。これを行うには、次の事実を使用します。
fact {
all n: people , m: people - n {
n.teamleader not in m.teamleader
}
}
今、私は前進を妨げる問題に遭遇しました。私が探している望ましいモデルは、グループの国が「US」の場合、チームリーダーの役職は「US_TL」で、チームメンバーの役職は「US_TM」です。国が「UK」の場合、チームリーダーの役職は「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"))
}
しかし、予測には明らかに何か問題があり、モデルは正しい解を生成できません。私のモデルの問題を特定するのを手伝ってくれませんか?