/* Copyright (C) 1992 by Jeffrey S. Leon. This software may be used freely foreducationalandresearchpurposes.Anyotheruserequirespermission
from the author. */
/* Main program for element centralizer and conjugacy commands. Theformatsforthecommandsare:
/* Check whether the first parameter is conj or group. If so, a conjugacy (ratherthancentralizer)orgroupcentralizercomputationwillbe
performed, and the valid remaining parameters will be different. */ if ( argc > 1 ) {
strncpy( tempArg, argv[1], 8);
tempArg[7] = '\0';
lowerCase( tempArg); if ( strcmp( tempArg, "-conj") == 0 ) {
computationType = ELT_CONJUGATE;
imageFlag = TRUE;
startOptions = 2;
} elseif ( strcmp( tempArg, "-group") == 0 ) {
computationType = GROUP_CENTRALIZER;
imageFlag = FALSE;
startOptions = 2;
} else {
computationType = ELT_CENTRALIZER;
imageFlag = FALSE;
startOptions = 1;
}
} else
startOptions = 1;
/* Provide help if no arguments are specified. Note i and j must be as
described above. */ if ( startOptions == argc ) { switch( computationType ) { case ELT_CENTRALIZER:
printf( "\nUsage: cent [options] permGroup permutation centralizerSubgroup\n"); break; case GROUP_CENTRALIZER:
printf( "\nUsage: gcent [options] permGroup1 permGroup2 centralizerSubgroup\n"); break; case ELT_CONJUGATE:
printf( "\nUsage: conj [options] permGroup permutation1 permutation2 conjugatingElement\n"); break;
} return0;
}
/* Check for limits option. If present in position i (i as above) give
limits and return. */ if ( startOptions < argc && (strcmp(argv[startOptions], "-l") == 0 ||
strcmp(argv[startOptions], "-L") == 0) ) {
showLimits(); return0;
} /* Check for verify option. If present in position i (i as above) perform
verify (Note verifyOptions terminates program). */ if ( startOptions < argc && (strcmp(argv[startOptions], "-v") == 0 ||
strcmp(argv[startOptions], "-V") == 0) )
verifyOptions(); if ( argc < 4 )
ERROR( "main (cent)", "Too few parameters.")
/* Check for exactly 3 (centralizer) or 4 (conjugate) parameters
following options. Note i must be as above. */ for ( optionCountPlus1 = startOptions ; optionCountPlus1 < argc &&
argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 )
;
/* Read in the containing group G. */ if ( symmetricDegree == 0 )
G = readPermGroup( permGroupFileName, permGroupLibraryName, 0, "Generate"); else {
G = allocPermGroup();
sprintf( G->name, "%c%d", SYMMETRIC_GROUP_CHAR, symmetricDegree);
G->degree = symmetricDegree;
G->baseSize = 0;
}
/* Read in the known subgroups, if present. */ switch ( computationType ) { case ELT_CENTRALIZER: case GROUP_CENTRALIZER: if ( knownSubgroupSpecifier[0] )
L = readPermGroup( knownSubgroupFileName, knownSubgroupLibraryName,
G->degree, "Generate"); break; case ELT_CONJUGATE: if ( knownSubgroup_L_Specifier[0] )
L_L = readPermGroup( knownSubgroup_L_FileName,
knownSubgroup_L_LibraryName, G->degree, "Generate"); if ( knownSubgroup_R_Specifier[0] )
L_R = readPermGroup( knownSubgroup_R_FileName,
knownSubgroup_R_LibraryName, G->degree, "Generate"); break;
}
/* Read in the element to be centralized, the group to be centralized, or
the elements for which to check conjugacy. */ switch ( computationType ) { case ELT_CENTRALIZER:
e = readPermutation( eltOrGrpFileName, eltOrGrpLibraryName, G->degree, TRUE); break; case GROUP_CENTRALIZER:
E = readPermGroup( eltOrGrpFileName, eltOrGrpLibraryName, G->degree, "Generate"); break; case ELT_CONJUGATE:
e = readPermutation( element_L_FileName, element_L_LibraryName,
G->degree, TRUE);
f = readPermutation( element_R_FileName, element_R_LibraryName,
G->degree, TRUE); break;
}
/* Compute maximum base change level if not specified as option. */ if ( options.maxBaseChangeLevel == UNKNOWN )
options.maxBaseChangeLevel =
isDoublyTransitive(G) ?
( 1 + options.maxBaseSize * depthGreaterThan(G,4) ) :
( depthGreaterThan(G,5) + options.maxBaseSize * depthGreaterThan(G,6));
/* Compute the centralizer or conjugating element and write it out. */ switch ( computationType ) { case ELT_CENTRALIZER: if ( options.inform ) {
printf( "\n\n Element Centralizer Program: " "Group %s, Element %s\n\n", G->name, e->name); if ( L )
printf( "\nKnown Subgroup: %s\n", L->name);
}
options.groupOrderMessage = "Centralizer";
G_pP = centralizer( G, e, L, noPartn, longCycleOption,
stdRBaseOption);
strcpy( G_pP->name, outputObjectName);
G_pP->printFormat = (imageFormatFlag ? imageFormat : cycleFormat);
sprintf( comment, "The centralizer in permutation group %s of permutation %s.",
G->name, e->name);
writePermGroup( outputFileName, outputLibraryName, G_pP, comment); break; case GROUP_CENTRALIZER: if ( options.inform ) {
printf( "\n\n Group Centralizer Program: " "Centralizer in %s of %s\n\n", G->name, E->name); if ( L )
printf( "\nKnown Subgroup: %s\n", L->name);
}
options.groupOrderMessage = "Group centralizer";
G_pP = groupCentralizer( G, E, L, centPartnCount, centGenCount);
strcpy( G_pP->name, outputObjectName);
G_pP->printFormat = (imageFormatFlag ? imageFormat : cycleFormat);
sprintf( comment, "The centralizer in permutation group %s of permutation group %s.",
G->name, E->name);
writePermGroup( outputFileName, outputLibraryName, G_pP, comment); break; case ELT_CONJUGATE: if ( options.inform ) {
printf( "\n\n\n Element Conjugacy Program: " "Group %s, Elements %s and %s\n\n", G->name,
e->name, f->name); if ( L_L )
printf( "\nKnown Subgroup (left): %s", L_L->name); if ( L_R )
printf( "\nKnown Subgroup (right): %s", L_R->name); if ( L_L || L_R )
printf( "\n");
}
options.cosetRepMessage = "The first permutation is conjugated to the second by group element:";
options.noCosetRepMessage = "The two permutations are not conjugate under the group.";
y = conjugatingElement( G, e, f, L_L, L_R, noPartn, longCycleOption,
stdRBaseOption); if ( y ) {
strcpy( y->name, outputObjectName);
sprintf( comment, "A permutation in group %s mapping permutation %s to permutation %s.",
G->name, e->name, f->name); if ( imageFormatFlag )
writePermutation( outputFileName, outputLibraryName, y, "image", comment); else
writePermutation( outputFileName, outputLibraryName, y, "", comment);
} break;
}
freePermGroup(G);
/* Return to caller. */ if ( !imageFlag || y ) return0; else return1;
}
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.35Angebot
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-06-27)
¤
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.