17namespace layer5_applications {
18namespace applications_in_algebraic_geometry {
19namespace cubic_surfaces_and_double_sixes {
22static void callback_partial_ovoid_test_early(
long int *S,
int len,
23 long int *candidates,
int nb_candidates,
24 long int *good_candidates,
int &nb_good_candidates,
25 void *data,
int verbose_level);
131 int f_v = (verbose_level >= 1);
134 cout <<
"classify_double_sixes::init" << endl;
158 cout <<
"classify_double_sixes::init group must "
159 "act in wedge action" << endl;
178 cout <<
"classify_double_sixes::init before "
179 "SG_line_stab->generators_for_parabolic_subgroup" << endl;
188 cout <<
"classify_double_sixes::init after "
189 "SG_line_stab->generators_for_parabolic_subgroup" << endl;
195 cout <<
"classify_double_sixes::init "
196 "before compute_neighbors" << endl;
200 cout <<
"classify_double_sixes::init "
201 "after compute_neighbors" << endl;
206 cout <<
"classify_double_sixes::init "
207 "before make_spreadsheet_of_neighbors" << endl;
211 cout <<
"classify_double_sixes::init "
212 "after make_spreadsheet_of_neighbors" << endl;
217 cout <<
"classify_double_sixes::init "
218 "after compute_neighbors "
220 cout <<
"Neighbors=";
230 cout <<
"classify_double_sixes::init "
231 "computing restricted action on neighbors" << endl;
242 cout <<
"classify_double_sixes::init "
243 "restricted action on neighbors "
244 "has been computed" << endl;
254 cout <<
"classify_double_sixes::init before "
255 "Poset->add_testing_without_group" << endl;
259 callback_partial_ovoid_test_early,
268 cout <<
"classify_double_sixes::init "
269 "before Five_plus_one->init" << endl;
277 cout <<
"classify_double_sixes::init "
278 "after Five_plus_one->init" << endl;
292 cout <<
"classify_double_sixes::init done" << endl;
299 int f_v = (verbose_level >= 1);
304 cout <<
"classify_double_sixes::compute_neighbors" << endl;
309 cout <<
"classify_double_sixes::compute_neighbors "
323 cout <<
"classify_double_sixes::compute_neighbors "
324 "before Surf->O->perp" << endl;
328 cout <<
"classify_double_sixes::compute_neighbors "
329 "after Surf->O->perp" << endl;
336 cout <<
"classify_double_sixes::compute_neighbors "
337 "sz != nb_neighbors" << endl;
338 cout <<
"sz = " << sz << endl;
343 cout <<
"classify_double_sixes::compute_neighbors "
348 cout <<
"classify_double_sixes::compute_neighbors "
349 "allocating Line_to_neighbor, "
356 Line_to_neighbor[i] = -1;
364 cout <<
"classify_double_sixes::compute_neighbors "
365 "before Surf->klein_to_wedge_vec" << endl;
379 cout <<
"classify_double_sixes::compute_neighbors "
380 "Establish the bijection between Neighbors and Lines in "
388 if ((i % N100) == 0) {
389 cout <<
"classify_double_sixes::compute_neighbors i=" << i <<
" / "
408 cout <<
" : " << c << endl;
416 cout <<
"classify_double_sixes::compute_neighbors "
417 "before int_vec_apply" << endl;
431 cout <<
"classify_double_sixes::compute_neighbors done" << endl;
438 int f_v = (verbose_level >= 1);
443 cout <<
"classify_double_sixes::make_spreadsheet_of_neighbors" << endl;
446 sprintf(str,
"neighbors_%d.csv",
q);
447 fname_csv.assign(str);
455 cout <<
"before Sp->save " << fname_csv << endl;
457 Sp->
save(fname_csv, verbose_level);
459 cout <<
"after Sp->save " << fname_csv << endl;
467 cout <<
"classify_double_sixes::make_spreadsheet_of_neighbors done" << endl;
473 int f_v = (verbose_level >= 1);
474 int schreier_depth = 10000;
475 int f_use_invariant_subset_if_available =
TRUE;
482 cout <<
"classify_double_sixes::classify_partial_ovoids" << endl;
485 cout <<
"classify_double_sixes::classify_partial_ovoids "
487 cout <<
"Neighbors=";
492 cout <<
"classify_double_sixes::classify_partial_ovoids "
493 "classifying starter" << endl;
497 f_use_invariant_subset_if_available,
501 cout <<
"classify_double_sixes::classify_partial_ovoids "
502 "classifying starter done" << endl;
511 sprintf(str,
"fiveplusone_%d.csv",
q);
512 fname_csv.assign(str);
513 Sp->
save(fname_csv, verbose_level);
518 cout <<
"classify_double_sixes::classify_partial_ovoids done" << endl;
527 int f_v = (verbose_level >= 1);
531 cout <<
"classify_double_sixes::report" << endl;
536 cout <<
"classify_double_sixes::report reporting groups" << endl;
539 ost <<
"\\section*{The semilinear group}" << endl;
544 cout <<
"classify_double_sixes::report reporting orthogonal group" << endl;
546 ost <<
"\\section*{The orthogonal group}" << endl;
553 cout <<
"classify_double_sixes::report reporting line stabilizer" << endl;
555 ost <<
"\\section*{The group stabilizing the fixed line}" << endl;
560 ost <<
"{\\small\\arraycolsep=2pt" << endl;
565 cout <<
"classify_double_sixes::report before Five_plus_one->report" << endl;
567 ost <<
"\\section*{The classification of five-plus-ones}" << endl;
570 cout <<
"classify_double_sixes::report after Five_plus_one->report" << endl;
575 cout <<
"classify_double_sixes::report done" << endl;
580 long int *candidates,
int nb_candidates,
581 long int *good_candidates,
int &nb_good_candidates,
584 int f_v = (verbose_level >= 1);
593 cout <<
"classify_double_sixes::partial_ovoid_test_early checking set ";
596 cout <<
"candidate set of size "
597 << nb_candidates <<
":" << endl;
603 cout <<
"classify_double_sixes::partial_ovoid_test_early len > 5" << endl;
606 for (i = 0; i <
len; i++) {
613 nb_good_candidates = nb_candidates;
616 nb_good_candidates = 0;
619 cout <<
"classify_double_sixes::partial_ovoid_test_early "
620 "before testing" << endl;
622 for (j = 0; j < nb_candidates; j++) {
626 cout <<
"classify_double_sixes::partial_ovoid_test_early "
627 "testing " << j <<
" / "
628 << nb_candidates << endl;
635 for (i = 0; i <
len; i++) {
645 good_candidates[nb_good_candidates++] =
657 int f_v = (verbose_level >= 1);
664 cout <<
"classify_double_sixes::test_orbits" << endl;
665 cout <<
"verbose_level = " << verbose_level << endl;
670 cout <<
"classify_double_sixes::test_orbits testing "
671 <<
len <<
" orbits of 5-sets of lines:" << endl;
675 for (i = 0; i <
len; i++) {
676 if ((i % 1000) == 0) {
677 cout <<
"classify_double_sixes::test_orbits orbit "
678 << i <<
" / " <<
len <<
":" << endl;
691 cout <<
"5+1 lines = ";
705 cout <<
"classify_double_sixes::test_orbits orbit "
707 <<
" has rank = " << r << endl;
715 cout <<
"classify_double_sixes::test_orbits we found "
716 <<
nb <<
" / " <<
len
717 <<
" orbits where the rank is 19" << endl;
723 cout <<
"classify_double_sixes::test_orbits done" << endl;
731 int f_v = (verbose_level >= 1);
748 cout <<
"classify_double_sixes::make_spreadsheet_"
749 "of_fiveplusone_configurations" << endl;
751 sprintf(str,
"fiveplusone19_%d.csv",
q);
752 fname_csv.assign(str);
765 for (i = 0; i <
nb; i++) {
771 Len[i] =
len.as_int();
773 for (i = 0; i <
nb; i++) {
779 Text[i] =
NEW_char(strlen(str) + 1);
780 strcpy(Text[i], str);
785 for (i = 0; i <
nb; i++) {
786 if (Fusion[i] == -2) {
788 strcat(str,
"\"N/A\"");
797 Transporter[i] =
NEW_char(strlen(str) + 1);
798 strcpy(Transporter[i], str);
823 (
const char **) Transporter,
"Transporter");
826 cout <<
"before Sp->save " << fname_csv << endl;
827 Sp->
save(fname_csv, verbose_level);
828 cout <<
"after Sp->save " << fname_csv << endl;
834 for (i = 0; i <
nb; i++) {
838 for (i = 0; i <
nb; i++) {
844 cout <<
"classify_double_sixes::make_spreadsheet_"
845 "of_fiveplusone_configurations done" << endl;
851 long int *five_lines,
long int transversal_line,
852 long int *five_lines_out_as_neighbors,
int &orbit_index,
853 int *transporter,
int verbose_level)
855 int f_v = (verbose_level >= 1);
862 cout <<
"classify_double_sixes::identify_five_plus_one" << endl;
863 cout <<
"classify_double_sixes::identify_five_plus_one "
864 "transversal_line=" << transversal_line << endl;
865 cout <<
"classify_double_sixes::identify_five_plus_one "
869 cout <<
"verbose_level = " << verbose_level << endl;
875 cout <<
"classify_double_sixes::identify_five_plus_one W1=";
887 cout <<
"classify_double_sixes::identify_five_plus_one "
888 "element which moves transversal line:" << endl;
899 cout <<
"classify_double_sixes::identify_five_plus_one W2=";
908 cout <<
"classify_double_sixes::identify_five_plus_one "
909 "tracing the set N1=";
915 five_lines_out_as_neighbors,
919 cout <<
"classify_double_sixes::identify_five_plus_one "
920 "orbit_index = " << orbit_index << endl;
923 cout <<
"classify_double_sixes::identify_five_plus_one "
924 "element which moves neighbor set:" << endl;
931 cout <<
"classify_double_sixes::identify_five_plus_one "
932 "element which moves five_plus_one:" << endl;
936 cout <<
"classify_double_sixes::identify_five_plus_one "
943 int f_v = (verbose_level >= 1);
947 cout <<
"classify_double_sixes::classify" << endl;
951 cout <<
"classify_double_sixes::classify "
952 "before downstep" << endl;
956 cout <<
"classify_double_sixes::classify "
957 "after downstep" << endl;
959 <<
" flag orbits out of "
961 <<
" orbits" << endl;
965 cout <<
"classify_double_sixes::classify "
966 "before upstep" << endl;
970 cout <<
"classify_double_sixes::classify "
971 "after upstep" << endl;
973 <<
" double sixes out of "
975 <<
" flag orbits" << endl;
979 cout <<
"classify_double_sixes::classify done" << endl;
986 int f_v = (verbose_level >= 1);
987 int f_vv = (verbose_level >= 2);
989 int f, i, nb_orbits, nb_flag_orbits, c;
992 cout <<
"classify_double_sixes::downstep" << endl;
993 cout <<
"verbose_level = " << verbose_level << endl;
997 cout <<
"classify_double_sixes::downstep "
998 "before test_orbits" << endl;
1002 cout <<
"classify_double_sixes::downstep "
1003 "after test_orbits" << endl;
1025 cout <<
"classify_double_sixes::downstep "
1026 "initializing flag orbits" << endl;
1029 int f_process =
FALSE;
1034 nb_100 =
nb / 100 + 1;
1038 for (f = 0; f <
nb; f++) {
1042 cout <<
"classify_double_sixes::downstep "
1043 "orbit " << f <<
" / " <<
nb
1044 <<
" with rank = 19 is orbit "
1045 << i <<
" / " << nb_orbits << endl;
1048 if ((f % nb_100) == 0) {
1049 cout <<
"classify_double_sixes::downstep orbit "
1050 << i <<
" / " << nb_orbits <<
", progress at " << f / nb_100 <<
"%" << endl;
1057 long int dataset[23];
1076 long int double_six[12];
1078 cout <<
"5+1 lines = ";
1084 cout <<
"classify_double_sixes::downstep before "
1085 "create_double_six_from_five_lines_with_"
1086 "a_common_transversal" << endl;
1096 cout <<
"The starter configuration is good, "
1097 "a double six has been computed:" << endl;
1117 cout <<
"orbit " << f <<
" / " <<
nb
1118 <<
" with rank = 19 is orbit " << i
1119 <<
" / " << nb_orbits <<
", stab order "
1126 cout <<
"classify_double_sixes::downstep "
1127 "orbit " << f <<
" / " <<
nb
1128 <<
" with rank = 19 does not yield a "
1129 "double six, skipping" << endl;
1141 for (f = 0; f < nb_flag_orbits; f++) {
1145 cout <<
"classify_double_sixes::downstep we found "
1146 << nb_flag_orbits <<
" flag orbits out of "
1147 << nb_orbits <<
" orbits" << endl;
1150 cout <<
"classify_double_sixes::downstep "
1151 "initializing flag orbits done" << endl;
1158 int f_v = (verbose_level >= 1);
1166 cout <<
"classify_double_sixes::upstep" << endl;
1167 cout <<
"verbose_level = " << verbose_level << endl;
1186 cout <<
"flag orbit : downstep_primary_orbit" << endl;
1187 cout <<
"f : po" << endl;
1190 cout << f <<
" : " << po << endl;
1196 long int dataset[23];
1198 if (f_processed[f]) {
1202 progress = ((double)nb_processed * 100. ) /
1206 cout <<
"classify_double_sixes::upstep "
1207 "Defining n e w orbit "
1209 <<
" from flag orbit " << f <<
" / "
1211 <<
" progress=" << progress <<
"%" << endl;
1218 cout <<
"Flag_orbits->pt_representation_sz != 23" << endl;
1224 cout <<
"po=" << po <<
" so=" << so << endl;
1236 coset_reps->
allocate(12, verbose_level - 2);
1241 long int double_six[12];
1246 cout <<
"double six:";
1253 cout <<
"po=" << po <<
" so=" << so
1254 <<
" go=" <<
go << endl;
1258 for (i = 0; i < 2; i++) {
1259 for (j = 0; j < 6; j++) {
1262 cout <<
"i=" << i <<
" j=" << j << endl;
1264 long int transversal_line;
1265 long int five_lines[5];
1267 long int five_lines_out_as_neighbors[5];
1271 transversal_line = double_six[i * 6 + j];
1274 for (h = 0; h < 6; h++) {
1278 five_lines[k++] = double_six[i0 * 6 + h];
1285 cout <<
"transversal_line = "
1286 << transversal_line <<
" five_lines=";
1291 five_lines_out_as_neighbors, orbit_index,
1292 Elt3 , verbose_level - 2);
1295 cout <<
"We found a transporter:" << endl;
1301 cout <<
"cannot find orbit " << orbit_index
1302 <<
" in Po" << endl;
1311 cout <<
"Flag_orbits->Flag_orbit_node[f2].downstep_"
1312 "primary_orbit != orbit_index" << endl;
1323 cout <<
"We found an automorphism of "
1324 "the double six:" << endl;
1335 cout <<
"We are identifying flag orbit "
1336 << f2 <<
" with flag orbit " << f << endl;
1338 if (!f_processed[f2]) {
1350 f_processed[f2] =
TRUE;
1354 cout <<
"Flag orbit " << f2 <<
" has already been "
1355 "identified with flag orbit " << f << endl;
1357 cout <<
"Flag_orbits->Flag_orbit_node[f2]."
1358 "fusion_with != f" << endl;
1367 coset_reps->
reallocate(nb_coset_reps, verbose_level - 2);
1375 cout <<
"classify_double_sixes::upstep "
1376 "Extending the group by a factor of "
1377 << nb_coset_reps << endl;
1381 coset_reps, nb_coset_reps,
1384 cout <<
"classify_double_sixes::upstep "
1395 cout <<
"the double six has a stabilizer of order "
1397 cout <<
"The double six stabilizer is:" << endl;
1407 Aut_gens, dataset + 11, NULL , verbose_level);
1412 f_processed[f] =
TRUE;
1419 cout <<
"nb_processed != Flag_orbits->nb_flag_orbits" << endl;
1420 cout <<
"nb_processed = " << nb_processed << endl;
1421 cout <<
"Flag_orbits->nb_flag_orbits = "
1430 <<
" orbits of double sixes" << endl;
1437 cout <<
"classify_double_sixes::upstep done" << endl;
1449 ost <<
"\\subsection*{Classification of $5+1$ Configurations "
1450 "in $\\PG(3," <<
q <<
")$}" << endl;
1458 ost <<
"The order of the group is ";
1460 ost <<
"\\\\" << endl;
1462 ost <<
"\\bigskip" << endl;
1469 Ol.
create(0, __FILE__, __LINE__);
1471 ost <<
"The group has "
1473 <<
" orbits on five plus one configurations in $\\PG(3,"
1474 <<
q <<
").$" << endl << endl;
1476 ost <<
"Of these, " <<
nb <<
" impose 19 conditions."
1481 <<
" are associated with double sixes. "
1482 "They are:" << endl << endl;
1502 <<
"$ is orbit $" << i <<
" / " << l <<
"$ $" << endl;
1504 ost <<
"$ orbit length $";
1506 ost <<
"$\\\\" << endl;
1511 ost <<
"The overall number of five plus one configurations "
1512 "associated with double sixes in $\\PG(3," <<
q
1513 <<
")$ is: " << Ol <<
"\\\\" << endl;
1520 int *transporter,
int &orbit_index,
int verbose_level)
1522 int f_v = (verbose_level >= 1);
1523 int f_vv = (verbose_level >= 4);
1527 long int transversal_line;
1528 long int five_lines[5];
1529 long int five_lines_out_as_neighbors[5];
1534 cout <<
"classify_double_sixes::identify_double_six" << endl;
1540 cout <<
"classify_double_sixes::identify_double_six "
1541 "identifying the five lines a_1,...,a_5 "
1542 "with transversal b_6" << endl;
1544 transversal_line = double_six[11];
1548 five_lines_out_as_neighbors, po,
1552 cout <<
"po=" << po << endl;
1553 cout <<
"Elt1=" << endl;
1559 cout <<
"classify_double_sixes::identify_double_six "
1560 "did not find po in Po" << endl;
1565 cout <<
"po=" << po <<
" f=" << f << endl;
1581 cout <<
"classify_double_sixes::identify_double_six "
1582 "f=" << f <<
" f2=" << f2 <<
" orbit_index="
1583 << orbit_index << endl;
1587 cout <<
"transporter=" << endl;
1594 cout <<
"classify_double_sixes::identify_double_six done" << endl;
1600 int f_v = (verbose_level >= 1);
1604 cout <<
"classify_double_sixes::write_file" << endl;
1606 fp.write((
char *) &
q,
sizeof(int));
1608 fp.write((
char *) &
len,
sizeof(int));
1609 fp.write((
char *) &
nb,
sizeof(int));
1612 for (i = 0; i <
nb; i++) {
1613 fp.write((
char *) &
Idx[i],
sizeof(int));
1616 fp.write((
char *) &
Po[i],
sizeof(int));
1621 cout <<
"classify_double_sixes::write_file before Five_plus_one->write_file" << endl;
1626 cout <<
"classify_double_sixes::write_file after Five_plus_one->write_file" << endl;
1631 cout <<
"classify_double_sixes::write_file before Flag_orbits->write_file" << endl;
1635 cout <<
"classify_double_sixes::write_file after Flag_orbits->write_file" << endl;
1639 cout <<
"classify_double_sixes::write_file before Double_sixes->write_file" << endl;
1643 cout <<
"classify_double_sixes::write_file after Double_sixes->write_file" << endl;
1647 cout <<
"classify_double_sixes::write_file finished" << endl;
1653 int f_v = (verbose_level >= 1);
1654 int i, nb_flag_orbits;
1657 cout <<
"classify_double_sixes::read_file" << endl;
1659 fp.read((
char *) &
q,
sizeof(int));
1661 fp.read((
char *) &
len,
sizeof(int));
1662 fp.read((
char *) &
nb,
sizeof(int));
1663 fp.read((
char *) &nb_flag_orbits,
sizeof(int));
1666 cout <<
"classify_double_sixes::read_file q=" <<
q << endl;
1667 cout <<
"classify_double_sixes::read_file nb_neighbors=" <<
nb_neighbors << endl;
1668 cout <<
"classify_double_sixes::read_file len=" <<
len << endl;
1669 cout <<
"classify_double_sixes::read_file nb=" <<
nb << endl;
1670 cout <<
"classify_double_sixes::read_file nb_flag_orbits=" << nb_flag_orbits << endl;
1674 for (i = 0; i <
nb; i++) {
1675 fp.read((
char *) &
Idx[i],
sizeof(
int));
1679 for (i = 0; i < nb_flag_orbits; i++) {
1680 fp.read((
char *) &
Po[i],
sizeof(
int));
1684 int depth_completed;
1687 cout <<
"classify_double_sixes::read_file before Five_plus_one->read_file" << endl;
1691 cout <<
"classify_double_sixes::read_file after Five_plus_one->read_file" << endl;
1693 if (depth_completed != 5) {
1694 cout <<
"classify_double_sixes::read_file "
1695 "depth_completed != 5" << endl;
1704 cout <<
"classify_double_sixes::read_file before Flag_orbits->read_file" << endl;
1708 cout <<
"classify_double_sixes::read_file after Flag_orbits->read_file" << endl;
1720 cout <<
"classify_double_sixes::read_file before Double_sixes->read_file" << endl;
1724 cout <<
"classify_double_sixes::read_file after Double_sixes->read_file" << endl;
1728 cout <<
"classify_double_sixes::read_file finished" << endl;
1735 int f_v = (verbose_level >= 1);
1741 cout <<
"classify_double_sixes::line_to_neighbor" << endl;
1746 cout <<
"classify_double_sixes::line_to_neighbor line " << line_rk
1747 <<
" = point " << point_rk <<
" not found in Neighbors[]" << endl;
1756static void callback_partial_ovoid_test_early(
long int *S,
int len,
1757 long int *candidates,
int nb_candidates,
1758 long int *good_candidates,
int &nb_good_candidates,
1759 void *data,
int verbose_level)
1762 int f_v = (verbose_level >= 1);
1765 cout <<
"callback_partial_ovoid_test_early for set ";
1770 candidates, nb_candidates,
1771 good_candidates, nb_good_candidates,
1774 cout <<
"callback_partial_ovoid_test_early done" << endl;
void line_to_wedge_vec(long int *Line_rk, long int *Wedge_rk, int len)
int rank_of_system(int len, long int *S, int verbose_level)
orthogonal_geometry::orthogonal * O
void make_spreadsheet_of_lines_in_three_kinds(data_structures::spreadsheet *&Sp, long int *Wedge_rk, long int *Line_rk, long int *Klein_rk, int nb_lines, int verbose_level)
void klein_to_wedge_vec(long int *Klein_rk, long int *Wedge_rk, int len)
void wedge_to_klein(int *W, int *K)
geometry::klein_correspondence * Klein
void apply(long int *from, long int *through, long int *to, int len)
a collection of functions related to sorted vectors
int int_vec_search(int *v, int len, int a, int &idx)
void lint_vec_search_vec(long int *v, int len, long int *A, int A_sz, long int *Idx)
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)
for reading and writing of csv files
void fill_column_with_text(int col_idx, const char **text, const char *heading)
void fill_column_with_row_index(int col_idx, const char *heading)
void save(std::string &fname, int verbose_level)
void init_empty_table(int nb_rows, int nb_cols)
void fill_column_with_int(int col_idx, int *data, const char *heading)
void print_set(long int *v, int len)
long int line_to_point_on_quadric(long int line_rk, int verbose_level)
long int point_on_quadric_to_line(long int point_rk, int verbose_level)
options for drawing an object of type layered_graph
data_structures::lint_vec * Lint_vec
interface to system functions
long int rank_point(int *v, int stride, int verbose_level)
int evaluate_bilinear_form(int *u, int *v, int stride)
void perp(long int pt, long int *Perp_without_pt, int &sz, int verbose_level)
domain to compute with objects of type longinteger
void add_in_place(longinteger_object &a, longinteger_object &b)
a class to represent arbitrary precision integers
std::ostream & print_not_scientific(std::ostream &ost)
void create(long int i, const char *file, int line)
a permutation group in a fixed action.
void element_print_quick(void *elt, std::ostream &ost)
void element_print(void *elt, std::ostream &ost)
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)
symmetry_group_type type_G
void report(std::ostream &ost, int f_sims, groups::sims *S, int f_strong_gens, groups::strong_generators *SG, graphics::layered_graph_draw_options *LG_Draw_options, int verbose_level)
groups::strong_generators * Strong_gens
int f_has_strong_generators
void latex_all_points(std::ostream &ost)
void element_code_for_make_element(void *elt, int *data)
void make_element_which_moves_a_line_in_PG3q(geometry::grassmann *Gr, long int line_rk, int *Elt, int verbose_level)
void element_invert(void *a, void *av, int verbose_level)
void element_move(void *a, void *b, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
action * create_induced_action_by_restriction(groups::sims *S, int size, long int *set, int f_induce, int verbose_level)
a set and its known set stabilizer
groups::strong_generators * Strong_gens
void print_set_tex(std::ostream &ost)
to hold a vector of group elements
void allocate(int length, int verbose_level)
void reallocate(int new_length, int verbose_level)
void init(actions::action *A, int verbose_level)
a strong generating set for a permutation group with respect to a fixed action
void generators_for_parabolic_subgroup(actions::action *A_PGL_n_q, matrix_group *Mtx, int k, int verbose_level)
strong_generators * create_copy()
void print_generators_tex()
void init_group_extension(strong_generators *subgroup, int *data, int index, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
void unrank_point(int *v, long int rk)
a single step classification of combinatorial objects
void write_file(std::ofstream &fp, int verbose_level)
void init(actions::action *A, actions::action *A2, int max_orbits, int representation_sz, ring_theory::longinteger_object &go, int verbose_level)
void read_file(std::ifstream &fp, actions::action *A, actions::action *A2, ring_theory::longinteger_object &go, int verbose_level)
void init(flag_orbits *Flag_orbits, int flag_orbit_index, int downstep_primary_orbit, int downstep_secondary_orbit, int downstep_orbit_len, int f_long_orbit, long int *pt_representation, groups::strong_generators *Strong_gens, int verbose_level)
int downstep_primary_orbit
groups::strong_generators * gens
int downstep_secondary_orbit
stores the set of flag orbits; related to the class classification_step
void init(actions::action *A, actions::action *A2, int nb_primary_orbits_lower, int pt_representation_sz, int nb_flag_orbits, int upper_bound_for_number_of_traces, void(*func_to_free_received_trace)(void *trace_result, void *data, int verbose_level), void(*func_latex_report_trace)(std::ostream &ost, void *trace_result, void *data, int verbose_level), void *free_received_trace_data, int verbose_level)
void read_file(std::ifstream &fp, actions::action *A, actions::action *A2, int verbose_level)
flag_orbit_node * Flag_orbit_node
int nb_primary_orbits_upper
void write_file(std::ofstream &fp, int verbose_level)
void init(classification_step *C, int orbit_index, groups::strong_generators *gens, long int *Rep, void *extra_data, int verbose_level)
to control the behavior of the poset classification algorithm
to control the behavior of the poset classification report function
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 trace_set(long int *set, int size, int level, long int *canonical_set, int *Elt_transporter, int verbose_level)
data_structures_groups::set_and_stabilizer * get_set_and_stabilizer(int level, int orbit_at_level, int verbose_level)
int main(int t0, int schreier_depth, int f_use_invariant_subset_if_available, int f_debug, int verbose_level)
void orbit_length(int orbit_at_level, int level, ring_theory::longinteger_object &len)
void make_spreadsheet_of_orbit_reps(data_structures::spreadsheet *&Sp, int max_depth)
int nb_orbits_at_level(int level)
void write_file(std::ofstream &fp, int depth_completed, int verbose_level)
void get_set_by_level(int level, int node, long int *set)
void get_stabilizer_order(int level, int orbit_at_level, ring_theory::longinteger_object &go)
void read_file(std::ifstream &fp, int &depth_completed, int verbose_level)
void report(std::ostream &ost, poset_classification_report_options *Opt, int verbose_level)
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)
void add_testing_without_group(void(*func)(long int *S, int len, long int *candidates, int nb_candidates, long int *good_candidates, int &nb_good_candidates, void *data, int verbose_level), void *data, int verbose_level)
classification of double sixes in PG(3,q)
void upstep(int verbose_level)
void downstep(int verbose_level)
field_theory::finite_field * F
ring_theory::longinteger_object go
long int * Pts_wedge_to_line
void make_spreadsheet_of_neighbors(data_structures::spreadsheet *&Sp, int verbose_level)
long int * line_to_pts_wedge
int * Pts_for_partial_ovoid_test
void init(cubic_surfaces_in_general::surface_with_action *Surf_A, poset_classification::poset_classification_control *Control, int verbose_level)
void write_file(std::ofstream &fp, int verbose_level)
void partial_ovoid_test_early(long int *S, int len, long int *candidates, int nb_candidates, long int *good_candidates, int &nb_good_candidates, int verbose_level)
invariant_relations::flag_orbits * Flag_orbits
long int * Neighbor_to_line
void test_orbits(int verbose_level)
void compute_neighbors(int verbose_level)
void classify_partial_ovoids(int verbose_level)
void report(std::ostream &ost, graphics::layered_graph_draw_options *draw_options, poset_classification::poset_classification_report_options *Opt, int verbose_level)
void read_file(std::ifstream &fp, int verbose_level)
invariant_relations::classification_step * Double_sixes
void identify_five_plus_one(long int *five_lines, long int transversal_line, long int *five_lines_out_as_neighbors, int &orbit_index, int *transporter, int verbose_level)
poset_classification::poset_classification * Five_plus_one
void make_spreadsheet_of_fiveplusone_configurations(data_structures::spreadsheet *&Sp, int verbose_level)
induced_actions::action_on_wedge_product * AW
poset_classification::poset_classification_control * Control
algebraic_geometry::surface_domain * Surf
int line_to_neighbor(long int line_rk, int verbose_level)
actions::action * A_on_neighbors
groups::strong_generators * stab_gens
void print_five_plus_ones(std::ostream &ost)
long int * Neighbor_to_klein
void classify(int verbose_level)
poset_classification::poset_with_group_action * Poset
cubic_surfaces_in_general::surface_with_action * Surf_A
void identify_double_six(long int *double_six, int *transporter, int &orbit_index, int verbose_level)
groups::strong_generators * SG_line_stab
cubic surfaces in projective space with automorphism group
projective_geometry::projective_space_with_action * PA
int create_double_six_from_five_lines_with_a_common_transversal(long int *five_lines, long int transversal_line, long int *double_six, int verbose_level)
algebraic_geometry::surface_domain * Surf
actions::action * A_wedge
field_theory::finite_field * F
#define Lint_vec_copy(A, B, C)
#define Lint_matrix_print(A, B, C)
#define Int_vec_zero(A, B)
#define Lint_vec_print(A, B, C)
#define Lint_vec_print_to_str(A, B, C)
#define Int_vec_print(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
@ action_on_wedge_product_t
the orbiter library for the classification of combinatorial objects
induced_actions::action_on_wedge_product * AW
groups::matrix_group * matrix_grp