运行命令行为,限制合金中的签名数量

时间:2016-10-12 12:20:51

标签: alloy

第一个代码,在Alloy Analyzer 4.2中找不到任何实例,但是第二个代码找不到! 有什么区别?我的期望是,#>当我执行“run show for 1”时,0和#= 1的行为相同。

1:

sig Fruit {}
pred show() { #Fruit > 0}
run show for 1

2:

sig Fruit {}
pred show() { #Fruit = 1}
run show for 1

1 个答案:

答案 0 :(得分:0)

运行命令时,您会看到位宽(确定合金的最大Int)为0。

   Executing "Run show for 1"

   Solver=sat4j Bitwidth=0 MaxSeq=0 SkolemDepth=1 Symmetry=20
   0 vars. 0 primary vars. 0 clauses. 2ms.
   No instance found. Predicate may be inconsistent. 0ms.

您可以通过明确更改位宽来更改此项:

sig Fruit {}
pred show() { #Fruit>0}
run show for 1 but 2 int

Executing "Run show for 1 but 2 int"
   Solver=sat4j Bitwidth=2 MaxSeq=1 SkolemDepth=1 Symmetry=20
   1 vars. 1 primary vars. 1 clauses. 3ms.
   . found. Predicate is consistent. 3ms.

我认为当你使用'>'时运算符你需要位宽但是当你使用'='时它不是必需的。

在Alloy中使用Int非常强烈<>> 。