# Monoid

Monoid(モノイド) とは代数系の単純な性質を現す概念である。 モノイド は元の集合 S と、１つの二項演算子、 そして、１つの単位元からなる。 モノイドのC++における表現は、 二項演算子を実装した関数オブジェクトと、 元の集合 S を表すオブジェクトの集合、 そして、単位元を表す１つのオブジェクトからなる。

### Refinement of

元の型は、Assignable で CopyConstructible でなければならない。 関数オブジェクトの型は、BinaryFunction のモデルでなければならない。

### Notation

`X` | モノイドの元の型。
`a, b` | 型 `X` のオブジェクト。
`op` | モノイド上の演算を実現する関数オブジェクト。
`i` | 型 `X` のオブジェクトであり、モノイドの単位元。

### Valid Expressions

`op(a, b)` | 意味は下記を参照。 返値の型: `X`
`a == b)` | `a` と `b` が同じ元であれば true を返す。 返値の型: `bool`
`a != b)` | `a` と `b` が違う元であれば true を返す。 返値の型: `bool`

### Invariants

- 閉包律
  `op(a, b)` の値も S の元である。
- 結合律
  `op(op(a, b), c) == op(a, op(b, c))`
- 単位元の定義
  `op(a, i) == a`

Copyright © 2000-2001 | Jeremy Siek, Indiana University (jsiek@osl.iu.edu) Lie-Quan Lee, Indiana University (llee@cs.indiana.edu) Andrew Lumsdaine, Indiana University (lums@osl.iu.edu)

Japanese Translation Copyright (C) 2003 KANAHORI Toshihiro <kanahori@k.tsukuba-tech.ac.jp>
オリジナルの、及びこの著作権表示が全ての複製の中に現れる限り、この文書の複製、利用、変更、販売そして配布を認める。このドキュメントは「あるがまま」に提供されており、いかなる明示的、暗黙的保証も行わない。また、いかなる目的に対しても、その利用が適していることを関知しない。