代数 - 環上の加群

環 \(R\) が加法アーベル群 \((M, +)\) への右作用

\[M \times R \to M\]

になっているとき, \(M\) を \(R\) -加群 といい, この作用のことを スカラー倍 という.

ただし,

を満たすこと. 例えば, 体 \(F\) 上のベクトル空間 \(V\) は \(F\) -加群.

以下の実装では都合上, 右加群としてあるのと, 必ずしも必要としないので, 加法アーベル群であることは気にせずに, 作用だけを std::ops::Mul で要請してある.

/// 代数 - 環上の加群 (Right-Module)

// Self should be AGroup (Additive Group)
pub trait Module<R>: std::ops::Mul<R, Output = Self> {}

#[cfg(test)]
mod test_module {
    use crate::algebra::module::*;
    #[test]
    fn test_vector_is_module() {
        struct MyVect {
            data: Vec<i64>,
        }
        impl std::ops::Mul<i64> for MyVect {
            type Output = Self;
            fn mul(self, scalar: i64) -> Self::Output {
                let data: Vec<i64> = self.data.iter().map(|&x| x * scalar).collect();
                Self { data }
            }
        }
        impl Module<i64> for MyVect {}
        let v = MyVect {
            data: vec![1, 2, 3],
        };
        let u = v * (-1);
        assert_eq!(u.data, vec![-1, -2, -3]);
    }
}