合金规格中键入错误

时间:2015-07-08 21:06:47

标签: requirements alloy

在“需求工程”(2007)一文中,"问题框架中的需求进展",有一个关于交通灯问题的工作示例,我已将其转录到Alloy编辑器中。不幸的是,我在测试代码时遇到以下错误。

启动求解器...

发生了类型错误: 这必须是一个集合或关系。 相反,它有以下可能的类型: {PrimitiveBoolean}

错误由以下谓词触发:

pred LightUnitBreadcrumb [] {
    all t: Time | 
        NGObserve [t] <=> 
            odd [NGPulse [t]] and
        SGObserve [t] <=> 
            odd [SGPulse [t]] }

参考下面的NGPulse谓词:

sig NGP, SGP, NRP, SRP in Time {}
pred NGPulse [t: Time] {t in NGP}
pred SGPulse [t: Time] {t in SGP}
pred NRPulse [t: Time] {t in NRP}
pred SRPulse [t: Time] {t in SRP}

2 个答案:

答案 0 :(得分:2)

我的猜测是,odd的方括号之间需要设置值表达式,而不是对NGPulseSGPulse谓词的调用。实际上,谓词是布尔值而不是设置/关系值表达式,因此是错误。

答案 1 :(得分:0)

完全。我在book的第137页上解释了为什么boolean不是Alloy中的类型。