/* calculate new values for irredundant generators and set them up in a renumbering table of length pcp->lastg - pcp->ccbeg + 1 which looks to compact like a normal exponent-generator string
pointed to by y[dgen] */
if (current_class != 1) {
if (is_space_exhausted(pcp->lastg - pcp->ccbeg + 3, pcp)) return;
/* update pcp->first_pseudo */
bound = pcp->lastg; for (i = pcp->first_pseudo; i <= bound && y[structure + i] <= 0; i++)
;
pcp->first_pseudo = (i > pcp->lastg) ? lg + 1 : y[ba + i];
/* update the commutator tables */
p1 = y[pcp->ppcomm + 2]; for (i = 1, bound = pcp->ncomm; i <= bound; i++) {
update(p1 + i, pcp); if (pcp->overflow) return;
}
/* update the power tables */ for (i = 2, bound = pcp->ccbeg; i <= bound; i++) { /* fix (i - 1)^p */
update(pcp->ppower + i - 1, pcp); if (pcp->overflow) return;
}
/* update the redundant defining generators and inverses */ for (i = 1; i <= ndgen; i++) {
update(dgen + i, pcp); if (pcp->overflow) return;
update(dgen - i, pcp); if (pcp->overflow) return;
}
/* finally update and move structure information */
if (middle_of_tails) {
pointer = pcp->structure + pcp->ccbeg - 1; for (i = pcp->ccbeg; i <= pcp->lastg; ++i) { if ((value = y[pcp->structure + i]) > 0)
y[++pointer] = value; elseif (value < 0)
y[-value] = 0;
}
} else {
k = pcp->ppower;
structure = pcp->structure; for (i = pcp->lastg; i >= pcp->ccbeg; i--) { if ((j = y[structure + i]) > 0) {
y[k] = j;
k--;
} elseif (j < 0) { /* deallocate equation for redundant generator i */
p1 = -j;
y[p1] = 0;
}
}
pcp->lastg = 0; for (i = 1; i <= ndgen; i++) { if ((j = y[structure + i]) == 0) { /* defining generator i is trivially redundant */
y[dgen + i] = 0; if (y[dgen - i] < 0) { /* deallocate old inverse */
p1 = -y[dgen - i];
y[p1] = 0; /* set new inverse trivial */
y[dgen - i] = 0;
}
} elseif (j < 0) { /* defining generator i is redundant with value pointed
to by -y[structure + i] */
y[dgen + i] = y[structure + i];
p1 = -y[dgen + i];
length = y[p1 + 1];
y[p1] = dgen + i;
/* renumber value of defining generator i */ for (k = 1; k <= length; k++) {
l = FIELD2(y[p1 + k + 1]);
y[p1 + k + 1] += y[dgen + l] - l;
}
if (y[dgen - i] < 0) { /* i inverse occurs in a defining relation, so recompute
the inverse and set up header block for inverse */
y[lused + 1] = dgen - i;
y[lused + 2] = length;
/* set up inverse */ for (j = 1; j <= length; j++) {
k = y[p1 + j + 1];
y[lused + 2 + j] = PACK2(prime - FIELD1(k), FIELD2(k));
}
/* deallocate old inverse */
p1 = -y[dgen - i];
y[p1] = 0;
y[dgen - i] = -(lused + 1);
pcp->lused += length + 2;
lused = pcp->lused;
}
} else { /* i is an irredundant generator */
pcp->lastg++;
y[dgen + i] = pcp->lastg; /* note that its weight is set to be 1 */
y[structure + pcp->lastg] = PACK3(1, 0, i);
/* check if inverse of i is required */ if (y[dgen - i] < 0) { /* yes, so renumber previously set up inverse */
p1 = -y[dgen - i];
y[p1 + 2] += pcp->lastg - i;
}
}
}
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.