我在以下类型的Alloy(4.2)规格中有错误:
You must specify a scope for sig "this/Univ"
这个问题很容易通过玩具示例重现:
open util/ordering[State]
open util/integer
sig State { value : Int }
fact {
first.value = 0
all s:State, s': s.next | s'.value = plus[s.value, 1]
}
run { } for 5 State, 3 Int
以上所有都很好。现在,当我在外部文件中定义State并使用open语句导入它时,我得到了" Univ范围"错误:
open util/ordering[State]
open util/integer
open State
fact {
first.value = 0
all s:State, s': s.next | s'.value = plus[s.value, 1]
}
run { } for 5 State, 3 Int
我尝试了以上几种变体而没有成功。 为什么会发生这种情况,如何解决? 在我的项目中,对我来说,在不同的文件中定义订购模块的目标sig会很有用。
谢谢, 爱德华
答案 0 :(得分:2)
这是一个Alloy“设计bug”。 决定在模块中没有定义签名时出现Univ签名,以便通过内置关系检查某些属性(例如,unit,iden,none)。
你有很多方法可以解决这个问题,这是一个选择:
,0 Univ
”run { } for 0 but 5 State, 3 Int
)有关其他信息,请参阅this question