cp_library_rs/algebraic_structure/
ordered_monoid.rs1use crate::algebraic_structure::{monoid::Monoid, operation::*};
4
5pub 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
11impl 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}