cp_library_rs/algebraic_structure/
ordered_monoid.rs

1//! モノイドに対する順序の実装
2
3use crate::algebraic_structure::{monoid::Monoid, operation::*};
4
5/// 順序付きモノイド
6pub trait OrderedMonoid: Monoid {
7    fn lt(left: &Self::Val, right: &Self::Val) -> bool;
8    fn le(left: &Self::Val, right: &Self::Val) -> bool;
9}
10
11// 実装
12impl OrderedMonoid for Add<isize> {
13    fn lt(left: &Self::Val, right: &Self::Val) -> bool {
14        left < right
15    }
16    fn le(left: &Self::Val, right: &Self::Val) -> bool {
17        left <= right
18    }
19}
20
21impl OrderedMonoid for Add<usize> {
22    fn lt(left: &Self::Val, right: &Self::Val) -> bool {
23        left < right
24    }
25    fn le(left: &Self::Val, right: &Self::Val) -> bool {
26        left <= right
27    }
28}