Event-B,形式化建模:如何影响一个集合的所有元素到一个关系

Event-B, formal modelling : How to affect all the elements of a set to a relation

我在 Event-B 上遇到了很多麻烦..

我想建立一个从一组客户到每个客户编号的关系

我有那种类型的关系:

cli(PERSON) = NAT1(人是有限集)

在一个事件中我有一部分人

where group <: PERSON

而且我想影响 cli 关系,我会直观地写什么:

! x . x : group | cli(x) = numcli

我的建模方式是否正确?有什么方法可以得到我想要得到的矫情吗?

我有点猜你想实现什么:cli 将一个人映射到一个数字:

VARIABLES
  cli
INVARIANTS
  cli : PERSON +-> NAT1

您想要一个事件(让我们称之为 ev)为一组人(称为 group)分配相同的号码:

ev = ANY
  group, numcli
WHERE
  group <: PERSON
  numcli : NAT1
THEN
  cli := cli <+ (group**{numcli})
END

group ** {numcli} 是一组对(关系),其中第一个元素是 group 的元素,第二个是 numcli。运算符 <+(关系覆盖)从 cli 中删除所有元素,其中第一个元素是其右操作数之一,并添加右操作数。 IE。 cligroup 的映射被替换或添加到 numcli.

的映射