13namespace layer3_group_actions {
19 int f_projective,
int f_general,
int f_affine,
20 int f_semilinear,
int f_special,
24 int f_v = (verbose_level >= 1);
27 int f_init_sims =
FALSE;
30 cout <<
"action::init_linear_group "
31 "m=" << m <<
" q=" << F->
q << endl;
36 cout <<
"action::init_linear_group before init_projective_group "
37 "m=" << m <<
" q=" << F->
q
38 <<
" f_semilinear=" << f_semilinear << endl;
45 cout <<
"action::init_linear_group after init_projective_group "
46 "m=" << m <<
" q=" << F->
q
47 <<
" f_semilinear=" << f_semilinear << endl;
52 cout <<
"action::init_linear_group before init_general_linear_group "
53 "m=" << m <<
" q=" << F->
q
54 <<
" f_semilinear=" << f_semilinear << endl;
61 cout <<
"action::init_linear_group after init_general_linear_group "
62 "m=" << m <<
" q=" << F->
q
63 <<
" f_semilinear=" << f_semilinear << endl;
68 cout <<
"action::init_linear_group before init_affine_group "
69 "m=" << m <<
" q=" << F->
q
70 <<
" f_semilinear=" << f_semilinear << endl;
77 cout <<
"action::init_linear_group after init_affine_group "
78 "m=" << m <<
" q=" << F->
q
79 <<
" f_semilinear=" << f_semilinear << endl;
83 cout <<
"action::init_linear_group "
84 "the type of group is not specified" << endl;
90 cout <<
"action::init_linear_group "
91 "fatal: !f_has_strong_generators" << endl;
100 cout <<
"action::init_linear_group "
101 "computing intersection with "
102 "special linear group" << endl;
111 cout <<
"action::init_linear_group "
112 "induced_action_on_determinant finished" << endl;
116 cout <<
"action::init_linear_group "
117 "intersection has order " << go << endl;
125 cout <<
"action::init_linear_group creating strong generators "
126 "for the kernel n the action "
127 "on the determinant" << endl;
138 cout <<
"action::init_linear_group "
139 "before Strong_gens->create_sims" << endl;
146 cout <<
"action::init_linear_group "
147 "sims object has been created" << endl;
160 display_all_PG_elements(m - 1, *F);
168 cout <<
"action::init_linear_group finished" << endl;
175 int f_semilinear,
int f_basis,
int f_init_sims,
179 int f_v = (verbose_level >= 1);
183 cout <<
"action::init_projective_group" << endl;
184 cout <<
"n=" << n <<
" q=" << F->
q << endl;
185 cout <<
"f_semilinear=" << f_semilinear << endl;
186 cout <<
"f_basis=" << f_basis << endl;
201 cout <<
"action::init_projective_group "
202 "before M->init_projective_group" << endl;
205 F, f_semilinear,
this, verbose_level - 3);
207 cout <<
"action::init_projective_group "
208 "after M->init_projective_group" << endl;
214 cout <<
"action::init_projective_group low_level_point_size="
220 cout <<
"action::init_projective_group label=" <<
label << endl;
236 cout <<
"action::init_projective_group "
237 "before setup_linear_group_from_strong_generators"
241 nice_gens, f_init_sims,
244 cout <<
"action::init_projective_group "
245 "after setup_linear_group_from_strong_generators"
250 cout <<
"action::init_projective_group, finished setting up "
252 cout <<
", a permutation group of degree " <<
degree <<
" ";
253 cout <<
"and of order ";
264 int f_basis,
int f_init_sims,
268 int f_v = (verbose_level >= 1);
272 cout <<
"action::init_affine_group" << endl;
273 cout <<
"n=" << n <<
" q=" << F->
q << endl;
274 cout <<
"f_semilinear=" << f_semilinear << endl;
275 cout <<
"f_basis=" << f_basis << endl;
294 cout <<
"action::init_affine_group low_level_point_size="
300 cout <<
"action::init_affine_group label=" <<
label << endl;
315 nice_gens, f_init_sims, verbose_level);
318 cout <<
"action::init_affine_group, finished setting up "
320 cout <<
", a permutation group of degree " <<
degree <<
" ";
321 cout <<
"and of order ";
332 int f_basis,
int f_init_sims,
336 int f_v = (verbose_level >= 1);
340 cout <<
"action::init_general_linear_group" << endl;
341 cout <<
"n=" << n <<
" q=" << F->
q << endl;
342 cout <<
"f_semilinear=" << f_semilinear << endl;
343 cout <<
"f_basis=" << f_basis << endl;
358 f_semilinear,
this, verbose_level - 1);
363 cout <<
"action::init_general_linear_group "
364 "low_level_point_size="
370 cout <<
"action::init_general_linear_group "
371 "label=" <<
label << endl;
387 nice_gens, f_init_sims, verbose_level);
390 cout <<
"action::init_general_linear_group, "
391 "finished setting up " <<
label;
392 cout <<
", a permutation group of degree " <<
degree <<
" ";
393 cout <<
"and of order ";
407 int f_v = (verbose_level >= 1);
411 cout <<
"action::setup_linear_group_from_strong_generators "
412 "setting up a basis" << endl;
413 cout <<
"action::setup_linear_group_from_strong_generators "
414 "before init_matrix_group_strong_generators_builtin" << endl;
421 cout <<
"action::setup_linear_group_from_strong_generators "
422 "after init_matrix_group_strong_generators_builtin" << endl;
430 cout <<
"action::setup_linear_group_from_strong_generators "
431 "before init_sims_from_generators" << endl;
435 cout <<
"action::setup_linear_group_from_strong_generators "
436 "after init_sims_from_generators" << endl;
442 cout <<
"action::setup_linear_group_from_strong_generators done" << endl;
448 int f_v = (verbose_level >= 1);
453 cout <<
"action::init_sims_from_generators" << endl;
457 S->
init(
this, verbose_level - 2);
459 cout <<
"action::init_sims_from_generators "
460 "before S->init_generators" << endl;
464 cout <<
"action::init_sims_from_generators "
465 "after S->init_generators" << endl;
468 cout <<
"action::init_sims_from_generators "
469 "before S->compute_base_orbits_known_length" << endl;
473 cout <<
"action::init_sims_from_generators "
474 "after S->compute_base_orbits_known_length" << endl;
479 cout <<
"action::init_sims_from_generators "
480 "before init_sims" << endl;
484 cout <<
"action::init_sims_from_generators "
485 "after init_sims" << endl;
488 cout <<
"action::init_sims_from_generators done" << endl;
495 int f_semilinear,
int f_basis,
int verbose_level)
497 int f_v = (verbose_level >= 1);
500 cout <<
"action::init_projective_special_group" << endl;
501 cout <<
"n=" << n <<
" q=" << F->
q << endl;
502 cout <<
"f_semilinear=" << f_semilinear << endl;
503 cout <<
"f_basis=" << f_basis << endl;
507 cout <<
"action::init_projective_special_group "
508 "before init_projective_group" << endl;
512 int f_init_sims =
TRUE;
515 f_semilinear, f_basis, f_init_sims,
519 cout <<
"action::init_projective_special_group "
520 "after init_projective_group" << endl;
533 cout <<
"action::init_projective_special_group "
534 "computing intersection with special linear group" << endl;
537 Sims, verbose_level);
539 cout <<
"action::init_projective_special_group "
540 "induced_action_on_determinant finished" << endl;
542 cout <<
"action::init_projective_special_group "
543 "intersection has order " << go << endl;
557 cout <<
"action::init_projective_special_group done" << endl;
566 int f_v = (verbose_level >= 1);
573 cout <<
"action::init_matrix_group_strong_generators_builtin" << endl;
579 cout <<
"action::init_matrix_group_strong_generators_builtin "
580 "computing strong generators builtin group" << endl;
581 cout <<
"n=" << n << endl;
582 cout <<
"q=" << q << endl;
583 cout <<
"p=" << F->
p << endl;
584 cout <<
"e=" << F->
e << endl;
589 cout <<
"action::init_matrix_group_strong_generators_builtin "
590 "getting strong generators" << endl;
620 cout <<
"action::init_matrix_group_strong_generators_builtin "
621 "unknown group type" << endl;
627 cout <<
"action::init_matrix_group_strong_generators_builtin "
628 "before Strong_gens->init_from_data" << endl;
637 cout <<
"action::init_matrix_group_strong_generators_builtin "
638 "after Strong_gens->init_from_data" << endl;
641 cout <<
"action::init_matrix_group_strong_generators_builtin "
642 "generators:" << endl;
649 cout <<
"action::init_matrix_group_strong_generators_builtin "
650 "computing strong generators builtin group finished" << endl;
657 int f_v = (verbose_level >= 1);
658 int f_vv = (verbose_level >= 2);
663 cout <<
"action::init_permutation_group, degree=" <<
degree << endl;
665 sprintf(str,
"Perm%d",
degree);
677 cout <<
"action::init_permutation_group before P->init" << endl;
680 P->
init(
degree, page_length_log, verbose_level);
683 cout <<
"action::init_permutation_group after P->init" << endl;
706 cout <<
"action::init_permutation_group "
712 cout <<
"action::init_permutation_group "
713 "calling allocate_base_data" << endl;
731 cout <<
"action::init_permutation_group finished" << endl;
732 cout <<
"a permutation group of degree " <<
action::degree << endl;
733 cout <<
"and of order ";
739 cout <<
"action::init_permutation_group done" << endl;
747 int f_v = (verbose_level >= 1);
750 cout <<
"action::init_permutation_group_from_nauty_output" << endl;
754 cout <<
"action::init_permutation_group_from_nauty_output "
755 "before init_permutation_group_from_generators" << endl;
764 cout <<
"action::init_permutation_group_from_nauty_output "
765 "after init_permutation_group_from_generators" << endl;
769 cout <<
"action::init_permutation_group_from_nauty_output done" << endl;
776 int nb_gens,
int *gens,
777 int given_base_length,
long int *given_base,
781 int f_v = (verbose_level >= 1);
782 int f_vv = (verbose_level >= 2);
788 cout <<
"action::init_permutation_group_from_generators "
789 "degree=" <<
degree <<
" nb_gens=" << nb_gens
790 <<
" given_base_length=" << given_base_length << endl;
792 cout <<
"action::init_permutation_group_from_generators "
793 "target group order is " << target_go << endl;
796 cout <<
"action::init_permutation_group_from_generators "
797 "no target group order is given" << endl;
800 sprintf(str,
"Perm%d",
degree);
807 cout <<
"action::init_permutation_group_from_generators "
808 "the " << nb_gens <<
" generators are" << endl;
809 for (i = 0; i < nb_gens; i++) {
815 cout <<
"too large to print";
822 cout <<
"action::init_permutation_group_from_generators "
823 "calling init_permutation_group" << endl;
827 cout <<
"action::init_permutation_group_from_generators "
828 "after init_permutation_group" << endl;
839 cout <<
"action::init_permutation_group_from_generators "
845 cout <<
"action::init_permutation_group_from_generators "
846 "calling allocate_base_data" << endl;
847 cout <<
"given_base:";
849 cout <<
" of length " << given_base_length << endl;
856 base_i(i) = given_base[i];
862 cout <<
"action::init_permutation_group_from_generators, "
863 "now trying to set up the group from the given generators"
871 generators->
init(
this, verbose_level - 2);
872 generators->
allocate(nb_gens, verbose_level - 2);
873 for (i = 0; i < nb_gens; i++) {
880 cout <<
"action::init_permutation_group_from_generators "
881 "before generators_to_strong_generators" << endl;
884 f_target_go, target_go,
888 cout <<
"action::init_permutation_group_from_generators "
889 "after generators_to_strong_generators" << endl;
895 cout <<
"action::init_permutation_group_from_generators "
896 "before Strong_gens->create_sims" << endl;
900 cout <<
"action::init_permutation_group_from_generators "
901 "after Strong_gens->create_sims" << endl;
906 cout <<
"action::init_permutation_group_from_generators "
907 "before init_sims_only" << endl;
915 cout <<
"action::init_permutation_group_from_generators "
916 "after init_sims_only" << endl;
922 cout <<
"action::init_permutation_group_from_generators "
923 "before compute_strong_generators_from_sims" << endl;
927 cout <<
"action::init_permutation_group_from_generators "
928 "after_strong_generators_from_sims" << endl;
938 cout <<
"action::init_permutation_group_from_generators done" << endl;
944 int f_semilinear,
int frobenius_power,
945 int f_multiplication,
946 int multiplication_order,
949 int f_v = (verbose_level >= 1);
952 int given_base_length;
953 long int *given_base;
960 cout <<
"action::init_affine_group" << endl;
962 sprintf(str1,
"AGL_%d_%d", n, q);
963 sprintf(str2,
"AGL(%d,%d)", n, q);
975 f_semilinear, frobenius_power,
976 f_multiplication, multiplication_order,
978 given_base_length, given_base, verbose_level - 2);
983 given_base_length, given_base,
990 cout <<
"action::init_affine_group done" << endl;
997 int f_v = (verbose_level >= 1);
999 int given_base_length;
1000 long int *given_base;
1008 cout <<
"action::init_symmetric_group f_no_base=" << f_no_base << endl;
1010 sprintf(str1,
"Sym_%d",
degree);
1011 sprintf(str2,
"Sym(%d)",
degree);
1020 given_base_length =
degree - 1;
1022 given_base =
NEW_lint(given_base_length);
1025 for (i = 0; i < nb_gens; i++) {
1026 for (j = 0; j <
degree; j++) {
1027 gens[i *
degree + j] = j;
1029 gens[i *
degree + i] = i + 1;
1030 gens[i *
degree + i + 1] = i;
1033 for (i = 0; i < given_base_length; i++) {
1037 cout <<
"action::init_symmetric_group before init_permutation_group_from_generators" << endl;
1042 given_base_length, given_base,
1046 cout <<
"action::init_symmetric_group after init_permutation_group_from_generators" << endl;
1051 cout <<
"action::init_symmetric_group done" << endl;
1058 int f_v = (verbose_level >= 1);
1062 cout <<
"action::create_sims" << endl;
1065 cout <<
"action::create_sims we need strong generators" << endl;
1074 cout <<
"action::create_sims done" << endl;
1082 void (* callback_choose_random_generator)(
int iteration,
1083 int *Elt,
void *data,
int verbose_level),
1088 int f_v = (verbose_level >= 1);
1092 cout <<
"action::create_orthogonal_group" << endl;
1102 cout <<
"action::create_orthogonal_group "
1103 "before Mtx->init_base_projective" << endl;
1109 cout <<
"action::create_orthogonal_group "
1110 "after Mtx->init_base_projective" << endl;
1116 cout <<
"action::create_orthogonal_group "
1117 "before allocating a schreier_sims object" << endl;
1124 cout <<
"action::create_orthogonal_group "
1125 "before ss.init" << endl;
1127 ss.
init(
this, verbose_level - 1);
1129 cout <<
"action::create_orthogonal_group "
1130 "after ss.init" << endl;
1135 if (f_has_target_group_order) {
1140 cout <<
"action::create_orthogonal_group "
1141 "before ss.init_random_process" << endl;
1144 callback_choose_random_generator,
1148 cout <<
"action::create_orthogonal_group "
1149 "after ss.init_random_process" << endl;
1153 cout <<
"action::create_orthogonal_group "
1154 "before ss.create_group" << endl;
1158 cout <<
"action::create_orthogonal_group "
1159 "after ss.create_group" << endl;
1173 cout <<
"action::create_orthogonal_group after init_sims, "
1174 "calling compute_strong_generators_from_sims" << endl;
1178 cout <<
"action::create_orthogonal_group done, "
1179 "freeing schreier_sims object" << endl;
1183 cout <<
"action::create_orthogonal_group "
1190 int nb_factors,
int n,
1195 int f_v = (verbose_level >= 1);
1204 cout <<
"action::init_wreath_product_group_and_restrict" << endl;
1205 cout <<
"nb_factors=" << nb_factors
1206 <<
" n=" << n <<
" q=" << F->
q << endl;
1210 cout <<
"action::init_wreath_product_group_and_restrict "
1211 "before A_wreath->init_wreath_product_group" << endl;
1216 cout <<
"action::init_wreath_product_group_and_restrict "
1217 "after A_wreath->init_wreath_product_group" << endl;
1223 for (i = 0; i < nb_points; i++) {
1228 cout <<
"action::init_wreath_product_group_and_restrict "
1229 "before A_wreath->restricted_action" << endl;
1235 cout <<
"action::init_wreath_product_group_and_restrict "
1236 "after A_wreath->restricted_action" << endl;
1239 memcpy(
this, Awr,
sizeof(
action));
1250 int f_v = (verbose_level >= 1);
1256 cout <<
"action::init_wreath_product_group" << endl;
1257 cout <<
"nb_factors=" << nb_factors
1258 <<
" n=" << n <<
" q=" << F->
q << endl;
1272 cout <<
"action::init_wreath_product_group "
1273 "before M->init_general_linear_group" << endl;
1279 cout <<
"action::init_wreath_product_group "
1280 "after M->init_general_linear_group" << endl;
1284 cout <<
"action::init_wreath_product_group "
1285 "before W->init_tensor_wreath_product" << endl;
1290 cout <<
"action::init_wreath_product_group "
1291 "after W->init_tensor_wreath_product" << endl;
1300 cout <<
"action::init_wreath_product_group "
1301 "low_level_point_size="
1310 cout <<
"action::init_wreath_product_group "
1311 "label=" <<
label << endl;
1328 cout <<
"action::init_wreath_product_group "
1329 "degree=" <<
degree << endl;
1334 cout <<
"action::init_wreath_product_group "
1335 "before Stabilizer_chain->allocate_base_data" << endl;
1340 cout <<
"action::init_wreath_product_group "
1353 cout <<
"action::init_wreath_product_group "
1354 "before W->make_strong_generators_data" << endl;
1357 gens_size, gens_nb, verbose_level - 10);
1359 cout <<
"action::init_wreath_product_group "
1360 "after W->make_strong_generators_data" << endl;
1364 cout <<
"action::init_wreath_product_group "
1365 "before Strong_gens->init_from_data" << endl;
1372 verbose_level - 10);
1374 cout <<
"action::init_wreath_product_group "
1375 "after Strong_gens->init_from_data" << endl;
1386 S->
init(
this, verbose_level - 2);
1388 cout <<
"action::init_wreath_product_group "
1389 "before S->init_generators" << endl;
1393 cout <<
"action::init_wreath_product_group "
1394 "after S->init_generators" << endl;
1397 cout <<
"action::init_wreath_product_group "
1398 "before S->compute_base_orbits_known_length" << endl;
1402 cout <<
"action::init_wreath_product_group "
1403 "after S->compute_base_orbits_known_length" << endl;
1408 cout <<
"action::init_wreath_product_group "
1409 "before init_sims_only" << endl;
1415 cout <<
"action::init_wreath_product_group "
1416 "after init_sims_only" << endl;
1422 cout <<
"action::init_wreath_product_group "
1423 "because the degree is very large, "
1424 "we are not creating a sims object" << endl;
1428 cout <<
"action::init_wreath_product_group, finished setting up "
1430 cout <<
", a permutation group of degree " <<
degree <<
" ";
1431 cout <<
"and of order ";
1441 int f_stay_in_the_old_action,
1443 int *Perms,
int degree,
1446 int f_v = (verbose_level >= 1);
1452 cout <<
"action::init_permutation_representation" << endl;
1453 cout <<
"original action=" << A_original->
label <<
" restricted to degree " <<
degree << endl;
1454 cout <<
"f_stay_in_the_old_action=" << f_stay_in_the_old_action << endl;
1460 cout <<
"action::init_permutation_representation before P->init" << endl;
1463 f_stay_in_the_old_action,
1468 cout <<
"action::init_permutation_representation after P->init" << endl;
1475 if (f_stay_in_the_old_action) {
1483 cout <<
"action::init_permutation_representation A_original->type_G != wreath_product_t" << endl;
1489 cout <<
"action::init_permutation_representation "
1490 "degree=" <<
degree << endl;
1495 cout <<
"action::init_permutation_representation "
1496 "before Stabilizer_chain->allocate_base_data" << endl;
1502 cout <<
"action::init_permutation_representation "
1510 sprintf(str1,
"_induced%d_prev",
degree);
1511 sprintf(str2,
" induced%d prev",
degree);
1525 sprintf(str1,
"_induced%d",
degree);
1526 sprintf(str2,
" induced%d",
degree);
1542 cout <<
"action::init_permutation_representation "
1543 "label=" <<
label << endl;
1558 cout <<
"action::init_permutation_representation "
1559 "degree=" <<
degree << endl;
1563 cout <<
"action::init_permutation_representation, finished setting up "
1565 cout <<
", a permutation group of degree " <<
degree <<
" ";
1566 cout <<
"and of order ";
1577 int f_on_points,
int f_on_lines,
int f_on_points_and_lines,
1579 int f_basis,
int verbose_level)
1581 int f_v = (verbose_level >= 1);
1582 int f_vv = (verbose_level >= 2);
1586 cout <<
"action::init_orthogonal_group "
1587 "verbose_level=" << verbose_level << endl;
1591 cout <<
"action::init_orthogonal_group before O->init" << endl;
1593 O->
init(epsilon, n, F, verbose_level);
1595 cout <<
"action::init_orthogonal_group after O->init" << endl;
1599 f_on_points, f_on_lines, f_on_points_and_lines,
1601 f_basis, verbose_level);
1605 cout <<
"action::init_orthogonal_group done" << endl;
1610 int f_on_points,
int f_on_lines,
int f_on_points_and_lines,
1612 int f_basis,
int verbose_level)
1614 int f_v = (verbose_level >= 1);
1615 int f_vv = (verbose_level >= 2);
1622 cout <<
"action::init_orthogonal_group_with_O "
1623 "verbose_level=" << verbose_level << endl;
1627 cout <<
"action::init_orthogonal_group_with_O "
1628 "before A->init_projective_group" << endl;
1636 cout <<
"action::init_orthogonal_group_with_O "
1637 "after A->init_projective_group" << endl;
1643 cout <<
"action::init_orthogonal_group_with_O before AO->init" << endl;
1645 AO->
init(A, O, f_on_points, f_on_lines,
1646 f_on_points_and_lines, verbose_level - 2);
1648 cout <<
"action::init_orthogonal_group_with_O after AO->init" << endl;
1670 sprintf(str1,
"PGGOp_%d_%d", O->
n, q);
1671 sprintf(str2,
"{\\rm P}\\Gamma{\\rm O}^+(%d,%d)", O->
n, q);
1674 sprintf(str1,
"PGGOm_%d_%d", O->
n, q);
1675 sprintf(str2,
"{\\rm P}\\Gamma{\\rm O}^-(%d,%d)", O->
n, q);
1678 sprintf(str1,
"PGGO_%d_%d", O->
n, q);
1679 sprintf(str2,
"{\\rm P}\\Gamma{\\rm O}(%d,%d)", O->
n, q);
1684 sprintf(str1,
"PGOp_%d_%d", O->
n, q);
1685 sprintf(str2,
"{\\rm PGO}^+(%d,%d)", O->
n, q);
1688 sprintf(str1,
"PGOm_%d_%d", O->
n, q);
1689 sprintf(str2,
"{\\rm PGO}^-(%d,%d)", O->
n, q);
1692 sprintf(str1,
"PGO_%d_%d", O->
n, q);
1693 sprintf(str2,
"{\\rm PGO}(%d,%d)", O->
n, q);
1708 cout <<
"action::init_orthogonal_group_with_O "
1709 "we will create the orthogonal group now" << endl;
1716 cout <<
"action::init_orthogonal_group_with_O "
1717 "with reflections, before order_PO_epsilon" << endl;
1720 target_go, verbose_level);
1724 cout <<
"action::init_orthogonal_group_with_O "
1725 "without reflections, before order_POmega_epsilon"
1729 O->
F->
q, target_go, verbose_level);
1733 cout <<
"action::init_orthogonal_group_with_O "
1734 "the target group order is " << target_go << endl;
1738 cout <<
"action::init_orthogonal_group_with_O "
1739 "before create_orthogonal_group" << endl;
1746 cout <<
"action::init_orthogonal_group_with_O "
1747 "after create_orthogonal_group" << endl;
1752 cout <<
"action::init_orthogonal_group_with_O done" << endl;
1757 int f_init_hash_table,
int verbose_level)
1759 int f_v = (verbose_level >= 1);
1760 int f_vv = (verbose_level >= 2);
1761 int p, hh, epsilon, n;
1762 int f_semilinear =
FALSE;
1766 cout <<
"action::init_BLT q=" << F->
q
1767 <<
" f_init_hash_table=" << f_init_hash_table << endl;
1768 cout <<
"f_basis=" << f_basis << endl;
1769 cout <<
"verbose_level=" << verbose_level << endl;
1773 f_semilinear =
TRUE;
1775 f_semilinear =
FALSE;
1781 cout <<
"action::init_BLT before init_orthogonal_group" << endl;
1791 cout <<
"action::init_BLT after init_orthogonal_group" << endl;
1797 cout <<
"action::init_BLT computing lex least base" << endl;
1801 cout <<
"action::init_BLT computing lex least base done" << endl;
1814 cout <<
"action::init_BLT strong "
1815 "generators have been computed" << endl;
1822 cout <<
"action::init_BLT we don't have strong generators" << endl;
1827 if (f_init_hash_table) {
1835 cout <<
"calling init_hash_table_parabolic" << endl;
1837 init_hash_table_parabolic(*O->F, 4, 0 );
1845 cout <<
"action::init_BLT done" << endl;
1852 int given_base_length,
int *given_base,
1855 int f_v = (verbose_level >= 1);
1856 int f_vv = (verbose_level >= 2);
1857 int f_vvv = (verbose_level >= 3);
1864 cout <<
"action::init_group_from_strong_generators" << endl;
1866 label.assign(
"from sgs");
1870 cout <<
"generators are" << endl;
1877 cout <<
"action::init_group_from_strong_generators "
1878 "calling allocate_base_data, initial base:";
1880 cout <<
" of length " << given_base_length << endl;
1888 base_i(i) = given_base[i];
1894 cout <<
"action::init_group_from_strong_generators, "
1895 "now trying to set up the group "
1896 "from the given generators" << endl;
1901 G->init(
this, verbose_level - 2);
1902 G->init_trivial_group(verbose_level - 1);
1903 G->group_order(G_order);
1905 G->build_up_group_from_generators(K, gens,
1911 G->group_order(G_order);
1920 cout <<
"init_group_from_strong_generators: "
1921 "found a group of order " << G_order << endl;
1923 cout <<
"transversal lengths:" << endl;
1925 for (
int t = 0; t <
G->A->base_len(); t++) {
1926 cout <<
G->get_orbit_length(t) <<
", ";
1933 cout <<
"action::init_group_from_strong_generators before init_sims_only" << endl;
1937 cout <<
"action::init_group_from_strong_generators after init_sims_only" << endl;
1945 cout <<
"action::init_group_from_strong_generators done" << endl;
1952 int *tl,
int len,
int verbose_level)
1954 int f_v = (verbose_level >= 1);
1960 cout <<
"action::create_sims_from_generators_with_target_group_order_factorized" << endl;
1964 cout <<
"action::create_sims_from_generators_with_target_group_order_factorized go=" << go << endl;
1967 cout <<
"action::create_sims_from_generators_with_target_group_order_factorized "
1968 "before create_sims_from_generators_randomized" << endl;
1971 gens,
TRUE , go, verbose_level - 3);
1973 cout <<
"action::create_sims_from_generators_with_target_group_order_factorized done" << endl;
1980 long int target_go,
int verbose_level)
1984 tgo.
create(target_go, __FILE__, __LINE__);
1986 gens, tgo, verbose_level - 3);
1995 gens,
TRUE , target_go, verbose_level - 3);
2004 gens,
FALSE , dummy, verbose_level - 3);
2008 int *Elt,
int verbose_level)
2010 int f_v = (verbose_level >= 1);
2016 cout <<
"action::create_sims_from_single_generator_"
2017 "without_target_group_order" << endl;
2023 gens,
FALSE , dummy, verbose_level - 3);
2027 cout <<
"action::create_sims_from_single_generator_"
2028 "without_target_group_order done" << endl;
2038 int f_v = (verbose_level >= 1);
2045 cout <<
"action::create_sims_from_generators_randomized" << endl;
2046 cout <<
"verbose_level=" << verbose_level << endl;
2048 cout <<
"creating a group of order " << target_go << endl;
2050 cout <<
"action::create_sims_from_generators_randomized target_go is zero" << endl;
2055 cout <<
"action::create_sims_from_generators_randomized no target group order given" << endl;
2064 cout <<
"action::create_sims_from_generators_randomized "
2065 "before ss->init" << endl;
2067 ss->
init(
this, verbose_level - 1);
2069 cout <<
"action::create_sims_from_generators_randomized "
2070 "after ss->init" << endl;
2080 cout <<
"action::create_sims_from_generators_randomized "
2081 "before ss->init_generators" << endl;
2085 cout <<
"action::create_sims_from_generators_randomized "
2086 "after ss->init_generators" << endl;
2090 cout <<
"action::create_sims_from_generators_randomized "
2091 "before ss->create_group" << endl;
2095 cout <<
"action::create_sims_from_generators_randomized "
2096 "after ss->create_group" << endl;
2112 cout <<
"action::create_sims_from_generators_randomized done" << endl;
2118 int *Mtx,
int verbose_level)
2120 int f_v = (verbose_level >= 1);
2121 int f_vv = (verbose_level >= 2);
2128 cout <<
"action::create_sims_for_centralizer_of_matrix" << endl;
2132 cout <<
"action::create_sims_for_centralizer_of_matrix "
2133 "action not of type matrix_group" << endl;
2145 cout <<
"action::create_sims_for_centralizer_of_matrix "
2146 "before M->init_gl_classes" << endl;
2154 cout <<
"action::create_sims_for_centralizer_of_matrix "
2155 "d = " << d <<
" q = " << q << endl;
2156 cout <<
"Mtx=" << endl;
2171 cout <<
"create_sims_for_centralizer_of_matrix "
2172 "There are " << nb_classes <<
" conjugacy classes" << endl;
2175 cout <<
"create_sims_for_centralizer_of_matrix "
2176 "The conjugacy classes are:" << endl;
2177 for (i = 0; i < nb_classes; i++) {
2178 cout <<
"Class " << i <<
":" << endl;
2179 int_matrix_print(Reps[i].type_coding.M,
2180 Reps[i].type_coding.m, Reps[i].type_coding.n);
2181 cout <<
"Centralizer order = "
2182 << Reps[i].centralizer_order << endl;
2208 cout <<
"action::create_sims_for_centralizer_of_matrix "
2209 "before generators_for_centralizer" << endl;
2212 nb_gens, nb_alloc, verbose_level - 2);
2215 cout <<
"action::create_sims_for_centralizer_of_matrix "
2218 cout <<
"create_sims_for_centralizer_of_matrix "
2219 "We found " << nb_gens <<
" centralizing matrices" << endl;
2223 cout <<
"action::create_sims_for_centralizer_of_matrix "
2225 for (i = 0; i < nb_gens; i++) {
2226 cout <<
"Gen " << i <<
" / " << nb_gens <<
" is:" << endl;
2231 for (i = 0; i < nb_gens; i++) {
2234 cout <<
"The matrices do not commute" << endl;
2235 cout <<
"Mtx=" << endl;
2237 cout <<
"Gens[i]=" << endl;
2246 cout <<
"The type of the matrix under "
2247 "consideration is:" << endl;
2258 cout <<
"The index of the class of the "
2259 "matrix is = " << class_rep << endl;
2273 gens->
init(
this, verbose_level - 2);
2274 gens->
allocate(nb_gens, verbose_level - 2);
2277 for (i = 0; i < nb_gens; i++) {
2285 cout <<
"before centralizer_order_Kung" << endl;
2289 cout <<
"after centralizer_order_Kung, "
2290 "centralizer_order=" << centralizer_order << endl;
2302 cout <<
"action::create_sims_for_centralizer_of_matrix "
2303 "The order of the centralizer is " << cent_go << endl;
2309 for (i = 0; i < nb_gens; i++) {
2323 cout <<
"action::create_sims_for_centralizer_of_matrix done" << endl;
2330 std::string &fname_base,
2331 int *Table,
int group_order,
int *gens,
int nb_gens,
2335 int f_v = (verbose_level >= 1);
2344 cout <<
"action::init_automorphism_group_from_group_table" << endl;
2349 N_gens, N_nb_gens, N_go, verbose_level);
2352 cout <<
"action::init_automorphism_group_from_group_table "
2353 "The holomorph has order " << N_go
2354 <<
" and is generated by " << N_nb_gens <<
" elements" << endl;
2356 go.
create(N_go, __FILE__, __LINE__);
2359 for (i = 0; i < N_nb_gens; i++) {
2360 cout <<
"holomorph generator " << i <<
" / "
2361 << N_nb_gens <<
":" << endl;
2363 ord = perm_order(N_gens + i * H->group_order, H->group_order);
2364 cout <<
"an element of order " << ord << endl;
2365 for (j = 0; j < nb_gens; j++) {
2367 b = N_gens[i * H->group_order + a];
2368 cout << a <<
" -> " << b <<
" : ";
2369 H->unrank_element(H->Elt1, a);
2370 H->unrank_element(H->Elt2, b);
2371 int_vec_print(cout, H->Elt1, H->len);
2373 int_vec_print(cout, H->Elt2, H->len);
2377 given_base_length = H->len;
2378 given_base =
NEW_int(given_base_length);
2379 for (i = 0; i < given_base_length; i++) {
2380 given_base[i] = i_power_j(q, i);
2382 cout <<
"given base: ";
2383 int_vec_print(cout, given_base, given_base_length);
2390 cout <<
"action::init_automorphism_group_from_group_table "
2391 "creating holomorph" << endl;
2397 for (i = 0; i < nb_gens; i++) {
2412 cout <<
"action::init_automorphism_group_from_group_table "
2413 "The order of the holomorph is " << go << endl;
2419 cout <<
"action::init_automorphism_group_from_group_table "
2420 "creating automorphism group" << endl;
2425 cout <<
"action::init_automorphism_group_from_group_table "
2426 "The automorphism group has order " << Aut_order << endl;
#define STABILIZER_CHAIN_DATA_MAX_DEGREE
conjugacy class in GL(n,q) described using rational normal form
data_structures::int_matrix * type_coding
void centralizer_order_Kung(gl_classes *C, ring_theory::longinteger_object &co, int verbose_level)
to list all conjugacy classes in GL(n,q)
void generators_for_centralizer(int *Mtx, gl_class_rep *R, int *Basis, int **&Gens, int &nb_gens, int &nb_alloc, int verbose_level)
void make_classes(gl_class_rep *&R, int &nb_classes, int f_no_eigenvalue_one, int verbose_level)
int find_class_rep(gl_class_rep *Reps, int nb_reps, gl_class_rep *R, int verbose_level)
generators for various classes of groups
void strong_generators_for_affine_linear_group(int n, field_theory::finite_field *F, int f_semilinear, int *&data, int &size, int &nb_gens, int verbose_level)
void order_PO_epsilon(int f_semilinear, int epsilon, int k, int q, ring_theory::longinteger_object &go, int verbose_level)
void affine_generators(int n, field_theory::finite_field *F, int f_translations, int f_semilinear, int frobenius_power, int f_multiplication, int multiplication_order, int &nb_gens, int °ree, int *&gens, int &base_len, long int *&the_base, int verbose_level)
void order_POmega_epsilon(int epsilon, int m, int q, ring_theory::longinteger_object &o, int verbose_level)
void strong_generators_for_projective_linear_group(int n, field_theory::finite_field *F, int f_semilinear, int *&data, int &size, int &nb_gens, int verbose_level)
void strong_generators_for_general_linear_group(int n, field_theory::finite_field *F, int f_semilinear, int *&data, int &size, int &nb_gens, int verbose_level)
a collection of combinatorial functions
void perm_print(std::ostream &ost, int *a, int n)
output data created by a run of nauty
ring_theory::longinteger_object * Ago
void finite_field_init(int q, int f_without_tables, int verbose_level)
linear_algebra::linear_algebra * Linear_algebra
int test_if_commute(int *A, int *B, int k, int verbose_level)
basic number theoretic functions
int is_prime_power(int q)
interface to the computer algebra system MAGMA
void normalizer_in_Sym_n(std::string &fname_base, int group_order, int *Table, int *gens, int nb_gens, int *&N_gens, int &N_nb_gens, int &N_go, int verbose_level)
an orthogonal geometry O^epsilon(n,q)
field_theory::finite_field * F
void init(int epsilon, int n, field_theory::finite_field *F, int verbose_level)
domain to compute with objects of type longinteger
void multiply_up(longinteger_object &a, int *x, int len, int verbose_level)
void factorial(longinteger_object &result, int n)
a class to represent arbitrary precision integers
void create(long int i, const char *file, int line)
global functions related to group actions
int get_orthogonal_group_type_f_reflection()
interface to the implementation functions for group actions
void init_function_pointers_wreath_product_group()
void init_function_pointers_permutation_group()
void init_function_pointers_permutation_representation_group()
void init_function_pointers_matrix_group()
void init_function_pointers_induced_action()
a permutation group in a fixed action.
int *& get_transversal_length()
action * restricted_action(long int *points, int nb_points, int verbose_level)
void init_general_linear_group(int n, field_theory::finite_field *F, int f_semilinear, int f_basis, int f_init_sims, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
int coded_elt_size_in_char
void create_orthogonal_group(action *subaction, int f_has_target_group_order, ring_theory::longinteger_object &target_go, void(*callback_choose_random_generator)(int iteration, int *Elt, void *data, int verbose_level), int verbose_level)
void init_matrix_group_strong_generators_builtin(groups::matrix_group *M, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
groups::sims * create_sims_from_generators_with_target_group_order_factorized(data_structures_groups::vector_ge *gens, int *tl, int len, int verbose_level)
void init_symmetric_group(int degree, int f_no_base, int verbose_level)
void init_wreath_product_group_and_restrict(int nb_factors, int n, field_theory::finite_field *F, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void lex_least_base_in_place(int verbose_level)
void induced_action_on_determinant(groups::sims *old_G, int verbose_level)
symmetry_group_type type_G
void init_group_from_strong_generators(data_structures_groups::vector_ge *gens, groups::sims *K, int given_base_length, int *given_base, int verbose_level)
void init_orthogonal_group_with_O(orthogonal_geometry::orthogonal *O, int f_on_points, int f_on_lines, int f_on_points_and_lines, int f_semilinear, int f_basis, int verbose_level)
groups::strong_generators * Strong_gens
void init_sims_only(groups::sims *G, int verbose_level)
void compute_strong_generators_from_sims(int verbose_level)
void init_affine_group(int n, field_theory::finite_field *F, int f_semilinear, int f_basis, int f_init_sims, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
int f_has_strong_generators
void init_projective_group(int n, field_theory::finite_field *F, int f_semilinear, int f_basis, int f_init_sims, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
stabilizer_chain_base_data * Stabilizer_chain
void init_BLT(field_theory::finite_field *F, int f_basis, int f_init_hash_table, int verbose_level)
void init_orthogonal_group(int epsilon, int n, field_theory::finite_field *F, int f_on_points, int f_on_lines, int f_on_points_and_lines, int f_semilinear, int f_basis, int verbose_level)
groups::sims * create_sims_from_generators_randomized(data_structures_groups::vector_ge *gens, int f_target_go, ring_theory::longinteger_object &target_go, int verbose_level)
void init_permutation_group_from_nauty_output(data_structures::nauty_output *NO, int verbose_level)
void create_sims(int verbose_level)
void init_projective_special_group(int n, field_theory::finite_field *F, int f_semilinear, int f_basis, int verbose_level)
void setup_linear_group_from_strong_generators(groups::matrix_group *M, data_structures_groups::vector_ge *&nice_gens, int f_init_sims, int verbose_level)
void make_element(int *Elt, int *data, int verbose_level)
void init_automorphism_group_from_group_table(std::string &fname_base, int *Table, int group_order, int *gens, int nb_gens, groups::strong_generators *&Aut_gens, int verbose_level)
groups::sims * create_sims_from_generators_without_target_group_order(data_structures_groups::vector_ge *gens, int verbose_level)
void element_move(void *a, void *b, int verbose_level)
groups::sims * create_sims_from_single_generator_without_target_group_order(int *Elt, int verbose_level)
void init_permutation_group(int degree, int f_no_base, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
void init_sims_from_generators(int verbose_level)
groups::matrix_group * get_matrix_group()
void generators_to_strong_generators(int f_target_go, ring_theory::longinteger_object &target_go, data_structures_groups::vector_ge *gens, groups::strong_generators *&Strong_gens, int verbose_level)
void init_permutation_representation(action *A_original, int f_stay_in_the_old_action, data_structures_groups::vector_ge *gens, int *Perms, int degree, int verbose_level)
groups::sims * create_sims_from_generators_with_target_group_order_lint(data_structures_groups::vector_ge *gens, long int target_go, int verbose_level)
void init_linear_group(field_theory::finite_field *F, int m, int f_projective, int f_general, int f_affine, int f_semilinear, int f_special, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void init_permutation_group_from_generators(int degree, int f_target_go, ring_theory::longinteger_object &target_go, int nb_gens, int *gens, int given_base_length, long int *given_base, int f_no_base, int verbose_level)
void allocate_element_data()
action_pointer_table * ptr
groups::sims * create_sims_for_centralizer_of_matrix(int *Mtx, int verbose_level)
groups::sims * create_sims_from_generators_with_target_group_order(data_structures_groups::vector_ge *gens, ring_theory::longinteger_object &target_go, int verbose_level)
void print_group_order(std::ostream &ost)
void init_wreath_product_group(int nb_factors, int n, field_theory::finite_field *F, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
the transversals in the stabilizer subgroup chain (Sims chain)
void allocate_base_data(action *A, int base_len, int verbose_level)
to hold a vector of group elements
void init_single(actions::action *A, int *Elt, int verbose_level)
void allocate(int length, int verbose_level)
void print(std::ostream &ost)
void init(actions::action *A, int verbose_level)
a matrix group over a finite field in projective, vector space or affine action
void init_gl_classes(int verbose_level)
void init_affine_group(int n, field_theory::finite_field *F, int f_semilinear, actions::action *A, int verbose_level)
void init_base_projective(actions::action *A, int verbose_level)
void init_projective_group(int n, field_theory::finite_field *F, int f_semilinear, actions::action *A, int verbose_level)
field_theory::finite_field * GFq
void init_general_linear_group(int n, field_theory::finite_field *F, int f_semilinear, actions::action *A, int verbose_level)
a domain for permutation groups whose elements are given in the permutation representation
void init(int degree, int page_length_log, int verbose_level)
homomorphism to a permutation group
void init(actions::action *A_original, int f_stay_in_the_old_action, data_structures_groups::vector_ge *gens, int *Perms, int degree, int verbose_level)
Schreier Sims algorithm to create the stabilizer chain of a permutation group.
void init(actions::action *A, int verbose_level)
void init_generators(data_structures_groups::vector_ge *gens, int verbose_level)
void interested_in_kernel(actions::action *KA, int verbose_level)
void create_group(int verbose_level)
void init_random_process(void(*callback_choose_random_generator)(int iteration, int *Elt, void *data, int verbose_level), void *callback_choose_random_generator_data, int verbose_level)
void init_target_group_order(ring_theory::longinteger_object &tgo, int verbose_level)
a permutation group represented via a stabilizer chain
void init(actions::action *A, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
void compute_base_orbits_known_length(int *tl, int verbose_level)
void init_generators(data_structures_groups::vector_ge &generators, int verbose_level)
a strong generating set for a permutation group with respect to a fixed action
void init_from_data(actions::action *A, int *data, int nb_elements, int elt_size, int *transversal_length, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
strong_generators * point_stabilizer(int pt, int verbose_level)
sims * create_sims(int verbose_level)
void print_generators_tex()
void print_generators(std::ostream &ost)
void init_from_sims(groups::sims *S, int verbose_level)
data_structures_groups::vector_ge * gens
void group_order(ring_theory::longinteger_object &go)
the wreath product group GL(d,q) wreath Sym(n)
void init_tensor_wreath_product(matrix_group *M, actions::action *A_mtx, int nb_factors, int verbose_level)
int dimension_of_tensor_action
void make_strong_generators_data(int *&data, int &size, int &nb_gens, int verbose_level)
int * the_transversal_length
long int degree_of_tensor_action
induced action on the orthogonal geometry
void init(actions::action *original_action, orthogonal_geometry::orthogonal *O, int f_on_points, int f_on_lines, int f_on_points_and_lines, int verbose_level)
#define Lint_vec_copy(A, B, C)
#define Lint_vec_print(A, B, C)
#define Int_matrix_print(A, B, C)
#define Int_vec_copy(A, B, C)
#define Int_vec_print(A, B, C)
void callback_choose_random_generator_orthogonal(int iteration, int *Elt, void *data, int verbose_level)
@ permutation_representation_t
the orbiter library for the classification of combinatorial objects
groups::permutation_representation * Permutation_representation
groups::wreath_product * wreath_product_group
groups::matrix_group * matrix_grp
induced_actions::action_on_orthogonal * AO
groups::permutation_representation_domain * perm_grp