我有一个带有此信号的模型:
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 {}
...但这是不允许的。
答案 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 │
└──────────┴──────┴───┘