14namespace layer3_group_actions {
74 int f_v = (verbose_level >= 1);
77 cout <<
"strong_generators::init" << endl;
81 cout <<
"strong_generators::init done" << endl;
87 int f_v = (verbose_level >= 1);
91 cout <<
"strong_generators::init_from_sims" << endl;
92 cout <<
"action = " << S->
A->
label << endl;
93 cout <<
"base_len = " << S->
A->
base_len() << endl;
99 cout <<
"strong_generators::init_from_sims before "
100 "S->extract_strong_generators_in_order" << endl;
105 cout <<
"strong_generators::init_from_sims after "
106 "S->extract_strong_generators_in_order" << endl;
107 cout <<
"strong_generators::init_from_sims tl=";
112 cout <<
"strong_generators::init_from_sims done" << endl;
117 char *ascii_coding,
int verbose_level)
119 int f_v = (verbose_level >= 1);
120 int f_vv = (verbose_level >= 2);
125 cout <<
"strong_generators::init_from_ascii_coding" << endl;
128 G->
init(
A, verbose_level - 2);
130 cout <<
"strong_generators::init_from_ascii_coding "
131 "before G->init_ascii_coding_to_sims" << endl;
135 cout <<
"strong_generators::init_from_ascii_coding "
136 "after G->init_ascii_coding_to_sims" << endl;
143 cout <<
"strong_generators::init_from_ascii_coding "
144 "Group order=" << go << endl;
151 cout <<
"strong_generators::init_from_ascii_coding "
169 int f_v = (verbose_level >= 1);
174 cout <<
"strong_generators::init_copy" << endl;
183 for (i = 0; i < S->
gens->
len; i++) {
189 cout <<
"strong_generators::init_copy done" << endl;
194 std::vector<int> &gen_handle,
195 std::vector<int> &tl,
198 int f_v = (verbose_level >= 1);
202 cout <<
"strong_generators::init_by_hdl_and_with_tl" << endl;
214 for (i = 0; i < gen_handle.size(); i++) {
220 cout <<
"strong_generators::init_by_hdl_and_with_tl done" << endl;
226 int *gen_hdl,
int nb_gen,
int verbose_level)
228 int f_v = (verbose_level >= 1);
232 cout <<
"strong_generators::init_by_hdl" << endl;
242 for (i = 0; i < nb_gen; i++) {
246 cout <<
"strong_generators::init_by_hdl done" << endl;
255 int f_v = (verbose_level >= 1);
258 cout <<
"strong_generators::init_from_permutation_representation" << endl;
261 cout <<
"strong_generators::init_from_permutation_representation "
262 "group_order == 0" << endl;
266 cout <<
"strong_generators::init_from_permutation_representation "
267 "group_order < 0" << endl;
271 init(
A, verbose_level - 2);
277 cout <<
"strong_generators::init_from_permutation_representation "
278 "before nice_gens->init_from_permutation_representation" << endl;
281 nb_elements, verbose_level - 3);
283 cout <<
"strong_generators::init_from_permutation_representation "
284 "after nice_gens->init_from_permutation_representation" << endl;
290 cout <<
"strong_generators::init_from_permutation_representation before "
291 "A->create_sims_from_generators_with_target_group_order_int" << endl;
296 cout <<
"strong_generators::init_from_permutation_representation after "
297 "A->create_sims_from_generators_with_target_group_order_int" << endl;
301 cout <<
"strong_generators::init_from_permutation_representation "
302 "before init_from_sims" << endl;
306 cout <<
"strong_generators::init_from_permutation_representation "
307 "after init_from_sims" << endl;
315 cout <<
"strong_generators::init_from_permutation_representation "
316 "done, found a group of order " <<
group_order << endl;
321 int nb_elements,
int elt_size,
int *transversal_length,
325 int f_v = (verbose_level >= 1);
328 cout <<
"strong_generators::init_from_data" << endl;
330 init(
A, verbose_level - 2);
335 nb_elements, elt_size, verbose_level);
338 nb_elements, elt_size, verbose_level);
344 cout <<
"strong_generators::init_from_data done" << endl;
350 int nb_elements,
int elt_size,
const char *ascii_target_go,
354 int f_v = (verbose_level >= 1);
358 cout <<
"strong_generators::init_from_data_with_target_go_ascii" << endl;
363 cout <<
"strong_generators::init_from_data_with_target_go_ascii before init_from_data_with_target_go" << endl;
366 elt_size, nb_elements, target_go,
370 cout <<
"strong_generators::init_from_data_with_target_go_ascii after init_from_data_with_target_go" << endl;
373 cout <<
"strong_generators::init_from_data_with_target_go_ascii done" << endl;
379 int data_gens_size,
int nb_gens,
384 int f_v = (verbose_level >= 1);
388 cout <<
"strong_generators::init_from_data_with_target_go" << endl;
396 nice_gens->
init(
A, verbose_level - 2);
397 nice_gens->
allocate(nb_gens, verbose_level - 2);
398 for (i = 0; i < nb_gens; i++) {
400 cout <<
"strong_generators::init_from_data_with_target_go "
401 << i <<
" / " << nb_gens << endl;
405 data_gens + i * data_gens_size,
409 cout <<
"strong_generators::init_from_data_with_target_go "
410 "generators are:" << endl;
419 cout <<
"strong_generators::init_from_data_with_target_go before A->generators_to_strong_generators" << endl;
426 cout <<
"strong_generators::init_from_data_with_target_go after A->generators_to_strong_generators" << endl;
430 cout <<
"strong_generators::init_from_data_with_target_go "
431 "strong generators are:" << endl;
451 cout <<
"strong_generators::init_from_data_with_target_go done" << endl;
457 std::string &go_text,
460 int f_v = (verbose_level >= 1);
464 cout <<
"strong_generators::init_from_data_with_go" << endl;
473 cout <<
"gens_data = ";
476 cout <<
"go_text = " << go_text << endl;
490 cout <<
"before SG->init_from_data_with_target_go_ascii" << endl;
502 cout <<
"strong_generators::init_from_data_with_go done" << endl;
512 int f_v = (verbose_level >= 1);
517 cout <<
"strong_generators::init_point_stabilizer_of_arbitrary_"
518 "point_through_schreier" << endl;
528 full_group_order, verbose_level);
534 cout <<
"strong_generators::init_point_stabilizer_of_arbitrary_"
535 "point_through_schreier done" << endl;
544 int f_v = (verbose_level >= 1);
548 cout <<
"strong_generators::init_point_stabilizer_orbit_rep_schreier" << endl;
551 Stab, orbit_idx, verbose_level);
555 cout <<
"strong_generators::init_point_stabilizer_orbit_rep_schreier done" << endl;
562 int f_v = (verbose_level >= 1);
568 cout <<
"strong_generators::init_generators_for_the_conjugate_group_avGa" << endl;
573 cout <<
"strong_generators::init_generators_for_the_conjugate_group_avGa go=" << go << endl;
580 for (i = 0; i < SG->
gens->
len; i++) {
586 cout <<
"strong_generators::init_generators_for_the_conjugate_group_avGa before gens->init_conjugate_svas_of" << endl;
590 cout <<
"strong_generators::init_generators_for_the_conjugate_group_avGa after gens->init_conjugate_svas_of" << endl;
597 cout <<
"strong_generators::init_generators_for_the_conjugate_group_avGa "
598 "before generators_to_strong_generators" << endl;
610 cout <<
"strong_generators::init_generators_for_the_conjugate_group_avGa done" << endl;
617 int f_v = (verbose_level >= 1);
623 cout <<
"strong_generators::init_generators_for_the_conjugate_group_aGav" << endl;
628 cout <<
"strong_generators::init_generators_for_the_conjugate_group_aGav go=" << go << endl;
635 for (i = 0; i < SG->
gens->
len; i++) {
637 cout << i <<
" / " << SG->
gens->
len <<
":" << endl;
640 Elt_a,
gens->
ith(i), verbose_level);
649 cout <<
"strong_generators::init_generators_for_the_conjugate_group_aGav "
650 "before generators_to_strong_generators" << endl;
657 cout <<
"strong_generators::init_generators_for_the_conjugate_group_aGav "
658 "after generators_to_strong_generators" << endl;
666 cout <<
"strong_generators::init_generators_for_the_conjugate_group_aGav done" << endl;
673 int f_v = (verbose_level >= 1);
679 cout <<
"strong_generators::init_transposed_group" << endl;
687 for (i = 0; i < SG->
gens->
len; i++) {
689 cout <<
"before element_transpose " << i <<
" / "
690 << SG->
gens->
len <<
":" << endl;
696 cout <<
"after element_transpose " << i <<
" / "
697 << SG->
gens->
len <<
":" << endl;
705 cout <<
"strong_generators::init_transposed_group "
706 "before A->generators_to_strong_generators" << endl;
713 cout <<
"strong_generators::init_transposed_group "
714 "after A->generators_to_strong_generators" << endl;
722 cout <<
"strong_generators::init_transposed_group done" << endl;
730 int f_v = (verbose_level >= 1);
736 cout <<
"strong_generators::init_group_extension" << endl;
745 my_gens->
init(
A, verbose_level - 2);
747 my_gens->
allocate(nb_gens + 1, verbose_level - 2);
748 for (i = 0; i < nb_gens; i++) {
761 cout <<
"strong_generators::init_group_extension "
762 "before generators_to_strong_generators, "
763 "target_go=" << target_go << endl;
772 cout <<
"strong_generators::init_group_extension "
773 "strong generators are:" << endl;
793 cout <<
"strong_generators::init_group_extension done" << endl;
802 int f_v = (verbose_level >= 1);
808 cout <<
"strong_generators::init_group_extension" << endl;
814 int nb_gens, nb_new_gens;
817 my_gens->
init(
A, verbose_level - 2);
819 nb_new_gens = new_gens->
len;
820 my_gens->
allocate(nb_gens + nb_new_gens, verbose_level - 2);
821 for (i = 0; i < nb_gens; i++) {
824 for (i = 0; i < nb_new_gens; i++) {
829 cout <<
"strong_generators::init_group_extension "
839 cout <<
"strong_generators::init_group_extension "
840 "target_go=" << target_go << endl;
841 cout <<
"A=" << endl;
850 cout <<
"strong_generators::init_group_extension "
851 "before generators_to_strong_generators, "
852 "target_go=" << target_go << endl;
861 cout <<
"strong_generators::init_group_extension "
862 "strong generators are:" << endl;
882 cout <<
"strong_generators::init_group_extension "
888 const char *rank_vector_text,
889 const char *subgroup_order_text,
sims *S,
890 int *&subgroup_gens_idx,
int &nb_subgroup_gens,
893 int f_v = (verbose_level >= 1);
897 cout <<
"strong_generators::switch_to_subgroup" << endl;
906 Int_vec_scan(rank_vector_text, subgroup_gens_idx, nb_subgroup_gens);
908 cout <<
"strong_generators::switch_to_subgroup "
918 my_gens->
init(
A, verbose_level - 2);
920 rank_vector_text, S, verbose_level);
924 cout <<
"strong_generators::switch_to_subgroup "
925 "chosen generators:" << endl;
942 cout <<
"strong_generators::switch_to_subgroup "
943 "strong generators are:" << endl;
963 cout <<
"strong_generators::switch_to_subgroup done" << endl;
968 int *subgroup_gens_idx,
int nb_subgroup_gens,
969 const char *subgroup_order_text,
973 int f_v = (verbose_level >= 1);
977 cout <<
"strong_generators::init_subgroup" << endl;
986 my_gens->
init(
A, verbose_level - 2);
988 subgroup_gens_idx, nb_subgroup_gens, S, verbose_level);
992 cout <<
"strong_generators::init_subgroup "
993 "chosen generators:" << endl;
1010 cout <<
"strong_generators::init_subgroup "
1011 "strong generators are:" << endl;
1031 cout <<
"strong_generators::init_subgroup done" << endl;
1037 int nb_subgroup_gens,
1039 std::string &subgroup_order_text,
1043 int f_v = (verbose_level >= 1);
1047 cout <<
"strong_generators::init_subgroup_by_generators" << endl;
1056 nice_gens->
init(
A, verbose_level - 2);
1057 nice_gens->
allocate(nb_subgroup_gens, verbose_level - 2);
1058 for (
int h = 0; h < nb_subgroup_gens; h++) {
1060 cout <<
"strong_generators::init_subgroup_by_generators "
1061 "generator " << h <<
" / " << nb_subgroup_gens << endl;
1068 cout <<
"strong_generators::init_subgroup_by_generators "
1069 "chosen generators:" << endl;
1086 cout <<
"strong_generators::init_subgroup_by_generators "
1087 "strong generators are:" << endl;
1107 cout <<
"strong_generators::init_subgroup_by_generators done" << endl;
1114 int f_v = (verbose_level >= 1);
1119 cout <<
"strong_generators::create_sims verbose_level=" << verbose_level << endl;
1123 cout <<
"strong_generators::create_sims "
1124 "gens == NULL" << endl;
1128 cout <<
"strong_generators::create_sims before "
1129 "create_sims_from_generators_with_target_group_order_factorized" << endl;
1135 cout <<
"strong_generators::create_sims after "
1136 "create_sims_from_generators_with_target_group_order_factorized" << endl;
1140 cout <<
"strong_generators::create_sims done" << endl;
1148 int f_v = (verbose_level >= 1);
1153 cout <<
"strong_generators::create_sims_in_different_action" << endl;
1157 cout <<
"strong_generators::create_sims_in_different_action "
1158 "gens == NULL" << endl;
1166 cout <<
"strong_generators::create_sims_in_different_action "
1176 int f_v = (verbose_level >= 1);
1177 int f_vv = (verbose_level >= 2);
1181 int *coset_reps_vec;
1185 cout <<
"strong_generators::add_generators" << endl;
1188 cout <<
"group_index=" << group_index << endl;
1194 for (i = 0; i < group_index; i++) {
1205 coset_reps_vec, group_index,
1222 cout <<
"strong_generators::add_generators done" << endl;
1227 int *Elt,
int group_index,
int verbose_level)
1229 int f_v = (verbose_level >= 1);
1235 cout <<
"strong_generators::add_single_generator" << endl;
1246 Elt, 1, group_index,
1261 cout <<
"strong_generators::add_single_generator "
1292 int verbose_level = 1;
1293 int f_v = (verbose_level >= 1);
1297 cout <<
"strong_generators::print_generators_gap" << endl;
1299 ost <<
"Generators in GAP format are:" << endl;
1301 ost <<
"G := Group([";
1302 for (i = 0; i <
gens->
len; i++) {
1304 cout <<
"strong_generators::print_generators_gap i=" << i <<
" / " <<
gens->
len << endl;
1312 if (i < gens->len - 1) {
1313 ost <<
", " << endl;
1316 ost <<
"]);" << endl;
1319 ost <<
"too big to print" << endl;
1322 cout <<
"strong_generators::print_generators_gap done" << endl;
1331 ost <<
"Generators in GAP format are:" << endl;
1333 ost <<
"G := Group([";
1334 for (i = 0; i <
gens->
len; i++) {
1341 if (i < gens->len - 1) {
1342 ost <<
", " << endl;
1345 ost <<
"]);" << endl;
1348 ost <<
"too big to print" << endl;
1357 ost <<
"Generators in compact permutation form are:" << endl;
1360 for (i = 0; i <
gens->
len; i++) {
1361 for (j = 0; j <
A->
degree; j++) {
1368 ost <<
"-1" << endl;
1371 ost <<
"too big to print" << endl;
1380 cout <<
"strong_generators::print_generators computing group order" << endl;
1382 ost <<
"Strong generators for a group of order "
1387 for (i = 0; i <
gens->
len; i++) {
1388 ost <<
"generator " << i <<
" / "
1389 <<
gens->
len <<
" is: " << endl;
1391 ost <<
"as permutation: " << endl;
1403 ost <<
"too big to print" << endl;
1407 ost <<
"Generators as permutations are:" << endl;
1412 for (i = 0; i <
gens->
len; i++) {
1418 ost <<
"too big to print" << endl;
1429 ost <<
"The stabilizer of order $" << go
1430 <<
"$ is generated by:\\\\" << endl;
1432 for (i = 0; i <
gens->
len; i++) {
1437 sprintf(str,
"g_{%d} = ", i + 1);
1442 ost <<
"$" << str <<
"$ ";
1462 ost <<
" of order " << ord;
1465 ost <<
" and with " << n <<
" fixed points.\\\\" << endl;
1468 ost << endl <<
"\\bigskip" << endl;
1480 cout <<
"Strong generators for a group of "
1481 "order " << go <<
" tl=";
1485 for (i = 0; i <
gens->
len; i++) {
1503 f <<
gens->
len <<
" " << go << endl;
1504 for (i = 0; i <
gens->
len; i++) {
1511 cout <<
"Written file " << fname <<
" of size "
1521 cout <<
"Strong generators for a group of order " << go <<
" tl=";
1524 for (i = 0; i <
gens->
len; i++) {
1525 cout <<
"Generator " << i <<
" / " <<
gens->
len <<
" is:" << endl;
1529 cout <<
" sgn=" << sgn;
1538 for (i = 0; i <
gens->
len; i++) {
1547 if (i < gens->len - 1) {
1548 ost <<
", " << endl;
1555 int f_v = (verbose_level >= 1);
1558 cout <<
"strong_generators::export_magma" << endl;
1568 cout <<
"cannot export to magma if semilinear" << endl;
1578 cout <<
"strong_generators::export_magma extension field" << endl;
1580 ost <<
"F<w>:=GF(" << F->
q <<
");" << endl;
1581 ost <<
"G := GeneralLinearGroup(" << M->
n <<
", F);" << endl;
1582 ost <<
"H := sub< G | ";
1583 for (h = 0; h <
gens->
len; h++) {
1586 for (i = 0; i < M->
n; i++) {
1587 for (j = 0; j < M->
n; j++) {
1588 a = Elt[i * M->
n + j];
1604 if (h < gens->len - 1) {
1605 ost <<
", " << endl;
1608 ost <<
" >;" << endl;
1612 ost <<
"G := GeneralLinearGroup(" << M->
n <<
", GF(" << F->
q <<
"));" << endl;
1613 ost <<
"H := sub< G | ";
1614 for (h = 0; h <
gens->
len; h++) {
1617 for (i = 0; i < M->
n; i++) {
1618 for (j = 0; j < M->
n; j++) {
1619 ost << Elt[i * M->
n + j];
1629 if (h < gens->len - 1) {
1630 ost <<
", " << endl;
1633 ost <<
" >;" << endl;
1637 cout <<
"strong_generators::export_magma done" << endl;
1653 ost <<
"G := Group([";
1654 for (i = 0; i <
gens->
len; i++) {
1661 if (i < gens->len - 1) {
1662 ost <<
", " << endl;
1665 ost <<
"]);" << endl;
1676 for (i = 0; i < sz; i++) {
1682 ost <<
"LoadPackage(\"images\");" << endl;
1683 ost <<
"MinimalImage(G, [" << output <<
"], OnSets);" << endl;
1698 ost <<
"Strong generators for a group of order " << go <<
":" << endl;
1699 ost <<
"$$" << endl;
1700 for (i = 0; i <
gens->
len; i++) {
1704 if (i < gens->len - 1) {
1705 ost <<
", " << endl;
1707 if (((i + 1) % 1) == 0 && i < gens->len - 1) {
1708 ost <<
"$$" << endl;
1709 ost <<
"$$" << endl;
1712 ost <<
"$$" << endl;
1720 for (i = 0; i <
gens->
len; i++) {
1724 ost <<
"\\\\" << endl;
1734 ost <<
"Strong generators for a group of order " << go <<
":" << endl;
1735 ost <<
"$$" << endl;
1736 for (i = 0; i <
gens->
len; i++) {
1740 if (i < gens->len - 1) {
1741 ost <<
", " << endl;
1743 if (((i + 1) % 1) == 0 && i < gens->len - 1) {
1744 ost <<
"$$" << endl;
1745 ost <<
"$$" << endl;
1748 ost <<
"$$" << endl;
1749 for (i = 0; i <
gens->
len; i++) {
1753 ost <<
"\\\\" << endl;
1761 void (*point_label)(stringstream &sstr,
long int pt,
void *data),
1762 void *point_label_data)
1768 ost <<
"Strong generators for a group of order " << go <<
":" << endl;
1770 for (i = 0; i <
gens->
len; i++) {
1771 cout <<
"Generator " << i <<
" / " <<
gens->
len <<
" is:" << endl;
1772 ost <<
"$$" << endl;
1774 ost <<
"$$" << endl;
1775 ost <<
"$$" << endl;
1778 point_label, point_label_data);
1779 ost <<
"$$" << endl;
1782 for (i = 0; i <
gens->
len; i++) {
1786 ost <<
"\\\\" << endl;
1789 for (i = 0; i <
gens->
len; i++) {
1792 ost <<
"$\\\\" << endl;
1803 ost <<
"Strong generators for a group of order " << go <<
":\\\\" << endl;
1804 for (i = 0; i <
gens->
len; i++) {
1807 ost <<
"\\\\" << endl;
1818 cout <<
"Strong generators for a group of order "
1819 << go <<
":" << endl;
1820 for (i = 0; i <
gens->
len; i++) {
1821 cout <<
"Generator " << i <<
" / "
1822 <<
gens->
len <<
" is:" << endl;
1829 cout <<
"strong_generators::print_generators_as_permutations "
1830 "the degree is too large, we won't print "
1831 "the permutation representation" << endl;
1843 ost <<
"Strong generators for a group of order " << go <<
":" << endl;
1844 ost <<
"\\\\" << endl;
1845 for (i = 0; i <
gens->
len; i++) {
1846 ost <<
"Generator " << i <<
" / "
1847 <<
gens->
len <<
" is: $" << endl;
1853 cout <<
"strong_generators::print_generators_as_permutations_tex "
1854 "the degree is too large, we won't print "
1855 "the permutation representation" << endl;
1857 ost <<
"$\\\\" << endl;
1866 for (i = 0; i <
gens->
len; i++) {
1867 ost <<
"Generator " << i <<
" / "
1868 <<
gens->
len <<
" is:" << endl;
1869 ost <<
"$$" << endl;
1872 ost <<
"$$" << endl;
1873 ost <<
"as permutation:" << endl;
1879 cout <<
"strong_generators::print_with_given_action "
1880 "the degree is too large, we won't print "
1881 "the permutation representation" << endl;
1882 ost <<
"too big to print";
1886 ost <<
"\\\\" << endl;
1900 ost <<
"Group elements for a group of order " << go <<
" tl=";
1902 ost <<
"\\\\" << endl;
1903 for (i = 0; i < go.
as_lint(); i++) {
1905 ost <<
"Element " << i <<
" / " << go <<
" is:" << endl;
1906 ost <<
"$$" << endl;
1908 ost <<
"$$" << endl;
1924 ost <<
"Group elements for a group of order " << go <<
" tl=";
1926 ost <<
"\\\\" << endl;
1927 for (i = 0; i < go.
as_lint(); i++) {
1930 ost <<
"Element " << i <<
" / " << go <<
" is:" << endl;
1931 ost <<
"$$" << endl;
1942 ost <<
"$$" << endl;
1960 ost <<
"Group elements for a group of order " << go <<
" tl=";
1962 ost <<
"\\\\" << endl;
1963 for (i = 0; i < go.
as_lint(); i++) {
1965 ost <<
"Element " << i <<
" / " << go <<
" is:" << endl;
1966 ost <<
"$$" << endl;
1971 cout <<
"strong_generators::print_with_given_action "
1972 "the degree is too large, we won't print "
1973 "the permutation representation" << endl;
1976 ost <<
"$$" << endl;
1984 long int i, order, m;
1992 ost <<
"Group elements for a group of order " << go <<
" tl=";
1994 ost <<
"\\\\" << endl;
1997 ost <<
"We will only list the first " << m
1998 <<
" elements:\\\\" << endl;
2000 for (i = 0; i < m; i++) {
2003 ost <<
"Element " << i <<
" / " << go <<
" is:" << endl;
2004 ost <<
"$$" << endl;
2006 ost <<
"$$" << endl;
2007 ost <<
"The element has order " << order <<
".\\\\" << endl;
2016 void (*point_label)(std::stringstream &sstr,
long int pt,
void *data),
2017 void *point_label_data)
2019 long int i, order, m;
2033 ost <<
"Group elements for a group of order " << go <<
" tl=";
2035 ost <<
"\\\\" << endl;
2038 ost <<
"We will only list the first " << m
2039 <<
" elements:\\\\" << endl;
2041 for (i = 0; i < m; i++) {
2047 ost <<
"Element " << i <<
" / " << go <<
" is:" << endl;
2048 ost <<
"$$" << endl;
2050 ost <<
"$$" << endl;
2051 ost <<
"$$" << endl;
2053 point_label, point_label_data);
2054 ost <<
"$$" << endl;
2055 ost <<
"The element has order " << order <<
".\\\\" << endl;
2057 ost <<
"The powers are: ";
2059 ost <<
".\\\\" << endl;
2060 nb_fix_points[i] = cycle_type[0];
2061 ost <<
"The element has " << nb_fix_points[i] <<
" fix points.\\\\" << endl;
2066 ost <<
"The distribution of the number of fix points is $";
2068 ost <<
"$\\\\" << endl;
2077 int *&Table,
long int &go,
int verbose_level)
2079 int f_v = (verbose_level >= 1);
2083 cout <<
"strong_generators::create_group_table" << endl;
2089 cout <<
"strong_generators::create_group_table done" << endl;
2095 long int *&Subgroup_elements_by_index,
long int &sz_subgroup,
int verbose_level)
2097 int f_v = (verbose_level >= 1);
2105 cout <<
"strong_generators::list_of_elements_of_subgroup" << endl;
2113 for (i = 0; i < sz_subgroup; i++) {
2116 Subgroup_elements_by_index[i] = a;
2122 cout <<
"strong_generators::list_of_elements_of_subgroup done" << endl;
2129 int f_v = (verbose_level >= 1);
2132 cout <<
"strong_generators::compute_schreier_with_given_action" << endl;
2138 Sch->
init(A_given, verbose_level - 2);
2145 cout <<
"strong_generators::compute_schreier_with_given_action done, we found "
2154 int f_v = (verbose_level >= 1);
2157 cout <<
"strong_generators::compute_schreier_with_given_action_on_a_given_set" << endl;
2163 Sch->
init(A_given, verbose_level - 2);
2172 cout <<
"strong_generators::compute_schreier_with_given_action_on_a_given_set "
2179 int *&orbit_reps,
int verbose_level)
2181 int f_v = (verbose_level >= 1);
2186 cout <<
"strong_generators::orbits_on_points" << endl;
2195 orbit_reps =
NEW_int(nb_orbits);
2196 for (i = 0; i < nb_orbits; i++) {
2205 cout <<
"strong_generators::orbits_on_points done, "
2206 "we found " << nb_orbits <<
" orbits" << endl;
2214 int f_v = (verbose_level >= 1);
2219 cout <<
"strong_generators::orbits_on_points_with_given_action" << endl;
2226 orbit_reps =
NEW_int(nb_orbits);
2227 for (i = 0; i < nb_orbits; i++) {
2236 cout <<
"strong_generators::orbits_on_points_with_given_action "
2238 << nb_orbits <<
" orbits" << endl;
2245 int f_v = (verbose_level >= 1);
2249 cout <<
"strong_generators::orbits_on_points_schreier "
2250 "degree = " << A_given->
degree << endl;
2259 cout <<
"strong_generators::orbits_on_points_schreier "
2260 "go = " << go << endl;
2265 cout <<
"strong_generators::orbits_on_points_schreier "
2266 "generators:" << endl;
2271 Sch->
init(A_given, verbose_level - 2);
2274 cout <<
"strong_generators::orbits_on_points_schreier "
2275 "before Sch->init_generators" << endl;
2279 cout <<
"strong_generators::orbits_on_points_schreier "
2280 "before Sch->compute_all_point_orbits" << endl;
2284 cout <<
"strong_generators::orbits_on_points_schreier "
2285 "after Sch->compute_all_point_orbits" << endl;
2289 cout <<
"strong_generators::orbits_on_points_schreier "
2290 "done, we found " << Sch->
nb_orbits <<
" orbits" << endl;
2298 int f_v = (verbose_level >= 1);
2302 cout <<
"strong_generators::orbit_of_one_point_schreier "
2303 "degree = " << A_given->
degree <<
" point = "
2308 Sch->
init(A_given, verbose_level - 2);
2314 cout <<
"strong_generators::orbit_of_one_point_schreier "
2315 "done, we found one orbit of length "
2322 int *&Orbit_reps,
int *&Orbit_lengths,
int &nb_orbits,
2323 int **&Pts_per_generator,
int *&Nb_per_generator,
2326 int f_v = (verbose_level >= 1);
2329 int Orbit_allocated;
2335 int pt, i = 0, h, nb_gens, a, b, idx;
2336 int Orbit_reps_allocated;
2342 cout <<
"strong_generators::orbits_light "
2343 "degree = " << A_given->
degree << endl;
2346 Orbit_reps_allocated = 1024;
2347 Orbit_reps =
NEW_int(Orbit_reps_allocated);
2348 Orbit_lengths =
NEW_int(Orbit_reps_allocated);
2352 cout <<
"strong_generators::orbits_light "
2353 "allocating array Generator_idx" << endl;
2357 cout <<
"strong_generators::orbits_light "
2358 "allocating array Generator_idx done" << endl;
2360 for (pt = 0; pt < A_given->
degree; pt++) {
2361 Generator_idx[pt] = -1;
2368 Orbit_allocated = 1024;
2369 Orbit =
NEW_int(Orbit_allocated);
2380 Nb_per_generator =
NEW_int(nb_gens);
2382 Pts_per_generator =
NEW_pint(nb_gens);
2384 for (pt = 0; pt < A_given->
degree; pt++) {
2385 if (Has_been_reached->
s_i(pt)) {
2389 cout <<
"strong_generators::orbits_light "
2390 "computing orbit of point " << pt << endl;
2400 cout <<
"strong_generators::orbits_light "
2401 "considering the next element in the queue" << endl;
2404 for (i = 1; i < Q_len; i++) {
2409 cout <<
"strong_generators::orbits_light "
2410 "looking at element " << a << endl;
2412 for (h = 0; h < nb_gens; h++) {
2414 cout <<
"strong_generators::orbits_light "
2415 "applying generator " << h << endl;
2419 cout <<
"strong_generators::orbits_light "
2420 "under generator " << h
2421 <<
" it maps to " << b << endl;
2424 if (Orbit_len == Orbit_allocated) {
2428 new_oa = 2 * Orbit_allocated;
2430 for (i = 0; i < Orbit_len; i++) {
2435 Orbit_allocated = new_oa;
2437 for (i = Orbit_len; i > idx; i--) {
2438 Orbit[i] = Orbit[i - 1];
2442 Generator_idx[b] = h;
2443 Nb_per_generator[h]++;
2446 cout <<
"current orbit: ";
2451 Has_been_reached->
m_i(b, 1);
2453 if (f_v && ((nb_reached & ((1 << 18) - 1)) == 0)) {
2454 cout <<
"strong_generators::orbits_light "
2455 "nb_reached = " << nb_reached <<
" / "
2456 << A_given->
degree << endl;
2459 if (Q_len == Q_allocated) {
2463 new_qa = 2 * Q_allocated;
2465 for (i = 0; i < Q_len; i++) {
2470 Q_allocated = new_qa;
2476 cout <<
"current Queue: ";
2486 cout <<
"Orbit of point " << pt <<
" has length "
2487 << Orbit_len << endl;
2489 if (nb_orbits == Orbit_reps_allocated) {
2494 an = 2 * Orbit_reps_allocated;
2497 for (i = 0; i < nb_orbits; i++) {
2498 R[i] = Orbit_reps[i];
2499 L[i] = Orbit_lengths[i];
2505 Orbit_reps_allocated = an;
2507 Orbit_reps[nb_orbits] = pt;
2508 Orbit_lengths[nb_orbits] = Orbit_len;
2512 cout <<
"strong_generators::orbits_light degree = "
2513 << A_given->
degree <<
" we found " << nb_orbits
2514 <<
" orbits" << endl;
2515 cout << i <<
" : " << Nb_per_generator[i] << endl;
2516 for (i = 0; i < nb_gens; i++) {
2517 cout << i <<
" : " << Nb_per_generator[i] << endl;
2523 cout <<
"strong_generators::orbits_light computing the arrays "
2524 "Pts_per_generator" << endl;
2526 for (i = 0; i < nb_gens; i++) {
2530 v =
NEW_int(Nb_per_generator[i]);
2532 for (pt = 0; pt < A_given->
degree; pt++) {
2533 if (Generator_idx[pt] == i) {
2538 if (j != Nb_per_generator[i]) {
2539 cout <<
"strong_generators::orbits_light j != Nb_per_generator[i]" << endl;
2542 Pts_per_generator[i] = v;
2552 cout <<
"strong_generators::orbits_light degree = "
2553 << A_given->
degree <<
" we found "
2554 << nb_orbits <<
" orbits" << endl;
2560 ofstream &fp,
int verbose_level)
2562 int f_v = (verbose_level >= 1);
2566 cout <<
"strong_generators::write_to_file_binary" << endl;
2570 cout <<
"strong_generators::write_to_file_binary "
2571 "!A->f_has_base" << endl;
2575 cout <<
"strong_generators::write_to_file_binary "
2576 "A->base_len=" <<
A->
base_len() << endl;
2581 fp.write((
char *) &bl,
sizeof(
int));
2584 cout <<
"strong_generators::write_to_file_binary tl == NULL" << endl;
2589 cout <<
"strong_generators::write_to_file_binary "
2590 "before writing tl[" << i <<
"]" << endl;
2592 fp.write((
char *) &
tl[i],
sizeof(
int));
2595 cout <<
"strong_generators::write_to_file_binary "
2596 "before gens->write_to_file_binary" << endl;
2600 cout <<
"strong_generators::write_to_file_binary "
2601 "after gens->write_to_file_binary" << endl;
2604 cout <<
"strong_generators::write_to_file_binary done" << endl;
2611 int f_v = (verbose_level >= 1);
2615 cout <<
"strong_generators::read_from_file_binary" << endl;
2619 cout <<
"strong_generators::read_from_file_binary "
2620 "action A=" <<
A->
label << endl;
2622 fp.read((
char *) &l,
sizeof(
int));
2624 cout <<
"strong_generators::read_from_file_binary "
2625 "l != A->base_len()" << endl;
2626 cout <<
"l=" << l << endl;
2627 cout <<
"A->base_len()=" <<
A->
base_len() << endl;
2631 cout <<
"strong_generators::read_from_file_binary "
2632 "A->base_len()=" <<
A->
base_len() << endl;
2636 fp.read((
char *) &
tl[i],
sizeof(
int));
2641 cout <<
"strong_generators::read_from_file_binary "
2642 "before gens->read_from_file_binary" << endl;
2646 cout <<
"strong_generators::read_from_file_binary done" << endl;
2652 int f_v = (verbose_level >= 1);
2656 cout <<
"strong_generators::write_file" << endl;
2659 ofstream fp(fname, ios::binary);
2664 cout <<
"Written file " << fname <<
" of size "
2668 cout <<
"strong_generators::write_file done" << endl;
2673 std::string &fname,
int verbose_level)
2675 int f_v = (verbose_level >= 1);
2679 cout <<
"strong_generators::read_file reading "
2680 "file " << fname <<
" of size "
2684 cout <<
"strong_generators::read_file "
2685 "file " << fname <<
" does not exist" << endl;
2689 cout <<
"strong_generators::read_file reading file " << fname << endl;
2693 ifstream fp(fname, ios::binary);
2698 cout <<
"strong_generators::read_file "
2699 "Read file " << fname <<
" of size "
2703 cout <<
"strong_generators::read_file done" << endl;
2709void strong_generators::generators_for_shallow_schreier_tree(
2710 char *label, vector_ge *chosen_gens,
int verbose_level)
2712 int f_v = (verbose_level >= 1);
2721 go = group_order_as_int();
2724 cout <<
"strong_generators::generators_for_shallow_"
2725 "schreier_tree group of order " << go << endl;
2726 cout <<
"log_go = " << log_go << endl;
2730 cout <<
"strong_generators::generators_for_shallow_"
2731 "schreier_tree created sims" << endl;
2733 AR = new_action_by_right_multiplication(S,
2734 TRUE , verbose_level - 2);
2736 cout <<
"strong_generators::generators_for_shallow_"
2737 "schreier_tree created action by right "
2738 "multiplication" << endl;
2741 chosen_gens->init(
A);
2742 chosen_gens->allocate(
gens->
len);
2743 for (i = 0; i <
gens->
len; i++) {
2753 Sch->initialize_tables();
2754 Sch->init_generators(*chosen_gens);
2756 cout <<
"strong_generators::generators_for_shallow_"
2757 "schreier_tree before computing all orbits" << endl;
2759 Sch->compute_all_point_orbits(verbose_level - 2);
2761 cout <<
"strong_generators::generators_for_shallow_"
2762 "schreier_tree after computing all orbits" << endl;
2764 if (Sch->nb_orbits > 1) {
2765 cout <<
"strong_generators::generators_for_shallow_"
2766 "schreier_tree Sch->nb_orbits > 1" << endl;
2772 int f_circletext =
TRUE;
2775 sprintf(label1,
"%s_%d", label, cnt);
2776 Sch->draw_tree(label1, 0 ,
2777 xmax, ymax, f_circletext, rad,
2787 Depth =
NEW_int(Sch->A->degree);
2788 for (i = 0; i < Sch->A->degree; i++) {
2789 Depth[i] = Sch->depth_in_tree(i);
2793 Cl.init(Depth, Sch->A->degree,
FALSE, 0);
2795 cout <<
"distribution of depth in tree is: ";
2801 cout <<
"average = " << avg << endl;
2802 cout <<
"log_go = " << log_go << endl;
2807 cout <<
"strong_generators::generators_for_shallow_"
2808 "schreier_tree average < log_go, we are done" << endl;
2815 cout <<
"average as int = " << avgi << endl;
2818 for (i = 0; i < Cl.nb_types; i++) {
2819 f = Cl.type_first[i];
2821 if (Cl.data_sorted[f] == avgi) {
2825 if (i == Cl.nb_types) {
2826 cout <<
"strong_generators::generators_for_shallow_"
2827 "schreier_tree cannot find element of depth "
2831 idx = Cl.sorting_perm_inv[f];
2833 cout <<
"strong_generators::generators_for_shallow_"
2834 "schreier_tree idx = " << idx << endl;
2836 Sch->coset_rep(idx);
2837 chosen_gens->append(Sch->cosetrep);
2847 cout <<
"strong_generators::generators_for_shallow_"
2848 "schreier_tree done" << endl;
2854 char *&ascii_coding,
int verbose_level)
2856 int f_v = (verbose_level >= 1);
2862 cout <<
"strong_generators::compute_ascii_coding" << endl;
2877 for (i = 0; i <
gens->
len; i++) {
2884 if (p - ascii_coding != sz) {
2885 cout <<
"strong_generators::compute_ascii_coding "
2886 "p - ascii_coding != sz" << endl;
2892 cout <<
"strong_generators::compute_ascii_coding "
2898 char *ascii_coding,
int verbose_level)
2900 int f_v = (verbose_level >= 1);
2901 int str_len, len, nbsg, i, j;
2908 cout <<
"strong_generators::decode_ascii_coding" << endl;
2918 str_len = strlen(ascii_coding);
2922 cout <<
"strong_generators::decode_ascii_coding "
2923 "len != A->base_len" << endl;
2924 cout <<
"len=" << len <<
" (from file)" << endl;
2925 cout <<
"A->base_len=" <<
A->
base_len() << endl;
2926 cout <<
"action A is " <<
A->
label << endl;
2938 if (base1[i] !=
A->
base_i(i)) {
2939 cout <<
"strong_generators::decode_ascii_coding "
2940 "base element " << i <<
" does not match "
2941 "current base" << endl;
2948 for (i = 0; i < nbsg; i++) {
2955 if (p - p0 != str_len) {
2956 cout <<
"strong_generators::decode_ascii_coding "
2957 "p - p0 != str_len" << endl;
2958 cout <<
"p - p0 = " << p - p0 << endl;
2959 cout <<
"str_len = " << str_len << endl;
2963 cout <<
"strong_generators::decode_ascii_coding done" << endl;
2970 int f_v = (verbose_level >= 1);
2975 cout <<
"strong_generators::export_permutation_group_to_magma" << endl;
2980 fp <<
"G := sub< Sym(" << A2->
degree <<
") |" << endl;
2981 for (i = 0; i <
gens->
len; i++) {
2988 if (i < gens->len - 1) {
2996 cout <<
"Written file " << fname <<
" of size "
3001 cout <<
"strong_generators::export_permutation_group_to_magma done" << endl;
3008 int f_v = (verbose_level >= 1);
3013 cout <<
"strong_generators::export_permutation_group_to_GAP" << endl;
3018 fp <<
"G := Group([" << endl;
3019 for (i = 0; i <
gens->
len; i++) {
3026 if (i < gens->len - 1) {
3030 fp <<
"]);" << endl;
3034 cout <<
"Written file " << fname <<
" of size "
3039 cout <<
"strong_generators::export_permutation_group_to_GAP done" << endl;
3051 int f_v = (verbose_level >= 1);
3056 cout <<
"strong_generators::compute_and_print_orbits_on_a_given_set" << endl;
3059 A_given, Sch, set, len, verbose_level - 2);
3061 cout <<
"orbits on the set: " << endl;
3064 for (j = 0; j < Sch->
orbit_len[i]; j++) {
3065 a = Sch->
orbit[f + j];
3068 if (i < Sch->nb_orbits - 1) {
3073 cout <<
"partition: " << len <<
" = ";
3077 if (i < Sch->nb_orbits - 1) {
3082 cout <<
"representatives for each of the "
3083 << Sch->
nb_orbits <<
" orbits:" << endl;
3087 a = Sch->
orbit[f + 0];
3088 cout << setw(5) << a <<
" : " << setw(5) << l <<
" : ";
3099 int f_v = (verbose_level >= 1);
3104 cout <<
"strong_generators::compute_and_print_orbits" << endl;
3108 cout <<
"orbits on the set: " << endl;
3113 cout <<
"too long to list ";
3116 for (j = 0; j < Sch->
orbit_len[i]; j++) {
3117 a = Sch->
orbit[f + j];
3121 if (i < Sch->nb_orbits - 1) {
3126 cout <<
"partition: " << A_given->
degree <<
" = ";
3130 if (i < Sch->nb_orbits - 1) {
3135 cout <<
"representatives for each of the "
3136 << Sch->
nb_orbits <<
" orbits:" << endl;
3140 a = Sch->
orbit[f + 0];
3141 cout << setw(5) << a <<
" : " << setw(5) << l <<
" : ";
3151 const char *fname =
"orbits.csv";
3153 cout <<
"writing orbits to file " << fname << endl;
3154 S->save_csv(fname, 1 );
3164 int f_v = (verbose_level >= 1);
3168 cout <<
"strong_generators::test_if_normalizing" << endl;
3170 for (i = 0; i <
gens->
len; i++) {
3172 cout <<
"strong_generators::test_if_normalizing "
3173 "testing generator " << i <<
" / "
3178 cout <<
"strong_generators::test_if_normalizing "
3179 "generator " << i <<
" / " <<
gens->
len
3180 <<
" does not normalize the given group" << endl;
3186 cout <<
"strong_generators::test_if_normalizing done, "
3187 "the given generators normalize the given group" << endl;
3194 actions::action *A_given,
long int *set,
int set_sz,
int verbose_level)
3196 int f_v = (verbose_level >= 1);
3200 cout <<
"strong_generators::test_if_set_is_invariant_under_given_action" << endl;
3202 for (i = 0; i <
gens->
len; i++) {
3206 cout <<
"strong_generators::test_if_set_is_invariant_under_given_action "
3207 "the generator does not fix the set" << endl;
3212 cout <<
"strong_generators::test_if_set_is_invariant_under_given_action done" << endl;
3217 int pt,
int verbose_level)
3219 int f_v = (verbose_level >= 1);
3222 cout <<
"strong_generators::point_stabilizer" << endl;
3231 cout <<
"computing orbit of point " << pt <<
":" << endl;
3236 cout <<
"orbit of point " << pt <<
" has length "
3240 Stab, 0 , verbose_level);
3243 cout <<
"stabilizer of point " << pt <<
" has order "
3249 cout <<
"generators for the stabilizer "
3250 "have been computed" << endl;
3254 cout <<
"strong_generators::point_stabilizer done" << endl;
3264 int f_v = (verbose_level >= 1);
3267 cout <<
"strong_generators::find_cyclic_subgroup_with_exactly_n_fixpoints" << endl;
3276 cout <<
"finding element with n fixpoints, where n = " << nb_fixpoints <<
":" << endl;
3284 Elt, nb_fixpoints, A_given, verbose_level);
3288 cout <<
"strong_generators::find_cyclic_subgroup_with_exactly_n_fixpoints "
3289 "before init_single_with_target_go" << endl;
3290 cout <<
"Elt=" << endl;
3295 cout <<
"strong_generators::find_cyclic_subgroup_with_exactly_n_fixpoints "
3296 "after init_single_with_target_go" << endl;
3300 cout <<
"strong_generators::find_cyclic_subgroup_with_exactly_n_fixpoints done" << endl;
3310 int pt_A,
int pt_B,
int *Elt,
int verbose_level)
3312 int f_v = (verbose_level >= 1);
3315 cout <<
"strong_generators::make_element_which_moves_a_point_from_A_to_B" << endl;
3327 cout <<
"strong_generators::make_element_which_moves_"
3328 "a_point_from_A_to_B the two points are not "
3329 "in the same orbit" << endl;
3337 cout <<
"strong_generators::make_element_which_moves_a_point_from_A_to_B "
3338 "the image of A is not B" << endl;
3344 cout <<
"strong_generators::make_element_which_moves_a_point_from_A_to_B done" << endl;
3349 std::string &label_txt,
3354 int f_v = (verbose_level >= 1);
3359 cout <<
"strong_generators::export_group_to_magma_and_copy_to_latex" << endl;
3361 string export_fname;
3363 export_fname.assign(label_txt);
3364 export_fname.append(
"_group.magma");
3367 export_fname, A2, verbose_level - 2);
3369 cout <<
"written file " << export_fname <<
" of size "
3373 ost <<
"\\subsection*{Magma Export}" << endl;
3374 ost <<
"To export the group to Magma, "
3375 "use the following file\\\\" << endl;
3376 ost <<
"\\begin{verbatim}" << endl;
3379 ifstream fp1(export_fname);
3389 fp1.getline(line, 100000,
'\n');
3390 ost << line << endl;
3394 ost <<
"\\end{verbatim}" << endl;
3397 cout <<
"strong_generators::export_group_to_magma_and_copy_to_latex done" << endl;
3402 std::string &label_txt,
3407 int f_v = (verbose_level >= 1);
3412 cout <<
"strong_generators::export_group_to_GAP_and_copy_to_latex" << endl;
3414 string export_fname;
3416 export_fname.assign(label_txt);
3417 export_fname.append(
"_group.gap");
3420 export_fname, A2, verbose_level - 2);
3422 cout <<
"written file " << export_fname <<
" of size "
3426 ost <<
"\\subsection*{GAP Export}" << endl;
3427 ost <<
"To export the group to GAP, "
3428 "use the following file\\\\" << endl;
3429 ost <<
"\\begin{verbatim}" << endl;
3432 ifstream fp1(export_fname);
3442 fp1.getline(line, 100000,
'\n');
3443 ost << line << endl;
3447 ost <<
"\\end{verbatim}" << endl;
3450 cout <<
"strong_generators::export_group_to_GAP_and_copy_to_latex done" << endl;
3455 std::string &label_txt,
3460 int f_v = (verbose_level >= 1);
3464 cout <<
"strong_generators::export_group_and_copy_to_latex" << endl;
3469 cout <<
"strong_generators::export_group_and_copy_to_latex done" << endl;
3480 int f_v = (verbose_level >= 1);
3484 cout <<
"strong_generators::report_fixed_objects_in_P3" << endl;
3487 ost <<
"\\begin{enumerate}[(1)]" << endl;
3488 for (i = 0; i <
gens->
len; i++) {
3490 ost <<
"\\item" << endl;
3496 ost <<
"\\end{enumerate}" << endl;
3498 cout <<
"strong_generators::report_fixed_objects_in_P3" << endl;
3504 int f_v = (verbose_level >= 1);
3507 cout <<
"strong_generators::reverse_isomorphism_exterior_square" << endl;
3511 cout <<
"strong_generators::reverse_isomorphism_exterior_square "
3512 "before gens->reverse_isomorphism_exterior_square" << endl;
3518 cout <<
"strong_generators::reverse_isomorphism_exterior_square "
3519 "after gens->reverse_isomorphism_exterior_square" << endl;
3523 cout <<
"strong_generators::reverse_isomorphism_exterior_square" << endl;
3529 int f_v = (verbose_level >= 1);
3532 cout <<
"strong_generators::get_gens_data" << endl;
3538 for (i = 0; i <
gens->
len; i++) {
3542 cout <<
"strong_generators::get_gens_data done" << endl;
3548 int f_v = (verbose_level >= 1);
3551 cout <<
"strong_generators::get_gens_data_as_string_with_quotes" << endl;
3562 cout <<
"strong_generators::get_gens_data_as_string_with_quotes done" << endl;
3568 std::string &fname, std::string &label, std::string &label_tex,
3571 int f_v = (verbose_level >= 1);
3578 cout <<
"strong_generators::export_to_orbiter_as_bsgs" << endl;
3583 cout <<
"strong_generators::export_to_orbiter_as_bsgs go = " << go << endl;
3584 cout <<
"strong_generators::export_to_orbiter_as_bsgs number of generators = " <<
gens->
len << endl;
3585 cout <<
"strong_generators::export_to_orbiter_as_bsgs degree = " << A2->
degree << endl;
3590 string fname_generators;
3592 fname_generators.assign(label);
3593 fname_generators.append(
"_gens.csv");
3597 for (i = 0; i <
gens->
len; i++) {
3598 fp <<
"GENERATOR_" << label <<
"_" << i <<
" = \\" << endl;
3600 for (j = 0; j < A2->
degree; j++) {
3602 cout <<
"strong_generators::export_to_orbiter_as_bsgs computing image of " << j <<
" under generator " << i << endl;
3606 if (j < A2->degree - 1) {
3618 for (i = 0; i <
gens->
len; i++) {
3619 for (j = 0; j < A2->
degree; j++) {
3621 Data[i * A2->
degree + j] = a;
3634 fp << label <<
":" << endl;
3635 fp <<
"\t$(ORBITER_PATH)orbiter.out -v 2 \\" << endl;
3636 fp <<
"\t\t-define gens -vector -file " << fname_generators <<
" -end \\" << endl;
3637 fp <<
"\t\t-define G -permutation_group \\" << endl;
3638 fp <<
"\t\t-bsgs " << label <<
" \"" << label_tex <<
"\" "
3639 << A2->
degree <<
" " << go <<
" ";
3645 fp <<
" gens -end \\" << endl;
3647 for (i = 0; i <
gens->
len; i++) {
3648 fp <<
"\t\t\t" <<
"$(GENERATOR_" << label <<
"_" << i <<
") \\" << endl;
3650 fp <<
"\t\t-end" << endl;
3662 cout <<
"Written file " << fname <<
" of size "
3666 cout <<
"strong_generators::export_to_orbiter_as_bsgs" << endl;
compact storage of 0/1-data as bitvectors
void m_i(long int i, int a)
void allocate(long int length)
void create_string_with_quotes(std::string &str, int *v, int len)
a collection of functions related to sorted vectors
int int_vec_search(int *v, int len, int a, int &idx)
a statistical analysis of data consisting of single integers
void init(int *data, int data_length, int f_second, int verbose_level)
void print_file_tex_we_are_in_math_mode(std::ostream &ost, int f_backwards)
void print_matrix_latex(std::ostream &ost, int *A, int m, int n)
void isomorphism_to_special_orthogonal(int *A4, int *A6, int verbose_level)
projective space PG(n,q) of dimension n over Fq
a collection of functions related to file io
void lint_matrix_write_csv(std::string &fname, long int *M, int m, int n)
long int file_size(std::string &fname)
data_structures::int_vec * Int_vec
interface to system functions
void decode_uchar(char *&p, uchar &a)
void code_int4(char *&p, int_4 i)
int_4 decode_int4(char *&p)
void code_uchar(char *&p, uchar a)
domain to compute with objects of type longinteger
void multiply_up(longinteger_object &a, int *x, int len, int verbose_level)
void mult_integer_in_place(longinteger_object &a, int b)
a class to represent arbitrary precision integers
void create_from_base_10_string(const char *str, int verbose_level)
a permutation group in a fixed action.
void print_for_make_element(std::ostream &ost, void *elt)
void element_print_latex(void *elt, std::ostream &ost)
void element_print_as_permutation_with_offset(void *elt, std::ostream &ost, int offset, int f_do_it_anyway_even_for_big_degree, int f_print_cycles_of_length_one, int verbose_level)
void element_conjugate_babv(int *Elt_A, int *Elt_B, int *Elt_C, int verbose_level)
void element_conjugate_bvab(int *Elt_A, int *Elt_B, int *Elt_C, int verbose_level)
void element_unpack(void *elt, void *Elt, int verbose_level)
void element_print_quick(void *elt, std::ostream &ost)
void element_print(void *elt, std::ostream &ost)
int coded_elt_size_in_char
void element_pack(void *Elt, void *elt, int verbose_level)
void element_retrieve(int hdl, void *elt, 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 element_print_for_make_element(void *elt, std::ostream &ost)
symmetry_group_type type_G
int count_fixed_points(void *elt, int verbose_level)
void print_bare_base(std::ofstream &ost)
int matrix_group_dimension()
field_theory::finite_field * matrix_group_finite_field()
int element_order_and_cycle_type(void *elt, int *cycle_type)
void make_element(int *Elt, int *data, int verbose_level)
int test_if_set_stabilizes(int *Elt, int size, long int *set, int verbose_level)
void print_for_make_element_no_commas(std::ostream &ost, void *elt)
void element_move(void *a, void *b, int verbose_level)
void print_point(int a, std::ostream &ost)
void report_fixed_objects_in_P3(std::ostream &ost, geometry::projective_space *P3, int *Elt, int verbose_level)
int element_signum_of_permutation(void *elt)
groups::matrix_group * get_matrix_group()
void element_print_latex_with_print_point_function(void *elt, std::ostream &ost, void(*point_label)(std::stringstream &sstr, long int pt, void *data), void *point_label_data)
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_from_generators_with_target_group_order_lint(data_structures_groups::vector_ge *gens, long int target_go, int verbose_level)
void element_print_as_permutation(void *elt, std::ostream &ost)
void element_transpose(void *a, void *at, int verbose_level)
int element_order(void *elt)
long int element_image_of(long int a, void *elt, int verbose_level)
a container data structure for groups
void init(actions::action *A, int verbose_level)
void init_ascii_coding_to_sims(const char *ascii_coding, int verbose_level)
to hold a vector of group elements
void extract_subset_of_elements_by_rank_text_vector(const char *rank_vector_text, groups::sims *S, int verbose_level)
void init_conjugate_svas_of(vector_ge *v, int *Elt, int verbose_level)
void extract_subset_of_elements_by_rank(int *rank_vector, int len, groups::sims *S, int verbose_level)
void init_conjugate_sasv_of(vector_ge *v, int *Elt, int verbose_level)
void allocate(int length, int verbose_level)
void reverse_isomorphism_exterior_square(int verbose_level)
void write_to_file_binary(std::ofstream &fp, 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 init_from_permutation_representation(actions::action *A, groups::sims *S, int *data, int nb_elements, int verbose_level)
void read_from_file_binary(std::ifstream &fp, int verbose_level)
void print_quick(std::ostream &ost)
a matrix group over a finite field in projective, vector space or affine action
field_theory::finite_field * GFq
Schreier trees for orbits of groups on points.
void compute_all_point_orbits(int verbose_level)
void orbits_as_set_of_sets(data_structures::set_of_sets *&S, int verbose_level)
void compute_all_orbits_on_invariant_subset_lint(int len, long int *subset, int verbose_level)
void transporter_from_orbit_rep_to_point(int pt, int &orbit_idx, int *Elt, int verbose_level)
void init_generators(data_structures_groups::vector_ge &generators, int verbose_level)
void transporter_from_point_to_orbit_rep(int pt, int &orbit_idx, int *Elt, int verbose_level)
void compute_point_orbit(int pt, int verbose_level)
void point_stabilizer(actions::action *default_action, ring_theory::longinteger_object &go, groups::sims *&Stab, int orbit_no, int verbose_level)
void init(actions::action *A, int verbose_level)
a permutation group represented via a stabilizer chain
void compute_all_powers(int elt_idx, int n, int *power_elt, int verbose_level)
void transitive_extension_using_coset_representatives_extract_generators(int *coset_reps, int nb_cosets, data_structures_groups::vector_ge &SG, int *tl, int verbose_level)
void extract_strong_generators_in_order(data_structures_groups::vector_ge &SG, int *tl, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
int is_normalizing(int *Elt, int verbose_level)
void create_group_table(int *&Table, long int &n, int verbose_level)
void transitive_extension_using_generators(int *Elt_gens, int nb_gens, int subgroup_index, data_structures_groups::vector_ge &SG, int *tl, int verbose_level)
void element_unrank_lint(long int rk, int *Elt, int verbose_level)
long int element_rank_lint(int *Elt)
int find_element_with_exactly_n_fixpoints_in_given_action(int *Elt, int nb_fixpoints, actions::action *A_given, int verbose_level)
a strong generating set for a permutation group with respect to a fixed action
void init_copy(strong_generators *S, int verbose_level)
void compute_and_print_orbits_on_a_given_set(actions::action *A_given, long int *set, int len, int verbose_level)
void print_generators_even_odd()
void print_generators_gap(std::ostream &ost)
void compute_schreier_with_given_action_on_a_given_set(actions::action *A_given, schreier *&Sch, long int *set, int len, int verbose_level)
void orbits_on_points_with_given_action(actions::action *A_given, int &nb_orbits, int *&orbit_reps, int verbose_level)
void create_group_table(int *&Table, long int &go, 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 init(actions::action *A)
void init_by_hdl_and_with_tl(actions::action *A, std::vector< int > &gen_handle, std::vector< int > &tl, int verbose_level)
void orbits_on_points(int &nb_orbits, int *&orbit_reps, int verbose_level)
void export_group_and_copy_to_latex(std::string &label_txt, std::ostream &ost, actions::action *A2, int verbose_level)
void get_gens_data(int *&data, int &sz, int verbose_level)
void test_if_set_is_invariant_under_given_action(actions::action *A_given, long int *set, int set_sz, int verbose_level)
void print_generators_as_permutations_tex(std::ostream &ost, actions::action *A2)
void print_generators_MAGMA(actions::action *A, std::ostream &ost)
void print_elements_with_special_orthogonal_action_ost(std::ostream &ost)
strong_generators * point_stabilizer(int pt, int verbose_level)
void add_single_generator(int *Elt, int group_index, int verbose_level)
void init_single_with_target_go(actions::action *A, int *Elt, int target_go, int verbose_level)
void print_elements_ost(std::ostream &ost)
void print_group_order(std::ostream &ost)
void print_generators_in_source_code()
void init_point_stabilizer_of_arbitrary_point_through_schreier(schreier *Sch, int pt, int &orbit_idx, ring_theory::longinteger_object &full_group_order, int verbose_level)
strong_generators * create_copy()
void print_elements_latex_ost_with_print_point_function(actions::action *A, std::ostream &ost, void(*point_label)(std::stringstream &sstr, long int pt, void *data), void *point_label_data)
void export_group_to_magma_and_copy_to_latex(std::string &label_txt, std::ostream &ost, actions::action *A2, int verbose_level)
sims * create_sims(int verbose_level)
void init_point_stabilizer_orbit_rep_schreier(schreier *Sch, int orbit_idx, ring_theory::longinteger_object &full_group_order, int verbose_level)
void init_from_permutation_representation(actions::action *A, sims *parent_group_S, int *data, int nb_elements, long int group_order, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void init_by_hdl(actions::action *A, int *gen_hdl, int nb_gen, int verbose_level)
schreier * orbit_of_one_point_schreier(actions::action *A_given, int pt, int verbose_level)
void print_elements_with_given_action(std::ostream &ost, actions::action *A2)
void decode_ascii_coding(char *ascii_coding, int verbose_level)
void init_from_ascii_coding(actions::action *A, char *ascii_coding, int verbose_level)
void report_fixed_objects_in_P3(std::ostream &ost, geometry::projective_space *P3, int verbose_level)
void print_generators_tex()
void switch_to_subgroup(const char *rank_vector_text, const char *subgroup_order_text, sims *S, int *&subgroup_gens_idx, int &nb_subgroup_gens, int verbose_level)
void print_generators_in_source_code_to_file(const char *fname)
void init_generators_for_the_conjugate_group_aGav(strong_generators *SG, int *Elt_a, int verbose_level)
void print_elements_latex_ost(std::ostream &ost)
void list_of_elements_of_subgroup(strong_generators *gens_subgroup, long int *&Subgroup_elements_by_index, long int &sz_subgroup, int verbose_level)
void print_generators_tex_with_print_point_function(actions::action *A, std::ostream &ost, void(*point_label)(std::stringstream &sstr, long int pt, void *data), void *point_label_data)
strong_generators * find_cyclic_subgroup_with_exactly_n_fixpoints(int nb_fixpoints, actions::action *A_given, int verbose_level)
long int group_order_as_lint()
void compute_and_print_orbits(actions::action *A_given, int verbose_level)
void print_generators(std::ostream &ost)
void swap_with(strong_generators *SG)
schreier * orbits_on_points_schreier(actions::action *A_given, int verbose_level)
void reverse_isomorphism_exterior_square(int verbose_level)
void canonical_image_GAP(std::string &input_set_text, std::ostream &ost)
void read_from_file_binary(actions::action *A, std::ifstream &fp, int verbose_level)
void compute_ascii_coding(char *&ascii_coding, int verbose_level)
void read_file(actions::action *A, std::string &fname, int verbose_level)
void init_from_data_with_target_go(actions::action *A, int *data_gens, int data_gens_size, int nb_gens, ring_theory::longinteger_object &target_go, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void export_magma(actions::action *A, std::ostream &ost, int verbose_level)
void write_to_file_binary(std::ofstream &fp, int verbose_level)
void export_permutation_group_to_GAP(std::string &fname, actions::action *A2, int verbose_level)
void print_generators_as_permutations()
void print_generators_compact(std::ostream &ost)
void print_with_given_action(std::ostream &ost, actions::action *A2)
void print_for_make_element(std::ostream &ost)
void print_generators_in_different_action_tex(std::ostream &ost, actions::action *A2)
void init_from_sims(groups::sims *S, int verbose_level)
void orbits_light(actions::action *A_given, int *&Orbit_reps, int *&Orbit_lengths, int &nb_orbits, int **&Pts_per_generator, int *&Nb_per_generator, int verbose_level)
void init_generators_for_the_conjugate_group_avGa(strong_generators *SG, int *Elt_a, int verbose_level)
void export_to_orbiter_as_bsgs(actions::action *A2, std::string &fname, std::string &label, std::string &label_tex, int verbose_level)
void export_group_to_GAP_and_copy_to_latex(std::string &label_txt, std::ostream &ost, actions::action *A2, int verbose_level)
void add_generators(data_structures_groups::vector_ge *coset_reps, int group_index, int verbose_level)
void print_generators_for_make_element(std::ostream &ost)
void compute_schreier_with_given_action(actions::action *A_given, schreier *&Sch, int verbose_level)
void write_file(std::string &fname, int verbose_level)
void init_from_data_with_go(actions::action *A, std::string &generators_data, std::string &go_text, int verbose_level)
void init_subgroup(actions::action *A, int *subgroup_gens_idx, int nb_subgroup_gens, const char *subgroup_order_text, sims *S, int verbose_level)
void init_transposed_group(strong_generators *SG, int verbose_level)
void export_permutation_group_to_magma(std::string &fname, actions::action *A2, int verbose_level)
void print_generators_gap_in_different_action(std::ostream &ost, actions::action *A2)
void init_subgroup_by_generators(actions::action *A, int nb_subgroup_gens, int *subgroup_gens, std::string &subgroup_order_text, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
sims * create_sims_in_different_action(actions::action *A_given, int verbose_level)
void init_group_extension(strong_generators *subgroup, int *data, int index, int verbose_level)
void make_element_which_moves_a_point_from_A_to_B(actions::action *A_given, int pt_A, int pt_B, int *Elt, int verbose_level)
int test_if_normalizing(sims *S, int verbose_level)
void init_from_data_with_target_go_ascii(actions::action *A, int *data, int nb_elements, int elt_size, const char *ascii_target_go, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
data_structures_groups::vector_ge * gens
void get_gens_data_as_string_with_quotes(std::string &str, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
void print_generators_in_latex_individually(std::ostream &ost)
a subgroup of a group using a list of elements
#define Int_vec_scan(A, B, C)
#define Int_vec_zero(A, B)
#define Lint_vec_scan(A, B, C)
#define Int_vec_copy(A, B, C)
#define Int_vec_print(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects