cp_library_rs/algebraic_structure/
commutative.rs

1//! 可環モノイド
2
3use crate::algebraic_structure::{monoid::Monoid, operation::*};
4
5use std::fmt::Debug;
6
7use num_traits::Bounded;
8
9/// 可環モノイド
10///
11/// 任意の要素 $`x,y\in S`$ に対し,
12///
13/// ```math
14/// x \times y = y \times x
15/// ```
16///
17/// が成立する.
18pub trait CommutativeMonoid: Monoid {}
19
20// 実装
21impl CommutativeMonoid for () {}
22impl CommutativeMonoid for Add<isize> {}
23impl CommutativeMonoid for Add<usize> {}
24impl CommutativeMonoid for Xor {}
25impl<T: Ord + Bounded + Clone + Debug> CommutativeMonoid for Min<T> {}
26impl<T: Ord + Bounded + Clone + Debug> CommutativeMonoid for Max<T> {}
27impl<T: Ord + Bounded + Clone + Debug> CommutativeMonoid for MinMax<T> {}
28impl<T> CommutativeMonoid for GCD<T> {}