19namespace layer3_group_actions {
28 int f_v = (verbose_level >= 1);
33 cout <<
"sims::random_element" << endl;
34 cout <<
"sims::random_element orbit_len=";
44 cout <<
"sims::random_element" << endl;
51 cout <<
"sims::random_element done" << endl;
56 int order,
int verbose_level)
58 int f_v = (verbose_level >=1);
59 int f_vv = (verbose_level >=2);
63 cout <<
"sims::random_element_of_order " << order << endl;
70 if ((o % order) == 0) {
75 cout <<
"sims::random_element_of_order " << o
76 <<
" found with " << cnt <<
" trials" << endl;
83 cout <<
"sims::random_element_of_order we will raise to the "
84 << n <<
"-th power" << endl;
94 int *orders,
int nb,
int verbose_level)
97 int f_v = (verbose_level >=1);
100 cout <<
"sims::random_elements_of_order" << endl;
103 elts->
init(
A, verbose_level - 2);
104 elts->
allocate(nb, verbose_level - 2);
105 for (i = 0; i < nb; i++) {
107 orders[i], verbose_level);
110 cout <<
"sims::random_elements_of_order done" << endl;
116 int *tl,
int verbose_level)
124 int f_tolerant,
int verbose_level)
126 int f_v = (verbose_level >= 1);
127 int f_vv = (verbose_level >= 2);
135 cout <<
"sims::transitive_extension_tolerant "
136 "computing transitive extension" << endl;
137 cout <<
"f_tolerant=" << f_tolerant << endl;
140 ol.
create(orbit_len, __FILE__, __LINE__);
143 cout <<
"sims::transitive_extension_tolerant "
144 "group order " << go <<
", orbit length "
145 << orbit_len <<
", current group order " << ego << endl;
158 cout <<
"sims::transitive_extension_tolerant fatal: "
159 "group order overshoots target" << endl;
160 cout <<
"current group order = " << cur_ego << endl;
161 cout <<
"target group order = " << ego << endl;
163 cout <<
"we are tolerant, so we return FALSE" << endl;
166 cout <<
"we are not tolerant, so we exit" << endl;
183 cout <<
"sims::transitive_extension_tolerant "
184 "choosing random coset " << j <<
", random element ";
198 cout <<
"sims::transitive_extension_tolerant "
199 "found an extension of order " << cur_ego
202 <<
" strong generators" << endl;
204 cout <<
"remaining factor: " << rgo
205 <<
" remainder " << rem << endl;
211 cout <<
"sims::transitive_extension_tolerant "
212 "extracting strong generators" << endl;
219 int *coset_reps,
int nb_cosets,
224 int f_v = (verbose_level >= 1);
227 cout <<
"sims::transitive_extension_using_coset_"
228 "representatives_extract_generators" << endl;
231 coset_reps, nb_cosets,
235 cout <<
"sims::transitive_extension_using_coset_"
236 "representatives_extract_generators done" << endl;
242 int *coset_reps,
int nb_cosets,
245 int f_v = (verbose_level >= 1);
246 int f_vv = (verbose_level >= 2);
252 orbit_len = nb_cosets;
254 cout <<
"sims::transitive_extension_using_coset_"
255 "representatives computing transitive extension" << endl;
258 ol.
create(orbit_len, __FILE__, __LINE__);
261 cout <<
"sims::transitive_extension_using_coset_"
262 "representatives group order " << go
263 <<
", orbit length " << orbit_len
264 <<
", current group order " << ego << endl;
277 cout <<
"sims::transitive_extension_using_coset_"
278 "representatives fatal: group order "
279 "overshoots target" << endl;
280 cout <<
"current group order = " << cur_ego << endl;
281 cout <<
"target group order = " << ego << endl;
282 cout <<
"we are not tolerant, so we exit" << endl;
299 cout <<
"sims::transitive_extension_using_coset_"
300 "representatives choosing random coset "
301 << j <<
", random element ";
316 cout <<
"sims::transitive_extension_using_coset_"
317 "representatives found an extension of order "
318 << cur_ego <<
" of " << ego
319 <<
" with " <<
gens.
len <<
" strong generators" << endl;
321 cout <<
"remaining factor: " << rgo
322 <<
" remainder " << rem << endl;
328 cout <<
"sims::transitive_extension_using_coset_"
329 "representatives done" << endl;
334 int *Elt_gens,
int nb_gens,
int subgroup_index,
339 int f_v = (verbose_level >= 1);
340 int f_vv = (verbose_level >= 2);
347 cout <<
"sims::transitive_extension_using_generators "
348 "computing transitive extension" << endl;
351 ol.
create(subgroup_index, __FILE__, __LINE__);
354 cout <<
"sims::transitive_extension_using_generators "
355 "group order " << go <<
", subgroup_index "
356 << subgroup_index <<
", current group order " << ego << endl;
369 cout <<
"sims::transitive_extension_using_generators "
370 "fatal: group order overshoots target" << endl;
371 cout <<
"current group order = " << cur_ego << endl;
372 cout <<
"target group order = " << ego << endl;
373 cout <<
"we are not tolerant, so we exit" << endl;
384 cout <<
"sims::transitive_extension_using_generators "
385 "choosing random coset " << j <<
", random element ";
399 cout <<
"sims::transitive_extension_using_generators "
400 "found an extension of order " << cur_ego
402 <<
" with " <<
gens.
len <<
" strong generators" << endl;
404 cout <<
"remaining factor: " << rgo
405 <<
" remainder " << rem << endl;
411 cout <<
"sims::transitive_extension_using_generators "
412 "extracting strong generators" << endl;
420 sims &S,
int pt,
int verbose_level)
428 int orbit_len, r, cnt = 0, image;
432 int f_v = (verbose_level >= 1);
433 int f_vv = (verbose_level >= 2);
434 int f_vvv = (verbose_level >= 3);
437 cout <<
"sims::point_stabilizer_stabchain_with_action "
438 "computing stabilizer of point "
439 << pt <<
" in action " << A2->
label
440 <<
" verbose_level=" << verbose_level << endl;
441 cout <<
"internal action: " <<
A->
label << endl;
442 cout <<
"verbose_level=" << verbose_level << endl;
448 cout <<
"sims::point_stabilizer_stabchain_with_action group order = " << go << endl;
451 O.
init(A2, verbose_level - 2);
454 cout <<
"sims::point_stabilizer_stabchain_with_action before O.init_generators" << endl;
458 cout <<
"sims::point_stabilizer_stabchain_with_action after O.init_generators" << endl;
461 if (f_vvv && A2->
degree < 150) {
465 for (j = 0; j < O.
gens.
len; j++) {
466 cout <<
"generator " << j <<
":" << endl;
475 cout <<
"sims::point_stabilizer_stabchain_with_action "
476 "computing point orbit" << endl;
480 cout <<
"sims::point_stabilizer_stabchain_with_action "
481 "computing point orbit done" << endl;
487 cout <<
"sims::point_stabilizer_stabchain_with_action "
488 "found orbit of length " << orbit_len << endl;
491 if (f_vvv && A2->
degree < 150) {
496 cout <<
"sims::point_stabilizer_stabchain_with_action "
497 "orbit_len does not divide group order" << endl;
501 cout <<
"sims::point_stabilizer_stabchain_with_action "
502 "group_order = " << go <<
" orbit_len = "
503 << orbit_len <<
" target stab_order = "
504 << stab_order << endl;
506 if (stab_order.
is_one()) {
508 cout <<
"sims::point_stabilizer_stabchain_with_action "
509 "stabilizer is trivial, finished" << endl;
511 S.
init(
A, verbose_level - 2);
531 cout <<
"sims::point_stabilizer_stabchain_with_action "
532 "before S.init" << endl;
534 S.
init(
A, verbose_level - 2);
536 cout <<
"sims::point_stabilizer_stabchain_with_action "
537 "before S.init_generators" << endl;
541 cout <<
"sims::point_stabilizer_stabchain_with_action "
542 "after S.init_generators" << endl;
546 cout <<
"sims::point_stabilizer_stabchain_with_action "
547 "generators:" << endl;
553 cout <<
"sims::point_stabilizer_stabchain_with_action "
554 "before the loop, stabilizer has order "
555 << cur_stab_order <<
" of " << stab_order << endl;
556 cout <<
"sims::point_stabilizer_stabchain_with_action "
557 "creating the stabilizer using random generators" << endl;
564 cout <<
"sims::point_stabilizer_stabchain_with_action "
565 "loop iteration " << cnt
566 <<
" cur_stab_order=" << cur_stab_order
567 <<
" stab_order=" << stab_order << endl;
570 if (cnt % 2 ||
nb_gen[0] == 0) {
572 cout <<
"sims::point_stabilizer_stabchain_with_action "
573 "creating random generator no " << cnt + 1
574 <<
" using the Schreier vector" << endl;
584 cout <<
"sims::point_stabilizer_stabchain_with_action "
585 "creating random generator no " << cnt + 1
586 <<
" using the Sims chain" << endl;
593 cout <<
"sims::point_stabilizer_stabchain_with_action "
594 "random generator no " << cnt << endl;
597 cout <<
"sims::point_stabilizer_stabchain_with_action "
598 "random generator no " << cnt
599 <<
" as permutation in natural action:" << endl;
602 cout <<
"sims::point_stabilizer_stabchain_with_action "
603 "random generator no " << cnt
604 <<
" as permutation in chosen action:" << endl;
611 cout <<
"sims::point_stabilizer_stabchain_with_action "
612 "image is not equal to pt" << endl;
613 cout <<
"pt=" << pt << endl;
614 cout <<
"image=" << image << endl;
626 cout <<
"sims::point_stabilizer_stabchain_with_action "
627 "random generator no " << cnt
628 <<
" before strip_and_add" << endl;
631 Elt1 , verbose_level - 3)) {
633 cout <<
"sims::point_stabilizer_stabchain_with_action "
634 "strip_and_add returns FALSE" << endl;
639 cout <<
"sims::point_stabilizer_stabchain_with_action "
640 "random generator no " << cnt
641 <<
" before strip_and_add" << endl;
646 cout <<
"sims::point_stabilizer_stabchain_with_action "
647 "group order " << go << endl;
648 cout <<
"orbit length " << orbit_len << endl;
649 cout <<
"current stab_order = " << cur_stab_order
650 <<
" / " << stab_order
652 <<
" strong generators" << endl;
659 cout <<
"sims::point_stabilizer_stabchain_with_action "
660 "compare yields " << cmp << endl;
663 cout <<
"sims::point_stabilizer_stabchain_with_action "
664 "overshooting the target group order" << endl;
665 cout <<
"current stab_order = " << cur_stab_order
666 <<
" / " << stab_order << endl;
671 cout <<
"sims::point_stabilizer_stabchain_with_action "
672 "remaining factor: " << rgo
673 <<
" remainder " << rem << endl;
677 cout <<
"sims::point_stabilizer_stabchain_with_action "
678 "group order " << go << endl;
679 cout <<
"orbit length " << orbit_len << endl;
680 cout <<
"current stab_order = " << cur_stab_order
681 <<
" / " << stab_order
683 <<
" strong generators" << endl;
685 cur_stab_order, rgo, rem, 0);
686 cout <<
"remaining factor: " << rgo
687 <<
" remainder " << rem << endl;
688 cout <<
"the current stabilizer is:" << endl;
690 cout <<
"sims::point_stabilizer_stabchain_with_action "
691 "computing stabilizer of point " << pt
692 <<
" in action " << A2->
label
693 <<
" verbose_level=" << verbose_level << endl;
694 cout <<
"internal action: " <<
A->
label << endl;
695 cout <<
"The orbit of point " << pt <<
" is:" << endl;
698 cout <<
"sims::point_stabilizer_stabchain_with_action "
699 "cur_stab_order > stab_order, error" << endl;
706 cout <<
"sims::point_stabilizer_stabchain_with_action "
707 "found a stabilizer of order " << cur_stab_order
708 <<
" of " << stab_order
710 <<
" strong generators" << endl;
715 int *tl,
int pt,
int verbose_level)
718 int f_v = (verbose_level >= 1);
722 cout <<
"sims::point_stabilizer" << endl;
725 S, pt, verbose_level);
729 cout <<
"sims::point_stabilizer done" << endl;
735 int *tl,
int pt,
int verbose_level)
739 int f_v = (verbose_level >= 1);
746 cout <<
"sims::point_stabilizer_with_action "
748 cout <<
"sims::point_stabilizer_with_action "
749 "action = " << A2->
label << endl;
750 cout <<
"sims::point_stabilizer_with_action "
751 "internal action = " <<
A->
label << endl;
754 cout <<
"sims::point_stabilizer_with_action "
755 "before point_stabilizer_stabchain_with_action" << endl;
759 cout <<
"sims::point_stabilizer_with_action "
760 "after point_stabilizer_stabchain_with_action" << endl;
763 cout <<
"sims::point_stabilizer_with_action "
764 "before extract_strong_generators_in_order" << endl;
768 cout <<
"sims::point_stabilizer_with_action done" << endl;
773 sims *old_G,
int *Elt,
774 int f_overshooting_OK,
778 int f_v = (verbose_level >= 1);
779 int f_vv = (verbose_level >= 4);
783 int *Elt1, *Elt2, *Elt3, *Elt4, *Elt5;
784 int cnt, drop_out_level, image, f_added, c;
787 cout <<
"sims::conjugate "
788 "f_overshooting_OK=" << f_overshooting_OK << endl;
791 cout <<
"action = " <<
A->
label << endl;
794 cout <<
"transporter = " << endl;
803 init(
A, verbose_level - 2);
812 cout <<
"sims::conjugate iteration " << cnt << endl;
815 cout <<
"sims::conjugate cnt > 1000, "
816 "something seems to be wrong" << endl;
819 if ((cnt % 2) == 0) {
821 cout <<
"sims::conjugate choosing random schreier generator" << endl;
826 cout <<
"sims::conjugate random element chosen:" << endl;
832 else if ((cnt % 2) == 1){
834 cout <<
"sims::conjugate choosing random element in the group "
835 "by which we extend" << endl;
839 cout <<
"sims::conjugate random element chosen, path = ";
848 A->
mult(Elt3, Elt2, Elt4);
850 cout <<
"sims::conjugate conjugated" << endl;
857 if (
strip(Elt4,
A->
Elt2, drop_out_level, image,
858 verbose_level - 3)) {
860 cout <<
"sims::conjugate element strips through, "
861 "residue = " << endl;
872 cout <<
"sims::conjugate element needs to be inserted at level = "
873 << drop_out_level <<
" with image "
885 if ((f_v && f_added) || f_vv) {
886 cout <<
"sims::conjugate current group order is " << go << endl;
895 cout <<
"sims::conjugate reached the full group after "
896 << cnt <<
" iterations" << endl;
902 cout <<
"sims::conjugate overshooting the expected "
903 "group after " << cnt <<
" iterations" << endl;
904 cout <<
"current group order is " << go
905 <<
" target_go=" << target_go << endl;
907 if (f_overshooting_OK) {
921 cout <<
"sims::conjugate done" << endl;
926 long int *set,
int size,
int verbose_level)
928 int f_v = (verbose_level >= 1);
929 int f_vv = (verbose_level >= 2);
931 long int goi, i, ret;
935 cout <<
"sims::test_if_in_set_stabilizer "
936 "action = " <<
A->
label << endl;
942 cout <<
"testing group of order " << goi << endl;
945 for (i = 0; i < goi; i++) {
946 a.
create(i, __FILE__, __LINE__);
949 size, set, verbose_level)) {
951 cout <<
"element " << i
952 <<
" strips through, residue = " << endl;
956 cout <<
"element " << i
957 <<
" does not stabilize the set" << endl;
970 int f_v = (verbose_level >= 1);
971 int f_vv = (verbose_level >= 2);
973 int goi, i, ret, drop_out_level, image;
977 cout <<
"sims::test_if_subgroup" << endl;
984 cout <<
"testing group of order " << goi << endl;
987 for (i = 0; i < goi; i++) {
988 a.
create(i, __FILE__, __LINE__);
990 if (
strip(Elt1, Elt2, drop_out_level, image,
991 verbose_level - 3)) {
992 a.
create(i, __FILE__, __LINE__);
996 cout <<
"element " << i
997 <<
" strips through, rank " << b << endl;
1001 cout <<
"element " << i <<
" is not contained" << endl;
1015 int *Elt,
int nb_fixpoints,
actions::action *A_given,
int verbose_level)
1017 int f_v = (verbose_level >= 1);
1019 long int i, order = 0;
1024 cout <<
"sims::find_element_with_exactly_n_fixpoints_in_given_action" << endl;
1029 for (i = 0; i < goi; i++) {
1032 if (cycle_type[0] == nb_fixpoints) {
1034 cout <<
"sims::find_element_with_exactly_n_fixpoints_in_given_action "
1035 "found an element of order " << order
1036 <<
" and with exactly " << nb_fixpoints <<
" fixpoints" << endl;
1037 cout <<
"Elt=" << endl;
1044 cout <<
"sims::find_element_with_exactly_n_fixpoints_in_given_action "
1045 "could not find a suitable element" << endl;
1050 cout <<
"sims::find_element_with_exactly_n_fixpoints_in_given_action done" << endl;
1056 int *&Table,
int &len,
int &sz,
int verbose_level)
1058 int f_v = (verbose_level >= 1);
1064 cout <<
"sims::table_of_group_elements_in_data_form" << endl;
1071 for (i = 0; i < len; i++) {
1077 cout <<
"sims::table_of_group_elements_in_data_form done" << endl;
1082 int *perm,
int verbose_level)
1084 int f_v = (verbose_level >= 1);
1095 for (i = 0; i < goi; i++) {
1097 A->
mult(Elt1, Elt, Elt2);
1102 cout <<
"sims::regular_representation of" << endl;
1105 cout <<
"is:" << endl;
1114 int *element_ranks,
int verbose_level)
1116 int f_v = (verbose_level >= 1);
1125 cout <<
"sims::element_ranks_subgroup subgroup of order "
1129 for (i = 0; i < goi; i++) {
1130 subgroup->element_unrank_lint(i, Elt1);
1132 element_ranks[i] = j;
1138 int *center_element_ranks,
int &nb_elements,
1141 int f_v = (verbose_level >= 1);
1144 long int goi, i, j, k, len;
1150 cout <<
"sims::center" << endl;
1155 for (i = 0; i < len; i++) {
1165 cout <<
"sims::center computing the center "
1166 "of a group of order " << goi << endl;
1168 for (i = 0; i < goi; i++) {
1170 for (j = 0; j < len; j++) {
1178 center_element_ranks[nb_elements++] = i;
1182 cout <<
"sims::center center is of order "
1183 << nb_elements <<
":" << endl;
1191 cout <<
"sims::center done" << endl;
1196 long int *all_cosets,
int verbose_level)
1198 int f_v = (verbose_level >= 1);
1200 long int goi, i, j, k, nb_cosets, cnt;
1212 cout <<
"sims::all_cosets" << endl;
1213 cout <<
"action " <<
A->
label << endl;
1214 cout <<
"subset of order " << size << endl;
1215 cout <<
"group of order " << goi << endl;
1217 nb_cosets = goi / size;
1218 if (size * nb_cosets != goi) {
1219 cout <<
"sims::all_cosets size * nb_cosets != goi" << endl;
1222 for (i = 0; i < goi; i++) {
1226 for (i = 0; i < goi; i++) {
1230 for (j = 0; j < size; j++) {
1232 A->
mult(Elt2, Elt1, Elt3);
1235 cout <<
"sims::all_cosets error: f_taken[k]" << endl;
1243 if (cnt != nb_cosets) {
1244 cout <<
"sims::all_cosets cnt != nb_cosets" << endl;
1248 cout <<
"sims::all_cosets finished" << endl;
1260 int ord_ab,
int &a,
int &b,
int &nb_trials,
1263 int f_v = (verbose_level >= 1);
1270 cout <<
"sims::find_standard_generators_int "
1272 <<
" ord_b=" << ord_b
1273 <<
" ord_ab=" << ord_ab << endl;
1280 nb_trials1, verbose_level - 1);
1281 nb_trials += nb_trials1;
1283 nb_trials1, verbose_level - 1);
1284 nb_trials += nb_trials1;
1287 A->
mult(Elt1, Elt2, Elt3);
1298 cout <<
"sims::find_standard_generators_int "
1299 "found a=" << a <<
" b=" << b
1300 <<
" nb_trials=" << nb_trials << endl;
1305 int &nb_trials,
int verbose_level)
1307 int f_v = (verbose_level >= 1);
1317 cout <<
"sims::find_element_of_given_order_int" << endl;
1318 cout <<
"action " <<
A->
label << endl;
1319 cout <<
"group of order " << goi << endl;
1320 cout <<
"looking for an element of order " << ord << endl;
1326 cout <<
"sims::find_element_of_given_order_int "
1327 "before random_element" << endl;
1331 cout <<
"sims::find_element_of_given_order_int :"
1332 "after random_element" << endl;
1336 cout <<
"sims::find_element_of_given_order_int "
1337 "random_element has order " << o << endl;
1341 cout <<
"sims::find_element_of_given_order_int "
1342 "the order is divisible by " << ord
1343 <<
" which is good" << endl;
1350 cout <<
"sims::find_element_of_given_order_int "
1351 "raising to the power " << d << endl;
1355 cout <<
"sims::find_element_of_given_order_int "
1356 "after raising to the power " << d << endl;
1364 int ord,
int &nb_trials,
int max_trials,
1367 int f_v = (verbose_level >= 1);
1368 int f_vv = (verbose_level >= 4);
1377 cout <<
"sims::find_element_of_given_order_int" << endl;
1378 cout <<
"action " <<
A->
label << endl;
1379 cout <<
"group of order " << goi << endl;
1380 cout <<
"looking for an element of order " << ord << endl;
1381 cout <<
"max_trials = " << max_trials << endl;
1385 while (nb_trials < max_trials) {
1388 cout <<
"sims::find_element_of_given_order_int "
1389 "before random_element" << endl;
1393 cout <<
"sims::find_element_of_given_order_int "
1394 "after random_element" << endl;
1398 cout <<
"sims::find_element_of_given_order_int "
1399 "random_element has order " << o << endl;
1403 cout <<
"sims::find_element_of_given_order_int "
1404 "the order is divisible by " << ord
1405 <<
" which is good" << endl;
1410 if (nb_trials == max_trials) {
1413 cout <<
"sims::find_element_of_given_order_int "
1414 "unsuccessful" << endl;
1420 cout <<
"sims::find_element_of_given_order_int "
1421 "raising to the power " << d << endl;
1425 cout <<
"sims::find_element_of_given_order_int "
1426 "after raising to the power " << d << endl;
1431 cout <<
"sims::find_element_of_given_order_int done" << endl;
1437 int *Elt,
int &e,
int &nb_trials,
1440 int f_v = (verbose_level >= 1);
1447 cout <<
"sims::find_element_of_prime_power_order" << endl;
1448 cout <<
"action " <<
A->
label << endl;
1449 cout <<
"group of order " << go << endl;
1450 cout <<
"prime " << p << endl;
1457 while (o % p == 0) {
1467 cout <<
"sims::find_element_of_prime_power_order done, "
1468 "e=" << e <<
" nb_trials=" << nb_trials << endl;
1473 int *word,
int *Elt,
int verbose_level)
1483 for (i = 0; i < word_len; i++) {
1486 A->
mult(Elt1, Elt, Elt2);
1496 int f_v = (verbose_level >= 1);
1500 int i, e, e1, c, nb_trials;
1503 cout <<
"sims::sylow_subgroup" << endl;
1510 cout <<
"sims::sylow_subgroup the group has order "
1515 cout <<
"sims::sylow_subgroup the prime "
1516 << p <<
" divides exactly " << e <<
" times" << endl;
1520 cout <<
"sims::sylow_subgroup trying to find a subgroup "
1521 "of order " << go_P << endl;
1524 P->
init(
A, verbose_level - 2);
1534 cout <<
"sims::sylow_subgroup "
1535 "overshooting the group order" << endl;
1542 for (i = 0; i < e1; i++) {
1549 cout <<
"sims::sylow_subgroup "
1550 "increased the order of the "
1551 "subgroup to " << go_P1 << endl;
1561 cout <<
"sims::sylow_subgroup found a " << p
1562 <<
"-Sylow subgroup of order " << go_P1 << endl;
1568 cout <<
"sims::sylow_subgroup done" << endl;
1574 int f_v = (verbose_level >= 1);
1581 int drop_out_level, image;
1584 cout <<
"sims::is_normalizing" << endl;
1591 for (i = 0; i <
nb_gen[0]; i++) {
1596 if (!
strip(Elt4, Elt3 , drop_out_level,
1599 cout <<
"sims::is_normalizing the element "
1600 "does not normalize generator "
1601 << i <<
" / " <<
nb_gen[0] << endl;
1608 cout <<
"sims::is_normalizing the element "
1609 "normalizes all " <<
nb_gen[0]
1610 <<
" generators" << endl;
1623 cout <<
"sims::is_normalizing done" << endl;
1630 int *&Adj,
long int &n,
int verbose_level)
1632 int f_v = (verbose_level >= 1);
1639 cout <<
"sims::create_Cayley_graph" << endl;
1644 cout <<
"sims::create_Cayley_graph "
1645 "Computing the adjacency matrix of a graph with "
1646 << n <<
" vertices" << endl;
1652 for (i = 0; i < n; i++) {
1655 for (h = 0; h <
gens->
len; h++) {
1658 cout <<
"i=" << i <<
" h=" << h << endl;
1659 cout <<
"Elt1=" << endl;
1661 cout <<
"g_h=" << endl;
1663 cout <<
"Elt2=" << endl;
1667 Adj[i * n + j] = Adj[j * n + i] = 1;
1670 cout <<
"edge " << i <<
" " << j << endl;
1677 cout <<
"The adjacency matrix of a graph with "
1678 << n <<
" vertices has been computed" << endl;
1687 cout <<
"sims::create_Cayley_graph done" << endl;
1694 int f_v = (verbose_level >= 1);
1702 cout <<
"sims::create_group_table" << endl;
1707 cout <<
"sims::create_group_table "
1708 "Computing the table of a group of order "
1716 for (i = 0; i < n; i++) {
1719 for (j = 0; j < n; j++) {
1723 cout <<
"i=" << i <<
" j=" << j << endl;
1724 cout <<
"Elt_i=" << endl;
1726 cout <<
"Elt_j=" << endl;
1728 cout <<
"Elt3=" << endl;
1732 Table[i * n + j] = k;
1741 cout <<
"sims::create_group_table done" << endl;
1748 int *&class_size,
int *&class_rep,
1751 int f_v = (verbose_level >= 1);
1755 cout <<
"sims::compute_conjugacy_classes" << endl;
1760 cout <<
"sims::compute_conjugacy_classes "
1761 "before Aconj->induced_action_by_conjugation" << endl;
1771 cout <<
"sims::compute_conjugacy_classes after Aconj->induced_action_by_conjugation" << endl;
1779 Sch->
init(Aconj, verbose_level - 2);
1790 cout <<
"sims::compute_conjugacy_classes "
1791 "Computing conjugacy classes:" << endl;
1798 class_size =
NEW_int(nb_classes);
1799 class_rep =
NEW_int(nb_classes);
1801 for (i = 0; i < nb_classes; i++) {
1804 class_rep[i] = Sch->
orbit[f];
1808 cout <<
"class size : ";
1811 cout <<
"class rep : ";
1818 cout <<
"sims::compute_conjugacy_classes done" << endl;
1826 int f_v = (verbose_level >= 1);
1833 cout <<
"sims::compute_all_powers" << endl;
1840 power_elt[0] = elt_idx;
1841 for (i = 2; i <= n; i++) {
1844 power_elt[i - 1] = a;
1853 cout <<
"sims::create_group_table done" << endl;
1859 int f_v = (verbose_level >= 1);
1863 cout <<
"sims::mult_by_rank" << endl;
1882 int f_v = (verbose_level >= 1);
1886 cout <<
"sims::invert_by_rank" << endl;
1898 int f_v = (verbose_level >= 1);
1902 cout <<
"sims::conjugate_by_rank" << endl;
1914 int *Elt_b,
int *Elt_bv,
int verbose_level)
1917 int f_v = (verbose_level >= 1);
1921 cout <<
"sims::conjugate_by_rank_b_bv_given" << endl;
1931int sims::identify_group(
char *path_t144,
1934 int f_v = (verbose_level >= 1);
1937 longinteger_object go;
1938 const char *fname =
"group_generators.txt";
1941 cout <<
"sims::identify_group" << endl;
1950 for (h = 0; h <
gens.
len; h++) {
1952 for (i = 0; i <
A->
degree; i++) {
1960 cout <<
"sims::identify_group written file "
1961 << fname <<
" of size " << file_size(fname) << endl;
1965 sprintf(cmd,
"%s/t144.out -discreta_home %s "
1966 "group_generators.txt >log.tmp",
1970 cout <<
"sims::identify_group calling '"
1971 << cmd <<
"'" << endl;
1977 ifstream f(
"result.txt");
1981 cout <<
"sims::identify_group: the group is "
1982 "isomorphic to group " << go <<
"#"
1983 << group_idx << endl;
1991 int *Zuppos,
int &nb_zuppos,
int verbose_level)
1993 int f_v = (verbose_level >= 1);
2003 cout <<
"sims::zuppo_list" << endl;
2006 cout <<
"go=" << go << endl;
2013 cout <<
"sims::zuppo_list group of order " << goi << endl;
2016 for (rk = 0; rk < goi; rk++) {
2032 cout <<
"sims::zuppo_list element " << rk <<
" / " << goi <<
" has order "
2033 << o <<
" which is a prime power; "
2034 "nb_zuppos = " << nb_zuppos << endl;
2036 Zuppos[nb_zuppos++] = rk;
2038 for (i = 1; i < o; i++) {
2049 cout <<
"sims::zuppo_list We found " << nb_zuppos <<
" zuppo elements" << endl;
2055 cout <<
"sims::zuppo_list done" << endl;
2060 int *
subgroup,
int subgroup_sz,
int *gens,
int &nb_gens,
2063 int *group,
int &group_sz,
2066 int f_v = (verbose_level >= 1);
2067 int f_vv = (verbose_level >= 2);
2068 int i, j, k, c, idx, new_coset_rep, nb_cosets;
2072 cout <<
"sims::dimino new_gen = " << new_gen << endl;
2076 group_sz = subgroup_sz;
2080 gens[nb_gens++] = new_gen;
2081 for (i = 0; i < nb_cosets; i++) {
2082 for (j = 0; j < nb_gens; j++) {
2084 cout <<
"sims::dimino coset rep " << i <<
" = " << cosets[i] << endl;
2085 cout <<
"sims::dimino generator " << j <<
" = " <<
gens[j] << endl;
2090 cout <<
"sims::dimino coset rep " << i <<
" times generator "
2091 << j <<
" is " << c << endl;
2095 cout <<
"sims::dimino already there" << endl;
2100 cout <<
"sims::dimino n e w coset rep" << endl;
2104 for (k = 0; k < subgroup_sz; k++) {
2106 group[group_sz++] = c;
2110 cout <<
"sims::dimino new group size = " << group_sz << endl;
2112 cosets[nb_cosets++] = new_coset_rep;
2116 cout <<
"sims::dimino, the n e w group has order " << group_sz << endl;
2120 cout <<
"sims::dimino done" << endl;
2128 int f_v = (verbose_level >= 1);
2131 cout <<
"sims::Cayley_graph" << endl;
2149 cout <<
"Computing the Cayley graph:" << endl;
2151 for (i = 0; i < sz; i++) {
2154 for (h = 0; h < nb_S; h++) {
2157 cout <<
"i=" << i <<
" h=" << h << endl;
2158 cout <<
"Elt1=" << endl;
2160 cout <<
"g_h=" << endl;
2162 cout <<
"Elt2=" << endl;
2166 Adj[i * sz + j] = Adj[j * sz + i] = 1;
2169 cout <<
"edge " << i <<
" " << j << endl;
2175 cout <<
"sims::Cayley_graph done" << endl;
a collection of combinatorial functions
void perm_print(std::ostream &ost, int *a, int n)
void matrix_print_width(std::ostream &ost, long int *p, int m, int n, int dim_n, int w)
a collection of functions related to sorted vectors
int int_vec_search(int *v, int len, int a, int &idx)
void int_vec_heapsort(int *v, int len)
basic number theoretic functions
long int gcd_lint(long int m, long int n)
int is_prime_power(int q)
data_structures::lint_vec * Lint_vec
interface to system functions
int random_integer(int p)
domain to compute with objects of type longinteger
int compare(longinteger_object &a, longinteger_object &b)
int multiplicity_of_p(longinteger_object &a, longinteger_object &residue, int p)
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 integral_division(longinteger_object &a, longinteger_object &b, longinteger_object &q, longinteger_object &r, int verbose_level)
int compare_unsigned(longinteger_object &a, longinteger_object &b)
a class to represent arbitrary precision integers
void create_power(int a, int e)
void create(long int i, const char *file, int line)
a permutation group in a fixed action.
void element_print_quick(void *elt, std::ostream &ost)
void element_print(void *elt, std::ostream &ost)
void mult(void *a, void *b, void *ab)
void element_mult(void *a, void *b, void *ab, int verbose_level)
void element_invert(void *a, void *av, int verbose_level)
void element_power_int_in_place(int *Elt, int n, int verbose_level)
int element_order_and_cycle_type(void *elt, int *cycle_type)
void element_move(void *a, void *b, int verbose_level)
void induced_action_by_conjugation(groups::sims *old_G, groups::sims *Base_group, int f_ownership, int f_basis, int verbose_level)
int check_if_in_set_stabilizer(int *Elt, int size, long int *set, int verbose_level)
void invert(void *a, void *av)
void element_print_as_permutation(void *elt, std::ostream &ost)
void move(void *a, void *b)
int element_order(void *elt)
long int element_image_of(long int a, void *elt, int verbose_level)
void print(std::ostream &ost, void *elt)
to hold a vector of group elements
void allocate(int length, int verbose_level)
void print(std::ostream &ost)
void init(actions::action *A, int verbose_level)
Schreier trees for orbits of groups on points.
void print_and_list_orbits(std::ostream &ost)
void compute_all_point_orbits(int verbose_level)
void random_schreier_generator(int *Elt, int verbose_level)
void init_generators(data_structures_groups::vector_ge &generators, int verbose_level)
void compute_point_orbit(int pt, int verbose_level)
data_structures_groups::vector_ge gens
void init(actions::action *A, int verbose_level)
void print(std::ostream &ost)
void print_generators_with_permutations()
void coset_rep(int j, int verbose_level)
a permutation group represented via a stabilizer chain
void point_stabilizer(data_structures_groups::vector_ge &SG, int *tl, int pt, int verbose_level)
void element_unrank(ring_theory::longinteger_object &a, int *elt, int verbose_level)
void conjugate(actions::action *A, sims *old_G, int *Elt, int f_overshooting_OK, int verbose_level)
void random_element(int *elt, int verbose_level)
void compute_all_powers(int elt_idx, int n, int *power_elt, int verbose_level)
void create_Cayley_graph(data_structures_groups::vector_ge *gens, int *&Adj, long int &n, int verbose_level)
void element_rank(ring_theory::longinteger_object &a, int *elt)
long int invert_by_rank(long int rk_a, int verbose_level)
void element_from_path(int *elt, int verbose_level)
void center(data_structures_groups::vector_ge &gens, int *center_element_ranks, int &nb_elements, int verbose_level)
long int conjugate_by_rank(long int rk_a, long int rk_b, int verbose_level)
int test_if_subgroup(sims *old_G, int verbose_level)
void init(actions::action *A, int verbose_level)
void transitive_extension(schreier &O, data_structures_groups::vector_ge &SG, int *tl, int verbose_level)
void dimino(int *subgroup, int subgroup_sz, int *gens, int &nb_gens, int *cosets, int new_gen, int *group, int &group_sz, 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 all_cosets(int *subset, int size, long int *all_cosets, int verbose_level)
void extract_strong_generators_in_order(data_structures_groups::vector_ge &SG, int *tl, int verbose_level)
long int mult_by_rank(long int rk_a, long int rk_b, int verbose_level)
void regular_representation(int *Elt, int *perm, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
int is_normalizing(int *Elt, int verbose_level)
void init_trivial_group(int verbose_level)
void create_group_table(int *&Table, long int &n, int verbose_level)
void find_standard_generators_int(int ord_a, int ord_b, int ord_ab, int &a, int &b, int &nb_trials, int verbose_level)
void print_transversals()
void zuppo_list(int *Zuppos, int &nb_zuppos, int verbose_level)
long int conjugate_by_rank_b_bv_given(long int rk_a, int *Elt_b, int *Elt_bv, int verbose_level)
void element_ranks_subgroup(sims *subgroup, int *element_ranks, 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 evaluate_word_int(int word_len, int *word, int *Elt, int verbose_level)
void add_generator_at_level(int *elt, int lvl, int verbose_level)
data_structures_groups::vector_ge gens
int transitive_extension_tolerant(schreier &O, data_structures_groups::vector_ge &SG, int *tl, int f_tolerant, int verbose_level)
void element_unrank_lint(long int rk, int *Elt, int verbose_level)
void random_schreier_generator(int *Elt, int verbose_level)
void random_element_of_order(int *elt, int order, int verbose_level)
long int element_rank_lint(int *Elt)
data_structures_groups::vector_ge gens_inv
int strip(int *elt, int *residue, int &drop_out_level, int &image, int verbose_level)
void Cayley_graph(int *&Adj, int &sz, data_structures_groups::vector_ge *gens_S, int verbose_level)
long int find_element_of_given_order_int(int ord, int &nb_trials, int verbose_level)
void init_generators(data_structures_groups::vector_ge &generators, int verbose_level)
void print_transversal_lengths()
void compute_base_orbits(int verbose_level)
void compute_conjugacy_classes(actions::action *&Aconj, induced_actions::action_by_conjugation *&ABC, schreier *&Sch, strong_generators *&SG, int &nb_classes, int *&class_size, int *&class_rep, int verbose_level)
long int group_order_lint()
void point_stabilizer_with_action(actions::action *A2, data_structures_groups::vector_ge &SG, int *tl, int pt, int verbose_level)
void sylow_subgroup(int p, sims *P, int verbose_level)
void table_of_group_elements_in_data_form(int *&Table, int &len, int &sz, int verbose_level)
int find_element_with_exactly_n_fixpoints_in_given_action(int *Elt, int nb_fixpoints, actions::action *A_given, int verbose_level)
void point_stabilizer_stabchain_with_action(actions::action *A2, sims &S, int pt, int verbose_level)
int test_if_in_set_stabilizer(actions::action *A, long int *set, int size, int verbose_level)
void random_elements_of_order(data_structures_groups::vector_ge *elts, int *orders, int nb, int verbose_level)
void transitive_extension_using_coset_representatives(int *coset_reps, int nb_cosets, int verbose_level)
void find_element_of_prime_power_order(int p, int *Elt, int &e, int &nb_trials, int verbose_level)
int strip_and_add(int *elt, int *residue, int verbose_level)
a strong generating set for a permutation group with respect to a fixed action
void init_from_sims(groups::sims *S, int verbose_level)
data_structures_groups::vector_ge * gens
a subgroup of a group using a list of elements
induced action by conjugation on the elements of a given group
#define Int_vec_zero(A, B)
#define Int_vec_copy(A, B, C)
#define Int_vec_print(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
const char * discreta_home
the orbiter library for the classification of combinatorial objects
induced_actions::action_by_conjugation * ABC