合金分析仪未找到在应用具有基数约束的谓词之前找到的示例

时间:2019-01-11 18:23:21

标签: alloy

我在玩合金游戏,试图建立一个模型来表示用户填写向导表格时可能采取的步骤。我正在尝试使用已连接的图形为他的步骤建模,并且始终有通往最终步骤的路径。

提出了初始模型后,我想看看具有三个以上连接节点的弧的结构示例。

事实证明,如果我使用一个空谓词,执行并查看它找到的实例,则可以找到一个具有3个以上弧线的实例。但是当我在谓词中明确要求时,Alloy告诉我:No instance found

pred example (f: Flow) {
  #f.paths > 3
}

我使用基数运算符错了吗?

下面的整个模型:

sig FlowObject {}

sig Flow {
  steps: set FlowObject,
  initial_step: steps,
  final_step: steps,
  paths: (steps - final_step)->(steps - initial_step),
} {
  // The final step is reachable from every step
  all s: (steps - final_step) | final_step in s.^paths
  // Every step is reachable from the initial step
  all s: (steps - initial_step) | s in initial_step.^paths
  // There are no loops
  no iden & paths
}

// No FlowObject is shared between Flows
fact {
  all f1, f2: Flow | f1 != f2 => no f1.steps & f2.steps
}

pred example (f: Flow) {
  // It finds this example if I remove this predicate
  #f.paths > 3
}

run example for 5 but 1 Flow

0 个答案:

没有答案