18namespace layer3_group_actions {
27 int f_v = (verbose_level >= 1);
30 cout <<
"action::report" << endl;
33 ost <<
"\\section*{The Action}" << endl;
36 <<
"$ of degree " <<
degree <<
"\\\\" << endl;
39 ost <<
"We act on the following set:\\\\" << endl;
44 ost <<
"The group is a matrix group.\\\\" << endl;
59 ost <<
"The base action is on projective space ${\\rm PG}(" << M->
n - 1 <<
", " << F->
q <<
")$\\\\" << endl;
68 ost <<
"\\subsection*{The finite field ${\\mathbb F}_{" << F->
q <<
"}$}" << endl;
72 ost << endl <<
"\\bigskip" << endl << endl;
82 cout <<
"action::report before W->report" << endl;
84 W->
report(ost, verbose_level);
86 cout <<
"action::report after W->report" << endl;
90 ost <<
"\\subsection*{Base and Stabilizer Chain}" << endl;
94 cout <<
"action::report printing group order" << endl;
99 ost <<
"Group order " << go <<
"\\\\" << endl;
102 for (
int t = 0; t < S->
A->
base_len(); t++) {
104 if (t < S->A->base_len()) {
108 ost <<
"$\\\\" << endl;
110 cout <<
"action::report printing group order done" << endl;
118 ost <<
"$\\\\" << endl;
121 ost <<
"{\\small\\arraycolsep=2pt" << endl;
126 ost <<
"Does not have strong generators.\\\\" << endl;
131 cout <<
"action::report before S->report" << endl;
135 cout <<
"action::report after S->report" << endl;
141 ost <<
"GAP export: \\\\" << endl;
142 ost <<
"\\begin{verbatim}" << endl;
144 ost <<
"\\end{verbatim}" << endl;
147 ost <<
"Magma export: \\\\" << endl;
148 ost <<
"\\begin{verbatim}" << endl;
150 ost <<
"\\end{verbatim}" << endl;
152 ost <<
"Compact form: \\\\" << endl;
153 ost <<
"\\begin{verbatim}" << endl;
155 ost <<
"\\end{verbatim}" << endl;
160 cout <<
"action::report done" << endl;
168 int f_v = (verbose_level >= 1);
171 cout <<
"action::report_what_we_act_on" << endl;
188 ost <<
"\\section*{The Group Acts on Projective Space ${\\rm PG}(" << M->
n - 1 <<
", " << F->
q <<
")$}" << endl;
190 P->
report(ost, O, verbose_level);
199 cout <<
"action::report_what_we_act_on done" << endl;
205 int level,
int orbit_at_level,
int level_of_candidates_file,
206 void (*early_test_func_callback)(
long int *S,
int len,
207 long int *candidates,
int nb_candidates,
208 long int *good_candidates,
int &nb_good_candidates,
209 void *data,
int verbose_level),
210 void *early_test_func_callback_data,
215 long int *&candidates,
221 int f_v = (verbose_level >= 1);
222 int f_vv = (verbose_level >= 2);
223 long int *candidates1;
228 cout <<
"action::read_orbit_rep_and_candidates_from_files_and_process" << endl;
232 cout <<
"action::read_orbit_rep_and_candidates_from_files_and_process before read_orbit_rep_and_candidates_from_files" << endl;
235 level, orbit_at_level, level_of_candidates_file,
245 cout <<
"action::read_orbit_rep_and_candidates_from_files_and_process after read_orbit_rep_and_candidates_from_files" << endl;
248 for (h = level_of_candidates_file; h < level; h++) {
250 long int *candidates2;
254 cout <<
"action::read_orbit_rep_and_candidates_from_files_and_process "
255 "testing candidates at level " << h
256 <<
" number of candidates = " << nb_candidates1 << endl;
258 candidates2 =
NEW_lint(nb_candidates1);
260 (*early_test_func_callback)(starter, h + 1,
261 candidates1, nb_candidates1,
262 candidates2, nb_candidates2,
263 early_test_func_callback_data, verbose_level - 1);
266 cout <<
"action::read_orbit_rep_and_candidates_from_files_and_process "
267 "number of candidates at level " << h + 1
268 <<
" reduced from " << nb_candidates1 <<
" to "
269 << nb_candidates2 <<
" by "
270 << nb_candidates1 - nb_candidates2 << endl;
274 nb_candidates1 = nb_candidates2;
279 candidates = candidates1;
280 nb_candidates = nb_candidates1;
283 cout <<
"action::read_orbit_rep_and_candidates_from_files_and_process "
290 int level,
int orbit_at_level,
int level_of_candidates_file,
295 long int *&candidates,
301 int f_v = (verbose_level >= 1);
302 int orbit_at_candidate_level = -1;
307 cout <<
"action::read_orbit_rep_and_candidates_from_files prefix=" << prefix << endl;
316 sprintf(str,
"_lvl_%d", level);
317 fname1.assign(prefix);
321 cout <<
"action::read_orbit_rep_and_candidates_from_files before read_set_and_stabilizer fname1=" << fname1 << endl;
324 orbit_at_level, starter, starter_sz, Stab,
329 cout <<
"action::read_orbit_rep_and_candidates_from_files after read_set_and_stabilizer" << endl;
337 cout <<
"action::read_orbit_rep_and_candidates_from_files "
338 "Read starter " << orbit_at_level <<
" / "
339 << nb_cases <<
" : ";
346 if (level == level_of_candidates_file) {
347 orbit_at_candidate_level = orbit_at_level;
360 level_of_candidates_file, starter,
364 cout <<
"action::read_orbit_rep_and_candidates_from_files "
365 "Found starter, orbit_at_candidate_level="
366 << orbit_at_candidate_level << endl;
373 cout <<
"action::read_orbit_rep_and_candidates_from_files "
374 "before generator_read_candidates_of_orbit" << endl;
377 fname2.assign(prefix);
378 sprintf(str,
"_lvl_%d_candidates.bin", level_of_candidates_file);
383 cout <<
"action::read_orbit_rep_and_candidates_from_files "
384 "before Fio.poset_classification_read_candidates_of_orbit" << endl;
387 fname2, orbit_at_candidate_level,
388 candidates, nb_candidates, verbose_level - 1);
391 cout <<
"action::read_orbit_rep_and_candidates_from_files "
392 "after Fio.poset_classification_read_candidates_of_orbit" << endl;
396 if (candidates == NULL) {
397 cout <<
"action::read_orbit_rep_and_candidates_from_files "
398 "could not read the candidates" << endl;
402 cout <<
"action::read_orbit_rep_and_candidates_from_files "
403 "Found " << nb_candidates <<
" candidates at level "
404 << level_of_candidates_file << endl;
408 cout <<
"action::read_orbit_rep_and_candidates_from_files done" << endl;
414 int *&Reps,
int &nb_reps,
int &size,
int verbose_level)
416 int f_casenumbers =
FALSE;
426 cout <<
"action::read_file_and_print_representatives "
427 "reading file " << fname << endl;
432 Set_sizes, Sets, Ago_ascii, Aut_ascii,
437 Reps =
NEW_int(nb_cases * size);
438 for (i = 0; i < nb_cases; i++) {
439 for (j = 0; j < size; j++) {
440 Reps[i * size + j] = Sets[i][j];
445 Ago_ascii, Aut_ascii,
450 std::string &fname,
int *&Reps,
451 char **&Aut_ascii,
int &nb_reps,
int &size,
int verbose_level)
453 int f_casenumbers =
FALSE;
464 cout <<
"action::read_file_and_print_representatives "
465 "reading file " << fname << endl;
470 Set_sizes, Sets, Ago_ascii, Aut_ascii,
475 Reps =
NEW_int(nb_cases * size);
476 for (i = 0; i < nb_cases; i++) {
477 for (j = 0; j < size; j++) {
478 Reps[i * size + j] = Sets[i][j];
488 std::string &fname,
int f_print_stabilizer_generators,
int verbose_level)
490 int f_v = (verbose_level >= 1);
491 int f_casenumbers =
FALSE;
502 cout <<
"action::read_file_and_print_representatives "
510 Set_sizes, Sets, Ago_ascii, Aut_ascii,
513 for (i = 0; i < nb_cases; i++) {
514 cout <<
"Orbit " << i <<
" representative ";
523 G->init(
this, verbose_level - 2);
524 G->init_ascii_coding_to_sims(Aut_ascii[i], verbose_level - 2);
529 G->S->group_order(go);
533 G->S->extract_strong_generators_in_order(*gens, tl,
535 cout <<
"Stabilizer has order " << go <<
" tl=";
539 if (f_print_stabilizer_generators) {
540 cout <<
"The stabilizer is generated by:" << endl;
551 Ago_ascii, Aut_ascii,
557 int no,
long int *&set,
int &set_sz,
groups::sims *&stab,
562 int f_v = (verbose_level >= 1);
563 int f_vv = (verbose_level >= 2);
564 int f_casenumbers =
FALSE;
577 cout <<
"action::read_set_and_stabilizer "
578 "reading file " << fname
579 <<
" no=" << no << endl;
585 Set_sizes, Sets, Ago_ascii, Aut_ascii,
590 cout <<
"action::read_set_and_stabilizer "
591 "after read_and_parse_data_file_fancy" << endl;
592 cout <<
"Aut_ascii[no]=" << Aut_ascii[no] << endl;
593 cout <<
"Set_sizes[no]=" << Set_sizes[no] << endl;
596 set_sz = Set_sizes[no];
598 for (i = 0; i < set_sz; i ++) {
599 set[i] = Sets[no][i];
604 G->init(
this, verbose_level - 2);
606 cout <<
"action::read_set_and_stabilizer "
607 "before G->init_ascii_coding_to_sims" << endl;
609 G->init_ascii_coding_to_sims(Aut_ascii[no], verbose_level - 2);
611 cout <<
"action::read_set_and_stabilizer "
612 "after G->init_ascii_coding_to_sims" << endl;
629 cout <<
"action::read_set_and_stabilizer "
630 "Group order=" << go << endl;
635 cout <<
"action::read_set_and_stabilizer "
636 "after FREE_OBJECT G" << endl;
640 Ago_ascii, Aut_ascii,
643 cout <<
"action::read_set_and_stabilizer done" << endl;
656 for (j = 0; j < len; j++) {
657 ost <<
" & \\alpha_{" << j <<
"}";
659 ost <<
"\\\\" << endl;
660 for (i = 0; i <
degree; i++) {
662 for (j = 0; j < len; j++) {
665 ost <<
" & " << setw(3) << a;
667 ost <<
"\\\\" << endl;
689 cout <<
"ACTION " <<
label <<
" degree=" <<
degree <<
" of type ";
698 cout <<
"linear of dimension " <<
dimension << endl;
701 cout <<
"the action is not linear" << endl;
712 cout <<
"The action does not have a stabilizer chain" << endl;
715 cout <<
"has sims" << endl;
719 cout <<
"Order " << go <<
" = ";
721 for (
int t = 0; t <
base_len(); t++) {
738 ost <<
"The base has length " <<
base_len() <<
"\\\\" << endl;
739 ost <<
"The basic orbits are: \\\\" << endl;
741 ost <<
"Basic orbit " << i <<
" is orbit of " <<
base_i(i)
746 cout <<
"action " <<
label <<
" does not have a base" << endl;
753 cout <<
"action " <<
label <<
" has base ";
758 cout <<
"action " <<
label <<
" does not have a base" << endl;
768 cout <<
"action " <<
label <<
" does not have a base" << endl;
780 cout <<
"action::latex_all_points ptr->ptr_unrank_point == NULL" << endl;
785 cout <<
"action::latex_all_points "
787 ost <<
"{\\renewcommand*{\\arraystretch}{1.5}" << endl;
789 ost <<
"\\begin{array}{|c|c|}" << endl;
790 ost <<
"\\hline" << endl;
791 ost <<
"i & P_{i}\\\\" << endl;
792 ost <<
"\\hline" << endl;
793 ost <<
"\\hline" << endl;
794 for (i = 0; i <
degree; i++) {
798 ost <<
"\\\\" << endl;
799 if (((i + 1) % 10) == 0) {
800 ost <<
"\\hline" << endl;
801 ost <<
"\\end{array}" << endl;
802 if (((i + 1) % 50) == 0) {
807 ost <<
", \\;" << endl;
809 ost <<
"\\begin{array}{|c|c|}" << endl;
810 ost <<
"\\hline" << endl;
811 ost <<
"i & P_{i}\\\\" << endl;
812 ost <<
"\\hline" << endl;
813 ost <<
"\\hline" << endl;
816 ost <<
"\\hline" << endl;
817 ost <<
"\\end{array}" << endl;
818 ost <<
"$$}%" << endl;
819 cout <<
"action::latex_all_points done" << endl;
822 ost <<
"\\begin{multicols}{2}" << endl;
824 ost <<
"\\noindent" << endl;
825 for (i = 0; i <
degree; i++) {
829 ost <<
"\\\\" << endl;
832 ost <<
"\\end{multicols}" << endl;
842 int f_v = (verbose_level >= 1);
847 cout <<
"action::print_points "
852 ost <<
"{\\renewcommand*{\\arraystretch}{1.5}" << endl;
854 ost <<
"\\begin{array}{|c|c|}" << endl;
855 ost <<
"\\hline" << endl;
856 ost <<
"i & P_{i} \\\\" << endl;
857 ost <<
"\\hline" << endl;
858 ost <<
"\\hline" << endl;
859 for (i = 0; i < sz; i++) {
862 ost << set[i] <<
" = ";
864 ost <<
"\\\\" << endl;
865 if (((i + 1) % 10) == 0) {
866 ost <<
"\\hline" << endl;
867 ost <<
"\\end{array}" << endl;
868 if (((i + 1) % 50) == 0) {
873 ost <<
", \\;" << endl;
875 ost <<
"\\begin{array}{|c|c|}" << endl;
876 ost <<
"\\hline" << endl;
877 ost <<
"i & P_{i}\\\\" << endl;
878 ost <<
"\\hline" << endl;
879 ost <<
"\\hline" << endl;
882 ost <<
"\\hline" << endl;
883 ost <<
"\\end{array}" << endl;
884 ost <<
"$$}%" << endl;
888 ost <<
"\\begin{multicols}{2}" << endl;
890 ost <<
"\\noindent" << endl;
891 for (i = 0; i < sz; i++) {
894 ost << set[i] <<
" = ";
896 ost <<
"\\\\" << endl;
899 ost <<
"\\end{multicols}" << endl;
905 cout <<
"action::print_points done" << endl;
930 cout <<
"action " <<
label <<
" does not have a base" << endl;
940 cout <<
"vector of " << l <<
" group elements:" << endl;
941 for (i = 0; i < l; i++) {
942 cout << i <<
" : " << endl;
953 cout <<
"vector of " << l <<
" group elements:" << endl;
954 for (i = 0; i < l; i++) {
971 snprintf(c_title, 1000,
"%s", title.c_str());
994 for (i = 0; i < nb_elts; i++) {
1007 cout <<
"Written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
1012 std::string &fname, std::string &label,
1015 int f_v = (verbose_level >= 1);
1022 cout <<
"action::export_to_orbiter" << endl;
1027 cout <<
"action::export_to_orbiter go = " << go << endl;
1028 cout <<
"action::export_to_orbiter number of generators = " << SG->
gens->
len << endl;
1029 cout <<
"action::export_to_orbiter degree = " <<
degree << endl;
1034 fp <<
"GENERATORS_" <<
label <<
" = \\" << endl;
1035 for (i = 0; i < SG->
gens->
len; i++) {
1037 for (j = 0; j <
degree; j++) {
1039 cout <<
"action::export_to_orbiter computing image of " << j <<
" under generator " << i << endl;
1043 if (j <
degree - 1 || i < SG->gens->len - 1) {
1048 if (i < SG->gens->len - 1) {
1057 fp <<
label <<
":" << endl;
1058 fp <<
"\t$(ORBITER_PATH)orbiter.out -v 2 \\" << endl;
1059 fp <<
"\t-define G -permutation_group -symmetric_group " <<
degree <<
" \\" << endl;
1060 fp <<
"\t-subgroup_by_generators " <<
label <<
" " << go <<
" " << SG->
gens->
len <<
" $(GENERATORS_" <<
label <<
") -end \\" << endl;
1068 cout <<
"Written file " << fname <<
" of size "
1072 cout <<
"action::export_to_orbiter" << endl;
1078 std::string &fname, std::string &label, std::string &label_tex,
1081 int f_v = (verbose_level >= 1);
1086 longinteger_object go;
1090 cout <<
"action::export_to_orbiter_as_bsgs" << endl;
1102 cout <<
"action::export_to_orbiter_as_bsgs go = " << go << endl;
1103 cout <<
"action::export_to_orbiter_as_bsgs number of generators = " << SG->
gens->
len << endl;
1104 cout <<
"action::export_to_orbiter_as_bsgs degree = " <<
degree << endl;
1109 for (i = 0; i < SG->
gens->
len; i++) {
1110 fp <<
"GENERATOR_" <<
label <<
"_" << i <<
" = \\" << endl;
1112 for (j = 0; j <
degree; j++) {
1114 cout <<
"action::export_to_orbiter_as_bsgs computing image of " << j <<
" under generator " << i << endl;
1127 fp <<
label <<
":" << endl;
1128 fp <<
"\t$(ORBITER_PATH)orbiter.out -v 2 \\" << endl;
1129 fp <<
"\t\t-define G -permutation_group \\" << endl;
1131 <<
degree <<
" " << go <<
" ";
1137 fp <<
" \\" << endl;
1138 for (i = 0; i < SG->
gens->
len; i++) {
1139 fp <<
"\t\t\t" <<
"$(GENERATOR_" <<
label <<
"_" << i <<
") \\" << endl;
1141 fp <<
"\t\t-end" << endl;
1152 cout <<
"Written file " << fname <<
" of size "
1153 << Fio.file_size(fname) << endl;
1157 cout <<
"action::export_to_orbiter_as_bsgs" << endl;
void print_bare_fully(std::ostream &ost, long int *v, int len)
void cheat_sheet(std::ostream &f, int verbose_level)
projective space PG(n,q) of dimension n over Fq
void report_summary(std::ostream &ost)
void report(std::ostream &ost, graphics::layered_graph_draw_options *O, int verbose_level)
void projective_space_init(int n, field_theory::finite_field *F, int f_init_incidence_structure, int verbose_level)
options for drawing an object of type layered_graph
basic number theoretic functions
a collection of functions related to file io
void read_and_parse_data_file_fancy(std::string &fname, int f_casenumbers, int &nb_cases, int *&Set_sizes, long int **&Sets, char **&Ago_ascii, char **&Aut_ascii, int *&Casenumbers, int verbose_level)
void poset_classification_read_candidates_of_orbit(std::string &fname, int orbit_at_level, long int *&candidates, int &nb_candidates, int verbose_level)
long int file_size(std::string &fname)
void free_data_fancy(int nb_cases, int *Set_sizes, long int **Sets, char **Ago_ascii, char **Aut_ascii, int *Casenumbers)
int find_orbit_index_in_data_file(std::string &prefix, int level_of_candidates_file, long int *starter, int verbose_level)
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)
data_structures::lint_vec * Lint_vec
a class to represent arbitrary precision integers
global functions related to group actions
void action_print_symmetry_group_type(std::ostream &ost, symmetry_group_type a)
void(* ptr_unrank_point)(action &A, long int rk, int *v)
void element_print_latex(void *elt, std::ostream &ost)
void element_print_quick(void *elt, std::ostream &ost)
void print_symmetry_group_type(std::ostream &ost)
symmetry_group_type type_G
void report(std::ostream &ost, int f_sims, groups::sims *S, int f_strong_gens, groups::strong_generators *SG, graphics::layered_graph_draw_options *LG_Draw_options, int verbose_level)
groups::strong_generators * Strong_gens
int f_has_strong_generators
void print_bare_base(std::ofstream &ost)
void unrank_point(long int rk, int *v)
stabilizer_chain_base_data * Stabilizer_chain
void latex_all_points(std::ostream &ost)
void report_basic_orbits(std::ostream &ost)
int & transversal_length_i(int i)
void read_orbit_rep_and_candidates_from_files(std::string &prefix, int level, int orbit_at_level, int level_of_candidates_file, long int *&starter, int &starter_sz, groups::sims *&Stab, groups::strong_generators *&Strong_gens, long int *&candidates, int &nb_candidates, int &nb_cases, int verbose_level)
void export_to_orbiter(std::string &fname, std::string &label, groups::strong_generators *SG, int verbose_level)
void read_orbit_rep_and_candidates_from_files_and_process(std::string &prefix, int level, int orbit_at_level, int level_of_candidates_file, void(*early_test_func_callback)(long int *S, int len, long int *candidates, int nb_candidates, long int *good_candidates, int &nb_good_candidates, void *data, int verbose_level), void *early_test_func_callback_data, long int *&starter, int &starter_sz, groups::sims *&Stab, groups::strong_generators *&Strong_gens, long int *&candidates, int &nb_candidates, int &nb_cases, int verbose_level)
void print_vector(data_structures_groups::vector_ge &v)
void read_file_and_print_representatives(std::string &fname, int f_print_stabilizer_generators, int verbose_level)
void read_set_and_stabilizer(std::string &fname, int no, long int *&set, int &set_sz, groups::sims *&stab, groups::strong_generators *&Strong_gens, int &nb_cases, int verbose_level)
void read_representatives(std::string &fname, int *&Reps, int &nb_reps, int &size, int verbose_level)
void latex_point_set(std::ostream &ost, long int *set, int sz, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
void report_what_we_act_on(std::ostream &ost, graphics::layered_graph_draw_options *O, int verbose_level)
groups::matrix_group * get_matrix_group()
void export_to_orbiter_as_bsgs(std::string &fname, std::string &label, std::string &label_tex, groups::strong_generators *SG, int verbose_level)
void write_set_of_elements_latex_file(std::string &fname, std::string &title, int *Elt, int nb_elts)
void element_print_as_permutation(void *elt, std::ostream &ost)
void print_vector_as_permutation(data_structures_groups::vector_ge &v)
action_pointer_table * ptr
void print_group_order_long(std::ostream &ost)
long int element_image_of(long int a, void *elt, int verbose_level)
void print_group_order(std::ostream &ost)
void read_representatives_and_strong_generators(std::string &fname, int *&Reps, char **&Aut_ascii, int &nb_reps, int &size, int verbose_level)
void list_elements_as_permutations_vertically(data_structures_groups::vector_ge *gens, std::ostream &ost)
a container data structure for groups
to hold a vector of group elements
void print(std::ostream &ost)
a matrix group over a finite field in projective, vector space or affine action
field_theory::finite_field * GFq
a permutation group represented via a stabilizer chain
void group_order(ring_theory::longinteger_object &go)
void report(std::ostream &ost, std::string &prefix, graphics::layered_graph_draw_options *LG_Draw_options, int verbose_level)
int get_orbit_length(int i)
a strong generating set for a permutation group with respect to a fixed action
void print_generators_gap(std::ostream &ost)
void print_generators_tex()
void export_magma(actions::action *A, std::ostream &ost, int verbose_level)
void print_generators_compact(std::ostream &ost)
void init_from_sims(groups::sims *S, int verbose_level)
void export_to_orbiter_as_bsgs(actions::action *A2, std::string &fname, std::string &label, std::string &label_tex, int verbose_level)
data_structures_groups::vector_ge * gens
void group_order(ring_theory::longinteger_object &go)
the wreath product group GL(d,q) wreath Sym(n)
void report(std::ostream &ost, int verbose_level)
#define Lint_vec_copy(A, B, C)
#define Lint_vec_print(A, B, C)
#define Int_vec_print(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects
groups::wreath_product * wreath_product_group