15namespace layer3_group_actions {
21 std::string &fname_magma_prefix,
25 int f_v = (verbose_level >= 1);
31 cout <<
"action::normalizer_using_MAGMA" << endl;
34 fname_magma.assign(fname_magma_prefix);
35 fname_magma.append(
".magma");
36 fname_output.assign(fname_magma_prefix);
37 fname_output.append(
".txt");
52 cout <<
"action::normalizer_using_MAGMA n = " << n << endl;
55 ofstream fp(fname_magma);
57 fp <<
"G := PermutationGroup< " << n <<
" | " << endl;
62 fp <<
"H := sub< G |" << endl;
66 fp <<
"N := Normalizer(G, H);" << endl;
67 fp <<
"SetOutputFile(\"" << fname_output <<
"\");" << endl;
68 fp <<
"printf \"%o\", #N; printf \"\\n\";" << endl;
69 fp <<
"printf \"%o\", #Generators(N); printf \"\\n\";" << endl;
70 fp <<
"for h := 1 to #Generators(N) do for i := 1 to "
71 << n <<
" do printf \"%o\", i^N.h; printf \" \"; "
72 "if i mod 25 eq 0 then printf \"\n\"; end if; "
73 "end for; printf \"\\n\"; end for;" << endl;
74 fp <<
"UnsetOutputFile();" << endl;
82 cout <<
"please run magma on the file " << fname_magma << endl;
83 cout <<
"for instance, try" << endl;
89 cout <<
"file " << fname_output <<
" exists, reading it" << endl;
97 cout <<
"action::normalizer_using_MAGMA" << endl;
100 ifstream fp(fname_output);
105 cout <<
"action::normalizer_using_MAGMA We found " << nb_gens
106 <<
" generators for a group of order " << go << endl;
111 for (i = 0; i < nb_gens; i++) {
112 for (j = 0; j <
degree; j++) {
113 fp >> perms[i *
degree + j];
117 cout <<
"action::normalizer_using_MAGMA we read all "
118 "generators from file " << fname_output << endl;
121 for (i = 0; i < nb_gens *
degree; i++) {
130 cout <<
"action::normalizer_using_MAGMA "
131 "before gens->init_from_permutation_"
132 "representation" << endl;
139 nb_gens, go, nice_gens,
142 cout <<
"action::normalizer_using_MAGMA "
143 "after gens->init_from_permutation_"
144 "representation" << endl;
148 cout <<
"action::normalizer_using_MAGMA "
149 "after gens->init_from_permutation_representation gens_N=" << endl;
156 cout <<
"action::normalizer_using_MAGMA done" << endl;
163 int f_v = (verbose_level >= 1);
168 cout <<
"action::conjugacy_classes_using_MAGMA" << endl;
171 fname_magma.assign(prefix);
172 fname_magma.append(
"conjugacy_classes.magma");
173 fname_output.assign(prefix);
174 fname_output.append(
"conjugacy_classes.txt");
185 cout <<
"action::conjugacy_classes_using_MAGMA n = " << n << endl;
188 ofstream fp(fname_magma);
190 fp <<
"G := PermutationGroup< " << n <<
" | " << endl;
195 fp <<
"C := ConjugacyClasses(G);" << endl;
197 fp <<
"SetOutputFile(\"" << fname_output <<
"\");" << endl;
198 fp <<
"printf \"%o\", #C; printf \"\\n\";" << endl;
199 fp <<
"for h := 1 to #C do printf \"%o\", C[h][1]; printf \" \";"
200 "printf \"%o\", C[h][2]; printf \" \"; for i := 1 to "
201 << n <<
" do printf \"%o\", i^C[h][3]; printf \" \"; end for; "
202 "printf \"\\n\"; end for;" << endl;
203 fp <<
"UnsetOutputFile();" << endl;
213 cout <<
"please run magma on the file " << fname_magma << endl;
214 cout <<
"for instance, try" << endl;
225 cout <<
"action::conjugacy_classes_using_MAGMA done" << endl;
244void action::read_conjugacy_classes_from_MAGMA(
249 int *&class_order_of_element,
252 int f_v = (verbose_level >= 1);
256 cout <<
"action::read_conjugacy_classes_from_MAGMA" << endl;
263 cout <<
"action::read_conjugacy_classes_from_MAGMA "
264 "We found " << nb_classes
265 <<
" conjugacy classes" << endl;
269 class_size =
NEW_int(nb_classes);
270 class_order_of_element =
NEW_int(nb_classes);
272 for (i = 0; i < nb_classes; i++) {
273 fp >> class_order_of_element[i];
275 for (j = 0; j <
degree; j++) {
276 fp >> perms[i *
degree + j];
280 cout <<
"action::read_conjugacy_classes_from_MAGMA "
281 "we read all class representatives "
282 "from file " << fname << endl;
285 for (i = 0; i < nb_classes *
degree; i++) {
289 cout <<
"action::read_conjugacy_classes_from_MAGMA done" << endl;
296 std::string &fname_magma, std::string &fname_output)
298 fname_magma.assign(prefix);
299 fname_magma.append(
"_classes.magma");
300 fname_output.assign(prefix);
301 fname_output.append(
"_classes_out.txt");
308 int f_v = (verbose_level >= 1);
313 cout <<
"action::conjugacy_classes_and_normalizers_using_MAGMA" << endl;
317 cout <<
"action::conjugacy_classes_and_normalizers_using_MAGMA, fname_magma = " << fname_magma << endl;
318 cout <<
"action::conjugacy_classes_and_normalizers_using_MAGMA, fname_output = " << fname_output << endl;
327 cout <<
"action::conjugacy_classes_and_normalizers_using_MAGMA before G_gen->init_from_sims" << endl;
331 cout <<
"action::conjugacy_classes_and_normalizers_using_MAGMA after G_gen->init_from_sims" << endl;
336 cout <<
"action::conjugacy_classes_and_normalizers_using_MAGMA n = " << n << endl;
337 cout <<
"action::conjugacy_classes_and_normalizers_using_MAGMA fname_magma = " << fname_magma << endl;
338 cout <<
"action::conjugacy_classes_and_normalizers_using_MAGMA fname_output = " << fname_output << endl;
341 ofstream fp(fname_magma);
343 fp <<
"G := PermutationGroup< " << n <<
" | " << endl;
349 fp <<
"C := ConjugacyClasses(G);" << endl;
350 fp <<
"SetOutputFile(\"" << fname_output <<
"\");" << endl;
351 fp <<
"printf \"%o\", #C; printf \"\\n\";" << endl;
352 fp <<
"for h := 1 to #C do" << endl;
353 fp <<
" printf \"%o\", C[h][1]; printf \" \";" << endl;
354 fp <<
" printf \"%o\", C[h][2]; printf \" \";" << endl;
355 fp <<
" for i := 1 to " << n <<
" do" << endl;
356 fp <<
" printf \"%o\", i^C[h][3]; printf \" \";" << endl;
357 fp <<
" end for; " << endl;
358 fp <<
" printf \"\\n\";" << endl;
359 fp <<
"end for;" << endl;
362 fp <<
"for h := 1 to #C do" << endl;
363 fp <<
" S := sub< G | C[h][3]>;" << endl;
364 fp <<
" N := Normalizer(G, S);";
365 fp <<
" printf \"%o\", #N;" << endl;
366 fp <<
" printf \"\\n\";" << endl;
367 fp <<
" printf \"%o\", #Generators(N); printf \"\\n\";" << endl;
368 fp <<
" for g in Generators(N) do " << endl;
369 fp <<
" for i := 1 to " << n <<
" do " << endl;
370 fp <<
" printf \"%o\", i^g; printf \" \";" << endl;
371 fp <<
" end for;" << endl;
372 fp <<
" printf \"\\n\";" << endl;
373 fp <<
" end for;" << endl;
374 fp <<
"end for;" << endl;
375 fp <<
"UnsetOutputFile();" << endl;
384 cout <<
"please run magma on the file " << fname_magma << endl;
385 cout <<
"for instance, try" << endl;
392 cout <<
"command ConjugacyClasses in MAGMA has finished" << endl;
402 cout <<
"action::conjugacy_classes_and_normalizers_using_MAGMA done" << endl;
419 int *&class_order_of_element,
420 long int *&class_normalizer_order,
421 int *&class_normalizer_number_of_generators,
422 int **&normalizer_generators_perms,
425 int f_v = (verbose_level >= 1);
429 cout <<
"action::read_conjugacy_classes_and_normalizers_from_MAGMA" << endl;
430 cout <<
"action::read_conjugacy_classes_and_normalizers_from_MAGMA fname=" << fname << endl;
431 cout <<
"action::read_conjugacy_classes_and_normalizers_from_MAGMA degree=" <<
degree << endl;
438 cout <<
"action::read_conjugacy_classes_and_normalizers_from_MAGMA "
439 "We found " << nb_classes
440 <<
" conjugacy classes" << endl;
444 class_size =
NEW_int(nb_classes);
445 class_order_of_element =
NEW_int(nb_classes);
447 for (i = 0; i < nb_classes; i++) {
448 fp >> class_order_of_element[i];
450 cout <<
"action::read_conjugacy_classes_and_normalizers_from_MAGMA "
451 "class " << i <<
" / " << nb_classes <<
" order=" << class_order_of_element[i] << endl;
454 for (j = 0; j <
degree; j++) {
455 fp >> perms[i *
degree + j];
459 cout <<
"perms:" << endl;
462 for (i = 0; i < nb_classes *
degree; i++) {
466 class_normalizer_order =
NEW_lint(nb_classes);
467 class_normalizer_number_of_generators =
NEW_int(nb_classes);
468 normalizer_generators_perms =
NEW_pint(nb_classes);
471 cout <<
"action::read_conjugacy_classes_and_normalizers_from_MAGMA "
472 "reading normalizer generators:" << endl;
474 for (i = 0; i < nb_classes; i++) {
476 cout <<
"action::read_conjugacy_classes_and_normalizers_from_MAGMA "
477 "class " << i <<
" / " << nb_classes << endl;
479 fp >> class_normalizer_order[i];
481 cout <<
"action::read_conjugacy_classes_and_normalizers_from_MAGMA class " << i <<
" class_normalizer_order[i]=" << class_normalizer_order[i] << endl;
483 if (class_normalizer_order[i] <= 0) {
484 cout <<
"action::read_conjugacy_classes_and_normalizers_from_MAGMA class_normalizer_order[i] <= 0" << endl;
485 cout <<
"class_normalizer_order[i]=" << class_normalizer_order[i] << endl;
489 cout <<
"action::read_conjugacy_classes_and_normalizers_from_MAGMA "
490 "class " << i <<
" / " << nb_classes <<
" class_normalizer_order[i]=" << class_normalizer_order[i] << endl;
492 fp >> class_normalizer_number_of_generators[i];
493 normalizer_generators_perms[i] =
495 for (h = 0; h < class_normalizer_number_of_generators[i]; h++) {
496 for (j = 0; j <
degree; j++) {
497 fp >> normalizer_generators_perms[i][h *
degree + j];
500 for (h = 0; h < class_normalizer_number_of_generators[i] *
degree; h++) {
501 normalizer_generators_perms[i][h]--;
505 cout <<
"action::read_conjugacy_classes_and_normalizers_from_MAGMA "
506 "we read all class representatives "
507 "from file " << fname << endl;
511 cout <<
"action::read_conjugacy_classes_and_normalizers_from_MAGMA done" << endl;
520 int f_v = (verbose_level >= 1);
523 cout <<
"action::normalizer_of_cyclic_group_using_MAGMA" << endl;
529 cout <<
"action::normalizer_of_cyclic_group_using_MAGMA "
530 "before H->init_cyclic_group_from_generator" << endl;
534 cout <<
"action::normalizer_of_cyclic_group_using_MAGMA "
535 "after H->init_cyclic_group_from_generator" << endl;
539 cout <<
"action::normalizer_of_cyclic_group_using_MAGMA "
540 "before normalizer_using_MAGMA" << endl;
547 cout <<
"action::normalizer_of_cyclic_group_using_MAGMA "
548 "after normalizer_using_MAGMA" << endl;
552 cout <<
"action::normalizer_of_cyclic_group_using_MAGMA done" << endl;
560 int f_v = (verbose_level >= 1);
566 cout <<
"action::centralizer_using_MAGMA" << endl;
569 fname_magma.assign(prefix);
570 fname_magma.append(
"_centralizer.magma");
571 fname_output.assign(prefix);
572 fname_output.append(
"_centralizer.txt");
577 gens, verbose_level);
581 cout <<
"action::centralizer_using_MAGMA before "
582 "centralizer_using_magma2" << endl;
585 override_Sims, Elt, verbose_level);
587 cout <<
"action::centralizer_using_MAGMA after "
588 "centralizer_using_magma2" << endl;
592 cout <<
"action::centralizer_using_MAGMA done" << endl;
600 int f_v = (verbose_level >= 1);
601 int number_of_generators;
602 int *generator_perms;
606 cout <<
"action::read_centralizer_magma" << endl;
609 ifstream fp(fname_output);
612 fp >> number_of_generators;
614 for (h = 0; h < number_of_generators; h++) {
615 for (j = 0; j <
degree; j++) {
616 fp >> generator_perms[h *
degree + j];
619 for (h = 0; h < number_of_generators *
degree; h++) {
620 generator_perms[h]--;
632 number_of_generators, goi, nice_gens,
638 cout <<
"action::read_centralizer_magma "
639 "after gens->init_from_permutation_representation" << endl;
640 cout <<
"centralizer order = " << goi
642 cout <<
"action::read_centralizer_magma created generators for a group" << endl;
646 cout <<
"action::read_centralizer_magma "
647 "The group has order " << go1 << endl;
654 cout <<
"action::read_centralizer_magma done" << endl;
659 std::string &fname_magma,
660 std::string &fname_output,
661 groups::sims *override_Sims,
int *Elt,
int verbose_level)
663 int f_v = (verbose_level >= 1);
667 cout <<
"action::centralizer_using_magma2" << endl;
677 cout <<
"action::centralizer_using_magma2 n = " << n << endl;
680 ofstream fp(fname_magma);
682 fp <<
"G := PermutationGroup< " << n <<
" | " << endl;
692 fp <<
"C := Centralizer(G, h);" << endl;
694 fp <<
"SetOutputFile(\"" << fname_output <<
"\");" << endl;
695 fp <<
"printf \"%o\", #C; printf \"\\n\";" << endl;
696 fp <<
"printf \"%o\", #Generators(C); printf \"\\n\";" << endl;
697 fp <<
"for h := 1 to #Generators(C) do for i := 1 to "
698 << n <<
" do printf \"%o\", i^C.h; printf \" \"; end for;"
699 " printf \"\\n\"; end for;" << endl;
700 fp <<
"UnsetOutputFile();" << endl;
702 cout <<
"Written file " << fname_magma
703 <<
" of size " << Fio.
file_size(fname_magma) << endl;
711 cout <<
"please run magma on the file " << fname_magma << endl;
712 cout <<
"for instance, try" << endl;
718 cout <<
"command centralizer in MAGMA has finished" << endl;
723 cout <<
"action::centralizer_using_magma2 done" << endl;
735 int f_v = (verbose_level >= 1);
741 cout <<
"action::find_subgroups_using_MAGMA" << endl;
743 fname_magma.assign(prefix);
744 fname_magma.append(
"_subgroup.magma");
746 fname_output.assign(prefix);
747 fname_output.append(
"_subgroup.txt");
752 nb_subgroups, H_gens, N_gens, verbose_level);
756 cout <<
"action::find_subgroups_using_MAGMA before "
757 "find_subgroups_using_MAGMA2" << endl;
760 override_Sims, subgroup_order,
763 cout <<
"action::find_subgroups_using_MAGMA after "
764 "find_subgroups_using_MAGMA2" << endl;
766 cout <<
"please run the magma file " << fname_magma
767 <<
", retrieve the output file " << fname_output
768 <<
" and come back" << endl;
771 cout <<
"action::find_subgroups_using_MAGMA done" << endl;
782 int f_v = (verbose_level >= 1);
787 cout <<
"action::read_subgroups_magma" << endl;
791 ifstream fp(fname_output);
801 for (u = 0; u < nb_subgroups; u++) {
803 int *generator_perms;
804 int number_of_generators;
806 fp >> number_of_generators;
808 for (h = 0; h < number_of_generators; h++) {
809 for (j = 0; j <
degree; j++) {
810 fp >> generator_perms[h *
degree + j];
813 for (h = 0; h < number_of_generators *
degree; h++) {
814 generator_perms[h]--;
824 number_of_generators, subgroup_order, nice_gens,
830 cout <<
"action::read_subgroups_magma "
831 "after gens->init_from_permutation_representation" << endl;
832 cout <<
"group order = " << subgroup_order
834 cout <<
"action::read_centralizer_magma created generators for a group" << endl;
838 cout <<
"action::read_subgroups_magma "
839 "The group H[" << u <<
"] has order " << go1 << endl;
849 for (u = 0; u < nb_subgroups; u++) {
851 int *generator_perms;
852 int number_of_generators;
856 fp >> number_of_generators;
858 for (h = 0; h < number_of_generators; h++) {
859 for (j = 0; j <
degree; j++) {
860 fp >> generator_perms[h *
degree + j];
863 for (h = 0; h < number_of_generators *
degree; h++) {
864 generator_perms[h]--;
874 number_of_generators, goi, nice_gens,
880 cout <<
"action::read_subgroups_magma "
881 "after gens->init_from_permutation_representation" << endl;
882 cout <<
"group order = " << subgroup_order
884 cout <<
"action::read_centralizer_magma created generators for a group" << endl;
888 cout <<
"action::read_subgroups_magma "
889 "The group N[" << u <<
"] has order " << go1 << endl;
902 cout <<
"action::read_subgroups_magma done" << endl;
907 std::string &fname_magma, std::string &fname_output,
911 int f_v = (verbose_level >= 1);
916 cout <<
"action::find_subgroups_using_MAGMA2" << endl;
928 cout <<
"action::find_subgroups_using_MAGMA2 n = " << n << endl;
931 ofstream fp(fname_magma);
933 fp <<
"G := PermutationGroup< " << n <<
" | " << endl;
939 fp <<
"Subgroups:=ElementaryAbelianSubgroups(G: OrderEqual:=" << subgroup_order <<
");" << endl;
940 fp <<
"Indicator:=[true: i in [1..#Subgroups]];" << endl;
943 fp <<
"if #Subgroups ge 1 then" << endl;
944 fp <<
"for i in [1..# Subgroups] do" << endl;
945 fp <<
"H:= Subgroups[i]`subgroup;" << endl;
946 fp <<
"f:=NumberingMap(H);" << endl;
947 fp <<
"g:=Inverse(f);" << endl;
948 fp <<
"for j in [1..Order(H)] do" << endl;
949 fp <<
"if Order(Centralizer(G, G!g(j))) eq 368640 then" << endl;
950 fp <<
"Indicator[i]:=false;" << endl;
951 fp <<
"end if;" << endl;
952 fp <<
"end for;" << endl;
953 fp <<
"end for;" << endl;
954 fp <<
"end if;" << endl;
958 fp <<
"SetOutputFile(\"" << fname_output <<
"\");" << endl;
960 fp <<
"S:= [j: j in [1..#Subgroups]|Indicator[j]];" << endl;
963 fp <<
"for i in S do" << endl;
964 fp <<
"gens:=FewGenerators(Subgroups[i]`subgroup);" << endl;
965 fp <<
"#gens;" << endl;
966 fp <<
"for g in gens do" << endl;
967 fp <<
"for k in [1..Degree(G)] do" << endl;
968 fp <<
" printf \"%o\", k^g; printf \" \";" << endl;
969 fp <<
" end for; " << endl;
970 fp <<
"printf \"\\n\";" << endl;
971 fp <<
"end for;" << endl;
973 fp <<
"end for;" << endl;
978 fp <<
"for i in S do" << endl;
979 fp <<
"N:=Normalizer(G,Subgroups[i]`subgroup);" << endl;
980 fp <<
"gens:=FewGenerators(N);" << endl;
982 fp <<
"#gens;" << endl;
983 fp <<
"for g in gens do" << endl;
984 fp <<
"for k in [1..Degree(G)] do" << endl;
985 fp <<
" printf \"%o\", k^g; printf \" \";" << endl;
986 fp <<
" end for; " << endl;
987 fp <<
" printf \"\\n\";" << endl;
988 fp <<
"end for;" << endl;
990 fp <<
"end for;" << endl;
998 fp <<
"UnsetOutputFile();" << endl;
1000 cout <<
"Written file " << fname_magma
1001 <<
" of size " << Fio.
file_size(fname_magma) << endl;
1007 cout <<
"please run magma on the file " << fname_magma << endl;
1008 cout <<
"for instance, try" << endl;
1015 cout <<
"command script in MAGMA has finished" << endl;
1022 cout <<
"action::find_subgroups_using_MAGMA2 done" << endl;
1028 std::string &label_tex,
1031 int f_v = (verbose_level >= 1);
1034 string fname_output;
1039 cout <<
"action::conjugacy_classes_and_normalizers" << endl;
1042 prefix.assign(
label);
1043 fname_magma.assign(
label);
1044 fname_magma.append(
"_classes.magma");
1045 fname_output.assign(
label);
1046 fname_output.append(
"_classes_out.txt");
1051 cout <<
"action::conjugacy_classes_and_normalizers before "
1052 "conjugacy_classes_and_normalizers_using_MAGMA" << endl;
1055 override_Sims, verbose_level);
1057 cout <<
"action::conjugacy_classes_and_normalizers after "
1058 "conjugacy_classes_and_normalizers_using_MAGMA" << endl;
1065 cout <<
"action::conjugacy_classes_and_normalizers before read_conjugacy_classes_and_normalizers" << endl;
1069 cout <<
"action::conjugacy_classes_and_normalizers after read_conjugacy_classes_and_normalizers" << endl;
1075 cout <<
"please run magma on the file " << fname_magma << endl;
1076 cout <<
"for instance, try" << endl;
1083 cout <<
"action::conjugacy_classes_and_normalizers done" << endl;
1091 int f_v = (verbose_level >= 1);
1099 cout <<
"action::conjugacy_classes_and_normalizers" << endl;
1102 prefix.assign(
label);
1103 fname1.assign(
label);
1104 fname1.append(
"_classes.magma");
1105 fname2.assign(
label);
1106 fname2.append(
"_classes_out.txt");
1111 cout <<
"action::conjugacy_classes_and_normalizers the file "
1112 << fname2 <<
" exists, reading it " << endl;
1115 fname2, override_Sims, verbose_level);
1119 cout <<
"action::conjugacy_classes_and_normalizers the file " << fname2
1120 <<
" does not exist, calling conjugacy_classes_and_normalizers_using_MAGMA" << endl;
1123 cout <<
"action::report_conjugacy_classes_and_normalizers we don't have sims, skipping" << endl;
1127 Sims, verbose_level);
1132 cout <<
"action::conjugacy_classes_and_normalizers done" << endl;
1140 std::string &label_latex,
int verbose_level)
1142 int f_v = (verbose_level >= 1);
1147 int *class_order_of_element;
1148 long int *class_normalizer_order;
1149 int *class_normalizer_number_of_generators;
1150 int **normalizer_generators_perms;
1154 cout <<
"action::read_conjugacy_classes_and_normalizers" << endl;
1158 cout <<
"action::read_conjugacy_classes_and_normalizers "
1159 "before read_conjugacy_classes_and_normalizers_from_MAGMA" << endl;
1166 class_order_of_element,
1167 class_normalizer_order,
1168 class_normalizer_number_of_generators,
1169 normalizer_generators_perms,
1172 cout <<
"action::read_conjugacy_classes_and_normalizers "
1173 "after read_conjugacy_classes_and_normalizers_from_MAGMA" << endl;
1176 cout <<
"i : class_order_of_element : class_normalizer_order" << endl;
1177 for (i = 0; i < nb_classes; i++) {
1178 cout << i <<
" : " << class_order_of_element[i] <<
" : " << class_normalizer_order[i] << endl;
1183 PA =
NEW_OBJECT(projective_space_with_action);
1188 f_semilinear =
FALSE;
1191 f_semilinear =
TRUE;
1194 F, 3 , f_semilinear,
1204 cout <<
"The group has order " << go << endl;
1209 fname_latex.assign(fname);
1214 ofstream fp(fname_latex);
1218 title.assign(
"Conjugacy classes of ");
1220 title.append(label_latex);
1225 title.c_str(),
"computed by Orbiter and MAGMA" ,
1231 fp <<
"\\section{Conjugacy classes in $" << label_latex <<
"$}" << endl;
1234 fp <<
"The group order is " << endl;
1240 cout <<
"second time" << endl;
1242 cout <<
"i : class_order_of_element : class_normalizer_order" << endl;
1243 for (i = 0; i < nb_classes; i++) {
1244 cout << i <<
" : " << class_order_of_element[i] <<
" : " << class_normalizer_order[i] << endl;
1249 cout <<
"The conjugacy classes are:" << endl;
1250 for (i = 0; i < nb_classes; i++) {
1262 cout <<
"The conjugacy class " << i <<
" / " << nb_classes <<
" is:" << endl;
1264 goi = class_order_of_element[i];
1265 ngo = class_normalizer_order[i];
1269 cout <<
"goi=" << goi << endl;
1270 cout <<
"ngo=" << ngo << endl;
1277 cout <<
"action::read_conjugacy_classes_and_normalizers computing H, "
1278 "before gens->init_from_permutation_representation" << endl;
1286 cout <<
"action::read_conjugacy_classes_and_normalizers computing H, "
1287 "after gens->init_from_permutation_representation" << endl;
1290 Class_size.
create(class_size[i], __FILE__, __LINE__);
1298 nb_perms = class_normalizer_number_of_generators[i];
1305 cout <<
"action::read_conjugacy_classes_and_normalizers computing N, "
1306 "before gens->init_from_permutation_representation" << endl;
1310 normalizer_generators_perms[i],
1311 nb_perms, ngo, nice_gens_N,
1314 cout <<
"action::read_conjugacy_classes_and_normalizers computing N, "
1315 "after gens->init_from_permutation_representation" << endl;
1318 cout <<
"class " << i <<
" / " << nb_classes
1319 <<
" size = " << class_size[i]
1320 <<
" order of element = " << class_order_of_element[i]
1321 <<
" centralizer order = " << centralizer_order
1322 <<
" normalizer order = " << ngo
1324 cout <<
"packing::read_conjugacy_classes_and_normalizers created "
1325 "generators for a group" << endl;
1329 cout <<
"packing::read_conjugacy_classes_and_normalizers "
1330 "The group has order " << go1 << endl;
1332 fp <<
"\\bigskip" << endl;
1333 fp <<
"\\subsection*{Class " << i <<
" / "
1334 << nb_classes <<
"}" << endl;
1335 fp <<
"Order of element = " << class_order_of_element[i]
1337 fp <<
"Class size = " << class_size[i] <<
"\\\\" << endl;
1338 fp <<
"Centralizer order = " << centralizer_order
1340 fp <<
"Normalizer order = " << ngo
1346 cout <<
"latex output element: " << endl;
1348 if (class_order_of_element[i] > 1) {
1349 Elt = nice_gens->
ith(0);
1350 fp <<
"Representing element is" << endl;
1355 sprintf(str,
"c_{%d} = ", i);
1369 fp <<
"$\\\\" << endl;
1375 cout <<
"latex output normalizer: " << endl;
1378 fp <<
"The normalizer is generated by:\\\\" << endl;
1383 if (class_order_of_element[i] > 1) {
1384 fp <<
"The fix structure is:\\\\" << endl;
1385 PA->report_fixed_objects_in_PG_3_tex(
1389 fp <<
"The orbit structure is:\\\\" << endl;
1390 PA->report_orbits_in_PG_3_tex(
1394 if (class_order_of_element[i] > 1) {
1396 PA->report_decomposition_by_single_automorphism(
1407 FREE_int(normalizer_generators_perms[i]);
1416 cout <<
"Written file " << fname_latex <<
" of size "
1423 FREE_int(class_normalizer_number_of_generators);
1428 cout <<
"action::read_conjugacy_classes_and_normalizers done" << endl;
1433 std::string &fname,
groups::sims *override_Sims,
int verbose_level)
1435 int f_v = (verbose_level >= 1);
1440 int *class_order_of_element;
1441 long int *class_normalizer_order;
1442 int *class_normalizer_number_of_generators;
1443 int **normalizer_generators_perms;
1447 cout <<
"action::read_and_report_conjugacy_classes_and_normalizers" << endl;
1451 cout <<
"action::read_and_report_conjugacy_classes_and_normalizers "
1452 "before read_conjugacy_classes_and_normalizers_from_MAGMA" << endl;
1459 class_order_of_element,
1460 class_normalizer_order,
1461 class_normalizer_number_of_generators,
1462 normalizer_generators_perms,
1465 cout <<
"action::read_and_report_conjugacy_classes_and_normalizers "
1466 "after read_conjugacy_classes_and_normalizers_from_MAGMA" << endl;
1471 PA =
NEW_OBJECT(projective_space_with_action);
1476 f_semilinear =
FALSE;
1479 f_semilinear =
TRUE;
1482 F, 3 , f_semilinear,
1492 cout <<
"The group has order " << go << endl;
1497 fname_latex.assign(fname);
1502 ost <<
"\\section{Conjugacy classes in $" <<
label_tex <<
"$}" << endl;
1505 ost <<
"The group order is " << endl;
1506 ost <<
"$$" << endl;
1509 ost <<
"$$" << endl;
1512 cout <<
"The conjugacy classes are:" << endl;
1513 for (i = 0; i < nb_classes; i++) {
1520 goi = class_order_of_element[i];
1529 cout <<
"action::normalizer_using_MAGMA "
1530 "after gens->init_from_permutation_"
1531 "representation" << endl;
1534 Class_size.
create(class_size[i], __FILE__, __LINE__);
1545 ngo = class_normalizer_order[i];
1546 nb_perms = class_normalizer_number_of_generators[i];
1554 normalizer_generators_perms[i],
1555 nb_perms, ngo, nice_gens_N,
1558 cout <<
"class " << i <<
" / " << nb_classes
1559 <<
" size = " << class_size[i]
1560 <<
" order of element = " << class_order_of_element[i]
1561 <<
" centralizer order = " << centralizer_order
1562 <<
" normalizer order = " << ngo
1564 cout <<
"packing::read_conjugacy_classes_and_normalizers created "
1565 "generators for a group" << endl;
1569 cout <<
"packing::read_conjugacy_classes_and_normalizers "
1570 "The group has order " << go1 << endl;
1572 ost <<
"\\bigskip" << endl;
1573 ost <<
"\\subsection*{Class " << i <<
" / "
1574 << nb_classes <<
"}" << endl;
1575 ost <<
"Order of element = " << class_order_of_element[i]
1577 ost <<
"Class size = " << class_size[i] <<
"\\\\" << endl;
1578 ost <<
"Centralizer order = " << centralizer_order
1580 ost <<
"Normalizer order = " << ngo
1586 if (class_order_of_element[i] > 1) {
1587 Elt = nice_gens->
ith(0);
1588 ost <<
"Representing element is" << endl;
1589 ost <<
"$$" << endl;
1591 ost <<
"$$" << endl;
1594 ost <<
"$\\\\" << endl;
1599 ost <<
"The normalizer is generated by:\\\\" << endl;
1604 if (class_order_of_element[i] > 1) {
1605 fp <<
"The fix structure is:\\\\" << endl;
1606 PA->report_fixed_objects_in_PG_3_tex(
1610 fp <<
"The orbit structure is:\\\\" << endl;
1611 PA->report_orbits_in_PG_3_tex(
1615 if (class_order_of_element[i] > 1) {
1617 PA->report_decomposition_by_single_automorphism(
1628 FREE_int(normalizer_generators_perms[i]);
1640 FREE_int(class_normalizer_number_of_generators);
1645 cout <<
"action::read_and_report_conjugacy_classes_and_normalizers done" << endl;
1655 int f_v = (verbose_level >= 1);
1660 cout <<
"action::report_groups_and_normalizers" << endl;
1663 for (u = 0; u < nb_subgroups; u++) {
1665 ost <<
"\\subsection*{Class " << u <<
" / " << nb_subgroups <<
"}" << endl;
1670 ost <<
"Group order = " << go1 <<
"\\\\" << endl;
1671 ost <<
"Normalizer order = " << go2 <<
"\\\\" << endl;
1673 ost <<
"Generators for $H$:\\\\" << endl;
1678 ost <<
"\\bigskip" << endl;
1680 ost <<
"Generators for $N(H)$:\\\\" << endl;
1689 cout <<
"action::report_groups_and_normalizers done" << endl;
1694 char *fname_latex,
int verbose_level)
1696 int f_v = (verbose_level >= 1);
1702 cout <<
"action::report_fixed_objects" << endl;
1707 ofstream fp(fname_latex);
1711 snprintf(title, 2000,
"Fixed Objects");
1721 fp <<
"\\section{Fixed Objects}" << endl;
1725 fp <<
"The element" << endl;
1729 fp <<
"has the following fixed objects:\\\\" << endl;
1733 fp <<
"\\subsection{Fixed Points}" << endl;
1736 for (i = 0; i < P3->N_points; i++) {
1743 fp <<
"There are " << cnt <<
" fixed points, they are: \\\\" << endl;
1744 for (i = 0; i < P3->N_points; i++) {
1746 F->PG_element_unrank_modified(v, 1, 4, i);
1749 int_vec_print(fp, v, 4);
1750 fp <<
"\\\\" << endl;
1755 fp <<
"\\subsection{Fixed Lines}" << endl;
1763 for (i = 0; i < A2->
degree; i++) {
1770 fp <<
"There are " << cnt <<
" fixed lines, they are: \\\\" << endl;
1772 for (i = 0; i < A2->
degree; i++) {
1775 fp << i <<
" : $\\left[";
1777 fp <<
"\\right]$\\\\" << endl;
1785 fp <<
"\\subsection{Fixed Planes}" << endl;
1793 for (i = 0; i < A2->
degree; i++) {
1800 fp <<
"There are " << cnt <<
" fixed planes, they are: \\\\" << endl;
1802 for (i = 0; i < A2->
degree; i++) {
1805 fp << i <<
" : $\\left[";
1807 fp <<
"\\right]$\\\\" << endl;
1819 cout <<
"Written file " << fname_latex <<
" of size "
1824 cout <<
"action::report_fixed_objects done" << endl;
1829 int *Elt_B,
int *Elt_C,
int verbose_level)
1831 int f_v = (verbose_level >= 1);
1837 cout <<
"action::element_conjugate_bvab" << endl;
1842 cout <<
"action::element_conjugate_bvab A=" << endl;
1844 cout <<
"action::element_conjugate_bvab B=" << endl;
1852 cout <<
"action::element_conjugate_bvab C=B^-1 * A * B" << endl;
1858 cout <<
"action::element_conjugate_bvab done" << endl;
1863 int *Elt_B,
int *Elt_C,
int verbose_level)
1865 int f_v = (verbose_level >= 1);
1871 cout <<
"action::element_conjugate_babv" << endl;
1885 int *Elt_B,
int *Elt_C,
int verbose_level)
1887 int f_v = (verbose_level >= 1);
1893 cout <<
"action::element_commutator_abavbv" << endl;
1916 int f_v = (verbose_level >= 1);
1919 cout <<
"action::compute_projectivity_subgroup" << endl;
1924 cout <<
"action::compute_projectivity_subgroup "
1925 "computing projectivity subgroup" << endl;
1933 cout <<
"action::compute_projectivity_subgroup "
1934 "before Aut_gens->create_sims" << endl;
1938 cout <<
"action::compute_projectivity_subgroup "
1939 "after Aut_gens->create_sims" << endl;
1942 cout <<
"action::compute_projectivity_subgroup "
1943 "before projectivity_group_gens->projectivity_subgroup" << endl;
1947 cout <<
"action::compute_projectivity_subgroup "
1948 "after projectivity_group_gens->projectivity_subgroup" << endl;
1953 cout <<
"action::compute_projectivity_subgroup "
1954 "computing projectivity subgroup done" << endl;
1958 projectivity_gens = NULL;
1963 cout <<
"action::compute_projectivity_subgroup done" << endl;
void print_single_generator_matrix_tex(std::ostream &ost, long int a)
a collection of functions related to file io
long int file_size(std::string &fname)
interface to create latex output files
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 the computer algebra system MAGMA
orbiter_session * Orbiter_session
void run_magma_file(std::string &fname, int verbose_level)
domain to compute with objects of type longinteger
void integral_division_exact(longinteger_object &a, longinteger_object &b, longinteger_object &a_over_b)
a class to represent arbitrary precision integers
std::ostream & print_not_scientific(std::ostream &ost)
void create(long int i, const char *file, int line)
a permutation group in a fixed action.
void element_print_latex(void *elt, std::ostream &ost)
void element_print_as_permutation_with_offset(void *elt, std::ostream &ost, int offset, int f_do_it_anyway_even_for_big_degree, int f_print_cycles_of_length_one, int verbose_level)
void compute_projectivity_subgroup(groups::strong_generators *&projectivity_gens, groups::strong_generators *Aut_gens, int verbose_level)
void element_conjugate_babv(int *Elt_A, int *Elt_B, int *Elt_C, int verbose_level)
void centralizer_using_MAGMA(std::string &prefix, groups::sims *G, int *Elt, groups::strong_generators *&gens, int verbose_level)
void element_conjugate_bvab(int *Elt_A, int *Elt_B, int *Elt_C, int verbose_level)
void conjugacy_classes_using_MAGMA(std::string &prefix, groups::sims *G, int verbose_level)
void element_print_quick(void *elt, std::ostream &ost)
void normalizer_using_MAGMA(std::string &fname_magma_prefix, groups::sims *G, groups::sims *H, groups::strong_generators *&gens_N, int verbose_level)
void conjugacy_classes_and_normalizers(groups::sims *override_Sims, std::string &label, std::string &label_tex, int verbose_level)
void element_print_latex_with_extras(void *elt, std::string &label, std::ostream &ost)
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)
void element_invert(void *a, void *av, int verbose_level)
void read_centralizer_magma(std::string &fname_output, groups::sims *override_Sims, groups::strong_generators *&gens, int verbose_level)
void read_subgroups_magma(std::string &fname_output, groups::sims *override_Sims, int subgroup_order, int &nb_subgroups, groups::strong_generators *&H_gens, groups::strong_generators *&N_gens, int verbose_level)
void conjugacy_classes_and_normalizers_using_MAGMA(std::string &prefix, groups::sims *G, int verbose_level)
int is_semilinear_matrix_group()
void read_conjugacy_classes_and_normalizers_from_MAGMA(std::string &fname, int &nb_classes, int *&perms, int *&class_size, int *&class_order_of_element, long int *&class_normalizer_order, int *&class_normalizer_number_of_generators, int **&normalizer_generators_perms, int verbose_level)
void centralizer_using_magma2(std::string &prefix, std::string &fname_magma, std::string &fname_output, groups::sims *override_Sims, int *Elt, int verbose_level)
action * induced_action_on_grassmannian(int k, int verbose_level)
void element_commutator_abavbv(int *Elt_A, int *Elt_B, int *Elt_C, int verbose_level)
void report_fixed_objects(int *Elt, char *fname_latex, int verbose_level)
void report_conjugacy_classes_and_normalizers(std::ostream &ost, groups::sims *override_Sims, int verbose_level)
void find_subgroups_using_MAGMA2(std::string &prefix, std::string &fname_magma, std::string &fname_output, groups::sims *override_Sims, int subgroup_order, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
void read_conjugacy_classes_and_normalizers(std::string &fname, groups::sims *override_sims, std::string &label_latex, int verbose_level)
long int element_image_of(long int a, void *elt, int verbose_level)
void report_groups_and_normalizers(std::ostream &ost, int nb_subgroups, groups::strong_generators *H_gens, groups::strong_generators *N_gens, int verbose_level)
void read_and_report_conjugacy_classes_and_normalizers(std::ostream &ost, std::string &fname, groups::sims *override_Sims, int verbose_level)
void conjugacy_classes_and_normalizers_using_MAGMA_make_fnames(std::string &prefix, std::string &fname_magma, std::string &fname_output)
to hold a vector of group elements
a permutation group represented via a stabilizer chain
void init_cyclic_group_from_generator(actions::action *A, int *Elt, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
a strong generating set for a permutation group with respect to a fixed action
void print_generators_as_permutations_tex(std::ostream &ost, actions::action *A2)
void print_generators_MAGMA(actions::action *A, std::ostream &ost)
sims * create_sims(int verbose_level)
void init_from_permutation_representation(actions::action *A, sims *parent_group_S, int *data, int nb_elements, long int group_order, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void print_generators_tex()
void print_generators(std::ostream &ost)
void print_generators_as_permutations()
void init_from_sims(groups::sims *S, int verbose_level)
void print_generators_for_make_element(std::ostream &ost)
void projectivity_subgroup(sims *S, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
void print_generators_in_latex_individually(std::ostream &ost)
#define Int_matrix_print(A, B, C)
#define NEW_OBJECTS(type, n)
the orbiter library for the classification of combinatorial objects
induced_actions::action_on_grassmannian * AG