/* File commut.c. Main program for program to compute commutator subgroups. Specifically, if H is a subgroup of G, the program computes the commutator group [G,H]. The formats for the command is
commut <options> <group> <subgroup> <commutator> or commut <options> <group> <commutator>
where in the second case it is understood that <subgroup> equals <group>.
The meaning of the parameters is as follows:
<group>: The group referred to as G above.
<subgroup>: The group referred to as H above. Defaults to G.
<commutator>: Set to the commutator group [G,H].
The options are as follows:
-i The generators of <commutator> are to be written in image format.
-overwrite: If the Cayley library file for <commutator> exists, it will be overwritten to rather than appended to.
The return code for set or partition stabilizer computations is as follows: 0: computation successful, 1: computation terminated due to error.
*/
/* Compute maximum degree and word length. */
options.maxWordLength = 200 + 5 * options.maxBaseSize;
options.maxDegree = MAX_INT - 2 - options.maxBaseSize;
HnotequalG = (argc - optionCountPlus1 == 3); if ( normalClosureFlag && !HnotequalG )
ERROR( "main (commut)", "Invalid number of arguments for normal closure")
/* Compute names for files and libraries. */
parseLibraryName( argv[optionCountPlus1], prefix, suffix,
groupFileName, groupLibraryName); if ( HnotequalG )
parseLibraryName( argv[optionCountPlus1+1], prefix, suffix,
subgroupFileName, subgroupLibraryName);
parseLibraryName( argv[optionCountPlus1+1+HnotequalG], "", "",
commutatorFileName, commutatorLibraryName);
/* Read in the groups G and H. */
G = readPermGroup( groupFileName, groupLibraryName, 0, "Generate"); if ( HnotequalG ) if ( normalClosureFlag )
H = readPermGroup( subgroupFileName, subgroupLibraryName, G->degree, "Generate"); else
H = readPermGroup( subgroupFileName, subgroupLibraryName, G->degree, ""); else
H = G;
/* Now we set C to the commutator of [G,H] of G and H, and write out C. */ if ( normalClosureFlag )
C = normalClosure( G, H); else
C = commutatorGroup( G, H); if ( commutatorName[0] != '\0' )
strcpy( C->name, commutatorName); else
strcpy( C->name, commutatorLibraryName);
C->printFormat = (imageFormatFlag ? imageFormat : cycleFormat); if ( normalClosureFlag )
sprintf( comment, "The normal closure in %s of %s.", G->name, H->name); else
sprintf( comment, "The commutator group [%s,%s].", G->name, H->name);
writePermGroup( commutatorFileName, commutatorLibraryName, C, comment);
/* Write commutator group order to std output. */ if ( !quietFlag ) { if ( normalClosureFlag )
printf( "\nNormal closure %s of %s in %s has order ", C->name,
H->name, G->name); else
printf( "\nCommutator group %s = [%s,%s] has order ", C->name,
G->name, H->name); if ( C->order->noOfFactors == 0 )
printf( "%d", 1); else for ( i = 0 ; i < C->order->noOfFactors ; ++i ) { if ( i > 0 )
printf( " * ");
printf( "%u", C->order->prime[i]); if ( C->order->exponent[i] > 1 )
printf( "^%u", C->order->exponent[i]);
}
printf( " (random Schreier)\n");
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.