Alloy - this/Univ 的范围,排序,"open" 语句
Alloy - scope for this/Univ, ordering, "open" statement
我在 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 scope" 错误:
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 对我很有用。
谢谢,
爱德华多
这是一个 Alloy "design bug"。
决定在模块中没有定义签名时出现 Univ 签名,以便检查一些 属性 内置关系(例如,unit、iden、none)。
你有很多方法可以解决这个问题,这里是一个选择:
- 您可以在 运行 命令的末尾添加“
,0 Univ
”
- 您可以在 Alloy 模块中添加签名
- 您可以指定全局范围为零 (
run { } for 0 but 5 State, 3 Int
)
有关其他信息,请参阅 this question
我在 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 scope" 错误:
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 对我很有用。
谢谢, 爱德华多
这是一个 Alloy "design bug"。 决定在模块中没有定义签名时出现 Univ 签名,以便检查一些 属性 内置关系(例如,unit、iden、none)。
你有很多方法可以解决这个问题,这里是一个选择:
- 您可以在 运行 命令的末尾添加“
,0 Univ
” - 您可以在 Alloy 模块中添加签名
- 您可以指定全局范围为零 (
run { } for 0 but 5 State, 3 Int
)
有关其他信息,请参阅 this question