環 \(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]);
}
}