[英]Alloy specifications
我是一个学习合金的初学者,我想知道这个 n.^address 是什么意思(也许有一个例子)? 因为从逻辑上讲,如果我们将地址视为一组像 (A0,A1) 这样的对,那么我们如何将 n(例如 N0)与该集合连接起来?因为地址中最左边的对的元素与 n 的性质不同. 我以为那是不可能的。 如果有人能指导我,我将不胜感激
我已经有一段时间没有使用合金了,但是^
运算符表示其操作数关系的传递闭包。 所以如果address
是{(a,b), (b,c)}
那么^address
是{(a,b), (b,c), (a,c)}
。
n.^address
是新关系在n
上的投影。
所以如果n
是a
,那么n.^address
是{b,c}
例子:
abstract sig atom{
address: lone atom
}
one sig a,b,c extends atom{}
fact {
address = a->b + b->c
}
check {
a.^address = b+c
}
你问“这个 n.^ 地址是什么意思?”
表达式n.^address是n表示的元组集和^address表示的元组集之间的连接。
表达式^address又表示关系address的传递闭包,即包含传递地址的最小关系。
事实上,或原则上是否存在n中的任何元组,其最右边的值与^address中某个元组的最左边的值相同——或者,换句话说,表达式n.^address是否保证是否表示空集——部分取决于变量n和关系地址的定义方式,部分取决于宇宙的填充方式。 address的传递闭包是否与address相同或更大的关系也是如此。
如果N0
、 A0
和A1
都是原子,并且如果关系地址仅包含对(A0, A1)
,并且表达式n表示(包含 singleton 集合)原子N0
,那么实际上表达式n.^address将表示空集。 另一方面,如果地址包含元组(N0, A0)
以及元组(A0, A1)
,则
(A0, A1)
的 singleton 集合,(A0, A1)
的 singleton 集合,并且(N0, A1)
的 singleton 集合,因为集合{(N0, A0)}
与集合{(A0, A1)}
的连接是集合{(N0, A1)}
) {(N0, A1)}
。由于您没有提供有关您心目中的合金 model 的更多信息,因此无法多说。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.