SGI

幺半群运算

类别: 函子 组件类型: 概念

描述

幺半群运算是一种特殊的二元函数。一个二元函数必须满足三个条件才能成为幺半群运算。首先,它的第一个参数类型和第二个参数类型必须相同,并且它的结果类型必须与其参数类型相同。其次,必须存在一个单位元。第三,运算必须满足结合律。例如,加法和乘法就是幺半群运算。 [1]

细化

二元函数

关联类型

参数类型 幺半群运算的第一个参数和第二个参数的类型,也是幺半群运算返回时返回的类型。

符号

F 作为幺半群运算模型的类型
T F的参数类型。
f 类型为F
x, y, z 类型为T

定义

类型F作为二元函数模型是结合的,如果F的第一个参数类型、第二个参数类型和结果类型相同,并且对于任何对象f类型为F以及对于任何对象x, yz类型为F的参数类型,f(x, f(y, z))f(f(x, y), z). [2]

有效表达式

除了二元函数要求中描述的表达式之外,以下表达式必须有效。
名称 表达式 类型要求 返回类型
函数调用 f(x, y)   T
单位元 identity_element(f) [3]   T

表达式语义

名称 表达式 先决条件 语义 后置条件
函数调用 f(x, y) x以及y在的域中f. 调用f使用x以及y作为参数。  
单位元 identity_element(f)   返回幺半群的单位元。也就是说,返回值是值id类型为T使得,对于所有的x在的域中f, f(x, id)以及f(id, x)都返回x.  

复杂性保证

不变式

结合律 对于任何x, yz类型为T, f(x, f(y, z))以及f(f(x, y), z)返回相同的值。 [4]
单位元。 存在一些元素id类型为T使得,对于所有的x类型为T, f(x, id)以及f(id, x)都返回x。表达式identity_element(f)返回id.

模型

备注

[1] 幺半群是三种密切相关的代数结构之一。半群是一个集合 S 和一个二元运算 *,具有以下性质:* 对 S 闭合(即,如果 x 和 y 是 S 的元素,那么 x * y 也是 S 的成员)并且 * 满足结合律(即,如果 x、y 和 z 是 S 的元素,那么 x * (y * z) = (x * y) * z)。幺半群是一个具有单位元的半群。也就是说,存在一些元素 id,使得对于 S 中的所有 x,x * id = id * x = x。最后,是一个具有以下性质的幺半群:每个元素都有逆元素。也就是说,对于 S 中的每个 x,存在一个元素 xi,使得 x * xi = xi * x = id。例如,实数集在乘法下是一个幺半群(单位元是 1),但它不是一个群。它不是一个群,因为 0 没有逆元素。

[2] 数学教科书通常将其写成一个方程,而不是使用“与...相同”之类的词语。但是,我们不能在这个定义中使用相等,因为F的参数类型可能不是可比较相等的。如果F的参数类型是可比较相等的,但是,那么这两个表达式应该相等:结合律的条件变为f(x, f(y, z)) == f(f(x, y), z)

[3] 这是作为重载函数实现的。函数identity_element在标准头文件 functional 和非标准向后兼容头文件 function.h 中定义,用于类型为plus<T>以及multiplies<T>的参数。如果您定义了一个新的幺半群运算F(例如,矩阵乘法),您必须重载identity_element用于类型为F的参数。该identity_element函数是 SGI 扩展;它不是 C++ 标准的一部分。

[4] 结合律与交换律不同。也就是说,要求x * (y * z) == (x * y) * z与要求x * y == y * x完全无关。幺半群运算需要满足结合律,但不需要满足交换律。例如,矩阵在乘法下形成幺半群,即使矩阵乘法不满足交换律。

另请参阅

二元函数, plus, multiplies
[Silicon Surf] [STL Home]
Copyright © 1999 Silicon Graphics, Inc. 保留所有权利。 商标信息