合金中三元关系中第一个和最后一个元素的投影

时间:2015-03-21 21:34:34

标签: alloy

如何在Alloy中以三元关系投影第一列和最后一列?

假设我有r1: A->B->C并假设r1= (A0->B1->C1,A1->B1->C0, A2->B0->C2),我如何将r2: A->C定义为r2= (A0->C1,A1->C0, A2->C2)

更具体地说,如果我有:

  

sig A {r1:B-> C,r2:C}

     

sig B {}

     

sig C {}

如何约束r2成为第一列和最后一列的r1投影。

3 个答案:

答案 0 :(得分:2)

一种方法是将约束放入签名中:

sig A{r1:B->C, r2:C}{
  r2 = r1[B]
} 

答案 1 :(得分:2)

您可以根据r2

定义r1
open util/ternary

sig A{
    r2:C,
    r1:B->r2
}

sig B{}
sig C{}

check { select13[r1] in r2 } for 3

如果您需要一种方法来获得三元组的第一个和最后一个,请使用util / ternary中的select13

答案 2 :(得分:0)

添加以下事实似乎也可以解决这个问题:

  

事实{all a:A,c:C | (a-> c)在r2中如果某些b:B | (a-> b-> c)在r1}