#define POWER -100 #undef COMMUTATOR #define COMMUTATOR -200
static Logical is_ident(int *map, int i, int lastg); static Logical is_identity_map(int **map, int ndgen, int lastg); staticint
length_of_image(int gen, Logical *defn, int **map, struct pcp_vars *pcp); staticvoid print_image_under_aut(FILE *present, int *preimage, int gen,
Logical *defn, int **map, struct pcp_vars *pcp); staticvoid print_definition(FILE *present, int *preimage, int gen, int *definition, struct pcp_vars *pcp);
/* modify the stored relations under the action of the standard automorphism and print out the result -- this code is complex as a result of two problems:
a. the "strange" form in which definitions of group generators are returned -- see note on "commutator" below;
b. the need to meet the limitations imposed by the input routines of pq */
/* find the structure of pcp generator gen and store it in definition */
for (i = 1; i <= lastg; ++i)
y[pcp->lused + i] = 0;
/*u = PART2(pointer);*/
v = PART3(pointer);
find_definition(gen, pcp->lused, weight, pcp);
if (v == 0) {
definition[0] = POWER; #ifdefined(DEBUG)
printf("%d is defined on %d^%d = ", gen, u, pcp->p); #endif
} else { #ifdefined(DEBUG)
printf("%d is defined on [%d, %d] = ", gen, u, v); #endif
definition[0] = COMMUTATOR;
}
for (i = 1; i <= weight; ++i)
definition[i] = y[pcp->lused + i];
#ifdefined(DEBUG) for (i = 1; i <= weight; ++i) if (definition[i] != 0)
printf("%d ", definition[i]);
printf("\n"); #endif
}
/* print the defining relations of the group after applying
the standard automorphism described in map */
/* which pcp generators turn up in the image of the
pcp generators of the Frattini quotient? */ for (i = 1; i <= pga->ndgen; ++i)
length_of_image(i, defn, map, pcp);
/* what are the new defining generators needed for new presentation? */
for (i = y[pcp->clend + 1] + 1; i <= lastg; ++i) if (defn[i] == TRUE)
fprintf(present, "y%d, ", i);
/* print the remaining defining generators for the new presentation */ for (i = 1; i <= ndgen; ++i) { if (image[i] >= 0)
fprintf(present, "x%d, ", i);
}
}
fprintf(present, "}\n");
#ifdefined(DEBUG)
printf("First the generators\n");
printf("\nNow the relations\n"); #endif
definition = allocate_vector(pcp->cc + 1, 0, FALSE); for (i = y[pcp->clend + 1] + 1; i <= lastg; ++i) if (defn[i] == TRUE) { /* look up and print the structure of the pcp generator i */
find_structure(i, definition, pcp);
print_definition(present, preimage, i, definition, pcp);
}
if (nmr_printed != non_zero)
fprintf(present, " * ");
}
}
/* print definition of pcp generator, gen */
staticvoid print_definition(FILE *present, int *preimage, int gen, int *definition, struct pcp_vars *pcp)
{ registerint *y = y_address;
registerint start = y[pcp->clend + 1] + 1; registerint exponent; registerint limit; registerint i; int power, m, root = 0;
Logical first; char *s; int r; #include"access.h"
fprintf(present, "y%d = ", gen);
if (gen < start) {
fprintf(present, "y%d", gen);
} else { /* replace generator by its definition */ if (definition[0] == POWER) {
power = 0;
first = TRUE;
limit = WT(y[pcp->structure + gen]); for (m = 1; m <= limit; ++m) { if (definition[m] != 0) {
++power; if (first) {
root = definition[m];
first = FALSE;
}
}
}
exponent = int_power(pcp->p, power - 1);
s = preimage[root] != 0 ? "x" : "y";
r = preimage[root] != 0 ? preimage[root] : root;
fprintf(present, "%s%d^%d", s, r, exponent);
} if (definition[0] == COMMUTATOR) {
/* a "commutator" definition may be of the sort [b, ..., b, a, a, a] where there are k occurrences of the first term, b; in fact, this corresponds to a definition [b^(p^(k - 1)), a, a, a]; we must first
check to see if this is the case */
power = 1;
root = definition[1];
limit = WT(y[pcp->structure + gen]); for (i = 2; i < limit && root == definition[i]; ++i)
++power;
exponent = int_power(pcp->p, power - 1);
fprintf(present, "[");
s = preimage[root] != 0 ? "x" : "y";
r = preimage[root] != 0 ? preimage[root] : root; if (exponent != 1)
fprintf(present, "%s%d^%d,", s, r, exponent); else
fprintf(present, "%s%d,", s, r);
for (m = i; m <= limit; ++m) {
root = definition[m];
s = preimage[root] != 0 ? "x" : "y";
r = preimage[root] != 0 ? preimage[root] : root;
fprintf(present, " %s%d", s, r); if (m != limit)
fprintf(present, ","); else
fprintf(present, "]");
}
}
fprintf(present, ",\n");
}
} #endif
¤ Dauer der Verarbeitung: 0.34 Sekunden
(vorverarbeitet)
¤
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 ist noch experimentell.