18namespace layer5_applications {
94 int f_projective,
int f_semilinear,
95 int (*check_function_incremental)(
int len,
96 long int *S,
void *data,
int verbose_level),
97 void *check_function_incremental_data,
100 int f_v = (verbose_level >= 1);
104 cout <<
"recoordinatize::init" << endl;
125 cout <<
"recoordinatize::init n=" <<
n <<
" k=" <<
k <<
" fname_live_points=" << fname_live_points << endl;
142 cout <<
"recoordinatize::init done" << endl;
147 long int i1,
long int i2,
long int i3,
int verbose_level)
149 int f_v = (verbose_level >= 1);
155 cout <<
"recoordinatize::do_recoordinatize "
156 << i1 <<
"," << i2 <<
"," << i3 << endl;
162 cout <<
"M:" << endl;
168 cout <<
"AAv:" << endl;
174 cout <<
"N:" << endl;
178 for (i = 0; i <
k; i++) {
179 for (j = 0; j <
k; j++) {
180 TT[i *
k + j] =
N[2 *
k *
n + i *
n + j];
184 cout <<
"TT:" << endl;
189 cout <<
"TTv:" << endl;
194 for (i = 0; i <
k; i++) {
195 for (j = 0; j <
k; j++) {
196 B[i *
n + j] =
TTv[i *
k + j];
199 for (i = 0; i <
k; i++) {
200 for (j = 0; j <
k; j++) {
201 TT[i *
k + j] =
N[2 *
k *
n + i *
n +
k + j];
205 cout <<
"TT:" << endl;
210 cout <<
"TTv:" << endl;
213 for (i = 0; i <
k; i++) {
214 for (j = 0; j <
k; j++) {
215 B[(
k + i) *
n +
k + j] =
TTv[i *
k + j];
219 cout <<
"B:" << endl;
227 cout <<
"C:" << endl;
233 cout <<
"M1:" << endl;
241 cout <<
"j1=" << j1 <<
" j2=" << j2 <<
" j3=" << j3 << endl;
246 cout <<
"recoordinatize::do_recoordinatize "
247 "transporter:" << endl;
251 cout <<
"recoordinatize::do_recoordinatize done" << endl;
258 int f_v = (verbose_level >= 1);
262 cout <<
"recoordinatize::compute_starter" << endl;
263 cout <<
"verbose_level = " << verbose_level << endl;
269 cout <<
"recoordinatize::compute_starter before make_first_three" << endl;
273 cout <<
"recoordinatize::compute_starter after make_first_three" << endl;
286 cout <<
"recoordinatize::compute_starter "
287 "before stabilizer_of_first_three" << endl;
291 cout <<
"recoordinatize::compute_starter "
292 "after stabilizer_of_first_three" << endl;
299 cout <<
"recoordinatize::compute_starter "
300 "before compute_live_points" << endl;
304 cout <<
"recoordinatize::compute_starter "
305 "after compute_live_points" << endl;
310 cout <<
"recoordinatize::compute_starter finished" << endl;
319 int f_v = (verbose_level >= 1);
326 cout <<
"recoordinatize::stabilizer_of_first_three" << endl;
337 cout <<
"recoordinatize::stabilizer_of_first_three "
338 "before A0->init_matrix_group" << endl;
349 cout <<
"recoordinatize::stabilizer_of_first_three "
350 "target_go=" << target_go
351 <<
" = order of PGGL(" <<
k <<
"," <<
q <<
")" << endl;
352 cout <<
"action A0 created: ";
365 cout <<
"recoordinatize::stabilizer_of_first_three "
366 "order of PGL(" <<
k <<
"," <<
q <<
") is "
367 << go_linear << endl;
368 cout <<
"action A0_linear created: ";
375 six.
create(6, __FILE__, __LINE__);
376 D.
mult(target_go, six, target_go2);
378 cout <<
"recoordinatize::stabilizer_of_first_three "
379 "target_go2=" << target_go2
380 <<
" = target_go times 6" << endl;
389 cout <<
"recoordinatize::stabilizer_of_first_three "
390 "before make_generators_stabilizer_of_three_components" << endl;
398 k,
gens2, verbose_level - 1);
401 cout <<
"recoordinatize::stabilizer_of_first_three "
402 "after make_generators_stabilizer_of_three_components" << endl;
407 cout <<
"recoordinatize::stabilizer_of_first_three "
408 "before generators_to_strong_generators" << endl;
414 gens2, Strong_gens, verbose_level - 1);
418 cout <<
"recoordinatize::stabilizer_of_first_three "
426 int f_v = (verbose_level >= 1);
429 cout <<
"recoordinatize::compute_live_points" << endl;
437 int f_path_select =
TRUE;
442 len = i_power_j(Fq->q, Mtx->n) - 1;
443 for (select_value = 1; select_value < len; select_value++) {
445 sprintf(fname,
"live_points_%d.txt", select_value);
448 sprintf(fname,
"live_points.txt");
450 if (file_size(fname) > 1) {
451 cout <<
"reading live points from file "
453 read_set_from_file(fname,
455 cout <<
"reading live points from file "
456 << fname <<
" done" << endl;
464 cout <<
"recoordinatize::compute_live_points "
465 "checking all " << gos * Fq->q
466 <<
" elements in GL(" <<
k <<
"," <<
q <<
")" << endl;
467 cout <<
"order of PGL(" <<
k <<
"," <<
q <<
")=" << gos << endl;
478 Mtx->matrices_without_eigenvector_one(
480 f_path_select, select_value, verbose_level);
488 if (Fio.file_size(fname_live_points) > 1) {
490 cout <<
"recoordinatize::compute_live_points "
491 "reading live points from file " << fname_live_points << endl;
493 Fio.read_set_from_file(fname_live_points,
496 cout <<
"recoordinatize::compute_live_points "
503 cout <<
"recoordinatize::compute_live_points "
504 "before compute_live_points_low_level" << endl;
509 cout <<
"recoordinatize::compute_live_points "
510 "after compute_live_points_low_level" << endl;
514 cout <<
"recoordinatize::compute_live_points "
515 "before Fio.write_set_to_file" << endl;
517 Fio.write_set_to_file(fname_live_points,
520 cout <<
"recoordinatize::compute_live_points "
521 "written file " << fname_live_points << endl;
526 cout <<
"recoordinatize::compute_live_points "
527 "before compute_live_points_low_level" << endl;
532 cout <<
"recoordinatize::compute_live_points "
533 "after compute_live_points_low_level" << endl;
539 sprintf(fname,
"live_points.txt");
540 if (file_size(fname) > 1) {
541 cout <<
"reading live points from file " << fname << endl;
543 cout <<
"reading live points from file " << fname <<
" done" << endl;
548 cout <<
"recoordinatize::compute_live_points "
549 "before Mtx->matrices_without_eigenvector_one" << endl;
551 Mtx->matrices_without_eigenvector_one(
553 FALSE , 0 , verbose_level);
556 cout <<
"recoordinatize::compute_live_points "
557 "after Mtx->matrices_without_eigenvector_one" << endl;
562 write_set_to_file(fname,
565 cout <<
"recoordinatize::compute_live_points "
566 "written file " << fname << endl;
576 cout <<
"live point " << h <<
" is point " <<
live_points[h] <<
":" << endl;
580 for (i = 0; i <
k; i++) {
581 for (j = 0; j <
k; j++) {
582 Elt1[i *
k + j] =
Grass->
M[i *
n +
k + j];
586 cout <<
"rank in A0 is " << a << endl;
591 cout <<
"they are:" << endl;
593 cout << setw(5) << i <<
" : " << setw(10) <<
live_points[i] << endl;
598 cout <<
"recoordinatize::compute_live_points done" << endl;
605 int f_v = (verbose_level >= 1);
606 int f_vv = (verbose_level >= 2);
622 cout <<
"recoordinatize::compute_live_points_low_level" << endl;
637 cout <<
"recoordinatize::compute_live_points_low_level "
638 "nCkq = " <<
nCkq << endl;
647 for (h = 0; h < gos; h++) {
648 for (z = 1; z <
q; z++, cnt++) {
650 if ((cnt % cnt_mod) == 0 && cnt) {
651 cout <<
"recoordinatize::compute_live_points_low_level"
652 << cnt <<
" iterations, h=" << h <<
" found "
658 if (f_vv && (cnt % cnt_mod) == 0 && cnt) {
659 cout <<
"recoordinatize::compute_live_points_low_level "
660 "element " << cnt <<
" = " << h
661 <<
", normalized:" << endl;
664 for (i = 0; i <
k *
k; i++) {
665 Elt1[i] = Fq->
mult(Elt1[i], z);
667 if (f_v && (cnt % cnt_mod) == 0 && cnt) {
668 cout <<
"recoordinatize::compute_live_points_low_level "
669 "element " << cnt <<
" = " << h
670 <<
", multiplied by z=" << z <<
":" << endl;
677 for (i = 0; i <
k; i++) {
680 for (i = 0; i <
k; i++) {
681 for (j = 0; j <
k; j++) {
682 Grass->
M[i *
n +
k + j] = Elt1[i *
k + j];
685 if (f_vv && (cnt % cnt_mod) == 0) {
686 cout <<
"recoordinatize::compute_live_points_low_level "
687 "element " << h <<
":" << endl;
690 if (
FALSE || ((h & ((1 << 15) - 1)) == 0 && z == 1)) {
691 cout << h <<
" / " << gos
697 if (f_vv && (cnt % cnt_mod) == 0 && cnt) {
698 cout <<
"has rank " << a << endl;
703 if (f_vv && (cnt % cnt_mod) == 0 && cnt) {
704 cout <<
"recoordinatize::compute_live_points_low_level "
705 "element " << cnt <<
" = " << h <<
", "
706 << z <<
" subspace rank " << a
707 <<
" is accepted as live point no "
713 if (f_vv && (cnt % cnt_mod) == 0) {
714 cout <<
"recoordinatize::compute_live_points_low_level "
715 "element " << cnt <<
" = " << h <<
", "
716 << z <<
" subspace rank " << a
717 <<
" is not accepted" << endl;
725 cout <<
"recoordinatize::compute_live_points_low_level "
729 cout <<
"recoordinatize::compute_live_points_low_level "
735 cout <<
"recoordinatize::compute_live_points_low_level done" << endl;
740 long int &j1,
long int &j2,
long int &j3,
int verbose_level)
742 int f_v = (verbose_level >= 1);
745 cout <<
"recoordinatize::make_first_three" << endl;
754 cout <<
"recoordinatize::make_first_three j1=" << j1 <<
" j2=" << j2 <<
" j3=" << j3 << endl;
758 cout <<
"recoordinatize::make_first_three done" << endl;
a collection of combinatorial functions
long int generalized_binomial(int n, int k, int q)
a collection of functions related to sorted vectors
void lint_vec_heapsort(long int *v, int len)
void PG_element_normalize(int *v, int stride, int len)
linear_algebra::linear_algebra * Linear_algebra
to rank and unrank subspaces of a fixed dimension in F_q^n
long int make_special_element_infinity(int verbose_level)
long int make_special_element_one(int verbose_level)
long int rank_lint_here(int *Mtx, int verbose_level)
long int rank_lint(int verbose_level)
void unrank_lint_here(int *Mtx, long int rk, int verbose_level)
long int make_special_element_zero(int verbose_level)
void mult_matrix_matrix(int *A, int *B, int *C, int m, int n, int o, int verbose_level)
void matrix_inverse(int *A, int *Ainv, int n, int verbose_level)
domain to compute with objects of type longinteger
void mult(longinteger_object &a, longinteger_object &b, longinteger_object &c)
a class to represent arbitrary precision integers
void create(long int i, const char *file, int line)
global functions related to group actions
void make_generators_stabilizer_of_three_components(action *A_PGL_n_q, action *A_PGL_k_q, int k, data_structures_groups::vector_ge *gens, int verbose_level)
a permutation group in a fixed action.
void element_print(void *elt, std::ostream &ost)
void init_projective_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 group_order(ring_theory::longinteger_object &go)
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)
to hold a vector of group elements
void init(actions::action *A, int verbose_level)
a matrix group over a finite field in projective, vector space or affine action
field_theory::finite_field * GFq
void element_unrank_lint(long int rk, int *Elt, int verbose_level)
a strong generating set for a permutation group with respect to a fixed action
void do_recoordinatize(long int i1, long int i2, long int i3, int verbose_level)
void compute_starter(long int *&S, int &size, groups::strong_generators *&Strong_gens, int verbose_level)
actions::action * A0_linear
int(* check_function_incremental)(int len, long int *S, void *check_function_incremental_data, int verbose_level)
void * check_function_incremental_data
void stabilizer_of_first_three(groups::strong_generators *&Strong_gens, int verbose_level)
geometry::grassmann * Grass
void compute_live_points_low_level(long int *&live_points, int &nb_live_points, int verbose_level)
void make_first_three(long int &j1, long int &j2, long int &j3, int verbose_level)
void compute_live_points(int verbose_level)
data_structures_groups::vector_ge * gens2
void init(int n, int k, field_theory::finite_field *F, geometry::grassmann *Grass, actions::action *A, actions::action *A2, int f_projective, int f_semilinear, int(*check_function_incremental)(int len, long int *S, void *data, int verbose_level), void *check_function_incremental_data, int verbose_level)
field_theory::finite_field * F
#define Int_vec_zero(A, B)
#define Int_vec_print_integer_matrix_width(A, B, C, D, E, F)
#define Int_vec_copy(A, B, C)
the orbiter library for the classification of combinatorial objects
groups::matrix_group * matrix_grp