16namespace layer5_applications {
17namespace apps_graph_theory {
21 int group,
int subgroup,
int verbose_level)
23 int f_v = (verbose_level >= 1);
26 cout <<
"cayley_graph_search::init" << endl;
38 cout <<
"cayley_graph_search::init "
39 "before init_group" << endl;
43 cout <<
"cayley_graph_search::init "
44 "after init_group" << endl;
49 cout <<
"cayley_graph_search::init "
50 "before init_group2" << endl;
54 cout <<
"cayley_graph_search::init "
55 "after init_group2" << endl;
59 cout <<
"The elements of the subgroup are:" << endl;
60 for (i = 0; i <
go; i++) {
70 cout <<
"Element " << setw(5) << i <<
" / "
74 cout <<
"is element " << j << endl;
78 cout <<
"generators:" << endl;
91 cout <<
"Element " << setw(5) << i <<
" / "
95 cout <<
"is element " << j << endl;
98 for (i = 0; i <
go; i++) {
104 cout <<
"List of elements and inverse:" << endl;
105 for (i = 0; i <
go; i++) {
113 cout <<
"cayley_graph_search::init done" << endl;
121 int f_v = (verbose_level >= 1);
124 cout <<
"cayley_graph_search::init_group" << endl;
129 else if (
level == 4) {
132 else if (
level == 5) {
136 cout <<
"cayley_graph_search::init illegal level" << endl;
137 cout <<
"level = " <<
level << endl;
141 cout <<
"cayley_graph_search::init_group done" << endl;
148 int f_v = (verbose_level >= 1);
152 cout <<
"cayley_graph_search::init_group2" << endl;
158 cout <<
"Strong_gens_subgroup = NULL" << endl;
175 cout <<
"Element " << setw(5) << i <<
" / "
182 else if (
group == 4) {
183 for (i = 0; i <
go; i++) {
185 cout <<
"Element " << setw(5) << i <<
" / "
186 <<
go <<
":" << endl;
198 else if (
level == 5) {
201 cout <<
"Element " << setw(5) << i <<
" / "
211 for (i = 0; i <
go; i++) {
213 cout <<
"Element " << setw(5) << i <<
" / "
214 <<
go <<
":" << endl;
271 cout <<
"cayley_graph_search::init_group2 done" << endl;
277 int f_v = (verbose_level >= 1);
281 cout <<
"cayley_graph_search::init_group_level_3" << endl;
291 int f_no_base =
FALSE;
312 for (i = 0; i < 3; i++) {
320 cout <<
"illegal group" << endl;
331 cout <<
"cayley_graph_search::init_group_level_3 done" << endl;
337 int f_v = (verbose_level >= 1);
340 cout <<
"cayley_graph_search::init_group_level_4" << endl;
354 else if (
group == 3) {
358 else if (
group == 4) {
362 else if (
group == 5) {
369 int f_no_base =
FALSE;
372 else if (
group == 4) {
386 cout <<
"group " <<
group <<
" not yet implemented" << endl;
403 1,2,3,0,4,5,6,7,8,9,
404 0,1,2,3,5,4,6,7,8,9,
405 0,1,2,3,4,5,7,6,8,9,
406 0,1,2,3,4,5,6,7,9,8,
408 int data_subgroup[] = {
409 2,3,0,1,4,5,6,7,8,9,
410 0,1,2,3,5,4,6,7,8,9,
411 0,1,2,3,4,5,7,6,8,9,
412 0,1,2,3,4,5,6,7,9,8,
417 for (i = 0; i < 4; i++) {
425 for (i = 0; i < 4; i++) {
432 else if (
group == 3) {
439 int data_subgroup1[] = {
445 int data_subgroup2[] = {
454 for (i = 0; i < 4; i++) {
464 for (i = 0; i < 4; i++) {
472 for (i = 0; i < 4; i++) {
480 cout <<
"unkown subgroup" << endl;
484 else if (
group == 4) {
486 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1, 1,0,0,0,
487 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1, 0,1,0,0,
488 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1, 0,0,1,0,
489 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1, 0,0,0,1,
490 1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,1, 0,0,0,0
493 int data_subgroup[] = {
494 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1, 1,0,0,0,
495 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1, 0,1,0,0,
496 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1, 0,0,1,0,
497 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1, 0,0,0,1,
501 for (i = 0; i < 5; i++) {
507 for (i = 0; i < 4; i++) {
514 else if (
group == 5) {
515 const char *data_str[] = {
516 "(1,2)(5,8,6,7)(9,12,10,11)",
517 "(1,4)(2,3)(5,12)(6,11)(7,10)(8,9)",
518 "(5,10)(6,9)(7,12)(8,11)",
519 "(1,2)(3,4)(5,6)(7,8)(9,10)(11,12)",
520 "(5,6)(7,8)(9,10)(11,12)"
526 for (i = 0; i < 5; i++) {
531 data_str[i], perm,
degree,
533 cout <<
"degree=" <<
degree << endl;
534 for (j = 0; j <
degree; j++) {
535 cout << perm[j] <<
" ";
539 for (j = 1; j <
degree; j++) {
540 perm[j - 1] = perm[j] - 1;
542 for (j = 0; j <
degree - 1; j++) {
543 cout << perm[j] <<
" ";
550 const char *data_subgroup_str[] = {
551 "(1,4)(2,3)(5,8)(6,7)(9,12)(10,11)",
552 "(1,4)(2,3)(5,12)(6,11)(7,10)(8,9)",
554 "(5,6)(7,8)(9,10)(11,12)"
559 for (i = 0; i < 4; i++) {
564 data_subgroup_str[i], perm,
degree,
566 for (j = 0; j <
degree; j++) {
567 cout << perm[j] <<
" ";
571 for (j = 1; j <
degree; j++) {
572 perm[j - 1] = perm[j] - 1;
574 for (j = 0; j <
degree - 1; j++) {
575 cout << perm[j] <<
" ";
585 cout <<
"illegal group" << endl;
591 cout <<
"creating generators for the group:" << endl;
597 cout <<
"creating generators for the subgroup:" << endl;
604 cout <<
"cayley_graph_search::init_group_level_4 done" << endl;
611 int f_v = (verbose_level >= 1);
614 cout <<
"cayley_graph_search::init_group_level_5" << endl;
630 cout <<
"unknown type of group" << endl;
648 cout <<
"group " <<
group <<
" not yet implemented" << endl;
666 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1, 1,0,0,0,0,
667 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1, 0,1,0,0,0,
668 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1, 0,0,1,0,0,
669 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1, 0,0,0,1,0,
670 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1, 0,0,0,0,1,
671 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,1, 0,0,0,0,0,
674 int data_subgroup[] = {
675 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1, 1,0,0,0,0,
676 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1, 0,1,0,0,0,
677 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1, 0,0,1,0,0,
678 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1, 0,0,0,1,0,
679 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1, 0,0,0,0,1,
683 for (i = 0; i < 6; i++) {
689 for (i = 0; i < 5; i++) {
697 cout <<
"illegal group" << endl;
703 cout <<
"creating generators for the group:" << endl;
711 cout <<
"go1=" << go1 << endl;
715 cout <<
"creating generators for the subgroup:" << endl;
722 cout <<
"cayley_graph_search::init_group_level_5 done" << endl;
728 int len,
long int *S,
int verbose_level)
732 int f_v = (verbose_level >= 1);
736 cout <<
"checking set ";
738 cout <<
" (incrementally)";
751 cout <<
"OK" << endl;
764 int f_v = (verbose_level >= 1);
767 cout <<
"cayley_graph_search::classify_subsets" << endl;
774 prefix.assign(
"Ferdinand");
779 cout <<
"classifying subsets:" << endl;
819 cout <<
"cayley_graph_search::classify_subsets "
829 int f_v = (verbose_level >= 1);
832 cout <<
"cayley_graph_search::write_file" << endl;
845 sprintf(str,
"%d_%d_subgroup_%d_graphs_sz_%d.txt",
852 for (i = 0; i <
go; i++) {
854 cout <<
"Element " << setw(5) << i <<
" / "
855 <<
go <<
":" << endl;
864 for (i = 0; i <
go; i++) {
866 cout <<
"Element " << setw(5) << i <<
" / "
867 <<
go <<
":" << endl;
885 cout <<
"We found " << nb_orbits <<
" orbits on "
886 << sz <<
"-subsets" << endl;
889 for (n = 0; n < nb_orbits; n++) {
891 set_and_stabilizer *SaS;
895 cout << n <<
" / " << nb_orbits <<
" : ";
897 cout <<
" # " << cnt << endl;
901 for (n = 0; n < nb_orbits; n++) {
907 if ((n % 1000) == 0) {
908 cout << n <<
" / " << nb_orbits <<
" : ";
910 cout <<
" # " << cnt << endl;
922 for (i = 0; i <
go; i++) {
924 for (j = 0; j < sz; j++) {
925 fp << Adj[i * sz + j];
942 if (n < nb_orbits - 1) {
946 fp <<
" # " << cnt << endl;
964 int set[5] = {6,7,8,10,15};
965 int canonical_set[5];
974 cout <<
"canonical set : ";
975 int_vec_print(cout, canonical_set, 5);
977 cout <<
"orb=" << orb << endl;
978 cout <<
"transporter : ";
985 cout <<
"cayley_graph_search::write_file done" << endl;
990 long int *connection_set,
int connection_set_sz,
998 cout <<
"cayley_graph_search::create_Adjacency_list" << endl;
1000 for (i = 0; i <
go; i++) {
1004 cout <<
"Element " << setw(5) << i <<
" / "
1005 <<
go <<
":" << endl;
1008 int_vec_print(cout, connection_set, connection_set_sz);
1013 Adj + i * connection_set_sz,
1014 connection_set_sz,
Elt1,
1018 cout <<
"image_set: ";
1020 Adj + i * connection_set_sz, connection_set_sz);
1030 for (i = 0; i <
go; i++) {
1032 for (j = 0; j < sz; j++) {
1033 cout << Adj[i * connection_set_sz + j];
1034 if (j < connection_set_sz - 1) {
1049 cout <<
"cayley_graph_search::create_Adjacency_list "
1055 long int *Additional_neighbor,
1056 int *Additional_neighbor_sz,
1057 long int connection_element,
1061 int f_v = (verbose_level >= 1);
1065 cout <<
"cayley_graph_search::create_Adjacency_list" << endl;
1067 for (i = 0; i <
go; i++) {
1068 Additional_neighbor_sz[i] = 0;
1071 for (i = 0; i <
go; i++) {
1077 connection_element,
Elt1, 0 );
1078 Additional_neighbor_sz[i]++;
void finite_field_init(int q, int f_without_tables, int verbose_level)
linear_algebra::linear_algebra * Linear_algebra
int is_identity_matrix(int *A, int n)
a collection of functions related to file io
long int file_size(std::string &fname)
a class to represent arbitrary precision integers
void create(long int i, const char *file, int line)
a permutation group in a fixed action.
void element_print_quick(void *elt, std::ostream &ost)
void element_print(void *elt, std::ostream &ost)
void element_mult(void *a, void *b, void *ab, int verbose_level)
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 make_element(int *Elt, int *data, 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 element_move(void *a, void *b, int verbose_level)
void init_permutation_group(int degree, int f_no_base, int verbose_level)
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 element_print_as_permutation(void *elt, std::ostream &ost)
void induced_action_by_right_multiplication(int f_basis, groups::sims *old_G, groups::sims *Base_group, int f_ownership, int verbose_level)
void map_a_set_and_reorder(long int *set, long int *image_set, int n, int *Elt, int verbose_level)
int element_order(void *elt)
long int element_image_of(long int a, void *elt, int verbose_level)
a set and its known set stabilizer
void print_set_tex(std::ostream &ost)
to hold a vector of group elements
void allocate(int length, int verbose_level)
void init(actions::action *A, int verbose_level)
void create_group_table(int *&Table, long int &n, int verbose_level)
void print_all_group_elements()
void element_unrank_lint(long int rk, int *Elt, int verbose_level)
long int element_rank_lint(int *Elt)
sims * create_sims(int verbose_level)
void print_generators(std::ostream &ost)
data_structures_groups::vector_ge * gens
void group_order(ring_theory::longinteger_object &go)
to control the behavior of the poset classification algorithm
std::string problem_label
the poset classification algorithm
int trace_set(long int *set, int size, int level, long int *canonical_set, int *Elt_transporter, int verbose_level)
data_structures_groups::set_and_stabilizer * get_set_and_stabilizer(int level, int orbit_at_level, int verbose_level)
int nb_orbits_at_level(int level)
void compute_orbits_on_subsets(int target_depth, poset_classification_control *PC_control, poset_with_group_action *Poset, int verbose_level)
void draw_poset(std::string &fname_base, int depth, int data, graphics::layered_graph_draw_options *LG_Draw_options, int verbose_level)
a poset with a group action on it
void init_subset_lattice(actions::action *A, actions::action *A2, groups::strong_generators *Strong_gens, int verbose_level)
void init_group_level_4(int verbose_level)
data_structures_groups::vector_ge * gens_subgroup
poset_classification::poset_classification * gen
void init_group_level_5(int verbose_level)
poset_classification::poset_with_group_action * Poset
ring_theory::longinteger_object Aut_order
void create_Adjacency_list(long int *Adj, long int *connection_set, int connection_set_sz, int verbose_level)
ring_theory::longinteger_object target_go_subgroup
groups::strong_generators * Strong_gens
field_theory::finite_field * F
data_structures_groups::vector_ge * gens
void init_group_level_3(int verbose_level)
ring_theory::longinteger_object target_go
void init_group2(int verbose_level)
groups::sims * S_subgroup
void classify_subsets(int verbose_level)
void write_file(int verbose_level)
groups::strong_generators * Strong_gens_subgroup
poset_classification::poset_classification_control * Control
void create_additional_edges(long int *Additional_neighbor, int *Additional_neighbor_sz, long int connection_element, int verbose_level)
int * list_of_elements_inverse
int incremental_check_func(int len, long int *S, int verbose_level)
void init(int level, int group, int subgroup, int verbose_level)
void init_group(int verbose_level)
groups::strong_generators * Aut_gens
#define Int_vec_zero(A, B)
#define Lint_vec_print(A, B, C)
the orbiter library for the classification of combinatorial objects