15namespace layer3_group_actions {
20 long int rank,
int *Elt,
int verbose_level)
22 int f_v = (verbose_level >= 1);
23 long int i, base_idx = 0, base_pt, rank0, nb, len, k, elt_k;
33 cout <<
"action::coset_unrank rank=" << rank << endl;
34 cout <<
"in action:" << endl;
36 cout <<
"verbose_level=" << verbose_level << endl;
42 G->group_order(G_order);
49 cout <<
"The full group has order " << G_order << endl;
50 cout <<
"The subgroup has order " << U_order << endl;
51 cout <<
"The index is " << index << endl;
56 cout <<
"base is not lexleast" << endl;
60 cout <<
"the base is lexleast" << endl;
67 G->print_transversal_lengths();
71 G_orb.
init(
this, verbose_level - 2);
77 U_orb.
init(
this, verbose_level - 2);
82 if (
G->get_orbit_length(i) > 1 ) {
89 cout <<
"the groups are equal" << endl;
92 cout <<
"the groups are equal but rank is not zero" << endl;
96 G->element_unrank_int(rank, Elt);
98 cout <<
"the element with rank " << rank <<
" is:" << endl;
105 base_pt =
base_i(base_idx);
107 cout <<
"base_idx = " << base_idx << endl;
108 cout <<
"base_pt = " << base_pt << endl;
109 cout <<
"G->orbit_len[base_idx]=" <<
G->get_orbit_length(base_idx) << endl;
116 cout <<
"G0_order=" << G0_order << endl;
122 orbit_len =
G->get_orbit_length(base_idx);
128 for (
int t = 0; t < orbit_len; t++) {
129 orbit[t] =
G->get_orbit(base_idx, t);
135 cout <<
"orbit of length " << orbit_len <<
":";
140 int nb_U_orbits_on_subset;
144 cout <<
"orbit of base_pt under G has length " << G_orb.
orbit_len[0] << endl;
148 cout <<
"action::coset_unrank G_orb.orbit_len[0] != orbit_len" << endl;
155 cout <<
"U-orbits: ";
158 cout <<
"in order:" << endl;
165 for (k = 0; k < nb_U_orbits_on_subset; k++) {
167 b.
create(len, __FILE__, __LINE__);
168 D.
mult(G0_order, b, c);
171 cout <<
"action::coset_unrank: remainder is not zero, "
172 "something is wrong" << endl;
181 cout <<
"double coset k=" << k <<
" elt_k=" << elt_k
182 <<
" nb=" << nb << endl;
184 if (rank0 + nb > rank) {
186 cout <<
"we are in double coset " << k << endl;
187 cout <<
"reduced rank is " << rank - rank0 << endl;
199 cout <<
"gk (before)=" << endl;
206 cout <<
"gk (after)=" << endl;
212 cout <<
"image of base point under gk is not as expected!" << endl;
213 cout <<
"base_pt=" << base_pt << endl;
214 cout <<
"elt_k=" << elt_k << endl;
232 cout <<
"orbit of elt_k under G has length " << G_orb.
orbit_len[0] << endl;
241 cout <<
"Gk transversal lengths:" << endl;
243 cout <<
"Uk transversal lengths:" << endl;
248 cout <<
"recursing" << endl;
252 cout <<
"recursion done" << endl;
253 cout <<
"Elt1=" << endl;
256 cout <<
"Elt_gk=" << endl;
265 cout <<
"Elt_gk * Elt1=" << endl;
290 int f_v = (verbose_level >= 1);
292 long int i, base_idx = 0, base_pt, rank1, nb, len, k, kk, elt_k, im;
301 cout <<
"##################################" << endl;
302 cout <<
"action::coset_rank element" << endl;
306 cout <<
"in action:" << endl;
315 G->group_order(G_order);
322 cout <<
"The full group has order " << G_order << endl;
323 cout <<
"The subgroup has order " << U_order << endl;
324 cout <<
"The index is " << index << endl;
329 cout <<
"base is not lexleast" << endl;
335 cout <<
"the base is lexleast" << endl;
339 G->print_transversal_lengths();
343 G_orb.
init(
this, verbose_level - 2);
347 U_orb.
init(
this, verbose_level - 2);
352 if (
G->get_orbit_length(i) > 1) {
359 cout <<
"the groups are equal" << endl;
362 G->element_unrank_int(rank, Elt);
364 cout <<
"the element with rank " << rank <<
" is:" << endl;
371 base_pt =
base_i(base_idx);
373 cout <<
"base_idx = " << base_idx << endl;
374 cout <<
"base_pt = " << base_pt << endl;
375 cout <<
"G->orbit_len[base_idx]=" <<
G->get_orbit_length(base_idx) << endl;
382 cout <<
"G0_order=" << G0_order << endl;
388 orbit_len =
G->get_orbit_length(base_idx);
392 for (
int t = 0; t < orbit_len; t++) {
393 orbit[t] =
G->get_orbit(base_idx, t);
399 cout <<
"G-orbit of length " << orbit_len <<
":";
408 cout <<
"orbit of base_pt under G has length " << G_orb.
orbit_len[0] << endl;
409 cout <<
"G-orbits: ";
416 cout <<
"U-orbits: ";
419 cout <<
"in order:" << endl;
428 cout <<
"image of base point " << base_pt <<
" is " << im << endl;
432 cout <<
"Which lies in orbit " << k << endl;
434 for (kk = 0; kk < k; kk++) {
436 b.
create(len, __FILE__, __LINE__);
437 D.
mult(G0_order, b, c);
440 cout <<
"action::coset_rank: remainder is not zero, something is wrong" << endl;
447 cout <<
"after going through the previous double cosets, rank=" << rank << endl;
450 b.
create(len, __FILE__, __LINE__);
451 D.
mult(G0_order, b, c);
454 cout <<
"action::coset_rank: remainder is not zero, something is wrong" << endl;
460 cout <<
"elt_k=" << elt_k << endl;
468 cout <<
"image of base point under gk is not as expected!" << endl;
469 cout <<
"base_pt=" << base_pt << endl;
470 cout <<
"elt_k=" << elt_k << endl;
472 cout <<
"gk (before minimizing base images)=" << endl;
480 cout <<
"gk (before minimizing base images)=" << endl;
489 cout <<
"gk (after minimizing base images)=" << endl;
497 cout <<
"image of base point under gk is not as expected!" << endl;
498 cout <<
"base_pt=" << base_pt << endl;
499 cout <<
"elt_k=" << elt_k << endl;
501 cout <<
"gk (after minimizing base images)=" << endl;
515 cout <<
"orbit of elt_k under G has length " << G_orb.
orbit_len[0] << endl;
524 cout <<
"Gk transversal lengths:" << endl;
526 cout <<
"Uk transversal lengths:" << endl;
531 cout <<
"Elt_gk=" << endl;
536 cout <<
"we are now going to divide off Elt_gk from the left." << endl;
537 cout <<
"Elt_gk^-1=" << endl;
543 cout <<
"Elt_gk^-1 * Elt =" << endl;
555 cout <<
"image of elt_k = " << elt_k <<
" is " << im << endl;
556 cout <<
"we are now dividing off an element of U "
557 "from the right so that elt_k is fixed" << endl;
563 cout <<
"Elt_u =" << endl;
565 cout <<
"moves " << im <<
" to " << elt_k << endl;
568 cout <<
"image of " << im <<
" is "
570 <<
" but not " << elt_k <<
" fatal" << endl;
576 cout <<
"after multiplying Elt_u:" << endl;
582 cout <<
"recursing" << endl;
587 cout <<
"recursion done, rank1=" << rank1 << endl;
591 cout <<
"rank=" << rank << endl;
a collection of functions related to sorted vectors
void int_vec_heapsort(int *v, int len)
domain to compute with objects of type longinteger
void integral_division_by_int(longinteger_object &a, int b, longinteger_object &q, int &r)
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)
a class to represent arbitrary precision integers
void create(long int i, const char *file, int line)
void coset_unrank(groups::sims *G, groups::sims *U, long int rank, int *Elt, int verbose_level)
void element_print_quick(void *elt, std::ostream &ost)
void element_mult(void *a, void *b, void *ab, int verbose_level)
void element_print_base_images(int *Elt)
void element_invert(void *a, void *av, int verbose_level)
void element_one(void *elt, int verbose_level)
long int coset_rank(groups::sims *G, groups::sims *U, int *Elt, int verbose_level)
void element_move(void *a, void *b, int verbose_level)
void minimize_base_images(int level, groups::sims *S, int *Elt, int verbose_level)
void element_print_as_permutation(void *elt, std::ostream &ost)
int test_if_lex_least_base(int verbose_level)
long int element_image_of(long int a, void *elt, int verbose_level)
Schreier trees for orbits of groups on points.
void print_and_list_orbits(std::ostream &ost)
void orbits_on_invariant_subset_fast(int len, int *subset, int verbose_level)
void init_generators(data_structures_groups::vector_ge &generators, int verbose_level)
void compute_point_orbit(int pt, int verbose_level)
void print_orbit_length_distribution(std::ostream &ost)
void point_stabilizer(actions::action *default_action, ring_theory::longinteger_object &go, groups::sims *&Stab, int orbit_no, int verbose_level)
void print_orbit_lengths(std::ostream &ost)
void init(actions::action *A, int verbose_level)
void coset_rep_inv(int j, int verbose_level)
void coset_rep(int j, int verbose_level)
a permutation group represented via a stabilizer chain
void group_order(ring_theory::longinteger_object &go)
data_structures_groups::vector_ge gens
void print_transversal_lengths()
int get_orbit_length(int i)
#define Int_vec_print(A, B, C)
the orbiter library for the classification of combinatorial objects