从Alloy到B的翻译及TLA+中符号转换的提取
1. Alloy到B的翻译
在对Alloy模型进行分析时,不同工具会有不同的表现。例如对于以下模型:
open util/integer
abstract sig setX { }
one sig V {
SS: setX -> setX
}
assert Bug {
#(V.SS)>1 implies #(V.SS->V.SS) >3
#(V.SS->V.SS)=0 iff no V.SS
}
check Bug for 3 setX, 7 int // for 8 int Translation capacity exceeded
Alloy 4.2会找到反例,而ProB能正确判定不存在反例。若允许溢出(默认情况),Alloy分析器会为第一个公式找到反例;若禁止溢出,Alloy分析器对第一个公式找不到反例,但会为第二个公式找到反例。当整数范围增大时,翻译会失败。
高阶量化问题
下面的通用量化断言:
assert HO {
V.SS + V.SS = V.SS
all xx : V.SS | (xx in V.TT implies xx in V.SS & V.TT)
}
check HO for 3 setX
会导致错误,而ProB可以检查该断言的有效性。一个名为Alloy*的扩展可能能够处理这个例子。
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



