我在玩合金游戏,试图建立一个模型来表示用户填写向导表格时可能采取的步骤。我正在尝试使用已连接的图形为他的步骤建模,并且始终有通往最终步骤的路径。
提出了初始模型后,我想看看具有三个以上连接节点的弧的结构示例。
事实证明,如果我使用一个空谓词,执行并查看它找到的实例,则可以找到一个具有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