Orbiter 2022
Combinatorial Objects
actions.h
Go to the documentation of this file.
1// group_actions.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_ACTIONS_ACTIONS_H_
11#define ORBITER_SRC_LIB_GROUP_ACTIONS_ACTIONS_ACTIONS_H_
12
13
14
15namespace orbiter {
16
17namespace layer3_group_actions {
18
19
20namespace actions {
21
22
23// #############################################################################
24// action.cpp
25// #############################################################################
26
28
99class action {
100public:
101
102
107
110
115
116
121
124
125
128
131
133 long int degree;
134
135
138 // matrix_group_t,
139 // action_on_wedge_product_t,
140 // action_by_representation_t
141
144
145
148
152
153
158
164
168
172
174
175
177
179
180
182
184 int *Elt1, *Elt2, *Elt3, *Elt4, *Elt5;
188 // [coded_elt_size_in_char]
189 // for element_write_to_memory_object,
190 // element_read_from_memory_object
191
192
193
195 std::string label;
196
198 std::string label_tex;
199
200
201
202 // action.cpp
203 action();
204 ~action();
205 void null();
206 void freeself();
207
208 int f_has_base();
209 int base_len();
210 void set_base_len(int base_len);
211 long int &base_i(int i);
212 long int *&get_base();
213 int &transversal_length_i(int i);
215 long int &orbit_ij(int i, int j);
216 long int &orbit_inv_ij(int i, int j);
217
218 void null_element_data();
220 void free_element_data();
221
222 int find_non_fixed_point(void *elt, int verbose_level);
223 int find_fixed_points(void *elt,
224 int *fixed_points, int verbose_level);
225 int count_fixed_points(void *elt, int verbose_level);
226 int test_if_set_stabilizes(int *Elt,
227 int size, long int *set, int verbose_level);
228 void map_a_set(long int *set, long int *image_set,
229 int n, int *Elt, int verbose_level);
230 void map_a_set_and_reorder(long int *set, long int *image_set,
231 int n, int *Elt, int verbose_level);
233
234 void init_sims_only(groups::sims *G, int verbose_level);
235 void compute_strong_generators_from_sims(int verbose_level);
236 void init_base_from_sims(groups::sims *G, int verbose_level);
237 int element_has_order_two(int *E1, int verbose_level);
238 int product_has_order_two(int *E1, int *E2, int verbose_level);
239 int product_has_order_three(int *E1, int *E2, int verbose_level);
240 int element_order(void *elt);
241 int element_order_and_cycle_type(void *elt, int *cycle_type);
243 void *elt, int *cycle_type, int verbose_level);
244 int element_order_if_divisor_of(void *elt, int o);
247 int verbose_level);
248
250 int depth_in_stab_chain(int *Elt);
251
252
255 void strong_generators_at_depth(int depth,
256 data_structures_groups::vector_ge &gen, int verbose_level);
259 groups::sims *S, int *sequence, int len,
260 int verbose_level);
262 data_structures_groups::vector_ge &strong_generators,
263 int pt, int *orbit,
264 int verbose_level);
266 int nb_gen, int *gen_handle,
267 int pt, int *orbit,
268 int verbose_level);
270 data_structures_groups::vector_ge &strong_generators,
271 int pt, int *transporter,
272 int verbose_level);
274 std::vector<int> &gen_handle,
275 int pt, int *transporter, int verbose_level);
277 int *gen_handle, int pt, int *transporter,
278 int verbose_level);
279 void all_point_orbits(groups::schreier &Schreier, int verbose_level);
282 int verbose_level);
284 int *Elt,
285 int verbose_level);
286 void compute_stabilizer_orbits(data_structures::partitionstack *&Staborbits,
287 int verbose_level);
288 int check_if_in_set_stabilizer(int *Elt,
289 int size, long int *set,
290 int verbose_level);
291 int check_if_transporter_for_set(int *Elt,
292 int size, long int *set1, long int *set2,
293 int verbose_level);
296 int size, long int *set,
297 int &nb_sets, long int **&Sets,
298 int **&Transporter,
299 int verbose_level);
300 void delete_set_orbit(int nb_sets,
301 long int **Sets, int **Transporter);
304 int size, long int *set,
305 long int *minimal_set, int *transporter,
306 int verbose_level);
308 long int *the_base, int level,
310 data_structures_groups::vector_ge &subset_of_gens,
311 int verbose_level);
313 groups::sims *S, int *data, int verbose_level);
315 int *data, int verbose_level);
316 void make_element_2x2(int *Elt, int a0, int a1, int a2, int a3);
317 void make_element_from_string(int *Elt,
318 std::string &data_string, int verbose_level);
319 void make_element(int *Elt, int *data, int verbose_level);
321 int *aut_data,
322 groups::sims &S, int verbose_level);
323 void element_power_int_in_place(int *Elt,
324 int n, int verbose_level);
325 void word_in_ab(int *Elt1, int *Elt2, int *Elt3,
326 const char *word, int verbose_level);
327 void init_group_from_generators(int *group_generator_data,
328 int group_generator_size,
329 int f_group_order_target, const char *group_order_target,
332 int verbose_level);
334 groups::sims *S,
335 int *group_generator_data, int group_generator_size,
336 int f_group_order_target, const char *group_order_target,
338 groups::strong_generators *&Strong_gens_out,
339 int verbose_level);
340 void group_order(ring_theory::longinteger_object &go);
341 long int group_order_lint();
342 void element_print_base_images(int *Elt);
343 void element_print_base_images(int *Elt, std::ostream &ost);
345 std::ostream &ost, int verbose_level);
346 void element_base_images(int *Elt, int *base_images);
347 void element_base_images_verbose(int *Elt,
348 int *base_images, int verbose_level);
349 void minimize_base_images(int level, groups::sims *S,
350 int *Elt, int verbose_level);
351 void get_generators_from_ascii_coding(char *ascii_coding,
353 int *&tl, int verbose_level);
354 void lexorder_test(long int *set, int set_sz, int &set_sz_after_test,
356 int max_starter,
357 int verbose_level);
360 int verbose_level);
361
363 int n, int no,
365 std::string &stab_order,
366 int verbose_level);
368 int k, int no,
369 data_structures_groups::vector_ge *&gens, std::string &stab_order,
370 int verbose_level);
372 int q, int no,
374 std::string &stab_order,
375 int verbose_level);
376
377 void point_stabilizer_any_point(int &pt,
378 groups::schreier *&Sch, groups::sims *&Stab,
379 groups::strong_generators *&stab_gens,
380 int verbose_level);
382 groups::strong_generators *input_gens,
383 int &pt,
384 groups::schreier *&Sch, groups::sims *&Stab,
385 groups::strong_generators *&stab_gens,
386 int verbose_level);
388 geometry::grassmann *Gr,
389 long int line_rk, int *Elt, int verbose_level);
391 field_theory::finite_field *matrix_group_finite_field();
393 int is_projective();
394 int is_affine();
395 int is_general_linear();
396 int is_matrix_group();
398 void perform_tests(groups::strong_generators *SG, int verbose_level);
399 void multiply_based_on_text(std::string &data_A, std::string &data_B, int verbose_level);
400 void inverse_based_on_text(std::string &data_A, int verbose_level);
401 void raise_to_the_power_based_on_text(std::string &data_A,
402 std::string &exponent_text, int verbose_level);
403
404
405 // action_group_theory.cpp:
406 void normalizer_using_MAGMA(std::string &fname_magma_prefix,
407 groups::sims *G, groups::sims *H, groups::strong_generators *&gens_N, int verbose_level);
408 void conjugacy_classes_using_MAGMA(std::string &prefix,
409 groups::sims *G, int verbose_level);
411 std::string &prefix,
412 std::string &fname_magma, std::string &fname_output);
414 std::string &prefix,
415 groups::sims *G, int verbose_level);
417 std::string &fname,
418 int &nb_classes,
419 int *&perms,
420 int *&class_size,
421 int *&class_order_of_element,
422 long int *&class_normalizer_order,
423 int *&class_normalizer_number_of_generators,
424 int **&normalizer_generators_perms,
425 int verbose_level);
426 void normalizer_of_cyclic_group_using_MAGMA(std::string &fname_magma_prefix,
427 groups::sims *G, int *Elt, groups::strong_generators *&gens_N,
428 int verbose_level);
429 void centralizer_using_MAGMA(std::string &prefix,
430 groups::sims *G, int *Elt, groups::strong_generators *&gens,
431 int verbose_level);
432 void read_centralizer_magma(std::string &fname_output,
433 groups::sims *override_Sims, groups::strong_generators *&gens,
434 int verbose_level);
435 void centralizer_using_magma2(std::string &prefix,
436 std::string &fname_magma,
437 std::string &fname_output,
438 groups::sims *override_Sims, int *Elt, int verbose_level);
439 void find_subgroups_using_MAGMA(std::string &prefix,
440 groups::sims *override_Sims,
441 int subgroup_order,
442 int &nb_subgroups, groups::strong_generators *&H_gens, groups::strong_generators *&N_gens,
443 int verbose_level);
444 void read_subgroups_magma(std::string &fname_output,
445 groups::sims *override_Sims, int subgroup_order,
446 int &nb_subgroups, groups::strong_generators *&H_gens, groups::strong_generators *&N_gens,
447 int verbose_level);
448 void find_subgroups_using_MAGMA2(std::string &prefix,
449 std::string &fname_magma, std::string &fname_output,
450 groups::sims *override_Sims, int subgroup_order,
451 int verbose_level);
453 std::string &label,
454 std::string &label_tex,
455 int verbose_level);
456 void report_conjugacy_classes_and_normalizers(std::ostream &ost,
457 groups::sims *override_Sims, int verbose_level);
459 std::string &fname, groups::sims *override_sims,
460 std::string &label_latex, int verbose_level);
462 std::string &fname, groups::sims *override_Sims,int verbose_level);
463 void report_groups_and_normalizers(std::ostream &ost,
464 int nb_subgroups, groups::strong_generators *H_gens, groups::strong_generators *N_gens,
465 int verbose_level);
466 void report_fixed_objects(int *Elt,
467 char *fname_latex, int verbose_level);
468 void element_conjugate_bvab(int *Elt_A,
469 int *Elt_B, int *Elt_C, int verbose_level);
470 void element_conjugate_babv(int *Elt_A,
471 int *Elt_B, int *Elt_C, int verbose_level);
472 void element_commutator_abavbv(int *Elt_A,
473 int *Elt_B, int *Elt_C, int verbose_level);
475 groups::strong_generators *Aut_gens, int verbose_level);
476
477
478 // action_indexing_cosets.cpp
479 void coset_unrank(groups::sims *G, groups::sims *U, long int rank,
480 int *Elt, int verbose_level);
482 int *Elt, int verbose_level);
483 // used in generator::coset_unrank and generator::coset_rank
484 // which in turn are used by
485 // generator::orbit_element_unrank and
486 // generator::orbit_element_rank
487
488 // action_init.cpp
489
492 field_theory::finite_field *F, int m,
493 int f_projective, int f_general, int f_affine,
494 int f_semilinear, int f_special,
496 int verbose_level);
497
499 void init_projective_group(int n, field_theory::finite_field *F,
500 int f_semilinear, int f_basis, int f_init_sims,
502 int verbose_level);
503
504
506 void init_affine_group(int n, field_theory::finite_field *F,
507 int f_semilinear,
508 int f_basis, int f_init_sims,
510 int verbose_level);
511
513 void init_general_linear_group(int n, field_theory::finite_field *F,
514 int f_semilinear, int f_basis, int f_init_sims,
516 int verbose_level);
517
519 data_structures_groups::vector_ge *&nice_gens, int f_init_sims,
520 int verbose_level);
521
522 void init_sims_from_generators(int verbose_level);
523
525 void init_projective_special_group(int n, field_theory::finite_field *F,
526 int f_semilinear, int f_basis, int verbose_level);
527
530 int verbose_level);
531 void init_permutation_group(int degree, int f_no_base, int verbose_level);
532 void init_permutation_group_from_nauty_output(data_structures::nauty_output *NO,
533 int verbose_level);
535 int f_target_go, ring_theory::longinteger_object &target_go,
536 int nb_gens, int *gens,
537 int given_base_length, long int *given_base,
538 int f_no_base,
539 int verbose_level);
540
543 void init_affine_group(int n, int q, int f_translations,
544 int f_semilinear, int frobenius_power,
545 int f_multiplication,
546 int multiplication_order, int verbose_level);
547
548
551 void init_symmetric_group(int degree, int f_no_base, int verbose_level);
552
553
554 void create_sims(int verbose_level);
556 int f_has_target_group_order,
557 ring_theory::longinteger_object &target_go,
558 void (* callback_choose_random_generator)(int iteration,
559 int *Elt, void *data, int verbose_level),
560 int verbose_level);
561
562 void init_orthogonal_group_with_O(orthogonal_geometry::orthogonal *O,
563 int f_on_points, int f_on_lines, int f_on_points_and_lines,
564 int f_semilinear,
565 int f_basis, int verbose_level);
566
567
571 void init_wreath_product_group_and_restrict(int nb_factors, int n,
572 field_theory::finite_field *F,
574 int verbose_level);
575
579 void init_wreath_product_group(int nb_factors, int n,
580 field_theory::finite_field *F,
582 int verbose_level);
583
584
588 int f_stay_in_the_old_action,
590 int *Perms, int degree,
591 int verbose_level);
592
594 void init_BLT(field_theory::finite_field *F, int f_basis,
595 int f_init_hash_table, int verbose_level);
596
597
601 int given_base_length, int *given_base,
602 int verbose_level);
603
604
606 void init_orthogonal_group(int epsilon,
607 int n, field_theory::finite_field *F,
608 int f_on_points, int f_on_lines,
609 int f_on_points_and_lines,
610 int f_semilinear,
611 int f_basis, int verbose_level);
612
615 int *tl, int len, int verbose_level);
618 long int target_go, int verbose_level);
621 ring_theory::longinteger_object &target_go,
622 int verbose_level);
625 int verbose_level);
627 int *Elt, int verbose_level);
630 int f_target_go, ring_theory::longinteger_object &target_go,
631 int verbose_level);
633 int *Mtx, int verbose_level);
635 std::string &fname_base,
636 int *Table, int group_order, int *gens, int nb_gens,
637 groups::strong_generators *&Aut_gens,
638 int verbose_level);
639
640
641 // action_induce.cpp
642
644 int nb_rows,
645 int verbose_level);
647 int partition_class_size,
648 int verbose_level);
649
652 void init_action_on_lines(action *A, field_theory::finite_field *F,
653 int n, int verbose_level);
654
656 int f_induce_action, groups::sims *old_G,
657 int verbose_level);
659 int f_induce_action, groups::sims *old_G,
660 int verbose_level);
663 int f_induce_action, groups::sims *old_G,
664 int verbose_level);
666 int verbose_level);
669 int f_induce_action, groups::sims *old_G,
670 int verbose_level);
673 int f_induce_action, groups::sims *old_G,
674 int verbose_level);
677 int f_induce_action, groups::sims *old_G,
678 int verbose_level);
679 action *induced_action_on_wedge_product(int verbose_level);
682 int f_induce_action, groups::sims *old_G,
683 int verbose_level);
685 int verbose_level);
687 groups::sims *old_G, int verbose_level);
689 int verbose_level);
691 groups::sims *Base_group, int f_ownership,
692 int verbose_level);
694 groups::sims *Base_group, int f_ownership,
695 int f_basis, int verbose_level);
697 int f_basis, groups::sims *old_G,
698 groups::sims *Base_group, int f_ownership,
699 int verbose_level);
701 int set_size, long int *sets,
702 int verbose_level);
703 void induced_action_on_sets(action &old_action, groups::sims *old_G,
704 int nb_sets, int set_size, long int *sets,
705 int f_induce_action, int verbose_level);
707 int nb_subgroups, int group_order,
708 groups::subgroup **Subgroups, int verbose_level);
709 void induced_action_on_subgroups(action *old_action,
710 groups::sims *S,
711 int nb_subgroups, int group_order,
712 groups::subgroup **Subgroups,
713 int verbose_level);
715 action &old_action,
716 int f_induce_action, groups::sims *old_G,
718 int pt, int verbose_level);
719 void original_point_labels(long int *points, int nb_points,
720 long int *&original_points, int verbose_level);
721 action *restricted_action(long int *points, int nb_points,
722 int verbose_level);
724 groups::sims *S, int size, long int *set, int f_induce,
725 int verbose_level);
727 int f_induce_action, groups::sims *old_G,
728 int nb_points, long int *points, int verbose_level);
729 // uses action_by_restriction data type
730 void induced_action_on_pairs(action &old_action, groups::sims *old_G,
731 int verbose_level);
733 void induced_action_on_ordered_pairs(action &old_action,
734 groups::sims *old_G,
735 int verbose_level);
736 void induced_action_on_k_subsets(action &old_action, int k,
737 int verbose_level);
738 void induced_action_on_orbits(action *old_action,
739 groups::schreier *Sch, int f_play_it_safe,
740 int verbose_level);
741 void induced_action_on_flags(action *old_action,
742 int *type, int type_len,
743 int verbose_level);
744 void induced_action_on_bricks(action &old_action,
745 combinatorics::brick_domain *B, int f_linear_action,
746 int verbose_level);
748 action *An1, geometry::andre_construction *Andre,
749 int verbose_level);
750 void setup_product_action(action *A1, action *A2,
751 int f_use_projections, int verbose_level);
753 ring_theory::homogeneous_polynomial_domain *HPD,
754 int f_induce_action, groups::sims *old_G,
755 int verbose_level);
757 action *A_old,
758 ring_theory::homogeneous_polynomial_domain *HPD,
759 int *Equations, int nb_equations,
760 int f_induce_action, groups::sims *old_G,
761 int verbose_level);
762 void induced_action_recycle_sims(action &old_action,
763 int verbose_level);
764 void induced_action_override_sims(action &old_action,
765 groups::sims *old_G,
766 int verbose_level);
767 void induce(action *old_action, groups::sims *old_G,
768 int base_of_choice_len,
769 long int *base_of_choice,
770 int verbose_level);
771 int least_moved_point_at_level(int level,
772 int verbose_level);
773 void lex_least_base_in_place(int verbose_level);
774 void lex_least_base(action *old_action, int verbose_level);
775 int test_if_lex_least_base(int verbose_level);
776 void base_change_in_place(int size, long int *set, int verbose_level);
777 void base_change(action *old_action,
778 int size, long int *set, int verbose_level);
780 action *&A_by_restriction,
781 groups::schreier *&Orbits, groups::sims *S,
782 int size, long int *set,
783 int verbose_level);
785 action *&A_on_sets,
786 groups::schreier *&Orbits, groups::sims *S,
787 int nb_sets, int set_size, long int *sets,
788 int verbose_level);
790 int *Elt, int verbose_level);
792 int f_target_go, ring_theory::longinteger_object &target_go,
795 int verbose_level);
797 ring_theory::homogeneous_polynomial_domain *HPD,
798 int *The_equations, int nb_equations, groups::strong_generators *gens,
799 action *&A_on_equations, groups::schreier *&Orb, int verbose_level);
800
801 // action_io.cpp:
802 void report(std::ostream &ost, int f_sims, groups::sims *S,
803 int f_strong_gens, groups::strong_generators *SG,
804 graphics::layered_graph_draw_options *LG_Draw_options,
805 int verbose_level);
806 void report_what_we_act_on(std::ostream &ost,
807 graphics::layered_graph_draw_options *O,
808 int verbose_level);
810 std::string &prefix,
811 int level, int orbit_at_level, int level_of_candidates_file,
812 void (*early_test_func_callback)(long int *S, int len,
813 long int *candidates, int nb_candidates,
814 long int *good_candidates, int &nb_good_candidates,
815 void *data, int verbose_level),
816 void *early_test_func_callback_data,
817 long int *&starter,
818 int &starter_sz,
819 groups::sims *&Stab,
821 long int *&candidates,
822 int &nb_candidates,
823 int &nb_cases,
824 int verbose_level);
826 std::string &prefix,
827 int level, int orbit_at_level, int level_of_candidates_file,
828 long int *&starter,
829 int &starter_sz,
830 groups::sims *&Stab,
832 long int *&candidates,
833 int &nb_candidates,
834 int &nb_cases,
835 int verbose_level);
836 void read_representatives(std::string &fname,
837 int *&Reps, int &nb_reps, int &size, int verbose_level);
838 void read_representatives_and_strong_generators(std::string &fname,
839 int *&Reps,
840 char **&Aut_ascii, int &nb_reps,
841 int &size, int verbose_level);
842 void read_file_and_print_representatives(std::string &fname,
843 int f_print_stabilizer_generators, int verbose_level);
844 void read_set_and_stabilizer(std::string &fname,
845 int no, long int *&set, int &set_sz, groups::sims *&stab,
847 int &nb_cases,
848 int verbose_level);
851 std::ostream &ost);
852 void print_symmetry_group_type(std::ostream &ost);
853 void print_info();
854 void report_basic_orbits(std::ostream &ost);
855 void print_base();
856 void print_bare_base(std::ofstream &ost);
857 void latex_all_points(std::ostream &ost);
858 void latex_point_set(std::ostream &ost, long int *set, int sz, int verbose_level);
859 void print_group_order(std::ostream &ost);
860 void print_group_order_long(std::ostream &ost);
863 void write_set_of_elements_latex_file(std::string &fname, std::string &title, int *Elt, int nb_elts);
865 std::string &fname, std::string &label, groups::strong_generators *SG, int verbose_level);
867 std::string &fname, std::string &label, std::string &label_tex,
868 groups::strong_generators *SG, int verbose_level);
869
870 // action_cb.cpp
871 int image_of(void *elt, int a);
872 void image_of_low_level(void *elt,
873 int *input, int *output, int verbose_level);
874 int linear_entry_ij(void *elt, int i, int j);
875 int linear_entry_frobenius(void *elt);
876 void one(void *elt);
877 int is_one(void *elt);
878 void unpack(void *elt, void *Elt);
879 void pack(void *Elt, void *elt);
880 void retrieve(void *elt, int hdl);
881 int store(void *elt);
882 void mult(void *a, void *b, void *ab);
883 void mult_apply_from_the_right(void *a, void *b);
884 // a := a * b
885 void mult_apply_from_the_left(void *a, void *b);
886 // b := a * b
887 void invert(void *a, void *av);
888 void invert_in_place(void *a);
889 void transpose(void *a, void *at);
890 void move(void *a, void *b);
891 void dispose(int hdl);
892 void print(std::ostream &ost, void *elt);
893 void print_quick(std::ostream &ost, void *elt);
894 void print_as_permutation(std::ostream &ost, void *elt);
895 void print_point(int a, std::ostream &ost);
896 void unrank_point(long int rk, int *v);
897 long int rank_point(int *v);
898 void code_for_make_element(int *data, void *elt);
899 void print_for_make_element(std::ostream &ost, void *elt);
900 void print_for_make_element_no_commas(std::ostream &ost, void *elt);
901
902 long int element_image_of(long int a, void *elt, int verbose_level);
903 void element_image_of_low_level(int *input, int *output,
904 void *elt, int verbose_level);
905 int element_linear_entry_ij(void *elt, int i, int j,
906 int verbose_level);
907 int element_linear_entry_frobenius(void *elt, int verbose_level);
908 void element_one(void *elt, int verbose_level);
909 int element_is_one(void *elt, int verbose_level);
910 void element_unpack(void *elt, void *Elt, int verbose_level);
911 void element_pack(void *Elt, void *elt, int verbose_level);
912 void element_retrieve(int hdl, void *elt, int verbose_level);
913 int element_store(void *elt, int verbose_level);
914 void element_mult(void *a, void *b, void *ab, int verbose_level);
915 void element_invert(void *a, void *av, int verbose_level);
916 void element_transpose(void *a, void *at, int verbose_level);
917 void element_move(void *a, void *b, int verbose_level);
918 void element_dispose(int hdl, int verbose_level);
919 void element_print(void *elt, std::ostream &ost);
920 void element_print_quick(void *elt, std::ostream &ost);
921 void element_print_latex(void *elt, std::ostream &ost);
922 void element_print_latex_with_extras(void *elt, std::string &label, std::ostream &ost);
924 void *elt, std::ostream &ost,
925 void (*point_label)(std::stringstream &sstr, long int pt, void *data),
926 void *point_label_data);
927 void element_print_verbose(void *elt, std::ostream &ost);
928 void element_code_for_make_element(void *elt, int *data);
929 void element_print_for_make_element(void *elt,
930 std::ostream &ost);
932 std::ostream &ost);
933 void element_print_as_permutation(void *elt,
934 std::ostream &ost);
935 void element_as_permutation(void *elt,
936 int *perm, int verbose_level);
938 std::ostream &ost, int verbose_level);
940 std::ostream &ost,
941 int offset, int f_do_it_anyway_even_for_big_degree,
942 int f_print_cycles_of_length_one,
943 int verbose_level);
945 void *elt,
946 std::ostream &ost, int offset, int max_cycle_length,
947 int f_orbit_structure);
948 void element_print_image_of_set(void *elt,
949 int size, long int *set);
950 int element_signum_of_permutation(void *elt);
951 void element_write_file_fp(int *Elt,
952 std::ofstream &fp, int verbose_level);
953 void element_read_file_fp(int *Elt,
954 std::ifstream &fp, int verbose_level);
955 void element_write_file(int *Elt,
956 std::string &fname, int verbose_level);
957 void element_read_file(int *Elt,
958 std::string &fname, int verbose_level);
959 void element_write_to_memory_object(int *Elt,
960 orbiter_kernel_system::memory_object *m, int verbose_level);
961 void element_read_from_memory_object(int *Elt,
962 orbiter_kernel_system::memory_object *m, int verbose_level);
963 void element_write_to_file_binary(int *Elt,
964 std::ofstream &fp, int verbose_level);
965 void element_read_from_file_binary(int *Elt,
966 std::ifstream &fp, int verbose_level);
967 void random_element(groups::sims *S, int *Elt,
968 int verbose_level);
969 void all_elements(data_structures_groups::vector_ge *&vec, int verbose_level);
970 void all_elements_save_csv(std::string &fname, int verbose_level);
971
972
973 // in action_projective.cpp:
975 geometry::projective_space *P,
976 long int *set, int set_size, //int &canonical_pt,
977 int *canonical_set_or_NULL,
978 int verbose_level);
980 geometry::projective_space *P,
981 int *Elt, int *Mtx, int &frobenius,
982 int verbose_level);
983 // uses the function A->element_image_of
984 void report_fixed_objects_in_P3(std::ostream &ost,
985 geometry::projective_space *P3,
986 int *Elt,
987 int verbose_level);
988
989 // in backtrack.cpp
990 int is_minimal(
991 int size, long int *set, int &backtrack_level,
992 int verbose_level);
993 void make_canonical(
994 int size, long int *set,
995 long int *canonical_set, int *transporter,
996 int &total_backtrack_nodes,
997 int f_get_automorphism_group, groups::sims *Aut,
998 int verbose_level);
1000 int size, long int *set,
1001 int &backtrack_level, long int *witness,
1002 int *transporter_witness,
1003 int &backtrack_nodes,
1004 int f_get_automorphism_group, groups::sims &Aut,
1005 int verbose_level);
1006};
1007
1008
1009// #############################################################################
1010// action_global.cpp
1011// #############################################################################
1012
1014
1016public:
1017 void action_print_symmetry_group_type(std::ostream &ost, symmetry_group_type a);
1019 action *A_PGL_n_q, action *A_PGL_k_q,
1020 int k, data_structures_groups::vector_ge *gens, int verbose_level);
1022 action *A_PGL_n_q, action *A_PGL_k_q,
1023 int k, data_structures_groups::vector_ge *gens, int verbose_level);
1024 // used in semifield
1025 void compute_generators_GL_n_q(int *&Gens, int &nb_gens,
1026 int &elt_size, int n, field_theory::finite_field *F,
1028 int verbose_level);
1029 void set_orthogonal_group_type(int f_siegel,
1030 int f_reflection, int f_similarity, int f_semisimilarity);
1034 action *Aq, field_theory::subfield_structure *S, int n, int verbose_level);
1037 action *AQ, field_theory::subfield_structure *S, int n,
1038 int verbose_level);
1040 int n, int s,
1041 field_theory::subfield_structure *S,
1042 action *Aq, action *AQ,
1043 groups::strong_generators *&Strong_gens,
1044 int verbose_level);
1045 void perm_print_cycles_sorted_by_length(std::ostream &ost,
1046 int degree, int *perm, int verbose_level);
1047 void perm_print_cycles_sorted_by_length_offset(std::ostream &ost,
1048 int degree, int *perm, int offset,
1049 int f_do_it_anyway_even_for_big_degree,
1050 int f_print_cycles_of_length_one, int verbose_level);
1052 groups::matrix_group *M1, groups::matrix_group *M2, int verbose_level);
1055 int verbose_level);
1057 geometry::projective_space *P,
1059 geometry::incidence_structure *&Inc,
1060 data_structures::partitionstack *&Stack, int verbose_level);
1062 geometry::projective_space *P,
1064 geometry::incidence_structure *&Inc,
1065 data_structures::partitionstack *&Stack, int verbose_level);
1066
1067};
1068
1070 int *Elt, void *data, int verbose_level);
1071 // for use in action_init.cpp
1072
1073
1074// #############################################################################
1075// action_pointer_table.cpp
1076// #############################################################################
1077
1078
1080
1082
1083public:
1084
1085 std::string label;
1086
1088 long int (*ptr_element_image_of)(action &A, long int a, void *elt, int verbose_level);
1089 void (*ptr_element_image_of_low_level)(action &A, int *input, int *output, void *elt, int verbose_level);
1090 int (*ptr_element_linear_entry_ij)(action &A, void *elt, int i, int j, int verbose_level);
1091 int (*ptr_element_linear_entry_frobenius)(action &A, void *elt, int verbose_level);
1092 void (*ptr_element_one)(action &A, void *elt, int verbose_level);
1093 int (*ptr_element_is_one)(action &A, void *elt, int verbose_level);
1094 void (*ptr_element_unpack)(action &A, void *elt, void *Elt, int verbose_level);
1095 void (*ptr_element_pack)(action &A, void *Elt, void *elt, int verbose_level);
1096 void (*ptr_element_retrieve)(action &A, int hdl, void *elt, int verbose_level);
1097 int (*ptr_element_store)(action &A, void *elt, int verbose_level);
1098 void (*ptr_element_mult)(action &A, void *a, void *b, void *ab, int verbose_level);
1099 void (*ptr_element_invert)(action &A, void *a, void *av, int verbose_level);
1100 void (*ptr_element_transpose)(action &A, void *a, void *at, int verbose_level);
1101 void (*ptr_element_move)(action &A, void *a, void *b, int verbose_level);
1102 void (*ptr_element_dispose)(action &A, int hdl, int verbose_level);
1103 void (*ptr_element_print)(action &A, void *elt, std::ostream &ost);
1104 void (*ptr_element_print_quick)(action &A, void *elt, std::ostream &ost);
1105 void (*ptr_element_print_latex)(action &A, void *elt, std::ostream &ost);
1107 void *elt, std::ostream &ost,
1108 void (*point_label)(std::stringstream &sstr, long int pt, void *data),
1109 void *point_label_data);
1110 void (*ptr_element_print_verbose)(action &A, void *elt, std::ostream &ost);
1111 void (*ptr_print_point)(action &A, long int i, std::ostream &ost);
1112 void (*ptr_element_code_for_make_element)(action &A, void *elt, int *data);
1113 void (*ptr_element_print_for_make_element)(action &A, void *elt, std::ostream &ost);
1115 void *elt, std::ostream &ost);
1116 void (*ptr_unrank_point)(action &A, long int rk, int *v);
1117 long int (*ptr_rank_point)(action &A, int *v);
1118
1128
1138};
1139
1140
1141
1142
1143
1144
1145
1146
1147// #############################################################################
1148// nauty_interface_with_group.cpp:
1149// #############################################################################
1150
1152
1153
1155public:
1159 graph_theory::colored_graph *CG, int verbose_level);
1161 graph_theory::colored_graph *CG, int *labeling, int verbose_level);
1163 int n, int f_bitvec, data_structures::bitvector *Bitvec, int *Adj,
1164 int *vertex_colors,
1165 int *labeling,
1166 int verbose_level);
1168 int n, data_structures::bitvector *Bitvec,
1169 int verbose_level);
1171 int n,
1172 int f_bitvector, data_structures::bitvector *Bitvec, int *Adj,
1173 int nb_parts, int *parts,
1174 int *labeling,
1175 int verbose_level);
1177 int n, int verbose_level);
1179 int *Adj, int n, int *labeling, int verbose_level);
1180 // labeling[n]
1182 //strong_generators *&SG,
1183 data_structures::nauty_output *NO,
1184 actions::action *&A_perm,
1185 int verbose_level);
1187 actions::action *A_linear,
1188 geometry::projective_space *P,
1190 actions::action *&A_perm,
1191 data_structures::nauty_output *NO,
1192 int verbose_level);
1194 geometry::object_with_canonical_form *OwCF,
1195 action *A_linear,
1196 int f_compute_canonical_form, data_structures::bitvector *&Canonical_form,
1197 data_structures::nauty_output *&NO,
1198 int verbose_level);
1199
1200};
1201
1202// #############################################################################
1203// stabilizer_chain_base_data.cpp:
1204// #############################################################################
1205
1206
1207
1208#define STABILIZER_CHAIN_DATA_MAX_DEGREE 1L << 29
1209
1210
1212
1213
1215private:
1216 action *A;
1217
1219 int f_has_base;
1220
1222 int base_len;
1223
1224
1225
1227 long int *base;
1228
1229
1230
1232 int *transversal_length;
1233
1235 long int **orbit;
1236
1238 long int **orbit_inv;
1239
1240 int *path;
1241public:
1242
1245 void free_base_data();
1246 void allocate_base_data(action *A, int base_len, int verbose_level);
1247 void reallocate_base(int new_base_point);
1248 void init_base_from_sims(groups::sims *G, int verbose_level);
1249 int &get_f_has_base();
1250 int &get_base_len();
1251 long int &base_i(int i);
1252 long int *&get_base();
1253 int &transversal_length_i(int i);
1254 int *&get_transversal_length();
1255 long int &orbit_ij(int i, int j);
1256 long int &orbit_inv_ij(int i, int j);
1257 int &path_i(int i);
1258 void group_order(ring_theory::longinteger_object &go);
1260 field_theory::finite_field *F, int n, int f_semilinear, int degree,
1261 int verbose_level);
1263 field_theory::finite_field *F, int n, int f_semilinear, int degree,
1264 int verbose_level);
1266 field_theory::finite_field *F, int n, int f_semilinear, int degree,
1267 int verbose_level);
1268};
1269
1270
1271
1272}}}
1273
1274
1275
1276#endif /* ORBITER_SRC_LIB_GROUP_ACTIONS_ACTIONS_ACTIONS_H_ */
1277
1278
global functions related to group actions
Definition: actions.h:1015
void make_generators_stabilizer_of_three_components(action *A_PGL_n_q, action *A_PGL_k_q, int k, data_structures_groups::vector_ge *gens, int verbose_level)
void retract_generators(data_structures_groups::vector_ge *gens_in, data_structures_groups::vector_ge *&gens_out, action *AQ, field_theory::subfield_structure *S, int n, int verbose_level)
void set_orthogonal_group_type(int f_siegel, int f_reflection, int f_similarity, int f_semisimilarity)
action * init_direct_product_group(groups::matrix_group *M1, groups::matrix_group *M2, int verbose_level)
void action_print_symmetry_group_type(std::ostream &ost, symmetry_group_type a)
void compute_decomposition_based_on_orbits(geometry::projective_space *P, groups::schreier *Sch1, groups::schreier *Sch2, geometry::incidence_structure *&Inc, data_structures::partitionstack *&Stack, int verbose_level)
void perm_print_cycles_sorted_by_length_offset(std::ostream &ost, int degree, int *perm, int offset, int f_do_it_anyway_even_for_big_degree, int f_print_cycles_of_length_one, int verbose_level)
void lift_generators(data_structures_groups::vector_ge *gens_in, data_structures_groups::vector_ge *&gens_out, action *Aq, field_theory::subfield_structure *S, int n, int verbose_level)
action * init_direct_product_group_and_restrict(groups::matrix_group *M1, groups::matrix_group *M2, int verbose_level)
void make_generators_stabilizer_of_two_components(action *A_PGL_n_q, action *A_PGL_k_q, int k, data_structures_groups::vector_ge *gens, int verbose_level)
void perm_print_cycles_sorted_by_length(std::ostream &ost, int degree, int *perm, int verbose_level)
void lift_generators_to_subfield_structure(int n, int s, field_theory::subfield_structure *S, action *Aq, action *AQ, groups::strong_generators *&Strong_gens, int verbose_level)
void compute_decomposition_based_on_orbit_length(geometry::projective_space *P, groups::schreier *Sch1, groups::schreier *Sch2, geometry::incidence_structure *&Inc, data_structures::partitionstack *&Stack, int verbose_level)
void compute_generators_GL_n_q(int *&Gens, int &nb_gens, int &elt_size, int n, field_theory::finite_field *F, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
interface to the implementation functions for group actions
Definition: actions.h:1081
void(* ptr_element_print_for_make_element)(action &A, void *elt, std::ostream &ost)
Definition: actions.h:1113
void(* ptr_element_dispose)(action &A, int hdl, int verbose_level)
Definition: actions.h:1102
int(* ptr_element_linear_entry_frobenius)(action &A, void *elt, int verbose_level)
Definition: actions.h:1091
void(* ptr_unrank_point)(action &A, long int rk, int *v)
Definition: actions.h:1116
void(* ptr_element_transpose)(action &A, void *a, void *at, int verbose_level)
Definition: actions.h:1100
void(* ptr_element_print)(action &A, void *elt, std::ostream &ost)
Definition: actions.h:1103
void(* ptr_element_print_latex_with_print_point_function)(action &A, void *elt, std::ostream &ost, void(*point_label)(std::stringstream &sstr, long int pt, void *data), void *point_label_data)
Definition: actions.h:1106
void(* ptr_element_print_quick)(action &A, void *elt, std::ostream &ost)
Definition: actions.h:1104
int(* ptr_element_linear_entry_ij)(action &A, void *elt, int i, int j, int verbose_level)
Definition: actions.h:1090
void(* ptr_element_unpack)(action &A, void *elt, void *Elt, int verbose_level)
Definition: actions.h:1094
void(* ptr_element_move)(action &A, void *a, void *b, int verbose_level)
Definition: actions.h:1101
void(* ptr_element_image_of_low_level)(action &A, int *input, int *output, void *elt, int verbose_level)
Definition: actions.h:1089
int(* ptr_element_is_one)(action &A, void *elt, int verbose_level)
Definition: actions.h:1093
long int(* ptr_element_image_of)(action &A, long int a, void *elt, int verbose_level)
Definition: actions.h:1088
void(* ptr_element_print_for_make_element_no_commas)(action &A, void *elt, std::ostream &ost)
Definition: actions.h:1114
void(* ptr_print_point)(action &A, long int i, std::ostream &ost)
Definition: actions.h:1111
void(* ptr_element_invert)(action &A, void *a, void *av, int verbose_level)
Definition: actions.h:1099
void(* ptr_element_print_latex)(action &A, void *elt, std::ostream &ost)
Definition: actions.h:1105
void(* ptr_element_one)(action &A, void *elt, int verbose_level)
Definition: actions.h:1092
void(* ptr_element_print_verbose)(action &A, void *elt, std::ostream &ost)
Definition: actions.h:1110
void(* ptr_element_code_for_make_element)(action &A, void *elt, int *data)
Definition: actions.h:1112
void(* ptr_element_retrieve)(action &A, int hdl, void *elt, int verbose_level)
Definition: actions.h:1096
void(* ptr_element_pack)(action &A, void *Elt, void *elt, int verbose_level)
Definition: actions.h:1095
int(* ptr_element_store)(action &A, void *elt, int verbose_level)
Definition: actions.h:1097
void(* ptr_element_mult)(action &A, void *a, void *b, void *ab, int verbose_level)
Definition: actions.h:1098
a permutation group in a fixed action.
Definition: actions.h:99
action * induced_action_on_interior_direct_product(int nb_rows, int verbose_level)
void print_for_make_element(std::ostream &ost, void *elt)
Definition: action_cb.cpp:182
void element_dispose(int hdl, int verbose_level)
Definition: action_cb.cpp:341
void init_group_from_generators_by_base_images(groups::sims *S, int *group_generator_data, int group_generator_size, int f_group_order_target, const char *group_order_target, data_structures_groups::vector_ge *gens, groups::strong_generators *&Strong_gens_out, int verbose_level)
Definition: action.cpp:2136
void create_orbits_on_subset_using_restricted_action(action *&A_by_restriction, groups::schreier *&Orbits, groups::sims *S, int size, long int *set, int verbose_level)
void lex_least_base(action *old_action, int verbose_level)
void element_print_latex(void *elt, std::ostream &ost)
Definition: action_cb.cpp:364
void element_print_as_permutation_with_offset(void *elt, std::ostream &ost, int offset, int f_do_it_anyway_even_for_big_degree, int f_print_cycles_of_length_one, int verbose_level)
Definition: action_cb.cpp:463
void build_up_automorphism_group_from_aut_data(int nb_auts, int *aut_data, groups::sims &S, int verbose_level)
Definition: action.cpp:1946
void compute_projectivity_subgroup(groups::strong_generators *&projectivity_gens, groups::strong_generators *Aut_gens, int verbose_level)
action * induced_action_on_set_partitions(int partition_class_size, int verbose_level)
void point_stabilizer_any_point(int &pt, groups::schreier *&Sch, groups::sims *&Stab, groups::strong_generators *&stab_gens, int verbose_level)
Definition: action.cpp:2671
void coset_unrank(groups::sims *G, groups::sims *U, long int rank, int *Elt, int verbose_level)
void element_conjugate_babv(int *Elt_A, int *Elt_B, int *Elt_C, int verbose_level)
int product_has_order_two(int *E1, int *E2, int verbose_level)
Definition: action.cpp:797
void centralizer_using_MAGMA(std::string &prefix, groups::sims *G, int *Elt, groups::strong_generators *&gens, int verbose_level)
action * restricted_action(long int *points, int nb_points, int verbose_level)
void element_conjugate_bvab(int *Elt_A, int *Elt_B, int *Elt_C, int verbose_level)
void compute_all_point_orbits(groups::schreier &S, data_structures_groups::vector_ge &gens, int verbose_level)
Definition: action.cpp:995
void element_unpack(void *elt, void *Elt, int verbose_level)
Definition: action_cb.cpp:287
void induced_action_on_orthogonal(action *A_old, induced_actions::action_on_orthogonal *AO, int f_induce_action, groups::sims *old_G, int verbose_level)
void conjugacy_classes_using_MAGMA(std::string &prefix, groups::sims *G, int verbose_level)
void element_print_quick(void *elt, std::ostream &ost)
Definition: action_cb.cpp:353
void create_orbits_on_sets_using_action_on_sets(action *&A_on_sets, groups::schreier *&Orbits, groups::sims *S, int nb_sets, int set_size, long int *sets, int verbose_level)
void init_general_linear_group(int n, field_theory::finite_field *F, int f_semilinear, int f_basis, int f_init_sims, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void element_print(void *elt, std::ostream &ost)
Definition: action_cb.cpp:347
void normalizer_using_MAGMA(std::string &fname_magma_prefix, groups::sims *G, groups::sims *H, groups::strong_generators *&gens_N, int verbose_level)
void mult(void *a, void *b, void *ab)
Definition: action_cb.cpp:81
void make_element_from_permutation_representation(int *Elt, groups::sims *S, int *data, int verbose_level)
Definition: action.cpp:1664
void induced_action_on_ordered_pairs(action &old_action, groups::sims *old_G, int verbose_level)
void induced_action_on_sign(groups::sims *old_G, int verbose_level)
void create_orthogonal_group(action *subaction, int f_has_target_group_order, ring_theory::longinteger_object &target_go, void(*callback_choose_random_generator)(int iteration, int *Elt, void *data, int verbose_level), int verbose_level)
action * induced_action_on_wedge_product(int verbose_level)
void element_pack(void *Elt, void *elt, int verbose_level)
Definition: action_cb.cpp:294
void init_matrix_group_strong_generators_builtin(groups::matrix_group *M, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void inverse_based_on_text(std::string &data_A, int verbose_level)
Definition: action.cpp:3478
void element_retrieve(int hdl, void *elt, int verbose_level)
Definition: action_cb.cpp:301
void mult_apply_from_the_right(void *a, void *b)
Definition: action_cb.cpp:88
void element_base_images_verbose(int *Elt, int *base_images, int verbose_level)
Definition: action.cpp:2279
void element_read_from_file_binary(int *Elt, std::ifstream &fp, int verbose_level)
Definition: action_cb.cpp:737
groups::sims * create_sims_from_generators_with_target_group_order_factorized(data_structures_groups::vector_ge *gens, int *tl, int len, int verbose_level)
int product_has_order_three(int *E1, int *E2, int verbose_level)
Definition: action.cpp:822
void conjugacy_classes_and_normalizers(groups::sims *override_Sims, std::string &label, std::string &label_tex, int verbose_level)
void init_symmetric_group(int degree, int f_no_base, int verbose_level)
void element_print_base_images_verbose(int *Elt, std::ostream &ost, int verbose_level)
Definition: action.cpp:2258
void all_point_orbits(groups::schreier &Schreier, int verbose_level)
Definition: action.cpp:1229
void print_quick(std::ostream &ost, void *elt)
Definition: action_cb.cpp:137
int element_order_if_divisor_of(void *elt, int o)
Definition: action.cpp:937
int least_image_of_point_generators_by_handle(std::vector< int > &gen_handle, int pt, int *transporter, int verbose_level)
Definition: action.cpp:1186
action * create_induced_action_on_subgroups(groups::sims *S, int nb_subgroups, int group_order, groups::subgroup **Subgroups, int verbose_level)
void print_symmetry_group_type(std::ostream &ost)
Definition: action_io.cpp:671
int element_linear_entry_frobenius(void *elt, int verbose_level)
Definition: action_cb.cpp:239
void map_a_set(long int *set, long int *image_set, int n, int *Elt, int verbose_level)
Definition: action.cpp:668
void element_print_latex_with_extras(void *elt, std::string &label, std::ostream &ost)
Definition: action_cb.cpp:370
groups::strong_generators * set_stabilizer_in_projective_space(geometry::projective_space *P, long int *set, int set_size, int *canonical_set_or_NULL, int verbose_level)
void element_mult(void *a, void *b, void *ab, int verbose_level)
Definition: action_cb.cpp:315
void element_print_as_permutation_with_offset_and_max_cycle_length(void *elt, std::ostream &ost, int offset, int max_cycle_length, int f_orbit_structure)
Definition: action_cb.cpp:532
void code_for_make_element(int *data, void *elt)
Definition: action_cb.cpp:176
void normalizer_of_cyclic_group_using_MAGMA(std::string &fname_magma_prefix, groups::sims *G, int *Elt, groups::strong_generators *&gens_N, int verbose_level)
void induced_action_on_pairs(action &old_action, groups::sims *old_G, int verbose_level)
void element_read_from_memory_object(int *Elt, orbiter_kernel_system::memory_object *m, int verbose_level)
Definition: action_cb.cpp:689
void find_strong_generators_at_level(int base_len, long int *the_base, int level, data_structures_groups::vector_ge &gens, data_structures_groups::vector_ge &subset_of_gens, int verbose_level)
Definition: action.cpp:1612
void element_write_to_file_binary(int *Elt, std::ofstream &fp, int verbose_level)
Definition: action_cb.cpp:708
int element_is_one(void *elt, int verbose_level)
Definition: action_cb.cpp:248
void mult_apply_from_the_left(void *a, void *b)
Definition: action_cb.cpp:96
void element_print_for_make_element(void *elt, std::ostream &ost)
Definition: action_cb.cpp:409
void find_subgroups_using_MAGMA(std::string &prefix, groups::sims *override_Sims, int subgroup_order, int &nb_subgroups, groups::strong_generators *&H_gens, groups::strong_generators *&N_gens, int verbose_level)
void element_print_base_images(int *Elt, std::ostream &ost)
void init_wreath_product_group_and_restrict(int nb_factors, int n, field_theory::finite_field *F, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void random_element(groups::sims *S, int *Elt, int verbose_level)
Definition: action_cb.cpp:762
int compute_orbit_of_point_generators_by_handle(int nb_gen, int *gen_handle, int pt, int *orbit, int verbose_level)
Definition: action.cpp:1137
void induced_action_on_determinant(groups::sims *old_G, int verbose_level)
void strong_generators_at_depth(int depth, data_structures_groups::vector_ge &gen, int verbose_level)
Definition: action.cpp:1026
void induced_action_by_subfield_structure(action *A_old, induced_actions::action_by_subfield_structure *SubfieldStructure, int f_induce_action, groups::sims *old_G, int verbose_level)
void make_canonical(int size, long int *set, long int *canonical_set, int *transporter, int &total_backtrack_nodes, int f_get_automorphism_group, groups::sims *Aut, int verbose_level)
Definition: backtrack.cpp:365
int reverse_engineer_semilinear_map(geometry::projective_space *P, int *Elt, int *Mtx, int &frobenius, int verbose_level)
void raise_to_the_power_based_on_text(std::string &data_A, std::string &exponent_text, int verbose_level)
Definition: action.cpp:3575
void image_of_low_level(void *elt, int *input, int *output, int verbose_level)
Definition: action_cb.cpp:23
void report(std::ostream &ost, int f_sims, groups::sims *S, int f_strong_gens, groups::strong_generators *SG, graphics::layered_graph_draw_options *LG_Draw_options, int verbose_level)
Definition: action_io.cpp:22
void init_group_from_strong_generators(data_structures_groups::vector_ge *gens, groups::sims *K, int given_base_length, int *given_base, int verbose_level)
action * create_induced_action_on_sets(int nb_sets, int set_size, long int *sets, int verbose_level)
void init_orthogonal_group_with_O(orthogonal_geometry::orthogonal *O, int f_on_points, int f_on_lines, int f_on_points_and_lines, int f_semilinear, int f_basis, int verbose_level)
groups::strong_generators * Strong_gens
Definition: actions.h:130
void init_sims_only(groups::sims *G, int verbose_level)
Definition: action.cpp:709
int element_order_and_cycle_type_verbose(void *elt, int *cycle_type, int verbose_level)
Definition: action.cpp:867
void make_element_from_string(int *Elt, std::string &data_string, int verbose_level)
Definition: action.cpp:1842
void init_base_from_sims(groups::sims *G, int verbose_level)
void orbits_on_equations(ring_theory::homogeneous_polynomial_domain *HPD, int *The_equations, int nb_equations, groups::strong_generators *gens, action *&A_on_equations, groups::schreier *&Orb, int verbose_level)
void induced_action_on_subgroups(action *old_action, groups::sims *S, int nb_subgroups, int group_order, groups::subgroup **Subgroups, int verbose_level)
int count_fixed_points(void *elt, int verbose_level)
Definition: action.cpp:601
void compute_strong_generators_from_sims(int verbose_level)
Definition: action.cpp:750
int element_has_order_two(int *E1, int verbose_level)
Definition: action.cpp:774
int check_if_transporter_for_set(int *Elt, int size, long int *set1, long int *set2, int verbose_level)
Definition: action.cpp:1402
void element_print_as_permutation_verbose(void *elt, std::ostream &ost, int verbose_level)
Definition: action_cb.cpp:428
void stabilizer_of_dual_hyperoval_representative(int k, int n, int no, data_structures_groups::vector_ge *&gens, std::string &stab_order, int verbose_level)
Definition: action.cpp:2555
void induced_action_on_Galois_group(groups::sims *old_G, int verbose_level)
void get_generators_from_ascii_coding(char *ascii_coding, data_structures_groups::vector_ge *&gens, int *&tl, int verbose_level)
Definition: action.cpp:2394
void init_affine_group(int n, field_theory::finite_field *F, int f_semilinear, int f_basis, int f_init_sims, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
void init_projective_group(int n, field_theory::finite_field *F, int f_semilinear, int f_basis, int f_init_sims, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
stabilizer_chain_base_data * Stabilizer_chain
Definition: actions.h:178
void element_code_for_make_element(void *elt, int *data)
Definition: action_cb.cpp:403
void make_element_which_moves_a_line_in_PG3q(geometry::grassmann *Gr, long int line_rk, int *Elt, int verbose_level)
Definition: action.cpp:2811
void element_invert(void *a, void *av, int verbose_level)
Definition: action_cb.cpp:322
void perform_tests(groups::strong_generators *SG, int verbose_level)
Definition: action.cpp:3089
void element_one(void *elt, int verbose_level)
Definition: action_cb.cpp:224
void init_BLT(field_theory::finite_field *F, int f_basis, int f_init_hash_table, int verbose_level)
void init_orthogonal_group(int epsilon, int n, field_theory::finite_field *F, int f_on_points, int f_on_lines, int f_on_points_and_lines, int f_semilinear, int f_basis, int verbose_level)
void read_centralizer_magma(std::string &fname_output, groups::sims *override_Sims, groups::strong_generators *&gens, int verbose_level)
void read_subgroups_magma(std::string &fname_output, groups::sims *override_Sims, int subgroup_order, int &nb_subgroups, groups::strong_generators *&H_gens, groups::strong_generators *&N_gens, int verbose_level)
void conjugacy_classes_and_normalizers_using_MAGMA(std::string &prefix, groups::sims *G, int verbose_level)
void induced_action_by_representation_on_conic(action *A_old, int f_induce_action, groups::sims *old_G, int verbose_level)
groups::sims * create_sims_from_generators_randomized(data_structures_groups::vector_ge *gens, int f_target_go, ring_theory::longinteger_object &target_go, int verbose_level)
void point_stabilizer_any_point_with_given_group(groups::strong_generators *input_gens, int &pt, groups::schreier *&Sch, groups::sims *&Stab, groups::strong_generators *&stab_gens, int verbose_level)
Definition: action.cpp:2741
void init_permutation_group_from_nauty_output(data_structures::nauty_output *NO, int verbose_level)
void induced_action_on_orbits(action *old_action, groups::schreier *Sch, int f_play_it_safe, int verbose_level)
void init_action_on_lines(action *A, field_theory::finite_field *F, int n, int verbose_level)
void element_write_file_fp(int *Elt, std::ofstream &fp, int verbose_level)
Definition: action_cb.cpp:587
void element_base_images(int *Elt, int *base_images)
Definition: action.cpp:2274
void induced_action_on_flags(action *old_action, int *type, int type_len, int verbose_level)
void compute_stabilizer_orbits(data_structures::partitionstack *&Staborbits, int verbose_level)
Definition: action.cpp:1297
void init_projective_special_group(int n, field_theory::finite_field *F, int f_semilinear, int f_basis, int verbose_level)
void read_orbit_rep_and_candidates_from_files(std::string &prefix, int level, int orbit_at_level, int level_of_candidates_file, long int *&starter, int &starter_sz, groups::sims *&Stab, groups::strong_generators *&Strong_gens, long int *&candidates, int &nb_candidates, int &nb_cases, int verbose_level)
Definition: action_io.cpp:288
void export_to_orbiter(std::string &fname, std::string &label, groups::strong_generators *SG, int verbose_level)
Definition: action_io.cpp:1011
void compute_set_orbit(data_structures_groups::vector_ge &gens, int size, long int *set, int &nb_sets, long int **&Sets, int **&Transporter, int verbose_level)
Definition: action.cpp:1465
void lexorder_test(long int *set, int set_sz, int &set_sz_after_test, data_structures_groups::vector_ge *gens, int max_starter, int verbose_level)
Definition: action.cpp:2438
void setup_linear_group_from_strong_generators(groups::matrix_group *M, data_structures_groups::vector_ge *&nice_gens, int f_init_sims, int verbose_level)
field_theory::finite_field * matrix_group_finite_field()
Definition: action.cpp:2883
void element_power_int_in_place(int *Elt, int n, int verbose_level)
Definition: action.cpp:2000
void element_print_image_of_set(void *elt, int size, long int *set)
Definition: action_cb.cpp:558
void induce(action *old_action, groups::sims *old_G, int base_of_choice_len, long int *base_of_choice, int verbose_level)
int element_order_and_cycle_type(void *elt, int *cycle_type)
Definition: action.cpp:860
void read_orbit_rep_and_candidates_from_files_and_process(std::string &prefix, int level, int orbit_at_level, int level_of_candidates_file, void(*early_test_func_callback)(long int *S, int len, long int *candidates, int nb_candidates, long int *good_candidates, int &nb_good_candidates, void *data, int verbose_level), void *early_test_func_callback_data, long int *&starter, int &starter_sz, groups::sims *&Stab, groups::strong_generators *&Strong_gens, long int *&candidates, int &nb_candidates, int &nb_cases, int verbose_level)
Definition: action_io.cpp:203
void print_vector(data_structures_groups::vector_ge &v)
Definition: action_io.cpp:935
void make_element(int *Elt, int *data, int verbose_level)
Definition: action.cpp:1875
void read_conjugacy_classes_and_normalizers_from_MAGMA(std::string &fname, int &nb_classes, int *&perms, int *&class_size, int *&class_order_of_element, long int *&class_normalizer_order, int *&class_normalizer_number_of_generators, int **&normalizer_generators_perms, int verbose_level)
void stabilizer_of_spread_representative(int q, int k, int no, data_structures_groups::vector_ge *&gens, std::string &stab_order, int verbose_level)
Definition: action.cpp:2588
void centralizer_using_magma2(std::string &prefix, std::string &fname_magma, std::string &fname_output, groups::sims *override_Sims, int *Elt, int verbose_level)
void init_automorphism_group_from_group_table(std::string &fname_base, int *Table, int group_order, int *gens, int nb_gens, groups::strong_generators *&Aut_gens, int verbose_level)
void induced_action_by_restriction_on_orbit_with_schreier_vector(action &old_action, int f_induce_action, groups::sims *old_G, data_structures_groups::schreier_vector *Schreier_vector, int pt, int verbose_level)
void induced_action_on_k_subsets(action &old_action, int k, int verbose_level)
groups::sims * create_sims_from_generators_without_target_group_order(data_structures_groups::vector_ge *gens, int verbose_level)
action * induced_action_on_grassmannian(int k, int verbose_level)
int is_minimal_witness(int size, long int *set, int &backtrack_level, long int *witness, int *transporter_witness, int &backtrack_nodes, int f_get_automorphism_group, groups::sims &Aut, int verbose_level)
Definition: backtrack.cpp:477
void element_read_file_fp(int *Elt, std::ifstream &fp, int verbose_level)
Definition: action_cb.cpp:604
void induced_action_by_restriction_internal_function(action &old_action, int f_induce_action, groups::sims *old_G, int nb_points, long int *points, int verbose_level)
int find_non_fixed_point(void *elt, int verbose_level)
Definition: action.cpp:555
void element_commutator_abavbv(int *Elt_A, int *Elt_B, int *Elt_C, int verbose_level)
void induced_action_recycle_sims(action &old_action, int verbose_level)
void read_file_and_print_representatives(std::string &fname, int f_print_stabilizer_generators, int verbose_level)
Definition: action_io.cpp:487
void all_point_orbits_from_single_generator(groups::schreier &Schreier, int *Elt, int verbose_level)
Definition: action.cpp:1268
void read_set_and_stabilizer(std::string &fname, int no, long int *&set, int &set_sz, groups::sims *&stab, groups::strong_generators *&Strong_gens, int &nb_cases, int verbose_level)
Definition: action_io.cpp:556
void element_as_permutation(void *elt, int *perm, int verbose_level)
Definition: action_cb.cpp:436
action * create_induced_action_on_ordered_pairs(int verbose_level)
void multiply_based_on_text(std::string &data_A, std::string &data_B, int verbose_level)
Definition: action.cpp:3370
int test_if_set_stabilizes(int *Elt, int size, long int *set, int verbose_level)
Definition: action.cpp:622
void original_point_labels(long int *points, int nb_points, long int *&original_points, int verbose_level)
void read_representatives(std::string &fname, int *&Reps, int &nb_reps, int &size, int verbose_level)
Definition: action_io.cpp:413
void word_in_ab(int *Elt1, int *Elt2, int *Elt3, const char *word, int verbose_level)
Definition: action.cpp:2027
void print_for_make_element_no_commas(std::ostream &ost, void *elt)
Definition: action_cb.cpp:188
long int coset_rank(groups::sims *G, groups::sims *U, int *Elt, int verbose_level)
int least_image_of_point(data_structures_groups::vector_ge &strong_generators, int pt, int *transporter, int verbose_level)
Definition: action.cpp:1153
void element_read_file(int *Elt, std::string &fname, int verbose_level)
Definition: action_cb.cpp:646
void base_change_in_place(int size, long int *set, int verbose_level)
void report_fixed_objects(int *Elt, char *fname_latex, int verbose_level)
void element_image_of_low_level(int *input, int *output, void *elt, int verbose_level)
Definition: action_cb.cpp:209
int least_moved_point_at_level(int level, int verbose_level)
void base_change(action *old_action, int size, long int *set, int verbose_level)
int choose_next_base_point_default_method(int *Elt, int verbose_level)
void element_move(void *a, void *b, int verbose_level)
Definition: action_cb.cpp:335
void latex_point_set(std::ostream &ost, long int *set, int sz, int verbose_level)
Definition: action_io.cpp:840
void print_point(int a, std::ostream &ost)
Definition: action_cb.cpp:149
void setup_product_action(action *A1, action *A2, int f_use_projections, int verbose_level)
void induced_action_on_sets(action &old_action, groups::sims *old_G, int nb_sets, int set_size, long int *sets, int f_induce_action, int verbose_level)
groups::sims * create_sims_from_single_generator_without_target_group_order(int *Elt, int verbose_level)
action * create_induced_action_by_conjugation(groups::sims *Base_group, int f_ownership, int verbose_level)
void report_conjugacy_classes_and_normalizers(std::ostream &ost, groups::sims *override_Sims, int verbose_level)
void make_element_2x2(int *Elt, int a0, int a1, int a2, int a3)
Definition: action.cpp:1831
void report_fixed_objects_in_P3(std::ostream &ost, geometry::projective_space *P3, int *Elt, int verbose_level)
void find_subgroups_using_MAGMA2(std::string &prefix, std::string &fname_magma, std::string &fname_output, groups::sims *override_Sims, int subgroup_order, int verbose_level)
int element_linear_entry_ij(void *elt, int i, int j, int verbose_level)
Definition: action_cb.cpp:230
void induced_action_on_homogeneous_polynomials(action *A_old, ring_theory::homogeneous_polynomial_domain *HPD, int f_induce_action, groups::sims *old_G, int verbose_level)
void stabilizer_of_quartic_curve_representative(int q, int no, data_structures_groups::vector_ge *&gens, std::string &stab_order, int verbose_level)
Definition: action.cpp:2623
void init_permutation_group(int degree, int f_no_base, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
Definition: action.cpp:2223
action * create_induced_action_by_restriction(groups::sims *S, int size, long int *set, int f_induce, int verbose_level)
void induced_action_by_conjugation(groups::sims *old_G, groups::sims *Base_group, int f_ownership, int f_basis, int verbose_level)
void report_what_we_act_on(std::ostream &ost, graphics::layered_graph_draw_options *O, int verbose_level)
Definition: action_io.cpp:164
groups::matrix_group * get_matrix_group()
Definition: action.cpp:2986
void induced_action_on_bricks(action &old_action, combinatorics::brick_domain *B, int f_linear_action, int verbose_level)
void all_elements(data_structures_groups::vector_ge *&vec, int verbose_level)
Definition: action_cb.cpp:777
void induced_action_on_spread_set(action *A_old, induced_actions::action_on_spread_set *AS, int f_induce_action, groups::sims *old_G, int verbose_level)
int check_if_in_set_stabilizer(int *Elt, int size, long int *set, int verbose_level)
Definition: action.cpp:1364
void export_to_orbiter_as_bsgs(std::string &fname, std::string &label, std::string &label_tex, groups::strong_generators *SG, int verbose_level)
Definition: action_io.cpp:1077
void element_print_latex_with_print_point_function(void *elt, std::ostream &ost, void(*point_label)(std::stringstream &sstr, long int pt, void *data), void *point_label_data)
Definition: action_cb.cpp:388
void generators_to_strong_generators(int f_target_go, ring_theory::longinteger_object &target_go, data_structures_groups::vector_ge *gens, groups::strong_generators *&Strong_gens, int verbose_level)
void all_elements_save_csv(std::string &fname, int verbose_level)
Definition: action_cb.cpp:812
void init_group_from_generators(int *group_generator_data, int group_generator_size, int f_group_order_target, const char *group_order_target, data_structures_groups::vector_ge *gens, groups::strong_generators *&Strong_gens, int verbose_level)
Definition: action.cpp:2059
void init_permutation_representation(action *A_original, int f_stay_in_the_old_action, data_structures_groups::vector_ge *gens, int *Perms, int degree, int verbose_level)
void element_write_to_memory_object(int *Elt, orbiter_kernel_system::memory_object *m, int verbose_level)
Definition: action_cb.cpp:673
void induced_action_override_sims(action &old_action, groups::sims *old_G, int verbose_level)
groups::sims * create_sims_from_generators_with_target_group_order_lint(data_structures_groups::vector_ge *gens, long int target_go, int verbose_level)
void compute_point_stabilizer_chain(data_structures_groups::vector_ge &gen, groups::sims *S, int *sequence, int len, int verbose_level)
Definition: action.cpp:1046
void compute_minimal_set(data_structures_groups::vector_ge &gens, int size, long int *set, long int *minimal_set, int *transporter, int verbose_level)
Definition: action.cpp:1581
void make_element_from_base_image(int *Elt, groups::sims *S, int *data, int verbose_level)
Definition: action.cpp:1695
int is_minimal(int size, long int *set, int &backtrack_level, int verbose_level)
Definition: backtrack.cpp:343
void all_point_orbits_from_generators(groups::schreier &Schreier, groups::strong_generators *SG, int verbose_level)
Definition: action.cpp:1254
void write_set_of_elements_latex_file(std::string &fname, std::string &title, int *Elt, int nb_elts)
Definition: action_io.cpp:962
void induced_action_on_homogeneous_polynomials_given_by_equations(action *A_old, ring_theory::homogeneous_polynomial_domain *HPD, int *Equations, int nb_equations, int f_induce_action, groups::sims *old_G, int verbose_level)
void init_linear_group(field_theory::finite_field *F, int m, int f_projective, int f_general, int f_affine, int f_semilinear, int f_special, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
Definition: action_init.cpp:17
void init_permutation_group_from_generators(int degree, int f_target_go, ring_theory::longinteger_object &target_go, int nb_gens, int *gens, int given_base_length, long int *given_base, int f_no_base, int verbose_level)
void minimize_base_images(int level, groups::sims *S, int *Elt, int verbose_level)
Definition: action.cpp:2303
int find_fixed_points(void *elt, int *fixed_points, int verbose_level)
Definition: action.cpp:579
void induced_action_on_cosets(induced_actions::action_on_cosets *A_on_cosets, int f_induce_action, groups::sims *old_G, int verbose_level)
int compute_orbit_of_point(data_structures_groups::vector_ge &strong_generators, int pt, int *orbit, int verbose_level)
Definition: action.cpp:1114
void element_print_as_permutation(void *elt, std::ostream &ost)
Definition: action_cb.cpp:421
void element_write_file(int *Elt, std::string &fname, int verbose_level)
Definition: action_cb.cpp:621
void print_vector_as_permutation(data_structures_groups::vector_ge &v)
Definition: action_io.cpp:948
void induced_action_by_right_multiplication(int f_basis, groups::sims *old_G, groups::sims *Base_group, int f_ownership, int verbose_level)
void element_transpose(void *a, void *at, int verbose_level)
Definition: action_cb.cpp:329
groups::sims * create_sims_for_centralizer_of_matrix(int *Mtx, int verbose_level)
void element_print_for_make_element_no_commas(void *elt, std::ostream &ost)
Definition: action_cb.cpp:415
void map_a_set_and_reorder(long int *set, long int *image_set, int n, int *Elt, int verbose_level)
Definition: action.cpp:698
void compute_orbits_on_points(groups::schreier *&Sch, data_structures_groups::vector_ge *gens, int verbose_level)
Definition: action.cpp:2519
void read_conjugacy_classes_and_normalizers(std::string &fname, groups::sims *override_sims, std::string &label_latex, int verbose_level)
void induced_action_on_factor_space(action *A_old, induced_actions::action_on_factor_space *AF, int f_induce_action, groups::sims *old_G, int verbose_level)
void element_print_verbose(void *elt, std::ostream &ost)
Definition: action_cb.cpp:397
void delete_set_orbit(int nb_sets, long int **Sets, int **Transporter)
Definition: action.cpp:1569
groups::sims * create_sims_from_generators_with_target_group_order(data_structures_groups::vector_ge *gens, ring_theory::longinteger_object &target_go, int verbose_level)
void print_group_order_long(std::ostream &ost)
Definition: action_io.cpp:917
long int element_image_of(long int a, void *elt, int verbose_level)
Definition: action_cb.cpp:198
void report_groups_and_normalizers(std::ostream &ost, int nb_subgroups, groups::strong_generators *H_gens, groups::strong_generators *N_gens, int verbose_level)
void read_and_report_conjugacy_classes_and_normalizers(std::ostream &ost, std::string &fname, groups::sims *override_Sims, int verbose_level)
void conjugacy_classes_and_normalizers_using_MAGMA_make_fnames(std::string &prefix, std::string &fname_magma, std::string &fname_output)
void print(std::ostream &ost, void *elt)
Definition: action_cb.cpp:131
void read_representatives_and_strong_generators(std::string &fname, int *&Reps, char **&Aut_ascii, int &nb_reps, int &size, int verbose_level)
Definition: action_io.cpp:449
int linear_entry_ij(void *elt, int i, int j)
Definition: action_cb.cpp:34
void init_wreath_product_group(int nb_factors, int n, field_theory::finite_field *F, data_structures_groups::vector_ge *&nice_gens, int verbose_level)
int element_store(void *elt, int verbose_level)
Definition: action_cb.cpp:308
void print_as_permutation(std::ostream &ost, void *elt)
Definition: action_cb.cpp:143
void induced_action_on_andre(action *An, action *An1, geometry::andre_construction *Andre, int verbose_level)
void list_elements_as_permutations_vertically(data_structures_groups::vector_ge *gens, std::ostream &ost)
Definition: action_io.cpp:649
Interface to the graph canonization software Nauty.
Definition: actions.h:1154
void automorphism_group_as_permutation_group(data_structures::nauty_output *NO, actions::action *&A_perm, int verbose_level)
groups::strong_generators * set_stabilizer_of_object(geometry::object_with_canonical_form *OwCF, action *A_linear, int f_compute_canonical_form, data_structures::bitvector *&Canonical_form, data_structures::nauty_output *&NO, int verbose_level)
action * create_automorphism_group_of_graph_with_partition_and_labeling(int n, int f_bitvector, data_structures::bitvector *Bitvec, int *Adj, int nb_parts, int *parts, int *labeling, int verbose_level)
void reverse_engineer_linear_group_from_permutation_group(actions::action *A_linear, geometry::projective_space *P, groups::strong_generators *&SG, actions::action *&A_perm, data_structures::nauty_output *NO, int verbose_level)
action * create_automorphism_group_and_canonical_labeling_of_graph(int *Adj, int n, int *labeling, int verbose_level)
action * create_automorphism_group_and_canonical_labeling_of_colored_graph(int n, int f_bitvec, data_structures::bitvector *Bitvec, int *Adj, int *vertex_colors, int *labeling, int verbose_level)
action * create_automorphism_group_and_canonical_labeling_of_colored_graph_object(graph_theory::colored_graph *CG, int *labeling, int verbose_level)
action * create_automorphism_group_of_graph(int *Adj, int n, int verbose_level)
action * create_automorphism_group_of_graph_bitvec(int n, data_structures::bitvector *Bitvec, int verbose_level)
action * create_automorphism_group_of_colored_graph_object(graph_theory::colored_graph *CG, int verbose_level)
the transversals in the stabilizer subgroup chain (Sims chain)
Definition: actions.h:1214
void init_affine_matrix_group(field_theory::finite_field *F, int n, int f_semilinear, int degree, int verbose_level)
void init_linear_matrix_group(field_theory::finite_field *F, int n, int f_semilinear, int degree, int verbose_level)
void init_projective_matrix_group(field_theory::finite_field *F, int n, int f_semilinear, int degree, int verbose_level)
a matrix group over a finite field in projective, vector space or affine action
Definition: groups.h:318
Schreier trees for orbits of groups on points.
Definition: groups.h:839
a permutation group represented via a stabilizer chain
Definition: groups.h:1273
a strong generating set for a permutation group with respect to a fixed action
Definition: groups.h:1703
a subgroup of a group using a list of elements
Definition: groups.h:2039
induced action on the vector space arising from a field over a subfield
induced action on the cosets of a subspace by right multiplication
induced action on the factor space of a vector space modulo a subspace
induced action on the grassmannian (subspaces of a fixed dimension of a vectors space)
induced action on a spread set via the associated spread
unsigned char uchar
Definition: foundations.h:204
void callback_choose_random_generator_orthogonal(int iteration, int *Elt, void *data, int verbose_level)
symmetry_group_type
enumeration to distinguish between the various types of group actions
the orbiter library for the classification of combinatorial objects
interface for the various types of group actions