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。 cli
中 group
的映射被替换或添加到 numcli
.
的映射
我在 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。 cli
中 group
的映射被替换或添加到 numcli
.