13namespace layer3_group_actions {
14namespace data_structures_groups {
51 init(
A, verbose_level);
57 init(
A, verbose_level);
64 init(
A, verbose_level);
135 for (i = 0; i <
SG.
len; i++) {
146 std::vector<int> &tl,
int verbose_level)
148 int f_v = (verbose_level >= 1);
154 cout <<
"group_container::init_strong_generators_by_handle" << endl;
156 Gen_hdl =
NEW_int(gen_handle.size());
157 for (i = 0; i < gen_handle.size(); i++) {
158 Gen_hdl[i] = gen_handle[i];
167 Gen_hdl, Tl, verbose_level);
173 cout <<
"group_container::init_strong_generators_by_handle done" << endl;
178 int *gen_hdl,
int *tl,
int verbose_level)
180 int f_v = (verbose_level >= 1);
184 cout <<
"group::init_strong_generators_by_hdl" << endl;
197 cout <<
"group::init_strong_generators_by_hdl "
198 "before delete_strong_generators" << endl;
202 cout <<
"group::init_strong_generators_by_hdl "
203 "after delete_strong_generators" << endl;
207 SG->
init(
A, verbose_level - 2);
210 cout <<
"group::init_strong_generators_by_hdl "
211 "before A->element_retrieve" << endl;
213 for (i = 0; i < nb_gen; i++) {
217 cout <<
"group::init_strong_generators_by_hdl "
218 "after A->element_retrieve" << endl;
221 cout <<
"group::init_strong_generators_by_hdl "
222 "before allocating tl of size " <<
A->
base_len() << endl;
237 cout <<
"group::init_strong_generators_by_hdl done" << endl;
266 cout <<
"group_container::require_ascii_coding !f_has_ascii_coding" << endl;
274 cout <<
"group_container::require_strong_generators !f_has_strong_generators" << endl;
282 cout <<
"group_container::require_sims !f_has_sims" << endl;
299 cout <<
"group::group_order need sims or strong_generators" << endl;
317 cout <<
tl[i] <<
" ";
325 int f_v = (verbose_level >= 1);
331 cout <<
"group_container::code_ascii action " <<
A->
label
332 <<
" base_len=" <<
A->
base_len() << endl;
351 for (i = 0; i <
SG->
len; i++) {
359 cout <<
"group_container::code_ascii p - ascii_coding != sz" << endl;
364 cout <<
"group_container::code_ascii " <<
ascii_coding << endl;
370 int f_v = (verbose_level >= 1);
386 cout <<
"group_container::decode_ascii len != A->base_len" << endl;
387 cout <<
"len=" << len <<
" (from file)" << endl;
388 cout <<
"A->base_len=" <<
A->
base_len() << endl;
389 cout <<
"action A is " <<
A->
label << endl;
394 SG->
init(
A, verbose_level - 2);
402 if (base1[i] !=
A->
base_i(i)) {
403 cout <<
"group_container::decode_ascii base mismatch" << endl;
410 for (i = 0; i < nbsg; i++) {
417 if (p - p0 != str_len) {
418 cout <<
"group_container::decode_ascii p - p0 != str_len" << endl;
419 cout <<
"p - p0 = " << p - p0 << endl;
420 cout <<
"str_len = " << str_len << endl;
428 cout <<
"found a group with " <<
SG->
len
429 <<
" strong generators" << endl;
435 int f_v = (verbose_level >= 1);
440 cout <<
"group_container::schreier_sims" << endl;
441 cout <<
"verbose_level = " << verbose_level << endl;
445 cout <<
"group_container::schreier_sims before delete_sims" << endl;
449 cout <<
"group_container::schreier_sims after delete_sims" << endl;
453 cout <<
"group_container::schreier_sims calling S->init(A)" << endl;
455 S->
init(
A, verbose_level - 2);
457 cout <<
"group_container::schreier_sims calling S->init_generators" << endl;
460 cout <<
"generators" << endl;
465 cout <<
"group_container::schreier_sims after S->init_generators" << endl;
471 cout <<
"group_container::schreier_sims before "
472 "compute_base_orbits_known_length" << endl;
476 cout <<
"group_container::schreier_sims after "
477 "compute_base_orbits_known_length" << endl;
481 cout <<
"group_container::schreier_sims done. Found a group of order ";
493 SG->
init(
A, verbose_level - 2);
500 int f_v = (verbose_level >= 1);
501 int f_vv = (verbose_level >= 2);
508 cout <<
"group_container::point_stabilizer "
509 "computing stabilizer of point " << pt << endl;
519 stab_gens.
print(cout);
521 cout << stab_gens.
len <<
" strong generators computed" << endl;
525 stab.
init(
A, verbose_level - 2);
529 cout <<
"stabilizer of point " << pt <<
" has order ";
533 cout <<
" with " << stab_gens.
len <<
" strong generators" << endl;
535 stab_gens.
print(cout);
543 int f_v = (verbose_level >= 1);
544 int f_vv = (verbose_level >= 2);
551 cout <<
"group_container::point_stabilizer_with_action ";
552 cout <<
"computing stabilizer of point " << pt
553 <<
" in action " << A2->
label
554 <<
" internal action is " << stab.
A->
label << endl;
555 cout <<
"verbose_level = " << verbose_level << endl;
561 cout <<
"group_container::point_stabilizer_with_action "
562 "calling S->point_stabilizer_with_action" << endl;
566 cout <<
"group_container::point_stabilizer_with_action "
567 "after S->point_stabilizer_with_action" << endl;
573 stab_gens.
print(cout);
575 cout << stab_gens.
len <<
" strong generators computed" << endl;
579 stab.
init(
A, verbose_level - 2);
581 cout <<
"group_container::point_stabilizer_with_action "
582 "before stab.init_strong_generators" << endl;
586 cout <<
"group_container::point_stabilizer_with_action "
587 "after stab.init_strong_generators" << endl;
591 cout <<
"stabilizer of point " << pt <<
" has order ";
595 cout <<
" with " << stab_gens.
len <<
" strong generators" << endl;
597 stab_gens.
print(cout);
605 int f_v = (verbose_level >= 1);
606 int f_vv = (verbose_level >= 2);
609 cout <<
"group_container::induced_action" << endl;
618 int drop_out_level, image;
629 KK.
init(
A, verbose_level - 2);
633 D.
mult(H_order, K_order, HK_order);
635 cout <<
"step " << n <<
" H_order " << H_order
636 <<
" K_order = " << K_order
637 <<
" HK_order " << HK_order <<
" of " << go << endl;
643 cout <<
"step " << n <<
":" << endl;
647 cout <<
"random group element:" << endl;
652 drop_out_level, image, verbose_level - 1)) {
654 cout <<
"element strips through H" << endl;
657 drop_out_level, image, verbose_level - 1)) {
659 cout <<
"element strips through K" << endl;
664 drop_out_level, verbose_level - 1);
669 drop_out_level, verbose_level - 1);
674 D.
mult(H_order, K_order, HK_order);
677 cout <<
"step " << n <<
" H_order " << H_order
678 <<
" K_order = " << K_order
679 <<
" HK_order " << HK_order <<
" of " << go << endl;
681 cout <<
"remaining factor: " << quo
682 <<
" remainder " << rem << endl;
689 cout <<
"group::induced_action "
690 "finished after " << n <<
" steps" << endl;
691 cout <<
"H_order " << H_order <<
" K_order = " << K_order << endl;
692 cout <<
"# generators for H = " << HH.
gens.
len
693 <<
", # generators for K = " << KK.
gens.
len << endl;
694 cout <<
"H:" << endl;
696 cout <<
"K:" << endl;
712 K.
init(
A, verbose_level - 2);
716 cout <<
"group_container::induced_action finished after "
717 << n <<
" iterations" << endl;
718 cout <<
"order of the induced group = ";
721 cout <<
"order of the kernel = ";
727 cout <<
"induced group:" << endl;
730 cout <<
"kernel:" << endl;
733 cout << H.
SG->
len <<
" strong generators for induced group:" << endl;
736 cout << K.
SG->
len <<
" strong generators for kernel:" << endl;
746 cout <<
"group_container::induced_action finished" << endl;
756 int f_v = (verbose_level >= 1);
757 int f_vv = (verbose_level >= 2);
763 int n = 0, drop_out_level, image;
768 cout <<
"group_container::extension" << endl;
773 D.
mult(go_N, go_H, go_G);
778 cout <<
"group_container::extension |N| = " << go_N <<
" |H| = "
779 << go_H <<
" |G| = |N|*|H| = " << go_G << endl;
783 init(N.
A, verbose_level - 2);
784 G.
init(N.
A, verbose_level - 2);
792 cout <<
"step " << n <<
":" << endl;
794 if (n % 2 || G.
nb_gen[0] == 0) {
798 cout <<
"random group element:" << endl;
806 cout <<
"random schreier generator:" << endl;
812 if (G.
strip(Elt,
A->
Elt2 , drop_out_level, image, verbose_level - 1)) {
814 cout <<
"element strips through" << endl;
819 drop_out_level, verbose_level - 1);
826 <<
" cur_go " << cur_go <<
" of " << go_G << endl;
828 cout <<
"remaining factor: " << quo
829 <<
" remainder " << rem << endl;
841 init(
A, verbose_level - 2);
845 cout <<
"group_container::extension finished after "
846 << n <<
" iterations" << endl;
847 cout <<
"order of the extension = ";
856 int f_print_as_permutation)
861 cout <<
"group_container::print_strong_generators "
862 "no strong generators" << endl;
865 ost <<
"group::print_strong_generators a group with tl=";
868 ost <<
" and with " << l <<
" strong generators" << endl;
869 for (i = 0; i < l; i++) {
870 ost <<
"generator " << i <<
":" << endl;
873 if (f_print_as_permutation) {
890 int f_v = (verbose_level >= 1);
891 int f_vv = (verbose_level >= 2);
896 cout <<
"group_container::print_strong_generators_with_different_"
897 "action_verbose" << endl;
900 cout <<
"group_container::print_strong_generators_with_different_"
901 "action no strong generators" << endl;
904 ost <<
"group_container::print_strong_generators_with_different_"
905 "action_verbose a group with tl=";
908 ost <<
" and with " << l <<
" strong generators" << endl;
909 for (i = 0; i < l; i++) {
910 ost <<
"generator " << i <<
":" << endl;
916 cout <<
"group_container::print_strong_generators_with_"
917 "different_action_verbose computing images "
918 "individually" << endl;
921 for (j = 0; j < A2->
degree; j++) {
932 ost <<
"as permutation in action " << A2->
label
933 <<
" of degree " << A2->
degree <<
":" << endl;
interface to system functions
void decode_uchar(char *&p, uchar &a)
void code_int4(char *&p, int_4 i)
int_4 decode_int4(char *&p)
void code_uchar(char *&p, uchar a)
domain to compute with objects of type longinteger
void multiply_up(longinteger_object &a, int *x, int len, int verbose_level)
void mult(longinteger_object &a, longinteger_object &b, longinteger_object &c)
void integral_division(longinteger_object &a, longinteger_object &b, longinteger_object &q, longinteger_object &r, int verbose_level)
int compare_unsigned(longinteger_object &a, longinteger_object &b)
a class to represent arbitrary precision integers
a permutation group in a fixed action.
void element_unpack(void *elt, void *Elt, int verbose_level)
void element_print_quick(void *elt, std::ostream &ost)
void element_print(void *elt, std::ostream &ost)
int coded_elt_size_in_char
void element_pack(void *Elt, void *elt, int verbose_level)
void element_retrieve(int hdl, void *elt, int verbose_level)
void element_print_as_permutation_verbose(void *elt, std::ostream &ost, int verbose_level)
void element_print_as_permutation(void *elt, std::ostream &ost)
long int element_image_of(long int a, void *elt, int verbose_level)
a container data structure for groups
void extension(group_container &N, group_container &H, int verbose_level)
void point_stabilizer(group_container &stab, int pt, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
void init_strong_generators(vector_ge &SG, int *tl, int verbose_level)
void print_strong_generators(std::ostream &ost, int f_print_as_permutation)
int f_has_strong_generators
void init_strong_generators_empty_set(int verbose_level)
void get_strong_generators(int verbose_level)
void init_ascii_coding(const char *ascii_coding, int verbose_level)
void delete_strong_generators()
void print_group_order(std::ostream &ost)
void schreier_sims(int verbose_level)
void require_strong_generators()
void print_strong_generators_with_different_action_verbose(std::ostream &ost, actions::action *A2, int verbose_level)
void init(actions::action *A, int verbose_level)
void init_strong_generators_by_handle_and_with_tl(std::vector< int > &gen_handle, std::vector< int > &tl, int verbose_level)
void decode_ascii(int verbose_level)
void point_stabilizer_with_action(actions::action *A2, group_container &stab, int pt, int verbose_level)
void induced_action(actions::action &induced_action, group_container &H, group_container &K, int verbose_level)
void init_ascii_coding_to_sims(const char *ascii_coding, int verbose_level)
void code_ascii(int verbose_level)
void delete_ascii_coding()
void print_strong_generators_with_different_action(std::ostream &ost, actions::action *A2)
void require_ascii_coding()
void init_strong_generators_by_hdl(int nb_gen, int *gen_hdl, int *tl, int verbose_level)
to hold a vector of group elements
void allocate(int length, int verbose_level)
void copy_in(int i, int *elt)
void print(std::ostream &ost)
void init(actions::action *A, int verbose_level)
a permutation group represented via a stabilizer chain
void point_stabilizer(data_structures_groups::vector_ge &SG, int *tl, int pt, int verbose_level)
void random_element(int *elt, int verbose_level)
void init(actions::action *A, int verbose_level)
void extract_strong_generators_in_order(data_structures_groups::vector_ge &SG, int *tl, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
void init_trivial_group(int verbose_level)
void compute_base_orbits_known_length(int *tl, int verbose_level)
void print(int verbose_level)
void add_generator_at_level(int *elt, int lvl, int verbose_level)
data_structures_groups::vector_ge gens
void random_schreier_generator(int *Elt, int verbose_level)
int strip(int *elt, int *residue, int &drop_out_level, int &image, int verbose_level)
void init_generators(data_structures_groups::vector_ge &generators, int verbose_level)
void compute_base_orbits(int verbose_level)
void print_group_order(std::ostream &ost)
void point_stabilizer_with_action(actions::action *A2, data_structures_groups::vector_ge &SG, int *tl, int pt, int verbose_level)
#define Int_vec_print(A, B, C)
the orbiter library for the classification of combinatorial objects