diff --git a/weyl.c b/weyl.c index b595829..d51197a 100644 --- a/weyl.c +++ b/weyl.c @@ -229,28 +229,26 @@ int weyl_opposition(semisimple_type_t type, int simple_root) r = simple_root - offset; switch(type.factors[factor].series) { + case 'B': case 'C': case 'F': case 'G': + iota_r = r; + break; + case 'A': iota_r = type.factors[factor].rank - 1 - r; break; - case 'B': case 'C': - iota_r = r; - break; - case 'D': - ERROR(1, "A Weyl group of type %c%d does not exist or is not implemented!\n", type.factors[factor].series, type.factors[factor].rank); + if(type.factors[factor].rank % 2 == 0) + iota_r = r; + else + iota_r = r == 0 ? 1 : r == 1 ? 0 : r; break; case 'E': - ERROR(1, "A Weyl group of type %c%d does not exist or is not implemented!\n", type.factors[factor].series, type.factors[factor].rank); - break; - - case 'F': - ERROR(1, "A Weyl group of type %c%d does not exist or is not implemented!\n", type.factors[factor].series, type.factors[factor].rank); - break; - - case 'G': - ERROR(1, "A Weyl group of type %c%d does not exist or is not implemented!\n", type.factors[factor].series, type.factors[factor].rank); + if(type.factors[factor].rank == 6) + iota_r = r; + else + iota_r = r == 3 || r == 4 ? r : 5 - r; break; default: @@ -275,50 +273,46 @@ void weyl_cartan_matrix(semisimple_type_t type, int *m) for(int i = 0; i < type.factors[k].rank; i++) // A is the submatrix corresponding to the current simple factor A[i] = &m[(i+offset)*rank + offset]; + for(int i = 1; i < type.factors[k].rank; i++) { + A[i][i-1] = -1; + A[i-1][i] = -1; + } + + switch(type.factors[k].series) { case 'A': - for(int i = 1; i < type.factors[k].rank; i++) { - A[i][i-1] = -1; - A[i-1][i] = -1; - } break; - case 'B': // not sure at all about the order of B and C - if(type.factors[k].rank >= 2) { - A[0][1] = -2; - A[1][0] = -1; - } - for(int i = 2; i < type.factors[k].rank; i++) { - A[i][i-1] = -1; - A[i-1][i] = -1; - } + case 'B': + ERROR(type.factors[k].rank < 2, "A Weyl group of type %c%d does not exist or is not implemented!\n", type.factors[k].series, type.factors[k].rank); + A[0][1] = -2; break; case 'C': - if(type.factors[k].rank >= 2) { - A[0][1] = -1; - A[1][0] = -2; - } - for(int i = 2; i < type.factors[k].rank; i++) { - A[i][i-1] = -1; - A[i-1][i] = -1; - } + ERROR(type.factors[k].rank < 2, "A Weyl group of type %c%d does not exist or is not implemented!\n", type.factors[k].series, type.factors[k].rank); + A[1][0] = -2; break; case 'D': - ERROR(1, "A Weyl group of type %c%d does not exist or is not implemented!\n", type.factors[k].series, type.factors[k].rank); + ERROR(type.factors[k].rank < 3, "A Weyl group of type %c%d does not exist or is not implemented!\n", type.factors[k].series, type.factors[k].rank); + A[0][1] = A[1][0] = 0; + A[0][2] = A[2][0] = -1; break; case 'E': - ERROR(1, "A Weyl group of type %c%d does not exist or is not implemented!\n", type.factors[k].series, type.factors[k].rank); + ERROR(type.factors[k].rank < 6 || type.factors[k].rank > 8, "A Weyl group of type %c%d does not exist or is not implemented!\n", type.factors[k].series, type.factors[k].rank); + A[1][2] = A[2][1] = 0; + A[1][3] = A[3][1] = -1; break; case 'F': - ERROR(1, "A Weyl group of type %c%d does not exist or is not implemented!\n", type.factors[k].series, type.factors[k].rank); + ERROR(type.factors[k].rank != 4, "A Weyl group of type %c%d does not exist or is not implemented!\n", type.factors[k].series, type.factors[k].rank); + A[3][2] = -2; break; case 'G': - ERROR(1, "A Weyl group of type %c%d does not exist or is not implemented!\n", type.factors[k].series, type.factors[k].rank); + ERROR(type.factors[k].rank != 2, "A Weyl group of type %c%d does not exist or is not implemented!\n", type.factors[k].series, type.factors[k].rank); + A[1][0] = -3; break; default: