17namespace layer5_applications {
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);
115 long int *spread_elements_numeric,
122 int f_v = (verbose_level >= 1);
125 int f_v10 = (verbose_level >= 10);
126 int i, j, h, u, v, i1, i2, j1, j2;
130 cout <<
"translation_plane_via_andre_model::init" << endl;
131 cout <<
"translation_plane_via_andre_model::init "
132 "verbose_level=" << verbose_level << endl;
140 cout <<
"translation_plane_via_andre_model::init "
141 "The finite fields must have the same order" << endl;
147 cout <<
"translation_plane_via_andre_model::init "
149 cout <<
"translation_plane_via_andre_model::init "
159 cout <<
"translation_plane_via_andre_model::init "
160 "spread_elements_numeric:" << endl;
166 Andre->
init(
F,
k, spread_elements_numeric, verbose_level - 2);
172 cout <<
"translation_plane_via_andre_model::init "
174 cout <<
"translation_plane_via_andre_model::init "
184 for (i = 0; i <
N *
N; i++) {
188 cout <<
"translation_plane_via_andre_model::init "
189 "computing incidence matrix:" << endl;
194 for (j = 0; j <
N; j++) {
196 cout <<
"translation_plane_via_andre_model::init "
197 "before Line->unrank j=" << j << endl;
203 cout <<
"translation_plane_via_andre_model::init "
211 cout <<
"translation_plane_via_andre_model::init "
222 cout <<
"translation_plane_via_andre_model::init "
223 "Incidence matrix of the translation plane "
224 "has been computed" << endl;
232 fname.append(
"_incma.csv");
235 cout <<
"translation_plane_via_andre_model::init "
236 "written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
241 for (i = 0; i <
N *
N; i++) {
244 for (j = 0; j <
N; j++) {
258 for (i = 0; i <
N *
N; i++) {
261 for (i = 0; i <
N; i++) {
262 for (j1 = 0; j1 <
N; j1++) {
263 if (
Incma[i *
N + j1] == 0) {
266 for (j2 = j1 + 1; j2 <
N; j2++) {
267 if (
Incma[i *
N + j2] == 0) {
288 for (i = 0; i <
N; i++) {
289 for (j = 0; j <
N; j++) {
291 Adj[i *
twoN +
N + j] = 1;
292 Adj[(
N + j) *
twoN + i] = 1;
299 cout <<
"translation_plane_via_andre_model::init "
300 "Adjacency matrix of incidence matrix has "
301 "been computed" << endl;
313 longinteger_object ago;
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(
329 Aut->group_order(ago);
331 cout <<
"translation_plane_via_andre_model::init "
332 "Automorphism group order = " << ago << endl;
335 int f_combined_action =
TRUE;
347 Incma, verbose_level - 2);
349 cout <<
"translation_plane_via_andre_model::init "
350 "after Inc->init_by_matrix" << endl;
359 cout <<
"dim An1 != dim An + 1" << endl;
360 cout <<
"dim An = " <<
n << endl;
368 vector_ge *nice_gens;
378 cout <<
"translation_plane_via_andre_model::init "
379 "initializing action An" << endl;
389 cout <<
"translation_plane_via_andre_model::init "
390 "initializing action An1" << endl;
401 cout <<
"translation_plane_via_andre_model::init "
402 "initializing OnAndre" << endl;
414 cout <<
"translation_plane_via_andre_model::init "
415 "initializing spread stabilizer" << endl;
421 spread_stab_gens, spread_stab_go,
425 cout <<
"translation_plane_via_andre_model::init "
426 "initializing spread stabilizer" << endl;
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;
445 T->
init(nb_rows, nb_cols,
455 int set_size = nb_rows;
456 int nb_blocks = nb_cols;
466 incidence_structure_compute_TDA_general(*
Stack,
474 f_include_group_order,
476 f_include_tda_scheme,
483 cout <<
"translation_plane_via_andre_model::init "
484 "Row-scheme:" << endl;
488 cout <<
"translation_plane_via_andre_model::init "
489 "Col-scheme:" << endl;
498 cout <<
"translation_plane_via_andre_model::init done" << endl;
504 const char *prefix,
int depth,
int verbose_level)
506 int f_v = (verbose_level >= 1);
512 cout <<
"translation_plane_via_andre_model::classify_arcs" << endl;
524 cout <<
"translation_plane_via_andre_model::"
526 "before gen->initialize" << endl;
547 arcs->init_check_func(translation_plane_via_andre_model_check_arc,
555 arcs->print_function = print_arc;
556 arcs->print_function_data =
this;
560 if (
arcs->f_extend) {
561 do_extend(verbose_level,
arcs->verbose_level_group_theory);
562 time_check(cout, t0);
568 int schreier_depth = 1000;
569 int f_use_invariant_subset_if_available =
TRUE;
575 cout <<
"translation_plane_via_andre_model::classify_arcs "
576 "before generator_main" << endl;
581 f_use_invariant_subset_if_available,
590 char prefix_iso[1000];
593 sprintf(prefix_iso,
"ISO/");
594 sprintf(cmd,
"mkdir %s", prefix_iso);
598 cout <<
"translation_plane_via_andre_model::classify_arcs "
599 "before isomorph_build_db" << endl;
604 arcs->fname_base, prefix_iso,
605 depth, verbose_level);
610 cout <<
"translation_plane_via_andre_model::classify_arcs done" << endl;
616 const char *prefix,
int verbose_level)
618 int f_v = (verbose_level >= 1);
625 cout <<
"translation_plane_via_andre_model::classify_subplanes" << endl;
630 cout <<
"translation_plane_via_andre_model::classify_subplanes "
631 "before gen->initialize" << endl;
655 arcs->init_check_func(
656 translation_plane_via_andre_model_check_subplane,
664 arcs->print_function = print_arc;
665 arcs->print_function_data =
this;
669 if (
arcs->f_extend) {
670 do_extend(verbose_level,
671 arcs->verbose_level_group_theory);
672 time_check(cout, t0);
678 int schreier_depth = 1000;
679 int f_use_invariant_subset_if_available =
TRUE;
685 cout <<
"translation_plane_via_andre_model::classify_subplanes "
686 "before generator_main" << endl;
691 f_use_invariant_subset_if_available,
701 char prefix_iso[1000];
704 sprintf(prefix_iso,
"ISO/");
705 sprintf(cmd,
"mkdir %s", prefix_iso);
709 cout <<
"translation_plane_via_andre_model::"
710 "classify_arcs before isomorph_build_db" << endl;
715 arcs->fname_base, prefix_iso,
716 depth, verbose_level);
721 cout <<
"translation_plane_via_andre_model::classify_subplanes done" << endl;
727 long int *S,
int len,
int verbose_level)
729 int f_v = (verbose_level >= 1);
730 int f_vv = (verbose_level >= 2);
732 int i, j, h, a, b, c, l;
735 cout <<
"translation_plane_via_andre_model::check_arc" << endl;
738 cout <<
"translation_plane_via_andre_model::"
739 "check_arc the set is";
743 for (i = 0; i < len; i++) {
750 for (i = 0; i < len; i++) {
752 for (j = i + 1; j < len; j++) {
755 for (h = 0; h < len; h++) {
774 cout <<
"translation_plane_via_andre_model::check_arc done ret=" << ret << endl;
780 long int *S,
int len,
int verbose_level)
782 int f_v = (verbose_level >= 1);
783 int f_vv = (verbose_level >= 2);
786 int i, j, h, a, b, c, l;
790 cout <<
"translation_plane_via_andre_model::check_subplane" << endl;
793 cout <<
"translation_plane_via_andre_model::"
794 "check_subplane the set is";
801 len2 = (len * (len - 1)) >> 1;
809 for (i = 0; i < len; i++) {
811 for (j = i + 1; j < len; j++) {
820 for (i = 0; i < len; i++) {
831 for (i = 0; i < len; i++) {
833 for (j = i + 1; j < len; j++) {
836 cout <<
"translation_plane_via_andre_model::"
837 "check_subplane a == b" << endl;
843 cout <<
"Line through point " << a
844 <<
" and point " << b <<
" is " << c << endl;
850 cout <<
"translation_plane_via_andre_model::"
851 "check_subplane h != len2" << endl;
861 cout <<
"The set determines too many lines, "
872 cout <<
"The set contains 4 collinear points" << endl;
883 cout <<
"translation_plane_via_andre_model::check_subplane done ret=" << ret << endl;
889 long int *S,
int *subplane7,
int verbose_level)
891 int f_v = (verbose_level >= 1);
892 int f_vv = (verbose_level >= 2);
894 int i, j, h, a, b, l[6], d1, d2, d3, dl;
897 cout <<
"translation_plane_via_andre_model::check_if_quadrangle_defines_a_subplane" << endl;
900 cout <<
"translation_plane_via_andre_model::check_if_quadrangle_defines_a_subplane the set is";
905 for (i = 0; i < 4; i++) {
907 for (j = i + 1; j < 4; j++) {
914 cout <<
"translation_plane_via_andre_model::check_if_quadrangle_defines_a_subplane" << endl;
923 for (i = 0; i < 4; i++) {
936 cout <<
"translation_plane_via_andre_model::check_if_quadrangle_defines_a_subplane "
937 "done ret=" << ret << endl;
945 int f_v = (verbose_level >= 1);
949 cout <<
"translation_plane_via_andre_model::create_latex_report" << endl;
958 snprintf(str, 1000,
"%s_report.tex",
label.c_str());
960 snprintf(title, 1000,
"Translation plane %s",
label.c_str());
982 cout <<
"translation_plane_via_andre_model::create_latex_report before report" << endl;
984 report(ost, verbose_level);
986 cout <<
"translation_plane_via_andre_model::create_latex_report after report" << endl;
995 cout <<
"written file " << fname <<
" of size "
1000 cout <<
"translation_plane_via_andre_model::create_latex_report done" << endl;
1006 int f_v = (verbose_level >= 1);
1009 cout <<
"translation_plane_via_andre_model::report" << endl;
1015 ost <<
"Automorphism group:\\\\" << endl;
1017 ost <<
"{\\small\\arraycolsep=2pt" << endl;
1024 cout <<
"translation_plane_via_andre_model::report done" << endl;
1036static int translation_plane_via_andre_model_check_arc(
1037 int len,
long int *S,
void *data,
int verbose_level)
1045 cout <<
"translation_plane_via_andre_model_check_arc "
1053 cout <<
"accepted" << endl;
1059 cout <<
"rejected" << endl;
1065static int translation_plane_via_andre_model_check_subplane(
1066 int len,
long int *S,
void *data,
1069 translation_plane_via_andre_model *TP =
1070 (translation_plane_via_andre_model *) data;
1072 int f_v = (verbose_level >= 1);
1075 cout <<
"translation_plane_via_andre_model_check_subplane checking set ";
1079 f_OK = TP->check_subplane(S, len, verbose_level - 1);
1082 cout <<
"accepted" << endl;
1088 cout <<
"rejected" << endl;
void subset_continguous(int from, int len)
void split_cell(int verbose_level)
void allocate(int n, int verbose_level)
a statistical analysis of data consisting of single integers
void init(int *data, int data_length, int f_second, int verbose_level)
a line in the projective plane created using the Andre construction
void init(andre_construction *Andre, int verbose_level)
void unrank(int line_rank, int verbose_level)
Andre / Bruck / Bose construction of a translation plane from a spread.
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
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)
basic number theoretic functions
int i_power_j(int i, int j)
a collection of functions related to file io
void int_matrix_write_csv(std::string &fname, int *M, int m, int n)
long int file_size(std::string &fname)
interface to create latex output files
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)
void foot(std::ostream &ost)
interface to system functions
a class to represent arbitrary precision integers
a permutation group in a fixed action.
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)
int matrix_group_dimension()
int is_semilinear_matrix_group()
field_theory::finite_field * matrix_group_finite_field()
void induced_action_on_andre(action *An, action *An1, geometry::andre_construction *Andre, int verbose_level)
to hold a vector of group elements
a strong generating set for a permutation group with respect to a fixed action
void print_generators_tex()
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
void group_order(ring_theory::longinteger_object &go)
to control the behavior of the poset classification algorithm
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 print_orbit_numbers(int depth)
a poset with a group action on it
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 report(int f_enter_math, std::ostream &ost)
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.
poset_classification::poset_classification_control * Control
apps_combinatorics::tactical_decomposition * T
geometry::andre_construction * Andre
void classify_arcs(const char *prefix, int depth, int verbose_level)
translation_plane_via_andre_model()
int check_if_quadrangle_defines_a_subplane(long int *S, int *subplane7, int verbose_level)
poset_classification::poset_with_group_action * Poset
poset_classification::poset_classification * arcs
groups::strong_generators * strong_gens
int check_subplane(long int *S, int len, int verbose_level)
void classify_subplanes(const char *prefix, int verbose_level)
int * Line_through_two_points
void report(std::ostream &ost, int verbose_level)
actions::action * OnAndre
data_structures::partitionstack * Stack
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)
~translation_plane_via_andre_model()
field_theory::finite_field * F
geometry::andre_construction_line_element * Line
geometry::incidence_structure * Inc
void create_latex_report(int verbose_level)
int check_arc(long int *S, int len, int verbose_level)
#define Lint_vec_print(A, B, C)
#define Int_vec_print(A, B, C)
the orbiter library for the classification of combinatorial objects
groups::matrix_group * matrix_grp