У меня есть следующая спецификация в Alloy:
sig A {}
sig Q{isA: one A}
fact {
all c1,c2:Q | c1.isA=c2.isA => c1=c2 // injective mapping
all a1:A | some c1:Q | c1.isA=a1 //surjective
}
В моих моделях вышеуказанный факт повторяется одинаково между разными сигнатурами. Я попытался выделить его как отдельный модуль, поэтому я создал модуль, как показано ниже:
module library/copy [A,Q]
fact {
all c1,c2:Q | c1.isA=c2.isA => c1=c2 // injective mapping
all a1:A | some c1:Q | c1.isA=a1 //surjective
}
Затем я пытаюсь использовать его как ниже:
module family
open library/copy [Person,QP]
sig Person {}
sig QP{isA:Person}
run {} for 4
но Alloy жалуется, что «невозможно найти имя« isA ». в модуле.
Что не так с моим подходом? и почему сплав жалуется?