18namespace layer3_group_actions {
29 int f_v = (verbose_level >= 1);
30 int f_vv = (verbose_level >= 2);
33 cout <<
"strong_generators::init_linear_group_from_scratch" << endl;
41 int f_init_sims =
FALSE;
45 cout <<
"strong_generators::init_linear_group_from_scratch "
46 "before A->init_projective_group" << endl;
53 cout <<
"strong_generators::init_linear_group_from_scratch "
54 "after A->init_projective_group" << endl;
59 cout <<
"strong_generators::init_linear_group_from_scratch "
60 "before A->init_general_linear_group" << endl;
67 cout <<
"strong_generators::init_linear_group_from_scratch "
68 "after A->init_general_linear_group" << endl;
73 cout <<
"strong_generators::init_linear_group_from_scratch "
74 "before A->init_affine_group" << endl;
81 cout <<
"strong_generators::init_linear_group_from_scratch "
82 "after A->init_affine_group" << endl;
87 cout <<
"strong_generators::init_linear_group_from_scratch "
88 "before init_wreath_product_group" << endl;
95 cout <<
"strong_generators::init_linear_group_from_scratch "
96 "after init_wreath_product_group" << endl;
101 cout <<
"strong_generators::init_linear_group_from_scratch "
102 "detected orthogonal group" << endl;
115 cout <<
"cannot reach this" << endl;
123 TRUE , verbose_level);
128 cout <<
"strong_generators::init_linear_group_from_scratch "
129 "the type of group is not specified" << endl;
135 cout <<
"strong_generators::init_linear_group_from_scratch "
136 "fatal: !A->f_has_strong_generators" << endl;
143 cout <<
"strong_generators::init_linear_group_from_scratch "
144 "special linear group" << endl;
150 cout <<
"strong_generators::init_linear_group_from_scratch "
151 "special linear group done" << endl;
158 cout <<
"strong_generators::init_linear_group_from_scratch "
159 "creating sims and collecting generators" << endl;
168 cout <<
"strong_generators::init_linear_group_from_scratch "
169 "before init_copy" << endl;
173 cout <<
"strong_generators::init_linear_group_from_scratch "
174 "before init_copy" << endl;
179 cout <<
"strong_generators::init_linear_group_from_scratch "
180 "strong generators have been created" << endl;
190 cout <<
"strong_generators::init_linear_group_from_scratch "
197 int f_v = (verbose_level >= 1);
203 cout <<
"strong_generators::special_subgroup "
204 "setting up action on determinant" << endl;
206 if (
A->
Sims == NULL) {
208 cout <<
"strong_generators::special_subgroup "
209 "before A->init_sims_from_generators" << endl;
213 cout <<
"strong_generators::special_subgroup "
214 "after A->init_sims_from_generators" << endl;
219 cout <<
"strong_generators::special_subgroup "
220 "induced_action_on_determinant finished" << endl;
224 cout <<
"strong_generators::special_subgroup "
225 "kernel has order " << go << endl;
232 cout <<
"strong_generators::special_subgroup "
233 "special linear group done" << endl;
239 int f_v = (verbose_level >= 1);
245 cout <<
"strong_generators::projectivity_subgroup "
246 "setting up action on Galois group" << endl;
250 cout <<
"strong_generators::projectivity_subgroup "
251 "induced_action_on_Galois_group finished" << endl;
255 cout <<
"strong_generators::projectivity_subgroup "
256 "kernel has order " << go << endl;
261 cout <<
"strong_generators::projectivity_subgroup "
262 "before init_from_sims" << endl;
266 cout <<
"strong_generators::projectivity_subgroup "
267 "after init_from_sims" << endl;
271 cout <<
"strong_generators::projectivity_subgroup "
272 "projectivity subgroup done" << endl;
278 int f_v = (verbose_level >= 1);
284 cout <<
"strong_generators::even_subgroup "
285 "setting up action on sign" << endl;
289 cout <<
"strong_generators::even_subgroup "
290 "induced_action_on_sign finished" << endl;
294 cout <<
"strong_generators::even_subgroup "
295 "kernel has order " << go << endl;
302 cout <<
"strong_generators::even_subgroup "
303 "special linear group done" << endl;
309 int f_v = (verbose_level >= 1);
314 cout <<
"strong_generators::Sylow_subgroup " << endl;
323 cout <<
"strong_generators::Sylow_subgroup done" << endl;
328 int *Elt,
int verbose_level)
330 int f_v = (verbose_level >= 1);
334 cout <<
"strong_generators::init_single" << endl;
342 cout <<
"strong_generators::init_single "
348 int *Elt,
int target_go,
int verbose_level)
350 int f_v = (verbose_level >= 1);
354 cout <<
"strong_generators::init_single_with_target_go" << endl;
362 cout <<
"strong_generators::init_single_with_target_go "
370 int f_v = (verbose_level >= 1);
375 cout <<
"strong_generators::init_trivial_group" << endl;
388 cout <<
"strong_generators::init_trivial_group done" << endl;
396 int f_v = (verbose_level >= 1);
397 int f_vv = (verbose_level >= 2);
404 int n, q, pos_frobenius;
407 int i, h, hh, h1, j, a, b, nb_gens;
411 cout <<
"strong_generators::generators_for_the_monomial_group "
412 "initializing monomial group" << endl;
419 cout <<
"n=" << n <<
" q=" << q << endl;
422 go_factored =
NEW_int(3 * n + 1);
428 cout <<
"strong_generators::generators_for_the_monomial_group "
429 "type is projective" << endl;
431 pos_frobenius = n * n;
436 cout <<
"strong_generators::generators_for_the_monomial_group "
437 "type is affine" << endl;
439 pos_frobenius = n * n + n;
445 cout <<
"strong_generators::generators_for_the_monomial_group "
446 "type is general_linear" << endl;
448 pos_frobenius = n * n;
459 for (i = 0; i < n; i++) {
460 go_factored[i] = n - i;
462 for (i = 0; i < n; i++) {
464 go_factored[n + i] = 1;
467 go_factored[n + i] = q - 1;
470 for (i = 0; i < n; i++) {
472 go_factored[2 * n + i] = q;
475 go_factored[2 * n + i] = 1;
479 go_factored[3 * n] = F->
e;
482 go_factored[3 * n] = 1;
484 D.
multiply_up(target_go, go_factored, 3 * n + 1, 0 );
486 cout <<
"group order factored: ";
489 cout <<
"target_go=" << target_go << endl;
492 my_gens->
init(
A, verbose_level - 2);
493 nb_gens = n - 1 + 1 + 1;
497 my_gens->
allocate(nb_gens, verbose_level - 2);
498 for (h = 0; h < nb_gens; h++) {
501 cout <<
"strong_generators::generators_for_the_monomial_group "
502 "generator " << h <<
" / " << nb_gens <<
":" << endl;
513 data[hh * n + hh] = 0;
514 data[h * n + hh] = 1;
515 data[hh * n + h] = 1;
517 else if (h == n - 1) {
522 data[pos_frobenius] = 1;
529 for (j = 0; j < n; j++) {
536 cout <<
"strong_generators::generators_for_the_monomial_group "
537 "generator " << h <<
" / "
538 << nb_gens <<
", before A->make_element" << endl;
542 cout <<
"in action " <<
A->
label << endl;
546 cout <<
"generator " << h <<
":" << endl;
552 cout <<
"strong_generators::generators_for_the_monomial_group "
553 "creating group" << endl;
559 cout <<
"strong_generators::generators_for_the_monomial_group "
560 "after creating group" << endl;
564 cout <<
"strong_generators::generators_for_the_monomial_group "
565 "after extracting strong generators" << endl;
568 int f_print_as_permutation =
FALSE;
569 int f_offset =
FALSE;
571 int f_do_it_anyway_even_for_big_degree =
FALSE;
572 int f_print_cycles_of_length_one =
FALSE;
576 cout <<
"computing the group order:" << endl;
578 cout <<
"The group order is " << go << endl;
580 cout <<
"strong generators are:" << endl;
581 gens->
print(cout, f_print_as_permutation,
582 f_offset, offset, f_do_it_anyway_even_for_big_degree,
583 f_print_cycles_of_length_one);
591 cout <<
"strong_generators::generators_for_the_monomial_group done" << endl;
598 int f_v = (verbose_level >= 1);
599 int f_vv = (verbose_level >= 2);
612 cout <<
"strong_generators::generators_for_the_diagonal_group "
613 "initializing diagonal group" << endl;
620 cout <<
"n=" << n <<
" q=" << q << endl;
632 for (i = 0; i < n; i++) {
637 go_factored[i] = q - 1;
642 cout <<
"strong_generators::generators_for_the_diagonal_group "
643 "type is projective" << endl;
647 cout <<
"strong_generators::generators_for_the_diagonal_group "
648 "type should not be affine" << endl;
653 cout <<
"strong_generators::generators_for_the_diagonal_group "
654 "type is general_linear" << endl;
658 go_factored[n] = F->
e;
665 cout <<
"group order factored: ";
668 cout <<
"target_go=" << target_go << endl;
671 my_gens->
init(
A, verbose_level - 2);
672 my_gens->
allocate(n + 1, verbose_level - 2);
673 for (h = 0; h < n + 1; h++) {
687 cout <<
"generator " << h <<
":" << endl;
693 cout <<
"strong_generators::generators_for_the_diagonal_group "
694 "creating group" << endl;
700 cout <<
"strong_generators::generators_for_the_diagonal_group "
701 "after creating group" << endl;
705 cout <<
"strong_generators::generators_for_the_diagonal_group "
706 "after extracting strong generators" << endl;
709 int f_print_as_permutation =
FALSE;
710 int f_offset =
FALSE;
712 int f_do_it_anyway_even_for_big_degree =
FALSE;
713 int f_print_cycles_of_length_one =
FALSE;
717 cout <<
"computing the group order:" << endl;
719 cout <<
"The group order is " << go << endl;
721 cout <<
"strong generators are:" << endl;
722 gens->
print(cout, f_print_as_permutation,
723 f_offset, offset, f_do_it_anyway_even_for_big_degree,
724 f_print_cycles_of_length_one);
732 cout <<
"strong_generators::generators_for_the_diagonal_group done" << endl;
742 int f_v = (verbose_level >= 1);
743 int f_vv = (verbose_level >= 2);
749 long int *go_factored;
758 cout <<
"strong_generators::generators_for_the_singer_cycle "
759 "initializing singer group "
760 "power_of_singer=" << power_of_singer << endl;
766 cout <<
"n=" << n <<
" q=" << q << endl;
778 g = NT.
gcd_lint(go_factored[0], power_of_singer);
779 go_factored[0] = go_factored[0] / g;
783 cout <<
"group order factored: ";
786 cout <<
"target_go=" << target_go << endl;
789 nice_gens->
init(
A, verbose_level - 2);
790 nice_gens->
allocate(1, verbose_level - 2);
799 cout <<
"strong_generators::generators_for_the_singer_cycle "
800 "field order must be a prime" << endl;
814 cout <<
"strong_generators::generators_for_the_singer_cycle "
815 "before FX.get_a_primitive_polynomial "
816 "q=" << q <<
" degree=" << n << endl;
820 cout <<
"strong_generators::generators_for_the_singer_cycle "
821 "after FX.get_a_primitive_polynomial" << endl;
830 for (i = 0; i < n - 1; i++) {
831 data[i * n + i + 1] = 1;
837 for (i = 0; i < n; i++) {
840 data[(n - 1) * n + i] = b;
851 cout <<
"generator :" << endl;
856 power_of_singer, 0 );
859 cout <<
"generator after raising to the "
860 "power of " << power_of_singer <<
":" << endl;
867 cout <<
"strong_generators::generators_for_the_"
868 "singer_cycle creating group" << endl;
871 cout <<
"group order factored: ";
874 cout <<
"target_go=" << target_go << endl;
881 cout <<
"strong_generators::generators_for_the_"
882 "singer_cycle after creating group" << endl;
886 cout <<
"strong_generators::generators_for_the_"
887 "singer_cycle after extracting "
888 "strong generators" << endl;
891 int f_print_as_permutation =
FALSE;
892 int f_offset =
FALSE;
894 int f_do_it_anyway_even_for_big_degree =
FALSE;
895 int f_print_cycles_of_length_one =
FALSE;
897 cout <<
"strong generators are:" << endl;
898 gens->
print(cout, f_print_as_permutation,
899 f_offset, offset, f_do_it_anyway_even_for_big_degree,
900 f_print_cycles_of_length_one);
908 cout <<
"strong_generators::generators_for_the_singer_cycle done" << endl;
918 int f_v = (verbose_level >= 1);
919 int f_vv = (verbose_level >= 2);
925 long int *go_factored;
935 cout <<
"strong_generators::generators_for_the_singer_cycle_and_the_Frobenius "
936 "initializing singer group power_of_singer="
937 << power_of_singer << endl;
943 cout <<
"n=" << n <<
" q=" << q << endl;
956 g = NT.
gcd_lint(go_factored[0], power_of_singer);
957 go_factored[0] = go_factored[0] / g;
962 cout <<
"group order factored: ";
965 cout <<
"target_go=" << target_go << endl;
968 nice_gens->
init(
A, verbose_level - 2);
969 nice_gens->
allocate(2, verbose_level - 2);
977 cout <<
"strong_generators::generators_for_the_singer_cycle_and_the_Frobenius "
978 "field order must be a prime" << endl;
991 cout <<
"search_for_primitive_polynomial_of_given_degree "
992 "p=" << q <<
" degree=" << n << endl;
999 for (i = 0; i < n - 1; i++) {
1000 data1[i * n + i + 1] = 1;
1006 for (i = 0; i < n; i++) {
1009 data1[(n - 1) * n + i] = b;
1030 cout <<
"singer cycle 0:" << endl;
1035 power_of_singer, 0 );
1038 cout <<
"generator after raising to the "
1039 "power of " << power_of_singer <<
":" << endl;
1046 cout <<
"Frob:" << endl;
1054 cout <<
"strong_generators::generators_for_the_singer_cycle_and_the_Frobenius "
1055 "creating group" << endl;
1058 cout <<
"group order factored: ";
1061 cout <<
"target_go=" << target_go << endl;
1068 cout <<
"strong_generators::generators_for_the_singer_cycle_and_the_Frobenius "
1069 "after creating group" << endl;
1073 cout <<
"strong_generators::generators_for_the_singer_cycle_and_the_Frobenius "
1074 "after extracting strong generators" << endl;
1077 int f_print_as_permutation =
FALSE;
1078 int f_offset =
FALSE;
1080 int f_do_it_anyway_even_for_big_degree =
FALSE;
1081 int f_print_cycles_of_length_one =
FALSE;
1083 cout <<
"strong generators are:" << endl;
1084 gens->
print(cout, f_print_as_permutation,
1085 f_offset, offset, f_do_it_anyway_even_for_big_degree,
1086 f_print_cycles_of_length_one);
1095 cout <<
"strong_generators::generators_for_the_singer_cycle_and_the_Frobenius done" << endl;
1103 int f_v = (verbose_level >= 1);
1109 cout <<
"strong_generators::generators_for_the_null_polarity_group" << endl;
1115 cout <<
"n=" << n <<
" q=" << q << endl;
1124 cout <<
"strong_generators::generators_for_the_null_polarity_group calling "
1125 "null_polarity_generator::init" << endl;
1127 N->
init(F, n, verbose_level);
1141 cout <<
"strong_generators::generators_for_the_null_polarity_group done" << endl;
1149 int f_v = (verbose_level >= 1);
1155 cout <<
"strong_generators::generators_for_symplectic_group" << endl;
1161 cout <<
"n=" << n <<
" q=" << q << endl;
1170 cout <<
"strong_generators::generators_for_symplectic_group calling "
1171 "generators_symplectic_group::init" << endl;
1173 N->
init(F, n, verbose_level);
1192 cout <<
"strong_generators::generators_for_symplectic_group t_len=";
1198 cout <<
"strong_generators::generators_for_symplectic_group calling "
1199 "init_from_data" << endl;
1212 cout <<
"strong_generators::generators_for_the_symplectic_group done" << endl;
1219 int f_v = (verbose_level >= 1);
1224 cout <<
"strong_generators::init_centralizer_of_matrix" << endl;
1227 Mtx, verbose_level - 1);
1231 cout <<
"strong_generators::init_centralizer_of_matrix done" << endl;
1239 int f_v = (verbose_level >= 1);
1251 cout <<
"strong_generators::init_centralizer_of_matrix_general_linear" << endl;
1264 Q.
create(q - 1, __FILE__, __LINE__);
1268 cout <<
"strong_generators::init_centralizer_of_matrix_general_linear "
1269 "created centralizer "
1270 "in the projective linear group of "
1271 "order " << go1 << endl;
1275 new_gens->
init(A_general_linear, verbose_level - 2);
1277 data =
NEW_int(n * n + n + 1);
1278 for (i = 0; i < SG1->
gens->
len; i++) {
1281 data[n * n] = SG1->
gens->
ith(i)[n * n];
1284 new_gens->
ith(i), data, 0);
1295 cout <<
"strong_generators::init_centralizer_of_matrix_general_linear "
1296 "creating sims for the general "
1297 "linear centralizer of order " << go << endl;
1302 cout <<
"strong_generators::init_centralizer_of_matrix_general_linear "
1303 "creating sims for the general "
1304 "linear centralizer of order " << go <<
" done" << endl;
1314 cout <<
"strong_generators::init_centralizer_of_matrix_general_linear done" << endl;
1323 int f_v = (verbose_level >= 1);
1335 cout <<
"strong_generators::field_reduction" << endl;
1341 cout <<
"strong_generators::field_reduction "
1342 "s must divide n" << endl;
1346 cout <<
"strong_generators::field_reduction "
1347 "creating subfield structure" << endl;
1350 cout <<
"n=" << n << endl;
1351 cout <<
"s=" << s << endl;
1352 cout <<
"m=" << m << endl;
1353 cout <<
"q=" << q << endl;
1354 cout <<
"Q=" << Q << endl;
1362 cout <<
"strong_generators::field_reduction "
1363 "creating AQ" << endl;
1375 cout <<
"strong_generators::field_reduction "
1376 "creating AQ done" << endl;
1389 cout <<
"strong_generators::field_reduction "
1390 "order of GL(m,Q) = " << order_GLmQ << endl;
1393 q - 1, target_go, r);
1395 cout <<
"strong_generators::field_reduction "
1396 "target_go = " << target_go << endl;
1400 S->
init(FQ, Fq, verbose_level);
1403 cout <<
"strong_generators::field_reduction "
1404 "creating subfield structure done" << endl;
1420 cout <<
"strong_generators::field_reduction "
1421 "lifting generators" << endl;
1423 gens1->
init(Aq, verbose_level - 2);
1424 gens1->
allocate(nb_gens, verbose_level - 2);
1425 for (t = 0; t < nb_gens; t++) {
1426 cout <<
"strong_generators::field_reduction " << t
1427 <<
" / " << nb_gens << endl;
1431 cout <<
"lifted matrix:" << endl;
1436 cout <<
"after make_element:" << endl;
1440 cout <<
"strong_generators::field_reduction " << t
1441 <<
" / " << nb_gens <<
" done" << endl;
1445 cout <<
"strong_generators::field_reduction "
1446 "creating lifted group:" << endl;
1449 gens1, target_go, 0 );
1453 gens1,
MINIMUM(2, verbose_level - 3));
1457 cout <<
"strong_generators::field_reduction "
1458 "creating lifted group done" << endl;
1466 cout <<
"go=" << go << endl;
1471 cout <<
"strong_generators::field_reduction "
1472 "strong generators are:" << endl;
1484 cout <<
"strong_generators::field_reduction done" << endl;
1496 int f_v = (verbose_level >= 1);
1497 int f_vv = (verbose_level >= 2);
1505 cout <<
"strong_generators::generators_for_translation_plane_in_andre_model" << endl;
1513 cout <<
"strong_generators::generators_for_translation_plane_in_andre_model n=" << n <<
" n1=" << n1 << endl;
1516 int nb_gens, h, cnt, i, j, a, u;
1520 nb_gens = spread_stab_gens->
len + 1 + n * F->
e;
1528 cout <<
"strong_generators::generators_for_translation_plane_in_andre_model nb_gens=" << nb_gens << endl;
1533 my_gens->
init(A_PGL_n1_q, verbose_level - 2);
1534 my_gens->
allocate(nb_gens, verbose_level - 2);
1538 cout <<
"strong_generators::generators_for_translation_plane_in_andre_model making generators of "
1539 "the first kind:" << endl;
1542 for (h = 0; h < spread_stab_gens->
len; h++, cnt++) {
1544 cout <<
"making generator " << h <<
":" << endl;
1550 for (i = 0; i < n1; i++) {
1556 for (i = 0; i < n; i++) {
1557 for (j = 0; j < n; j++) {
1558 a = spread_stab_gens->
ith(h)[i * n + j];
1563 a = spread_stab_gens->
ith(h)[n * n];
1570 cout <<
"strong_generators::generators_for_translation_plane_in_andre_model making generators of "
1571 "the second kind:" << endl;
1575 for (i = 0; i < n1; i++) {
1577 M1[i * n1 + i] = alpha;
1591 cout <<
"strong_generators::generators_for_translation_plane_in_andre_model making generators of "
1592 "the third kind:" << endl;
1595 for (h = 0; h < n; h++) {
1596 for (u = 0; u < F->
e; u++, cnt++) {
1599 for (i = 0; i < n1; i++) {
1602 M1[(n1 - 1) * n1 + h] = F->
power(alpha, u);
1610 if (cnt != nb_gens) {
1611 cout <<
"strong_generators::generators_for_translation_plane_in_andre_model cnt != nb_gens" << endl;
1616 cout <<
"strong_generators::generators_for_translation_plane_in_andre_model making generators:" << endl;
1618 for (h = 0; h < nb_gens; h++) {
1621 cout <<
"strong_generators::generators_for_translation_plane_in_andre_model generator " << h <<
" / "
1637 cout <<
"strong_generators::generators_for_translation_plane_in_andre_model spread stabilizer "
1638 "has order " << aa << endl;
1642 c.
create(q - 1, __FILE__, __LINE__);
1643 D.
mult(bb, c, target_go);
1645 cout <<
"strong_generators::generators_for_translation_plane_in_andre_model plane stabilizer "
1646 "target_go=" << target_go << endl;
1653 cout <<
"strong_generators::generators_for_translation_plane_in_andre_model creating group" << endl;
1656 my_gens, target_go, 0 );
1658 cout <<
"strong_generators::generators_for_translation_plane_in_andre_model group has been created" << endl;
1664 cout <<
"strong_generators::generators_for_translation_plane_in_andre_model created group of "
1665 "order " << go << endl;
1675 cout <<
"strong_generators::generators_for_translation_plane_in_andre_model done" << endl;
1683 int f_v = (verbose_level >= 1);
1690 cout <<
"strong_generators::generators_for_the_stabilizer_of_two_components" << endl;
1697 cout <<
"strong_generators::generators_for_the_stabilizer_of_two_components "
1698 "n must be even" << endl;
1702 cout <<
"n=" << n <<
" k=" << k <<
" q=" << q << endl;
1719 cout <<
"strong_generators::generators_for_the_stabilizer_of_two_components "
1720 "before make_generators_stabilizer_of_two_components" << endl;
1726 k, my_gens, verbose_level - 1);
1729 cout <<
"strong_generators::generators_for_the_stabilizer_of_two_components "
1730 "after make_generators_stabilizer_of_two_components" << endl;
1736 two.
create(1, __FILE__, __LINE__);
1738 D.
mult(go_linear, go_linear, a);
1739 D.
mult(a, two, target_go);
1742 cout <<
"strong_generators::generators_for_the_stabilizer_of_two_components "
1743 "before generators_to_strong_generators target_go=" << target_go << endl;
1750 my_gens, SG, verbose_level - 3);
1753 cout <<
"strong_generators::generators_for_the_stabilizer_of_two_components "
1754 "after generators_to_strong_generators" << endl;
1765 cout <<
"strong_generators::generators_for_the_stabilizer_of_two_components done" << endl;
1772 int f_v = (verbose_level >= 1);
1773 int f_vv = (verbose_level >= 2);
1783 int Identity[4] = {0,1,1,0};
1789 cout <<
"strong_generators::regulus_stabilizer" << endl;
1795 cout <<
"strong_generators::regulus_stabilizer "
1796 "n must be 4" << endl;
1801 cout <<
"strong_generators::regulus_stabilizer "
1802 "n must be even" << endl;
1806 cout <<
"n=" << n <<
" k=" << k <<
" q=" << q << endl;
1821 b.
create(F->
e, __FILE__, __LINE__);
1824 b.
create(1, __FILE__, __LINE__);
1826 D.
mult(a, b, target_go);
1828 cout <<
"strong_generators::regulus_stabilizer "
1829 "target_go=" << target_go
1830 <<
" = order of PGL(" << k <<
"," << q <<
")^2 * "
1831 << b <<
" = " << go <<
"^2 * " << b << endl;
1832 cout <<
"action A_PGL_k_q: ";
1838 my_gens->
init(A_PGL_n_q, verbose_level - 2);
1843 cout <<
"There are " << len1 <<
" generators in gen1" << endl;
1850 my_gens->
allocate(len, verbose_level - 2);
1854 cout <<
"strong_generators::regulus_stabilizer "
1855 "creating generators for the stabilizer:" << endl;
1857 for (h = 0; h < len; h++) {
1859 cout <<
"strong_generators::regulus_stabilizer "
1860 "h=" << h <<
" / " << len << endl;
1867 cout <<
"strong_generators::regulus_stabilizer "
1868 "generator:" << endl;
1879 Q[n * n] = P[k * k];
1887 cout <<
"strong_generators::regulus_stabilizer "
1888 "h = " << h <<
" before make_element:" << endl;
1891 cout <<
"strong_generators::regulus_stabilizer "
1892 "semilinear part = " << Q[n * n] << endl;
1897 cout <<
"strong_generators::regulus_stabilizer "
1898 "after make_element:" << endl;
1901 A_PGL_n_q->
move(Elt1, my_gens->
ith(h));
1905 for (h = 0; h < len; h++) {
1906 cout <<
"strong_generators::regulus_stabilizer "
1907 "generator " << h <<
":" << endl;
1913 cout <<
"strong_generators::regulus_stabilizer "
1914 "before generators_to_strong_generators "
1915 "target_go=" << target_go << endl;
1922 my_gens, SG, verbose_level - 3);
1925 cout <<
"strong_generators::regulus_stabilizer "
1926 "after generators_to_strong_generators" << endl;
1939 cout <<
"strong_generators::regulus_stabilizer "
1948 int f_v = (verbose_level >= 1);
1949 int f_vv = (verbose_level >= 2);
1954 int n, i, j, h, alpha, len, q;
1957 cout <<
"strong_generators::generators_for_the_borel_subgroup_upper" << endl;
1964 my_gens->
init(A_linear, verbose_level - 2);
1966 len = n + ((n * (n - 1)) >> 1);
1968 cout <<
"strong_generators::generators_for_the_borel_subgroup_upper len=" << len << endl;
1970 my_gens->
allocate(len, verbose_level - 2);
1975 cout <<
"strong_generators::generators_for_the_borel_subgroup_upper creating generators "
1976 "for the stabilizer:" << endl;
1980 for (i = 0; i < n; i++, h++) {
1982 Q[i * n + i] = alpha;
1988 cout <<
"strong_generators::generators_for_the_borel_subgroup_upper after make_element:" << endl;
1991 A_linear->
move(Elt1, my_gens->
ith(h));
1993 for (i = 0; i < n; i++) {
1994 for (j = i + 1; j < n; j++) {
2002 cout <<
"strong_generators::generators_for_the_borel_subgroup_upper after make_element:" << endl;
2005 A_linear->
move(Elt1, my_gens->
ith(h));
2010 cout <<
"strong_generators::generators_for_the_borel_subgroup_upper n != len" << endl;
2011 cout <<
"h=" << h << endl;
2012 cout <<
"len=" << len << endl;
2018 for (h = 0; h < len; h++) {
2019 cout <<
"strong_generators::generators_for_the_borel_subgroup_upper generator "
2020 << h <<
" / " << len << endl;
2029 factors =
NEW_int(nb_factors);
2031 for (i = 0; i < n; i++) {
2032 factors[h++] = q - 1;
2034 for (i = 0; i < n; i++) {
2035 for (j = i + 1; j < n; j++) {
2044 cout <<
"strong_generators::generators_for_the_borel_subgroup_upper before generators_to_"
2045 "strong_generators target_go=" << target_go << endl;
2053 my_gens, SG, verbose_level - 3);
2056 cout <<
"strong_generators::generators_for_the_borel_subgroup_upper after generators_to_"
2057 "strong_generators" << endl;
2072 int f_v = (verbose_level >= 1);
2073 int f_vv = (verbose_level >= 2);
2078 int n, i, j, h, alpha, len, q;
2081 cout <<
"strong_generators::generators_for_the_borel_subgroup_lower" << endl;
2088 my_gens->
init(A_linear, verbose_level - 2);
2090 len = n + ((n * (n - 1)) >> 1);
2092 cout <<
"strong_generators::generators_for_the_borel_subgroup_lower len=" << len << endl;
2094 my_gens->
allocate(len, verbose_level - 2);
2099 cout <<
"strong_generators::generators_for_the_borel_subgroup_lower creating generators "
2100 "for the stabilizer:" << endl;
2104 for (i = 0; i < n; i++, h++) {
2106 Q[i * n + i] = alpha;
2112 cout <<
"strong_generators::generators_for_the_borel_subgroup_lower after make_element:" << endl;
2115 A_linear->
move(Elt1, my_gens->
ith(h));
2117 for (i = 0; i < n; i++) {
2118 for (j = 0; j < i; j++) {
2126 cout <<
"strong_generators::generators_for_the_borel_subgroup_lower after "
2127 "make_element:" << endl;
2130 A_linear->
move(Elt1, my_gens->
ith(h));
2135 cout <<
"strong_generators::generators_for_the_borel_subgroup_lower n != len" << endl;
2136 cout <<
"h=" << h << endl;
2137 cout <<
"len=" << len << endl;
2143 for (h = 0; h < len; h++) {
2144 cout <<
"strong_generators::generators_for_the_borel_subgroup_lower generator "
2145 << h <<
" / " << len << endl;
2154 factors =
NEW_int(nb_factors);
2156 for (i = 0; i < n; i++) {
2157 factors[h++] = q - 1;
2159 for (i = 0; i < n; i++) {
2160 for (j = 0; j < i; j++) {
2169 cout <<
"strong_generators::generators_for_the_borel_subgroup_lower before generators_"
2170 "to_strong_generators target_go=" << target_go << endl;
2178 my_gens, SG, verbose_level - 3);
2181 cout <<
"strong_generators::generators_for_the_borel_subgroup_lower after generators_"
2182 "to_strong_generators" << endl;
2197 int f_v = (verbose_level >= 1);
2198 int f_vv = (verbose_level >= 2);
2206 cout <<
"strong_generators::generators_for_the_identity_subgroup" << endl;
2213 my_gens->
init(A_linear, verbose_level - 2);
2217 cout <<
"strong_generators::generators_for_the_identity_subgroup len=" << len << endl;
2219 my_gens->
allocate(len, verbose_level - 2);
2224 cout <<
"strong_generators::generators_for_the_identity_subgroup creating generators "
2225 "for the stabilizer:" << endl;
2227 for (i = 0; i < 1; i++) {
2234 cout <<
"strong_generators::generators_for_the_identity_subgroup after make_element:" << endl;
2237 A_linear->
move(Elt1, my_gens->
ith(i));
2242 for (h = 0; h < len; h++) {
2243 cout <<
"strong_generators::generators_for_the_identity_subgroup generator "
2244 << h <<
" / " << len << endl;
2250 target_go.
create(1, __FILE__, __LINE__);
2253 cout <<
"strong_generators::generators_for_the_identity_subgroup before generators_to_"
2254 "strong_generators target_go=" << target_go << endl;
2262 my_gens, SG, verbose_level - 3);
2265 cout <<
"strong_generators::generators_for_the_identity_subgroup "
2266 "after generators_to_strong_generators" << endl;
2282 int f_v = (verbose_level >= 1);
2291 cout <<
"strong_generators::generators_for_parabolic_subgroup" << endl;
2297 cout <<
"n=" << n <<
" k=" << k <<
" q=" << q << endl;
2301 cout <<
"strong_generators::generators_for_parabolic_subgroup "
2302 "before generators_for_parabolic_subgroup" << endl;
2310 data, size, nb_gens,
2314 my_gens->
init(A_PGL_n_q, verbose_level - 2);
2315 my_gens->
allocate(nb_gens, verbose_level - 2);
2316 for (i = 0; i < nb_gens; i++) {
2322 cout <<
"strong_generators::generators_for_parabolic_subgroup "
2323 "after generators_for_parabolic_subgroup" << endl;
2334 cout <<
"strong_generators::generators_for_parabolic_subgroup "
2335 "go1=" << go1 << endl;
2341 cout <<
"strong_generators::generators_for_parabolic_subgroup "
2342 "nCk=" << nCk << endl;
2348 cout <<
"strong_generators::generators_for_parabolic_subgroup "
2349 "before generators_to_strong_generators "
2350 "target_go=" << target_go << endl;
2357 my_gens, SG, verbose_level - 3);
2360 cout <<
"strong_generators::generators_for_parabolic_subgroup "
2361 "after generators_to_strong_generators" << endl;
2372 cout <<
"strong_generators::generators_for_parabolic_subgroup "
2382 int f_v = (verbose_level >= 1);
2392 cout <<
"strong_generators::generators_for_stabilizer_of_three_collinear_points_in_PGL4" << endl;
2398 cout <<
"n=" << n <<
" q=" << q << endl;
2401 cout <<
"strong_generators::generators_for_stabilizer_of_three_collinear_points_in_PGL4 n != 4" << endl;
2406 cout <<
"strong_generators::generators_for_stabilizer_of_three_collinear_points_in_PGL4 before generators_"
2407 "for_stabilizer_of_three_collinear_points_in_PGL4" << endl;
2414 data, size, nb_gens,
2418 my_gens->
init(A_PGL_4_q, verbose_level - 2);
2419 my_gens->
allocate(nb_gens, verbose_level - 2);
2420 for (i = 0; i < nb_gens; i++) {
2422 data + i * size, 0);
2427 cout <<
"strong_generators::generators_for_stabilizer_of_three_collinear_points_in_PGL4 after generators_"
2428 "for_stabilizer_of_three_collinear_points_in_PGL4" << endl;
2435 target_go.
create(1, __FILE__, __LINE__);
2436 a.
create((q - 1) * 6, __FILE__, __LINE__);
2437 b.
create(q + 1, __FILE__, __LINE__);
2438 c.
create(q, __FILE__, __LINE__);
2439 d.
create(q - 1, __FILE__, __LINE__);
2452 cout <<
"strong_generators::generators_for_stabilizer_of_three_collinear_points_in_PGL4 "
2453 "before generators_to_strong_generators "
2454 "target_go=" << target_go << endl;
2461 my_gens, SG, verbose_level - 3);
2464 cout <<
"strong_generators::generators_for_stabilizer_of_three_collinear_points_in_PGL4 after "
2465 "generators_to_strong_generators" << endl;
2476 cout <<
"strong_generators::generators_for_stabilizer_of_three_collinear_points_in_PGL4 done" << endl;
2484 int f_v = (verbose_level >= 1);
2494 cout <<
"strong_generators::generators_for_stabilizer_of_triangle_in_PGL4" << endl;
2500 cout <<
"n=" << n <<
" q=" << q << endl;
2503 cout <<
"strong_generators::generators_for_stabilizer_of_triangle_in_PGL4 n != 4" << endl;
2508 cout <<
"strong_generators::generators_for_stabilizer_of_triangle_in_PGL4 "
2509 "before generators_for_stabilizer_of_triangle_in_PGL4" << endl;
2516 data, size, nb_gens,
2520 my_gens->
init(A_PGL_4_q, verbose_level - 2);
2521 my_gens->
allocate(nb_gens, verbose_level - 2);
2522 for (i = 0; i < nb_gens; i++) {
2528 cout <<
"strong_generators::generators_for_stabilizer_of_triangle_in_PGL4 "
2529 "after generators_for_stabilizer_of_triangle_in_PGL4" << endl;
2536 target_go.
create(1, __FILE__, __LINE__);
2539 c.
create(6, __FILE__, __LINE__);
2549 cout <<
"strong_generators::generators_for_stabilizer_of_triangle_in_PGL4 "
2550 "before generators_to_strong_generators target_go=" << target_go << endl;
2557 my_gens, SG, verbose_level - 3);
2560 cout <<
"strong_generators::generators_for_stabilizer_of_triangle_in_PGL4 "
2561 "after generators_to_strong_generators" << endl;
2572 cout <<
"strong_generators::generators_for_stabilizer_of_triangle_in_PGL4 done" << endl;
2583 int f_v = (verbose_level >= 1);
2586 cout <<
"strong_generators::generators_for_the_orthogonal_group" << endl;
2587 cout <<
"n=" << n << endl;
2588 cout <<
"epsilon=" << epsilon << endl;
2589 cout <<
"q=" << F->
q << endl;
2590 cout <<
"f_semilinear=" << f_semilinear << endl;
2597 cout <<
"strong_generators::generators_for_the_orthogonal_group before "
2598 "A2->init_orthogonal_group" << endl;
2606 TRUE , verbose_level);
2609 cout <<
"strong_generators::generators_for_the_orthogonal_group after "
2610 "A2->init_orthogonal_group" << endl;
2619 cout <<
"strong_generators::generators_for_the_orthogonal_group "
2620 "before generators_to_strong_generators" << endl;
2628 cout <<
"strong_generators::generators_for_the_orthogonal_group after "
2629 "generators_to_strong_generators" << endl;
2639 cout <<
"strong_generators::generators_for_the_orthogonal_group done" << endl;
2648 int f_v = (verbose_level >= 1);
2651 cout <<
"strong_generators::stabilizer_of_cubic_surface_from_catalogue" << endl;
2652 cout <<
"q=" << F->
q << endl;
2653 cout <<
"iso=" << iso << endl;
2659 string ascii_target_go;
2664 cout <<
"strong_generators::stabilizer_of_cubic_surface_from_catalogue before "
2665 "cubic_surface_stab_gens" << endl;
2668 data, nb_gens, data_size, ascii_target_go);
2678 cout <<
"strong_generators::stabilizer_of_cubic_surface_from_catalogue before "
2679 "gens->init_from_data" << endl;
2683 cout <<
"strong_generators::stabilizer_of_cubic_surface_from_catalogue after "
2684 "gens->init_from_data" << endl;
2692 cout <<
"strong_generators::stabilizer_of_cubic_surface_from_catalogue before "
2693 "generators_to_strong_generators" << endl;
2701 cout <<
"strong_generators::stabilizer_of_cubic_surface_from_catalogue after "
2702 "generators_to_strong_generators" << endl;
2711 cout <<
"strong_generators::stabilizer_of_cubic_surface_from_catalogue done" << endl;
2720 int f_v = (verbose_level >= 1);
2723 cout <<
"strong_generators::stabilizer_of_quartic_curve_from_catalogue" << endl;
2724 cout <<
"q=" << F->
q << endl;
2725 cout <<
"iso=" << iso << endl;
2731 string ascii_target_go;
2736 cout <<
"strong_generators::stabilizer_of_quartic_curve_from_catalogue before "
2737 "cubic_surface_stab_gens" << endl;
2740 data, nb_gens, data_size, ascii_target_go);
2745 cout <<
"data:" << endl;
2754 cout <<
"strong_generators::stabilizer_of_quartic_curve_from_catalogue before "
2755 "gens->init_from_data" << endl;
2759 cout <<
"strong_generators::stabilizer_of_quartic_curve_from_catalogue after "
2760 "gens->init_from_data" << endl;
2768 cout <<
"strong_generators::stabilizer_of_quartic_curve_from_catalogue before "
2769 "generators_to_strong_generators" << endl;
2777 cout <<
"strong_generators::stabilizer_of_quartic_curve_from_catalogue after "
2778 "generators_to_strong_generators" << endl;
2787 cout <<
"strong_generators::stabilizer_of_quartic_curve_from_catalogue done" << endl;
2798 int f_v = (verbose_level >= 1);
2801 cout <<
"strong_generators::stabilizer_of_Eckardt_surface" << endl;
2802 cout <<
"q=" << F->
q << endl;
2803 cout <<
"f_with_normalizer=" << f_with_normalizer << endl;
2804 cout <<
"f_semilinear=" << f_semilinear << endl;
2815 cout <<
"strong_generators::stabilizer_of_Eckardt_surface before "
2816 "F->cubic_surface_family_24_generators" << endl;
2821 data, nb_gens, data_size,
group_order, verbose_level);
2828 nice_gens->
init(
A, verbose_level - 2);
2832 nice_gens->
allocate(nb_gens, verbose_level - 2);
2833 for (i = 0; i < nb_gens; i++) {
2842 cout <<
"strong_generators::stabilizer_of_Eckardt_surface before "
2843 "generators_to_strong_generators" << endl;
2847 nice_gens, Strong_gens2,
2851 cout <<
"strong_generators::stabilizer_of_Eckardt_surface after "
2852 "generators_to_strong_generators" << endl;
2862 cout <<
"strong_generators::stabilizer_of_Eckardt_surface done" << endl;
2872 int f_v = (verbose_level >= 1);
2875 cout <<
"strong_generators::stabilizer_of_G13_surface" << endl;
2876 cout <<
"q=" << F->
q << endl;
2877 cout <<
"a=" << a << endl;
2888 cout <<
"strong_generators::stabilizer_of_G13_surface before "
2889 "F->cubic_surface_family_G13_generators" << endl;
2893 data, nb_gens, data_size,
group_order, verbose_level);
2896 nice_gens->
init(
A, verbose_level - 2);
2900 nice_gens->
allocate(nb_gens, verbose_level - 2);
2901 for (i = 0; i < nb_gens; i++) {
2910 cout <<
"strong_generators::stabilizer_of_G13_surface before "
2911 "generators_to_strong_generators" << endl;
2915 nice_gens, Strong_gens2,
2919 cout <<
"strong_generators::stabilizer_of_G13_surface after "
2920 "generators_to_strong_generators" << endl;
2930 cout <<
"strong_generators::stabilizer_of_G13_surface done" << endl;
2940 int f_v = (verbose_level >= 1);
2943 cout <<
"strong_generators::stabilizer_of_F13_surface" << endl;
2944 cout <<
"q=" << F->
q << endl;
2945 cout <<
"a=" << a << endl;
2956 cout <<
"strong_generators::stabilizer_of_F13_surface before "
2957 "F->cubic_surface_family_F13_generators" << endl;
2961 data, nb_gens, data_size,
group_order, verbose_level);
2964 nice_gens->
init(
A, verbose_level - 2);
2968 nice_gens->
allocate(nb_gens, verbose_level - 2);
2969 for (i = 0; i < nb_gens; i++) {
2978 cout <<
"strong_generators::stabilizer_of_F13_surface before "
2979 "generators_to_strong_generators" << endl;
2983 nice_gens, Strong_gens2,
2987 cout <<
"strong_generators::stabilizer_of_F13_surface after "
2988 "generators_to_strong_generators" << endl;
2998 cout <<
"strong_generators::stabilizer_of_F13_surface done" << endl;
3008 int f_v = (verbose_level >= 1);
3011 cout <<
"strong_generators::BLT_set_from_catalogue_stabilizer" << endl;
3012 cout <<
"q=" << F->
q << endl;
3013 cout <<
"iso=" << iso << endl;
3019 string ascii_target_go;
3025 cout <<
"strong_generators::BLT_set_from_catalogue_stabilizer "
3026 "before K.BLT_stab_gens" << endl;
3028 K.
BLT_stab_gens(F->
q, iso, data, nb_gens, data_size, ascii_target_go);
3031 cout <<
"strong_generators::BLT_set_from_catalogue_stabilizer data_size=" << data_size << endl;
3032 cout <<
"strong_generators::BLT_set_from_catalogue_stabilizer nb_gens=" << nb_gens << endl;
3043 for (i = 0; i < nb_gens; i++) {
3048 cout <<
"strong_generators::BLT_set_from_catalogue_stabilizer generators are:" << endl;
3057 cout <<
"strong_generators::BLT_set_from_catalogue_stabilizer before "
3058 "generators_to_strong_generators" << endl;
3066 cout <<
"strong_generators::BLT_set_from_catalogue_stabilizer after "
3067 "generators_to_strong_generators" << endl;
3076 cout <<
"strong_generators::BLT_set_from_catalogue_stabilizer done" << endl;
3082 int q,
int k,
int iso,
3085 int f_v = (verbose_level >= 1);
3088 cout <<
"strong_generators::stabilizer_of_spread_from_catalogue" << endl;
3089 cout <<
"q=" << q << endl;
3090 cout <<
"k=" << k << endl;
3091 cout <<
"iso=" << iso << endl;
3097 string ascii_target_go;
3103 cout <<
"strong_generators::stabilizer_of_spread_from_catalogue "
3104 "before K.Spread_stab_gens" << endl;
3109 cout <<
"strong_generators::stabilizer_of_spread_from_catalogue "
3110 "data_size=" << data_size << endl;
3111 cout <<
"strong_generators::stabilizer_of_spread_from_catalogue "
3112 "nb_gens=" << nb_gens << endl;
3123 for (i = 0; i < nb_gens; i++) {
3128 cout <<
"strong_generators::stabilizer_of_spread_from_catalogue "
3129 "generators are:" << endl;
3138 cout <<
"strong_generators::stabilizer_of_spread_from_catalogue before "
3139 "generators_to_strong_generators" << endl;
3147 cout <<
"strong_generators::stabilizer_of_spread_from_catalogue after "
3148 "generators_to_strong_generators" << endl;
3157 cout <<
"strong_generators::stabilizer_of_spread_from_catalogue done" << endl;
3166 int f_v = (verbose_level >= 1);
3169 cout <<
"strong_generators::stabilizer_of_pencil_of_conics" << endl;
3170 cout <<
"q=" << F->
q << endl;
3178 cout <<
"strong_generators::stabilizer_of_pencil_of_conics "
3179 "creating generators" << endl;
3199 for (i = 0; i < nb_gens; i++) {
3217 cout <<
"strong_generators::stabilizer_of_pencil_of_conics "
3218 "generators are:" << endl;
3227 cout <<
"strong_generators::stabilizer_of_pencil_of_conics before "
3228 "generators_to_strong_generators" << endl;
3236 cout <<
"strong_generators::stabilizer_of_pencil_of_conics after "
3237 "generators_to_strong_generators" << endl;
3246 cout <<
"strong_generators::stabilizer_of_pencil_of_conics done" << endl;
3255 int f_v = (verbose_level >= 1);
3258 cout <<
"strong_generators::Janko1" << endl;
3259 cout <<
"q=" << F->
q << endl;
3263 cout <<
"strong_generators::Janko1 q != 11" << endl;
3270 cout <<
"strong_generators::Janko1 dimension != 7" << endl;
3283 target_go.
create(11 * (11 * 11 * 11 - 1) * (11 + 1), __FILE__, __LINE__);
3296 for (i = 0; i < nb_gens; i++) {
3299 for (j = 0; j < 7; j++) {
3301 data[j * 7 + j + 1] = 1;
3304 data[j * 7 + 0] = 1;
3310 -3, 2, -1, -1, -3, -1, -3,
3311 -2, 1, 1, 3, 1, 3, 3,
3312 -1, -1, -3, -1, -3, -3, 2,
3313 -1, -3, -1, -3, -3, 2, -1,
3314 -3, -1, -3, -3, 2, -1, -1,
3315 1, 3, 3, -2, 1, 1, 3,
3316 3, 3, -2, 1, 1, 3, 1
3318 for (j = 0; j < 49; j++) {
3319 data[j] = (data2[j] + 11) % 11;
3326 cout <<
"strong_generators::Janko1 generators are:" << endl;
3335 cout <<
"strong_generators::Janko1 before "
3336 "generators_to_strong_generators" << endl;
3344 cout <<
"strong_generators::Janko1 after "
3345 "generators_to_strong_generators" << endl;
3354 cout <<
"strong_generators::Janko1 done" << endl;
3359 int nb_pairs,
int °ree,
int verbose_level)
3361 int f_v = (verbose_level >= 1);
3368 cout <<
"strong_generators::Hall_reflection" << endl;
3373 cout <<
"strong_generators::Hall_reflection "
3374 "before generators_Hall_reflection" << endl;
3378 nb_perms, perms, degree,
3385 cout <<
"strong_generators::Hall_reflection "
3386 "after generators_Hall_reflection" << endl;
3396 for (i = 0; i < nb_perms; i++) {
3401 cout <<
"strong_generators::Hall_reflection "
3402 "generators are:" << endl;
3411 target_go.
create(2, __FILE__, __LINE__);
3415 cout <<
"strong_generators::Hall_reflection "
3416 "target_go=" << target_go << endl;
3420 cout <<
"strong_generators::Hall_reflection "
3421 "before A->init_permutation_group" << endl;
3424 int f_no_base =
FALSE;
3431 cout <<
"strong_generators::Hall_reflection "
3432 "before generators_to_strong_generators" << endl;
3437 gens, SG, verbose_level - 3);
3440 cout <<
"strong_generators::Hall_reflection "
3441 "after generators_to_strong_generators" << endl;
3451 cout <<
"strong_generators::Hall_reflection done" << endl;
3456 int nb_pairs,
int °ree,
int verbose_level)
3458 int f_v = (verbose_level >= 1);
3465 cout <<
"strong_generators::normalizer_of_a_Hall_reflection" << endl;
3470 cout <<
"strong_generators::normalizer_of_a_Hall_reflection before "
3471 "generators_Hall_reflection_normalizer_group" << endl;
3475 nb_perms, perms, degree,
3482 cout <<
"strong_generators::normalizer_of_a_Hall_reflection "
3483 "after generators_Hall_reflection_normalizer_group" << endl;
3493 for (i = 0; i < nb_perms; i++) {
3498 cout <<
"strong_generators::normalizer_of_a_Hall_reflection "
3499 "generators are:" << endl;
3511 factors, nb_factors);
3518 cout <<
"strong_generators::normalizer_of_a_Hall_reflection "
3519 "target_go=" << target_go << endl;
3523 cout <<
"strong_generators::normalizer_of_a_Hall_reflection "
3524 "before A->init_permutation_group" << endl;
3527 int f_no_base =
FALSE;
3535 cout <<
"strong_generators::normalizer_of_a_Hall_reflection "
3536 "before generators_to_strong_generators" << endl;
3541 gens, SG, verbose_level - 3);
3544 cout <<
"strong_generators::normalizer_of_a_Hall_reflection "
3545 "after generators_to_strong_generators" << endl;
3555 cout <<
"strong_generators::normalizer_of_a_Hall_reflection done" << endl;
3564 int f_v = (verbose_level >= 1);
3569 cout <<
"strong_generators::hyperplane_lifting_with_two_lines_fixed" << endl;
3578 int f_semilinear =
FALSE;
3584 cout <<
"strong_generators::hyperplane_lifting_with_two_lines_fixed "
3585 "f_semilinear = " << f_semilinear << endl;
3586 cout <<
"generators SG_hyperplane:" << endl;
3591 for (i = 0; i < SG_hyperplane->
gens->
len; i++) {
3593 cout <<
"strong_generators::hyperplane_lifting_with_two_lines_fixed "
3594 "lifting generator "
3595 << i <<
" / " << SG_hyperplane->
gens->
len << endl;
3597 frobenius = SG_hyperplane->
gens->
ith(i)[9];
3600 cout <<
"strong_generators::hyperplane_lifting_with_two_lines_fixed "
3601 " frobenius = " << frobenius << endl;
3606 cout <<
"strong_generators::hyperplane_lifting_with_two_lines_fixed "
3607 "lifting generator "
3608 << i <<
" / " << SG_hyperplane->
gens->
len
3609 <<
" before Gg.hyperplane_lifting_with_two_lines_fixed" << endl;
3613 f_semilinear, frobenius,
3621 cout <<
"strong_generators::hyperplane_lifting_with_two_lines_fixed "
3622 "lifting generator "
3623 << i <<
" / " << SG_hyperplane->
gens->
len
3624 <<
" after Gg.hyperplane_lifting_with_two_lines_fixed" << endl;
3628 cout <<
"strong_generators::hyperplane_lifting_with_two_lines_fixed "
3630 << i <<
" / " << SG_hyperplane->
gens->
len
3631 <<
" lifts to " << endl;
3637 cout <<
"strong_generators::hyperplane_lifting_with_two_lines_fixed "
3638 "generators are:" << endl;
3651 cout <<
"strong_generators::hyperplane_lifting_with_two_lines_fixed "
3652 "target_go=" << target_go << endl;
3657 cout <<
"strong_generators::hyperplane_lifting_with_two_lines_fixed "
3658 "before generators_to_strong_generators" << endl;
3665 gens, SG, verbose_level - 3);
3668 cout <<
"strong_generators::hyperplane_lifting_with_two_lines_fixed "
3669 "after generators_to_strong_generators" << endl;
3679 cout <<
"strong_generators::hyperplane_lifting_with_two_lines_fixed done" << endl;
3689 int f_v = (verbose_level >= 1);
3693 cout <<
"strong_generators::exterior_square" << endl;
3699 gens->
init(A_detached, verbose_level - 2);
3702 int f_semilinear =
FALSE;
3710 cout <<
"strong_generators::exterior_square n = " << n << endl;
3721 cout <<
"strong_generators::exterior_square "
3722 "f_semilinear = " << f_semilinear << endl;
3723 cout <<
"generators SG_original:" << endl;
3728 for (i = 0; i < SG_original->
gens->
len; i++) {
3730 cout <<
"strong_generators::exterior_square "
3731 "lifting generator "
3732 << i <<
" / " << SG_original->
gens->
len << endl;
3735 frobenius = SG_original->
gens->
ith(i)[n * n];
3738 cout <<
"strong_generators::exterior_square "
3739 " frobenius = " << frobenius << endl;
3748 cout <<
"strong_generators::exterior_square "
3749 "lifting generator "
3750 << i <<
" / " << SG_original->
gens->
len
3751 <<
" before P->exterior_square" << endl;
3757 An2[n2 * n2] = frobenius;
3760 cout <<
"strong_generators::exterior_square "
3761 "lifting generator "
3762 << i <<
" / " << SG_original->
gens->
len
3763 <<
" after P->exterior_square" << endl;
3767 cout <<
"strong_generators::exterior_square "
3769 << i <<
" / " << SG_original->
gens->
len
3770 <<
" lifts to " << endl;
3776 cout <<
"strong_generators::exterior_square "
3777 "generators are:" << endl;
3781 gens->
copy(nice_gens, verbose_level);
3791 cout <<
"strong_generators::exterior_square "
3792 "target_go=" << target_go << endl;
3797 cout <<
"strong_generators::exterior_square "
3798 "before generators_to_strong_generators" << endl;
3805 gens, SG, verbose_level - 3);
3808 cout <<
"strong_generators::exterior_square "
3809 "after generators_to_strong_generators" << endl;
3819 cout <<
"strong_generators::exterior_square done" << endl;
3838 int f_v = (verbose_level >= 1);
3840 int h, l, i, j, a, n, k;
3848 cout <<
"strong_generators::diagonally_repeat" << endl;
3858 cout <<
"strong_generators::diagonally_repeat l=" << l << endl;
3861 for (h = 0; h < l; h++) {
3864 for (i = 0; i < k; i++) {
3865 for (j = 0; j < k; j++) {
3868 M[(k + i) * n + k + j] = a;
3878 cout <<
"strong_generators::diagonally_repeat "
3879 "before A->create_sims_from_generators_with_target_group_order" << endl;
3883 gens, go, verbose_level);
3885 cout <<
"strong_generators::diagonally_repeat "
3886 "after A->create_sims_from_generators_with_target_group_order" << endl;
3890 cout <<
"strong_generators::diagonally_repeat "
3891 "before Sn->init_from_sims" << endl;
3895 cout <<
"strong_generators::diagonally_repeat "
3896 "after Sn->init_from_sims" << endl;
3903 cout <<
"The old stabilizer has order " << go << endl;
3906 cout <<
"strong_generators::diagonally_repeat end" << endl;
generators of the symplectic group
void init(field_theory::finite_field *F, int n, int verbose_level)
generators for various classes of groups
void generators_for_stabilizer_of_triangle_in_PGL4(int f_semilinear, field_theory::finite_field *F, int *&data, int &size, int &nb_gens, int verbose_level)
void generators_Hall_reflection(int nb_pairs, int &nb_perms, int *&perms, int °ree, int verbose_level)
void order_Hall_reflection_normalizer_factorized(int nb_pairs, int *&factors, int &nb_factors)
void generators_for_parabolic_subgroup(int n, field_theory::finite_field *F, int f_semilinear, int k, int *&data, int &size, int &nb_gens, int verbose_level)
void generators_for_stabilizer_of_three_collinear_points_in_PGL4(int f_semilinear, field_theory::finite_field *F, int *&data, int &size, int &nb_gens, int verbose_level)
void generators_Hall_reflection_normalizer_group(int nb_pairs, int &nb_perms, int *&perms, int °ree, int verbose_level)
construction of all null polarities
void init(field_theory::finite_field *F, int n, int verbose_level)
a collection of combinatorial functions
void q_binomial_no_table(ring_theory::longinteger_object &a, int n, int k, int q, int verbose_level)
long int binomial2(int a)
void finite_field_init(int q, int f_without_tables, int verbose_level)
linear_algebra::linear_algebra * Linear_algebra
a finite field as a vector space over a subfield
void init(finite_field *FQ, finite_field *Fq, int verbose_level)
void lift_matrix(int *MQ, int m, int *Mq, int verbose_level)
various functions related to geometries
long int nb_PG_elements(int n, int q)
void hyperplane_lifting_with_two_lines_fixed(projective_space *P, int *A3, int f_semilinear, int frobenius, long int line1, long int line2, int *A4, int verbose_level)
projective space PG(n,q) of dimension n over Fq
provides access to pre-computed combinatorial data in encoded form
void quartic_curves_stab_gens(int q, int i, int *&data, int &nb_gens, int &data_size, std::string &stab_order_str)
void BLT_stab_gens(int q, int no, int *&data, int &nb_gens, int &data_size, std::string &stab_order_str)
void Spread_stab_gens(int q, int k, int i, int *&data, int &nb_gens, int &data_size, std::string &stab_order_str)
void cubic_surface_stab_gens(int q, int i, int *&data, int &nb_gens, int &data_size, std::string &stab_order_str)
void exterior_square(int *An, int *An2, int n, int verbose_level)
void Kronecker_product(int *A, int *B, int n, int *AB)
void diagonal_matrix(int *A, int n, int alpha)
void identity_matrix(int *A, int n)
void cubic_surface_family_G13_generators(int a, int *&gens, int &nb_gens, int &data_size, int &group_order, int verbose_level)
void cubic_surface_family_F13_generators(int a, int *&gens, int &nb_gens, int &data_size, int &group_order, int verbose_level)
void cubic_surface_family_24_generators(int f_with_normalizer, int f_semilinear, int *&gens, int &nb_gens, int &data_size, int &group_order, int verbose_level)
basic number theoretic functions
long int gcd_lint(long int m, long int n)
int i_power_j(int i, int j)
domain to compute with objects of type longinteger
void integral_division_exact(longinteger_object &a, longinteger_object &b, longinteger_object &a_over_b)
void multiply_up(longinteger_object &a, int *x, int len, int verbose_level)
void integral_division_by_int(longinteger_object &a, int b, longinteger_object &q, int &r)
void mult(longinteger_object &a, longinteger_object &b, longinteger_object &c)
void group_order_PGL(longinteger_object &result, int n, int q, int f_semilinear)
void mult_in_place(longinteger_object &a, longinteger_object &b)
void multiply_up_lint(longinteger_object &a, long int *x, int len, int verbose_level)
a class to represent arbitrary precision integers
void create_from_base_10_string(const char *str, int verbose_level)
void assign_to(longinteger_object &b)
void create_product(int nb_factors, int *factors)
void create_i_power_j(int i, int j)
void create(long int i, const char *file, int line)
domain of polynomials in one variable over a finite field
void get_a_primitive_polynomial(unipoly_object &m, int f, int verbose_level)
void Frobenius_matrix_by_rows(int *&Frob, unipoly_object factor_polynomial, int verbose_level)
int & s_i(unipoly_object p, int i)
void create_object_by_rank(unipoly_object &p, long int rk, const char *file, int line, int verbose_level)
void print_object(unipoly_object p, std::ostream &ost)
global functions related to group actions
void make_generators_stabilizer_of_two_components(action *A_PGL_n_q, action *A_PGL_k_q, int k, data_structures_groups::vector_ge *gens, int verbose_level)
a permutation group in a fixed action.
void element_print_quick(void *elt, std::ostream &ost)
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)
void element_print(void *elt, std::ostream &ost)
void induced_action_on_sign(groups::sims *old_G, int verbose_level)
void init_symmetric_group(int degree, int f_no_base, int verbose_level)
void print_quick(std::ostream &ost, void *elt)
void induced_action_on_determinant(groups::sims *old_G, int verbose_level)
groups::strong_generators * Strong_gens
void induced_action_on_Galois_group(groups::sims *old_G, 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)
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)
int matrix_group_dimension()
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)
int is_semilinear_matrix_group()
field_theory::finite_field * matrix_group_finite_field()
void element_power_int_in_place(int *Elt, int n, int verbose_level)
void make_element(int *Elt, int *data, 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)
groups::sims * create_sims_for_centralizer_of_matrix(int *Mtx, int verbose_level)
void move(void *a, void *b)
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 init_wreath_product_group(int nb_factors, int n, field_theory::finite_field *F, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
to hold a vector of group elements
void allocate(int length, int verbose_level)
void copy_in(int i, int *elt)
void print(std::ostream &ost)
void copy(vector_ge *&vector_copy, int verbose_level)
void init_from_data(actions::action *A, int *data, int nb_elements, int elt_size, int verbose_level)
void init(actions::action *A, int verbose_level)
void print_quick(std::ostream &ost)
description of a linear group from the command line
a matrix group over a finite field in projective, vector space or affine action
field_theory::finite_field * GFq
a permutation group represented via a stabilizer chain
void group_order(ring_theory::longinteger_object &go)
data_structures_groups::vector_ge gens
void sylow_subgroup(int p, sims *P, int verbose_level)
a strong generating set for a permutation group with respect to a fixed action
void init_trivial_group(actions::action *A, int verbose_level)
void init_copy(strong_generators *S, int verbose_level)
void generators_for_the_monomial_group(actions::action *A, matrix_group *Mtx, int verbose_level)
void Janko1(actions::action *A, field_theory::finite_field *F, int verbose_level)
void init_linear_group_from_scratch(actions::action *&A, field_theory::finite_field *F, int n, linear_group_description *Descr, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void init_centralizer_of_matrix_general_linear(actions::action *A_projective, actions::action *A_general_linear, int *Mtx, int verbose_level)
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)
void generators_for_parabolic_subgroup(actions::action *A_PGL_n_q, matrix_group *Mtx, int k, int verbose_level)
void stabilizer_of_F13_surface(actions::action *A, field_theory::finite_field *F, int a, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void diagonally_repeat(actions::action *An, strong_generators *Sn, int verbose_level)
void stabilizer_of_cubic_surface_from_catalogue(actions::action *A, field_theory::finite_field *F, int iso, int verbose_level)
void exterior_square(actions::action *A_detached, strong_generators *SG_original, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void normalizer_of_a_Hall_reflection(int nb_pairs, int °ree, int verbose_level)
void init_single_with_target_go(actions::action *A, int *Elt, int target_go, int verbose_level)
void init_single(actions::action *A, int *Elt, int verbose_level)
sims * create_sims(int verbose_level)
void Hall_reflection(int nb_pairs, int °ree, int verbose_level)
void generators_for_stabilizer_of_three_collinear_points_in_PGL4(actions::action *A_PGL_4_q, matrix_group *Mtx, int verbose_level)
void print_generators_tex()
void generators_for_the_orthogonal_group(actions::action *A, field_theory::finite_field *F, int n, int epsilon, int f_semilinear, int verbose_level)
void stabilizer_of_quartic_curve_from_catalogue(actions::action *A, field_theory::finite_field *F, int iso, int verbose_level)
void print_generators(std::ostream &ost)
void stabilizer_of_G13_surface(actions::action *A, field_theory::finite_field *F, int a, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void generators_for_the_stabilizer_of_two_components(actions::action *A_PGL_n_q, matrix_group *Mtx, int verbose_level)
void generators_for_the_null_polarity_group(actions::action *A, matrix_group *Mtx, int verbose_level)
void generators_for_the_identity_subgroup(actions::action *A_linear, matrix_group *Mtx, int verbose_level)
void generators_for_the_singer_cycle(actions::action *A, matrix_group *Mtx, int power_of_singer, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void special_subgroup(int verbose_level)
void stabilizer_of_spread_from_catalogue(actions::action *A, int q, int k, int iso, int verbose_level)
void generators_for_the_diagonal_group(actions::action *A, matrix_group *Mtx, int verbose_level)
void hyperplane_lifting_with_two_lines_fixed(strong_generators *SG_hyperplane, geometry::projective_space *P, int line1, int line2, int verbose_level)
void init_centralizer_of_matrix(actions::action *A, int *Mtx, int verbose_level)
void stabilizer_of_pencil_of_conics(actions::action *A, field_theory::finite_field *F, int verbose_level)
void generators_for_the_borel_subgroup_lower(actions::action *A_linear, matrix_group *Mtx, int verbose_level)
void even_subgroup(int verbose_level)
void init_from_sims(groups::sims *S, int verbose_level)
void field_reduction(actions::action *Aq, int n, int s, field_theory::finite_field *Fq, int verbose_level)
void projectivity_subgroup(sims *S, int verbose_level)
void regulus_stabilizer(actions::action *A_PGL_n_q, matrix_group *Mtx, int verbose_level)
void generators_for_stabilizer_of_triangle_in_PGL4(actions::action *A_PGL_4_q, matrix_group *Mtx, int verbose_level)
void generators_for_translation_plane_in_andre_model(actions::action *A_PGL_n1_q, actions::action *A_PGL_n_q, matrix_group *Mtx_n1, matrix_group *Mtx_n, data_structures_groups::vector_ge *spread_stab_gens, ring_theory::longinteger_object &spread_stab_go, int verbose_level)
void generators_for_the_singer_cycle_and_the_Frobenius(actions::action *A, matrix_group *Mtx, int power_of_singer, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void Sylow_subgroup(sims *S, int p, int verbose_level)
void generators_for_the_borel_subgroup_upper(actions::action *A_linear, matrix_group *Mtx, int verbose_level)
void stabilizer_of_Eckardt_surface(actions::action *A, field_theory::finite_field *F, int f_with_normalizer, int f_semilinear, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void generators_for_symplectic_group(actions::action *A, matrix_group *Mtx, int verbose_level)
data_structures_groups::vector_ge * gens
void BLT_set_from_catalogue_stabilizer(actions::action *A, field_theory::finite_field *F, int iso, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
#define Int_vec_zero(A, B)
#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)
the orbiter library for the classification of combinatorial objects
groups::matrix_group * matrix_grp