/* add pseudo-generators to redundant defining generators; also recompute required inverses of defining generators;
this routine must be called before a call to collect defining relations; if there are redundant defining generators, calls to eliminate should only be done after calling update_generator because the space reserved for the pseudo-generator(s) added
by update_generator in structure is not set up yet */
/* if there are greater than MAXGENS defining generators then this field will overflow; such an overflow causes
some output idiocies, but no logical errors */
} elseif (value < 0) { /* old entry was non-trivial so we deallocate it
and insert pseudo-generator */
extend_tail(dgen + f, 0, f, pcp); if (pcp->overflow) return;
}
}
/* update submlg to account for any new pseudo-generators introduced */
pcp->submlg = pcp->subgrp - pcp->lastg;
/* now, recompute required inverses -- we know the inverse of f to the end of class pcp->cc - 1; denote this by f'; evaluate f * f' and take the inverse of
this result to give the class pcp->cc part of f^-1 */
for (f = 1; f <= ndgen; f++) { if (y[dgen - f] > 0) continue;
if (is_space_exhausted(2 * pcp->lastg + 2, pcp)) return;
/* f^(-1) was nontrivial, so make room for lower class entries */
start = -y[dgen - f];
extra = y[start + 1];
ycol = lused + length + 3; for (i = 1; i <= length; i++)
y[ycol + extra - i] = y[ycol - i];
/* copy header block and lower class entries */ for (i = 1; i <= extra; i++)
y[lused + i + 2] = y[start + i + 1];
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.