该下限多重的语义some
和one
三元关系很难把握。 根据软件抽象 (修订版)pp.79-80关系addr: Book -> (Name -> some Addr)
应该等于all b: Book | b.addr in Name -> some Addr
all b: Book | b.addr in Name -> some Addr
(另见第97页)。 但什么是后者的配方究竟是什么意思? 我的想象力在这里失败。 这就是为什么我在合金分析仪4.1.0做了一些实验。 在这个模型中的含义:
sig Name, Addr {}
sig Book { addr: Name -> some Addr }
assert implication {
#Book = 0 or all n: Name | some b: Book, a: Addr | n in b.addr.a
}
check implication
成立(反例找到)。 所以,如果有任何一本书,每个名称应当在这些书籍中的至少一个注册。 无证地址都允许的,没有书籍,无证名突然出现被允许了。
在下面的模型的含义:
sig Name, Addr {}
sig Book { addr: Name some -> Addr }
assert implication {
#Book = 0 or all a: Addr | some b: Book | #b.addr.a > 0
}
check implication
再次成立。 它的前代机型的镜像:无证地址都禁止的,除非没有书的。 并有相对于名称的文件没有任何限制。
这两种型号可以组合,并制定更简洁:
sig Name, Addr {}
sig Book { addr1: Name -> some Addr, addr2: Name some -> Addr }
assert implications {
some Book implies Name in Book.addr1.Addr and Addr in Book.addr2[Name]
}
check implications
所以,如果有任何一本书, 所有的名称应参加相关ADDR1和所有 ADDR都应该参与ADDR2。 多重one
行为相似。
看来软件抽象和分析不告诉如R结构相同的故事:A - >(B M - > N c 个 )据下限约束有关,但我可能错过了一些东西。 我发现的意义是不是我的预期,有可能是我还没有发现其它奇怪的影响。 我越来越觉得嵌套下限多重毫无意义可言。 我可能是对这个?