我如何使用合金中的{1,2,4,5,7,8}中的x?

时间:2015-12-23 03:22:22

标签: alloy

我是合金初学者!

我想表演,例如:

run {all x: {2,3,4,5}, y: {1,2,3,4} | x > y and x + y <=10}

如何在合金

中解决上述约束

非常感谢!

D.M

1 个答案:

答案 0 :(得分:4)

如果x和y的值在您希望的区间内,您可以添加约束来强制执行给定属性。

另外,您需要注意+运算符用于集合并。 如果x=4y=5,那么x+y将产生:{4,5}。您需要调用add[x,y]内置函数来执行添加。

总结一下,这是你的约束。

   run {all x,y:Int | (x >1 and x <6 and y > 0 and y <5 ) implies  x > y and add[x,y] <=10} for 5 Int

注意命令末尾的for 5 Int,它告诉分析器它应该在分析中考虑可以在5位内表示的整数,即[-16,15]

另请注意,当您请求区间[-16,15]中的所有整数组合满足给定条件时,此谓词不一致。

修改

你可以使用let在Alloy中声明“变量”。 (在局部变量的另一个结构内部和全局变量的外部)

在您的示例中,您可以写:

let X= 2+3+6+8+12+17+18+20
let Y= 3+5+6+8+10

记住+是一个集合联合运算符

您的命令可能是:

run {all x :X,y:Y |  x > y and add[x,y] <=10} for 6 Int.

请注意,相同的注释适用于此命令(即它不一致)