Orbiter 2022
Combinatorial Objects
groups.h
Go to the documentation of this file.
1// group_theory.h
2//
3// Anton Betten
4//
5// moved here from action.h: July 28, 2018
6// based on action.h which was started: August 13, 2005
7
8
9
10#ifndef ORBITER_SRC_LIB_GROUP_ACTIONS_GROUPS_GROUPS_H_
11#define ORBITER_SRC_LIB_GROUP_ACTIONS_GROUPS_GROUPS_H_
12
13
14namespace orbiter {
15namespace layer3_group_actions {
16namespace groups {
17
18
19
20// #############################################################################
21// direct_product.cpp
22// #############################################################################
23
25
27
28public:
31 field_theory::finite_field *F1;
32 field_theory::finite_field *F2;
33 int q1;
34 int q2;
35
36 std::string label;
37 std::string label_tex;
38
39
49
52
55
58
60
64
68
70 long int *the_base;
72
73 data_structures::page_storage *Elts;
74
77 void null();
78 void freeself();
80 int verbose_level);
81 long int element_image_of(int *Elt, long int a, int verbose_level);
82 void element_one(int *Elt);
83 int element_is_one(int *Elt);
84 void element_mult(int *A, int *B, int *AB, int verbose_level);
85 void element_move(int *A, int *B, int verbose_level);
86 void element_invert(int *A, int *Av, int verbose_level);
87 int offset_i(int i);
88 void element_pack(int *Elt, uchar *elt);
89 void element_unpack(uchar *elt, int *Elt);
90 void put_digit(uchar *elt, int f, int i, int d);
91 int get_digit(uchar *elt, int f, int i);
92 void make_element(int *Elt, int *data, int verbose_level);
93 void element_print_easy(int *Elt, std::ostream &ost);
94 void compute_base_and_transversals(int verbose_level);
95 void make_strong_generators_data(int *&data,
96 int &size, int &nb_gens, int verbose_level);
97 void lift_generators(
101 int verbose_level);
102};
103
104
105// #############################################################################
106// exceptional_isomorphism_O4.cpp
107// #############################################################################
108
110
112public:
113 field_theory::finite_field *Fq;
117
118 int *E5a;
119 int *E4a;
120 int *E2a;
121 int *E2b;
122
125 void null();
126 void freeself();
127 void init(field_theory::finite_field *Fq,
131 int verbose_level);
133 int f_switch, int *mtx2x2_T, int *mtx2x2_S, int *Elt,
134 int verbose_level);
135 void apply_5_to_4(
136 int *mtx4x4, int *mtx5x5, int verbose_level);
137 void apply_4_to_5(
138 int *E4, int *E5, int verbose_level);
139 void apply_4_to_2(
140 int *E4, int &f_switch, int *E2_a, int *E2_b,
141 int verbose_level);
142 void apply_2_to_4(
143 int &f_switch, int *E2_a, int *E2_b, int *E4,
144 int verbose_level);
145 void print_as_2x2(int *mtx4x4);
146};
147
148
149
150
151// #############################################################################
152// linear_group_description.cpp
153// #############################################################################
154
156
157
159public:
169
170
171 int n;
172
173 // change input_q to string so that we can allow symbols:
174 //int input_q;
175 std::string input_q;
176
179 field_theory::finite_field *F;
182
183 // induced actions and subgroups:
184
185
197 int s;
202 std::string subgroup_fname;
203 std::string subgroup_label;
206
209
212
217
219
222
224
225
228 void null();
229 void freeself();
230 int read_arguments(int argc, std::string *argv,
231 int verbose_level);
232 void print();
233
234};
235
236
237
238// #############################################################################
239// linear_group.cpp
240// #############################################################################
241
243
245public:
247 int n;
249 field_theory::finite_field *F;
251
252 std::string label;
253 std::string label_tex;
254
258
263 int q;
264
267
268 linear_group();
270 void null();
271 void freeself();
273 int verbose_level);
274 void init_PGL2q_OnConic(int verbose_level);
275 void init_wedge_action(int verbose_level);
276 void init_wedge_action_detached(int verbose_level);
277 void init_monomial_group(int verbose_level);
278 void init_diagonal_group(int verbose_level);
279 void init_singer_group(int singer_power, int verbose_level);
280 void init_singer_group_and_frobenius(int singer_power, int verbose_level);
281 void init_null_polarity_group(int verbose_level);
282 void init_borel_subgroup_upper(int verbose_level);
283 void init_identity_subgroup(int verbose_level);
284 void init_symplectic_group(int verbose_level);
285 void init_subfield_structure_action(int s, int verbose_level);
286 void init_orthogonal_group(int epsilon, int verbose_level);
288 std::string &subgroup_fname,
289 std::string &subgroup_label,
290 int verbose_level);
292 std::string &subgroup_label,
293 std::string &subgroup_order_text,
294 int nb_subgroup_generators,
295 int *subgroup_generators_data,
296 int verbose_level);
297 void init_subgroup_Janko1(int verbose_level);
298 void report(std::ostream &fp, int f_sylow, int f_group_table,
299 int f_conjugacy_classes_and_normalizers,
300 graphics::layered_graph_draw_options *LG_Draw_options,
301 int verbose_level);
303 graphics::layered_graph_draw_options *O,
304 int f_sylow, int f_group_table, int f_classes,
305 int verbose_level);
306
307};
308
309
310
311
312// #############################################################################
313// matrix_group.cpp
314// #############################################################################
315
317
319
320public:
322 // n x n matrices (possibly with Frobenius)
323 // acting on PG(n - 1, q)
325 // n x n matrices plus translations
326 // (possibly with Frobenius)
327 // acting on F_q^n
329 // n x n matrices (possibly with Frobenius)
330 // acting on F_q^n
331
332 int n;
333 // the size of the matrices
334
336 // the degree of the action:
337 // (q^(n-1)-1) / (q - 1) if f_projective
338 // q^n if f_affine or f_general_linear
339
341 // use Frobenius automorphism
342
344
351 int low_level_point_size; // added Jan 26, 2010
352 // = n, the size of the vectors on which we act
354
355
356 std::string label;
357 std::string label_tex;
358
360 // if TRUE, GFq will be destroyed in the destructor
361 // if FALSE, it is the responsibility
362 // of someone else to destroy GFq
363
364 field_theory::finite_field *GFq;
365 void *data;
366
367 algebra::gl_classes *C; // added Dec 2, 2013
368
369
370 // temporary variables, do not use!
371 int *Elt1, *Elt2, *Elt3;
372 // used for mult, invert
373 int *Elt4;
374 // used for invert
375 int *Elt5;
376 int *tmp_M;
377 // used for GL_mult_internal
379 // used for Gauss during invert
380 int *v1, *v2;
381 // temporary vectors of length 2n
382 int *v3;
383 // used in GL_mult_vector_from_the_left_contragredient
385 // temporary storage, used in element_store()
386
387 data_structures::page_storage *Elts;
388
389
390 matrix_group();
392
393 void init_projective_group(int n, field_theory::finite_field *F,
394 int f_semilinear, actions::action *A, int verbose_level);
395 void init_affine_group(int n, field_theory::finite_field *F,
396 int f_semilinear, actions::action *A, int verbose_level);
397 void init_general_linear_group(int n, field_theory::finite_field *F,
398 int f_semilinear, actions::action *A, int verbose_level);
399 void allocate_data(int verbose_level);
400 void free_data(int verbose_level);
401 void setup_page_storage(int page_length_log, int verbose_level);
402 void compute_elt_size(int verbose_level);
403 void init_base(actions::action *A, int verbose_level);
404 void init_base_projective(actions::action *A, int verbose_level);
405 // initializes base, base_len, degree,
406 // transversal_length, orbit, orbit_inv
407 void init_base_affine(actions::action *A, int verbose_level);
408 void init_base_general_linear(actions::action *A, int verbose_level);
409 void init_gl_classes(int verbose_level);
410
411 int GL_element_entry_ij(int *Elt, int i, int j);
412 int GL_element_entry_frobenius(int *Elt);
413 long int image_of_element(int *Elt, long int a, int verbose_level);
414 long int GL_image_of_PG_element(int *Elt, long int a, int verbose_level);
415 long int GL_image_of_AG_element(int *Elt, long int a, int verbose_level);
417 int *v, int *A, int *vA, int verbose_level);
419 int *v, int *A, int *vA, int verbose_level);
421 int *v, int *A, int *vA, int verbose_level);
422 void substitute_surface_equation(int *Elt,
423 int *coeff_in, int *coeff_out, algebraic_geometry::surface_domain *Surf,
424 int verbose_level);
425 void GL_one(int *Elt);
426 void GL_one_internal(int *Elt);
427 void GL_zero(int *Elt);
428 int GL_is_one(int *Elt);
429 void GL_mult(int *A, int *B, int *AB, int verbose_level);
430 void GL_mult_internal(int *A, int *B, int *AB, int verbose_level);
431 void GL_copy(int *A, int *B);
432 void GL_copy_internal(int *A, int *B);
433 void GL_transpose(int *A, int *At, int verbose_level);
434 void GL_transpose_internal(int *A, int *At, int verbose_level);
435 void GL_invert(int *A, int *Ainv);
436 void GL_invert_internal(int *A, int *Ainv, int verbose_level);
437 void GL_unpack(uchar *elt, int *Elt, int verbose_level);
438 void GL_pack(int *Elt, uchar *elt);
439 void GL_print_easy(int *Elt, std::ostream &ost);
440 void GL_code_for_make_element(int *Elt, int *data);
441 void GL_print_for_make_element(int *Elt, std::ostream &ost);
442 void GL_print_for_make_element_no_commas(int *Elt, std::ostream &ost);
443 void GL_print_easy_normalized(int *Elt, std::ostream &ost);
444 void GL_print_latex(int *Elt, std::ostream &ost);
446 std::ostream &ost,
447 void (*point_label)(std::stringstream &sstr, int pt, void *data),
448 void *point_label_data);
449 void GL_print_easy_latex(int *Elt, std::ostream &ost);
450 void GL_print_easy_latex_with_option_numerical(int *Elt, int f_numerical, std::ostream &ost);
451 void decode_matrix(int *Elt, int n, uchar *elt);
452 int get_digit(uchar *elt, int i, int j);
453 int decode_frobenius(uchar *elt);
454 void encode_matrix(int *Elt, int n, uchar *elt);
455 void put_digit(uchar *elt, int i, int j, int d);
456 void encode_frobenius(uchar *elt, int d);
457 void make_element(int *Elt, int *data, int verbose_level);
458 void make_GL_element(int *Elt, int *A, int f);
461 orthogonal_geometry::orthogonal *O,
462 int f_siegel,
463 int f_reflection,
464 int f_similarity,
465 int f_semisimilarity,
466 int *Elt, int verbose_level);
468 sims *S, int *&Sol, int &cnt,
469 int f_path_select, int select_value,
470 int verbose_level);
471 void matrix_minor(int *Elt, int *Elt1,
472 matrix_group *mtx1, int f, int verbose_level);
473 int base_len(int verbose_level);
475 int base_len,
476 long int *base, int *transversal_length,
477 int verbose_level);
479 int &size, int &nb_gens, int verbose_level);
480 int has_shape_of_singer_cycle(int *Elt);
481};
482
483
484
485
486// #############################################################################
487// orbits_on_something.cpp
488// #############################################################################
489
491
493
494public:
495
499
501 std::string prefix;
502 std::string fname;
503 std::string fname_csv;
504
505 data_structures::tally *Classify_orbits_by_length;
506 data_structures::set_of_sets *Orbits_classified;
507
508 int *Orbits_classified_length; // [Orbits_classified_nb_types]
510
513 void null();
514 void freeself();
515 void init(
518 int f_load_save,
519 std::string &prefix,
520 int verbose_level);
521 void stabilizer_of(int orbit_idx, int verbose_level);
523 long int *set, int set_sz, int go, int l,
524 std::vector<int> &Idx,
525 int verbose_level);
527 long int *set, int set_sz, int go,
528 long int *orbit_type,
529 int verbose_level);
530 // orbit_type[(go + 1) * go] must be allocated beforehand
531 void report_type(std::ostream &ost, long int *orbit_type, long int goi);
532 void compute_compact_type(long int *orbit_type, long int goi,
533 long int *&compact_type, long int *&row_labels, long int *&col_labels, int &m, int &n);
534 void report_orbit_lengths(std::ostream &ost);
535 void print_orbits_based_on_filtered_orbits(std::ostream &ost, data_structures::set_of_sets *Filtered_orbits);
536 void classify_orbits_by_length(int verbose_level);
537 void report_classified_orbit_lengths(std::ostream &ost);
538 void report_classified_orbits_by_lengths(std::ostream &ost);
539 int get_orbit_type_index(int orbit_length);
540 int get_orbit_type_index_if_present(int orbit_length);
542 int (*test_function)(long int *orbit, int orbit_length, void *data),
543 void *test_function_data,
544 int verbose_level);
546 int orbit_length,
547 int &type_idx,
548 int &prev_nb,
549 int (*test_function)(long int *orbit, int orbit_length, void *data),
550 void *test_function_data,
551 int verbose_level);
552 void print_orbits_of_a_certain_length(int orbit_length);
554 int orbit_length,
555 int type_idx,
556 int idx1, int idx2,
557 long int *Orbit1,
558 long int *Orbit2,
559 int (*test_function)(long int *orbit1, int orbit_length1, long int *orbit2, int orbit_length2, void *data),
560 void *test_function_data,
561 int verbose_level);
562 void report_orbits_of_type(std::ostream &ost, int type_idx);
564 graph_theory::colored_graph *&CG,
565 std::string &fname,
566 long int *filter_by_set,
567 int filter_by_set_size,
568 int orbit_length,
569 int &type_idx,
570 int f_has_user_data, long int *user_data, int user_data_size,
571 int f_has_colors, int number_colors, int *color_table,
572 int (*test_function)(long int *orbit1, int orbit_length1, long int *orbit2, int orbit_length2, void *data),
573 void *test_function_data,
574 int verbose_level);
576 graph_theory::colored_graph *&CG,
577 std::string &fname,
578 int orbit_length,
579 int &type_idx,
580 int f_has_user_data, long int *user_data, int user_data_size,
581 int f_has_colors, int number_colors, int *color_table,
582 int (*test_function)(long int *orbit1, int orbit_length1, long int *orbit2, int orbit_length2, void *data),
583 void *test_function_data,
584 int verbose_level);
585 void extract_orbits(
586 int orbit_length,
587 int nb_orbits,
588 int *orbits,
589 long int *extracted_set,
590 int verbose_level);
592 int orbit_length,
593 int nb_orbits,
594 long int *orbits_idx,
595 long int *extracted_set,
596 int verbose_level);
598 graph_theory::colored_graph *&CG,
599 std::string &fname,
600 int orbit_length,
601 int &type_idx,
602 int f_has_user_data, long int *user_data, int user_data_size,
603 int (*test_function)(long int *orbit1, int orbit_length1, long int *orbit2, int orbit_length2, void *data),
604 void *test_function_data,
605 data_structures::set_of_sets *my_orbits_classified,
606 int verbose_level);
608 graph_theory::colored_graph *&CG,
609 std::string &fname,
610 int *Orbit_lengths,
611 int nb_orbit_lengths,
612 int *&Type_idx,
613 int f_has_user_data, long int *user_data, int user_data_size,
614 int (*test_function)(long int *orbit1, int orbit_length1, long int *orbit2, int orbit_length2, void *data),
615 void *test_function_data,
616 data_structures::set_of_sets *my_orbits_classified,
617 int verbose_level);
619 data_structures::set_of_sets *&Orbit_invariant,
620 int (*evaluate_orbit_invariant_function)(int a, int i, int j, void *evaluate_data, int verbose_level),
621 void *evaluate_data, int verbose_level);
622 void get_orbit_number_and_position(long int a, int &orbit_idx, int &orbit_pos, int verbose_level);
623 void create_latex_report(int verbose_level);
624 void report(std::ostream &ost, int verbose_level);
625 void report_quick(std::ostream &ost, int verbose_level);
626
627};
628
629
630// #############################################################################
631// permutation_group_create.cpp
632// #############################################################################
633
635
637
638public:
640
641 std::string label;
642 std::string label_tex;
643
644 //strong_generators *initial_strong_gens;
646
650
653
654
659 int verbose_level);
661 std::string &subgroup_label,
662 std::string &subgroup_order_text,
663 int nb_subgroup_generators,
664 std::string &subgroup_generators_label,
665 int verbose_level);
666
667
668};
669
670
671// #############################################################################
672// permutation_group_description.cpp
673// #############################################################################
674
676
678
679public:
682
684 std::string bsgs_label;
685 std::string bsgs_label_tex;
686 std::string bsgs_order_text;
687 std::string bsgs_base;
689 std::string bsgs_generators;
690
691
693 std::string subgroup_label;
697
700 int read_arguments(
701 int argc, std::string *argv,
702 int verbose_level);
703 void print();
704
705
706};
707
708
709// #############################################################################
710// permutation_representation_domain.cpp
711// #############################################################################
712
714
716
717public:
719
721
722
724 int m;
725 int n;
726 int mn;
728
731
732 int *Elt1, *Elt2, *Elt3, *Elt4;
734 // temporary storage, used in element_store()
736 // used in store / retrieve
737
738 data_structures::page_storage *Elts;
739
742 void null();
743 void free();
744 void allocate();
745 void init_product_action(int m, int n,
746 int page_length_log, int verbose_level);
747 void init(int degree, int page_length_log, int verbose_level);
748 void init_data(int page_length_log, int verbose_level);
749 void init_with_base(int degree,
750 int base_length, int *base, int page_length_log,
751 actions::action &A, int verbose_level);
752 void transversal_rep(int i, int j, int *Elt, int verbose_level);
753 void one(int *Elt);
754 int is_one(int *Elt);
755 void mult(int *A, int *B, int *AB);
756 void copy(int *A, int *B);
757 void invert(int *A, int *Ainv);
758 void unpack(uchar *elt, int *Elt);
759 void pack(int *Elt, uchar *elt);
760 void print(int *Elt, std::ostream &ost);
762 std::ostream &ost,
763 void (*point_label)(std::stringstream &sstr, long int pt, void *data),
764 void *point_label_data);
765 void code_for_make_element(int *Elt, int *data);
766 void print_for_make_element(int *Elt, std::ostream &ost);
767 void print_for_make_element_no_commas(int *Elt, std::ostream &ost);
768 void print_with_action(actions::action *A, int *Elt, std::ostream &ost);
769 void make_element(int *Elt, int *data, int verbose_level);
770
771};
772
773
774// #############################################################################
775// permutation_representation.cpp
776// #############################################################################
777
779
781
782public:
786 data_structures_groups::vector_ge *gens; // the original generators in action A_original
787 int *Perms; // [nb_gens * degree]
789 //longinteger_object target_go;
790
794 // A_original->elt_size_int + P->elt_size_int
796
798 uchar *elt1; // [char_per_elt]
799
800
801 std::string label;
802 std::string label_tex;
803
804 data_structures::page_storage *PS;
805
806 int *Elts;
807 // [nb_gens * elt_size_int], the generators in the induced action
808
809
815 int *Perms, int degree,
816 int verbose_level);
817 // Perms is degree x nb_gens
818 long int element_image_of(int *Elt, long int a, int verbose_level);
819 void element_one(int *Elt);
820 int element_is_one(int *Elt);
821 void element_mult(int *A, int *B, int *AB, int verbose_level);
822 void element_move(int *A, int *B, int verbose_level);
823 void element_invert(int *A, int *Av, int verbose_level);
824 void element_pack(int *Elt, uchar *elt);
825 void element_unpack(uchar *elt, int *Elt);
826 void element_print_for_make_element(int *Elt, std::ostream &ost);
827 void element_print_easy(int *Elt, std::ostream &ost);
828 void element_print_latex(int *Elt, std::ostream &ost);
829};
830
831
832
833// #############################################################################
834// schreier.cpp
835// #############################################################################
836
838
839class schreier {
840
841public:
844 long int degree;
848 int **images;
849 // [nb_gens][2 * A->degree],
850 // allocated by init_images,
851 // called from init_generators
852 // for each generator,
853 // stores the generator as permutation in 0..A->degree-1 ,
854 // then the inverse generator in A->degree..2*A->degree-1
855
856 int *orbit; // [A->degree]
857 int *orbit_inv; // [A->degree]
858
859 // prev and label are indexed
860 // by the points in the order as listed in orbit.
861 int *prev; // [A->degree]
862 int *label; // [A->degree]
863 //int *orbit_no; // [A->degree]
864 // to find out which orbit point a lies in,
865 // use orbit_number(pt).
866 // It used to be orbit_no[orbit_inv[a]]
867
868 int *orbit_first; // [A->degree + 1]
869 int *orbit_len; // [A->degree]
871
872 int *Elt1, *Elt2, *Elt3;
874 // used in random_schreier_generator
876 // used in coset_rep / coset_rep_inv
877
879 void (*print_function)(std::ostream &ost, int pt, void *data);
881
883 void (*preferred_choice_function)(int pt, int &pt_pref, schreier *Sch, void *data, int data2, int verbose_level);
886
887 schreier();
888 schreier(actions::action *A, int verbose_level);
889 ~schreier();
890 void freeself();
891 void delete_images();
893 void (*preferred_choice_function)(int pt, int &pt_pref, schreier *Sch, void *data, int data2, int verbose_level),
896 int verbose_level);
897 void init_images(int nb_images, int verbose_level);
899 long int degree, int *images, int verbose_level);
900 void images_append(int verbose_level);
901 void init(actions::action *A, int verbose_level);
902 void allocate_tables();
903 void init2();
904 void initialize_tables();
905 void init_single_generator(int *elt, int verbose_level);
906 void init_generators(data_structures_groups::vector_ge &generators, int verbose_level);
908 int **old_images,
909 int idx_deleted_generator,
910 int verbose_level);
912 int **old_images, int verbose_level);
913 void init_generators(int nb, int *elt, int verbose_level);
915 data_structures_groups::vector_ge &generators, int **old_images,
916 int idx_generator_to_delete, int verbose_level);
918 data_structures_groups::vector_ge &generators, int **old_images, int verbose_level);
919
920
921 // elt must point to nb * A->elt_size_in_int
922 // int's that are
923 // group elements in int format
925 int *elt, int **old_images,
926 int idx_generator_to_delete, int verbose_level);
928 int *elt, int **old_images, int verbose_level);
929 void init_generators_by_hdl(int nb_gen, int *gen_hdl,
930 int verbose_level);
931 void init_generators_by_handle(std::vector<int> &gen_hdl, int verbose_level);
932 long int get_image(long int i, int gen_idx, int verbose_level);
933 void swap_points(int i, int j, int verbose_level);
934 void move_point_here(int here, int pt);
935 int orbit_representative(int pt);
936 int depth_in_tree(int j);
937 // j is a coset, not a point
939 int &orbit_idx, int *Elt, int verbose_level);
941 int &orbit_idx, int *Elt, int verbose_level);
942 void coset_rep(int j, int verbose_level);
943 // j is a coset, not a point
944 // result is in cosetrep
945 // determines an element in the group
946 // that moves the orbit representative
947 // to the j-th point in the orbit.
948 void coset_rep_with_verbosity(int j, int verbose_level);
949 void coset_rep_inv(int j, int verbose_level);
950 void extend_orbit(int *elt, int verbose_level);
951 void compute_all_point_orbits(int verbose_level);
953 int *prefered_reps, int nb_prefered_reps,
954 int verbose_level);
956 long int *preferred_labels, int verbose_level);
958 long int *subset, int verbose_level);
960 int len, long int *subset, int verbose_level);
961 void compute_point_orbit(int pt, int verbose_level);
963 int pt, int max_depth, int verbose_level);
966 int *Elt, int verbose_level);
967 // computes non trivial random Schreier
968 // generator into schreier_gen
969 // non-trivial is with respect to A_original
971 int *Elt, int orbit_no,
972 int verbose_level);
973 // computes random Schreier generator for the orbit orbit_no into Elt
974 void random_schreier_generator(int *Elt, int verbose_level);
975 // computes random Schreier generator for the first orbit into Elt
976 void trace_back(int *path, int i, int &j);
977 void intersection_vector(int *set, int len,
978 int *intersection_cnt);
980 int *subset, int verbose_level);
982 int len, long int *subset, int verbose_level);
983 void orbits_on_invariant_subset(int len, int *subset,
984 int &nb_orbits_on_subset, int *&orbit_perm, int *&orbit_perm_inv);
986 data_structures::partitionstack &S, int verbose_level);
987 void get_orbit_partition(data_structures::partitionstack &S,
988 int verbose_level);
989 void get_orbit_in_order(std::vector<int> &Orb,
990 int orbit_idx, int verbose_level);
992 actions::action *default_action,
993 ring_theory::longinteger_object &full_group_order,
994 int pt, data_structures_groups::vector_ge *&cosets, int verbose_level);
996 actions::action *default_action,
997 ring_theory::longinteger_object &full_group_order, int pt,
998 int verbose_level);
1000 ring_theory::longinteger_object &full_group_order,
1001 int orbit_idx, int verbose_level);
1002 void get_orbit_rep_to(actions::action *default_action,
1003 ring_theory::longinteger_object &full_group_order,
1004 int orbit_idx,
1006 int verbose_level);
1008 actions::action *default_action,
1009 ring_theory::longinteger_object &full_group_order,
1010 int orbit_idx, int verbose_level);
1011 void point_stabilizer(actions::action *default_action,
1012 ring_theory::longinteger_object &go,
1013 groups::sims *&Stab, int orbit_no, int verbose_level);
1014 // this function allocates a sims structure into Stab.
1015 void get_orbit(int orbit_idx, long int *set, int &len,
1016 int verbose_level);
1017 void compute_orbit_statistic(int *set, int set_size,
1018 int *orbit_count, int verbose_level);
1019 void compute_orbit_statistic_lint(long int *set, int set_size,
1020 int *orbit_count, int verbose_level);
1021 void orbits_as_set_of_sets(data_structures::set_of_sets *&S, int verbose_level);
1022 void get_orbit_reps(int *&Reps, int &nb_reps, int verbose_level);
1023 int find_shortest_orbit_if_unique(int &idx);
1024 void elements_in_orbit_of(int pt, int *orb, int &nb,
1025 int verbose_level);
1026 void get_orbit_length(int *&orbit_length, int verbose_level);
1027 void get_orbit_lengths_once_each(int *&orbit_lengths,
1028 int &nb_orbit_lengths);
1029 int orbit_number(int pt);
1030 void get_orbit_number_and_position(int pt, int &orbit_idx, int &orbit_pos, int verbose_level);
1032 int *Adj, int n, int *&Decomp_scheme, int verbose_level);
1034 int *&point_list, int &point_list_length);
1035 void shallow_tree_generators(int orbit_idx,
1036 int f_randomized,
1037 schreier *&shallow_tree,
1038 int verbose_level);
1040 int gen_hdl_first, int nb_gen,
1041 enum shallow_schreier_tree_strategy Shallow_schreier_tree_strategy,
1042 int verbose_level);
1043 int get_num_points();
1044 // This function returns the number of points in the
1045 // schreier forest
1046 double get_average_word_length();
1047 // This function returns the average word length of the forest.
1048 double get_average_word_length(int orbit_idx);
1049 void compute_orbit_invariant(int *&orbit_invariant,
1050 int (*compute_orbit_invariant_callback)(schreier *Sch,
1051 int orbit_idx, void *data, int verbose_level),
1052 void *compute_orbit_invariant_data,
1053 int verbose_level);
1054 void print_TDA(std::ostream &ost, geometry::object_with_canonical_form *OwCF,
1055 combinatorics::classification_of_objects_report_options *Report_options,
1056 int verbose_level);
1057 void latex_TDA(std::ostream &ost,
1058 combinatorics::encoded_combinatorial_object *Enc,
1059 int verbose_level);
1060
1061 // schreier_io.cpp:
1062 void latex(std::string &fname);
1063 void print_orbit_lengths(std::ostream &ost);
1064 void print_orbit_lengths_tex(std::ostream &ost);
1065 void print_fixed_points_tex(std::ostream &ost);
1066 void print_orbit_length_distribution(std::ostream &ost);
1067 void print_orbit_reps(std::ostream &ost);
1068 void print(std::ostream &ost);
1069 void print_and_list_orbits(std::ostream &ost);
1070 void print_and_list_orbits_with_original_labels(std::ostream &ost);
1071 void print_and_list_orbits_tex(std::ostream &ost);
1073 std::ostream &ost, actions::action *default_action, strong_generators *gens,
1074 int verbose_level);
1075 void make_orbit_trees(std::ostream &ost,
1076 std::string &fname_mask,
1077 graphics::layered_graph_draw_options *Opt,
1078 int verbose_level);
1079 void print_and_list_orbits_with_original_labels_tex(std::ostream &ost);
1080 void print_and_list_orbits_of_given_length(std::ostream &ost,
1081 int len);
1082 void print_and_list_orbits_and_stabilizer(std::ostream &ost,
1083 actions::action *default_action, ring_theory::longinteger_object &go,
1084 void (*print_point)(std::ostream &ost, int pt, void *data),
1085 void *data);
1086 void print_and_list_orbits_using_labels(std::ostream &ost,
1087 long int *labels);
1088 void print_tables(std::ostream &ost, int f_with_cosetrep);
1089 void print_tables_latex(std::ostream &ost, int f_with_cosetrep);
1090 void print_generators();
1091 void print_generators_latex(std::ostream &ost);
1093 void print_orbit(int orbit_no);
1094 void print_orbit_using_labels(int orbit_no, long int *labels);
1095 void print_orbit(std::ostream &ost, int orbit_no);
1096 void print_orbit_with_original_labels(std::ostream &ost, int orbit_no);
1097 void print_orbit_tex(std::ostream &ost, int orbit_no);
1098 void print_orbit_sorted_tex(std::ostream &ost, int orbit_no, int f_truncate, int max_length);
1100 actions::action *default_action,
1101 ring_theory::longinteger_object &full_group_order,
1102 std::ostream &ost);
1103 void write_orbit_summary(std::string &fname,
1104 actions::action *default_action,
1105 ring_theory::longinteger_object &full_group_order,
1106 int verbose_level);
1108 int i, actions::action *default_action,
1109 strong_generators *gens, std::ostream &ost);
1110 void print_and_list_orbit_tex(int i, std::ostream &ost);
1111 void print_and_list_orbits_sorted_by_length_tex(std::ostream &ost);
1113 std::ostream &ost, int f_tex,
1114 actions::action *default_action,
1115 ring_theory::longinteger_object &full_group_order);
1116 void print_fancy(
1117 std::ostream &ost, int f_tex,
1118 actions::action *default_action, strong_generators *gens_full_group);
1119 void print_and_list_orbits_sorted_by_length(std::ostream &ost);
1120 void print_and_list_orbits_sorted_by_length(std::ostream &ost, int f_tex);
1121 void print_orbit_sorted_with_original_labels_tex(std::ostream &ost,
1122 int orbit_no, int f_truncate, int max_length);
1123 void print_orbit_using_labels(std::ostream &ost, int orbit_no, long int *labels);
1124 void print_orbit_using_callback(std::ostream &ost, int orbit_no,
1125 void (*print_point)(std::ostream &ost, int pt, void *data),
1126 void *data);
1127 void print_orbit_type(int f_backwards);
1128 void list_all_orbits_tex(std::ostream &ost);
1129 void print_orbit_through_labels(std::ostream &ost,
1130 int orbit_no, long int *point_labels);
1131 void print_orbit_sorted(std::ostream &ost, int orbit_no);
1132 void print_orbit(int cur, int last);
1133 void print_tree(int orbit_no);
1134 void export_tree_as_layered_graph(int orbit_no,
1135 std::string &fname_mask,
1136 int verbose_level);
1137 void draw_forest(std::string &fname_mask,
1138 graphics::layered_graph_draw_options *Opt,
1139 int f_has_point_labels, long int *point_labels,
1140 int verbose_level);
1141 void draw_tree(std::string &fname,
1142 graphics::layered_graph_draw_options *Opt,
1143 int orbit_no,
1144 int f_has_point_labels, long int *point_labels,
1145 int verbose_level);
1146 void draw_tree2(std::string &fname,
1147 graphics::layered_graph_draw_options *Opt,
1148 int *weight, int *placement_x, int max_depth,
1149 int i, int last,
1150 int f_has_point_labels, long int *point_labels,
1151 int verbose_level);
1152 void subtree_draw_lines(
1153 graphics::mp_graphics &G,
1154 graphics::layered_graph_draw_options *Opt,
1155 int parent_x, int parent_y, int *weight,
1156 int *placement_x, int max_depth, int i, int last,
1157 int y_max,
1158 int verbose_level);
1160 graphics::mp_graphics &G,
1161 graphics::layered_graph_draw_options *Opt,
1162 int parent_x, int parent_y, int *weight,
1163 int *placement_x, int max_depth, int i, int last,
1164 int f_has_point_labels, long int *point_labels,
1165 int y_max,
1166 int verbose_level);
1167 void subtree_place(int *weight, int *placement_x,
1168 int left, int right, int i, int last);
1169 int subtree_calc_weight(int *weight, int &max_depth,
1170 int i, int last);
1171 int subtree_depth_first(std::ostream &ost, int *path, int i, int last);
1172 void print_path(std::ostream &ost, int *path, int l);
1173 void write_to_file_csv(std::string &fname_csv, int verbose_level);
1174 void write_to_file_binary(std::ofstream &fp, int verbose_level);
1175 void read_from_file_binary(std::ifstream &fp, int verbose_level);
1176 void write_file_binary(std::string &fname, int verbose_level);
1177 void read_file_binary(std::string &fname, int verbose_level);
1178 void list_elements_as_permutations_vertically(std::ostream &ost);
1179};
1180
1181// #############################################################################
1182// schreier_sims.cpp
1183// #############################################################################
1184
1185
1187
1189
1190public:
1193
1197
1198 ring_theory::longinteger_object G_order, K_order, KG_order;
1199
1200 int *Elt1;
1201 int *Elt2;
1202 int *Elt3;
1203
1205 ring_theory::longinteger_object tgo; // target group order
1206
1207
1210
1213 int *Elt, void *data, int verbose_level);
1215
1218
1222
1225 int *Elt, int verbose_level);
1226
1228
1229 schreier_sims();
1231 void null();
1232 void freeself();
1233 void init(actions::action *A, int verbose_level);
1234 void interested_in_kernel(actions::action *KA, int verbose_level);
1235 void init_target_group_order(ring_theory::longinteger_object &tgo,
1236 int verbose_level);
1237 void init_generators(data_structures_groups::vector_ge *gens, int verbose_level);
1240 int iteration, int *Elt, void *data,
1241 int verbose_level),
1243 int verbose_level);
1244 void init_old_G(sims *old_G, int verbose_level);
1247 int verbose_level);
1250 int *Elt, int verbose_level),
1251 int verbose_level);
1252 void compute_group_orders();
1253 void print_group_orders();
1254 void get_generator_internal(int *Elt, int verbose_level);
1255 void get_generator_external(int *Elt, int verbose_level);
1257 int verbose_level);
1259 int verbose_level);
1260 void get_generator_external_old_G(int *Elt,
1261 int verbose_level);
1262 void get_generator(int *Elt, int verbose_level);
1263 void closure_group(int verbose_level);
1264 void create_group(int verbose_level);
1265};
1266
1267// #############################################################################
1268// sims.cpp
1269// #############################################################################
1270
1272
1273class sims {
1274
1275public:
1277
1279
1282
1283 int *gen_depth; // [nb_gen]
1284 int *gen_perm; // [nb_gen]
1285
1286 int *nb_gen; // [my_base_len + 1]
1287 // nb_gen[i] is the number of generators
1288 // which stabilize the base points 0,...,i-1,
1289 // i.e. which belong to G^{(i)}.
1290 // The actual generator index ("gen_idx") must be obtained
1291 // from the array gen_perm[].
1292 // Thus, gen_perm[j] for 0 \le j < nb_gen[i] are the
1293 // indices of generators which belong to G^{(i)}
1294 // the generators for G^{(i)} modulo G^{(i+1)}
1295 // those indexed by nb_gen[i + 1], .., nb_gen[i] - 1 (!!!)
1296 // Observe that the entries in nb_gen[] are *decreasing*.
1297 // This is because the generators at the bottom of the
1298 // stabilizer chain are listed first.
1299 // (And nb_gen[0] is the total number of generators).
1300
1301
1303 // an upper bound for the length of every basic orbit
1304
1305 int *path; // [my_base_len]
1306
1308 int **images;
1309
1310
1311private:
1312 // stabilizer chain:
1313
1314 int *orbit_len; // [my_base_len]
1315 // orbit_len[i] is the length of the i-th basic orbit.
1316
1317 int **orbit;
1318 // [my_base_len][transversal_length]
1319 // orbit[i][j] is the j-th point in the orbit
1320 // of the i-th base point.
1321 // for 0 \le j < orbit_len[i].
1322 // for orbit_len[i] \le j < A->deg,
1323 // the points not in the orbit are listed.
1324 int **orbit_inv;
1325 // [my_base_len][transversal_length]
1326 // orbit[i] is the inverse of the permutation orbit[i],
1327 // i.e. given a point j,
1328 // orbit_inv[i][j] is the coset (or position in the orbit)
1329 // which contains j.
1330
1331 int **prev; // [my_base_len][transversal_length]
1332 int **label; // [my_base_len][transversal_length]
1333
1334
1335 // this is wrong, Path and Label describe a path in a schreier tree
1336 // and hence should be allocated according
1337 // to the largest degree, not the base length
1338 //int *Path; // [my_base_len + 1]
1339 //int *Label; // [my_base_len]
1340
1341
1342 // storage for temporary data and
1343 // group elements computed by various routines.
1344 int *Elt1, *Elt2, *Elt3, *Elt4;
1345 int *strip1, *strip2;
1346 // used in strip
1347 int *eltrk1, *eltrk2, *eltrk3;
1348 // used in element rank unrank
1349 int *cosetrep_tmp;
1350 // used in coset_rep / coset_rep_inv
1351 int *schreier_gen, *schreier_gen1;
1352 // used in random_schreier_generator
1353
1354 int *cosetrep;
1355public:
1356
1357
1358 // sims.cpp:
1359 sims();
1360 void null();
1361 sims(actions::action *A, int verbose_level);
1362 ~sims();
1363 void freeself();
1364
1365 void delete_images();
1366 void init_images(int nb_images);
1367 void images_append();
1368 void init(actions::action *A, int verbose_level);
1369 // initializes the trivial group
1370 // with the base as given in A
1371 void init_cyclic_group_from_generator(actions::action *A, int *Elt, int verbose_level);
1372 // initializes the cyclic group generated by Elt with the base as given in A
1373 void init_without_base(actions::action *A, int verbose_level);
1374 void reallocate_base(int old_base_len, int verbose_level);
1375 void initialize_table(int i, int verbose_level);
1376 void init_trivial_group(int verbose_level);
1377 // clears the generators array,
1378 // and sets the i-th transversal to contain
1379 // only the i-th base point (for all i).
1380 void init_trivial_orbit(int i, int verbose_level);
1381 void init_generators(data_structures_groups::vector_ge &generators, int verbose_level);
1382 void init_generators(int nb, int *elt, int verbose_level);
1383 // copies the given elements into the generator array,
1384 // then computes depth and perm
1385 void init_generators_by_hdl(int nb_gen, int *gen_hdl, int verbose_level);
1386 void init_generator_depth_and_perm(int verbose_level);
1387 void add_generator(int *elt, int verbose_level);
1388 // adds elt to list of generators,
1389 // computes the depth of the element,
1390 // updates the arrays gen_depth and gen_perm accordingly
1391 // does not change the transversals
1392 int generator_depth(int gen_idx);
1393 // returns the index of the first base point
1394 // which is moved by a given generator.
1395 int generator_depth(int *elt);
1396 // returns the index of the first base point
1397 // which is moved by the given element
1398 void group_order(ring_theory::longinteger_object &go);
1399 void group_order_verbose(ring_theory::longinteger_object &go, int verbose_level);
1400 void subgroup_order_verbose(ring_theory::longinteger_object &go, int level, int verbose_level);
1401 long int group_order_lint();
1402 int is_trivial_group();
1404 // j == -1 means the group is trivial
1405 int get_image(int i, int gen_idx);
1406 // get the image of a point i under generator gen_idx,
1407 // goes through a
1408 // table of stored images by default.
1409 // Computes the image only if not yet available.
1410 int get_image(int i, int *elt);
1411 // get the image of a point i under a given group element,
1412 // does not go through a table.
1413 void swap_points(int lvl, int i, int j);
1414 // swaps two points given by their cosets
1415 void path_unrank_lint(long int a);
1416 long int path_rank_lint();
1417
1418 void element_from_path(int *elt, int verbose_level);
1419 // given coset representatives in path[],
1420 // the corresponding
1421 // element is multiplied.
1422 // uses eltrk1, eltrk2
1423 void element_from_path_inv(int *elt);
1424 void element_unrank(ring_theory::longinteger_object &a, int *elt,
1425 int verbose_level);
1426 void element_unrank(ring_theory::longinteger_object &a, int *elt);
1427 // Returns group element whose rank is a.
1428 // the elements represented by the chain are
1429 // enumerated 0, ... go - 1
1430 // with the convention that 0 always stands
1431 // for the identity element.
1432 // The computed group element will be computed into Elt1
1433 void element_rank(ring_theory::longinteger_object &a, int *elt);
1434 // Computes the rank of the element in elt into a.
1435 // uses eltrk1, eltrk2
1436 void element_unrank_lint(long int rk, int *Elt, int verbose_level);
1437 void element_unrank_lint(long int rk, int *Elt);
1438 long int element_rank_lint(int *Elt);
1439 int is_element_of(int *elt);
1441 void coset_rep(int *Elt, int i, int j, int verbose_level);
1442 // computes a coset representative in transversal i
1443 // which maps
1444 // the i-th base point to the point which is in
1445 // coset j of the i-th basic orbit.
1446 // j is a coset, not a point
1447 // result is in cosetrep
1448 int compute_coset_rep_depth(int i, int j, int verbose_level);
1449 void compute_coset_rep_path(int i, int j, int &depth,
1450 int *&Path, int *&Label,
1451 int verbose_level);
1452 void coset_rep_inv(int *Elt, int i, int j, int verbose_level_le);
1453 // computes the inverse element of what coset_rep computes,
1454 // i.e. an element which maps the
1455 // j-th point in the orbit to the
1456 // i-th base point.
1457 // j is a coset, not a point
1458 // result is in cosetrep
1460 int *tl, int verbose_level);
1461 void random_schreier_generator(int *Elt, int verbose_level);
1462 // computes random Schreier generator
1464 long int elt_rk, int *perm, int verbose_level);
1465 int least_moved_point_at_level(int lvl, int verbose_level);
1466 int get_orbit(int i, int j);
1467 int get_orbit_inv(int i, int j);
1468 int get_orbit_length(int i);
1469 void get_orbit(int orbit_idx, std::vector<int> &Orb, int verbose_level);
1470 void all_elements(data_structures_groups::vector_ge *&vec, int verbose_level);
1471 void all_elements_save_csv(std::string &fname, int verbose_level);
1472
1473
1474 // sims_main.cpp:
1475 void compute_base_orbits(int verbose_level);
1477 int verbose_level);
1478 void extend_base_orbit(int new_gen_idx, int lvl,
1479 int verbose_level);
1480 void compute_base_orbit(int lvl, int verbose_level);
1481 // applies all generators at the given level to compute
1482 // the corresponding basic orbit.
1483 // the generators are the first nb_gen[lvl]
1484 // in the generator array
1486 int target_length, int verbose_level);
1487 int strip_and_add(int *elt, int *residue, int verbose_level);
1488 // returns TRUE if something was added,
1489 // FALSE if element stripped through
1490 int strip(int *elt, int *residue, int &drop_out_level,
1491 int &image, int verbose_level);
1492 // returns TRUE if the element sifts through
1493 void add_generator_at_level(int *elt, int lvl,
1494 int verbose_level);
1495 // add the generator to the array of generators
1496 // and then extends the
1497 // basic orbits 0,..,lvl using extend_base_orbit
1498 void add_generator_at_level_only(int *elt,
1499 int lvl, int verbose_level);
1500 // add the generator to the array of generators
1501 // and then extends the
1502 // basic orbit lvl using extend_base_orbit
1504 int verbose_level);
1505 void extend_group_random_process_no_kernel(sims *extending_by_G,
1506 ring_theory::longinteger_object &target_go,
1507 int verbose_level);
1508 void build_up_group_random_process(sims *K, sims *old_G,
1509 ring_theory::longinteger_object &target_go,
1510 int f_override_choose_next_base_point,
1511 int (*choose_next_base_point_method)(actions::action *A,
1512 int *Elt, int verbose_level),
1513 int verbose_level);
1516 int f_target_go, ring_theory::longinteger_object *target_go,
1517 int f_override_choose_next_base_point,
1518 int (*choose_next_base_point_method)(actions::action *A,
1519 int *Elt, int verbose_level),
1520 int verbose_level);
1521 int closure_group(int nb_times, int verbose_level);
1522
1523
1524
1525
1526 // sims2.cpp
1528 void (*choose_random_generator_for_subgroup)(
1529 sims *G, int *Elt, int verbose_level),
1530 int verbose_level);
1531
1532 // sims3.cpp
1534 int *C, int verbose_level);
1536 int *Gen_idx, int nb_gens, int *N, long int &N_go,
1537 int verbose_level);
1538 void order_structure_relative_to_subgroup(int *C_sub,
1539 int *Order, int *Residue, int verbose_level);
1540
1541
1542
1543 // sims_group_theory.cpp:
1544 void random_element(int *elt, int verbose_level);
1545 // compute a random element among the group elements
1546 // represented by the chain
1547 // (chooses random cosets along the stabilizer chain)
1548 void random_element_of_order(int *elt, int order,
1549 int verbose_level);
1551 int *orders, int nb, int verbose_level);
1553 int *tl, int verbose_level);
1555 data_structures_groups::vector_ge &SG, int *tl, int f_tolerant,
1556 int verbose_level);
1558 int *coset_reps, int nb_cosets,
1560 int verbose_level);
1562 int *coset_reps, int nb_cosets,
1563 int verbose_level);
1565 int *Elt_gens, int nb_gens, int subgroup_index,
1567 int verbose_level);
1569 sims &S, int pt, int verbose_level);
1570 // first computes the orbit of the point pt
1571 // in action A2 under the generators
1572 // that are stored at present
1573 // (using a temporary schreier object),
1574 // then sifts random schreier generators into S
1576 int pt, int verbose_level);
1577 // computes strong generating set
1578 // for the stabilizer of point pt
1580 data_structures_groups::vector_ge &SG, int *tl, int pt, int verbose_level);
1581 // computes strong generating set for
1582 // the stabilizer of point pt in action A2
1583 void conjugate(actions::action *A, sims *old_G, int *Elt,
1584 int f_overshooting_OK, int verbose_level);
1585 // Elt * g * Elt^{-1} where g is in old_G
1587 long int *set, int size, int verbose_level);
1588 int test_if_subgroup(sims *old_G, int verbose_level);
1590 int *Elt, int nb_fixpoints, actions::action *A_given, int verbose_level);
1591 void table_of_group_elements_in_data_form(int *&Table,
1592 int &len, int &sz, int verbose_level);
1593 void regular_representation(int *Elt, int *perm,
1594 int verbose_level);
1595 void center(data_structures_groups::vector_ge &gens, int *center_element_ranks,
1596 int &nb_elements, int verbose_level);
1597 void all_cosets(int *subset, int size,
1598 long int *all_cosets, int verbose_level);
1600 int *element_ranks, int verbose_level);
1601 void find_standard_generators_int(int ord_a, int ord_b,
1602 int ord_ab, int &a, int &b, int &nb_trials,
1603 int verbose_level);
1604 long int find_element_of_given_order_int(int ord,
1605 int &nb_trials, int verbose_level);
1607 int ord, int &nb_trials, int max_trials,
1608 int verbose_level);
1610 int *Elt, int &e, int &nb_trials, int verbose_level);
1611 void evaluate_word_int(int word_len,
1612 int *word, int *Elt, int verbose_level);
1613 void sylow_subgroup(int p, sims *P, int verbose_level);
1614 int is_normalizing(int *Elt, int verbose_level);
1616 int *&Adj, long int &n,
1617 int verbose_level);
1618 void create_group_table(int *&Table, long int &n, int verbose_level);
1621 strong_generators *&SG, int &nb_classes,
1622 int *&class_size, int *&class_rep,
1623 int verbose_level);
1624 void compute_all_powers(int elt_idx, int n, int *power_elt,
1625 int verbose_level);
1626 long int mult_by_rank(long int rk_a, long int rk_b, int verbose_level);
1627 long int mult_by_rank(long int rk_a, long int rk_b);
1628 long int invert_by_rank(long int rk_a, int verbose_level);
1629 long int conjugate_by_rank(long int rk_a, long int rk_b, int verbose_level);
1630 // comutes b^{-1} * a * b
1631 long int conjugate_by_rank_b_bv_given(long int rk_a,
1632 int *Elt_b, int *Elt_bv, int verbose_level);
1633 void zuppo_list(
1634 int *Zuppos, int &nb_zuppos, int verbose_level);
1635 void dimino(
1636 int *subgroup, int subgroup_sz, int *gens, int &nb_gens,
1637 int *cosets,
1638 int new_gen,
1639 int *group, int &group_sz,
1640 int verbose_level);
1641 void Cayley_graph(int *&Adj, int &sz,
1643 int verbose_level);
1644
1645
1646 // sims_io.cpp:
1647 void create_group_tree(const char *fname, int f_full,
1648 int verbose_level);
1649 void print_transversals();
1652 void print_orbit_len();
1653 void print(int verbose_level);
1654 void print_generators();
1655 void print_generators_tex(std::ostream &ost);
1659 void print_basic_orbits();
1660 void print_basic_orbit(int i);
1662 void print_group_order(std::ostream &ost);
1663 void print_group_order_factored(std::ostream &ost);
1665 void write_all_group_elements(char *fname, int verbose_level);
1666 void print_all_group_elements_to_file(char *fname,
1667 int verbose_level);
1669 void print_all_group_elements_tex(std::ostream &ost);
1670 void print_all_group_elements_with_permutations_tex(std::ostream &ost);
1673 actions::action *A_special);
1675 void save_list_of_elements(char *fname,
1676 int verbose_level);
1678 char *fname, int verbose_level);
1679 void write_as_magma_permutation_group(std::string &fname_base,
1680 data_structures_groups::vector_ge *gens, int verbose_level);
1681 void report(std::ostream &ost,
1682 std::string &prefix,
1683 graphics::layered_graph_draw_options *LG_Draw_options,
1684 int verbose_level);
1685
1686
1687};
1688
1689// sims2.cpp
1691 int verbose_level);
1692
1693
1694
1695
1696
1697// #############################################################################
1698// strong_generators.cpp
1699// #############################################################################
1700
1702
1704public:
1705
1707 int *tl;
1709
1712 void null();
1713 void freeself();
1714 void swap_with(strong_generators *SG);
1715 void init(actions::action *A);
1716 void init(actions::action *A, int verbose_level);
1717 void init_from_sims(groups::sims *S, int verbose_level);
1719 char *ascii_coding, int verbose_level);
1722 int verbose_level);
1724 std::vector<int> &gen_handle,
1725 std::vector<int> &tl,
1726 int verbose_level);
1727 void init_by_hdl(actions::action *A, int *gen_hdl,
1728 int nb_gen, int verbose_level);
1730 sims *parent_group_S, int *data,
1731 int nb_elements, long int group_order,
1733 int verbose_level);
1734 void init_from_data(actions::action *A, int *data,
1735 int nb_elements, int elt_size,
1736 int *transversal_length,
1738 int verbose_level);
1740 int *data,
1741 int nb_elements, int elt_size,
1742 const char *ascii_target_go,
1744 int verbose_level);
1746 int *data_gens,
1747 int data_gens_size, int nb_gens,
1748 ring_theory::longinteger_object &target_go,
1750 int verbose_level);
1752 actions::action *A, std::string &generators_data,
1753 std::string &go_text,
1754 int verbose_level);
1756 schreier *Sch,
1757 int pt, int &orbit_idx,
1758 ring_theory::longinteger_object &full_group_order,
1759 int verbose_level);
1761 int orbit_idx, ring_theory::longinteger_object &full_group_order,
1762 int verbose_level);
1764 strong_generators *SG, int *Elt_a, int verbose_level);
1766 strong_generators *SG, int *Elt_a, int verbose_level);
1768 int verbose_level);
1770 int *data, int index,
1771 int verbose_level);
1773 data_structures_groups::vector_ge *new_gens, int index,
1774 int verbose_level);
1775 void switch_to_subgroup(const char *rank_vector_text,
1776 const char *subgroup_order_text, sims *S,
1777 int *&subgroup_gens_idx, int &nb_subgroup_gens,
1778 int verbose_level);
1779 void init_subgroup(actions::action *A, int *subgroup_gens_idx,
1780 int nb_subgroup_gens,
1781 const char *subgroup_order_text,
1782 sims *S,
1783 int verbose_level);
1785 int nb_subgroup_gens,
1786 int *subgroup_gens,
1787 std::string &subgroup_order_text,
1789 int verbose_level);
1790 sims *create_sims(int verbose_level);
1792 int verbose_level);
1794 int group_index, int verbose_level);
1795 void add_single_generator(int *Elt,
1796 int group_index, int verbose_level);
1797 void group_order(ring_theory::longinteger_object &go);
1798 long int group_order_as_lint();
1799 void print_group_order(std::ostream &ost);
1802 const char *fname);
1804 void print_generators_MAGMA(actions::action *A, std::ostream &ost);
1805 void export_magma(actions::action *A, std::ostream &ost, int verbose_level);
1806 void canonical_image_GAP(std::string &input_set_text, std::ostream &ost);
1807 void print_generators_gap(std::ostream &ost);
1808 void print_generators_gap_in_different_action(std::ostream &ost, actions::action *A2);
1809 void print_generators_compact(std::ostream &ost);
1810 void print_generators(std::ostream &ost);
1811 void print_generators_in_latex_individually(std::ostream &ost);
1812 void print_generators_tex();
1813 void print_generators_tex(std::ostream &ost);
1814 void print_for_make_element(std::ostream &ost);
1815 void print_generators_in_different_action_tex(std::ostream &ost, actions::action *A2);
1818 std::ostream &ost,
1819 void (*point_label)(std::stringstream &sstr, long int pt, void *data),
1820 void *point_label_data);
1821 void print_generators_for_make_element(std::ostream &ost);
1823 void print_generators_as_permutations_tex(std::ostream &ost, actions::action *A2);
1824 void print_with_given_action(std::ostream &ost, actions::action *A2);
1825 void print_elements_ost(std::ostream &ost);
1827 void print_elements_with_given_action(std::ostream &ost, actions::action *A2);
1828 void print_elements_latex_ost(std::ostream &ost);
1831 std::ostream &ost,
1832 void (*point_label)(std::stringstream &sstr, long int pt, void *data),
1833 void *point_label_data);
1834 void create_group_table(int *&Table, long int &go,
1835 int verbose_level);
1837 strong_generators *gens_subgroup,
1838 long int *&Subgroup_elements_by_index,
1839 long int &sz_subgroup, int verbose_level);
1841 schreier *&Sch, int verbose_level);
1843 actions::action *A_given,
1844 schreier *&Sch, long int *set, int len, int verbose_level);
1845 void orbits_on_points(int &nb_orbits, int *&orbit_reps,
1846 int verbose_level);
1848 int &nb_orbits, int *&orbit_reps, int verbose_level);
1850 int verbose_level);
1852 int pt, int verbose_level);
1853 void orbits_light(actions::action *A_given,
1854 int *&Orbit_reps, int *&Orbit_lengths, int &nb_orbits,
1855 int **&Pts_per_generator, int *&Nb_per_generator,
1856 int verbose_level);
1857 void write_to_file_binary(std::ofstream &fp, int verbose_level);
1858 void read_from_file_binary(actions::action *A, std::ifstream &fp,
1859 int verbose_level);
1860 void write_file(std::string &fname, int verbose_level);
1861 void read_file(actions::action *A, std::string &fname, int verbose_level);
1862 void compute_ascii_coding(char *&ascii_coding, int verbose_level);
1863 void decode_ascii_coding(char *ascii_coding, int verbose_level);
1864 void export_permutation_group_to_magma(std::string &fname,
1865 actions::action *A2, int verbose_level);
1866 void export_permutation_group_to_GAP(std::string &fname,
1867 actions::action *A2, int verbose_level);
1869 long int *set, int len, int verbose_level);
1871 int verbose_level);
1872 int test_if_normalizing(sims *S, int verbose_level);
1874 long int *set, int set_sz, int verbose_level);
1875 strong_generators *point_stabilizer(int pt, int verbose_level);
1877 int nb_fixpoints, actions::action *A_given, int verbose_level);
1879 int pt_A, int pt_B, int *Elt, int verbose_level);
1881 std::string &label_txt,
1882 std::ostream &ost,
1883 actions::action *A2,
1884 int verbose_level);
1886 std::string &label_txt,
1887 std::ostream &ost,
1888 actions::action *A2,
1889 int verbose_level);
1891 std::string &label_txt,
1892 std::ostream &ost,
1893 actions::action *A2,
1894 int verbose_level);
1896 std::ostream &ost,
1897 geometry::projective_space *P3,
1898 int verbose_level);
1899 void reverse_isomorphism_exterior_square(int verbose_level);
1900 void get_gens_data(int *&data, int &sz, int verbose_level);
1901 void get_gens_data_as_string_with_quotes(std::string &str, int verbose_level);
1903 actions::action *A2,
1904 std::string &fname, std::string &label, std::string &label_tex,
1905 int verbose_level);
1906
1907
1908 // strong_generators_groups.cpp
1910 field_theory::finite_field *F, int n,
1913 int verbose_level);
1914 void special_subgroup(int verbose_level);
1915 void projectivity_subgroup(sims *S, int verbose_level);
1916 void even_subgroup(int verbose_level);
1917 void Sylow_subgroup(sims *S, int p, int verbose_level);
1918 void init_single(actions::action *A, int *Elt, int verbose_level);
1920 int *Elt, int target_go, int verbose_level);
1921 void init_trivial_group(actions::action *A, int verbose_level);
1923 matrix_group *Mtx, int verbose_level);
1925 matrix_group *Mtx, int verbose_level);
1927 matrix_group *Mtx, int power_of_singer,
1929 int verbose_level);
1932 matrix_group *Mtx, int power_of_singer,
1934 int verbose_level);
1936 matrix_group *Mtx, int verbose_level);
1938 matrix_group *Mtx, int verbose_level);
1940 int verbose_level);
1942 actions::action *A_general_linear, int *Mtx,
1943 int verbose_level);
1944 void field_reduction(actions::action *Aq, int n, int s,
1945 field_theory::finite_field *Fq, int verbose_level);
1947 actions::action *A_PGL_n1_q, actions::action *A_PGL_n_q,
1948 matrix_group *Mtx_n1, matrix_group *Mtx_n,
1949 data_structures_groups::vector_ge *spread_stab_gens,
1950 ring_theory::longinteger_object &spread_stab_go,
1951 int verbose_level);
1953 actions::action *A_PGL_n_q,
1954 matrix_group *Mtx, int verbose_level);
1955 void regulus_stabilizer(actions::action *A_PGL_n_q,
1956 matrix_group *Mtx, int verbose_level);
1958 matrix_group *Mtx, int verbose_level);
1960 matrix_group *Mtx, int verbose_level);
1962 matrix_group *Mtx, int verbose_level);
1964 matrix_group *Mtx, int k, int verbose_level);
1966 actions::action *A_PGL_4_q,
1967 matrix_group *Mtx, int verbose_level);
1969 actions::action *A_PGL_4_q,
1970 matrix_group *Mtx, int verbose_level);
1972 field_theory::finite_field *F, int n,
1973 int epsilon,
1974 int f_semilinear,
1975 int verbose_level);
1978 field_theory::finite_field *F, int iso,
1979 int verbose_level);
1982 field_theory::finite_field *F, int iso,
1983 int verbose_level);
1986 field_theory::finite_field *F, int f_with_normalizer, int f_semilinear,
1988 int verbose_level);
1991 field_theory::finite_field *F, int a,
1993 int verbose_level);
1996 field_theory::finite_field *F, int a,
1998 int verbose_level);
2000 field_theory::finite_field *F, int iso,
2001 int verbose_level);
2003 int q, int k, int iso,
2004 int verbose_level);
2007 field_theory::finite_field *F,
2008 int verbose_level);
2009 void Janko1(
2011 field_theory::finite_field *F,
2012 int verbose_level);
2013 void Hall_reflection(
2014 int nb_pairs, int &degree, int verbose_level);
2016 int nb_pairs, int &degree, int verbose_level);
2018 strong_generators *SG_hyperplane,
2019 geometry::projective_space *P, int line1, int line2,
2020 int verbose_level);
2021 void exterior_square(
2022 actions::action *A_detached,
2023 strong_generators *SG_original,
2025 int verbose_level);
2026 void diagonally_repeat(
2027 actions::action *An,
2029 int verbose_level);
2030
2031};
2032
2033// #############################################################################
2034// subgroup.cpp:
2035// #############################################################################
2036
2038
2040public:
2043 long int group_order;
2044 int *gens;
2048
2049
2050 subgroup();
2051 ~subgroup();
2052 void null();
2053 void freeself();
2054 void init_from_sims(sims *S, sims *Sub,
2055 strong_generators *SG, int verbose_level);
2056 void init(int *Elements, int group_order, int *gens, int nb_gens);
2057 void print();
2058 int contains_this_element(int elt);
2059 void report(std::ostream &ost);
2060};
2061
2062// #############################################################################
2063// sylow_structure.cpp:
2064// #############################################################################
2065
2067
2069public:
2070 ring_theory::longinteger_object go;
2074
2075 sims *S; // the group
2076 subgroup *Sub; // [nb_primes]
2077
2080 void null();
2081 void freeself();
2082 void init(sims *S, int verbose_level);
2083 void report(std::ostream &ost);
2084};
2085
2086
2087// #############################################################################
2088// wreath_product.cpp
2089// #############################################################################
2090
2092
2094
2095public:
2098 field_theory::finite_field *F;
2099 int q;
2101
2102 std::string label;
2103 std::string label_tex;
2104
2106 // = M->degree;
2108 // = M->n
2110 // = i_power_j(dimension_of_matrix_group, nb_factors);
2112 // = (i_power_j_safe(q, dimension_of_tensor_action) - 1) / (q - 1);
2114 // = nb_factors + nb_factors *
2115 // degree_of_matrix_group + degree_of_tensor_action;
2117 // = dimension_of_tensor_action
2119 // = nb_factors + nb_factors *
2120 // dimension_of_matrix_group * dimension_of_matrix_group;
2123 // = M->elt_size_int * nb_factors + P->elt_size_int;
2124
2125 int *perm_offset_i; // [nb_factors + 1]
2126 // perm_offset_i[0] = nb_factors
2127 // perm_offset_i[nb_factors] = beginning of tensor domain
2131 int *u; // [dimension_of_tensor_action]
2132 int *v; // [dimension_of_tensor_action]
2133 int *w; // [dimension_of_tensor_action]
2134 int *A1; // [dimension_of_tensor_action * dimension_of_tensor_action]
2135 int *A2; // [dimension_of_tensor_action * dimension_of_tensor_action]
2136 int *A3; // [dimension_of_tensor_action * dimension_of_tensor_action]
2137 int *tmp_Elt1; // [elt_size_int]
2138 int *tmp_perm1; // [P->elt_size_int]
2139 int *tmp_perm2; // [P->elt_size_int]
2140 int *induced_perm; // [dimension_of_tensor_action]
2141
2145
2147
2151
2153 long int *the_base;
2155
2156 data_structures::page_storage *Elts;
2157
2158 uint32_t *rank_one_tensors; // [nb_rank_one_tensors]
2159 long int *rank_one_tensors_in_PG; // [nb_rank_one_tensors]
2160 // rank_one_tensors_in_PG[i] = affine_rank_to_PG_rank(rank_one_tensors[i]);
2161 long int *rank_one_tensors_in_PG_sorted; // [nb_rank_one_tensors]
2163
2164 char *TR; // [degree_of_tensor_action + 1]
2165 uint32_t *Prev; // [degree_of_tensor_action + 1]
2166
2169 void null();
2170 void freeself();
2173 int verbose_level);
2174 void compute_tensor_ranks(int verbose_level);
2175 void unrank_point(long int a, int *v, int verbose_level);
2176 long int rank_point(int *v, int verbose_level);
2177 long int element_image_of(int *Elt, long int a, int verbose_level);
2178 void element_image_of_low_level(int *Elt,
2179 int *input, int *output, int verbose_level);
2180 // we assume that we are in the tensor product domain
2181 void element_one(int *Elt);
2182 int element_is_one(int *Elt);
2183 void element_mult(int *A, int *B, int *AB, int verbose_level);
2184 void element_move(int *A, int *B, int verbose_level);
2185 void element_invert(int *A, int *Av, int verbose_level);
2186 void compute_induced_permutation(int *Elt, int *perm);
2187 void apply_permutation(int *Elt,
2188 int *v_in, int *v_out, int verbose_level);
2189 int offset_i(int i);
2190 void create_matrix(int *Elt, int *A, int verbose_level);
2191 // uses A1, A2
2192 void element_pack(int *Elt, uchar *elt);
2193 void element_unpack(uchar *elt, int *Elt);
2194 void put_digit(uchar *elt, int f, int i, int j, int d);
2195 int get_digit(uchar *elt, int f, int i, int j);
2196 void make_element_from_one_component(int *Elt,
2197 int f, int *Elt_component);
2198 void make_element_from_permutation(int *Elt, int *perm);
2199 void make_element(int *Elt, int *data, int verbose_level);
2200 void element_print_for_make_element(int *Elt, std::ostream &ost);
2201 void element_print_easy(int *Elt, std::ostream &ost);
2202 void element_print_latex(int *Elt, std::ostream &ost);
2203 void compute_base_and_transversals(int verbose_level);
2204 void make_strong_generators_data(int *&data,
2205 int &size, int &nb_gens, int verbose_level);
2207 std::ostream &ost, int verbose_level);
2209 uint32_t *&rank_one_tensors,
2210 int &nb_rank_one_tensors, int verbose_level);
2211 uint32_t tensor_affine_rank(int *tensor);
2212 void tensor_affine_unrank(int *tensor, uint32_t rk);
2213 long int tensor_PG_rank(int *tensor);
2214 void tensor_PG_unrank(int *tensor, long int PG_rk);
2215 long int affine_rank_to_PG_rank(uint32_t affine_rk);
2216 uint32_t PG_rank_to_affine_rank(long int PG_rk);
2217 void save_rank_one_tensors(int verbose_level);
2218 void compute_tensor_ranks(char *&TR, uint32_t *&Prev, int verbose_level);
2219 void report(std::ostream &ost, int verbose_level);
2222 actions::action* A,
2223 int*& result,
2224 int &nb_gens, int &degree,
2225 int nb_factors,
2226 int verbose_level);
2227 void make_fname(char *fname, int nb_factors, int h, int b);
2228 int test_if_file_exists(int nb_factors, int h, int b);
2231 actions::action* A,
2232 int*& result,
2233 int &nb_gens, int &degree,
2234 int nb_factors,
2235 int verbosity);
2236 void orbits_restricted(
2238 actions::action* A,
2239 int*& result,
2240 int &nb_gens, int &degree,
2241 int nb_factors,
2242 std::string &orbits_restricted_fname,
2243 int verbose_level);
2246 actions::action* A,
2247 int*& result,
2248 int &nb_gens, int &degree,
2249 int nb_factors,
2250 std::string &orbits_restricted_fname,
2251 int verbose_level);
2252};
2253
2254}}}
2255
2256
2257#endif /* ORBITER_SRC_LIB_GROUP_ACTIONS_GROUPS_GROUPS_H_ */
2258
2259
2260
a permutation group in a fixed action.
Definition: actions.h:99
the direct product of two matrix groups in product action
Definition: groups.h:26
data_structures::page_storage * Elts
Definition: groups.h:73
void init(matrix_group *M1, matrix_group *M2, int verbose_level)
void make_strong_generators_data(int *&data, int &size, int &nb_gens, int verbose_level)
void put_digit(uchar *elt, int f, int i, int d)
void lift_generators(strong_generators *SG1, strong_generators *SG2, actions::action *A, strong_generators *&SG3, int verbose_level)
void element_print_easy(int *Elt, std::ostream &ost)
void make_element(int *Elt, int *data, int verbose_level)
void element_invert(int *A, int *Av, int verbose_level)
void element_mult(int *A, int *B, int *AB, int verbose_level)
void element_move(int *A, int *B, int verbose_level)
long int element_image_of(int *Elt, long int a, int verbose_level)
exceptional isomorphism between orthogonal groups: O4, O5 and GL(2,q)
Definition: groups.h:111
void apply_4_to_2(int *E4, int &f_switch, int *E2_a, int *E2_b, int verbose_level)
void init(field_theory::finite_field *Fq, actions::action *A2, actions::action *A4, actions::action *A5, int verbose_level)
void apply_2to4_embedded(int f_switch, int *mtx2x2_T, int *mtx2x2_S, int *Elt, int verbose_level)
void apply_2_to_4(int &f_switch, int *E2_a, int *E2_b, int *E4, int verbose_level)
description of a linear group from the command line
Definition: groups.h:158
int read_arguments(int argc, std::string *argv, int verbose_level)
creates a linear group from command line arguments using linear_group_description
Definition: groups.h:244
void linear_group_init(linear_group_description *description, int verbose_level)
void create_latex_report(graphics::layered_graph_draw_options *O, int f_sylow, int f_group_table, int f_classes, int verbose_level)
void report(std::ostream &fp, int f_sylow, int f_group_table, int f_conjugacy_classes_and_normalizers, graphics::layered_graph_draw_options *LG_Draw_options, int verbose_level)
void init_singer_group_and_frobenius(int singer_power, int verbose_level)
data_structures_groups::vector_ge * nice_gens
Definition: groups.h:266
void init_singer_group(int singer_power, int verbose_level)
void init_subgroup_from_file(std::string &subgroup_fname, std::string &subgroup_label, int verbose_level)
void init_subgroup_by_generators(std::string &subgroup_label, std::string &subgroup_order_text, int nb_subgroup_generators, int *subgroup_generators_data, int verbose_level)
void init_orthogonal_group(int epsilon, int verbose_level)
void init_subfield_structure_action(int s, int verbose_level)
a matrix group over a finite field in projective, vector space or affine action
Definition: groups.h:318
void GL_print_easy_normalized(int *Elt, std::ostream &ost)
void GL_print_easy(int *Elt, std::ostream &ost)
void init_affine_group(int n, field_theory::finite_field *F, int f_semilinear, actions::action *A, int verbose_level)
void GL_print_for_make_element(int *Elt, std::ostream &ost)
void init_base_projective(actions::action *A, int verbose_level)
void init_base_general_linear(actions::action *A, int verbose_level)
void GL_mult_internal(int *A, int *B, int *AB, int verbose_level)
void base_and_transversal_length(int base_len, long int *base, int *transversal_length, int verbose_level)
void put_digit(uchar *elt, int i, int j, int d)
void GL_invert_internal(int *A, int *Ainv, int verbose_level)
void init_base(actions::action *A, int verbose_level)
void GL_mult(int *A, int *B, int *AB, int verbose_level)
void decode_matrix(int *Elt, int n, uchar *elt)
void GL_print_for_make_element_no_commas(int *Elt, std::ostream &ost)
long int GL_image_of_AG_element(int *Elt, long int a, int verbose_level)
void make_element(int *Elt, int *data, int verbose_level)
void setup_page_storage(int page_length_log, int verbose_level)
void matrix_minor(int *Elt, int *Elt1, matrix_group *mtx1, int f, int verbose_level)
void GL_transpose_internal(int *A, int *At, int verbose_level)
void strong_generators_low_level(int *&data, int &size, int &nb_gens, int verbose_level)
void GL_print_easy_latex(int *Elt, std::ostream &ost)
void orthogonal_group_random_generator(actions::action *A, orthogonal_geometry::orthogonal *O, int f_siegel, int f_reflection, int f_similarity, int f_semisimilarity, int *Elt, int verbose_level)
void GL_print_latex(int *Elt, std::ostream &ost)
void GL_print_easy_latex_with_option_numerical(int *Elt, int f_numerical, std::ostream &ost)
void GL_unpack(uchar *elt, int *Elt, int verbose_level)
void GL_transpose(int *A, int *At, int verbose_level)
void encode_matrix(int *Elt, int n, uchar *elt)
void action_from_the_right_all_types(int *v, int *A, int *vA, int verbose_level)
void projective_action_from_the_right(int *v, int *A, int *vA, int verbose_level)
void init_projective_group(int n, field_theory::finite_field *F, int f_semilinear, actions::action *A, int verbose_level)
data_structures::page_storage * Elts
Definition: groups.h:387
void GL_print_latex_with_print_point_function(int *Elt, std::ostream &ost, void(*point_label)(std::stringstream &sstr, int pt, void *data), void *point_label_data)
void general_linear_action_from_the_right(int *v, int *A, int *vA, int verbose_level)
void matrices_without_eigenvector_one(sims *S, int *&Sol, int &cnt, int f_path_select, int select_value, int verbose_level)
void init_general_linear_group(int n, field_theory::finite_field *F, int f_semilinear, actions::action *A, int verbose_level)
long int GL_image_of_PG_element(int *Elt, long int a, int verbose_level)
long int image_of_element(int *Elt, long int a, int verbose_level)
void substitute_surface_equation(int *Elt, int *coeff_in, int *coeff_out, algebraic_geometry::surface_domain *Surf, int verbose_level)
void init_base_affine(actions::action *A, int verbose_level)
compute orbits of a group in a given action; allows file io
Definition: groups.h:492
void get_orbit_number_and_position(long int a, int &orbit_idx, int &orbit_pos, int verbose_level)
void extract_orbits_using_classification(int orbit_length, int nb_orbits, long int *orbits_idx, long int *extracted_set, int verbose_level)
void extract_orbits(int orbit_length, int nb_orbits, int *orbits, long int *extracted_set, int verbose_level)
void compute_orbit_invariant_after_classification(data_structures::set_of_sets *&Orbit_invariant, int(*evaluate_orbit_invariant_function)(int a, int i, int j, void *evaluate_data, int verbose_level), void *evaluate_data, int verbose_level)
void create_graph_on_orbits_of_a_certain_length(graph_theory::colored_graph *&CG, std::string &fname, int orbit_length, int &type_idx, int f_has_user_data, long int *user_data, int user_data_size, int f_has_colors, int number_colors, int *color_table, int(*test_function)(long int *orbit1, int orbit_length1, long int *orbit2, int orbit_length2, void *data), void *test_function_data, int verbose_level)
void compute_compact_type(long int *orbit_type, long int goi, long int *&compact_type, long int *&row_labels, long int *&col_labels, int &m, int &n)
void report_type(std::ostream &ost, long int *orbit_type, long int goi)
void idx_of_points_in_orbits_of_length_l(long int *set, int set_sz, int go, int l, std::vector< int > &Idx, int verbose_level)
void create_graph_on_orbits_of_a_certain_length_override_orbits_classified(graph_theory::colored_graph *&CG, std::string &fname, int orbit_length, int &type_idx, int f_has_user_data, long int *user_data, int user_data_size, int(*test_function)(long int *orbit1, int orbit_length1, long int *orbit2, int orbit_length2, void *data), void *test_function_data, data_structures::set_of_sets *my_orbits_classified, int verbose_level)
void create_weighted_graph_on_orbits(graph_theory::colored_graph *&CG, std::string &fname, int *Orbit_lengths, int nb_orbit_lengths, int *&Type_idx, int f_has_user_data, long int *user_data, int user_data_size, int(*test_function)(long int *orbit1, int orbit_length1, long int *orbit2, int orbit_length2, void *data), void *test_function_data, data_structures::set_of_sets *my_orbits_classified, int verbose_level)
void print_orbits_based_on_filtered_orbits(std::ostream &ost, data_structures::set_of_sets *Filtered_orbits)
void report_quick(std::ostream &ost, int verbose_level)
void init(actions::action *A, strong_generators *SG, int f_load_save, std::string &prefix, int verbose_level)
void test_all_orbits_by_length(int(*test_function)(long int *orbit, int orbit_length, void *data), void *test_function_data, int verbose_level)
void create_graph_on_orbits_of_a_certain_length_after_filtering(graph_theory::colored_graph *&CG, std::string &fname, long int *filter_by_set, int filter_by_set_size, int orbit_length, int &type_idx, int f_has_user_data, long int *user_data, int user_data_size, int f_has_colors, int number_colors, int *color_table, int(*test_function)(long int *orbit1, int orbit_length1, long int *orbit2, int orbit_length2, void *data), void *test_function_data, int verbose_level)
int test_pair_of_orbits_of_a_equal_length(int orbit_length, int type_idx, int idx1, int idx2, long int *Orbit1, long int *Orbit2, int(*test_function)(long int *orbit1, int orbit_length1, long int *orbit2, int orbit_length2, void *data), void *test_function_data, int verbose_level)
void orbit_type_of_set(long int *set, int set_sz, int go, long int *orbit_type, int verbose_level)
void test_orbits_of_a_certain_length(int orbit_length, int &type_idx, int &prev_nb, int(*test_function)(long int *orbit, int orbit_length, void *data), void *test_function_data, int verbose_level)
data_structures::set_of_sets * Orbits_classified
Definition: groups.h:506
a domain for permutation groups whose elements are given in the permutation representation
Definition: groups.h:636
void permutation_group_init(permutation_group_description *description, int verbose_level)
void init_subgroup_by_generators(std::string &subgroup_label, std::string &subgroup_order_text, int nb_subgroup_generators, std::string &subgroup_generators_label, int verbose_level)
a domain for permutation groups whose elements are given in the permutation representation
Definition: groups.h:677
a domain for permutation groups whose elements are given in the permutation representation
Definition: groups.h:715
void init_product_action(int m, int n, int page_length_log, int verbose_level)
void init_with_base(int degree, int base_length, int *base, int page_length_log, actions::action &A, int verbose_level)
void print_with_print_point_function(int *Elt, std::ostream &ost, void(*point_label)(std::stringstream &sstr, long int pt, void *data), void *point_label_data)
void init(actions::action *A_original, int f_stay_in_the_old_action, data_structures_groups::vector_ge *gens, int *Perms, int degree, int verbose_level)
long int element_image_of(int *Elt, long int a, int verbose_level)
Schreier Sims algorithm to create the stabilizer chain of a permutation group.
Definition: groups.h:1188
void get_generator_external_from_generators(int *Elt, int verbose_level)
void get_generator_internal(int *Elt, int verbose_level)
void get_generator(int *Elt, int verbose_level)
void init_base_of_choice(int base_of_choice_len, int *base_of_choice, int verbose_level)
void init(actions::action *A, int verbose_level)
void init_choose_next_base_point_method(int(*choose_next_base_point_method)(actions::action *A, int *Elt, int verbose_level), int verbose_level)
int(* choose_next_base_point_method)(actions::action *A, int *Elt, int verbose_level)
Definition: groups.h:1224
void get_generator_external_old_G(int *Elt, int verbose_level)
void get_generator_external(int *Elt, int verbose_level)
void init_old_G(sims *old_G, int verbose_level)
void init_generators(data_structures_groups::vector_ge *gens, int verbose_level)
ring_theory::longinteger_object K_order
Definition: groups.h:1198
void get_generator_external_random_process(int *Elt, int verbose_level)
data_structures_groups::vector_ge * external_gens
Definition: groups.h:1209
void(* callback_choose_random_generator)(int iteration, int *Elt, void *data, int verbose_level)
Definition: groups.h:1212
void interested_in_kernel(actions::action *KA, int verbose_level)
ring_theory::longinteger_object tgo
Definition: groups.h:1205
ring_theory::longinteger_object KG_order
Definition: groups.h:1198
void init_random_process(void(*callback_choose_random_generator)(int iteration, int *Elt, void *data, int verbose_level), void *callback_choose_random_generator_data, int verbose_level)
void init_target_group_order(ring_theory::longinteger_object &tgo, int verbose_level)
ring_theory::longinteger_object G_order
Definition: groups.h:1198
Schreier trees for orbits of groups on points.
Definition: groups.h:839
void init_generators_recycle_images(data_structures_groups::vector_ge &generators, int **old_images, int idx_generator_to_delete, int verbose_level)
Definition: schreier.cpp:393
void draw_forest(std::string &fname_mask, graphics::layered_graph_draw_options *Opt, int f_has_point_labels, long int *point_labels, int verbose_level)
void get_orbit_decomposition_scheme_of_graph(int *Adj, int n, int *&Decomp_scheme, int verbose_level)
Definition: schreier.cpp:2858
void compute_orbit_invariant(int *&orbit_invariant, int(*compute_orbit_invariant_callback)(schreier *Sch, int orbit_idx, void *data, int verbose_level), void *compute_orbit_invariant_data, int verbose_level)
Definition: schreier.cpp:3320
void shallow_tree_generators(int orbit_idx, int f_randomized, schreier *&shallow_tree, int verbose_level)
Definition: schreier.cpp:2962
void compute_point_orbit_with_limited_depth(int pt, int max_depth, int verbose_level)
Definition: schreier.cpp:1395
void compute_all_point_orbits(int verbose_level)
Definition: schreier.cpp:988
void init_images_only(int nb_images, long int degree, int *images, int verbose_level)
Definition: schreier.cpp:167
void print_and_list_orbits_and_stabilizer_sorted_by_length(std::ostream &ost, int f_tex, actions::action *default_action, ring_theory::longinteger_object &full_group_order)
void print_and_list_orbits_and_stabilizer(std::ostream &ost, actions::action *default_action, ring_theory::longinteger_object &go, void(*print_point)(std::ostream &ost, int pt, void *data), void *data)
void print_and_list_all_orbits_and_stabilizers_with_list_of_elements_tex(std::ostream &ost, actions::action *default_action, strong_generators *gens, int verbose_level)
void print_and_list_orbit_tex(int i, std::ostream &ost)
void elements_in_orbit_of(int pt, int *orb, int &nb, int verbose_level)
Definition: schreier.cpp:2733
void orbits_as_set_of_sets(data_structures::set_of_sets *&S, int verbose_level)
Definition: schreier.cpp:2653
void write_orbit_summary(std::string &fname, actions::action *default_action, ring_theory::longinteger_object &full_group_order, int verbose_level)
void orbits_on_invariant_subset_fast(int len, int *subset, int verbose_level)
Definition: schreier.cpp:1931
void compute_all_orbits_on_invariant_subset_lint(int len, long int *subset, int verbose_level)
Definition: schreier.cpp:1221
void get_orbit_number_and_position(int pt, int &orbit_idx, int &orbit_pos, int verbose_level)
Definition: schreier.cpp:2822
int subtree_calc_weight(int *weight, int &max_depth, int i, int last)
void coset_rep_with_verbosity(int j, int verbose_level)
Definition: schreier.cpp:824
void list_elements_as_permutations_vertically(std::ostream &ost)
void orbits_on_invariant_subset(int len, int *subset, int &nb_orbits_on_subset, int *&orbit_perm, int *&orbit_perm_inv)
Definition: schreier.cpp:2035
void get_orbit_partition_of_points_and_lines(data_structures::partitionstack &S, int verbose_level)
Definition: schreier.cpp:2070
void write_to_file_binary(std::ofstream &fp, int verbose_level)
void print_TDA(std::ostream &ost, geometry::object_with_canonical_form *OwCF, combinatorics::classification_of_objects_report_options *Report_options, int verbose_level)
Definition: schreier.cpp:3342
void random_schreier_generator(int *Elt, int verbose_level)
Definition: schreier.cpp:1709
void print_and_list_orbits_sorted_by_length(std::ostream &ost)
void compute_orbit_statistic_lint(long int *set, int set_size, int *orbit_count, int verbose_level)
Definition: schreier.cpp:2631
void random_schreier_generator_ith_orbit(int *Elt, int orbit_no, int verbose_level)
Definition: schreier.cpp:1574
void swap_points(int i, int j, int verbose_level)
Definition: schreier.cpp:678
void read_from_file_binary(std::ifstream &fp, int verbose_level)
void init_generators_by_handle(std::vector< int > &gen_hdl, int verbose_level)
Definition: schreier.cpp:571
void extend_orbit(int *elt, int verbose_level)
Definition: schreier.cpp:901
void compute_all_point_orbits_with_preferred_labels(long int *preferred_labels, int verbose_level)
Definition: schreier.cpp:1104
data_structures_groups::vector_ge gens_inv
Definition: groups.h:846
void print_path(std::ostream &ost, int *path, int l)
void(* preferred_choice_function)(int pt, int &pt_pref, schreier *Sch, void *data, int data2, int verbose_level)
Definition: groups.h:883
void print_orbit_tex(std::ostream &ost, int orbit_no)
void write_to_file_csv(std::string &fname_csv, int verbose_level)
void export_tree_as_layered_graph(int orbit_no, std::string &fname_mask, int verbose_level)
void init_single_generator(int *elt, int verbose_level)
Definition: schreier.cpp:360
void get_orbit_length(int *&orbit_length, int verbose_level)
Definition: schreier.cpp:2751
void write_file_binary(std::string &fname, int verbose_level)
void(* print_function)(std::ostream &ost, int pt, void *data)
Definition: groups.h:879
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)
void init_images(int nb_images, int verbose_level)
Definition: schreier.cpp:136
void init_preferred_choice_function(void(*preferred_choice_function)(int pt, int &pt_pref, schreier *Sch, void *data, int data2, int verbose_level), void *preferred_choice_function_data, int preferred_choice_function_data2, int verbose_level)
Definition: schreier.cpp:115
void orbits_on_invariant_subset_fast_lint(int len, long int *subset, int verbose_level)
Definition: schreier.cpp:1983
void transporter_from_orbit_rep_to_point(int pt, int &orbit_idx, int *Elt, int verbose_level)
Definition: schreier.cpp:735
strong_generators * stabilizer_orbit_rep(actions::action *default_action, ring_theory::longinteger_object &full_group_order, int orbit_idx, int verbose_level)
Definition: schreier.cpp:2345
void print_orbit_sorted(std::ostream &ost, int orbit_no)
void init_generators(data_structures_groups::vector_ge &generators, int verbose_level)
Definition: schreier.cpp:373
void transporter_from_point_to_orbit_rep(int pt, int &orbit_idx, int *Elt, int verbose_level)
Definition: schreier.cpp:760
void print_and_list_orbits_of_given_length(std::ostream &ost, int len)
void compute_point_orbit(int pt, int verbose_level)
Definition: schreier.cpp:1256
void print_and_list_orbits_with_original_labels_tex(std::ostream &ost)
void print_and_list_orbit_and_stabilizer_with_list_of_elements_tex(int i, actions::action *default_action, strong_generators *gens, std::ostream &ost)
data_structures_groups::set_and_stabilizer * get_orbit_rep(actions::action *default_action, ring_theory::longinteger_object &full_group_order, int orbit_idx, int verbose_level)
Definition: schreier.cpp:2296
void print_orbit_length_distribution(std::ostream &ost)
void make_orbit_trees(std::ostream &ost, std::string &fname_mask, graphics::layered_graph_draw_options *Opt, int verbose_level)
void print_and_list_orbit_and_stabilizer_tex(int i, actions::action *default_action, ring_theory::longinteger_object &full_group_order, std::ostream &ost)
void print_fancy(std::ostream &ost, int f_tex, actions::action *default_action, strong_generators *gens_full_group)
int subtree_depth_first(std::ostream &ost, int *path, int i, int last)
void print_and_list_orbits_sorted_by_length_tex(std::ostream &ost)
void compute_all_point_orbits_with_prefered_reps(int *prefered_reps, int nb_prefered_reps, int verbose_level)
Definition: schreier.cpp:1070
void point_stabilizer(actions::action *default_action, ring_theory::longinteger_object &go, groups::sims *&Stab, int orbit_no, int verbose_level)
Definition: schreier.cpp:2388
void compute_orbit_statistic(int *set, int set_size, int *orbit_count, int verbose_level)
Definition: schreier.cpp:2610
void subtree_place(int *weight, int *placement_x, int left, int right, int i, int last)
void get_orbit_reps(int *&Reps, int &nb_reps, int verbose_level)
Definition: schreier.cpp:2686
void create_point_list_sorted(int *&point_list, int &point_list_length)
Definition: schreier.cpp:2931
void init_images_recycle(int nb_images, int **old_images, int idx_deleted_generator, int verbose_level)
Definition: schreier.cpp:197
void print_orbit_using_callback(std::ostream &ost, int orbit_no, void(*print_point)(std::ostream &ost, int pt, void *data), void *data)
long int get_image(long int i, int gen_idx, int verbose_level)
Definition: schreier.cpp:615
void intersection_vector(int *set, int len, int *intersection_cnt)
Definition: schreier.cpp:1915
data_structures_groups::vector_ge gens
Definition: groups.h:845
void subtree_draw_vertices(graphics::mp_graphics &G, graphics::layered_graph_draw_options *Opt, int parent_x, int parent_y, int *weight, int *placement_x, int max_depth, int i, int last, int f_has_point_labels, long int *point_labels, int y_max, int verbose_level)
void print_orbit_through_labels(std::ostream &ost, int orbit_no, long int *point_labels)
void print_orbit_sorted_with_original_labels_tex(std::ostream &ost, int orbit_no, int f_truncate, int max_length)
void init(actions::action *A, int verbose_level)
Definition: schreier.cpp:308
void print_orbit_using_labels(int orbit_no, long int *labels)
void get_orbit(int orbit_idx, long int *set, int &len, int verbose_level)
Definition: schreier.cpp:2598
void get_orbit_rep_to(actions::action *default_action, ring_theory::longinteger_object &full_group_order, int orbit_idx, data_structures_groups::set_and_stabilizer *Rep, int verbose_level)
Definition: schreier.cpp:2319
void print_and_list_orbits_with_original_labels(std::ostream &ost)
void coset_rep_inv(int j, int verbose_level)
Definition: schreier.cpp:864
void print_and_list_orbits_using_labels(std::ostream &ost, long int *labels)
void draw_tree2(std::string &fname, graphics::layered_graph_draw_options *Opt, int *weight, int *placement_x, int max_depth, int i, int last, int f_has_point_labels, long int *point_labels, int verbose_level)
void subtree_draw_lines(graphics::mp_graphics &G, graphics::layered_graph_draw_options *Opt, int parent_x, int parent_y, int *weight, int *placement_x, int max_depth, int i, int last, int y_max, int verbose_level)
strong_generators * stabilizer_any_point_plus_cosets(actions::action *default_action, ring_theory::longinteger_object &full_group_order, int pt, data_structures_groups::vector_ge *&cosets, int verbose_level)
Definition: schreier.cpp:2148
void read_file_binary(std::string &fname, int verbose_level)
void compute_all_orbits_on_invariant_subset(int len, long int *subset, int verbose_level)
Definition: schreier.cpp:1186
void get_orbit_in_order(std::vector< int > &Orb, int orbit_idx, int verbose_level)
Definition: schreier.cpp:2134
data_structures_groups::schreier_vector * get_schreier_vector(int gen_hdl_first, int nb_gen, enum shallow_schreier_tree_strategy Shallow_schreier_tree_strategy, int verbose_level)
Definition: schreier.cpp:3146
void print_orbit_with_original_labels(std::ostream &ost, int orbit_no)
void print_tables_latex(std::ostream &ost, int f_with_cosetrep)
void non_trivial_random_schreier_generator(actions::action *A_original, int *Elt, int verbose_level)
Definition: schreier.cpp:1517
void get_orbit_lengths_once_each(int *&orbit_lengths, int &nb_orbit_lengths)
Definition: schreier.cpp:2773
void trace_back(int *path, int i, int &j)
Definition: schreier.cpp:1896
void get_orbit_partition(data_structures::partitionstack &S, int verbose_level)
Definition: schreier.cpp:2112
void print_orbit_sorted_tex(std::ostream &ost, int orbit_no, int f_truncate, int max_length)
strong_generators * stabilizer_any_point(actions::action *default_action, ring_theory::longinteger_object &full_group_order, int pt, int verbose_level)
Definition: schreier.cpp:2233
void coset_rep(int j, int verbose_level)
Definition: schreier.cpp:787
void print_tables(std::ostream &ost, int f_with_cosetrep)
void latex_TDA(std::ostream &ost, combinatorics::encoded_combinatorial_object *Enc, int verbose_level)
Definition: schreier.cpp:3371
void init_generators_by_hdl(int nb_gen, int *gen_hdl, int verbose_level)
Definition: schreier.cpp:529
a permutation group represented via a stabilizer chain
Definition: groups.h:1273
void init_trivial_orbit(int i, int verbose_level)
Definition: sims.cpp:620
void point_stabilizer(data_structures_groups::vector_ge &SG, int *tl, int pt, int verbose_level)
void element_unrank(ring_theory::longinteger_object &a, int *elt, int verbose_level)
Definition: sims.cpp:1213
void print_all_group_elements_as_permutations_in_special_action(actions::action *A_special)
Definition: sims_io.cpp:547
void conjugate(actions::action *A, sims *old_G, int *Elt, int f_overshooting_OK, int verbose_level)
void coset_rep_inv(int *Elt, int i, int j, int verbose_level_le)
Definition: sims.cpp:1628
void init_cyclic_group_from_generator(actions::action *A, int *Elt, int verbose_level)
Definition: sims.cpp:378
void order_structure_relative_to_subgroup(int *C_sub, int *Order, int *Residue, int verbose_level)
Definition: sims3.cpp:95
void random_element(int *elt, int verbose_level)
void compute_all_powers(int elt_idx, int n, int *power_elt, int verbose_level)
void create_Cayley_graph(data_structures_groups::vector_ge *gens, int *&Adj, long int &n, int verbose_level)
void element_rank(ring_theory::longinteger_object &a, int *elt)
Definition: sims.cpp:1276
long int invert_by_rank(long int rk_a, int verbose_level)
void element_from_path(int *elt, int verbose_level)
Definition: sims.cpp:1108
void center(data_structures_groups::vector_ge &gens, int *center_element_ranks, int &nb_elements, int verbose_level)
void swap_points(int lvl, int i, int j)
Definition: sims.cpp:1069
long int conjugate_by_rank(long int rk_a, long int rk_b, int verbose_level)
int test_if_subgroup(sims *old_G, int verbose_level)
void init(actions::action *A, int verbose_level)
Definition: sims.cpp:289
void transitive_extension(schreier &O, data_structures_groups::vector_ge &SG, int *tl, int verbose_level)
void extend_base_orbit(int new_gen_idx, int lvl, int verbose_level)
Definition: sims_main.cpp:97
void dimino(int *subgroup, int subgroup_sz, int *gens, int &nb_gens, int *cosets, int new_gen, int *group, int &group_sz, int verbose_level)
void transitive_extension_using_coset_representatives_extract_generators(int *coset_reps, int nb_cosets, data_structures_groups::vector_ge &SG, int *tl, int verbose_level)
void read_list_of_elements(actions::action *A, char *fname, int verbose_level)
Definition: sims_io.cpp:638
void all_cosets(int *subset, int size, long int *all_cosets, int verbose_level)
void extract_strong_generators_in_order(data_structures_groups::vector_ge &SG, int *tl, int verbose_level)
Definition: sims.cpp:1704
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)
Definition: sims.cpp:951
int is_normalizing(int *Elt, int verbose_level)
void compute_base_orbit(int lvl, int verbose_level)
Definition: sims_main.cpp:189
void build_up_group_from_generators(sims *K, data_structures_groups::vector_ge *gens, int f_target_go, ring_theory::longinteger_object *target_go, int f_override_choose_next_base_point, int(*choose_next_base_point_method)(actions::action *A, int *Elt, int verbose_level), int verbose_level)
Definition: sims_main.cpp:1042
void compute_coset_rep_path(int i, int j, int &depth, int *&Path, int *&Label, int verbose_level)
Definition: sims.cpp:1544
void init_trivial_group(int verbose_level)
Definition: sims.cpp:584
void create_group_table(int *&Table, long int &n, int verbose_level)
void add_generator_at_level_only(int *elt, int lvl, int verbose_level)
Definition: sims_main.cpp:580
void element_as_permutation(actions::action *A_special, long int elt_rk, int *perm, int verbose_level)
Definition: sims.cpp:2060
void print_all_group_elements_with_permutations_tex(std::ostream &ost)
Definition: sims_io.cpp:497
void report(std::ostream &ost, std::string &prefix, graphics::layered_graph_draw_options *LG_Draw_options, int verbose_level)
Definition: sims_io.cpp:760
void extend_group_random_process_no_kernel(sims *extending_by_G, ring_theory::longinteger_object &target_go, int verbose_level)
Definition: sims_main.cpp:642
void print_group_order_factored(std::ostream &ost)
Definition: sims_io.cpp:364
void compute_base_orbits_known_length(int *tl, int verbose_level)
Definition: sims_main.cpp:57
int least_moved_point_at_level(int lvl, int verbose_level)
Definition: sims.cpp:2084
int get_image(int i, int gen_idx)
Definition: sims.cpp:1037
void find_standard_generators_int(int ord_a, int ord_b, int ord_ab, int &a, int &b, int &nb_trials, int verbose_level)
void build_up_subgroup_random_process(sims *G, void(*choose_random_generator_for_subgroup)(sims *G, int *Elt, int verbose_level), int verbose_level)
Definition: sims2.cpp:53
void zuppo_list(int *Zuppos, int &nb_zuppos, int verbose_level)
void initialize_table(int i, int verbose_level)
Definition: sims.cpp:563
void print_all_group_elements_to_file(char *fname, int verbose_level)
Definition: sims_io.cpp:424
void print_generators_as_permutations_override_action(actions::action *A)
Definition: sims_io.cpp:286
int closure_group(int nb_times, int verbose_level)
Definition: sims_main.cpp:1353
long int conjugate_by_rank_b_bv_given(long int rk_a, int *Elt_b, int *Elt_bv, int verbose_level)
void element_ranks_subgroup(sims *subgroup, int *element_ranks, int verbose_level)
void print_all_group_elements_tex(std::ostream &ost)
Definition: sims_io.cpp:474
void init_generators_by_hdl(int nb_gen, int *gen_hdl, int verbose_level)
Definition: sims.cpp:723
void transitive_extension_using_generators(int *Elt_gens, int nb_gens, int subgroup_index, data_structures_groups::vector_ge &SG, int *tl, int verbose_level)
void evaluate_word_int(int word_len, int *word, int *Elt, int verbose_level)
void group_order_verbose(ring_theory::longinteger_object &go, int verbose_level)
Definition: sims.cpp:964
void all_elements(data_structures_groups::vector_ge *&vec, int verbose_level)
Definition: sims.cpp:2205
void print_generators_tex(std::ostream &ost)
Definition: sims_io.cpp:231
void write_all_group_elements(char *fname, int verbose_level)
Definition: sims_io.cpp:395
void add_generator_at_level(int *elt, int lvl, int verbose_level)
Definition: sims_main.cpp:543
void subgroup_order_verbose(ring_theory::longinteger_object &go, int level, int verbose_level)
Definition: sims.cpp:984
void write_as_magma_permutation_group(std::string &fname_base, data_structures_groups::vector_ge *gens, int verbose_level)
Definition: sims_io.cpp:677
int compute_coset_rep_depth(int i, int j, int verbose_level)
Definition: sims.cpp:1508
void create_group_tree(const char *fname, int f_full, int verbose_level)
Definition: sims_io.cpp:23
void normalizer_based_on_characteristic_vector(int *C_sub, int *Gen_idx, int nb_gens, int *N, long int &N_go, int verbose_level)
Definition: sims3.cpp:48
void subgroup_make_characteristic_vector(sims *Sub, int *C, int verbose_level)
Definition: sims3.cpp:18
data_structures_groups::vector_ge gens
Definition: groups.h:1280
int transitive_extension_tolerant(schreier &O, data_structures_groups::vector_ge &SG, int *tl, int f_tolerant, int verbose_level)
void element_unrank_lint(long int rk, int *Elt, int verbose_level)
Definition: sims.cpp:1326
void add_generator(int *elt, int verbose_level)
Definition: sims.cpp:803
void random_schreier_generator(int *Elt, int verbose_level)
Definition: sims.cpp:1803
void random_element_of_order(int *elt, int order, int verbose_level)
void build_up_group_random_process_no_kernel(sims *old_G, int verbose_level)
Definition: sims_main.cpp:606
void coset_rep(int *Elt, int i, int j, int verbose_level)
Definition: sims.cpp:1414
void all_elements_save_csv(std::string &fname, int verbose_level)
Definition: sims.cpp:2236
data_structures_groups::vector_ge gens_inv
Definition: groups.h:1281
void reallocate_base(int old_base_len, int verbose_level)
Definition: sims.cpp:445
int strip(int *elt, int *residue, int &drop_out_level, int &image, int verbose_level)
Definition: sims_main.cpp:433
void Cayley_graph(int *&Adj, int &sz, data_structures_groups::vector_ge *gens_S, int verbose_level)
long int find_element_of_given_order_int(int ord, int &nb_trials, int verbose_level)
void init_generators(data_structures_groups::vector_ge &generators, int verbose_level)
Definition: sims.cpp:660
void save_list_of_elements(char *fname, int verbose_level)
Definition: sims_io.cpp:602
void compute_base_orbits(int verbose_level)
Definition: sims_main.cpp:25
void compute_conjugacy_classes(actions::action *&Aconj, induced_actions::action_by_conjugation *&ABC, schreier *&Sch, strong_generators *&SG, int &nb_classes, int *&class_size, int *&class_rep, int verbose_level)
void print_group_order(std::ostream &ost)
Definition: sims_io.cpp:357
void point_stabilizer_with_action(actions::action *A2, data_structures_groups::vector_ge &SG, int *tl, int pt, int verbose_level)
void sylow_subgroup(int p, sims *P, int verbose_level)
void init_without_base(actions::action *A, int verbose_level)
Definition: sims.cpp:400
void table_of_group_elements_in_data_form(int *&Table, int &len, int &sz, int verbose_level)
int find_element_with_exactly_n_fixpoints_in_given_action(int *Elt, int nb_fixpoints, actions::action *A_given, int verbose_level)
void point_stabilizer_stabchain_with_action(actions::action *A2, sims &S, int pt, int verbose_level)
void compute_base_orbit_known_length(int lvl, int target_length, int verbose_level)
Definition: sims_main.cpp:267
int test_if_in_set_stabilizer(actions::action *A, long int *set, int size, int verbose_level)
void random_elements_of_order(data_structures_groups::vector_ge *elts, int *orders, int nb, int verbose_level)
void transitive_extension_using_coset_representatives(int *coset_reps, int nb_cosets, int verbose_level)
void build_up_group_random_process(sims *K, sims *old_G, ring_theory::longinteger_object &target_go, int f_override_choose_next_base_point, int(*choose_next_base_point_method)(actions::action *A, int *Elt, int verbose_level), int verbose_level)
Definition: sims_main.cpp:675
void find_element_of_prime_power_order(int p, int *Elt, int &e, int &nb_trials, int verbose_level)
int strip_and_add(int *elt, int *residue, int verbose_level)
Definition: sims_main.cpp:379
void init_generator_depth_and_perm(int verbose_level)
Definition: sims.cpp:747
a strong generating set for a permutation group with respect to a fixed action
Definition: groups.h:1703
void init_trivial_group(actions::action *A, int verbose_level)
void init_copy(strong_generators *S, int verbose_level)
void generators_for_the_monomial_group(actions::action *A, matrix_group *Mtx, int verbose_level)
void Janko1(actions::action *A, field_theory::finite_field *F, int verbose_level)
void compute_and_print_orbits_on_a_given_set(actions::action *A_given, long int *set, int len, int verbose_level)
void init_linear_group_from_scratch(actions::action *&A, field_theory::finite_field *F, int n, linear_group_description *Descr, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void init_centralizer_of_matrix_general_linear(actions::action *A_projective, actions::action *A_general_linear, int *Mtx, int verbose_level)
void compute_schreier_with_given_action_on_a_given_set(actions::action *A_given, schreier *&Sch, long int *set, int len, int verbose_level)
void orbits_on_points_with_given_action(actions::action *A_given, int &nb_orbits, int *&orbit_reps, int verbose_level)
void create_group_table(int *&Table, long int &go, int verbose_level)
void init_from_data(actions::action *A, int *data, int nb_elements, int elt_size, int *transversal_length, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void generators_for_parabolic_subgroup(actions::action *A_PGL_n_q, matrix_group *Mtx, int k, int verbose_level)
void init_by_hdl_and_with_tl(actions::action *A, std::vector< int > &gen_handle, std::vector< int > &tl, int verbose_level)
void orbits_on_points(int &nb_orbits, int *&orbit_reps, int verbose_level)
void stabilizer_of_F13_surface(actions::action *A, field_theory::finite_field *F, int a, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void diagonally_repeat(actions::action *An, strong_generators *Sn, int verbose_level)
void export_group_and_copy_to_latex(std::string &label_txt, std::ostream &ost, actions::action *A2, int verbose_level)
void get_gens_data(int *&data, int &sz, int verbose_level)
void test_if_set_is_invariant_under_given_action(actions::action *A_given, long int *set, int set_sz, int verbose_level)
void print_generators_as_permutations_tex(std::ostream &ost, actions::action *A2)
void stabilizer_of_cubic_surface_from_catalogue(actions::action *A, field_theory::finite_field *F, int iso, int verbose_level)
void print_generators_MAGMA(actions::action *A, std::ostream &ost)
void exterior_square(actions::action *A_detached, strong_generators *SG_original, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void normalizer_of_a_Hall_reflection(int nb_pairs, int &degree, int verbose_level)
strong_generators * point_stabilizer(int pt, int verbose_level)
void add_single_generator(int *Elt, int group_index, int verbose_level)
void init_single_with_target_go(actions::action *A, int *Elt, int target_go, int verbose_level)
void init_point_stabilizer_of_arbitrary_point_through_schreier(schreier *Sch, int pt, int &orbit_idx, ring_theory::longinteger_object &full_group_order, int verbose_level)
void print_elements_latex_ost_with_print_point_function(actions::action *A, std::ostream &ost, void(*point_label)(std::stringstream &sstr, long int pt, void *data), void *point_label_data)
void init_single(actions::action *A, int *Elt, int verbose_level)
void export_group_to_magma_and_copy_to_latex(std::string &label_txt, std::ostream &ost, actions::action *A2, int verbose_level)
void init_point_stabilizer_orbit_rep_schreier(schreier *Sch, int orbit_idx, ring_theory::longinteger_object &full_group_order, int verbose_level)
void init_from_permutation_representation(actions::action *A, sims *parent_group_S, int *data, int nb_elements, long int group_order, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void init_by_hdl(actions::action *A, int *gen_hdl, int nb_gen, int verbose_level)
schreier * orbit_of_one_point_schreier(actions::action *A_given, int pt, int verbose_level)
void Hall_reflection(int nb_pairs, int &degree, int verbose_level)
void print_elements_with_given_action(std::ostream &ost, actions::action *A2)
void decode_ascii_coding(char *ascii_coding, int verbose_level)
void generators_for_stabilizer_of_three_collinear_points_in_PGL4(actions::action *A_PGL_4_q, matrix_group *Mtx, int verbose_level)
void init_from_ascii_coding(actions::action *A, char *ascii_coding, int verbose_level)
void report_fixed_objects_in_P3(std::ostream &ost, geometry::projective_space *P3, int verbose_level)
void switch_to_subgroup(const char *rank_vector_text, const char *subgroup_order_text, sims *S, int *&subgroup_gens_idx, int &nb_subgroup_gens, int verbose_level)
void generators_for_the_orthogonal_group(actions::action *A, field_theory::finite_field *F, int n, int epsilon, int f_semilinear, int verbose_level)
void init_generators_for_the_conjugate_group_aGav(strong_generators *SG, int *Elt_a, int verbose_level)
void list_of_elements_of_subgroup(strong_generators *gens_subgroup, long int *&Subgroup_elements_by_index, long int &sz_subgroup, int verbose_level)
void stabilizer_of_quartic_curve_from_catalogue(actions::action *A, field_theory::finite_field *F, int iso, int verbose_level)
void print_generators_tex_with_print_point_function(actions::action *A, std::ostream &ost, void(*point_label)(std::stringstream &sstr, long int pt, void *data), void *point_label_data)
strong_generators * find_cyclic_subgroup_with_exactly_n_fixpoints(int nb_fixpoints, actions::action *A_given, int verbose_level)
void compute_and_print_orbits(actions::action *A_given, int verbose_level)
void stabilizer_of_G13_surface(actions::action *A, field_theory::finite_field *F, int a, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
schreier * orbits_on_points_schreier(actions::action *A_given, int verbose_level)
void generators_for_the_stabilizer_of_two_components(actions::action *A_PGL_n_q, matrix_group *Mtx, int verbose_level)
void canonical_image_GAP(std::string &input_set_text, std::ostream &ost)
void read_from_file_binary(actions::action *A, std::ifstream &fp, int verbose_level)
void compute_ascii_coding(char *&ascii_coding, int verbose_level)
void read_file(actions::action *A, std::string &fname, int verbose_level)
void init_from_data_with_target_go(actions::action *A, int *data_gens, int data_gens_size, int nb_gens, ring_theory::longinteger_object &target_go, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void export_magma(actions::action *A, std::ostream &ost, int verbose_level)
void generators_for_the_null_polarity_group(actions::action *A, matrix_group *Mtx, int verbose_level)
void generators_for_the_identity_subgroup(actions::action *A_linear, matrix_group *Mtx, int verbose_level)
void write_to_file_binary(std::ofstream &fp, int verbose_level)
void export_permutation_group_to_GAP(std::string &fname, actions::action *A2, int verbose_level)
void generators_for_the_singer_cycle(actions::action *A, matrix_group *Mtx, int power_of_singer, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void stabilizer_of_spread_from_catalogue(actions::action *A, int q, int k, int iso, int verbose_level)
void generators_for_the_diagonal_group(actions::action *A, matrix_group *Mtx, int verbose_level)
void hyperplane_lifting_with_two_lines_fixed(strong_generators *SG_hyperplane, geometry::projective_space *P, int line1, int line2, int verbose_level)
void init_centralizer_of_matrix(actions::action *A, int *Mtx, int verbose_level)
void print_with_given_action(std::ostream &ost, actions::action *A2)
void stabilizer_of_pencil_of_conics(actions::action *A, field_theory::finite_field *F, int verbose_level)
void generators_for_the_borel_subgroup_lower(actions::action *A_linear, matrix_group *Mtx, int verbose_level)
void print_generators_in_different_action_tex(std::ostream &ost, actions::action *A2)
void init_from_sims(groups::sims *S, int verbose_level)
void orbits_light(actions::action *A_given, int *&Orbit_reps, int *&Orbit_lengths, int &nb_orbits, int **&Pts_per_generator, int *&Nb_per_generator, int verbose_level)
void init_generators_for_the_conjugate_group_avGa(strong_generators *SG, int *Elt_a, int verbose_level)
void export_to_orbiter_as_bsgs(actions::action *A2, std::string &fname, std::string &label, std::string &label_tex, int verbose_level)
void export_group_to_GAP_and_copy_to_latex(std::string &label_txt, std::ostream &ost, actions::action *A2, int verbose_level)
void field_reduction(actions::action *Aq, int n, int s, field_theory::finite_field *Fq, int verbose_level)
void add_generators(data_structures_groups::vector_ge *coset_reps, int group_index, int verbose_level)
void compute_schreier_with_given_action(actions::action *A_given, schreier *&Sch, int verbose_level)
void regulus_stabilizer(actions::action *A_PGL_n_q, matrix_group *Mtx, int verbose_level)
void generators_for_stabilizer_of_triangle_in_PGL4(actions::action *A_PGL_4_q, matrix_group *Mtx, int verbose_level)
void generators_for_translation_plane_in_andre_model(actions::action *A_PGL_n1_q, actions::action *A_PGL_n_q, matrix_group *Mtx_n1, matrix_group *Mtx_n, data_structures_groups::vector_ge *spread_stab_gens, ring_theory::longinteger_object &spread_stab_go, int verbose_level)
void generators_for_the_singer_cycle_and_the_Frobenius(actions::action *A, matrix_group *Mtx, int power_of_singer, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void write_file(std::string &fname, int verbose_level)
void init_from_data_with_go(actions::action *A, std::string &generators_data, std::string &go_text, int verbose_level)
void init_subgroup(actions::action *A, int *subgroup_gens_idx, int nb_subgroup_gens, const char *subgroup_order_text, sims *S, int verbose_level)
void init_transposed_group(strong_generators *SG, int verbose_level)
void export_permutation_group_to_magma(std::string &fname, actions::action *A2, int verbose_level)
void print_generators_gap_in_different_action(std::ostream &ost, actions::action *A2)
void init_subgroup_by_generators(actions::action *A, int nb_subgroup_gens, int *subgroup_gens, std::string &subgroup_order_text, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
sims * create_sims_in_different_action(actions::action *A_given, int verbose_level)
void generators_for_the_borel_subgroup_upper(actions::action *A_linear, matrix_group *Mtx, int verbose_level)
void init_group_extension(strong_generators *subgroup, int *data, int index, int verbose_level)
void stabilizer_of_Eckardt_surface(actions::action *A, field_theory::finite_field *F, int f_with_normalizer, int f_semilinear, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void make_element_which_moves_a_point_from_A_to_B(actions::action *A_given, int pt_A, int pt_B, int *Elt, int verbose_level)
void generators_for_symplectic_group(actions::action *A, matrix_group *Mtx, int verbose_level)
void init_from_data_with_target_go_ascii(actions::action *A, int *data, int nb_elements, int elt_size, const char *ascii_target_go, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
data_structures_groups::vector_ge * gens
Definition: groups.h:1708
void BLT_set_from_catalogue_stabilizer(actions::action *A, field_theory::finite_field *F, int iso, int verbose_level)
void get_gens_data_as_string_with_quotes(std::string &str, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
a subgroup of a group using a list of elements
Definition: groups.h:2039
void init_from_sims(sims *S, sims *Sub, strong_generators *SG, int verbose_level)
Definition: subgroup.cpp:63
void init(int *Elements, int group_order, int *gens, int nb_gens)
Definition: subgroup.cpp:96
The Sylow structure of a finite group.
Definition: groups.h:2068
the wreath product group GL(d,q) wreath Sym(n)
Definition: groups.h:2093
void create_matrix(int *Elt, int *A, int verbose_level)
void element_invert(int *A, int *Av, int verbose_level)
void element_print_easy(int *Elt, std::ostream &ost)
void put_digit(uchar *elt, int f, int i, int j, int d)
void report(std::ostream &ost, int verbose_level)
void unrank_point(long int a, int *v, int verbose_level)
data_structures::page_storage * Elts
Definition: groups.h:2156
void element_move(int *A, int *B, int verbose_level)
permutation_representation_domain * P
Definition: groups.h:2121
void orbits_restricted_compute(strong_generators *SG, actions::action *A, int *&result, int &nb_gens, int &degree, int nb_factors, std::string &orbits_restricted_fname, int verbose_level)
void element_print_latex(int *Elt, std::ostream &ost)
void init_tensor_wreath_product(matrix_group *M, actions::action *A_mtx, int nb_factors, int verbose_level)
long int element_image_of(int *Elt, long int a, int verbose_level)
int test_if_file_exists(int nb_factors, int h, int b)
void element_print_for_make_element(int *Elt, std::ostream &ost)
void make_element_from_one_component(int *Elt, int f, int *Elt_component)
void make_strong_generators_data(int *&data, int &size, int &nb_gens, int verbose_level)
void make_fname(char *fname, int nb_factors, int h, int b)
void apply_permutation(int *Elt, int *v_in, int *v_out, int verbose_level)
void create_all_rank_one_tensors(uint32_t *&rank_one_tensors, int &nb_rank_one_tensors, int verbose_level)
void report_rank_one_tensors(std::ostream &ost, int verbose_level)
void element_image_of_low_level(int *Elt, int *input, int *output, int verbose_level)
void make_element(int *Elt, int *data, int verbose_level)
void orbits_using_files_and_union_find(strong_generators *SG, actions::action *A, int *&result, int &nb_gens, int &degree, int nb_factors, int verbosity)
int get_digit(uchar *elt, int f, int i, int j)
void element_mult(int *A, int *B, int *AB, int verbose_level)
void compute_permutations_and_write_to_file(strong_generators *SG, actions::action *A, int *&result, int &nb_gens, int &degree, int nb_factors, int verbose_level)
void orbits_restricted(strong_generators *SG, actions::action *A, int *&result, int &nb_gens, int &degree, int nb_factors, std::string &orbits_restricted_fname, int verbose_level)
long int rank_point(int *v, int verbose_level)
induced action by conjugation on the elements of a given group
unsigned char uchar
Definition: foundations.h:204
void choose_random_generator_derived_group(sims *G, int *Elt, int verbose_level)
Definition: sims2.cpp:18
permutation_group_type
enumeration to distinguish between the various types of permutation groups
shallow_schreier_tree_strategy
the strategy which is employed to create shallow Schreier trees
the orbiter library for the classification of combinatorial objects