/*****************************************************************************
* *
* * gap . c NQ Werner Nickel
* * nickel @ mathematik . tu - darmstadt . de
*/
#include "nq.h"
#include "presentation.h"
#include "relations.h"
#if 0
static void printGapWord(word w) {
int nrc = 30 ; /* something has already been printed */
if (w == (word)0 || w->g == EOW) {
printf("One(F)" );
return ;
}
while (w->g != EOW) {
if (w->g > 0 ) {
nrc += printf("NqF.%d" , w->g);
if (w->e != (expo)1 )
nrc += printf("^" EXP_FORMAT, w->e);
} else {
nrc += printf("NqF.%d" , -w->g);
nrc += printf("^" EXP_FORMAT, -w->e);
}
w++;
if (w->g != EOW) {
putchar('*' );
nrc++;
/*
* * Insert a line break , because GAP can ' t take lines that
* * are too long .
*/
if (nrc > 70 ) { printf("\\\n " ); nrc = 0 ; }
}
}
}
void PrintGapPcPres(void ) {
int i, j;
/*
* * Commands that create the appropriate free group and the
* * collector .
*/
printf("NqF := FreeGroup( %d );\n" , NrPcGens + NrCenGens);
printf("NqCollector := FromTheLeftCollector( NqF );\n" );
for (i = 1 ; i <= NrPcGens + NrCenGens; i++)
if (Exponent[i] != (expo)0 ) {
printf("SetRelativeOrder( NqCollector, %d, " , i);
printf(EXP_FORMAT, Exponent[i]);
printf(" );\n" );
}
/*
* * Print the power relations .
*/
for (i = 1 ; i <= NrPcGens + NrCenGens; i++)
if (Exponent[i] != (expo)0 &&
Power[i] != (word)0 && Power[i]->g != EOW) {
printf("SetPower( NqCollector, %d, " , i);
printGapWord(Power[i]);
printf(" );\n" );
}
/*
* * Print the conjugate relations .
*/
for (j = 1 ; j <= NrPcGens; j++) {
i = 1 ;
while (i < j && Wt(i) + Wt(j) <= Class + (NrCenGens == 0 ? 0 : 1 )) {
/*
printf ( " Print ( % d , \ " \ " , % d , \ " \ \ n \ " ) ; \ n " , j , i ) ;
*/
/* print Conjugate[j][i] */
printf("SetConjugate( NqCollector, %d, %d, " , j, i);
printGapWord(Conjugate[j][i]);
printf(" );\n" );
if (1 && Exponent[i] == (expo)0 ) {
printf("SetConjugate( NqCollector, %d, %d, " , j, -i);
printGapWord(Conjugate[j][-i]);
printf(" );\n" );
}
if (1 && Exponent[j] == (expo)0 ) {
printf("SetConjugate( NqCollector, %d, %d, " , -j, i);
printGapWord(Conjugate[-j][i]);
printf(" );\n" );
}
if (1 && Exponent[i] + Exponent[j] == (expo)0 ) {
printf("SetConjugate( NqCollector, %d, %d, " , -j, -i);
printGapWord(Conjugate[-j][-i] /*, 'A'*/);
printf(" );\n" );
}
i++;
}
}
/*
* * Print the epimorphism . It is sufficient to list the images .
*/
printf("NqImages := [\n" );
for (i = 1 ; i <= NumberOfAbstractGens(); i++) {
printGapWord(Epimorphism(i));
printf(",\n" );
}
printf("];\n" );
printf("NqClass := %d;\n" , Class );
printf("NqRanks := [ " );
for (i = 1 ; i <= Class ; i++) printf(" %d," , Dimension[i]);
printf("];\n" );
}
#endif
static void printRawWord(word w) {
int nrc = 15 ; /* something has already been printed */
if (w == (word)0 || w->g == EOW) { return ; }
while (w->g != EOW) {
if (w->g > 0 ) {
nrc += printf(" %d," , w->g);
nrc += printf(" " EXP_FORMAT"," , w->e);
} else {
nrc += printf(" %d," , -w->g);
nrc += printf(" " EXP_FORMAT"," , -w->e);
}
w++;
/* Avoid long lines, because GAP can't read them. */
if (w->g != EOW && nrc > 70 ) { printf("\\\n " ); nrc = 0 ; }
}
}
void PrintRawGapPcPres(void ) {
int i, j;
int cl = Class + (NrCenGens == 0 ? 0 : 1 );
/*
* * Output the number of generators first and their relative
* * orders .
*/
printf("NqNrGenerators := %d;\n" , NrPcGens + NrCenGens);
printf("NqRelativeOrders := [ " );
for (i = 1 ; i <= NrPcGens + NrCenGens; i++) {
printf(EXP_FORMAT"," , Exponent[i]);
if (i % 30 == 0 ) printf("\n " );
}
printf(" ];\n" );
/*
* * Print weight information .
*/
printf("NqClass := %d;\n" , Class );
printf("NqRanks := [" );
for (i = 1 ; i <= cl; i++) printf(" %d," , Dimension[i]);
printf("];\n" );
/*
* * Print the epimorphism . It is sufficient to list the images .
*/
printf("NqImages := [\n" );
for (i = 1 ; i <= NumberOfAbstractGens(); i++) {
printf(" [ " );
printRawWord(Epimorphism(i));
printf("], # image of generator %d\n" , i);
}
printf("];\n" );
/*
* * Print the power relations .
*/
printf("NqPowers := [\n" );
for (i = 1 ; i <= NrPcGens + NrCenGens; i++)
if (Exponent[i] != (expo)0 &&
Power[i] != (word)0 && Power[i]->g != EOW) {
printf(" [ %d, " , i);
printRawWord(Power[i]);
printf(" ],\n" );
}
printf("];\n" );
/*
* * Print the conjugate relations .
*/
printf("NqConjugates := [\n" );
for (j = 1 ; j <= NrPcGens; j++) {
for (i = 1 ; i < j && Wt(i) + Wt(j) <= cl; i++) {
printf(" [ %d, %d, " , j, i);
printRawWord(Conjugate[j][i]);
printf("],\n" );
}
}
for (j = 1 ; j <= NrPcGens; j++) {
for (i = 1 ; i < j && Wt(i) + Wt(j) <= cl; i++) {
if (Exponent[i] == (expo)0 ) {
printf(" [ %d, %d, " , j, -i);
printRawWord(Conjugate[j][-i]);
printf("],\n" );
}
}
}
for (j = 1 ; j <= NrPcGens; j++) {
for (i = 1 ; i < j && Wt(i) + Wt(j) <= cl; i++) {
if (Exponent[j] == (expo)0 ) {
printf(" [ %d, %d, " , -j, i);
printRawWord(Conjugate[-j][i]);
printf("],\n" );
}
}
}
for (j = 1 ; j <= NrPcGens; j++) {
for (i = 1 ; i < j && Wt(i) + Wt(j) <= cl; i++) {
if (Exponent[i] + Exponent[j] == (expo)0 ) {
printf(" [ %d, %d, " , -j, -i);
printRawWord(Conjugate[-j][-i]);
printf("],\n" );
}
}
}
printf("];\n" );
printf("NqRuntime := %ld;\n" , RunTime());
}
Messung V0.5 in Prozent C=99 H=99 G=98
¤ Dauer der Verarbeitung: 0.5 Sekunden
¤
*© Formatika GbR, Deutschland