16namespace layer1_foundations {
140 int f_Uab,
int a,
int b,
141 int f_classical,
int verbose_level)
144 int f_v = (verbose_level >= 1);
148 cout <<
"buekenhout_metz::init q=" <<
q <<
" Q=" <<
Q << endl;
155 cout <<
"buekenhout_metz::init Q != q * q" << endl;
165 cout <<
"buekenhout_metz::init f_Uab=" <<
f_Uab << endl;
167 cout <<
"buekenhout_metz::init a=" <<
parameter_a << endl;
168 cout <<
"buekenhout_metz::init b=" <<
parameter_b << endl;
170 cout <<
"buekenhout_metz::init f_classical=" <<
f_classical << endl;
190 cout <<
"buekenhout_metz::init "
191 "before FQ->subfield_embedding_2dimensional" << endl;
218 cout <<
"embedding table:" << endl;
223 cout <<
"buekenhout_metz::init e1=" <<
e1 <<
" one_1=" <<
one_1
224 <<
" one_2=" <<
one_2 << endl;
227 for (i = 0; i <
q; i++) {
237 cout <<
"buekenhout_metz::init t0=" <<
t0 <<
" t1=" <<
t1
238 <<
" minus_t0=" <<
minus_t0 << endl;
249 cout <<
"buekenhout_metz::init done" << endl;
255 int f_v = (verbose_level >= 1);
256 int f_vv = (verbose_level >= 2);
260 cout <<
"buekenhout_metz::init_ovoid" << endl;
262 int X0, X1, Y1, Z, a;
268 for (i = 0; i <
theta_3; i++) {
271 cout <<
"testing point " << i << endl;
317 cout <<
"found an ovoid of size " <<
sz_ovoid <<
":" << endl;
326 cout <<
"we need the ovoid to be of size q * q + 1" << endl;
332 int a,
int b,
int verbose_level)
334 int f_v = (verbose_level >= 1);
337 cout <<
"buekenhout_metz::init_ovoid_Uab_even" << endl;
341 cout <<
"buekenhout_metz::init_ovoid_Uab_even, "
342 "characteristic must be even" << endl;
346 int X0, X1, Y1, Z, i, aa;
347 int a1, a2, b2, delta, delta2;
348 int lambda, lambda_big, c1, c2, c3;
356 delta2 =
FQ->
mult(delta, delta);
357 lambda_big =
FQ->
add(delta, delta2);
359 for (i = 0; i <
q; i++) {
365 c1 =
Fq->
add(a2, b2);
369 cout <<
"buekenhout_metz::init_ovoid_Uab_even" << endl;
370 cout <<
"delta=" << delta << endl;
371 cout <<
"delta2=" << delta2 << endl;
372 cout <<
"lambda_big=" << lambda_big << endl;
373 cout <<
"lambda=" << lambda << endl;
374 cout <<
"c1=" << c1 << endl;
375 cout <<
"c2=" << c2 << endl;
376 cout <<
"c3=" << c3 << endl;
382 for (i = 0; i <
theta_3; i++) {
385 cout <<
"testing point " << i << endl;
405 cout <<
"found an ovoid of size " <<
sz_ovoid <<
":" << endl;
411 cout <<
"we need the ovoid to be of size q * q + 1" << endl;
418 int f_v = (verbose_level >= 1);
419 int f_vv = (verbose_level >= 3);
420 int f_vvv = (verbose_level >= 4);
421 int i, j, a, c1, c2, h;
425 cout <<
"buekenhout_metz::create_unital" << endl;
435 cout <<
"The vertex is:" << endl;
442 for (i = 1; i <
q *
q + 1; i++) {
446 cout << i <<
"-th ovoidal point is " << a <<
" : ";
452 cout <<
"we need the Z coordinate to be one" << endl;
466 cout <<
"after embedding:" << endl;
471 for (j = 0; j <
q; j++) {
473 cout <<
"j=" << j <<
" : ";
475 for (h = 0; h < 5; h++) {
479 cout <<
"w4:" << endl;
484 for (h = 0; h < 5; h++) {
489 cout <<
"w5 (with added 0):" << endl;
496 for (h = 0; h < 3; h++) {
511 cout <<
" : " << b << endl;
525 cout <<
"the Buekenhout Metz unital of size " <<
sz <<
" : ";
529 for (i = 0; i <
sz; i++) {
541 int f_v = (verbose_level >= 1);
543 int i, j, a, c1, c2, h;
547 cout <<
"buekenhout_metz::create_unital_tex" << endl;
550 symbol.assign(
"\\beta");
565 for (i = 1; i <
q *
q + 1; i++) {
569 cout << i <<
"-th ovoidal point is " << a <<
" : ";
575 cout <<
"we need the Z coordinate to be one" << endl;
585 cout <<
"after embedding:" << endl;
604 for (j = 0; j <
q; j++) {
607 cout <<
"j=" << j <<
" : ";
609 for (h = 0; h < 5; h++) {
613 cout <<
"w4:" << endl;
618 for (h = 0; h < 5; h++) {
623 cout <<
"w5 (with added 0):" << endl;
630 for (h = 0; h < 3; h++) {
646 TRUE , 8,
"\\alpha");
649 TRUE , 8,
"\\alpha");
652 TRUE , 8,
"\\alpha");
663 int x, y,
t1, t2, t3;
674 cout <<
"y != v[1]" << endl;
677 TRUE , 8,
"\\alpha");
681 TRUE , 8,
"\\alpha");
683 cout <<
"b*x^(q+1) = ";
685 TRUE , 8,
"\\alpha");
689 TRUE , 8,
"\\alpha");
694 TRUE , 8,
"\\alpha");
700 cout <<
"\\\\" << endl;
706 int f_v = (verbose_level >= 1);
712 cout <<
"buekenhout_metz::create_unital_Uab_tex" << endl;
715 symbol.assign(
"\\beta");
717 for (r = 0; r <
q; r++) {
722 cout <<
"\\\\" << endl;
723 cout <<
"\\hline" << endl;
724 for (i = 0; i <
q *
q; i++) {
735 for (r = 0; r <
q; r++) {
758 TRUE , 8,
"\\alpha");
761 TRUE , 8,
"\\alpha");
764 TRUE , 8,
"\\alpha");
773 cout <<
" = P_{" << rk <<
"} ";
777 cout <<
"y != v[1]" << endl;
780 TRUE , 8,
"\\alpha");
784 TRUE , 8,
"\\alpha");
786 cout <<
"b*x^(q+1) = ";
788 TRUE , 8,
"\\alpha");
792 TRUE , 8,
"\\alpha");
802 cout <<
"\\\\" << endl;
808 int f_v = (verbose_level >= 1);
809 int f_vv = (verbose_level >= 2);
814 cout <<
"buekenhout_metz::compute_the_design" << endl;
828 <<
" secant lines, they are:" << endl;
838 <<
" tangent lines, they are:" << endl;
864 cout <<
"block_size != 1" << endl;
869 cout <<
"line " << a <<
" is tangent at point " << b << endl;
879 cout <<
"The tangent line at point " << b
892 for (i = 0; i <
sz; i++) {
912 cout <<
"block_size != q + 1" << endl;
915 for (j = 0; j <
q + 1; j++) {
918 cout <<
"b == -1" << endl;
927 cout <<
"The blocks of the design are:" << endl;
941 cout <<
"The intersection sets are:" << endl;
942 cout <<
"i : line(i) : block(i) : is Baer" << endl;
944 cout << setw(3) << i <<
" : ";
954void buekenhout_metz::compute_automorphism_group(
int verbose_level)
956 int f_v = (verbose_level >= 1);
959 cout <<
"buekenhout_metz::compute_automorphism_group" << endl;
960 cout <<
"computing the automorphism group of the design:" << endl;
965 A = create_automorphism_group_of_block_system(
973 cout <<
"The automorphism group of the design "
974 "has order " << ago << endl;
978 cout <<
"Computing the automorphism group again" << endl;
984 strcat(fname_stab,
"_stab.txt");
986 if (file_size(fname_stab) <= 0) {
989 cout <<
"file " << fname_stab <<
" does not exist, "
990 "we will now compute the stabilizer" << endl;
992 S = create_sims_for_stabilizer(
P2->A,
U,
sz, verbose_level - 1);
993 S->write_sgs(fname_stab, verbose_level - 1);
999 cout <<
"file " << fname_stab <<
" exists, we will "
1000 "now read the stabilizer from file" << endl;
1005 S->read_sgs(fname_stab, SG, verbose_level);
1009 S->group_order(ago2);
1012 cout <<
"The stabilizer of the unital has order " << ago2 << endl;
1018 S->extract_strong_generators_in_order(*gens, tl, verbose_level);
1021 cout <<
"strong generators for the stabilizer are:" << endl;
1024 S->print_generators_tex(cout);
1029void buekenhout_metz::compute_orbits(
int verbose_level)
1033 int f_v = (verbose_level >= 1);
1038 cout <<
"buekenhout_metz::compute_orbits" << endl;
1039 cout <<
"computing orbits on points and on lines:" << endl;
1045 Orb->init_generators(*gens);
1046 Orb->compute_all_point_orbits(verbose_level - 2);
1048 cout <<
"Orbits on points:" << endl;
1049 Orb->print_and_list_orbits(cout);
1055 Orb2->init_generators(*gens);
1057 if (f_prefered_line_reps) {
1058 Orb2->compute_all_point_orbits_with_prefered_reps(
1059 prefered_line_reps, nb_prefered_line_reps, verbose_level - 2);
1062 Orb2->compute_all_point_orbits(verbose_level - 2);
1065 cout <<
"Orbits on lines:" << endl;
1066 Orb2->print_and_list_orbits(cout);
1070 for (h = 0; h < Orb2->nb_orbits; h++) {
1073 cout <<
"buekenhout_metz::compute_orbits "
1074 "before investigate_line_orbit " << h << endl;
1077 investigate_line_orbit(h, verbose_level);
1080 cout <<
"buekenhout_metz::compute_orbits "
1081 "after investigate_line_orbit " << h << endl;
1088void buekenhout_metz::investigate_line_orbit(
int h,
int verbose_level)
1100 int f_v = (verbose_level >= 1);
1101 int f_vv = (verbose_level >= 2);
1105 cout <<
"buekenhout_metz::investigate_line_orbit" << endl;
1107 longinteger_object stab_order;
1109 int idx, f_hit_favorite;
1110 int PP1, PP2,
T1, T2, T,
Q, PP, vv;
1113 the_line = Orb2->orbit[Orb2->orbit_first[h]];
1120 cout <<
"line-orbit " << h <<
" represented by line "
1121 << the_line <<
" does not consist of "
1122 "secant lines, skip" << endl;
1130 cout <<
"looking at secant line-orbit " << h
1131 <<
" represented by line " << the_line <<
":" << endl;
1135 int_vec_intersect(
P2->Lines + the_line *
P2->
k,
1139 cout <<
"the block is ";
1145 cout <<
"nb_good_points != q + 1" << endl;
1149 Orb2->point_stabilizer(
P2->A , ago2,
1150 Stab, h , verbose_level);
1152 Stab->group_order(stab_order);
1154 cout <<
"stabilizer of orbit " << h
1155 <<
" has order " << stab_order << endl;
1160 cout <<
"the stabilizer is generated by" << endl;
1161 Stab->print_generators();
1167 C->init(
"pairs",
this ,
1171 buekenhout_metz_check_good_points,
1176 cout <<
"computing orbits" << endl;
1178 C->compute_orbits_from_sims(Stab, verbose_level - 1);
1181 cout <<
"We found " << C->nb_orbits
1182 <<
" orbits on 2-subsets" << endl;
1183 cout <<
"They are:" << endl;
1185 for (u = 0; u < C->nb_orbits; u++) {
1188 cout <<
"choosing orbit rep " << u << endl;
1191 C->choose_orbit(u, f_hit_favorite, verbose_level);
1194 cout <<
"orbit rep " << u <<
" is" << endl;
1200 cout <<
"with stabilizer tl=";
1201 int_vec_print(cout, C->stab_tl, C->A->base_len);
1203 cout <<
"generated by" << endl;
1204 C->stab_gens->print(cout);
1209 PP1 = C->representative[0];
1210 PP2 = C->representative[1];
1216 cout <<
"P1=" << PP1 <<
" P2=" << PP2
1217 <<
" T1=" <<
T1 <<
" T2=" << T2 <<
" Q=" <<
Q << endl;
1229 for (vv = 0; vv <
P2->
r; vv++) {
1230 T =
P2->Lines_on_point[
Q *
P2->
r + vv];
1235 if (PP == PP1 || PP == PP2) {
1238 T1_set[T1_set_size++] = T;
1243 cout << vv <<
"-th line " << T <<
" on Q is "
1244 "tangent line and intersects in "
1245 "good point " << PP << endl;
1251 cout << vv <<
"-th line " << T <<
" on Q "
1252 "is tangent line and its point of tangency "
1254 <<
" which is not a good point" << endl;
1259 cout <<
"t1=" <<
t1 << endl;
1260 cout <<
"T1_set = ";
1261 int_vec_print(cout, T1_set, T1_set_size);
1265 longinteger_object go;
1270 Stab0 = create_sims_from_generators_with_target_group_order_factorized(
1272 C->Stab_Strong_gens->gens,
1273 C->Stab_Strong_gens->tl,
1277 cout <<
"computing stabilizer of the line set" << endl;
1278 Stab0->group_order(go);
1279 cout <<
"in a group of order " << go << endl;
1285 for (ii = 0; ii < goi; ii++) {
1286 Stab0->element_unrank_int(ii, Elt);
1287 if (
P2->A2->check_if_in_set_stabilizer(Elt,
1288 T1_set_size, T1_set, 0 )) {
1290 cout <<
"element " << ii <<
" stabilizes the set" << endl;
1291 P2->A2->element_print_as_permutation(Elt, cout);
1298 cout <<
"stabilizer order " << go1 << endl;
1304 cout <<
"computing stabilizer using set stabilizer routine:" << endl;
1306 T1_set_stab = create_sims_for_stabilizer_with_input_group(
P2->A2,
1307 P2->A, C->stab_gens, C->stab_tl,
1308 T1_set, T1_set_size, verbose_level - 3);
1309 T1_set_stab->group_order(go);
1310 cout <<
"stabilizer order " << go << endl;
1312 vector_ge *set_stab_gens;
1317 T1_set_stab->extract_strong_generators_in_order(
1318 *set_stab_gens, set_stab_tl, 0);
1319 cout <<
"strong generators are:" << endl;
1320 for (i = 0; i < set_stab_gens->len; i++) {
1321 P2->A->element_print_quick(set_stab_gens->ith(i), cout);
1333 string fname_unital;
1337 fname_unital.append(
".txt");
1339 cout <<
"written file " << fname_unital <<
" of size "
1353 sprintf(str,
"H%d",
q);
1356 sprintf(str,
"BM%d",
q);
1363int buekenhout_metz_check_good_points(
int len,
1364 int *S,
void *data,
int verbose_level)
1373 cout <<
"buekenhout_metz_check_good_points checking the set ";
1377 for (i = 0; i < len; i++) {
1379 if (!Sorting.int_vec_search_linear(BM->
good_points,
1382 cout <<
"The set is rejected" << endl;
1388 cout <<
"The set is accepted" << endl;
void print(std::ostream &ost, std::vector< int > &v)
a collection of functions related to sorted vectors
int add4(int i1, int i2, int i3, int i4)
void print_embedding_tex(finite_field &subfield, int *components, int *embedding, int *pair_embedding)
void print_element_with_symbol(std::ostream &ost, int a, int f_exponential, int width, std::string &symbol)
void PG_element_unrank_modified(int *v, int stride, int len, int a)
void init_symbol_for_print(const char *symbol)
int product3(int a1, int a2, int a3)
int add3(int i1, int i2, int i3)
void int_vec_print_field_elements(std::ostream &ost, int *v, int len)
void subfield_embedding_2dimensional(finite_field &subfield, int *&components, int *&embedding, int *&pair_embedding, int verbose_level)
void print_embedding(finite_field &subfield, int *components, int *embedding, int *pair_embedding)
int add6(int i1, int i2, int i3, int i4, int i5, int i6)
void init_ovoid_Uab_even(int a, int b, int verbose_level)
void get_name(std::string &name)
void init(field_theory::finite_field *Fq, field_theory::finite_field *FQ, int f_Uab, int a, int b, int f_classical, int verbose_level)
void create_unital_tex(int verbose_level)
void init_ovoid(int verbose_level)
void write_unital_to_file()
int * tangent_line_at_point
void create_unital_Uab_tex(int verbose_level)
field_theory::finite_field * FQ
field_theory::finite_field * Fq
long int * Intersection_sets
void compute_the_design(int verbose_level)
void create_unital(int verbose_level)
various functions related to geometries
long int nb_PG_elements(int n, int q)
projective space PG(n,q) of dimension n over Fq
void find_k_secant_lines(long int *set, int set_size, int k, long int *secant_lines, int &nb_secant_lines, int verbose_level)
void line_intersection(int line_rank, long int *set, int set_size, std::vector< int > &point_indices, int verbose_level)
int is_contained_in_Baer_subline(long int *pts, int nb_pts, int verbose_level)
void intersect_with_line(long int *set, int set_sz, int line_rk, long int *intersection, int &sz, int verbose_level)
long int rank_point(int *v)
void print_set(long int *set, int set_size)
void projective_space_init(int n, field_theory::finite_field *F, int f_init_incidence_structure, int verbose_level)
void unrank_point(int *v, long int rk)
a collection of functions related to file io
long int file_size(std::string &fname)
void write_set_to_file(std::string &fname, long int *the_set, int set_size, int verbose_level)
data_structures::int_vec * Int_vec
#define Lint_vec_print(A, B, C)
#define Int_vec_print_integer_matrix_width(A, B, C, D, E, F)
#define Int_vec_print(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects