void Extend_Auts(int **head, int **list, int start, struct pcp_vars *pcp)
{ register int lastg = pcp->lastg; register int offset; register int alpha;
int index = 0;
int max_length;
FILE *fp;
int nmr_saved;
int list_length;
int saved_length; /* total length of description saved to file */
int restored_length = 0; /* amount of description restored from file */
int new; /* new storage requirement */
/* this used to be 5 * lastg + 4 -- April 1994 */
if (is_space_exhausted(7 * lastg + 4, pcp)) return;
for (alpha = 1; alpha <= pcp->m; ++alpha) {
offset = (alpha - 1) * lastg;
restored_length +=
restore_auts(fp, offset, nmr_saved, start - 1, &index, *head, *list);
Extend_Aut(
start, max_length, &list_length, *head, list, offset, &index, pcp); #ifdef DEBUG
if (alpha != pcp->m) {
printf("*** After automorphism %d, allocation is %d\n",
alpha,
list_length);
printf("*** Value of index is now %d\n", index);
} #endif
if ((new = saved_length - restored_length + index) > list_length) {
*list = reallocate_vector(*list, list_length + 1, new + 1, 0, FALSE);
list_length = new; #ifdef DEBUG
printf("*** Allocation is increased to %d\n", list_length); #endif
}
}
(*head)[0] = lastg;
(*list)[0] = list_length;
CloseFile(fp);
#ifdef DEBUG1
printf("*** Final allocated space for automorphisms is %d\n", list_length);
printf("*** Final amount used is %d\n", index); #endif
}
/* list the action of each automorphism on each of the
pcp generators, first .. last, by their image */
void List_Auts(int *head, int *list, int first, int last, struct pcp_vars *pcp)
{ register int alpha, i, j, ptr, length;
int offset = 0; #include"access.h"
/* set up description of action of automorphisms on defining generators */
void Setup_Action(int **head,
int **list,
int ***auts,
int nmr_of_exponents, struct pcp_vars *pcp)
{ register int *y = y_address;
register int i, generator;
int position, max_length, exp, alpha, offset;
int lastg = pcp->lastg;
int fq_rank = y[pcp->clend + 1];
int list_length;
int index = 0;
for (alpha = 1; alpha <= pcp->m; ++alpha) {
offset = (alpha - 1) * fq_rank;
for (generator = 1; generator <= fq_rank; ++generator) {
position = (*head)[offset + generator] = index;
(*list)[++position] = 0;
++index;
for (i = 1; i <= nmr_of_exponents; ++i) {
if ((exp = auts[alpha][generator][i]) != 0) {
++(*list)[position];
(*list)[++index] = PACK2(exp, i);
}
}
}
}
(*head)[0] = fq_rank;
(*list)[0] = list_length;
}
/* extend the automorphism whose action on the defining generators ofthegroupisdescribedinthetwo1-dimensionalarrays,head andlist,toactonthegeneratorsofthegroup;thefirst
generator whose image is computed is start */
void Extend_Aut(int start,
int max_length,
int *list_length,
int *head,
int **list,
int offset,
int *index, struct pcp_vars *pcp)
{ register int *y = y_address;
register int i, generator; register int lastg = pcp->lastg; register int structure = pcp->structure;
int cp1 = pcp->submlg - lastg - 2;
int cp2 = cp1 - lastg;
int result = cp2 - lastg; register int value;
int u, v;
int exp;
int position, new;
#include"access.h"
/* update submlg because of possible call to power */
pcp->submlg -= (3 * lastg + 2);
/* for each specified generator, compute its image under
the action of the automorphism */
for (generator = start; generator <= lastg; ++generator) {
if (v == 0)
Extend_Pow(cp1, cp2, u, offset, head, *list, pcp); else
Extend_Comm(cp1, cp2, u, v, offset, head, *list, pcp);
#ifdefined(GROUP) /* solve the appropriate equation, storing the image ofgeneratorundertheactionofalphaatresult; intheLieProgram,Extend_Commhasalready
set up the answer at location result */
for (i = 1; i <= lastg; ++i) {
if ((exp = y[result + i]) != 0) {
++(*list)[position];
(*list)[++*index] = PACK2(exp, i);
}
}
}
/* reset value of submlg */
pcp->submlg += (3 * lastg + 2);
}
void evaluate_image(
int *head, int *list, int offset, int ptr, int cp, struct pcp_vars *pcp)
{ register int *y = y_address;
int lastg = pcp->lastg;
int i, j, start, u;
int pointer;
int exp;
int image_length, relation_length;
int next_gen, next_exp;
int p = pcp->p; #include"access.h"
/* given generator t of the p-multiplicator, whose definition is u^p;hence,wehavetheequation
u^p=W*t
whereWisaword(possiblytrivial)inthegeneratorsofthegroup; findtheimageoftunderalphabysettingup(W)alphaatcp1,
((u)alpha)^p at cp2, and then call solve_equation */
void Extend_Pow(int cp1,
int cp2,
int u,
int offset,
int *head,
int *list, struct pcp_vars *pcp)
{ register int *y = y_address;
register int i; register int value; register int lastg = pcp->lastg;
for (i = 1; i <= lastg; ++i)
y[cp1 + i] = y[cp2 + i] = 0;
/* set up the image of u under alpha at cp2 */
traverse_list(1, head[offset + u], list, cp2, pcp);
/* raise the image of u under alpha to its pth power */
power(pcp->p, cp2, pcp);
/* set up image of W under alpha at cp1 */
if ((value = y[pcp->ppower + u]) < 0)
Collect_Image_Of_Str(-value, cp1, offset, head, list, pcp);
}
#ifdefined(GROUP)
/* given generator t of the p-multiplicator, whose definition is [u,v];hence,wehavetheequation
[u,v]=W*t,orequivalently,u*v=v*u*W*t
whereWisaword(possiblytrivial)inthegeneratorsofthegroup; findtheimageoftunderalphabysettingup (v)alpha*(u)alpha*(W)alphaatcp1,(u)alpha*(v)alphaatcp2
and then call solve_equation */
void Extend_Comm(int cp1,
int cp2,
int u,
int v,
int offset,
int *head,
int *list, struct pcp_vars *pcp)
{ register int *y = y_address;
register int i; register int pointer, value; register int lastg = pcp->lastg;
for (i = 1; i <= lastg; ++i)
y[cp1 + i] = y[cp2 + i] = 0;
/* set up the image of u under alpha at cp2 */
traverse_list(1, head[offset + u], list, cp2, pcp);
/* collect image of v under alpha at cp2 */
Collect_Image_Of_Gen(cp2, head[offset + v], list, pcp);
/* set up image of v under alpha at cp1 */
traverse_list(1, head[offset + v], list, cp1, pcp);
/* collect image of u under alpha at cp1 */
Collect_Image_Of_Gen(cp1, head[offset + u], list, pcp);
/* collect image of W under alpha at cp1 */
pointer = y[pcp->ppcomm + u];
if ((value = y[pointer + v]) < 0)
Collect_Image_Of_Str(-value, cp1, offset, head, list, pcp);
}
#endif
/* there may be a case where each of the exponent and p is large tousethepowerroutinetocomputetheexppowerofthe imageofgeneratorunderautomorphism--itdoesnotseemto
be worthwhile where p = 5 -- needs further investigation */
void Pq_Collect_Image_Of_Gen(
int exp, int cp, int head, int *list, struct pcp_vars *pcp)
{ register int *y = y_address;
register int lused = pcp->lused;
int str = lused + pcp->lastg; register int i;
for (i = 1; i <= pcp->lastg; ++i)
y[lused + i] = 0;
/* collect image of a generator under the
action of an automorphism and store the result at cp */
void Collect_Image_Of_Gen(int cp, int head, int *list, struct pcp_vars *pcp)
{ register int *y = y_address;
register int lused = pcp->lused; register int length = list[++head]; register int i;
y[lused + 1] = length;
for (i = 1; i <= length; ++i)
y[lused + 1 + i] = list[head + i];
collect(-lused, cp, pcp);
}
/* collect image of supplied string under the action of
supplied automorphism and store the result at cp */
void Collect_Image_Of_Str(
int string, int cp, int offset, int *head, int *list, struct pcp_vars *pcp)
{ register int *y = y_address;
register int i; register int generator, exp; register int value; register int length = y[string + 1] - 1; /* last element of string
is in p-multiplicator */ #include"access.h"
/* process the string generator by generator, collecting exp copiesoftheimageofgeneratorunderactionofautomorphism
-- should power routine be used? */
for (i = 1; i <= length; ++i) {
value = y[string + 1 + i];
generator = FIELD2(value);
exp = FIELD1(value); while (exp > 0) {
Collect_Image_Of_Gen(cp, head[offset + generator], list, pcp);
--exp;
}
}
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-09-04)
¤
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.