Orbiter 2022
Combinatorial Objects
translation_plane_via_andre_model.cpp
Go to the documentation of this file.
1// translation_plane_via_andre_model.cpp
2//
3// Anton Betten
4// June 2, 2013
5//
6//
7//
8//
9//
10
11#include "orbiter.h"
12
13using namespace std;
14
15
16namespace orbiter {
17namespace layer5_applications {
18namespace spreads {
19
20
21#if 0
22static int translation_plane_via_andre_model_check_arc(int len, long int *S,
23 void *data, int verbose_level);
24static int translation_plane_via_andre_model_check_subplane(int len, long int *S,
25 void *data, int verbose_level);
26#endif
27
28
30{
31 F = NULL;
32 q = k = n = k1 = n1 = 0;
33 Andre = NULL;
34 N = 0;
35 twoN = 0;
37 Line = NULL;
38 Incma = NULL;
39 pts_on_line = NULL;
41 Line_intersection = NULL;
42 An = NULL;
43 An1 = NULL;
44 OnAndre = NULL;
45 strong_gens = NULL;
46 Inc = NULL;
47 Stack = NULL;
48 Control = NULL;
49 Poset = NULL;
50 arcs = NULL;
51 T = NULL;
52 //null();
53}
54
56{
57 freeself();
58}
59
61{
62}
63
65{
66 if (Andre) {
68 }
69 if (Line) {
71 }
72 if (Incma) {
74 }
75 if (pts_on_line) {
77 }
80 }
83 }
84#if 0
85 if (An) {
87 }
88 if (An1) {
90 }
91#endif
92 if (OnAndre) {
94 }
95 if (strong_gens) {
97 }
98 if (Inc) {
100 }
101 if (Stack) {
103 }
104 if (Poset) {
106 }
107 if (arcs) {
109 }
110 null();
111}
112
113
115 long int *spread_elements_numeric,
116 int k, actions::action *An, actions::action *An1,
117 data_structures_groups::vector_ge *spread_stab_gens,
118 ring_theory::longinteger_object &spread_stab_go,
119 std::string &label,
120 int verbose_level)
121{
122 int f_v = (verbose_level >= 1);
123 //int f_vv = (verbose_level >= 2);
124 //int f_v4 = (verbose_level >= 6);
125 int f_v10 = (verbose_level >= 10);
126 int i, j, h, u, v, i1, i2, j1, j2;
128
129 if (f_v) {
130 cout << "translation_plane_via_andre_model::init" << endl;
131 cout << "translation_plane_via_andre_model::init "
132 "verbose_level=" << verbose_level << endl;
133 }
134
136
137 //translation_plane_via_andre_model::F = F;
139 if (An1->matrix_group_finite_field()->q != F->q) {
140 cout << "translation_plane_via_andre_model::init "
141 "The finite fields must have the same order" << endl;
142 exit(1);
143 }
146 if (f_v) {
147 cout << "translation_plane_via_andre_model::init "
148 "q=" << q << endl;
149 cout << "translation_plane_via_andre_model::init "
150 "k=" << k << endl;
151 }
152 n = 2 * k;
153 n1 = n + 1;
154 k1 = k + 1;
155
157
158 if (f_v) {
159 cout << "translation_plane_via_andre_model::init "
160 "spread_elements_numeric:" << endl;
161 Lint_vec_print(cout, spread_elements_numeric,
162 NT.i_power_j(q, k) + 1);
163 cout << endl;
164 }
165
166 Andre->init(F, k, spread_elements_numeric, verbose_level - 2);
167
168 N = Andre->N;
169 twoN = 2 * N;
170
171 if (f_v) {
172 cout << "translation_plane_via_andre_model::init "
173 "N=" << N << endl;
174 cout << "translation_plane_via_andre_model::init "
175 "Andre->spread_size=" << Andre->spread_size << endl;
176 }
177
178
179
181 Incma = NEW_int(N * N);
183
184 for (i = 0; i < N * N; i++) {
185 Incma[i] = 0;
186 }
187 if (f_v) {
188 cout << "translation_plane_via_andre_model::init "
189 "computing incidence matrix:" << endl;
190 }
191
192 Line->init(Andre, verbose_level);
193
194 for (j = 0; j < N; j++) {
195 if (f_v10) {
196 cout << "translation_plane_via_andre_model::init "
197 "before Line->unrank j=" << j << endl;
198 }
199 Line->unrank(j, 0 /*verbose_level*/);
201 pts_on_line, 0 /* verbose_level */);
202 if (f_v10) {
203 cout << "translation_plane_via_andre_model::init "
204 "Line_" << j << "=";
206 cout << endl;
207 }
208 for (h = 0; h < Andre->order + 1; h++) {
209 i = pts_on_line[h];
210 if (i >= N) {
211 cout << "translation_plane_via_andre_model::init "
212 "i >= N" << endl;
213 exit(1);
214 }
215 Incma[i * N + j] = 1;
216 }
217 }
218
219
220
221 if (f_v) {
222 cout << "translation_plane_via_andre_model::init "
223 "Incidence matrix of the translation plane "
224 "has been computed" << endl;
225 }
226
227
228 string fname;
230
231 fname.assign(label);
232 fname.append("_incma.csv");
233 Fio.int_matrix_write_csv(fname, Incma, N, N);
234 if (f_v) {
235 cout << "translation_plane_via_andre_model::init "
236 "written file " << fname << " of size " << Fio.file_size(fname) << endl;
237 }
238
239
241 for (i = 0; i < N * N; i++) {
243 }
244 for (j = 0; j < N; j++) {
245 Line->unrank(j, 0 /*verbose_level*/);
247 pts_on_line, 0 /* verbose_level */);
248 for (u = 0; u < Andre->order + 1; u++) {
249 i1 = pts_on_line[u];
250 for (v = u + 1; v < Andre->order + 1; v++) {
251 i2 = pts_on_line[v];
252 Line_through_two_points[i1 * N + i2] = j;
253 Line_through_two_points[i2 * N + i1] = j;
254 }
255 }
256 }
258 for (i = 0; i < N * N; i++) {
259 Line_intersection[i] = -1;
260 }
261 for (i = 0; i < N; i++) {
262 for (j1 = 0; j1 < N; j1++) {
263 if (Incma[i * N + j1] == 0) {
264 continue;
265 }
266 for (j2 = j1 + 1; j2 < N; j2++) {
267 if (Incma[i * N + j2] == 0) {
268 continue;
269 }
270 Line_intersection[j1 * N + j2] = i;
271 Line_intersection[j2 * N + j1] = i;
272 }
273 }
274 }
275
276
277 //int_matrix_print(Incma, N, N);
278
279 //exit(1);
280
281#if 0
282 int *Adj;
283
284 Adj = NEW_int(twoN * twoN);
285 for (i = 0; i < twoN * twoN; i++) {
286 Adj[i] = 0;
287 }
288 for (i = 0; i < N; i++) {
289 for (j = 0; j < N; j++) {
290 if (Incma[i * N + j]) {
291 Adj[i * twoN + N + j] = 1;
292 Adj[(N + j) * twoN + i] = 1;
293 }
294 }
295 }
296
297
298 if (f_v) {
299 cout << "translation_plane_via_andre_model::init "
300 "Adjacency matrix of incidence matrix has "
301 "been computed" << endl;
302 //int_matrix_print(Adj, twoN, twoN);
303 }
304
305
306 //exit(1);
307
308
309 action *Aut;
310 int parts[3];
311 int nb_parts;
312 int *labeling;
313 longinteger_object ago;
314
315 labeling = NEW_int(2 * twoN);
316
317 parts[0] = N;
318 parts[1] = 1;
319 parts[2] = N - 1;
320 nb_parts = 3;
321 cout << "translation_plane_via_andre_model::init "
322 "computing automorphism group of graph" << endl;
323 Aut = create_automorphism_group_of_graph_with_partition_and_labeling(
324 twoN, Adj,
325 nb_parts, parts,
326 labeling,
327 0 /*verbose_level*/);
328
329 Aut->group_order(ago);
330
331 cout << "translation_plane_via_andre_model::init "
332 "Automorphism group order = " << ago << endl;
333#endif
334
335 int f_combined_action = TRUE;
336 //int f_write_tda_files = TRUE;
337 //int f_include_group_order = TRUE;
338 //int f_pic = FALSE;
339 //int f_include_tda_scheme = TRUE;
340 int nb_rows = N;
341 int nb_cols = N;
342
343
345
346 Inc->init_by_matrix(nb_rows, nb_cols,
347 Incma, verbose_level - 2);
348 if (f_v) {
349 cout << "translation_plane_via_andre_model::init "
350 "after Inc->init_by_matrix" << endl;
351 }
352
355
358 if (An1->matrix_group_dimension() != n + 1) {
359 cout << "dim An1 != dim An + 1" << endl;
360 cout << "dim An = " << n << endl;
361 cout << "dim An1 = " << An1->matrix_group_dimension() << endl;
362 exit(1);
363 }
364
365
366#if 0
367 int f_basis = FALSE;
368 vector_ge *nice_gens;
369
370
371
373 if (!NT.is_prime(q)) {
375 }
376
377 if (f_v) {
378 cout << "translation_plane_via_andre_model::init "
379 "initializing action An" << endl;
380 }
381 An = NEW_OBJECT(action);
383 f_basis, TRUE /* f_init_sims */,
384 nice_gens,
385 0 /* verbose_level */);
386 FREE_OBJECT(nice_gens);
387
388 if (f_v) {
389 cout << "translation_plane_via_andre_model::init "
390 "initializing action An1" << endl;
391 }
392 An1 = NEW_OBJECT(action);
394 f_basis, TRUE /* f_init_sims */,
395 nice_gens,
396 0 /*verbose_level */);
397 FREE_OBJECT(nice_gens);
398#endif
399
400 if (f_v) {
401 cout << "translation_plane_via_andre_model::init "
402 "initializing OnAndre" << endl;
403 }
404
405
407 OnAndre->induced_action_on_andre(An, An1, Andre, verbose_level);
408
409
411
412
413 if (f_v) {
414 cout << "translation_plane_via_andre_model::init "
415 "initializing spread stabilizer" << endl;
416 }
417
419 An1, An,
421 spread_stab_gens, spread_stab_go,
422 verbose_level);
423
424 if (f_v) {
425 cout << "translation_plane_via_andre_model::init "
426 "initializing spread stabilizer" << endl;
427 }
428
429
431
432 strong_gens->group_order(stab_go);
433
434 if (f_v) {
435 cout << "translation_plane_via_andre_model::init "
436 "Stabilizer has order " << stab_go << endl;
437 cout << "translation_plane_via_andre_model::init "
438 "we will now compute the tactical decomposition "
439 "induced by the spread stabilizer" << endl;
440 }
441
442
443
445 T->init(nb_rows, nb_cols,
446 Inc,
447 f_combined_action,
448 OnAndre /* Aut */,
449 NULL /* A_on_points */,
450 NULL /*A_on_lines*/,
451 strong_gens /* Aut->strong_generators*/,
452 verbose_level - 1);
453
454#if 0
455 int set_size = nb_rows;
456 int nb_blocks = nb_cols;
457
458 Stack = NEW_OBJECT(partitionstack);
459 Stack->allocate(set_size + nb_blocks, 0 /* verbose_level */);
460 Stack->subset_continguous(set_size, nb_blocks);
461 Stack->split_cell(0 /* verbose_level */);
462 Stack->sort_cells();
463
464
465
466 incidence_structure_compute_TDA_general(*Stack,
467 Inc,
468 f_combined_action,
469 OnAndre /* Aut */,
470 NULL /* A_on_points */,
471 NULL /*A_on_lines*/,
472 strong_gens->gens /* Aut->strong_generators*/,
473 f_write_tda_files,
474 f_include_group_order,
475 f_pic,
476 f_include_tda_scheme,
477 verbose_level - 4);
478
479
480
481
482 if (f_vv) {
483 cout << "translation_plane_via_andre_model::init "
484 "Row-scheme:" << endl;
486 cout, FALSE /* f_enter_math */,
487 TRUE /* f_print_subscripts */, *Stack);
488 cout << "translation_plane_via_andre_model::init "
489 "Col-scheme:" << endl;
491 cout, FALSE /* f_enter_math */,
492 TRUE /* f_print_subscripts */, *Stack);
493 }
494#endif
495 //FREE_OBJECT(T);
496
497 if (f_v) {
498 cout << "translation_plane_via_andre_model::init done" << endl;
499 }
500}
501
502
504 const char *prefix, int depth, int verbose_level)
505{
506 int f_v = (verbose_level >= 1);
508 int t0 = Os.os_ticks();
509 //char fname_base[1000];
510
511 if (f_v) {
512 cout << "translation_plane_via_andre_model::classify_arcs" << endl;
513 }
514
516
517 //gen->read_arguments(argc, argv, 0);
518
519 //arcs->depth = depth;
520
521 //sprintf(fname_base, "%sarcs", prefix);
522
523 if (f_v) {
524 cout << "translation_plane_via_andre_model::"
525 "classify_arcs "
526 "before gen->initialize" << endl;
527 }
528
530
531 Control->f_w = TRUE;
533 Control->depth = depth;
534
538 verbose_level);
540 depth,
541 //prefix, "arcs",
542 verbose_level - 1);
543
544
545#if 0
546 // ToDo
547 arcs->init_check_func(translation_plane_via_andre_model_check_arc,
548 (void *)this /* candidate_check_data */);
549#endif
550
551
552
553#if 0
554 arcs->f_print_function = TRUE;
555 arcs->print_function = print_arc;
556 arcs->print_function_data = this;
557#endif
558
559#if 0
560 if (arcs->f_extend) {
561 do_extend(verbose_level, arcs->verbose_level_group_theory);
562 time_check(cout, t0);
563 cout << endl;
564 exit(0);
565 }
566#endif
567
568 int schreier_depth = 1000;
569 int f_use_invariant_subset_if_available = TRUE;
570 int f_debug = FALSE;
571 //int f_implicit_fusion = FALSE;
572
573
574 if (f_v) {
575 cout << "translation_plane_via_andre_model::classify_arcs "
576 "before generator_main" << endl;
577 }
578
579 arcs->main(t0,
580 schreier_depth,
581 f_use_invariant_subset_if_available,
582 f_debug,
583 verbose_level);
584
585
587
588
589#if 0
590 char prefix_iso[1000];
591 char cmd[1000];
592
593 sprintf(prefix_iso, "ISO/");
594 sprintf(cmd, "mkdir %s", prefix_iso);
595 system(cmd);
596
597 if (f_v) {
598 cout << "translation_plane_via_andre_model::classify_arcs "
599 "before isomorph_build_db" << endl;
600 }
601
602 isomorph_build_db(An1, OnAndre, arcs,
603 depth,
604 arcs->fname_base, prefix_iso,
605 depth, verbose_level);
606
607#endif
608
609 if (f_v) {
610 cout << "translation_plane_via_andre_model::classify_arcs done" << endl;
611 }
612
613}
614
616 const char *prefix, int verbose_level)
617{
618 int f_v = (verbose_level >= 1);
620 int t0 = Os.os_ticks();
621 int depth = 7;
622 //char fname_base[1000];
623
624 if (f_v) {
625 cout << "translation_plane_via_andre_model::classify_subplanes" << endl;
626 }
627
628
629 if (f_v) {
630 cout << "translation_plane_via_andre_model::classify_subplanes "
631 "before gen->initialize" << endl;
632 }
633
635
636 Control->f_w = TRUE;
638 Control->depth = depth;
639
643 verbose_level);
644
646
648 depth,
649 //prefix, "subplanes",
650 verbose_level - 1);
651
652
653#if 0
654 // ToDo
655 arcs->init_check_func(
656 translation_plane_via_andre_model_check_subplane,
657 (void *)this /* candidate_check_data */);
658#endif
659
660
661
662#if 0
663 arcs->f_print_function = TRUE;
664 arcs->print_function = print_arc;
665 arcs->print_function_data = this;
666#endif
667
668#if 0
669 if (arcs->f_extend) {
670 do_extend(verbose_level,
671 arcs->verbose_level_group_theory);
672 time_check(cout, t0);
673 cout << endl;
674 exit(0);
675 }
676#endif
677
678 int schreier_depth = 1000;
679 int f_use_invariant_subset_if_available = TRUE;
680 int f_debug = FALSE;
681 //int f_implicit_fusion = FALSE;
682
683
684 if (f_v) {
685 cout << "translation_plane_via_andre_model::classify_subplanes "
686 "before generator_main" << endl;
687 }
688
689 arcs->main(t0,
690 schreier_depth,
691 f_use_invariant_subset_if_available,
692 //f_implicit_fusion,
693 f_debug,
694 verbose_level - 2);
695
696
698
699
700#if 0
701 char prefix_iso[1000];
702 char cmd[1000];
703
704 sprintf(prefix_iso, "ISO/");
705 sprintf(cmd, "mkdir %s", prefix_iso);
706 system(cmd);
707
708 if (f_v) {
709 cout << "translation_plane_via_andre_model::"
710 "classify_arcs before isomorph_build_db" << endl;
711 }
712
713 isomorph_build_db(An1, OnAndre, arcs,
714 depth,
715 arcs->fname_base, prefix_iso,
716 depth, verbose_level);
717
718#endif
719
720 if (f_v) {
721 cout << "translation_plane_via_andre_model::classify_subplanes done" << endl;
722 }
723
724}
725
727 long int *S, int len, int verbose_level)
728{
729 int f_v = (verbose_level >= 1);
730 int f_vv = (verbose_level >= 2);
731 int ret = TRUE;
732 int i, j, h, a, b, c, l;
733
734 if (f_v) {
735 cout << "translation_plane_via_andre_model::check_arc" << endl;
736 }
737 if (f_vv) {
738 cout << "translation_plane_via_andre_model::"
739 "check_arc the set is";
740 Lint_vec_print(cout, S, len);
741 cout << endl;
742 }
743 for (i = 0; i < len; i++) {
744 if (/*S[i] < Andre->spread_size ||*/ S[i] >= N) {
745 ret = FALSE;
746 goto finish;
747 }
748 }
749 if (len >= 3) {
750 for (i = 0; i < len; i++) {
751 a = S[i];
752 for (j = i + 1; j < len; j++) {
753 b = S[j];
754 l = Line_through_two_points[a * N + b];
755 for (h = 0; h < len; h++) {
756 if (h == i) {
757 continue;
758 }
759 if (h == j) {
760 continue;
761 }
762 c = S[h];
763 if (Incma[c * N + l]) {
764 ret = FALSE;
765 goto finish;
766 }
767 }
768 }
769 }
770 }
771
772finish:
773 if (f_v) {
774 cout << "translation_plane_via_andre_model::check_arc done ret=" << ret << endl;
775 }
776 return ret;
777}
778
780 long int *S, int len, int verbose_level)
781{
782 int f_v = (verbose_level >= 1);
783 int f_vv = (verbose_level >= 2);
784 int ret = TRUE;
785 int len2;
786 int i, j, h, a, b, c, l;
787 int *L;
788
789 if (f_v) {
790 cout << "translation_plane_via_andre_model::check_subplane" << endl;
791 }
792 if (f_vv) {
793 cout << "translation_plane_via_andre_model::"
794 "check_subplane the set is";
795 Lint_vec_print(cout, S, len);
796 cout << endl;
797 }
798
799
800 if (len >= 2) {
801 len2 = (len * (len - 1)) >> 1;
802 }
803 else {
804 len2 = 1;
805 }
806 L = NEW_int(len2); // bad! No memory stuff in a test function
807
808
809 for (i = 0; i < len; i++) {
810 a = S[i];
811 for (j = i + 1; j < len; j++) {
812 b = S[j];
813 if (a == b) {
814 ret = FALSE;
815 goto finish;
816 }
817 }
818 }
819
820 for (i = 0; i < len; i++) {
821 if (/*S[i] < Andre->spread_size ||*/ S[i] >= N) {
822 ret = FALSE;
823 goto finish;
824 }
825 }
826 if (len >= 3) {
827
828 // compute all secants:
829
830 h = 0;
831 for (i = 0; i < len; i++) {
832 a = S[i];
833 for (j = i + 1; j < len; j++) {
834 b = S[j];
835 if (a == b) {
836 cout << "translation_plane_via_andre_model::"
837 "check_subplane a == b" << endl;
838 exit(1);
839 }
840 c = Line_through_two_points[a * N + b];
841 L[h] = c;
842 if (f_vv) {
843 cout << "Line through point " << a
844 << " and point " << b << " is " << c << endl;
845 }
846 h++;
847 }
848 }
849 if (h != len2) {
850 cout << "translation_plane_via_andre_model::"
851 "check_subplane h != len2" << endl;
852 exit(1);
853 }
855
856 C.init(L, len2, FALSE, 0);
857
858 // check if no more than 7 lines:
859 if (C.nb_types > 7) {
860 if (f_v) {
861 cout << "The set determines too many lines, "
862 "namely " << C.nb_types << endl;
863 }
864 ret = FALSE;
865 goto finish;
866 }
867 //check if no more than three points per line:
868 for (i = 0; i < C.nb_types; i++) {
869 l = C.type_len[i];
870 if (l > 3) {
871 if (f_v) {
872 cout << "The set contains 4 collinear points" << endl;
873 }
874 ret = FALSE;
875 goto finish;
876 }
877 }
878 }
879
880finish:
881 FREE_int(L);
882 if (f_v) {
883 cout << "translation_plane_via_andre_model::check_subplane done ret=" << ret << endl;
884 }
885 return ret;
886}
887
889 long int *S, int *subplane7, int verbose_level)
890{
891 int f_v = (verbose_level >= 1);
892 int f_vv = (verbose_level >= 2);
893 int ret = TRUE;
894 int i, j, h, a, b, l[6], d1, d2, d3, dl;
895
896 if (f_v) {
897 cout << "translation_plane_via_andre_model::check_if_quadrangle_defines_a_subplane" << endl;
898 }
899 if (f_vv) {
900 cout << "translation_plane_via_andre_model::check_if_quadrangle_defines_a_subplane the set is";
901 Lint_vec_print(cout, S, 4);
902 cout << endl;
903 }
904 h = 0;
905 for (i = 0; i < 4; i++) {
906 a = S[i];
907 for (j = i + 1; j < 4; j++) {
908 b = S[j];
909 l[h] = Line_through_two_points[a * N + b];
910 h++;
911 }
912 }
913 if (h != 6) {
914 cout << "translation_plane_via_andre_model::check_if_quadrangle_defines_a_subplane" << endl;
915 exit(1);
916 }
917 d1 = Line_intersection[l[0] * N + l[5]];
918 d2 = Line_intersection[l[1] * N + l[4]];
919 d3 = Line_intersection[l[2] * N + l[3]];
920 dl = Line_through_two_points[d1 * N + d2];
921 if (Incma[d3 * N + dl]) {
922 ret = TRUE;
923 for (i = 0; i < 4; i++) {
924 subplane7[i] = S[i];
925 }
926 subplane7[4] = d1;
927 subplane7[5] = d2;
928 subplane7[6] = d3;
929 }
930 else {
931 ret = FALSE;
932 }
933
934//finish:
935 if (f_v) {
936 cout << "translation_plane_via_andre_model::check_if_quadrangle_defines_a_subplane "
937 "done ret=" << ret << endl;
938 }
939 return ret;
940}
941
942
944{
945 int f_v = (verbose_level >= 1);
946
947
948 if (f_v) {
949 cout << "translation_plane_via_andre_model::create_latex_report" << endl;
950 }
951
952 {
953 char str[1000];
954 string fname;
955 char title[1000];
956 char author[1000];
957
958 snprintf(str, 1000, "%s_report.tex", label.c_str());
959 fname.assign(str);
960 snprintf(title, 1000, "Translation plane %s", label.c_str());
961 //strcpy(author, "");
962 author[0] = 0;
963
964
965 {
966 ofstream ost(fname);
968
969 L.head(ost,
970 FALSE /* f_book*/,
971 TRUE /* f_title */,
972 title, author,
973 FALSE /* f_toc */,
974 FALSE /* f_landscape */,
975 TRUE /* f_12pt */,
976 TRUE /* f_enlarged_page */,
977 TRUE /* f_pagenumbers */,
978 NULL /* extra_praeamble */);
979
980
981 if (f_v) {
982 cout << "translation_plane_via_andre_model::create_latex_report before report" << endl;
983 }
984 report(ost, verbose_level);
985 if (f_v) {
986 cout << "translation_plane_via_andre_model::create_latex_report after report" << endl;
987 }
988
989
990 L.foot(ost);
991
992 }
994
995 cout << "written file " << fname << " of size "
996 << Fio.file_size(fname) << endl;
997 }
998
999 if (f_v) {
1000 cout << "translation_plane_via_andre_model::create_latex_report done" << endl;
1001 }
1002}
1003
1004void translation_plane_via_andre_model::report(std::ostream &ost, int verbose_level)
1005{
1006 int f_v = (verbose_level >= 1);
1007
1008 if (f_v) {
1009 cout << "translation_plane_via_andre_model::report" << endl;
1010 }
1011
1012
1013 Andre->report(ost, verbose_level);
1014
1015 ost << "Automorphism group:\\\\" << endl;
1016
1017 ost << "{\\small\\arraycolsep=2pt" << endl;
1019 ost << "}" << endl;
1020
1021 T->report(TRUE /* f_enter_math */, ost);
1022
1023 if (f_v) {
1024 cout << "translation_plane_via_andre_model::report done" << endl;
1025 }
1026}
1027
1028
1029
1030
1031//
1032//
1033//
1034
1035#if 0
1036static int translation_plane_via_andre_model_check_arc(
1037 int len, long int *S, void *data, int verbose_level)
1038{
1041 int f_OK;
1042 int f_v = FALSE; //(verbose_level >= 1);
1043
1044 if (f_v) {
1045 cout << "translation_plane_via_andre_model_check_arc "
1046 "checking set ";
1047 Lint_vec_print(cout, S, len);
1048 cout << endl;
1049 }
1050 f_OK = TP->check_arc(S, len, 0 /*verbose_level - 1*/);
1051 if (f_OK) {
1052 if (f_v) {
1053 cout << "accepted" << endl;
1054 }
1055 return TRUE;
1056 }
1057 else {
1058 if (f_v) {
1059 cout << "rejected" << endl;
1060 }
1061 return FALSE;
1062 }
1063}
1064
1065static int translation_plane_via_andre_model_check_subplane(
1066 int len, long int *S, void *data,
1067 int verbose_level)
1068{
1069 translation_plane_via_andre_model *TP =
1070 (translation_plane_via_andre_model *) data;
1071 int f_OK;
1072 int f_v = (verbose_level >= 1);
1073
1074 if (f_v) {
1075 cout << "translation_plane_via_andre_model_check_subplane checking set ";
1076 Lint_vec_print(cout, S, len);
1077 cout << endl;
1078 }
1079 f_OK = TP->check_subplane(S, len, verbose_level - 1);
1080 if (f_OK) {
1081 if (f_v) {
1082 cout << "accepted" << endl;
1083 }
1084 return TRUE;
1085 }
1086 else {
1087 if (f_v) {
1088 cout << "rejected" << endl;
1089 }
1090 return FALSE;
1091 }
1092}
1093#endif
1094
1095}}}
1096
1097
a statistical analysis of data consisting of single integers
void init(int *data, int data_length, int f_second, int verbose_level)
Definition: tally.cpp:72
a line in the projective plane created using the Andre construction
Definition: geometry.h:104
Andre / Bruck / Bose construction of a translation plane from a spread.
Definition: geometry.h:28
void init(field_theory::finite_field *F, int k, long int *spread_elements_numeric, int verbose_level)
void report(std::ostream &ost, int verbose_level)
void points_on_line(andre_construction_line_element *Line, int *pts_on_line, int verbose_level)
interface for various incidence geometries
Definition: geometry.h:1099
void get_and_print_row_tactical_decomposition_scheme_tex(std::ostream &ost, int f_enter_math, int f_print_subscripts, data_structures::partitionstack &PStack)
void get_and_print_column_tactical_decomposition_scheme_tex(std::ostream &ost, int f_enter_math, int f_print_subscripts, data_structures::partitionstack &PStack)
void init_by_matrix(int m, int n, int *M, int verbose_level)
void int_matrix_write_csv(std::string &fname, int *M, int m, int n)
Definition: file_io.cpp:1300
void head(std::ostream &ost, int f_book, int f_title, const char *title, const char *author, int f_toc, int f_landscape, int f_12pt, int f_enlarged_page, int f_pagenumbers, const char *extras_for_preamble)
a class to represent arbitrary precision integers
Definition: ring_theory.h:366
a permutation group in a fixed action.
Definition: actions.h:99
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)
field_theory::finite_field * matrix_group_finite_field()
Definition: action.cpp:2883
void induced_action_on_andre(action *An, action *An1, geometry::andre_construction *Andre, int verbose_level)
a strong generating set for a permutation group with respect to a fixed action
Definition: groups.h:1703
void generators_for_translation_plane_in_andre_model(actions::action *A_PGL_n1_q, actions::action *A_PGL_n_q, matrix_group *Mtx_n1, matrix_group *Mtx_n, data_structures_groups::vector_ge *spread_stab_gens, ring_theory::longinteger_object &spread_stab_go, int verbose_level)
data_structures_groups::vector_ge * gens
Definition: groups.h:1708
void group_order(ring_theory::longinteger_object &go)
to control the behavior of the poset classification algorithm
void initialize_and_allocate_root_node(poset_classification_control *PC_control, poset_with_group_action *Poset, int depth, int verbose_level)
int main(int t0, int schreier_depth, int f_use_invariant_subset_if_available, int f_debug, int verbose_level)
void init_subset_lattice(actions::action *A, actions::action *A2, groups::strong_generators *Strong_gens, int verbose_level)
tactical decomposition of an incidence structure with respect to a given group
void init(int nb_rows, int nb_cols, geometry::incidence_structure *Inc, int f_combined_action, actions::action *Aut, actions::action *A_on_points, actions::action *A_on_lines, groups::strong_generators *gens, int verbose_level)
Andre / Bruck / Bose model of a translation plane.
Definition: spreads.h:579
poset_classification::poset_classification_control * Control
Definition: spreads.h:609
int check_if_quadrangle_defines_a_subplane(long int *S, int *subplane7, int verbose_level)
poset_classification::poset_with_group_action * Poset
Definition: spreads.h:610
poset_classification::poset_classification * arcs
Definition: spreads.h:611
void init(long int *spread_elements_numeric, int k, actions::action *An, actions::action *An1, data_structures_groups::vector_ge *spread_stab_gens, ring_theory::longinteger_object &spread_stab_go, std::string &label, int verbose_level)
#define FREE_int(p)
Definition: foundations.h:640
#define NEW_OBJECT(type)
Definition: foundations.h:638
#define Lint_vec_print(A, B, C)
Definition: foundations.h:686
#define FREE_OBJECT(p)
Definition: foundations.h:651
#define NEW_int(n)
Definition: foundations.h:625
#define TRUE
Definition: foundations.h:231
#define FALSE
Definition: foundations.h:234
#define Int_vec_print(A, B, C)
Definition: foundations.h:685
the orbiter library for the classification of combinatorial objects