1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//! モノイドに対する順序の実装

use crate::algebraic_structure::{monoid::Monoid, operation::*};

/// 順序付きモノイド
pub trait OrderedMonoid: Monoid {
    fn lt(left: &Self::Val, right: &Self::Val) -> bool;
    fn le(left: &Self::Val, right: &Self::Val) -> bool;
}

// 実装
impl OrderedMonoid for Add<isize> {
    fn lt(left: &Self::Val, right: &Self::Val) -> bool {
        left < right
    }
    fn le(left: &Self::Val, right: &Self::Val) -> bool {
        left <= right
    }
}

impl OrderedMonoid for Add<usize> {
    fn lt(left: &Self::Val, right: &Self::Val) -> bool {
        left < right
    }
    fn le(left: &Self::Val, right: &Self::Val) -> bool {
        left <= right
    }
}