20namespace layer5_applications {
21namespace apps_algebra {
32 int f_v = (verbose_level >= 1);
35 cout <<
"algebra_global_with_action::orbits_under_conjugation" << endl;
39 cout <<
"algebra_global_with_action::orbits_under_conjugation "
40 "before A_conj.induced_action_by_conjugation" << endl;
46 cout <<
"algebra_global_with_action::orbits_under_conjugation "
47 "created action by conjugation" << endl;
53 cout <<
"algebra_global_with_action::orbits_under_conjugation "
54 "before A_conj.restricted_action" << endl;
61 cout <<
"algebra_global_with_action::orbits_under_conjugation "
62 "after A_conj.restricted_action" << endl;
68 Classes.
init(A_conj_restricted, verbose_level - 2);
71 cout <<
"algebra_global_with_action::orbits_under_conjugation "
72 "before Classes.compute_all_point_orbits" << endl;
76 cout <<
"algebra_global_with_action::orbits_under_conjugation "
77 "after Classes.compute_all_point_orbits" << endl;
78 cout <<
"found " << Classes.
nb_orbits <<
" conjugacy classes" << endl;
83 cout <<
"algebra_global_with_action::orbits_under_conjugation "
84 "before create_subgroups" << endl;
87 the_set, set_size, S, &A_conj,
92 cout <<
"algebra_global_with_action::orbits_under_conjugation "
93 "after create_subgroups" << endl;
97 cout <<
"algebra_global_with_action::orbits_under_conjugation done" << endl;
110 int f_v = (verbose_level >= 1);
113 cout <<
"algebra_global_with_action::create_subgroups" << endl;
118 long int *the_set_sorted;
125 cout <<
"The group has order " << go << endl;
128 the_set_sorted =
NEW_lint(set_size);
132 for (i = 0; i < set_size; i++) {
138 cout <<
"There are " << Classes->
nb_orbits <<
" orbits on the given set of elements by conjugation" << endl;
139 for (i = 0; i < Classes->
nb_orbits; i++) {
143 rep = Classes->
orbit[f];
145 cout <<
"Orbit " << i <<
" has length " << l <<
" representative is " << rep <<
" = " << the_set[rep] << endl;
170 cout <<
"algebra_global_with_action::create_subgroups l != 1" << endl;
173 rep = Classes->
orbit[f];
186 for (j = 1; j < Classes->
nb_orbits; j++) {
192 rep = Classes->
orbit[f];
197 cout <<
"flag orbit " << nb_flag_orbits <<
" : " << j <<
" l=" << l <<
" : " << rk0 <<
"," << rk1 <<
"," << rk2 << endl;
205 Flags[nb_flag_orbits * 3 + 0] = rk0;
206 Flags[nb_flag_orbits * 3 + 1] = rk1;
207 Flags[nb_flag_orbits * 3 + 2] = rk2;
208 SO[nb_flag_orbits] = j;
209 SOL[nb_flag_orbits] = l;
212 cout <<
"algebra_global_with_action::create_subgroups before Classes->stabilizer_orbit_rep" << endl;
219 cout <<
"algebra_global_with_action::create_subgroups after Classes->stabilizer_orbit_rep" << endl;
226 cout <<
"Class " << j <<
" is rejected because the third element does not belong to the same class." << endl;
233 cout <<
"We found " << nb_flag_orbits <<
" flag orbits, with " << nb_reject <<
" may rejected" << endl;
237 for (h = 0; h < nb_flag_orbits; h++) {
240 cout <<
"flag orbit " << h <<
" / " << nb_flag_orbits <<
":" << endl;
242 rk0 = Flags[h * 3 + 0];
243 rk1 = Flags[h * 3 + 1];
244 rk2 = Flags[h * 3 + 2];
248 cout << h <<
" : " << SO[h] <<
" : " <<SOL[h] <<
" : (" << rk0 <<
"," << rk1 <<
"," << rk2 <<
") : " << go1 << endl;
249 cout <<
"The subgroup consists of the following three non-identity elements:" << endl;
261 int *upstep_transversal_size;
262 int *iso_type_of_flag_orbit;
263 int *f_is_definition;
264 int *flag_orbit_of_iso_type;
267 long int cur_flag[3];
268 long int cur_flag_mapped1[3];
271 upstep_transversal_size =
NEW_int(nb_flag_orbits);
272 iso_type_of_flag_orbit =
NEW_int(nb_flag_orbits);
273 flag_orbit_of_iso_type =
NEW_int(nb_flag_orbits);
274 f_is_definition =
NEW_int(nb_flag_orbits);
275 f_fused =
NEW_int(nb_flag_orbits);
283 for (flag = 0; flag < nb_flag_orbits; flag++) {
286 cout <<
"upstep: considering flag orbit " << flag <<
" / " << nb_flag_orbits
292 cout <<
"upstep: flag orbit " << flag <<
" / " << nb_flag_orbits <<
" has been fused, skipping" << endl;
296 f_is_definition[flag] =
TRUE;
297 iso_type_of_flag_orbit[flag] = nb_iso;
298 flag_orbit_of_iso_type[nb_iso] = flag;
299 upstep_transversal_size[nb_iso] = 1;
304 transversal->
init(S->
A, 0);
306 for (h = 0; h < 6; h++) {
310 for (h = 1; h < 6; h++) {
312 cur_flag[0] = Flags[flag * 3 + 0];
313 cur_flag[1] = Flags[flag * 3 + 2];
314 cur_flag[2] = Flags[flag * 3 + 1];
317 cur_flag[0] = Flags[flag * 3 + 1];
318 cur_flag[1] = Flags[flag * 3 + 0];
319 cur_flag[2] = Flags[flag * 3 + 2];
322 cur_flag[0] = Flags[flag * 3 + 1];
323 cur_flag[1] = Flags[flag * 3 + 2];
324 cur_flag[2] = Flags[flag * 3 + 0];
327 cur_flag[0] = Flags[flag * 3 + 2];
328 cur_flag[1] = Flags[flag * 3 + 0];
329 cur_flag[2] = Flags[flag * 3 + 1];
332 cur_flag[0] = Flags[flag * 3 + 2];
333 cur_flag[1] = Flags[flag * 3 + 1];
334 cur_flag[2] = Flags[flag * 3 + 0];
339 if (!Sorting.
lint_vec_search(the_set_sorted, set_size, cur_flag[0], idx, 0 )) {
340 cout <<
"cannot find cur_flag[0] in the_set_sorted" << endl;
345 for (
int u = 0; u < 3; u++) {
348 if (cur_flag_mapped1[0] != rk0) {
349 cout <<
"cur_flag_mapped1[u] != rk0" << endl;
355 if (!Sorting.
lint_vec_search(the_set_sorted, set_size, cur_flag_mapped1[1], idx, 0 )) {
356 cout <<
"cannot find cur_flag[1] in the_set_sorted" << endl;
364 cout <<
"flag " << flag <<
" coset " << h <<
", found an automorphism" << endl;
369 orbit_idx, Elt1, verbose_level);
374 for (
int u = 0; u < 3; u++) {
377 cout <<
"which maps as follows:" << endl;
378 for (
int u = 0; u < 3; u++) {
379 cout << cur_flag[u] <<
" -> " << cur_flag_mapped1[u] << endl;
382 S->
A->
element_move(Elt2, transversal->
ith(upstep_transversal_size[nb_iso]), 0);
384 upstep_transversal_size[nb_iso]++;
388 cout <<
"cannot find j in SO" << endl;
391 cout <<
"flag " << flag <<
" coset " << h <<
", fusing with flag " << idx << endl;
403 <<
" upstep ransversal length = " << upstep_transversal_size[nb_iso] << endl;
404 cout <<
"before aut->init_group_extension" << endl;
408 transversal, upstep_transversal_size[nb_iso] ,
418 cout <<
"We found " << nb_iso <<
" conjugacy classes of subgroups" << endl;
419 for (i = 0; i < nb_iso; i++) {
420 flag = flag_orbit_of_iso_type[i];
421 rk0 = Flags[flag * 3 + 0];
422 rk1 = Flags[flag * 3 + 1];
423 rk2 = Flags[flag * 3 + 2];
424 cout << i <<
" : " << flag <<
" : " <<
" : " << SO[flag] <<
" l=" << SOL[flag]
425 <<
" : " << rk0 <<
"," << rk1 <<
"," << rk2 <<
" : "
432 cout <<
"The subgroup consists of the following three non-identity elements:" << endl;
448 snprintf(str, 1000,
"subgroups_of_order_4.tex");
450 snprintf(title, 1000,
"Subgroups of order 4");
472 cout <<
"algebra_global_with_action::create_subgroups before report" << endl;
476 ost <<
"There are " << nb_flag_orbits <<
" flag orbits:\\\\" << endl;
477 for (h = 0; h < nb_flag_orbits; h++) {
480 ost <<
"Flag orbit " << h <<
" / " << nb_flag_orbits <<
":\\\\" << endl;
482 rk0 = Flags[h * 3 + 0];
483 rk1 = Flags[h * 3 + 1];
484 rk2 = Flags[h * 3 + 2];
488 cout << h <<
" : " << SO[h] <<
" : " << SOL[h] <<
" : (" << rk0 <<
"," << rk1 <<
"," << rk2 <<
") : " << go1 << endl;
489 ost <<
"The subgroup consists of the following three non-identity elements:\\\\" << endl;
495 ost <<
"The flag stabilizer is the following group:\\\\" << endl;
500 ost <<
"\\bigskip" << endl;
503 ost <<
"We found " << nb_iso <<
" conjugacy classes of subgroups\\\\" << endl;
504 ost <<
"Subgroup : Order of normalizer\\\\" << endl;
505 for (i = 0; i < nb_iso; i++) {
509 ost <<
"\\bigskip" << endl;
511 for (i = 0; i < nb_iso; i++) {
512 ost <<
"Subgroup " << i <<
" / " << nb_iso <<
":\\\\" << endl;
513 flag = flag_orbit_of_iso_type[i];
514 rk0 = Flags[flag * 3 + 0];
515 rk1 = Flags[flag * 3 + 1];
516 rk2 = Flags[flag * 3 + 2];
517 cout << i <<
" : " << flag <<
" : " <<
" : " << SO[flag] <<
" l=" << SOL[flag]
518 <<
" : " << rk0 <<
"," << rk1 <<
"," << rk2 <<
" : "
525 ost <<
"The subgroup consists of the following three non-identity elements:\\\\" << endl;
532 ost <<
"\\\\" << endl;
534 ost <<
"\\\\" << endl;
536 ost <<
"\\\\" << endl;
537 ost <<
"The normalizer is the following group:\\\\" << endl;
540 ost <<
"\\bigskip" << endl;
546 cout <<
"algebra_global_with_action::create_subgroups after report" << endl;
555 cout <<
"written file " << fname <<
" of size "
573 cout <<
"algebra_global_with_action::create_subgroups done" << endl;
578 long int *the_set,
int set_size,
581 std::string &label_set,
582 std::string &label_group,
587 int f_v = (verbose_level >= 1);
590 cout <<
"algebra_global_with_action::orbits_on_set_from_file" << endl;
598 cout <<
"algebra_global_with_action::orbits_on_set_from_file before OS->init" << endl;
600 OS->
init(A1, A2, the_set, set_size, gens, verbose_level - 2);
602 cout <<
"algebra_global_with_action::orbits_on_set_from_file after OS->init" << endl;
606 cout <<
"Found an orbit of length " << OS->
used_length << endl;
612 cout <<
"before OS->get_table_of_orbits" << endl;
615 orbit_length, set_size1, verbose_level - 2);
617 cout <<
"after OS->get_table_of_orbits" << endl;
621 cout <<
"before OS->get_table_of_orbits" << endl;
624 orbit_length, set_size, verbose_level);
626 cout <<
"after OS->get_table_of_orbits" << endl;
637 cout <<
"before OS->make_table_of_coset_reps" << endl;
641 cout <<
"after OS->make_table_of_coset_reps" << endl;
644 fname.assign(label_set);
645 fname.append(
"_orbit_under_");
646 fname.append(label_group);
647 fname.append(
"_transporter.csv");
654 cout <<
"testing Coset_reps " << endl;
657 long int rk0 = the_set[0];
660 for (
int i = 0; i < orbit_length; i++) {
662 if (rk1 != Table[i * set_size + 0]) {
663 cout <<
"rk1 != Table[i * set_size + 0], i=" << i << endl;
669 cout <<
"testing Coset_reps passes" << endl;
675 fname.assign(label_set);
676 fname.append(
"_orbit_under_");
677 fname.append(label_group);
678 fname.append(
".csv");
681 cout <<
"Writing orbit to file " << fname << endl;
687 cout <<
"Written file " << fname <<
" of size "
696 fname.assign(label_set);
697 fname.append(
"_orbit_under_");
698 fname.append(label_group);
699 fname.append(
".txt");
702 cout <<
"Writing table to file " << fname << endl;
707 for (i = 0; i < orbit_length; i++) {
709 for (
int j = 0; j < set_size; j++) {
710 ost <<
" " << Table[i * set_size + j];
714 ost << -1 <<
" " << orbit_length << endl;
717 cout <<
"Written file " << fname <<
" of size "
723 cout <<
"before FREE_OBJECT(OS)" << endl;
727 cout <<
"after FREE_OBJECT(OS)" << endl;
731 cout <<
"algebra_global_with_action::orbits_on_set_from_file done" << endl;
740 std::string &label_tex,
743 int f_v = (verbose_level >= 1);
752 cout <<
"algebra_global_with_action::conjugacy_classes_based_on_normal_forms" << endl;
755 prefix.assign(label);
756 fname_output.assign(label);
763 cout <<
"algebra_global_with_action::conjugacy_classes_based_on_normal_forms d=" << d << endl;
764 cout <<
"algebra_global_with_action::conjugacy_classes_based_on_normal_forms q=" << F->
q << endl;
777 sprintf(str,
"_classes_based_on_normal_forms_%d_%d.tex", d, F->
q);
778 fname_output.append(
"_classes_normal_form.tex");
780 C.
init(d, F, verbose_level);
783 cout <<
"before C.make_classes" << endl;
787 cout <<
"after C.make_classes" << endl;
797 for (i = 0; i < nb_classes; i++) {
800 cout <<
"class " << i <<
" / " << nb_classes <<
":" << endl;
809 cout <<
"before override_Sims->element_rank_lint" << endl;
813 cout <<
"after override_Sims->element_rank_lint" << endl;
816 cout <<
"Representative of class " << i <<
" / "
817 << nb_classes <<
" has rank " << a <<
"\\\\" << endl;
821 cout <<
"before C.print_matrix_and_centralizer_order_latex" << endl;
826 cout <<
"after C.print_matrix_and_centralizer_order_latex" << endl;
830 cout <<
"before A->element_order" << endl;
834 cout <<
"after A->element_order" << endl;
837 cout <<
"The element order is : " << order <<
"\\\\" << endl;
845 T_order.
init(Order, nb_classes,
FALSE, 0);
849 ofstream ost(fname_output);
856 ost <<
"The distribution of element orders is:" << endl;
865 ost <<
"\\\\" << endl;
873 int t, f, l, a, h, c;
875 for (t = 0; t < T_order.
nb_types; t++) {
881 cout <<
"class type " << t <<
" / " << T_order.
nb_types <<
":" << endl;
884 ost <<
"\\section{The Classes of Elements of Order $" << a <<
"$}" << endl;
887 ost <<
"There are " << l <<
" classes of elements of order " << a <<
"\\\\" << endl;
889 for (h = 0; h < l; h++) {
896 cout <<
"class " << h <<
" / " << l <<
" of elements of order " << a <<
":" << endl;
905 cout <<
"before override_Sims->element_rank_lint" << endl;
909 cout <<
"after override_Sims->element_rank_lint" << endl;
912 ost <<
"Representative of class " << i <<
" / "
913 << nb_classes <<
" has rank " << a <<
"\\\\" << endl;
917 cout <<
"before C.print_matrix_and_centralizer_order_latex" << endl;
921 cout <<
"after C.print_matrix_and_centralizer_order_latex" << endl;
925 cout <<
"before A->element_order" << endl;
929 cout <<
"after A->element_order" << endl;
932 ost <<
"The element order is : " << order <<
"\\\\" << endl;
940 cout <<
"Written file " << fname_output <<
" of size "
948 cout <<
"algebra_global_with_action::conjugacy_classes_based_on_normal_forms done" << endl;
955 int f_no_eigenvalue_one,
int verbose_level)
963 C.
init(d, F, verbose_level);
965 C.
make_classes(R, nb_classes, f_no_eigenvalue_one, verbose_level);
990 for (i = 0; i < nb_classes; i++) {
998 cout <<
"Representative of class " << i <<
" / "
999 << nb_classes <<
" has rank " << a << endl;
1010 sprintf(fname,
"Class_reps_GL_%d_%d.tex", d, F->
q);
1016 C.
report(fp, verbose_level);
1029 int f_no_eigenvalue_one,
int *data,
int data_sz,
1032 int f_v = (verbose_level >= 1);
1039 cout <<
"algebra_global_with_action::do_normal_form" << endl;
1045 cout <<
"algebra_global_with_action::do_normal_form before C.init" << endl;
1049 cout <<
"algebra_global_with_action::do_normal_form after C.init" << endl;
1053 cout <<
"algebra_global_with_action::do_normal_form before C.make_classes" << endl;
1058 cout <<
"algebra_global_with_action::do_normal_form after C.make_classes" << endl;
1087 cout <<
"Making element from data ";
1094 cout <<
"Looking at element:" << endl;
1107 cout <<
"class = " << class_rep << endl;
1123 int f_no_eigenvalue_one,
int elt_idx,
1134 C.
init(d, F, verbose_level);
1136 C.
make_classes(Reps, nb_classes, f_no_eigenvalue_one, verbose_level);
1166 cout <<
"Looking at element " << elt_idx <<
":" << endl;
1180 cout <<
"class = " << class_rep << endl;
1195 int f_no_eigenvalue_one,
int verbose_level)
1205 C.
init(d, F, verbose_level);
1207 C.
make_classes(Reps, nb_classes, f_no_eigenvalue_one, verbose_level);
1228 int i, go, class_rep;
1232 Class_count =
NEW_int(nb_classes);
1238 for (i = 0; i < go; i++) {
1240 cout <<
"Looking at element " << i <<
":" << endl;
1253 nb_classes, R1, 0 );
1255 cout <<
"class = " << class_rep << endl;
1257 Class_count[class_rep]++;
1262 cout <<
"class : count" << endl;
1263 for (i = 0; i < nb_classes; i++) {
1264 cout << setw(3) << i <<
" : " << setw(10)
1265 << Class_count[i] << endl;
1289 C.
init(d, F, verbose_level);
1291 C.
make_classes(Reps, nb_classes, f_no_eigenvalue_one, verbose_level);
1313 cout <<
"class = " << class_rep << endl;
1325 int f_no_eigenvalue_one,
int verbose_level)
1332 int list_sz, a, b, j, h;
1343 C.
init(d, F, verbose_level);
1345 C.
make_classes(Reps, nb_classes, f_no_eigenvalue_one, verbose_level);
1365 int i, go, class_rep;
1386 for (i = 0; i < go; i++) {
1388 cout <<
"Looking at element " << i <<
":" << endl;
1402 d, char_poly, verbose_level - 2);
1404 cout <<
"The characteristic polynomial is ";
1416 List[list_sz++] = i;
1421 cout <<
"Found " << list_sz
1422 <<
" elements without eigenvalue one" << endl;
1427 for (i = 0; i < list_sz; i++) {
1430 cout <<
"Looking at element " << a <<
":" << endl;
1443 nb_classes, R1, 0 );
1449 cout <<
"class = " << class_rep << endl;
1450 Class_rep[i] = class_rep;
1456 Group_table =
NEW_int(list_sz * list_sz);
1458 for (i = 0; i < list_sz; i++) {
1461 for (j = 0; j < list_sz; j++) {
1466 Group_table[i * list_sz + j] = h;
1469 int L_sz = list_sz + 1;
1472 for (i = 0; i < list_sz; i++) {
1473 Table[0 * L_sz + 1 + i] = List[i];
1474 Table[(i + 1) * L_sz + 0] = List[i];
1476 for (i = 0; i < list_sz; i++) {
1477 for (j = 0; j < list_sz; j++) {
1478 Table[(i + 1) * L_sz + 1 + j] =
1479 Group_table[i * list_sz + j];
1482 cout <<
"extended group table:" << endl;
1486 const char *fname =
"group_table.tex";
1521 int elt_idx,
int verbose_level)
1571 cout <<
"Computing centralizer of element "
1572 << elt_idx <<
":" << endl;
1577 for (i = 0; i < go; i++) {
1579 cout <<
"Looking at element " << i <<
" / " << go << endl;
1594 cout <<
"The centralizer has order " << sz << endl;
1604 gens->
init(A, verbose_level - 2);
1605 gens->
allocate(sz, verbose_level - 2);
1607 for (i = 0; i < sz; i++) {
1610 cout <<
"Looking at element " << i <<
" / " << sz
1611 <<
" which is " << a << endl;
1625 cout <<
"strong generators for the centralizer are:" << endl;
1626 for (i = 0; i < SG->
len; i++) {
1631 cout <<
"Element " << i <<
" / " << SG->
len
1632 <<
" which is " << a << endl;
1651 int elt_idx,
int verbose_level)
1689 cout <<
"Looking at element " << elt_idx <<
":" << endl;
1701 cout <<
"before Cent->init_centralizer_of_matrix" << endl;
1703 cout <<
"before Cent->init_centralizer_of_matrix" << endl;
1705 cout <<
"before Cent_GL->init_centralizer_of_matrix_general_linear" << endl;
1707 A_PGL, A_GL, Elt, verbose_level);
1708 cout <<
"after Cent_GL->init_centralizer_of_matrix_general_linear" << endl;
1715 cout <<
"order of centralizer in PGL: " << go <<
" in GL: " << go1 << endl;
1752 for (i = 0; i < go; i++) {
1753 cout <<
"Looking at element " << i <<
":" << endl;
1762 Elt, verbose_level);
1765 cout <<
"Looking at element " << i
1766 <<
", the centralizer has order " << cent_go << endl;
1792 cout <<
"computing the regular representation of degree "
1793 << go <<
":" << endl;
1796 for (i = 0; i < SG->
len; i++) {
1798 perm + i * goi, verbose_level);
1801 for (i = 0; i < SG->
len; i++) {
1803 perm + i * goi, goi, 1 ,
1817 int *Elt1, *Elt2, *Elt3, *Elt4;
1818 int i, j, jj, k, l, a, b;
1821 int *inverse_word_list;
1829 inverse_word_list =
NEW_int(goi);
1833 cout <<
"presentation of length " << l << endl;
1850 for (i = 0; i < goi; i++) {
1851 inverse_word_list[i] = -1;
1853 for (i = 0; i < goi; i++) {
1856 for (k = 0; k < l; k++) {
1862 for (k = 0; k < l; k++) {
1865 A->
mult(Elt1, gens->
ith(k), Elt2);
1866 A->
move(Elt2, Elt1);
1870 A->
move(Elt1, Elt2);
1873 inverse_word_list[a] = i;
1874 cout <<
"word " << i <<
" = ";
1876 cout <<
" gives " << endl;
1877 A->
print(cout, Elt1);
1878 cout <<
"which is element " << word_list[i] << endl;
1881 cout <<
"i : word_list[i] : inverse_word_list[i]" << endl;
1882 for (i = 0; i < goi; i++) {
1883 cout << setw(5) << i <<
" : " << setw(5) << word_list[i]
1884 <<
" : " << setw(5) << inverse_word_list[i] << endl;
1889 for (i = 0; i < l; i++) {
1890 cout <<
"generator " << i <<
":" << endl;
1894 for (i = 0; i < l; i++) {
1898 cout <<
"generator " << i <<
" to the power " << primes[i]
1899 <<
" is elt " << a <<
" which is word "
1900 << inverse_word_list[a];
1901 j = inverse_word_list[a];
1902 for (k = 0; k < l; k++) {
1909 cout <<
" :" << endl;
1910 A->
print(cout, Elt1);
1915 for (i = 0; i < l; i++) {
1918 for (j = 0; j < i; j++) {
1919 A->
mult(Elt2, gens->
ith(j), Elt3);
1920 A->
mult(Elt3, Elt1, Elt4);
1921 cout <<
"g_" << j <<
"^{g_" << i <<
"} =" << endl;
1923 cout <<
"which is element " << a <<
" which is word "
1924 << inverse_word_list[a] <<
" = ";
1925 jj = inverse_word_list[a];
1926 for (k = 0; k < l; k++) {
1930 jj = jj / primes[k];
1934 A->
print(cout, Elt4);
1951 int size,
int *Data,
int verbose_level)
1953 int f_v = (verbose_level >= 1);
1961 cout <<
"algebra_global_with_action::do_eigenstuff" << endl;
1965 for (i = 0; i < size; i++) {
1966 for (j = 0; j < size; j++) {
1973 cout <<
"M=" << endl;
1985 for (i = 0; i < size; i++) {
1987 M2.KX_module_order_ideal(i, mue, verbose_level - 1);
1988 cout <<
"order ideal " << i <<
":" << endl;
1989 cout << mue << endl;
2000 cout <<
"M - x * Id has been computed" << endl;
2004 cout <<
"M - x * Id = " << endl;
2009 cout <<
"before M.smith_normal_form" << endl;
2011 cout <<
"after M.smith_normal_form" << endl;
2013 cout <<
"the Smith normal form is:" << endl;
2017 cout <<
"P * Pv=" << endl << S << endl;
2020 cout <<
"Q * Qv=" << endl << S << endl;
2023 cout <<
"T.mult(S, Q):" << endl;
2025 cout <<
"T=" << endl << T << endl;
2032 charpoly = M.
s_ij(size - 1, size - 1);
2034 cout <<
"characteristic polynomial:" << charpoly << endl;
2036 cout <<
"has degree " << deg << endl;
2037 l = charpoly.
s_ii(deg);
2038 cout <<
"leading coefficient " << l << endl;
2040 cout <<
"leading coefficient inverse " << lv << endl;
2041 for (i = 0; i <= deg; i++) {
2042 b = charpoly.
s_ii(i);
2044 charpoly.
m_ii(i, c);
2046 cout <<
"monic characteristic polynomial:" << charpoly << endl;
2052 roots =
new int[F->
q];
2054 for (a = 0; a < F->
q; a++) {
2058 cout <<
"root " << a << endl;
2059 roots[nb_roots++] = a;
2062 cout <<
"we found the following eigenvalues: ";
2066 int eigenvalue, eigenvalue_negative;
2068 for (h = 0; h < nb_roots; h++) {
2069 eigenvalue = roots[h];
2070 cout <<
"looking at eigenvalue " << eigenvalue << endl;
2072 eigenvalue_negative = F->
negate(eigenvalue);
2073 A =
new int[size * size];
2074 B =
new int[size * size];
2075 Bt =
new int[size * size];
2076 for (i = 0; i < size; i++) {
2077 for (j = 0; j < size; j++) {
2078 A[i * size + j] = Data[i * size + j];
2081 cout <<
"A:" << endl;
2084 for (i = 0; i < size; i++) {
2085 for (j = 0; j < size; j++) {
2086 a = A[i * size + j];
2088 a = F->
add(a, eigenvalue_negative);
2090 B[i * size + j] = a;
2093 cout <<
"B = A - eigenvalue * I:" << endl;
2097 cout <<
"B transposed:" << endl;
2102 int f_special =
FALSE;
2103 int f_complete =
TRUE;
2107 int kernel_m, kernel_n, *kernel;
2109 base_cols =
new int[size];
2110 kernel =
new int[size * size];
2113 f_special, f_complete, base_cols,
2114 f_P, NULL, size, size, size,
2116 cout <<
"rank = " << nb_base_cols << endl;
2119 kernel_m, kernel_n, kernel, 0 );
2120 cout <<
"kernel = left eigenvectors:" << endl;
2125 vec1 =
new int[size];
2126 vec2 =
new int[size];
2127 for (i = 0; i < size; i++) {
2128 vec1[i] = kernel[i * kernel_n + 0];
2136 cout <<
"has rank " << a << endl;
2139 cout <<
"computing xA" << endl;
2148 cout <<
"has rank " << a << endl;
2169 int f_v = (verbose_level >= 1);
2179 cout <<
"algebra_global_with_action::A5_in_PSL_ "
2180 "q=" << q <<
", p=" << p <<
", f=" << f << endl;
2191 cout <<
"A5_in_PSL_2_q done" << endl;
2192 cout <<
"A=\n" << A << endl;
2193 cout <<
"B=\n" << B << endl;
2194 cout <<
"AB=\n" << D << endl;
2195 int AA[4], BB[4], DD[4];
2199 cout <<
"A=" << endl;
2201 cout <<
"B=" << endl;
2203 cout <<
"AB=" << endl;
2213 cout <<
"projective order of A = " << oA << endl;
2214 cout <<
"projective order of B = " << oB << endl;
2215 cout <<
"projective order of AB = " << oD << endl;
2228 if (((q - 1) % 5) == 0) {
2231 else if (((q + 1) % 5) == 0) {
2235 cout <<
"either q + 1 or q - 1 must be divisible by 5!" << endl;
2246 int f_v = (verbose_level >= 1);
2248 integer zeta5, zeta5v, b, c, d, b2, e;
2251 cout <<
"algebra_global_with_action::A5_in_PSL_2_q_easy verbose_level=" << verbose_level << endl;
2263 cout <<
"zeta5=" << zeta5 << endl;
2264 cout <<
"zeta5v=" << zeta5v << endl;
2275 cout <<
"A=\n" << A << endl;
2299 cout <<
"B=\n" << B << endl;
2302 cout <<
"algebra_global_with_action::A5_in_PSL_2_q_easy done" << endl;
2313 int f_v = (verbose_level >= 1);
2322 cout <<
"algebra_global_with_action::A5_in_PSL_2_q_hard" << endl;
2327 m.
Singer(q, 2, verbose_level);
2329 cout <<
"m=" << m << endl;
2330 norm_alpha = m.
s_ii(0);
2331 cout <<
"norm_alpha=" << norm_alpha << endl;
2333 domain GFq2(&m, dom_GFq);
2338 cout <<
"searching for element of norm -1:" << endl;
2343 cout <<
"-1=" << m1 << endl;
2346 for (i = q; i < q2; i++) {
2351 cout << i <<
": (" << a <<
")^" << q + 1 <<
" = " << b << endl;
2356 cout <<
"A5_in_PSL_2_q_hard() couldn't find element of norm -1" << endl;
2364 cout <<
"(" << a <<
")^" << q + 1 <<
" = " << b << endl;
2366 cout <<
"fatal: element a does not have norm -1" << endl;
2371 cout <<
"element of norm -1:" << a << endl;
2388 cout <<
"S=\n" << S << endl;
2394 cout <<
"S^{-1}=\n" << Sv << endl;
2395 cout <<
"S \\cdot S^{-1}=\n" << E << endl;
2402 SSbart.mult(S, Sbart);
2404 cout <<
"\\bar{S}^\\top=\n" << Sbart << endl;
2405 cout <<
"S \\cdot \\bar{S}^\\top=\n" << SSbart << endl;
2420 cout <<
"zeta5=" << zeta5 << endl;
2421 cout <<
"zeta5v=" << zeta5v << endl;
2432 cout <<
"AA=\n" << AA << endl;
2435 integer bb, c, d, e, f, c1, b1;
2444 cout <<
"b=" << b << endl;
2456 cout <<
"1 - b \\cdot \\bar{b}=" << e << endl;
2459 for (l = 0; l < q; l++) {
2468 cout <<
"the discrete log with respect to " << norm_alpha <<
" is " << l << endl;
2476 cout <<
"fatal: norm of " << c <<
" is not " << e << endl;
2480 for (i = q; i < q2; i++) {
2489 cout <<
"A5_in_PSL_2_q_hard() couldn't find element c" << endl;
2494 cout <<
"element c=" << c << endl;
2505 cout <<
"BB=\n" << BB << endl;
2513 cout <<
"A=\n" << A << endl;
2514 cout <<
"B=\n" << B << endl;
2517 cout <<
"algebra_global_with_action::A5_in_PSL_2_q_hard done" << endl;
2530 cout <<
"algebra_global_with_action::proj_order m != n" << endl;
2535 cout <<
"is zero matrix!" << endl;
2556 cout <<
"ERROR: matrix::trace not a square matrix!" << endl;
2560 for (i = 1; i < m; i++) {
2573 for (i = 0; i < m; i++) {
2574 for (j = 0; j < n; j++) {
2591 for (i = 0; i < m; i++) {
2592 for (j = 0; j < n; j++) {
2599 if (i == j && e.
s_i() != c.
s_i()) {
2611 int m, n, i, j, val;
2615 for (i = 0; i < m; i++) {
2616 for (j = 0; j < n; j++) {
2629 cout <<
"degree=" << l << endl;
2630 for (h = l - 1; h >= 0; h--) {
2637 AA[i * n + j] = val;
2648 int f_v = (verbose_level >= 1);
2651 cout <<
"algebra_global_with_action::young_symmetrizer" << endl;
2658 Y->
init(n, verbose_level);
2662 int *elt1, *elt2, *h_alpha, *elt4, *elt5, *elt6, *elt7;
2705 for (i = n - 1; i >= 0; i--) {
2706 for (j = 0; j < part[i]; j++) {
2707 parts[nb_parts++] = i + 1;
2712 cout <<
"partition ";
2724 for (i = 0; i < n; i++) {
2727 Y->
young_symmetrizer(parts, nb_parts, tableau, elt1, elt2, h_alpha, verbose_level);
2732 cout <<
"h_alpha =" << endl;
2742 cout <<
"h_alpha * h_alpha=" << endl;
2753 Module_Base, base_cols, rk,
2757 cout <<
"Module_Basis=" << endl;
2762 for (i = 0; i < rk; i++) {
2763 for (j = 0; j < Y->
goi; j++) {
2769 Len[cnt] = s - Fst[cnt];
2787 cout <<
"Basis of submodule=" << endl;
2797 cout <<
"before freeing Base" << endl;
2802 cout <<
"before freeing Y" << endl;
2806 cout <<
"before freeing elt1" << endl;
2816 cout <<
"algebra_global_with_action::young_symmetrizer done" << endl;
2822 int f_v = (verbose_level >= 1);
2825 cout <<
"algebra_global_with_action::young_symmetrizer_sym_4" << endl;
2832 Y->
init(n, verbose_level);
2836 int *elt1, *elt2, *h_alpha, *elt4, *elt5, *elt6, *elt7;
2882 int Tableau[10][4] = {
2884 {0,1,2,3}, {0,1,3,2}, {0,2,3,1},
2885 {0,1,2,3}, {0,2,1,3},
2886 {0,1,2,3}, {0,2,1,3}, {0,3,1,2},
2890 for(cnt = 0; cnt < 10; cnt++) {
2896 for (i = 0; i < 4; i++) {
2897 parts[nb_parts] = Part[cnt][i];
2898 if (parts[nb_parts] == -1) {
2905 cout <<
"partition ";
2914 Y->
young_symmetrizer(parts, nb_parts, Tableau[cnt], elt1, elt2, h_alpha, verbose_level);
2918 cout <<
"h_alpha =" << endl;
2928 cout <<
"h_alpha * h_alpha=" << endl;
2939 Module_Base, base_cols, rk,
2943 cout <<
"Module_Basis=" << endl;
2948 for (i = 0; i < rk; i++) {
2949 for (j = 0; j < Y->
goi; j++) {
2954 Len[cnt] = s - Fst[cnt];
2967 cout <<
"Basis of submodule=" << endl;
2977 cout <<
"before freeing Base" << endl;
2982 cout <<
"before freeing Y" << endl;
2986 cout <<
"before freeing elt1" << endl;
2996 cout <<
"algebra_global_with_action::young_symmetrizer_sym_4 done" << endl;
3008 int f_v = (verbose_level >= 1);
3011 cout <<
"algebra_global_with_action::report_tactical_decomposition_by_automorphism_group" << endl;
3021 for (j = 0; j < P->
N_lines; j++) {
3022 for (h = 0; h < P->
k; h++) {
3036 cout <<
"algebra_global_with_action::report_tactical_decomposition_by_automorphism_group "
3037 "allocating partitionstack" << endl;
3058 cout <<
"algebra_global_with_action::report_tactical_decomposition_by_automorphism_group "
3059 "before Inc->compute_TDO_safe" << endl;
3065 if (S.
ht < size_limit_for_printing) {
3066 ost <<
"The TDO decomposition is" << endl;
3072 ost <<
"The TDO decomposition is very large (with "
3073 << S.
ht<<
" classes).\\\\" << endl;
3081 Sch_points->
init(A_on_points, verbose_level - 2);
3087 cout <<
"found " << Sch_points->
nb_orbits
3088 <<
" orbits on points" << endl;
3091 Sch_lines->
init(A_on_lines, verbose_level - 2);
3097 cout <<
"found " << Sch_lines->
nb_orbits
3098 <<
" orbits on lines" << endl;
3112 if (S.
ht < size_limit_for_printing) {
3113 ost <<
"The TDA decomposition is" << endl;
3119 ost <<
"The TDA decomposition is very large (with "
3120 << S.
ht<<
" classes).\\\\" << endl;
3128 cout <<
"algebra_global_with_action::report_tactical_decomposition_by_automorphism_group done" << endl;
3135 int d,
int target_depth,
int verbose_level)
3137 int f_v = (verbose_level >= 1);
3140 cout <<
"algebra_global_with_action::linear_codes_with_bounded_minimum_distance" << endl;
3148 Control->
depth = target_depth;
3152 cout <<
"algebra_global_with_action::linear_codes_with_bounded_minimum_distance group set up, "
3153 "calling gen->init" << endl;
3154 cout <<
"LG->A2->A->f_has_strong_generators="
3165 int independence_value = d - 1;
3179 target_depth, verbose_level);
3182 cout <<
"algebra_global_with_action::linear_codes_with_bounded_minimum_distance before gen->main" << endl;
3190 depth = PC->
main(t0,
3196 cout <<
"algebra_global_with_action::linear_codes_with_bounded_minimum_distance depth = " << depth << endl;
3200 cout <<
"algebra_global_with_action::linear_codes_with_bounded_minimum_distance done" << endl;
3206 std::string &element_description,
3207 std::string &label,
int verbose_level)
3209 int f_v = (verbose_level >= 1);
3214 cout <<
"algebra_global_with_action::centralizer_of_element label=" << label
3215 <<
" element_description=" << element_description << endl;
3218 prefix.assign(A->
label);
3219 prefix.append(
"_elt_");
3220 prefix.append(label);
3232 cout <<
"data_len != A->make_element_size" << endl;
3237 cout <<
"algebra_global_with_action::centralizer_of_element Matrix:" << endl;
3238 int_matrix_print(data, 4, 4);
3248 cout <<
"algebra_global_with_action::centralizer_of_element Elt:" << endl;
3250 cout <<
"algebra_global_with_action::centralizer_of_element on points:" << endl;
3257 cout <<
"algebra_global_with_action::centralizer_of_element "
3258 "the element has order " << o << endl;
3264 cout <<
"algebra_global_with_action::centralizer_of_element "
3265 "before centralizer_using_MAGMA" << endl;
3271 S, Elt, gens, verbose_level);
3275 cout <<
"algebra_global_with_action::centralizer_of_element "
3276 "after centralizer_using_MAGMA" << endl;
3281 cout <<
"generators for the centralizer are:" << endl;
3288 fname.assign(prefix);
3289 fname.append(
"_centralizer.tex");
3296 snprintf(title, 1000,
"Centralizer of element %s", label.c_str());
3302 ofstream ost(fname);
3318 cout <<
"algebra_global_with_action::centralizer_of_element "
3319 "before report" << endl;
3324 cout <<
"algebra_global_with_action::centralizer_of_element "
3325 "after report" << endl;
3335 cout <<
"written file " << fname <<
" of size "
3344 cout <<
"algebra_global_with_action::centralizer_of_element done" << endl;
3350 std::string &element_description,
3351 std::string &label,
int verbose_level)
3353 int f_v = (verbose_level >= 1);
3358 cout <<
"algebra_global_with_action::normalizer_of_cyclic_subgroup label=" << label
3359 <<
" element_description=" << element_description << endl;
3362 prefix.assign(
"normalizer_of_");
3363 prefix.append(label);
3364 prefix.append(
"_in_");
3365 prefix.append(A->
label);
3377 cout <<
"data_len != A->make_element_size" << endl;
3382 cout <<
"algebra_global_with_action::normalizer_of_cyclic_subgroup Matrix:" << endl;
3383 int_matrix_print(data, 4, 4);
3393 cout <<
"algebra_global_with_action::normalizer_of_cyclic_subgroup label=" << label
3394 <<
" element order=" << o << endl;
3398 cout <<
"algebra_global_with_action::normalizer_of_cyclic_subgroup Elt:" << endl;
3401 cout <<
"algebra_global_with_action::normalizer_of_cyclic_subgroup on points:" << endl;
3408 cout <<
"algebra_global_with_action::normalizer_of_cyclic_subgroup "
3409 "the element has order " << o << endl;
3415 cout <<
"algebra_global_with_action::normalizer_of_cyclic_subgroup "
3416 "before normalizer_of_cyclic_group_using_MAGMA" << endl;
3422 S, Elt, gens, verbose_level);
3427 cout <<
"algebra_global_with_action::normalizer_of_cyclic_subgroup "
3428 "after normalizer_of_cyclic_group_using_MAGMA" << endl;
3433 cout <<
"algebra_global_with_action::normalizer_of_cyclic_subgroup "
3434 "generators for the normalizer are:" << endl;
3440 fname.assign(prefix);
3441 fname.append(
".tex");
3448 snprintf(title, 1000,
"Normalizer of cyclic subgroup %s", label.c_str());
3454 ofstream ost(fname);
3470 ost <<
"The subgroup generated by " << endl;
3471 ost <<
"$$" << endl;
3473 ost <<
"$$" << endl;
3474 ost <<
"has order " << o <<
"\\\\" << endl;
3475 ost <<
"The normalizer has order " << go <<
"\\\\" << endl;
3477 cout <<
"algebra_global_with_action::normalizer_of_cyclic_subgroup before report" << endl;
3482 cout <<
"algebra_global_with_action::normalizer_of_cyclic_subgroup after report" << endl;
3492 cout <<
"written file " << fname <<
" of size "
3506 cout <<
"algebra_global_with_action::normalizer_of_cyclic_subgroup done" << endl;
3519 int f_v = (verbose_level >= 1);
3524 cout <<
"algebra_global_with_action::find_subgroups label=" << label
3525 <<
" subgroup_order=" << subgroup_order << endl;
3527 prefix.assign(label);
3528 sprintf(str,
"_find_subgroup_of_order_%d", subgroup_order);
3534 cout <<
"algebra_global_with_action::find_subgroups "
3535 "before find_subgroup_using_MAGMA" << endl;
3541 nb_subgroups, H_gens, N_gens, verbose_level);
3545 cout <<
"algebra_global_with_action::find_subgroups "
3546 "after find_subgroup_using_MAGMA" << endl;
3555 cout <<
"algebra_global_with_action::find_subgroups done" << endl;
3563 int *&relative_order_table,
int verbose_level)
3565 int f_v = (verbose_level >= 1);
3570 int i, drop_out_level, image, order;
3573 cout <<
"algebra_global_with_action::relative_order_vector_of_cosets" << endl;
3583 for (i = 0; i < cosets->
len; i++) {
3587 if (S->
strip(Elt1, Elt2, drop_out_level, image, 0 )) {
3594 relative_order_table[i] = order;
3602 cout <<
"algebra_global_with_action::relative_order_vector_of_cosets done" << endl;
3609 int f_recognize, std::string &recognize_text,
3610 int f_draw_tree,
int draw_tree_idx,
3614 int f_v = (verbose_level >= 1);
3618 cout <<
"algebra_global_with_action::do_orbits_on_polynomials" << endl;
3627 f_recognize, recognize_text,
3636 sprintf(str,
"_orbit_%d_tree", draw_tree_idx);
3648 O->
report(verbose_level);
3654 cout <<
"algebra_global_with_action::do_orbits_on_polynomials done" << endl;
3663 int f_v = (verbose_level >= 1);
3669 cout <<
"algebra_global_with_action::representation_on_polynomials" << endl;
3687 cout <<
"n = " << n << endl;
3691 cout <<
"strong generators:" << endl;
3704 HPD->
init(F, n , degree_of_poly,
3706 Monomial_ordering_type,
3718 cout <<
"created action A2" << endl;
3728 A_on_HPD = A2->
G.
OnHP;
3732 cout <<
"algebra_global_with_action::representation_on_polynomials using nice generators" << endl;
3738 cout <<
"algebra_global_with_action::representation_on_polynomials using strong generators" << endl;
3743 for (i = 0; i < nb_gens; i++) {
3744 cout <<
"matrix " << i <<
" / " << nb_gens <<
":" << endl;
3749 for (i = 0; i < nb_gens; i++) {
3754 fname.assign(LG->
label);
3755 sprintf(str,
"_rep_%d_%d.csv", degree_of_poly, i);
3759 cout <<
"Written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
3762 cout <<
"algebra_global_with_action::representation_on_polynomials done" << endl;
3771 int f_v = (verbose_level >= 1);
3774 cout <<
"algebra_global_with_action::do_eigenstuff_with_coefficients" << endl;
3781 cout <<
"len != n * n " << len << endl;
3791 cout <<
"algebra_global_with_action::do_eigenstuff_with_coefficients done" << endl;
3798 int f_v = (verbose_level >= 1);
3801 cout <<
"algebra_global_with_action::do_eigenstuff_from_file" << endl;
3810 cout <<
"mtx_m != n" << endl;
3814 cout <<
"mtx_n != n" << endl;
3824 cout <<
"algebra_global_with_action::do_eigenstuff_from_file done" << endl;
3838 std::string &prefix,
3842 int f_v = (verbose_level >= 1);
3845 cout <<
"algebra_global_with_action::orbits_on_points" << endl;
3855 cout <<
"algebra_global_with_action::orbits_on_points before Orb->init" << endl;
3864 cout <<
"algebra_global_with_action::orbits_on_points after Orb->init" << endl;
3871 cout <<
"algebra_global_with_action::orbits_on_points done" << endl;
3879 int f_v = (verbose_level >= 1);
3882 cout <<
"algebra_global_with_action::find_singer_cycle" << endl;
3899 int i, d, q, cnt, ord, order;
3903 cout <<
"group_theoretic_activity::find_singer_cycle needs matrix group" << endl;
3913 order = (NT.
i_power_j(q, d) - 1) / (q - 1);
3919 cout <<
"algebra_global_with_action::find_singer_cycle looking for an "
3920 "element of order " << order << endl;
3927 for (i = 0; i < go.
as_int(); i++) {
3934 cout <<
"Element " << setw(5) << i <<
" / "
3935 << go.
as_int() <<
":" << endl;
3936 A->element_print(Elt, cout);
3938 A->element_print_as_permutation(Elt, cout);
3949 cout <<
"Element " << setw(5) << i <<
" / "
3950 << go.
as_int() <<
" = " << cnt <<
":" << endl;
3959 cout <<
"we found " << cnt <<
" group elements of order " << order << endl;
3964 cout <<
"algebra_global_with_action::find_singer_cycle done" << endl;
3970 int order,
int verbose_level)
3972 int f_v = (verbose_level >= 1);
3975 cout <<
"algebra_global_with_action::search_element_of_order" << endl;
3996 for (i = 0; i < go.
as_int(); i++) {
4003 cout <<
"Element " << setw(5) << i <<
" / "
4004 << go.
as_int() <<
":" << endl;
4005 A->element_print(Elt, cout);
4007 A->element_print_as_permutation(Elt, cout);
4015 cout <<
"Element " << setw(5) << i <<
" / "
4016 << go.
as_int() <<
" = " << cnt <<
":" << endl;
4025 cout <<
"we found " << cnt <<
" group elements of order " << order << endl;
4030 cout <<
"algebra_global_with_action::search_element_of_order done" << endl;
4036 int order_a,
int order_b,
int order_ab,
int verbose_level)
4038 int f_v = (verbose_level >= 1);
4041 cout <<
"algebra_global_with_action::find_standard_generators" << endl;
4064 for (i = 0; i < go.
as_int(); i++) {
4071 cout <<
"Element " << setw(5) << i <<
" / "
4072 << go.
as_int() <<
":" << endl;
4073 A->element_print(Elt, cout);
4075 A->element_print_as_permutation(Elt, cout);
4079 if (ord != order_a) {
4083 for (j = 0; j < go.
as_int(); j++) {
4089 if (ord != order_b) {
4097 if (ord != order_ab) {
4102 cout <<
"a = " << setw(5) << i <<
", b=" << setw(5) << j <<
" : " << cnt <<
":" << endl;
4103 cout <<
"a=" << endl;
4108 cout <<
"b=" << endl;
4113 cout <<
"ab=" << endl;
4123 cout <<
"we found " << cnt <<
" group elements with "
4124 "ord_a = " << order_a <<
" ord_b = " << order_b <<
" and ord_ab = " << order_ab << endl;
4131 cout <<
"algebra_global_with_action::find_standard_generators done" << endl;
void copy(int *elt_from, int *elt_to, int verbose_level)
void print_matrix_for_maple(int *A, int m, int n)
int * offset(int *A, int i)
int size_of_instance_in_int
void print_matrix(int *A, int m, int n)
conjugacy class in GL(n,q) described using rational normal form
to list all conjugacy classes in GL(n,q)
void print_matrix_and_centralizer_order_latex(std::ostream &ost, gl_class_rep *R)
void init(int k, field_theory::finite_field *F, int verbose_level)
void make_classes(gl_class_rep *&R, int &nb_classes, int f_no_eigenvalue_one, int verbose_level)
field_theory::finite_field * F
void report(std::ostream &ost, int verbose_level)
void make_matrix_from_class_rep(int *Mtx, gl_class_rep *R, int verbose_level)
int find_class_rep(gl_class_rep *Reps, int nb_reps, gl_class_rep *R, int verbose_level)
void identify_matrix(int *Mtx, gl_class_rep *R, int *Basis, int verbose_level)
a collection of combinatorial functions
void perm_print_offset(std::ostream &ost, int *a, int n, int offset, int f_print_cycles_of_length_one, int f_cycle_length, int f_max_cycle_length, int max_cycle_length, int f_orbit_structure, void(*point_label)(std::stringstream &sstr, long int pt, void *data), void *point_label_data)
int partition_first(int *v, int n)
int partition_next(int *v, int n)
data structure for set partitions following Jeffrey Leon
void subset_continguous(int from, int len)
void split_cell(int verbose_level)
void split_cell_front_or_back(int *set, int set_size, int f_front, int verbose_level)
void split_by_orbit_partition(int nb_orbits, int *orbit_first, int *orbit_len, int *orbit, int offset, int verbose_level)
void allocate(int n, int verbose_level)
a collection of functions related to sorted vectors
int int_vec_search(int *v, int len, int a, int &idx)
void lint_vec_heapsort_with_log(long int *v, long int *w, int len)
int lint_vec_search(long int *v, int len, long int a, int &idx, int verbose_level)
a statistical analysis of data consisting of single integers
void print_file_tex(std::ostream &ost, int f_backwards)
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_array_tex(std::ostream &ost, int f_backwards)
void PG_element_rank_modified(int *v, int stride, int len, int &a)
void PG_element_normalize_from_front(int *v, int stride, int len)
void finite_field_init(int q, int f_without_tables, int verbose_level)
void init_override_polynomial(int q, std::string &poly, int f_without_tables, int verbose_level)
linear_algebra::linear_algebra * Linear_algebra
interface for various incidence geometries
void get_and_print_column_tactical_decomposition_scheme_tex(std::ostream &ost, int f_enter_math, int f_print_subscripts, data_structures::partitionstack &PStack)
void init_by_matrix(int m, int n, int *M, int verbose_level)
void compute_TDO_safe(data_structures::partitionstack &PStack, int depth, int verbose_level)
projective space PG(n,q) of dimension n over Fq
projective_space_implementation * Implementation
options for drawing an object of type layered_graph
void mult_vector_from_the_left(int *v, int *A, int *vA, int m, int n)
int Gauss_int(int *A, int f_special, int f_complete, int *base_cols, int f_P, int *P, int m, int n, int Pn, int verbose_level)
void random_invertible_matrix(int *M, int k, int verbose_level)
void transpose_matrix(int *A, int *At, int ma, int na)
void matrix_get_kernel(int *M, int m, int n, int *base_cols, int nb_base_cols, int &kernel_m, int &kernel_n, int *kernel, int verbose_level)
basic number theoretic functions
int i_power_j(int i, int j)
void factor_prime_power(int q, int &p, int &e)
a collection of functions related to file io
void int_matrix_write_csv(std::string &fname, int *M, int m, int n)
void lint_matrix_write_csv(std::string &fname, long int *M, int m, int n)
void int_matrix_read_csv(std::string &fname, int *&M, int &m, int &n, int verbose_level)
long int file_size(std::string &fname)
interface to create latex output files
void head_easy(std::ostream &ost)
void print_integer_matrix_tex_block_by_block(std::ostream &ost, int *p, int m, int n, int block_width)
void head(std::ostream &ost, int f_book, int f_title, const char *title, const char *author, int f_toc, int f_landscape, int f_12pt, int f_enlarged_page, int f_pagenumbers, const char *extras_for_preamble)
void foot(std::ostream &ost)
interface to system functions
homogeneous polynomials of a given degree in a given number of variables over a finite field GF(q)
void init(field_theory::finite_field *F, int nb_vars, int degree, int f_init_incidence_structure, monomial_ordering_type Monomial_ordering_type, int verbose_level)
a class to represent arbitrary precision integers
domain of polynomials in one variable over a finite field
int substitute_scalar_in_polynomial(unipoly_object &p, int scalar, int verbose_level)
void delete_object(unipoly_object &p)
void create_object_by_rank(unipoly_object &p, long int rk, const char *file, int line, int verbose_level)
void characteristic_polynomial(int *Mtx, int k, unipoly_object &char_poly, int verbose_level)
void print_object(unipoly_object p, std::ostream &ost)
DISCRETA base class. All DISCRETA classes are derived from this class.
void mult(discreta_base &x, discreta_base &y)
discreta_base & power_int(int l)
discreta_matrix & m_mn(int m, int n)
void smith_normal_form(discreta_matrix &P, discreta_matrix &Pv, discreta_matrix &Q, discreta_matrix &Qv, int verbose_level)
discreta_matrix & m_mn_n(int m, int n)
discreta_base & s_ij(int i, int j)
void elements_to_unipoly()
void m_iji(int i, int j, int a)
void copyobject_to(discreta_base &x)
DISCRETA class for influencing arithmetic operations.
int compare_with(discreta_base &a)
DISCRETA class for polynomials in one variable.
void Singer(int p, int f, int verbose_level)
void get_an_irreducible_polynomial(int f, int verbose_level)
void evaluate_at(discreta_base &x, discreta_base &y)
DISCRETA class related to class domain.
a permutation group in a fixed action.
void element_print_latex(void *elt, std::ostream &ost)
void centralizer_using_MAGMA(std::string &prefix, groups::sims *G, int *Elt, groups::strong_generators *&gens, int verbose_level)
action * restricted_action(long int *points, int nb_points, int verbose_level)
void element_print_quick(void *elt, std::ostream &ost)
void init_general_linear_group(int n, field_theory::finite_field *F, int f_semilinear, int f_basis, int f_init_sims, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void element_print(void *elt, std::ostream &ost)
void mult(void *a, void *b, void *ab)
void element_mult(void *a, void *b, void *ab, int verbose_level)
void normalizer_of_cyclic_group_using_MAGMA(std::string &fname_magma_prefix, groups::sims *G, int *Elt, groups::strong_generators *&gens_N, int verbose_level)
void element_print_for_make_element(void *elt, std::ostream &ost)
void find_subgroups_using_MAGMA(std::string &prefix, groups::sims *override_Sims, int subgroup_order, int &nb_subgroups, groups::strong_generators *&H_gens, groups::strong_generators *&N_gens, int verbose_level)
groups::strong_generators * Strong_gens
int f_has_strong_generators
void init_projective_group(int n, field_theory::finite_field *F, int f_semilinear, int f_basis, int f_init_sims, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void element_invert(void *a, void *av, int verbose_level)
void element_one(void *elt, int verbose_level)
int matrix_group_dimension()
field_theory::finite_field * matrix_group_finite_field()
void element_power_int_in_place(int *Elt, int n, int verbose_level)
void make_element(int *Elt, int *data, int verbose_level)
void element_move(void *a, void *b, int verbose_level)
void induced_action_on_homogeneous_polynomials(action *A_old, ring_theory::homogeneous_polynomial_domain *HPD, int f_induce_action, groups::sims *old_G, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
void induced_action_by_conjugation(groups::sims *old_G, groups::sims *Base_group, int f_ownership, int f_basis, int verbose_level)
groups::matrix_group * get_matrix_group()
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 invert(void *a, void *av)
void element_print_as_permutation(void *elt, std::ostream &ost)
groups::sims * create_sims_for_centralizer_of_matrix(int *Mtx, int verbose_level)
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 matrix_representation(induced_actions::action_on_homogeneous_polynomials *A_on_HPD, int *&M, int &nb_gens, int verbose_level)
void write_to_csv_file_coded(std::string &fname, int verbose_level)
void allocate(int length, int verbose_level)
void init(actions::action *A, int verbose_level)
creates a linear group from command line arguments using linear_group_description
strong_generators * Strong_gens
data_structures_groups::vector_ge * nice_gens
actions::action * A_linear
a matrix group over a finite field in projective, vector space or affine action
int has_shape_of_singer_cycle(int *Elt)
field_theory::finite_field * GFq
compute orbits of a group in a given action; allows file io
void init(actions::action *A, strong_generators *SG, int f_load_save, std::string &prefix, int verbose_level)
Schreier trees for orbits of groups on points.
void compute_all_point_orbits(int verbose_level)
void draw_tree(std::string &fname, graphics::layered_graph_draw_options *Opt, int orbit_no, int f_has_point_labels, long int *point_labels, int verbose_level)
strong_generators * stabilizer_orbit_rep(actions::action *default_action, ring_theory::longinteger_object &full_group_order, int orbit_idx, 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 init(actions::action *A, int verbose_level)
a permutation group represented via a stabilizer chain
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)
void element_unrank_lint(long int rk, int *Elt, int verbose_level)
long int element_rank_lint(int *Elt)
int strip(int *elt, int *residue, int &drop_out_level, int &image, int verbose_level)
long int group_order_lint()
a strong generating set for a permutation group with respect to a fixed action
void init_centralizer_of_matrix_general_linear(actions::action *A_projective, actions::action *A_general_linear, int *Mtx, int verbose_level)
void init(actions::action *A)
sims * create_sims(int verbose_level)
void print_generators_tex()
long int group_order_as_lint()
void init_centralizer_of_matrix(actions::action *A, int *Mtx, int verbose_level)
void init_group_extension(strong_generators *subgroup, int *data, int index, int verbose_level)
data_structures_groups::vector_ge * gens
void group_order(ring_theory::longinteger_object &go)
induced action on the set of homogeneous polynomials over a finite field
orbit of sets using a Schreier tree, used in packing::make_spread_table
void make_table_of_coset_reps(data_structures_groups::vector_ge *&Coset_reps, int verbose_level)
void get_table_of_orbits_and_hash_values(long int *&Table, int &orbit_length, int &set_size, int verbose_level)
void get_table_of_orbits(long int *&Table, int &orbit_length, int &set_size, int verbose_level)
void init(actions::action *A, actions::action *A2, long int *set, int sz, data_structures_groups::vector_ge *gens, int verbose_level)
to control the behavior of the poset classification algorithm
the poset classification algorithm
void initialize_and_allocate_root_node(poset_classification_control *PC_control, poset_with_group_action *Poset, int depth, int verbose_level)
int main(int t0, int schreier_depth, int f_use_invariant_subset_if_available, int f_debug, int verbose_level)
a poset with a group action on it
void * print_function_data
void init_subset_lattice(actions::action *A, actions::action *A2, groups::strong_generators *Strong_gens, int verbose_level)
void add_independence_condition(int independence_value, int verbose_level)
void(* print_function)(std::ostream &ost, int len, long int *S, void *data)
group theoretic functions which require an action
void report_tactical_decomposition_by_automorphism_group(std::ostream &ost, geometry::projective_space *P, actions::action *A_on_points, actions::action *A_on_lines, groups::strong_generators *gens, int size_limit_for_printing, int verbose_level)
void relative_order_vector_of_cosets(actions::action *A, groups::strong_generators *SG, data_structures_groups::vector_ge *cosets, int *&relative_order_table, int verbose_level)
void A5_in_PSL_2_q(int q, layer2_discreta::discreta_matrix &A, layer2_discreta::discreta_matrix &B, layer2_discreta::domain *dom_GFq, int verbose_level)
void do_orbits_on_polynomials(groups::linear_group *LG, int degree_of_poly, int f_recognize, std::string &recognize_text, int f_draw_tree, int draw_tree_idx, graphics::layered_graph_draw_options *Opt, int verbose_level)
void create_subgroups(groups::strong_generators *SG, long int *the_set, int set_size, groups::sims *S, actions::action *A_conj, groups::schreier *Classes, data_structures_groups::vector_ge *Transporter, int verbose_level)
void centralizer(int q, int d, int elt_idx, int verbose_level)
int proj_order(layer2_discreta::discreta_matrix &A)
void search_element_of_order(any_group *Any_group, actions::action *A1, actions::action *A2, int order, int verbose_level)
void do_identify_one(int q, int d, int f_no_eigenvalue_one, int elt_idx, int verbose_level)
void find_singer_cycle(any_group *Any_group, actions::action *A1, actions::action *A2, int verbose_level)
void do_eigenstuff_with_coefficients(field_theory::finite_field *F, int n, std::string &coeffs_text, int verbose_level)
void compute_regular_representation(actions::action *A, groups::sims *S, data_structures_groups::vector_ge *SG, int *&perm, int verbose_level)
void representation_on_polynomials(groups::linear_group *LG, int degree_of_poly, int verbose_level)
void do_eigenstuff_from_file(field_theory::finite_field *F, int n, std::string &fname, int verbose_level)
void do_eigenstuff(field_theory::finite_field *F, int size, int *Data, int verbose_level)
void do_normal_form(int q, int d, int f_no_eigenvalue_one, int *data, int data_sz, int verbose_level)
void find_subgroups(actions::action *A, groups::sims *S, int subgroup_order, std::string &label, int &nb_subgroups, groups::strong_generators *&H_gens, groups::strong_generators *&N_gens, int verbose_level)
void A5_in_PSL_2_q_easy(int q, layer2_discreta::discreta_matrix &A, layer2_discreta::discreta_matrix &B, layer2_discreta::domain *dom_GFq, int verbose_level)
void orbits_on_set_from_file(long int *the_set, int set_size, actions::action *A1, actions::action *A2, data_structures_groups::vector_ge *gens, std::string &label_set, std::string &label_group, long int *&Table, int &orbit_length, int verbose_level)
void A5_in_PSL_2_q_hard(int q, layer2_discreta::discreta_matrix &A, layer2_discreta::discreta_matrix &B, layer2_discreta::domain *dom_GFq, int verbose_level)
void presentation(actions::action *A, groups::sims *S, int goi, data_structures_groups::vector_ge *gens, int *primes, int verbose_level)
void linear_codes_with_bounded_minimum_distance(poset_classification::poset_classification_control *Control, groups::linear_group *LG, int d, int target_depth, int verbose_level)
void normalizer_of_cyclic_subgroup(actions::action *A, groups::sims *S, std::string &element_description, std::string &label, int verbose_level)
void group_table(int q, int d, int f_poly, std::string &poly, int f_no_eigenvalue_one, int verbose_level)
void trace(layer2_discreta::discreta_matrix &A, layer2_discreta::discreta_base &tr)
void do_random(int q, int d, int f_no_eigenvalue_one, int verbose_level)
void conjugacy_classes_based_on_normal_forms(actions::action *A, groups::sims *override_Sims, std::string &label, std::string &label_tex, int verbose_level)
void orbits_under_conjugation(long int *the_set, int set_size, groups::sims *S, groups::strong_generators *SG, data_structures_groups::vector_ge *Transporter, int verbose_level)
void young_symmetrizer_sym_4(int verbose_level)
void centralizer_brute_force(int q, int d, int elt_idx, int verbose_level)
void matrix_convert_to_numerical(layer2_discreta::discreta_matrix &A, int *AA, int q)
void do_identify_all(int q, int d, int f_no_eigenvalue_one, int verbose_level)
void centralizer_of_element(actions::action *A, groups::sims *S, std::string &element_description, std::string &label, int verbose_level)
void young_symmetrizer(int n, int verbose_level)
void classes_GL(field_theory::finite_field *F, int d, int f_no_eigenvalue_one, int verbose_level)
void elementwise_power_int(layer2_discreta::discreta_matrix &A, int k)
void orbits_on_points(actions::action *A2, groups::strong_generators *Strong_gens, int f_load_save, std::string &prefix, groups::orbits_on_something *&Orb, int verbose_level)
void A5_in_PSL_(int q, int verbose_level)
int is_in_center(layer2_discreta::discreta_matrix &B)
void find_standard_generators(any_group *Any_group, actions::action *A1, actions::action *A2, int order_a, int order_b, int order_ab, int verbose_level)
a wrapper for linear_group and permutation_group_create
groups::strong_generators * get_strong_generators()
orbits of a group on polynomials using Schreier orbits
void report(int verbose_level)
void init(groups::linear_group *LG, int degree_of_poly, int f_recognize, std::string &recognize_text, int verbose_level)
The Young representations of the symmetric group.
void create_module(int *h_alpha, int *&Base, int *&base_cols, int &rk, int verbose_level)
void group_ring_element_mult(actions::action *A, groups::sims *S, int *elt1, int *elt2, int *elt3)
void init(int n, int verbose_level)
void create_representations(int *Base, int *Base_inv, int rk, int verbose_level)
void group_ring_element_print(actions::action *A, groups::sims *S, int *elt)
void group_ring_element_copy(actions::action *A, groups::sims *S, int *elt_from, int *elt_to)
void young_symmetrizer(int *row_parts, int nb_row_parts, int *tableau, int *elt1, int *elt2, int *elt3, int verbose_level)
void group_ring_element_create(actions::action *A, groups::sims *S, int *&elt)
#define Lint_vec_copy(A, B, C)
#define Int_vec_scan(A, B, C)
#define Int_vec_zero(A, B)
#define Int_vec_print_integer_matrix_width(A, B, C, D, E, F)
#define Int_matrix_print(A, B, C)
#define Int_vec_print(A, B, C)
domain * allocate_finite_field_domain(int q, int verbose_level)
int finite_field_domain_primitive_root()
void free_finite_field_domain(domain *dom)
the orbiter library for the classification of combinatorial objects
induced_actions::action_on_homogeneous_polynomials * OnHP