合金:仅与正整数定义关系

时间:2018-10-07 17:01:09

标签: alloy

我有一个带有此信号的模型:

sig Thing {}
sig World {
    quantities: Thing ->one Int,
}

我想对quantities关系定义一个约束,以使每个Thing的数量必须为正整数。

我是Alloy的完全入门者(并且我没有理论背景可以借鉴,只是一个Python程序员)。我按照本教程进行了操作,但是没有看到想要做的菜谱。

我知道该怎么做

fact {
    all w: World | w.quantities <something>
}

...但是我不清楚在写事实时如何解决关系右侧成员。

我已将其定义为关系(而不是在quantity信号上具有Thing属性),因为我从教程中了解到,在动态模型中,这是必需的,我想更新该模型通过谓词的事物数量。

我尝试定义一个:

sig PositiveInt extends Int {}

...但这是不允许的。

1 个答案:

答案 0 :(得分:1)

已更新 这种子类型在设置枚举时效果最好(imho):

 let PositiveInt = { i : Int | i > 0 }
 sig Thing {}
 sig World { quantities : Thing -> one PositiveInt }

┌──────────┬──────────┐
│this/World│quantities│
├──────────┼──────┬───┤
│World⁰    │Thing⁰│7  │
│          ├──────┼───┤
│          │Thing¹│6  │
│          ├──────┼───┤
│          │Thing²│4  │
└──────────┴──────┴───┘