4

ここで誰かが、マトリックスの観点から、Alloyで推移閉包演算子がどのように機能するかを説明できますか?つまり、閉包作用素を実際の行列演算に変換するための変換規則は何ですか。

4

1 に答える 1

8

推移閉包を計算するために、Kodkodは反復二乗を使用します。

一言で言えば、二項関係r(2次元ブール行列に直接変換される)がある場合、の推移閉包は次のrように反復的に計算できます。

  • r 1 = rまたは(r。r)
  • r 2 = r 1または(r1。r1
  • r 3 = r 1またはr2。r2
  • ..。
  • ^ r = r n = r n -1または(rn - 1。rn-1

問題は、いつ停止するか、つまり何をすべきかというnことです。すべてが制限されているため、Kodkodは静的に最大行数を認識します。がその行数に設定されている場合、アルゴリズムは意味的に正しい変換を生成することをr直感的に理解する必要があります。nただし、n/2Kodkodが実際に使用する数である(毎回行列を2乗しているため)でも十分です。

于 2013-01-23T16:44:30.477 に答える