繁体   English   中英

合金规格

[英]Alloy specifications

我是一个学习合金的初学者,我想知道这个 n.^address 是什么意思(也许有一个例子)? 因为从逻辑上讲,如果我们将地址视为一组像 (A0,A1) 这样的对,那么我们如何将 n(例如 N0)与该集合连接起来?因为地址中最左边的对的元素与 n 的性质不同. 我以为那是不可能的。 如果有人能指导我,我将不胜感激

我已经有一段时间没有使用合金了,但是^运算符表示其操作数关系的传递闭包。 所以如果address{(a,b), (b,c)}那么^address{(a,b), (b,c), (a,c)}

n.^address是新关系在n上的投影。

所以如果na ,那么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.^addressn表示的元组集和^address表示的元组集之间的连接。

表达式^address又表示关系address的传递闭包,即包含传递地址的最小关系。

事实上,或原则上是否存在n中的任何元组,其最右边的值与^address中某个元组的最左边的值相同——或者,换句话说,表达式n.^address是否保证是否表示空集——部分取决于变量n和关系地址的定义方式,部分取决于宇宙的填充方式。 address的传递闭包是否与address相同或更大的关系也是如此。

如果N0A0A1都是原子,并且如果关系地址仅包含对(A0, A1) ,并且表达式n表示(包含 singleton 集合)原子N0 ,那么实际上表达式n.^address将表示空集。 另一方面,如果地址包含元组(N0, A0)以及元组(A0, A1) ,则

  • 表达式地址表示包含元组(A0, A1)的 singleton 集合,
  • 表达式^address也表示包含元组(A0, A1)的 singleton 集合,并且
  • 表达式n.^address表示包含元组(N0, A1)的 singleton 集合,因为集合{(N0, A0)}与集合{(A0, A1)}的连接是集合{(N0, A1)} ) {(N0, A1)}

由于您没有提供有关您心目中的合金 model 的更多信息,因此无法多说。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM