Subset 在Alloy中获取签名子集

Subset 在Alloy中获取签名子集,subset,modeling,alloy,requirements,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 {

我想知道是否有一种方法可以提取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
}


谢谢您的时间。

您应该可以通过设置交叉点,如b.setA和Status1。~状态。

您应该可以通过设置交叉点,如b.setA和Status1。~状态。

您自己已经给出了答案:-。您只缺少5个字符:

fun SubsetOfSetAinB [b: B] : set A {
    { x : b.setA | b.setA.status in Status1 }
}

用{vars | testvars}枚举对于许多问题都非常有用。

您自己已经给出了答案:-。您只缺少5个字符:

fun SubsetOfSetAinB [b: B] : set A {
    { x : b.setA | b.setA.status in Status1 }
}

用{vars | testvars}枚举对许多问题都非常有用。

该解决方案是最理想的解决方案是最理想的