This interface is a representation of a set of symmetries, which takes into account possible compositions of symmetries in this set. More formally, set contains no element s, which can be expressed as s=s1*s2*s3*...*sN, where {s1,s2,s3,...,sN} are elements of this set. So, this interface models the mathematical basis of subgroup of symmetric group. It contains the identity symmetry by default.
All symmetries, keeping by this set must be consistent. It means, that all of them must have similar dimension (see {@link #dimension()}); next, if we denote symmetry as pair (permutation, sign), there is no any symmetry (p,s) and subset of symmetries {(p1,s1),(p2,s2),...,<(pN,sN)}, such that p = p1*p2*p3*...*pN, but s != s1*s2*s3*...*sN. Method {@link #add(cc.redberry.core.combinatorics.Symmetry)} throws {@link InconsistentGeneratorsException}if its argument is inconsistent with existing symmetries in set.
Iterator returned by this set iterates over all possible compositions of symmetries from set, i.e. it works as {@link PermutationsSpanIterator}. To extract only the basis symmetries, a special method {@link #getBasisSymmetries() }introduced. This method returns an unmodifiable list of basis symmetries.
Objects of this type can be created via static factory methods in {@link SymmetriesFactory}.
@author Dmitry Bolotin
@author Stanislav Poslavsky
@see SymmetriesFactory
@see Symmetry
@see PermutationsSpanIterator
@see InconsistentGeneratorsException