namespace Skeleton.Algebra.Groups; /// /// a set of elements closed under group operation /// /// public abstract class Group { /// /// unit of the group
/// unit * x = x * unit = x for all x in group ///
public abstract TElement GroupUnit { get; } /// /// inverse of the element under group operation /// /// /// public abstract TElement GroupInv(TElement element); /// /// /// /// /// /// public abstract TElement GroupOperation(TElement a, TElement b); /// /// Commutator of group /// /// a /// b /// public TElement GroupCommutator(TElement a, TElement b) => GroupOperation(GroupOperation(a, b), GroupOperation(GroupInv(a), GroupInv(b))); /// /// a conjugate of b => aba^{-1} /// /// a /// b /// a b a^{-1} public TElement Conjugation(TElement a, TElement b) => GroupOperation(a, GroupOperation(b, GroupInv(a))); }