alloy - 如何在合金中使用 : x in {1, 2,4,5,7,8}?

标签 alloy

我是合金初学者!

我想执行,例如:

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

如何解决合金中的上述约束?

非常感谢!

DM

最佳答案

您可以添加约束来强制规定,如果 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.

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

关于alloy - 如何在合金中使用 : x in {1, 2,4,5,7,8}?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34428124/

相关文章:

alloy - 有没有办法找出在合金中运行时导致 'No Instance Found' 的原因?

合金教程,断开连接的文件系统?

alloy - 在一组或另一组中有一个对象,但不是两者都有?

alloy - 当模块为空时,Univ 签名神奇地出现

alloy - 解决合金中的最大化问题(或其他优化问题)

alloy - 重复相同的分析可缩短完成时间。如何避免这种情况?

alloy - Alloy 新手 - int 在运行命令上下文中意味着什么?

alloy - 并行运行合金分析仪?

python - 没有GUI的合金模型

recursion - 在合金中编程递归函数