cp_library_rs/algebraic_structure/group.rs
1//! 群の実装
2
3use crate::algebraic_structure::{monoid::Monoid, operation::*};
4
5/// 群
6pub trait Group: Monoid {
7 fn inv(val: &Self::Val) -> Self::Val;
8}
9
10// 実装
11impl Group for Add<isize> {
12 fn inv(val: &Self::Val) -> Self::Val {
13 -val
14 }
15}
16
17impl Group for Add<usize> {
18 fn inv(val: &Self::Val) -> Self::Val {
19 val.wrapping_neg()
20 }
21}
22
23impl Group for Xor {
24 fn inv(val: &Self::Val) -> Self::Val {
25 *val
26 }
27}