#subset #modeling #alloy #requirements
#подмножество #моделирование #сплав #требования
Вопрос:
Мне было интересно, есть ли способ извлечь подмножество набора в данной подписи в Alloy. Извлеченный набор затем будет использоваться при определении некоторых фактов модели.
Предположим, что следующая модель:
abstract sig Status{}
one sig Status1 extends Status{}
one sig Status2 extends Status{}
sig A {
status: one Status
}
sig B {
setA: set A
}
fun SubsetOfSetAinB [b: B] : set A {
//have some kind of operation here
//that returns a subset of b.setA where b.setA.status in Status1
}
Спасибо за ваше время.
Ответ №1:
Вы должны быть в состоянии получить это с помощью заданного пересечения, например b.setA amp; Status1.~status
.
Комментарии:
1. это решение является наиболее оптимальным
Ответ №2:
Вы уже сами дали ответ :-). Вам не хватило всего 5 символов:
fun SubsetOfSetAinB [b: B] : set A {
{ x : b.setA | b.setA.status in Status1 }
}
Перечисление с { vars | test(vars) }
помощью невероятно полезно для решения множества проблем.