这里的任何人都可以解释传递闭包算子在矩阵方面如何在Alloy中工作。我的意思是将闭包运算符转换为实际矩阵运算的转换规则。
答案 0 :(得分:8)
为了计算传递闭包,Kodkod使用迭代平方。
简而言之,如果你有一个二元关系r
(直接转换为二维布尔矩阵),r
的传递闭包可以迭代计算为
问题是我们什么时候停止,即n
应该是什么。由于一切都有界限,Kodkod静态地知道r
中的最大行数,并且应该直观地清楚,如果将n
设置为该行数,则算法将生成语义正确的转换。但是,即使n/2
也足够了(因为我们每次都对矩阵进行平方),这是Kodkod使用的实际数字。