为什么两个关系的连接和三个关系的连接得到相同的图形?
Why do I get the same graphic for a join of two relations and a join of three relations?
下面我创建了三组:名称、地址和主机。 addr 字段将名称映射到地址。主机字段将地址映射到主机。
sig Name {
addr: Address
}
sig Address {
host: Host
}
sig Host {}
在这里,我要求 Alloy 分析器为两个关系的连接创建一个实例:addr 和 host。
run {one addr.host} for 1
这是生成的图形:
接下来,我要求 Alloy 分析器为三个关系的连接创建一个实例:addr,每个元组中相同原子的三元关系,以及 host。
run {one addr.{a, b, c: univ | a = b and b = c}.host} for 1
令人惊讶的是,生成的图形与上面显示的图形完全相同。这是为什么?
可视化工具通过为每个命名关系和集合提供值来显示一个实例。您的第二个示例中仍然只有两个命名关系。如果您想查看仅作为表达式给出的关系的值,则需要为其命名,例如:
run {some r: univ -> univ -> univ |
r = {a, b, c: univ | a = b and b = c} and
one addr.r.host} for 1
下面我创建了三组:名称、地址和主机。 addr 字段将名称映射到地址。主机字段将地址映射到主机。
sig Name {
addr: Address
}
sig Address {
host: Host
}
sig Host {}
在这里,我要求 Alloy 分析器为两个关系的连接创建一个实例:addr 和 host。
run {one addr.host} for 1
这是生成的图形:
接下来,我要求 Alloy 分析器为三个关系的连接创建一个实例:addr,每个元组中相同原子的三元关系,以及 host。
run {one addr.{a, b, c: univ | a = b and b = c}.host} for 1
令人惊讶的是,生成的图形与上面显示的图形完全相同。这是为什么?
可视化工具通过为每个命名关系和集合提供值来显示一个实例。您的第二个示例中仍然只有两个命名关系。如果您想查看仅作为表达式给出的关系的值,则需要为其命名,例如:
run {some r: univ -> univ -> univ |
r = {a, b, c: univ | a = b and b = c} and
one addr.r.host} for 1