pred 中的约束顺序是否重要?
Does the order of constraints in a pred matter?
这个pred
中约束的顺序重要吗:
pred Example {
A
B
C
}
A
、B
、C
表示约束。
那个pred
和这个pred
一样吗:
pred Example {
B
A
C
}
if-then-else 中的约束是否有序?例如,在这个 if-then-else:
中是否排序了 ReadMemory
和 WriteMemory
pred Example {
{
ReadMemory
WriteMemory
} implies C else D
}
这是我提出问题的动机:Software Abstractions 的第 222 页有,This assertion says that if a read, write, load, and read are performed in that order, then ...
那句话中的"order"这个词引起了我的注意。因此我的问题。
不,约束的顺序无关紧要。在你提到的例子中
assert LoadNotObservable {
all c, c’, c“: CacheSystem, a1, a2: Addr, d1, d2, d3: Data |
{read [c, a2, d2]
write [c, c’, a1, d1]
load [c’, c”]
read [c“, a2, d3]
} implies d3 = (a1 = a2 => d1 else d2) }
参数 (c, c', c") 定义了转换的前和 post 状态。
这个pred
中约束的顺序重要吗:
pred Example {
A
B
C
}
A
、B
、C
表示约束。
那个pred
和这个pred
一样吗:
pred Example {
B
A
C
}
if-then-else 中的约束是否有序?例如,在这个 if-then-else:
中是否排序了ReadMemory
和 WriteMemory
pred Example {
{
ReadMemory
WriteMemory
} implies C else D
}
这是我提出问题的动机:Software Abstractions 的第 222 页有,This assertion says that if a read, write, load, and read are performed in that order, then ...
那句话中的"order"这个词引起了我的注意。因此我的问题。
不,约束的顺序无关紧要。在你提到的例子中
assert LoadNotObservable {
all c, c’, c“: CacheSystem, a1, a2: Addr, d1, d2, d3: Data |
{read [c, a2, d2]
write [c, c’, a1, d1]
load [c’, c”]
read [c“, a2, d3]
} implies d3 = (a1 = a2 => d1 else d2) }
参数 (c, c', c") 定义了转换的前和 post 状态。