获取 Alloy 中的签名子集
Getting subsets of signatures in Alloy
我想知道是否有办法在 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.~status
。
您自己已经给出了答案:-)。您只缺少 5 个字符:
fun SubsetOfSetAinB [b: B] : set A {
{ x : b.setA | b.setA.status in Status1 }
}
{ vars | test(vars) }
的枚举对于解决很多问题非常有用。
我想知道是否有办法在 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.~status
。
您自己已经给出了答案:-)。您只缺少 5 个字符:
fun SubsetOfSetAinB [b: B] : set A {
{ x : b.setA | b.setA.status in Status1 }
}
{ vars | test(vars) }
的枚举对于解决很多问题非常有用。