合金约束规范

时间:2013-12-09 15:58:55

标签: logic alloy logic-programming

我在Alloy中编写了以下代码块:

one h: Human | h in s.start => {
    s'.currentCall = h.from
}

我想从一组人(s.start)中选择一个'人'并设置一个等于h.from的变量(s'.currentCall)。 但是我觉得这段代码说的是:s.start中只有一个人,其中

s'.currentCall = h.from

是真的。 我的假设是否正确?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

你是绝对正确的,one量词的含义是给定域(集)中只有一个元素,使量词体成立。

关于从集合中选择一个元素并将设置其字段值选择为某些内容的原始目标:这听起来像是必要的更新,而您无法直接在Alloy中执行此操作;合金是完全声明的,所以你只能断言关于有限的话语世界的集合和关系的逻辑陈述。

如果您只是将one更改为some并将隐含更改为连接,然后运行分析(使用简单的run命令查找有效实例),则合金分析器会找到一个模型,s'.currentCall的某些({任意)h.from的{​​{1}}值等于h

s.start

我希望这是你想要实现的目标。