jkf*_*kff 26 language-agnostic math computer-science monoids abstract-algebra
众所周知,幺半群在编程中无处不在.它们无处不在,非常有用,作为一个"爱好项目",我正在开发一个完全基于其属性的系统(分布式数据聚合).为了使系统有用,我需要有用的monoids :)
我已经知道了这些:
现在,让我们将操作的准属性定义为保持等价关系的属性.例如,如果我们考虑相等长度或相同内容直到排列的列表是等效的,则列表串联是准可交换的.
这里有一些准幺半群和准交换幺半群和半群:
其他哪些确实存在?
商幺星是另一种形成幺半群的方式(quasimonoids?):给定monoid M和等价关系〜与乘法兼容,它给出了另一个幺半群.例如:
带有并集的有限多重集:如果A*是一个自由的monoid(带连接的列表),〜是"是"关系的排列,那么A*/〜是一个自由的可交换的monoid.
带有union的有限集:如果〜被修改为忽略元素的数量(所以"aa"〜"a")那么A*/〜是一个自由的可交换幂等幺半群.
句法幺半群:任何常规语言都会产生句法幺半群,它是A*与"语言不可区分"关系的商.这是一个手指树实现这个想法.例如,语言{a 3n:n natural}具有Z 3作为句法幺半群.
商数幺半群自动带有同态M - > M /〜,这是完全的.
"双重"构造是子类.它们具有同态A - > M是单射的.
幺半群的另一种结构是张量积.
Monoids允许通过在O(log n)和快速并行前缀和计算中求平方来进行指数化.它们也用在Writer monad中.
Haskell标准库因其类型类的实际数学术语的使用而被交替称赞和攻击.(在我看来,这是一件好事,因为没有它,我甚至都不知道幺半群是什么!).在任何情况下,您可以查看http://www.haskell.org/ghc/docs/latest/html/libraries/base/Data-Monoid.html以获取更多示例:
first (Just a) b = Just a first Nothing b = b同样也是最后的
后者只是与monad和箭头相关的一整个幺半群的冰山一角,但我无法真正地围绕这些(除了简单的monadic endomorphisms).但谷歌搜索monads monoids出现了相当多的变化.