合金传递闭合

时间:2013-01-23 15:39:15

标签: alloy

这里的任何人都可以解释传递闭包算子在矩阵方面如何在Alloy中工作。我的意思是将闭包运算符转换为实际矩阵运算的转换规则。

1 个答案:

答案 0 :(得分:8)

为了计算传递闭包,Kodkod使用迭代平方。

简而言之,如果你有一个二元关系r(直接转换为二维布尔矩阵),r的传递闭包可以迭代计算为

  • r 1 = r或(r.r)
  • r 2 = r 1 或(r 1 .r 1
  • r 3 = r 1 或(r 2 .r 2
  • ...
  • ^ r = r n = r n-1 或(r n-1 .r n-1

问题是我们什么时候停止,即n应该是什么。由于一切都有界限,Kodkod静态地知道r中的最大行数,并且应该直观地清楚,如果将n设置为该行数,则算法将生成语义正确的转换。但是,即使n/2也足够了(因为我们每次都对矩阵进行平方),这是Kodkod使用的实际数字。