alice-math 0.1.0

A topology and algebra library from first principles
Documentation
use crate::core::scalar::Scalar;
use crate::core::module::VectorSpace;

pub trait LieAlgebra<F: Scalar>: VectorSpace<F> {
    fn bracket(&self, other: &Self) -> Self;
    fn antisymmetry_holds(&self, other: &Self) -> bool {
        self.bracket(other) == other.bracket(self).inverse()
    }
    fn jacobi_holds(&self, y: &Self, z: &Self) -> bool {
        let xy_z = self.bracket(y).bracket(z);
        let yz_x = y.bracket(z).bracket(self);
        let zx_y = z.bracket(self).bracket(y);
        xy_z.add(&yz_x).add(&zx_y) == Self::zero()
    }
    fn bracket_bilinear_left(&self, other: &Self, scalar: &F) -> bool {
        let lhs = self.scale(scalar).bracket(other);
        let rhs = self.bracket(other).scale(scalar);
        lhs == rhs
    }
    fn bracket_bilinear_right(&self, other: &Self, scalar: &F) -> bool {
        let lhs = self.bracket(&other.scale(scalar));
        let rhs = self.bracket(other).scale(scalar);
        lhs == rhs
    }
    fn bracket_additive_left(&self, b: &Self, c: &Self) -> bool {
        let lhs = self.add(b).bracket(c);
        let rhs = self.bracket(c).add(&b.bracket(c));
        lhs == rhs
    }
    fn bracket_additive_right(&self, b: &Self, c: &Self) -> bool {
        let lhs = self.bracket(&b.add(c));
        let rhs = self.bracket(b).add(&self.bracket(c));
        lhs == rhs
    }
}