13#define AUTS_ALLOCATE_BLOCK_SIZE 100
17namespace layer3_group_actions {
59 int depth,
int verbose_level);
63 int nb_auts_allocated2;
78 int depth,
int verbose_level)
80 int f_v = (verbose_level >= 1);
81 int f_vv = (verbose_level >= 2);
82 int f_vvv = (verbose_level >= 3);
83 int transversal_length, base_point, image_point;
84 long int *current_set;
86 int i, idx, coset, cmp, ret, a;
95 cout <<
"action_is_minimal_recursion NODE "
97 for (i = 0; i < depth; i++) {
114 for (i = 0; i < A->
base_len(); i++) {
130 cout <<
"automorphism " << D->
nb_auts
139 for (i = 0; i < A->
base_len(); i++) {
149 cout <<
"action_is_minimal_recursion: "
150 "error while checking automorphism" << endl;
161 cout << setw(3) << i <<
" : "
162 << setw(3) << a1 <<
" -> "
163 << setw(3) << a <<
" -> "
164 << setw(3) << a2 << endl;
173 base_point = A->
base_i(depth);
175 cout <<
"depth = " << depth <<
" : ";
176 cout <<
"transversal_length=" << transversal_length
177 <<
" base_point=" << base_point << endl;
184 for (i = 0; i < transversal_length; i++) {
185 int f_accept =
FALSE;
189 image_point = A->
orbit_ij(depth, i);
204 cout <<
"coset " << i <<
" image_point = "
205 << image_point <<
" added, "
206 "D->nb_choices[depth]="
212 cout <<
"coset " << i <<
" image_point = "
213 << image_point <<
" skipped, "
214 "D->nb_choices[depth]="
220 cout <<
"choice set of size " << D->
nb_choices[depth] <<
" : ";
232 cout <<
"returning from level " << depth
233 <<
" because current_choice = "
235 <<
" and first_moved = " << D->
first_moved << endl;
250 cout <<
"depth = " << depth;
252 <<
" image_point=" << image_point
253 <<
" coset=" << coset << endl;
262 cout <<
"cosetrep:" << endl;
270 cout <<
"image set: ";
276 cout <<
"sorted image : ";
282 cout <<
"compare yields " << cmp;
288 cout << setw(2) << depth <<
" current_choice "
290 cout <<
" image_point=" << image_point
291 <<
" coset=" << coset << endl;
299 cout <<
"the current set is less than the original set, "
300 "so the original set was not minimal" << endl;
307 for (k = 0; k <= depth; k++) {
316 cout <<
"action_is_minimal_recursion: error in "
317 "check_if_transporter_for_set for witness" << endl;
325 cout <<
"depth = " << depth <<
" finished" << endl;
336 cout <<
"depth = " << depth <<
" finished" << endl;
344 int &backtrack_level,
int verbose_level)
347 int *transporter_witness;
348 int ret, backtrack_nodes;
349 int f_get_automorphism_group =
FALSE;
356 witness, transporter_witness, backtrack_nodes,
357 f_get_automorphism_group, Aut,
366 long int *canonical_set,
int *transporter,
367 int &total_backtrack_nodes,
372 int f_v = (verbose_level >= 1);
373 int f_vv = (verbose_level >= 2);
377 int backtrack_level, backtrack_nodes, cnt = 0;
381 total_backtrack_nodes = 0;
383 cout <<
"action::make_canonical" << endl;
384 cout <<
"verbose_level=" << verbose_level << endl;
388 cout <<
"the input set is ";
396 cout <<
"action::make_canonical group order = " << go << endl;
412 cout <<
"action::make_canonical iteration "
413 << cnt <<
" before is_minimal_witness" << endl;
416 backtrack_level, set2,
Elt2,
418 f_get_automorphism_group, *Aut,
422 total_backtrack_nodes += backtrack_nodes;
424 cout <<
"action::make_canonical: is minimal, "
425 "after iteration " << cnt <<
" with "
426 << backtrack_nodes <<
" backtrack nodes, total:"
427 << total_backtrack_nodes << endl;
432 total_backtrack_nodes += backtrack_nodes;
434 cout <<
"action::make_canonical finished iteration " << cnt;
439 << backtrack_nodes <<
" backtrack nodes, total:"
440 << total_backtrack_nodes << endl;
451 size, set, canonical_set, verbose_level - 3)) {
452 cout <<
"action::make_canonical check_if_transporter_for_set returns FALSE" << endl;
456 cout <<
"action::make_canonical succeeds in " << cnt
457 <<
" iterations, total_backtrack_nodes="
458 << total_backtrack_nodes << endl;
461 cout <<
"the automorphism group has order " << go << endl;
464 cout <<
"the canonical set is ";
478 int &backtrack_level,
long int *witness,
int *transporter_witness,
479 int &backtrack_nodes,
487 int f_v = (verbose_level >= 1);
488 int f_vv = (verbose_level >= 4);
494 cout <<
"action::is_minimal_witness" << endl;
495 cout <<
"verbose_level=" << verbose_level << endl;
498 cout <<
"action::is_minimal_witness the input set is ";
504 backtrack_level = size - 1;
509 cout <<
"action::is_minimal_witness current base is ";
511 cout <<
"action::is_minimal_witness doing base change" << endl;
517 cout <<
"action::is_minimal_witnessbase changed to ";
529 cout <<
"action::is_minimal_witness action " << A.
label << endl;
530 cout <<
"we have the following strong generators:" << endl;
532 cout <<
"and Sims:" << endl;
557 cout <<
"action::is_minimal_witness computing stabilizer orbits" << endl;
563 cout <<
"action::is_minimal_witness computing stabilizer orbits finished" << endl;
579 for (i = 0; i < A.
base_len(); i++) {
581 int b, c, f, l, j, p;
589 cout << i <<
"-th base point is " << b
590 <<
" different from i-th point in the set "
599 for (j = 0; j < l; j++) {
603 cout <<
"action::is_minimal_witness level " << i
604 <<
", orbit of base_point " << b
606 <<
" which is a smaller point" << endl;
609 cout <<
"action::is_minimal_witness partitionstack:" << endl;
619 for (k = 0; k < size; k++) {
638 for (i = 0; i < A.
base_len(); i++) {
643 for (j = 0; j < b; j++) {
658 cout <<
"action::is_minimal_witness: D.is_minimal_base_point=";
664 cout <<
"action::is_minimal_witness calling "
665 "action_is_minimal_recursion" << endl;
670 cout <<
"action::is_minimal_witness "
671 "action_is_minimal_recursion returns " << ret << endl;
677 cout <<
"action::is_minimal_witness computing witness" << endl;
679 for (i = 0; i < size; i++) {
680 witness[i] = A.
image_of(transporter_witness, set[i]);
687 if (ret && f_get_automorphism_group) {
691 cout <<
"action::is_minimal_witness automorphism generators:" << endl;
692 for (i = 0; i < D.
nb_auts; i++) {
693 cout << setw(3) << i <<
" : (";
711 cout <<
"action::is_minimal_witness building up automorphism group" << endl;
715 Aut2, verbose_level - 3);
718 cout <<
"action::is_minimal_witness automorphism group in changed base "
719 "has order " << go2 << endl;
723 cout <<
"action::is_minimal_witness before Aut.init" << endl;
725 Aut.
init(
this, verbose_level - 2);
728 cout <<
"action::is_minimal_witness before K.init" << endl;
730 K.
init(
this, verbose_level - 2);
735 cout <<
"action::is_minimal_witness before Aut.build_up_group_random_process" << endl;
742 cout <<
"action::is_minimal_witness after Aut.build_up_group_random_process" << endl;
747 cout <<
"action::is_minimal_witness automorphism group has order " << go << endl;
752 cout <<
"action::is_minimal_witness freeing memory" << endl;
765 cout <<
"action::is_minimal_witness done" << endl;
#define AUTS_ALLOCATE_BLOCK_SIZE
data structure for set partitions following Jeffrey Leon
std::ostream & print(std::ostream &ost)
a collection of functions related to sorted vectors
void lint_vec_quicksort_increasingly(long int *v, int len)
int lint_vec_compare(long int *p, long int *q, int len)
int lint_vec_search(long int *v, int len, long int a, int &idx, int verbose_level)
void lint_vec_heapsort(long int *v, int len)
a class to represent arbitrary precision integers
a permutation group in a fixed action.
void build_up_automorphism_group_from_aut_data(int nb_auts, int *aut_data, groups::sims &S, int verbose_level)
void element_print(void *elt, std::ostream &ost)
long int & orbit_inv_ij(int i, int j)
void map_a_set(long int *set, long int *image_set, int n, int *Elt, int verbose_level)
void element_mult(void *a, void *b, void *ab, int verbose_level)
int image_of(void *elt, int a)
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)
int check_if_transporter_for_set(int *Elt, int size, long int *set1, long int *set2, int verbose_level)
stabilizer_chain_base_data * Stabilizer_chain
void element_one(void *elt, int verbose_level)
int & transversal_length_i(int i)
void compute_stabilizer_orbits(data_structures::partitionstack *&Staborbits, int verbose_level)
long int & orbit_ij(int i, int j)
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)
void base_change(action *old_action, int size, long int *set, int verbose_level)
void element_move(void *a, void *b, int verbose_level)
int is_minimal(int size, long int *set, int &backtrack_level, int verbose_level)
void invert(void *a, void *av)
void element_print_as_permutation(void *elt, std::ostream &ost)
void print_as_permutation(std::ostream &ost, void *elt)
a permutation group represented via a stabilizer chain
void element_from_path_inv(int *elt)
void coset_rep_inv(int *Elt, int i, int j, int verbose_level_le)
int get_orbit_inv(int i, int j)
void element_from_path(int *elt, int verbose_level)
void init(actions::action *A, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
void print_generators_as_permutations()
void init_trivial_group(int verbose_level)
void print_basic_orbits()
void build_up_group_random_process(sims *K, sims *old_G, ring_theory::longinteger_object &target_go, int f_override_choose_next_base_point, int(*choose_next_base_point_method)(actions::action *A, int *Elt, int verbose_level), int verbose_level)
#define Lint_vec_copy(A, B, C)
#define Int_vec_zero(A, B)
#define Lint_vec_print(A, B, C)
#define Int_vec_print(A, B, C)
void action_is_minimal_reallocate_aut_data(action_is_minimal_data &D)
int action_is_minimal_recursion(action_is_minimal_data *D, int depth, int verbose_level)
the orbiter library for the classification of combinatorial objects
internal class for is_minimal backtracking used by class action
data_structures::partitionstack * Staborbits
int * is_minimal_base_point
int * transporter_witness