Orbiter 2022
Combinatorial Objects
sims2.cpp
Go to the documentation of this file.
1// sims2.cpp
2//
3// Anton Betten
4// January 11, 2009
5
7#include "group_actions.h"
8
9using namespace std;
10
11
12namespace orbiter {
13namespace layer3_group_actions {
14namespace groups {
15
16
17
19 int *Elt, int verbose_level)
20{
21 int f_v = (verbose_level >= 1);
22 //int f_vv = (verbose_level >= 2);
23 int *Elt1, *Elt2, *Elt3, *Elt4, *Elt5, *Elt6;
25
26 if (f_v) {
27 cout << "choose_random_generator_derived_group" << endl;
28 }
29 A = G->A;
30 Elt1 = NEW_int(A->elt_size_in_int);
31 Elt2 = NEW_int(A->elt_size_in_int);
32 Elt3 = NEW_int(A->elt_size_in_int);
33 Elt4 = NEW_int(A->elt_size_in_int);
34 Elt5 = NEW_int(A->elt_size_in_int);
35 Elt6 = NEW_int(A->elt_size_in_int);
36
37 G->random_element(Elt1, verbose_level - 1);
38 G->random_element(Elt2, verbose_level - 1);
39 A->invert(Elt1, Elt3);
40 A->invert(Elt2, Elt4);
41 A->mult(Elt3, Elt4, Elt5);
42 A->mult(Elt1, Elt2, Elt6);
43 A->mult(Elt5, Elt6, Elt);
44
45 FREE_int(Elt1);
46 FREE_int(Elt2);
47 FREE_int(Elt3);
48 FREE_int(Elt4);
49 FREE_int(Elt5);
50 FREE_int(Elt6);
51}
52
54 void (*choose_random_generator_for_subgroup)(sims *G,
55 int *Elt, int verbose_level),
56 int verbose_level)
57{
58 int f_v = (verbose_level >= 1);
59 int f_vv = (verbose_level >= 2);
60 int f_vvv = (verbose_level >= 3);
61 //int f_vvvv = (verbose_level >= 10);
62 ring_theory::longinteger_object go, G_order, quo, rem;
63 int drop_out_level, image, cnt, f_added;
65
66 GA = A;
67
68 if (f_v) {
69 cout << "sims::build_up_subgroup_random_process" << endl;
70 }
71 G->group_order(G_order);
72 group_order(go);
73 if (f_v) {
74 cout << "sims::build_up_subgroup_random_process(): "
75 "old group order is " << G_order << endl;
76 cout << "the group is in action " << G->A->label
77 << " with base_length = " << G->A->base_len()
78 << " and degree " << G->A->degree << endl;
79 cout << "the image action has base_length = " << GA->base_len()
80 << " and degree " << GA->degree << endl;
81 cout << "current action " << GA->label << endl;
82 cout << "current group order = " << go << endl;
83 }
84 cnt = 0;
85 while (cnt < 200) {
86
87 if (f_vv) {
88 cout << "sims::build_up_subgroup_random_process iteration " << cnt << endl;
89 }
90#if 0
91 if (cnt > 1000) {
92 cout << "sims::build_up_group_random_process "
93 "cnt > 1000, something seems to be wrong" << endl;
94 test_if_subgroup(G, 2);
95 exit(1);
96 }
97#endif
98 if (FALSE) {
99 G->A->print_base();
100 G->print_orbit_len();
101 }
102 if ((cnt % 2) == 0) {
103 if (f_vvv) {
104 cout << "sims::build_up_subgroup_random_process choosing random schreier generator" << endl;
105 }
106 random_schreier_generator(GA->Elt1, 0/*verbose_level - 3*/);
107 //A->element_move(schreier_gen, GA->Elt1, 0);
108 if (FALSE) {
109 cout << "sims::build_up_subgroup_random_process random element chosen:" << endl;
110 A->element_print(GA->Elt1, cout);
111 cout << endl;
112 }
113 }
114 else if ((cnt % 2) == 1){
115 if (f_vvv) {
116 cout << "sims::build_up_subgroup_random_process choosing random element in the "
117 "group by which we extend" << endl;
118 }
119 (*choose_random_generator_for_subgroup)(G,
120 GA->Elt1, verbose_level - 1);
121 if (FALSE) {
122 cout << "sims::build_up_subgroup_random_process random element chosen" << endl;
123 }
124 if (FALSE) {
125 GA->element_print(GA->Elt1, cout);
126 cout << endl;
127 }
128 }
129 if (strip(GA->Elt1, GA->Elt2, drop_out_level,
130 image, 0/*verbose_level*/)) {
131 if (f_vvv) {
132 cout << "sims::build_up_subgroup_random_process element strips through" << endl;
133 if (FALSE) {
134 cout << "sims::build_up_subgroup_random_process residue = " << endl;
135 GA->element_print(GA->Elt2, cout);
136 cout << endl;
137 }
138 }
139 f_added = FALSE;
140 closure_group(100, verbose_level - 2);
141 }
142 else {
143 f_added = TRUE;
144 if (f_v) {
145 cout << "sims::build_up_subgroup_random_process element needs to be inserted at level = "
146 << drop_out_level << " with image "
147 << image << endl;
148 if (TRUE) {
149 GA->element_print(GA->Elt2, cout);
150 cout << endl;
151 }
152 }
154 drop_out_level, 0/*verbose_level - 3*/);
155 }
156
157 group_order(go);
158 if ((f_v && f_added) || f_vv) {
159 cout << "sims::build_up_subgroup_random_process new group order is " << go << " : ";
161 }
162 cnt++;
163 }
164 if (f_v) {
165 cout << "sims::build_up_subgroup_random_process "
166 "finished: found a group of order " << go << endl;
168 }
169}
170
171}}}
172
a class to represent arbitrary precision integers
Definition: ring_theory.h:366
a permutation group in a fixed action.
Definition: actions.h:99
void element_print(void *elt, std::ostream &ost)
Definition: action_cb.cpp:347
void mult(void *a, void *b, void *ab)
Definition: action_cb.cpp:81
a permutation group represented via a stabilizer chain
Definition: groups.h:1273
void random_element(int *elt, int verbose_level)
int test_if_subgroup(sims *old_G, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
Definition: sims.cpp:951
void build_up_subgroup_random_process(sims *G, void(*choose_random_generator_for_subgroup)(sims *G, int *Elt, int verbose_level), int verbose_level)
Definition: sims2.cpp:53
int closure_group(int nb_times, int verbose_level)
Definition: sims_main.cpp:1353
void add_generator_at_level(int *elt, int lvl, int verbose_level)
Definition: sims_main.cpp:543
void random_schreier_generator(int *Elt, int verbose_level)
Definition: sims.cpp:1803
int strip(int *elt, int *residue, int &drop_out_level, int &image, int verbose_level)
Definition: sims_main.cpp:433
#define FREE_int(p)
Definition: foundations.h:640
#define NEW_int(n)
Definition: foundations.h:625
#define TRUE
Definition: foundations.h:231
#define FALSE
Definition: foundations.h:234
void choose_random_generator_derived_group(sims *G, int *Elt, int verbose_level)
Definition: sims2.cpp:18
the orbiter library for the classification of combinatorial objects