B中联合和量化联合的区别?

时间:2017-11-12 20:37:30

标签: union discriminated-union

我目前正在使用Atelier B,并希望更好地了解联合和量化联盟之间的区别。非常感谢一个例子

1 个答案:

答案 0 :(得分:0)

union是一个二元运算符:它有两个参数,两个都设置并返回这两个集合的并集。例如:

{1, 2} \/ {2, 4}

{1, 2, 4}

此运算符是关联的,可交换的,因此您可以在不使用括号的情况下组合此运算符的多个应用程序。例如:

{ 1, 2 } \/ {2, 3, 4, 5} \/ {1, 3, 5, 7}

{ 1, 2, 3, 4, 5, 7}

第二个运营商是量化联盟。它是一个三元运算符,有三个参数:一个标识符列表,比如x1 ... xn,一个谓词,比如P(x1 ... xn)和一个表达式,比如E(x1 ... xn)。表达式E(x1 ... xn) 必须是一套。结果是所有集合E(x1 ... xn)的并集,使得P(x1 ... xn)成立。例如

UNION(x1, x2) . (x1 : {1, 2, 3} & x2 : {10, 20} | { x1 + x2 }) 

{ 1+10 } \/ { 1+20 } \/ { 2+10 } \/ { 2+20 } \/ { 3+10 } \/ { 3+20 }

简化为:

{ 11, 12, 13, 21, 22, 23 }.

量化联合的第二个例子:

UNION(low, upp).(low : {10, 20} & upp: {12, 14} | { xx | xx : INT & low <= xx & xx <= upp })

{ xx | xx : INT & 10 <= xx & xx <= 12 } \/ 
{ xx | xx : INT & 10 <= xx & xx <= 14 } \/ 
{ xx | xx : INT & 20 <= xx & xx <= 12 } \/ 
{ xx | xx : INT & low <= 20 & xx <= 14 }

简化为

{ 10, 11, 12 } \/ { 10, 11, 12, 13, 14 } \/ {} \/ {}

反过来简化为

{ 10, 11, 12, 13, 14 }