Получение подмножеств подписей в Alloy

#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) } помощью невероятно полезно для решения множества проблем.