GroupTheory/tutorials/WorkingWithSymbolicGroups - Maple Help

Working with Symbolic Groups

Maple's GroupTheory package features the ability to construct symbolic groups, which are used to represent groups that may otherwise currently have no other computer implementation.

Typically, a symbolic group is used to represent a group that is too large to represent concretely, or that depend upon one or more unspecified numeric parameters.

Examples of the former situation include the larger of the sporadic finite simple groups. For the latter situation, there are symbolic group representations for many families of groups, such as symmetric or dihedral groups, depending on an (integer) parameter which you can specify symbolically.

 > with( GroupTheory ):

For instance, the Monster simple group $𝕄$ has order equal to$808017424794512875886459904961710757005754368000000000={2}^{46}{3}^{20}{5}^{9}{7}^{6}{11}^{2}{13}^{3}171923293141475971$

But, importantly, $𝕄$ cannot be represented as a permutation group on fewer than $97239461142009186000$ points and the smallest dimension of a faithful linear representation over any field is $196882$. Thus, computing with elements of $𝕄$ is difficult, and requires bespoke techniques.

In Maple, $𝕄$ is represented as a symbolic group.

 > G := Monster();
 ${G}{≔}{𝕄}$ (1)

Maple "knows" various facts about $𝕄$.

 > GroupOrder( G );
 ${808017424794512875886459904961710757005754368000000000}$ (2)
 > IsSimple( G );
 ${\mathrm{true}}$ (3)
 > MinPermRepDegree( G );
 ${97239461142009186000}$ (4)

For some groups, a concrete implementation as, for instance, a permutation group is available only for small values of a parameter upon which the group depends. For instance, the group ${}^{2}B_{2}\left(q\right)$ is available as a permutation group only for values of $q$ not exceeding $512$. For larger values of $q$, a symbolic group is returned.

 > G := Suzuki2B2( 2048 );
 ${G}{≔}{\mathbf{Sz}}\left({2048}\right)$ (5)

While Maple knows certain facts about symbolic groups, it is not possible to perform operations that inherently require access to group elements.

 > GroupOrder( G );
 ${36011213418659840}$ (6)
 > RandomElement( G );

An example of a group that can be defined by a symbolic parameter is a dihedral group.

 > G := DihedralGroup( n );
 ${G}{≔}{{\mathbf{D}}}_{{n}}$ (7)

Notice that the degree parameter $n$ is an unassigned symbol with no numeric value. Nevertheless, Maple can deduce various facts about such groups.

 > IsFinite( G );
 ${\mathrm{true}}$ (8)
 > IsSoluble( G );
 ${\mathrm{true}}$ (9)

With insufficient information about the parameter, Maple is unable to deduce anything in this case:

 > IsNilpotent( G );
 ${\mathrm{FAIL}}$ (10)

However, you can supply additional information using the assume facility and, in this situation, when enough information is available, Maple can determine an outcome.

 > IsNilpotent( DihedralGroup( 2^(3*k + 1) ) ) assuming k :: posint;
 ${\mathrm{true}}$ (11)
 > IsNilpotent( DihedralGroup( 3 * 2^(3*k + 1) ) ) assuming k :: posint;
 ${\mathrm{false}}$ (12)

Symbolic groups may depend upon more than one parameter and, depending upon the group in question, one or more parameters may be specified symbolically. For example, you can construct a symbolic group representing the projective special linear group $PSL\left(n,q\right)$ as follows.

 > G := PSL( n, q );
 ${G}{≔}{\mathbf{PSL}}\left({n}{,}{q}\right)$ (13)

The type of information that Maple knows about a symbolic group varies from one group to another.

 > GroupOrder( G );
 $\frac{{{q}}^{\left(\genfrac{}{}{0}{}{{n}}{{2}}\right)}{}\left({\prod }_{{k}{=}{1}}^{{-}{1}{+}{n}}{}\left({{q}}^{{k}{+}{1}}{-}{1}\right)\right)}{{\mathrm{igcd}}{}\left({n}{,}{q}{-}{1}\right)}$ (14)
 > G := PSU( 3, q );
 ${G}{≔}{\mathbf{PSU}}\left({3}{,}{q}\right)$ (15)
 > GroupOrder( G );
 $\frac{{{q}}^{{3}}{}\left({{q}}^{{2}}{-}{1}\right){}\left({{q}}^{{3}}{+}{1}\right)}{{\mathrm{igcd}}{}\left({3}{,}{q}{+}{1}\right)}$ (16)

Maple may have only partial information for some operations.

 > ClassNumber( PSL( 5, q ) );
 ${7}{+}\frac{{{q}}^{{4}}{+}{{q}}^{{3}}{+}{{q}}^{{2}}{-}{8}}{{\mathrm{igcd}}{}\left({5}{,}{q}{-}{1}\right)}$ (17)
 > ClassNumber( PSL( n, q ) );

In certain cases, a piecewise result may be returned for certain operations on a symbolic group.

 > ClassNumber( DihedralGroup( n ) );
 $\left\{\begin{array}{cc}\frac{{n}}{{2}}{+}{3}& {n}{::}{\mathrm{even}}\\ \frac{{n}}{{2}}{+}\frac{{3}}{{2}}& {\mathrm{otherwise}}\end{array}\right\$ (18)

Since a symbolic expression is normally returned for invariants that can be computed for groups depending upon one or more symbolic parameters, you can use Maple's symbolic facilities to further manipulate the results.

 > c := ClassNumber( DirectProduct( QuaternionGroup( 4 ), DihedralGroup( 2*k + 1 ) ) );
 ${c}{≔}{7}{}\left(\left\{\begin{array}{cc}{k}{+}\frac{{7}}{{2}}& \left({2}{}{k}{+}{1}\right){::}{\mathrm{even}}\\ {k}{+}{2}& {\mathrm{otherwise}}\end{array}\right\\right)$ (19)
 > simplify( c ) assuming k :: posint;
 ${7}{}{k}{+}{14}$ (20)

In the event that a concrete implementation (such as a permutation group) is available for specific numeric values of a parameter, you can use the two-argument form of eval to instantiate the parameter. For example,

 > G := PSp( 4, q );
 ${G}{≔}{\mathbf{PSp}}\left({4}{,}{q}\right)$ (21)
 > G2 := eval( G, q = 2 );
 ${\mathrm{G2}}{≔}{\mathbf{PSp}}\left({4}{,}{2}\right)$ (22)
 > type( G2, 'PermutationGroup' );
 ${\mathrm{true}}$ (23)
 > ord := GroupOrder( G );
 ${\mathrm{ord}}{≔}\frac{{{q}}^{{4}}{}\left({{q}}^{{2}}{-}{1}\right){}\left({{q}}^{{4}}{-}{1}\right)}{{\mathrm{igcd}}{}\left({2}{,}{q}{-}{1}\right)}$ (24)
 > GroupOrder( G2 );
 ${720}$ (25)
 > eval( ord, q = 2 );
 ${720}$ (26)

For symbolic groups that depend upon more than one symbolic parameter, you can evaluate the symbolic group at just one, or at several of the parameters. If one or more parameters remain uninstantiated, then the result is another symbolic group, depending upon fewer parameters.

 > eval( PGU( n, q ), n = 2 );
 ${\mathbf{PGU}}\left({2}{,}{q}\right)$ (27)
 > eval( PGU( n, q ), q = 3 );
 ${\mathbf{PGU}}\left({n}{,}{3}\right)$ (28)
 > eval( PGU( n, q ), [n = 2, q = 3] );
 ${\mathbf{PGL}}\left({2}{,}{3}\right)$ (29)