Alloy 中的建模状态:除以下内容外,所有关系的语法相同
Modeling States in Alloy: Syntax for all relations identical except the following
在建模状态时,我发现自己经常处于相同的情况。
国家签名中有一些(更多)关系。在特定的过渡中,我实际上想说这样的话:"Everything in the pre-state is the same as the post-state, except the following"
pred SampleTransition (s, s': State, f: Foo) {
s = s' but
s'.foos = s.foos - f
}
有这样的东西吗?
Alloy book 讨论了各种选项 -- 在索引中查找 "frame conditions"。
人们经常在事件范式中定义一个不变的谓词,这使得规范更具可读性:
pred Event.unchanged (field: univ -> Time) {
field.(this.pre) = field.(this.post)
}
你也可以这样定义谓词
pred modifies (es: set Event, field: univ -> Time) {
all e: Event - es | field.(e.pre) = field.(e.post)
}
并像这样在 Reiter 风格的框架条件下使用它(来自本书的酒店锁定示例):
sig Room {
key: Key one -> Time,
prev: Key lone -> Time,
occ: Guest -> Time
}
{
Checkin.modifies [prev]
(Checkin + Checkout).modifies [occ]
RecodeEnter.modifies [key]
}
我们曾经尝试过 meta capability 允许您定义这样的谓词
pred Event.modifies (fs: set field$) {
all f: field$ - fs | f.value.(this.pre) = f.value.(this.post)
}
但并没有太大的热情。
在建模状态时,我发现自己经常处于相同的情况。
国家签名中有一些(更多)关系。在特定的过渡中,我实际上想说这样的话:"Everything in the pre-state is the same as the post-state, except the following"
pred SampleTransition (s, s': State, f: Foo) {
s = s' but
s'.foos = s.foos - f
}
有这样的东西吗?
Alloy book 讨论了各种选项 -- 在索引中查找 "frame conditions"。
人们经常在事件范式中定义一个不变的谓词,这使得规范更具可读性:
pred Event.unchanged (field: univ -> Time) {
field.(this.pre) = field.(this.post)
}
你也可以这样定义谓词
pred modifies (es: set Event, field: univ -> Time) {
all e: Event - es | field.(e.pre) = field.(e.post)
}
并像这样在 Reiter 风格的框架条件下使用它(来自本书的酒店锁定示例):
sig Room {
key: Key one -> Time,
prev: Key lone -> Time,
occ: Guest -> Time
}
{
Checkin.modifies [prev]
(Checkin + Checkout).modifies [occ]
RecodeEnter.modifies [key]
}
我们曾经尝试过 meta capability 允许您定义这样的谓词
pred Event.modifies (fs: set field$) {
all f: field$ - fs | f.value.(this.pre) = f.value.(this.post)
}
但并没有太大的热情。