Alloy:定义仅与正整数的关系
Alloy: define relation to only positive integers
我有一个带有这个标志的模型:
sig Thing {}
sig World {
quantities: Thing ->one Int,
}
我想在 quantities
关系上定义一个约束,使得每个事物的数量必须是正整数。
我完全是 Alloy 的初学者(我没有理论背景可以借鉴,我只是一个 Python 程序员)。我按照教程进行操作,但没有看到我想做的事情的秘诀。
我知道如何:
fact {
all w: World | w.quantities <something>
}
...但是我不清楚在写事实时如何称呼关系右侧的成员。
我将它定义为一种关系(而不是在 Thing
信号上有一个 quantity
属性)因为我从教程中了解到这在动态模型中是必要的我想通过谓词更新事物的数量。
我尝试定义一个:
sig PositiveInt extends Int {}
...但这是不允许的。
已更新
这种子类型化(恕我直言)最适合集合枚举:
let PositiveInt = { i : Int | i > 0 }
sig Thing {}
sig World { quantities : Thing -> one PositiveInt }
┌──────────┬──────────┐
│this/World│quantities│
├──────────┼──────┬───┤
│World⁰ │Thing⁰│7 │
│ ├──────┼───┤
│ │Thing¹│6 │
│ ├──────┼───┤
│ │Thing²│4 │
└──────────┴──────┴───┘
我有一个带有这个标志的模型:
sig Thing {}
sig World {
quantities: Thing ->one Int,
}
我想在 quantities
关系上定义一个约束,使得每个事物的数量必须是正整数。
我完全是 Alloy 的初学者(我没有理论背景可以借鉴,我只是一个 Python 程序员)。我按照教程进行操作,但没有看到我想做的事情的秘诀。
我知道如何:
fact {
all w: World | w.quantities <something>
}
...但是我不清楚在写事实时如何称呼关系右侧的成员。
我将它定义为一种关系(而不是在 Thing
信号上有一个 quantity
属性)因为我从教程中了解到这在动态模型中是必要的我想通过谓词更新事物的数量。
我尝试定义一个:
sig PositiveInt extends Int {}
...但这是不允许的。
已更新 这种子类型化(恕我直言)最适合集合枚举:
let PositiveInt = { i : Int | i > 0 }
sig Thing {}
sig World { quantities : Thing -> one PositiveInt }
┌──────────┬──────────┐
│this/World│quantities│
├──────────┼──────┬───┤
│World⁰ │Thing⁰│7 │
│ ├──────┼───┤
│ │Thing¹│6 │
│ ├──────┼───┤
│ │Thing²│4 │
└──────────┴──────┴───┘