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}