15namespace layer5_applications {
16namespace applications_in_algebraic_geometry {
17namespace cubic_surfaces_and_double_sixes {
59 int verbose_level = 0;
60 int f_v = (verbose_level >= 1);
73 cout <<
"surface_classify_wedge::freeself" << endl;
89 cout <<
"surface_classify_wedge::freeself before FREE_OBJECTS(Flag_orbits)" << endl;
95 cout <<
"surface_classify_wedge::freeself before FREE_OBJECTS(Surfaces)" << endl;
102 cout <<
"surface_classify_wedge::freeself before FREE_OBJECTS(Classify_double_sixes)" << endl;
108 cout <<
"surface_classify_wedge::freeself done" << endl;
118 int f_v = (verbose_level >= 1);
122 cout <<
"surface_classify_wedge::init" << endl;
132 sprintf(str,
"%d",
q);
150 cout <<
"surface_classify_wedge::init "
151 "before Classify_double_sixes->init" << endl;
155 cout <<
"surface_classify_wedge::init "
156 "after Classify_double_sixes->init" << endl;
160 cout <<
"surface_classify_wedge::init done" << endl;
166 int f_v = (verbose_level >= 1);
169 cout <<
"surface_classify_wedge::do_classify_double_sixes" << endl;
170 cout <<
"verbose_level = " << verbose_level << endl;
175 cout <<
"surface_classify_wedge::do_classify_double_sixes before "
176 "read_double_sixes" << endl;
180 cout <<
"surface_classify_wedge::do_classify_double_sixes after "
181 "read_double_sixes" << endl;
188 cout <<
"surface_classify_wedge::do_classify_double_sixes before "
189 "Classify_double_sixes->classify_partial_ovoids" << endl;
193 cout <<
"surface_classify_wedge::do_classify_double_sixes after "
194 "Classify_double_sixes->classify_partial_ovoids" << endl;
198 cout <<
"surface_classify_wedge::do_classify_double_sixes before "
199 "Classify_double_sixes->classify" << endl;
203 cout <<
"surface_classify_wedge::do_classify_double_sixes after "
204 "Classify_double_sixes->classify" << endl;
210 cout <<
"surface_classify_wedge::do_classify_double_sixes before "
211 "write_double_sixes" << endl;
215 cout <<
"surface_classify_wedge::do_classify_double_sixes after "
216 "write_double_sixes" << endl;
220 cout <<
"surface_classify_wedge::do_classify_double_sixes writing cheat sheet "
221 "on double sixes" << endl;
225 cout <<
"surface_classify_wedge::do_classify_double_sixes writing cheat sheet on "
226 "double sixes done" << endl;
230 cout <<
"surface_classify_wedge::do_classify_double_sixes done" << endl;
236 int f_v = (verbose_level >= 1);
239 cout <<
"surface_classify_wedge::do_classify_surfaces" << endl;
244 cout <<
"surface_classify_wedge::do_classify_surfaces before "
245 "read_surfaces" << endl;
249 cout <<
"surface_classify_wedge::do_classify_surfaces after "
250 "read_surfaces" << endl;
257 cout <<
"surface_classify_wedge::do_classify_surfaces classifying surfaces" << endl;
261 cout <<
"surface_classify_wedge::do_classify_surfaces before "
262 "SCW->classify_surfaces_from_double_sixes" << endl;
266 cout <<
"surface_classify_wedge::do_classify_surfaces after "
267 "SCW->classify_surfaces_from_double_sixes" << endl;
271 cout <<
"surface_classify_wedge::do_classify_surfaces before "
272 "write_surfaces" << endl;
276 cout <<
"surface_classify_wedge::do_classify_surfaces after "
277 "write_surfaces" << endl;
281 cout <<
"surface_classify_wedge::do_classify_surfaces done" << endl;
288 int f_v = (verbose_level >= 1);
291 cout <<
"surface_classify_wedge::classify_surfaces_from_double_sixes" << endl;
292 cout <<
"verbose_level = " << verbose_level << endl;
297 cout <<
"surface_classify_wedge::classify_surfaces_from_double_sixes before downstep" << endl;
301 cout <<
"surface_classify_wedge::classify_surfaces_from_double_sixes after downstep" << endl;
303 <<
" flag orbits out of "
305 <<
" orbits of double sixes" << endl;
309 cout <<
"surface_classify_wedge::classify_surfaces_from_double_sixes before upstep" << endl;
313 cout <<
"surface_classify_wedge::classify_surfaces_from_double_sixes after upstep" << endl;
315 <<
" surfaces out from "
317 <<
" double sixes" << endl;
322 cout <<
"surface_classify_wedge::classify_surfaces_from_double_sixes done" << endl;
328 int f_v = (verbose_level >= 1);
329 int f_vv = (verbose_level >= 2);
330 int i, nb_orbits, nb_flag_orbits;
333 cout <<
"surface_classify_wedge::downstep" << endl;
334 cout <<
"verbose_level = " << verbose_level << endl;
351 cout <<
"surface_classify_wedge::downstep "
352 "initializing flag orbits" << endl;
356 for (i = 0; i < nb_orbits; i++) {
359 cout <<
"surface_classify_wedge::downstep "
360 "orbit " << i <<
" / " << nb_orbits << endl;
376 cout <<
"surface_classify_wedge::downstep "
377 "before create_the_fifteen_other_lines" << endl;
385 cout <<
"surface_classify_wedge::downstep "
386 "after create_the_fifteen_other_lines" << endl;
391 cout <<
"surface_classify_wedge::downstep "
392 "before Flag_orbit_node[].init" << endl;
407 cout <<
"surface_classify_wedge::downstep "
408 "after Flag_orbit_node[].init" << endl;
423 cout <<
"surface_classify_wedge::downstep "
424 "initializing flag orbits done" << endl;
430 int f_v = (verbose_level >= 1);
436 cout <<
"surface_classify_wedge::upstep" << endl;
437 cout <<
"verbose_level = " << verbose_level << endl;
460 if (f_processed[f]) {
464 progress = ((double)nb_processed * 100. ) /
468 cout <<
"Defining another orbit "
470 <<
" from flag orbit " << f <<
" / "
472 <<
" progress=" << progress <<
"%" << endl;
479 cout <<
"Flag_orbits->pt_representation_sz != 27" << endl;
485 cout <<
"po=" << po <<
" so=" << so << endl;
512 cout <<
"po=" << po <<
" so=" << so <<
" go=" << go << endl;
516 for (i = 0; i < 36; i++) {
520 <<
", upstep i=" << i <<
" / 36" << endl;
524 long int double_six[12];
527 for (j = 0; j < 12; j++) {
531 cout <<
"f=" << f <<
" / "
533 <<
", upstep i=" << i
534 <<
" / 36 double_six=";
543 cout <<
"f=" << f <<
" / "
546 <<
" / 36, double six is "
547 "isomorphic to orbit " << f2 << endl;
553 cout <<
"We found an automorphism of the surface:" << endl;
562 cout <<
"We are identifying flag orbit " << f2
563 <<
" with flag orbit " << f << endl;
565 if (!f_processed[f2]) {
574 f_processed[f2] =
TRUE;
578 cout <<
"Flag orbit " << f2 <<
" has already been "
579 "identified with flag orbit " << f << endl;
581 cout <<
"Flag_orbits->Flag_orbit_node[f2]."
582 "fusion_with != f" << endl;
599 cout <<
"surface_classify_wedge::upstep "
601 "group by a factor of " << nb_coset_reps << endl;
611 cout <<
"the double six has a stabilizer of order "
613 cout <<
"The double six stabilizer is:" << endl;
623 Aut_gens, Lines, NULL , verbose_level - 4);
628 f_processed[f] =
TRUE;
635 cout <<
"nb_processed != Flag_orbits->nb_flag_orbits" << endl;
636 cout <<
"nb_processed = " << nb_processed << endl;
637 cout <<
"Flag_orbits->nb_flag_orbits = "
646 <<
" orbits of surfaces from "
648 <<
" double sixes" << endl;
655 cout <<
"surface_classify_wedge::upstep done" << endl;
662 int f_v = (verbose_level >= 1);
664 int *Starter_configuration_idx;
673 long int four_lines[4];
679 cout <<
"surface_classify_wedge::derived_arcs" << endl;
683 cout <<
"surface " << iso_type <<
" / "
688 Starter_configuration_idx, nb_starter_conf, verbose_level);
691 cout <<
"There are " << nb_starter_conf
692 <<
" starter configurations which are involved: " << endl;
693 Int_vec_print(cout, Starter_configuration_idx, nb_starter_conf);
697 for (c = 0; c < nb_starter_conf; c++) {
698 orb = Starter_configuration_idx[c];
703 cout <<
"configuration " << c <<
" / " << nb_starter_conf
704 <<
" is orbit " << orb << endl;
710 cout <<
"starter configuration as neighbors: ";
719 four_lines[0] = S2[0];
720 four_lines[1] = S2[1];
721 four_lines[2] = S2[2];
722 four_lines[3] = S2[3];
724 trans12, perp_sz, 0 );
733 cout <<
"something is wrong with the starter configuration" << endl;
741 long int lines_meet3[3];
742 long int lines_skew3[3];
744 lines_meet3[0] = S2[1];
745 lines_meet3[1] = S2[2];
746 lines_meet3[2] = S2[3];
747 lines_skew3[0] = S2[0];
749 lines_skew3[2] = S2[5];
752 lines_skew3, lines, nb_lines,
757 cout <<
"The lines which meet { a_2, a_3, a_4 } "
758 "and are skew to { a_1, b_5, b_6 } are: ";
761 cout <<
"generator matrices:" << endl;
767 lines_meet3[0] = S2[0];
768 lines_meet3[1] = S2[2];
769 lines_meet3[2] = S2[3];
770 lines_skew3[0] = S2[1];
772 lines_skew3[2] = S2[5];
775 lines_skew3, lines, nb_lines,
780 cout <<
"The lines which meet { a_1, a_3, a_4 } "
781 "and are skew to { a_2, b_5, b_6 } are: ";
784 cout <<
"generator matrices:" << endl;
792 cout <<
"starter configuration as line ranks: ";
795 cout <<
"b5=" << b5 << endl;
796 cout <<
"generator matrices:" << endl;
798 cout <<
"b5:" << endl;
803 for (
int h = 0; h < 7; h++) {
808 cout <<
"starter configuration on the klein quadric: ";
811 for (i = 0; i < 7; i++) {
813 cout << i <<
" / " << 6 <<
" : ";
821 for (i = 0; i < 4; i++) {
827 cout <<
"The associated arc is ";
830 for (i = 0; i < 6; i++) {
832 cout << i <<
" & " << Arc[i] <<
" & ";
834 cout <<
" \\\\" << endl;
840 FREE_int(Starter_configuration_idx);
844 cout <<
"surface_classify_wedge::derived_arcs done" << endl;
849 int iso_type,
int *&Starter_configuration_idx,
int &nb_starter_conf,
852 int f_v = (verbose_level >= 1);
857 cout <<
"surface_classify_wedge::starter_configurations_which_are_involved" << endl;
871 if (iso == iso_type) {
875 nb_starter_conf = cnt;
877 Starter_configuration_idx =
NEW_int(nb_starter_conf);
884 if (iso == iso_type) {
885 Starter_configuration_idx[cnt++] = i;
890 cout <<
"surface_classify_wedge::starter_configurations_which_are_involved" << endl;
896 ofstream &fp,
int verbose_level)
898 int f_v = (verbose_level >= 1);
901 cout <<
"surface_classify_wedge::write_file" << endl;
903 fp.write((
char *) &
q,
sizeof(int));
910 cout <<
"surface_classify_wedge::write_file finished" << endl;
915 ifstream &fp,
int verbose_level)
917 int f_v = (verbose_level >= 1);
921 cout <<
"surface_classify_wedge::read_file" << endl;
923 fp.read((
char *) &q1,
sizeof(int));
925 cout <<
"surface_classify_wedge::read_file q1 != q" << endl;
941 cout <<
"surface_classify_wedge::read_file finished" << endl;
950 int f_v = (verbose_level >= 1);
955 cout <<
"surface_classify_wedge::identify_Eckardt_and_print_table" << endl;
965 for (i = 0; i <
q; i++) {
973 cout <<
"\\begin{array}{c|*{" << m <<
"}{c}}" << endl;
974 for (i = 0; i < m; i++) {
975 cout <<
" & " << i + 2;
977 cout <<
"\\\\" << endl;
978 cout <<
"\\hline" << endl;
980 for (i = 0; i < m; i++) {
982 if (Nb_E[i + 2] == -1) {
989 cout <<
"\\\\" << endl;
990 cout <<
"\\hline" << endl;
991 cout <<
"\\mbox{Iso} ";
992 for (i = 0; i < m; i++) {
994 if (Nb_E[i + 2] == -1) {
998 cout << Iso_type[i + 2];
1001 cout <<
"\\\\" << endl;
1002 cout <<
"\\hline" << endl;
1003 cout <<
"\\end{array}" << endl;
1010 cout <<
"surface_classify_wedge::identify_Eckardt_and_print_table done" << endl;
1016 int f_v = (verbose_level >= 1);
1020 cout <<
"surface_classify_wedge::identify_F13_and_print_table" << endl;
1031 for (a = 0; a <
q; a++) {
1040 cout <<
"\\begin{array}{|c|c|c|c|}" << endl;
1041 cout <<
"\\hline" << endl;
1042 cout <<
"a & a & \\# lines & \\mbox{OCN} \\\\" << endl;
1043 cout <<
"\\hline" << endl;
1044 for (a = 1; a <
q; a++) {
1048 cout << Nb_lines[a] <<
" & ";
1050 cout << Iso_type[a] <<
"\\\\" << endl;
1052 cout <<
"\\hline" << endl;
1053 cout <<
"\\end{array}" << endl;
1059 cout <<
"surface_classify_wedge::identify_F13_and_print_table done" << endl;
1065 int f_v = (verbose_level >= 1);
1069 cout <<
"surface_classify_wedge::identify_Bes_and_print_table" << endl;
1080 for (a = 0; a <
q *
q; a++) {
1091 cout <<
"(a,c); \\# lines & \\mbox{OCN} \\\\" << endl;
1093 for (a = 2; a <
q; a++) {
1094 for (c = 2; c <
q; c++) {
1095 cout <<
"(" << a <<
"," << c <<
"); (";
1100 cout << Nb_lines[a *
q + c] <<
"; ";
1102 cout << Iso_type[a *
q + c];
1103 cout <<
"\\\\" << endl;
1114 cout <<
"surface_classify_wedge::identify_Bes_and_print_table done" << endl;
1120 int *Iso_type,
int *Nb_lines,
int verbose_level)
1122 int f_v = (verbose_level >= 1);
1123 int a, b, alpha, beta;
1128 cout <<
"surface_classify_wedge::identify_Eckardt" << endl;
1132 cout <<
"surface_classify_wedge::identify_Eckardt "
1133 "looping over all a:" << endl;
1135 for (a = 2; a <
q - 1; a++) {
1136 cout <<
"surface_classify_wedge::identify_Eckardt "
1137 "a = " << a << endl;
1151 cout <<
"surface_classify_wedge::identify_Eckardt "
1152 "a = " << a <<
" is isomorphic to iso_type "
1153 << iso_type <<
", an isomorphism is:" << endl;
1156 Iso_type[a] = iso_type;
1166 cout <<
"surface_classify_wedge::identify_Eckardt done" << endl;
1171 int *Iso_type,
int *Nb_lines,
int verbose_level)
1173 int f_v = (verbose_level >= 1);
1179 cout <<
"surface_classify_wedge::identify_F13" << endl;
1183 cout <<
"surface_classify_wedge::identify_F13 "
1184 "looping over all a:" << endl;
1185 for (a = 1; a <
q; a++) {
1186 cout <<
"surface_classify_wedge::identify_F13 "
1187 "a = " << a << endl;
1202 cout <<
"surface_classify_wedge::identify_F13 "
1203 "a = " << a <<
" is isomorphic to iso_type "
1204 << iso_type <<
", an isomorphism is:" << endl;
1207 Iso_type[a] = iso_type;
1216 cout <<
"surface_classify_wedge::identify_F13 done" << endl;
1221 int *Iso_type,
int *Nb_lines,
int verbose_level)
1223 int f_v = (verbose_level >= 1);
1230 cout <<
"surface_classify_wedge::identify_Bes" << endl;
1234 cout <<
"surface_classify_wedge::identify_Bes "
1235 "looping over all a:" << endl;
1237 for (i = 0; i <
q *
q; i++) {
1241 for (a = 2; a <
q; a++) {
1242 cout <<
"surface_classify_wedge::identify_Bes "
1243 "a = " << a << endl;
1245 for (c = 2; c <
q; c++) {
1246 cout <<
"surface_classify_wedge::identify_Bes "
1247 "a = " << a <<
" c = " << c << endl;
1249 Iso_type[a *
q + c] = -1;
1250 Nb_lines[a *
q + c] = -1;
1257 cout <<
"surface_classify_wedge::identify_Bes "
1258 "nb_lines = " << SO->
nb_lines << endl;
1264 cout <<
"surface_classify_wedge::identify_Bes "
1265 "a = " << a <<
" c = " << c <<
" is isomorphic to iso_type "
1266 << iso_type <<
", an isomorphism is:" << endl;
1269 Iso_type[a *
q + c] = iso_type;
1278 cout <<
"surface_classify_wedge::identify_Bes done" << endl;
1287 int &isomorphic_to1,
int &isomorphic_to2,
1288 int *Elt_isomorphism_1to2,
1291 int f_v = (verbose_level >= 1);
1297 cout <<
"surface_classify_wedge::isomorphism_test_pairwise" << endl;
1302 coeff1 = SC1->
SO->
eqn;
1303 coeff2 = SC2->
SO->
eqn;
1309 isomorphic_to1,
Elt1,
1313 isomorphic_to2,
Elt2,
1315 if (isomorphic_to1 != isomorphic_to2) {
1318 cout <<
"surface_classify_wedge::isomorphism_test_pairwise "
1319 "not isomorphic" << endl;
1325 cout <<
"surface_classify_wedge::isomorphism_test_pairwise "
1326 "they are isomorphic" << endl;
1331 cout <<
"an isomorphism from surface1 to surface2 is" << endl;
1339 cout <<
"testing the isomorphism" << endl;
1350 cout <<
"the inverse element is" << endl;
1356 coeff1, coeff3,
Surf,
1368 cout <<
"after substitution, normalized" << endl;
1372 cout <<
"coeff2, normalized" << endl;
1378 cout <<
"The surface equations are not equal. That is bad." << endl;
1387 cout <<
"surface_classify_wedge::isomorphism_test_pairwise done" << endl;
1393 int *coeff_of_given_surface,
1394 int &isomorphic_to,
int *Elt_isomorphism,
1397 int f_v = (verbose_level >= 1);
1398 int line_idx, subset_idx;
1399 int double_six_orbit, iso_type, idx2;
1403 cout <<
"surface_classify_wedge::identify_surface" << endl;
1412 cout <<
"identifying the surface ";
1425 vector<long int> My_Points;
1430 nb_points = My_Points.size();
1433 cout <<
"The surface to be identified has "
1434 << nb_points <<
" points" << endl;
1440 vector<long int> My_Lines;
1449 cout <<
"The surface has " << nb_points <<
" points and " << My_Lines.size() <<
" lines" << endl;
1451 if (My_Lines.size() != 27 ) {
1452 cout <<
"the input surface has " << My_Lines.size() <<
" lines" << endl;
1453 cout <<
"something is wrong with the input surface, skipping" << endl;
1469 for (h = 0; h < nb_points; h++) {
1470 Points[h] = My_Points[h];
1475 for (h = 0; h < 27; h++) {
1476 Lines[h] = My_Lines[h];
1483 Adj, Lines, 27 , 0 );
1497 line_intersections, Starter_Table, nb_starter,
1506 if (nb_starter == 0) {
1507 cout <<
"nb_starter == 0" << endl;
1511 line_idx = Starter_Table[l * 2 + 0];
1512 subset_idx = Starter_Table[l * 2 + 1];
1515 line_intersections, Lines, S3, 0 );
1519 cout <<
"surface_classify_wedge::identify_surface "
1520 "The starter configuration is S3=";
1526 for (i = 0; i < 6; i++) {
1533 for (h = 0; h < 5; h++) {
1536 cout <<
"surface_classify_wedge::identify_surface "
1537 "K1[" << h <<
"] and K1[5] are not collinear" << endl;
1547 cout <<
"surface_classify_wedge::identify_surface "
1548 "before Classify_double_sixes->identify_five_plus_one" << endl;
1559 cout <<
"surface_classify_wedge::identify_surface "
1560 "The five plus one configuration lies in orbit "
1562 cout <<
"An isomorphism is given by:" << endl;
1579 cout <<
"down coset " << l <<
" / " << nb_starter
1580 <<
" tracing the set ";
1581 int_vec_print(cout, W3, 5);
1585 W3, 5, 5, W4,
Elt1, 0 );
1595 cout <<
"cannot find orbit in Po" << endl;
1599 cout <<
"surface_classify_wedge::identify_surface "
1600 "flag orbit = " << f << endl;
1608 cout <<
"surface_classify_wedge::identify_surface "
1609 "double_six_orbit = "
1610 << double_six_orbit << endl;
1613 if (double_six_orbit < 0) {
1614 cout <<
"surface_classify_wedge::identify_surface "
1615 "double_six_orbit < 0, something is wrong" << endl;
1621 cout <<
"surface_classify_wedge::identify_surface "
1622 "the flag orbit is a fusion node" << endl;
1632 cout <<
"surface_classify_wedge::identify_surface "
1633 "the flag orbit is a definition node" << endl;
1640 cout <<
"An isomorphism is given by:" << endl;
1647 cout <<
"surface_classify_wedge::identify_surface "
1648 "iso_type = " << iso_type << endl;
1654 Elt_isomorphism, 0);
1664 cout <<
"The surface is isomorphic to surface " << iso_type << endl;
1665 cout <<
"An isomorphism is given by:" << endl;
1668 isomorphic_to = iso_type;
1670 int *Elt_isomorphism_inv;
1679 nb_points, Elt_isomorphism,
1683 cout <<
"The inverse isomorphism is given by:" << endl;
1686 cout <<
"The image of the set of points is: ";
1693 for (i = 0; i < nb_points; i++) {
1694 if (image[i] != The_surface[isomorphic_to]->Surface[i]) {
1695 cout <<
"points disagree!" << endl;
1699 cout <<
"the image set agrees with the point "
1700 "set of the chosen representative" << endl;
1705 int *coeffs_transformed;
1713 long int Lines0[27];
1716 cout <<
"the surface in the list is = " << endl;
1740 coeff_of_given_surface, coeffs_transformed,
Surf,
1744 cout <<
"coeffs_transformed = " << endl;
1752 coeffs_transformed, 1,
1755 cout <<
"the surface to be identified was " << endl;
1762 cout <<
"coeffs_transformed (and normalized) = " << endl;
1779 cout <<
"surface_classify_wedge::identify_surface done" << endl;
1784 ostream &ost,
int f_with_stabilizers,
int verbose_level)
1786 int f_v = (verbose_level >= 1);
1791 cout <<
"surface_classify_wedge::latex_surfaces" << endl;
1793 sprintf(str,
"Cubic Surfaces with 27 Lines in $\\PG(3,%d)$",
q);
1797 ost <<
"\\subsection*{The Group $\\PGGL(4," <<
q <<
")$}" << endl;
1803 ost <<
"The order of the group is ";
1805 ost <<
"\\\\" << endl;
1807 ost <<
"\\bigskip" << endl;
1818 cout <<
"surface_classify_wedge::latex_surfaces before Surfaces->print_latex" << endl;
1823 cout <<
"surface_classify_wedge::latex_surfaces after Surfaces->print_latex" << endl;
1831 cout <<
"surface_classify_wedge::latex_surfaces "
1832 "before loop over all surfaces" << endl;
1836 cout <<
"surface_classify_wedge::latex_surfaces "
1837 "before report_surface, orbit_index = " << orbit_index << endl;
1841 cout <<
"surface_classify_wedge::latex_surfaces "
1842 "after report_surface" << endl;
1846 cout <<
"surface_classify_wedge::latex_surfaces "
1847 "after loop over all surfaces" << endl;
1851 cout <<
"surface_classify_wedge::latex_surfaces done" << endl;
1856 ostream &ost,
int orbit_index,
1859 int f_v = (verbose_level >= 1);
1865 cout <<
"surface_classify_wedge::report_surface "
1866 "orbit_index = " << orbit_index << endl;
1870 ost <<
"\\section*{Surface $" <<
q <<
"\\#"
1871 << orbit_index <<
"$}" << endl;
1875 cout <<
"surface_classify_wedge::report_surface "
1876 "before Surfaces->get_set_and_stabilizer" << endl;
1881 cout <<
"surface_classify_wedge::report_surface "
1882 "after Surfaces->get_set_and_stabilizer" << endl;
1888 cout <<
"surface_classify_wedge::report_surface "
1889 "before Surf->build_cubic_surface_from_lines" << endl;
1890 cout <<
"Surf->n = " <<
Surf->
n << endl;
1895 cout <<
"surface_classify_wedge::report_surface "
1896 "after Surf->build_cubic_surface_from_lines" << endl;
1905 cout <<
"surface_classify_wedge::report_surface "
1906 "before SO->init_with_27_lines" << endl;
1915 cout <<
"surface_classify_wedge::report_surface "
1916 "after SO->init_with_27_lines" << endl;
1922 cout <<
"surface_classify_wedge::report_surface "
1923 "before SO->enumerate_points" << endl;
1929 cout <<
"surface_classify_wedge::report_surface "
1930 "before SO->compute_properties" << endl;
1934 cout <<
"surface_classify_wedge::report_surface "
1935 "after SO->compute_properties" << endl;
1947 cout <<
"surface_classify_wedge::report_surface "
1948 "before SOA->init" << endl;
1953 cout <<
"surface_classify_wedge::report_surface "
1954 "after SOA->init" << endl;
1960 ost <<
"The automorphism group of the surface has order " << ago <<
"\\\\" << endl;
1961 ost <<
"The automorphism group is the following group\\\\" << endl;
1964 cout <<
"surface_classify_wedge::report_surface "
1965 "before SaS->Strong_gens->print_generators_tex" << endl;
1970 ost <<
"\\clearpage" << endl;
1975 cout <<
"surface_classify_wedge::report_surface "
1976 "before SO->print_general" << endl;
1981 ost <<
"\\clearpage" << endl;
1987 cout <<
"surface_classify_wedge::report_surface "
1988 "before SO->print_lines" << endl;
1993 ost <<
"\\clearpage" << endl;
1999 cout <<
"surface_classify_wedge::report_surface "
2000 "before SO->print_points" << endl;
2006 ost <<
"\\clearpage" << endl;
2010 cout <<
"surface_classify_wedge::report_surface "
2011 "before SO->print_Hesse_planes" << endl;
2016 ost <<
"\\clearpage" << endl;
2021 cout <<
"surface_classify_wedge::report_surface "
2022 "before SO->print_tritangent_planes" << endl;
2027 ost <<
"\\clearpage" << endl;
2032 cout <<
"surface_classify_wedge::report_surface "
2033 "before SO->print_axes" << endl;
2042 cout <<
"surface_classify_wedge::report_surface "
2043 "before SO->print_generalized_quadrangle" << endl;
2045 SO->print_generalized_quadrangle(ost);
2048 cout <<
"surface_classify_wedge::report_surface "
2049 "before SOA->quartic" << endl;
2051 SOA->quartic(ost, verbose_level);
2059 cout <<
"surface_classify_wedge::report_surface "
2060 "orbit_index = " << orbit_index <<
" done" << endl;
2066 int f_v = (verbose_level >= 1);
2067 int f_vv = (verbose_level >= 2);
2073 cout <<
"surface_classify_wedge::generate_source_code" << endl;
2076 fname.append(
".cpp");
2079 ofstream f(fname.c_str());
2081 f <<
"static int " <<
fname_base.c_str() <<
"_nb_reps = "
2083 f <<
"static int " <<
fname_base.c_str() <<
"_size = "
2089 cout <<
"surface_classify_wedge::generate_source_code "
2090 "preparing reps" << endl;
2092 f <<
"// the equations:" << endl;
2093 f <<
"static int " <<
fname_base.c_str() <<
"_reps[] = {" << endl;
2094 for (orbit_index = 0;
2104 cout <<
"surface_classify_wedge::generate_source_code "
2105 "orbit_index = " << orbit_index << endl;
2131 cout <<
"surface_classify_wedge::generate_source_code "
2132 "preparing stab_order" << endl;
2134 f <<
"// the stabilizer orders:" << endl;
2135 f <<
"static const char *" <<
fname_base.c_str() <<
"_stab_order[] = {" << endl;
2136 for (orbit_index = 0;
2154 cout <<
"surface_classify_wedge::generate_source_code "
2155 "preparing nb_E" << endl;
2157 f <<
"// the number of Eckardt points:" << endl;
2158 f <<
"static int " <<
fname_base.c_str() <<
"_nb_E[] = { " << endl <<
"\t";
2159 for (orbit_index = 0;
2171 cout <<
"surface_classify_wedge::generate_source_code "
2172 "orbit_index = " << orbit_index << endl;
2184 vector<long int> Points;
2190 nb_pts = Points.size();
2192 for (h = 0; h < nb_pts; h++) {
2198 cout <<
"surface_classify_wedge::generate_source_code "
2199 "nb_pts != Surf->nb_pts_on_surface_with_27_lines" << endl;
2216 if (orbit_index < Surfaces->nb_orbits - 1) {
2219 if (((orbit_index + 1) % 10) == 0) {
2232 f <<
"static int " << prefix <<
"_single_six[] = { " << endl;
2233 for (iso_type = 0; iso_type < nb_iso; iso_type++) {
2234 f <<
"\t" << The_surface[iso_type]->S2[5];
2235 for (j = 0; j < 5; j++) {
2237 f << The_surface[iso_type]->S2[j];
2246 cout <<
"surface_classify_wedge::generate_source_code "
2247 "preparing Lines" << endl;
2249 f <<
"// the lines in the order double six "
2250 "a_i, b_i and 15 more lines c_ij:" << endl;
2251 f <<
"static int " <<
fname_base.c_str() <<
"_Lines[] = { " << endl;
2254 for (orbit_index = 0;
2263 cout <<
"surface_classify_wedge::generate_source_code "
2264 "orbit_index = " << orbit_index << endl;
2272 for (j = 0; j < 27; j++) {
2282 f <<
"static int " <<
fname_base.c_str() <<
"_make_element_size = "
2286 int *stab_gens_first;
2293 for (orbit_index = 0;
2296 stab_gens_first[orbit_index] = fst;
2297 stab_gens_len[orbit_index] =
2301 fst += stab_gens_len[orbit_index];
2306 cout <<
"surface_classify_wedge::generate_source_code "
2307 "preparing stab_gens_fst" << endl;
2309 f <<
"static int " <<
fname_base.c_str() <<
"_stab_gens_fst[] = { ";
2310 for (orbit_index = 0;
2313 f << stab_gens_first[orbit_index];
2314 if (orbit_index < Surfaces->nb_orbits - 1) {
2317 if (((orbit_index + 1) % 10) == 0) {
2324 cout <<
"surface_classify_wedge::generate_source_code "
2325 "preparing stab_gens_len" << endl;
2327 f <<
"static int " <<
fname_base.c_str() <<
"_stab_gens_len[] = { ";
2328 for (orbit_index = 0;
2331 f << stab_gens_len[orbit_index];
2332 if (orbit_index < Surfaces->nb_orbits - 1) {
2335 if (((orbit_index + 1) % 10) == 0) {
2343 cout <<
"surface_classify_wedge::generate_source_code "
2344 "preparing stab_gens" << endl;
2346 f <<
"static int " <<
fname_base.c_str() <<
"_stab_gens[] = {" << endl;
2347 for (orbit_index = 0;
2352 for (j = 0; j < stab_gens_len[orbit_index]; j++) {
2354 cout <<
"surface_classify_wedge::generate_source_code "
2355 "before extract_strong_generators_in_"
2356 "order generator " << j <<
" / "
2357 << stab_gens_len[orbit_index] << endl;
2377 cout <<
"written file " << fname <<
" of size "
2378 << Fio.
file_size(fname.c_str()) << endl;
2380 cout <<
"surface_classify_wedge::generate_source_code done" << endl;
2387 int f_v = (verbose_level >= 1);
2390 cout <<
"surface_classify_wedge::generate_history" << endl;
2394 cout <<
"surface_classify_wedge::generate_history done" << endl;
2405 sprintf(fname,
"Surfaces_q%d.data",
q);
2417 int f_v = (verbose_level >= 1);
2420 cout <<
"surface_classify_wedge::write_surfaces" << endl;
2425 sprintf(fname,
"Surfaces_q%d.data",
q);
2431 cout <<
"surface_classify before SCW->write_file" << endl;
2435 cout <<
"surface_classify after SCW->write_file" << endl;
2438 cout <<
"Written file " << fname <<
" of size "
2441 cout <<
"surface_classify_wedge::write_surfaces done" << endl;
2447 int f_v = (verbose_level >= 1);
2450 cout <<
"surface_classify_wedge::read_surfaces" << endl;
2455 sprintf(fname,
"Surfaces_q%d.data",
q);
2456 cout <<
"Reading file " << fname <<
" of size "
2462 cout <<
"surface_classify before SCW->read_file" << endl;
2466 cout <<
"surface_classify after SCW->read_file" << endl;
2470 cout <<
"surface_classify_wedge::read_surfaces done" << endl;
2480 sprintf(fname,
"Double_sixes_q%d.data",
q);
2492 int f_v = (verbose_level >= 1);
2495 cout <<
"surface_classify_wedge::write_double_sixes" << endl;
2500 sprintf(fname,
"Double_sixes_q%d.data",
q);
2506 cout <<
"surface_classify before "
2507 "SCW->Classify_double_sixes->write_file" << endl;
2511 cout <<
"surface_classify after "
2512 "SCW->Classify_double_sixes->write_file" << endl;
2515 cout <<
"Written file " << fname <<
" of size "
2518 cout <<
"surface_classify_wedge::write_double_sixes done" << endl;
2524 int f_v = (verbose_level >= 1);
2527 cout <<
"surface_classify_wedge::read_double_sixes" << endl;
2532 sprintf(fname,
"Double_sixes_q%d.data",
q);
2534 cout <<
"Reading file " << fname <<
" of size "
2542 cout <<
"surface_classify before "
2543 "SCW->Classify_double_sixes->read_file" << endl;
2547 cout <<
"surface_classify after "
2548 "SCW->Classify_double_sixes->read_file" << endl;
2552 cout <<
"surface_classify_wedge::read_double_sixes done" << endl;
2562 int f_v = (verbose_level >= 1);
2565 cout <<
"surface_classify_wedge::create_report" << endl;
2572 snprintf(title, 1000,
"Cubic Surfaces with 27 Lines over GF(%d) ",
q);
2573 strcpy(author,
"Orbiter");
2574 snprintf(fname, 1000,
"Surfaces_q%d.tex",
q);
2594 cout <<
"surface_classify_wedge::create_report before report" << endl;
2596 report(fp, f_with_stabilizers, draw_options, Opt, verbose_level - 1);
2598 cout <<
"surface_classify_wedge::create_report after report" << endl;
2604 cout <<
"Written file " << fname <<
" of size "
2613 int f_v = (verbose_level >= 1);
2616 cout <<
"surface_classify_wedge::report" << endl;
2622 ost <<
"\\section{The field of order " << LG->F->q <<
"}" << endl;
2623 ost <<
"\\noindent The field ${\\mathbb F}_{"
2625 <<
"}$ :\\\\" << endl;
2626 LG->F->cheat_sheet(ost, verbose_level);
2630 cout <<
"surface_classify_wedge::report before Classify_double_sixes->report" << endl;
2634 cout <<
"surface_classify_wedge::report after Classify_double_sixes->report" << endl;
2638 cout <<
"surface_classify_wedge::report "
2639 "before Classify_double_sixes->print_five_plus_ones" << endl;
2643 cout <<
"surface_classify_wedge::report "
2644 "after Classify_double_sixes->print_five_plus_ones" << endl;
2649 cout <<
"surface_classify_wedge::report "
2650 "before Classify_double_sixes->Flag_orbits->print_latex" << endl;
2654 cout <<
"surface_classify_wedge::report "
2655 "after Classify_double_sixes->Flag_orbits->print_latex" << endl;
2659 cout <<
"surface_classify_wedge::report "
2660 "before Classify_double_sixes->Double_sixes->print_latex" << endl;
2665 title.assign(
"Double Sixes");
2670 cout <<
"surface_classify_wedge::report "
2671 "after Classify_double_sixes->Double_sixes->print_latex" << endl;
2675 cout <<
"surface_classify_wedge::report before Flag_orbits->print_latex" << endl;
2679 cout <<
"surface_classify_wedge::report after Flag_orbits->print_latex" << endl;
2683 cout <<
"surface_classify_wedge::report before Surfaces->print_latex" << endl;
2688 title.assign(
"Surfaces");
2693 cout <<
"surface_classify_wedge::report after Surfaces->print_latex" << endl;
2697 cout <<
"surface_classify_wedge::report before latex_surfaces" << endl;
2701 cout <<
"surface_classify_wedge::report after latex_surfaces" << endl;
2705 cout <<
"surface_classify_wedge::report done" << endl;
2711 int f_v = (verbose_level >= 1);
2714 cout <<
"surface_classify_wedge::create_report_double_sixes" << endl;
2721 snprintf(title, 1000,
"Cheat Sheet on Double Sixes over GF(%d) ",
q);
2723 snprintf(fname, 1000,
"Double_sixes_q%d.tex",
q);
2743 cout <<
"surface_classify_wedge::create_report_double_sixes "
2744 "before Classify_double_sixes->print_five_plus_ones" << endl;
2748 cout <<
"surface_classify_wedge::create_report_double_sixes "
2749 "after Classify_double_sixes->print_five_plus_ones" << endl;
2755 title.assign(
"Double Sixes");
2757 cout <<
"surface_classify_wedge::create_report_double_sixes "
2758 "before Classify_double_sixes->Double_sixes->print_latex" << endl;
2764 cout <<
"surface_classify_wedge::create_report_double_sixes "
2765 "after Classify_double_sixes->Double_sixes->print_latex" << endl;
2774 cout <<
"Written file " << fname <<
" of size "
2778 cout <<
"surface_classify_wedge::create_report_double_sixes done" << endl;
2787 int f_v = (verbose_level >= 1);
2790 cout <<
"surface_classify_wedge::test_isomorphism" << endl;
2799 cout <<
"before SC1->init" << endl;
2803 cout <<
"after SC1->init" << endl;
2807 cout <<
"before SC2->init" << endl;
2811 cout <<
"after SC2->init" << endl;
2816 int *Elt_isomorphism_1to2;
2821 isomorphic_to1, isomorphic_to2,
2822 Elt_isomorphism_1to2,
2826 cout <<
"The surfaces are isomorphic, "
2827 "an isomorphism is given by" << endl;
2829 cout <<
"The surfaces belongs to iso type "
2830 << isomorphic_to1 << endl;
2835 cout <<
"The surfaces are NOT isomorphic." << endl;
2836 cout <<
"surface 1 belongs to iso type "
2837 << isomorphic_to1 << endl;
2838 cout <<
"surface 2 belongs to iso type "
2839 << isomorphic_to2 << endl;
2843 cout <<
"surface_classify_wedge::test_isomorphism done" << endl;
2854 int f_v = (verbose_level >= 1);
2857 cout <<
"surface_classify_wedge::recognition" << endl;
2866 cout <<
"before SC->init" << endl;
2870 cout <<
"after SC->init" << endl;
2874 int *Elt_isomorphism;
2879 isomorphic_to, Elt_isomorphism,
2882 cout <<
"surface belongs to iso type "
2883 << isomorphic_to << endl;
2888 cout <<
"before SG->stabilizer_of_cubic_surface_from_catalogue" << endl;
2896 SG, Elt_isomorphism, verbose_level);
2901 cout <<
"The full stabilizer has order " << go << endl;
2902 cout <<
"And is generated by" << endl;
2906 cout <<
"surface_classify_wedge::recognition done" << endl;
2914 int f_v = (verbose_level >= 1);
2917 cout <<
"surface_classify_wedge::sweep_Cayley" << endl;
2920 int *Elt_isomorphism;
2926 int q4 =
q *
q *
q *
q;
2931 int nb_identified = 0;
2940 Table_reverse =
NEW_int(nb_iso * 5);
2942 for (h = 0; h < nb_iso; h++) {
2943 Table_reverse[h * 5 + 0] = -1;
2944 Table_reverse[h * 5 + 1] = -1;
2945 Table_reverse[h * 5 + 2] = -1;
2946 Table_reverse[h * 5 + 3] = -1;
2947 Table_reverse[h * 5 + 4] = -1;
2951 for (k = 0; k <
q; k++) {
2952 for (l = 1; l <
q; l++) {
2953 for (m = 1; m <
q; m++) {
2954 for (n = 1; n <
q; n++) {
2972 cout <<
"k=" << k <<
" l=" << l <<
" m=" << m <<
" n=" << n <<
" before SC->init" << endl;
2976 cout <<
"after SC->init" << endl;
2983 isomorphic_to, Elt_isomorphism,
2986 cout <<
"surface " << SC->
label_txt <<
" belongs to iso type " << isomorphic_to << endl;
2989 Table[cnt * 5 + 0] = k;
2990 Table[cnt * 5 + 1] = l;
2991 Table[cnt * 5 + 2] = m;
2992 Table[cnt * 5 + 3] = n;
2993 Table[cnt * 5 + 4] = isomorphic_to;
2995 if (Table_reverse[isomorphic_to * 5 + 0] == -1) {
2996 Table_reverse[isomorphic_to * 5 + 0] = cnt;
2997 Table_reverse[isomorphic_to * 5 + 1] = k;
2998 Table_reverse[isomorphic_to * 5 + 2] = l;
2999 Table_reverse[isomorphic_to * 5 + 3] = m;
3000 Table_reverse[isomorphic_to * 5 + 4] = n;
3009 if (nb_identified == nb_iso) {
3014 if (nb_identified == nb_iso) {
3018 if (nb_identified == nb_iso) {
3022 if (nb_identified == nb_iso) {
3030 fname.assign(
"Cayley_q");
3031 sprintf(str,
"%d.csv",
q);
3037 fname.assign(
"Cayley_reverse_q");
3038 sprintf(str,
"%d.csv",
q);
3049 cout <<
"surface_classify_wedge::sweep_Cayley done" << endl;
3054 int *Iso_type,
int *Nb_lines,
int verbose_level)
3056 int f_v = (verbose_level >= 1);
3064 cout <<
"surface_classify_wedge::identify_general_abcd" << endl;
3073 cout <<
"surface_classify_wedge::identify_general_abcd "
3074 "looping over all a:" << endl;
3076 for (i = 0; i < q4; i++) {
3081 for (a = 1; a <
q; a++) {
3082 cout <<
"surface_classify_wedge::identify_general_abcd "
3083 "a = " << a << endl;
3085 if (a == 0 || a == 1) {
3089 for (b = 1; b <
q; b++) {
3090 cout <<
"surface_classify_wedge::identify_general_abcd "
3091 " b = " << b << endl;
3093 if (b == 0 || b == 1) {
3103 a0, b0, verbose_level);
3105 cout <<
"a=" << a <<
" b=" << b <<
" a0=" << a0 <<
" b0=" << b0 << endl;
3108 cout <<
"skipping" << endl;
3111 if (a0 == a && b0 < b) {
3112 cout <<
"skipping" << endl;
3117 for (c = 1; c <
q; c++) {
3118 cout <<
"surface_classify_wedge::identify_general_abcd "
3119 "a = " << a <<
" b = " << b <<
" c = " << c << endl;
3122 if (c == 0 || c == 1) {
3132 for (d = 1; d <
q; d++) {
3134 if (d == 0 || d == 1) {
3155 cout <<
"surface_classify_wedge::identify_general_abcd "
3156 "a = " << a <<
" b = " << b <<
" c = " << c <<
" d = " << d << endl;
3166 int b2, b2v, x1, x2;
3174 x2 =
F->
mult(x1, b2v);
3177 cout <<
"skipping" << endl;
3185 F->minimal_orbit_rep_under_stabilizer_of_frame(c, d,
3186 c0, d0, verbose_level);
3188 cout <<
"c=" << c <<
" d=" << d <<
" c0=" << c0 <<
" d0=" << d0 << endl;
3192 cout <<
"skipping" << endl;
3195 if (c0 == c && d0 < d) {
3196 cout <<
"skipping" << endl;
3202 cout <<
"nonconical test" << endl;
3222 adb1c1 =
F->
mult3(ad, b1, c1);
3223 bca1d1 =
F->
mult3(bc, a1, d1);
3225 a1d1 =
F->
mult(a1, d1);
3226 b1c1 =
F->
mult(b1, c1);
3230 if (adb1c1 == bca1d1) {
3242 Iso_type[a * q3 + b * q2 + c *
q + d] = -2;
3243 Nb_lines[a * q3 + b * q2 + c *
q + d] = -1;
3255 cout <<
"surface_classify_wedge::identify_general_abcd "
3256 "a = " << a <<
" b = " << b <<
" c = " << c <<
" d = " << d
3257 <<
" is isomorphic to iso_type "
3258 << iso_type <<
", an isomorphism is:" << endl;
3261 Iso_type[a * q3 + b * q2 + c *
q + d] = iso_type;
3262 Nb_lines[a * q3 + b * q2 + c *
q + d] = SO->
nb_lines;
3271 cout <<
"surface_classify_wedge::identify_general_abcd done" << endl;
3277 int f_v = (verbose_level >= 1);
3282 cout <<
"surface_classify_wedge::identify_general_abcd_and_print_table" << endl;
3297 for (a = 0; a < q4; a++) {
3304 cout <<
"surface_classify_wedge::identify_general_abcd_and_print_table before identify_general_abcd" << endl;
3308 cout <<
"surface_classify_wedge::identify_general_abcd_and_print_table after identify_general_abcd" << endl;
3314 cout <<
"(a,c); \\# lines & \\mbox{OCN} \\\\" << endl;
3316 for (a = 1; a <
q; a++) {
3317 for (b = 1; b <
q; b++) {
3318 for (c = 1; c <
q; c++) {
3319 for (d = 1; d <
q; d++) {
3320 cout <<
"$(" << a <<
"," << b <<
"," << c <<
"," << d <<
")$; ";
3332 cout << Nb_lines[a * q3 + b * q2 + c *
q + d] <<
"; ";
3334 cout << Iso_type[a * q3 + b * q2 + c *
q + d];
3335 cout <<
"\\\\" << endl;
3345 int nb_lines, iso, nb_e;
3352 for (a = 1; a <
q; a++) {
3353 for (b = 1; b <
q; b++) {
3354 for (c = 1; c <
q; c++) {
3355 for (d = 1; d <
q; d++) {
3356 nb_lines = Nb_lines[a * q3 + b * q2 + c *
q + d];
3357 iso = Iso_type[a * q3 + b * q2 + c *
q + d];
3370 Table[h * 7 + 0] = a;
3371 Table[h * 7 + 1] = b;
3372 Table[h * 7 + 2] = c;
3373 Table[h * 7 + 3] = d;
3374 Table[h * 7 + 4] = nb_lines;
3375 Table[h * 7 + 5] = iso;
3376 Table[h * 7 + 6] = nb_e;
3386 sprintf(str,
"surface_recognize_abcd_q%d.csv",
q);
3390 cout <<
"Written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
3398 cout <<
"surface_classify_wedge::identify_general_abcd_and_print_table done" << endl;
void compute_points_on_lines(long int *Pts_on_surface, int nb_points_on_surface, long int *Lines, int nb_lines, data_structures::set_of_sets *&pts_on_lines, int *&f_is_on_line, int verbose_level)
geometry::projective_space * P
surface_object * create_surface_general_abcd(int a, int b, int c, int d, int verbose_level)
void lines_meet3_and_skew3(long int *lines_meet3, long int *lines_skew3, long int *&lines, int &nb_lines, int verbose_level)
void create_the_fifteen_other_lines(long int *double_six, long int *fifteen_other_lines, int verbose_level)
Given a double six in double_six[12], compute the 15 remaining lines cij.
orthogonal_geometry::orthogonal * O
int nb_pts_on_surface_with_27_lines
void list_starter_configurations(long int *Lines, int nb_lines, data_structures::set_of_sets *line_intersections, int *&Table, int &N, int verbose_level)
void enumerate_points(int *coeff, std::vector< long int > &Pts, int verbose_level)
surface_object * create_surface_F13(int a, int verbose_level)
surface_object * create_surface_bes(int a, int c, int verbose_level)
surface_object * create_Eckardt_surface(int a, int b, int &alpha, int &beta, int verbose_level)
geometry::klein_correspondence * Klein
void compute_adjacency_matrix_of_line_intersection_graph(int *&Adj, long int *S, int n, int verbose_level)
Given a set of lines in S[n], compute the associated line intersection graph.
void create_starter_configuration(int line_idx, int subset_idx, data_structures::set_of_sets *line_neighbors, long int *Lines, long int *S, int verbose_level)
int perp_of_four_lines(long int *four_lines, long int *trans12, int &perp_sz, int verbose_level)
Given four general lines in four_lines[4], complete the two transversal lines.
void build_cubic_surface_from_lines(int len, long int *S, int *coeff, int verbose_level)
void print_equation(std::ostream &ost, int *coeffs)
void print_tritangent_planes(std::ostream &ost)
void print_Hesse_planes(std::ostream &ost)
void print_points(std::ostream &ost)
void print_lines(std::ostream &ost)
void print_general(std::ostream &ost)
void print_equation(std::ostream &ost)
void print_axes(std::ostream &ost)
a particular cubic surface in PG(3,q), given by its equation
void enumerate_points(int verbose_level)
surface_object_properties * SOP
void compute_properties(int verbose_level)
void init_with_27_lines(surface_domain *Surf, long int *Lines27, int *eqn, int f_find_double_six_and_rearrange_lines, int verbose_level)
void apply(long int *from, long int *through, long int *to, int len)
void print(std::ostream &ost, long int *v, int len)
void init_from_adjacency_matrix(int n, int *Adj, int verbose_level)
int number_of_eckardt_points(int verbose_level)
a collection of functions related to sorted vectors
int int_vec_search(int *v, int len, int a, int &idx)
int int_vec_compare(int *p, int *q, int len)
void PG_element_normalize_from_front(int *v, int stride, int len)
void minimal_orbit_rep_under_stabilizer_of_frame_characteristic_two(int x, int y, int &a, int &b, int verbose_level)
int mult3(int a1, int a2, int a3)
void PG_element_unrank_modified_lint(int *v, int stride, int len, long int a)
void print_element(std::ostream &ost, int a)
void PG_element_rank_modified_lint(int *v, int stride, int len, long int &a)
void print_set(long int *v, int len)
long int line_to_point_on_quadric(long int line_rk, int verbose_level)
void find_lines_which_are_contained(std::vector< long int > &Points, std::vector< long int > &Lines, int verbose_level)
options for drawing an object of type layered_graph
provides access to pre-computed combinatorial data in encoded form
int cubic_surface_nb_Eckardt_points(int q, int i)
int cubic_surface_nb_reps(int q)
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)
data_structures::lint_vec * Lint_vec
void unrank_point(int *v, int stride, long int rk, int verbose_level)
int evaluate_bilinear_form_by_rank(int i, int j)
a class to represent arbitrary precision integers
std::ostream & print_not_scientific(std::ostream &ost)
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)
void element_print_for_make_element(void *elt, std::ostream &ost)
groups::strong_generators * Strong_gens
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)
void map_a_set_and_reorder(long int *set, long int *image_set, int n, int *Elt, int verbose_level)
a set and its known set stabilizer
groups::strong_generators * Strong_gens
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 matrix group over a finite field in projective, vector space or affine action
void substitute_surface_equation(int *Elt, int *coeff_in, int *coeff_out, algebraic_geometry::surface_domain *Surf, int verbose_level)
a strong generating set for a permutation group with respect to a fixed action
void stabilizer_of_cubic_surface_from_catalogue(actions::action *A, field_theory::finite_field *F, int iso, int verbose_level)
strong_generators * create_copy()
void print_generators_tex()
void init_generators_for_the_conjugate_group_aGav(strong_generators *SG, int *Elt_a, int verbose_level)
void init_group_extension(strong_generators *subgroup, int *data, int index, int verbose_level)
data_structures_groups::vector_ge * gens
void group_order(ring_theory::longinteger_object &go)
a single step classification of combinatorial objects
void print_latex(std::ostream &ost, std::string &title, int f_print_stabilizer_gens, int f_has_print_function, void(*print_function)(std::ostream &ost, int i, classification_step *Step, void *print_function_data), void *print_function_data)
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)
data_structures_groups::set_and_stabilizer * get_set_and_stabilizer(int orbit_index, 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
void print_latex(std::ostream &ost, const char *title, int f_print_stabilizer_gens)
int nb_primary_orbits_upper
void write_file(std::ofstream &fp, int verbose_level)
groups::strong_generators * gens
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
void generate_history(int level, int verbose_level)
void get_set_by_level(int level, int node, long int *set)
classification of double sixes in PG(3,q)
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)
invariant_relations::flag_orbits * Flag_orbits
long int * Neighbor_to_line
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 print_five_plus_ones(std::ostream &ost)
void classify(int verbose_level)
void identify_double_six(long int *double_six, int *transporter, int &orbit_index, int verbose_level)
an instance of a cubic surface together with its stabilizer
void init_surface_object(surface_with_action *Surf_A, algebraic_geometry::surface_object *SO, groups::strong_generators *Aut_gens, int verbose_level)
to describe a cubic surface from the command line
void identify_general_abcd_and_print_table(int verbose_level)
int test_if_double_sixes_have_been_computed_already()
void classify_surfaces_from_double_sixes(int verbose_level)
void read_double_sixes(int verbose_level)
void write_double_sixes(int verbose_level)
field_theory::finite_field * F
void upstep(int verbose_level)
void do_classify_surfaces(int verbose_level)
int isomorphism_test_pairwise(cubic_surfaces_in_general::surface_create *SC1, cubic_surfaces_in_general::surface_create *SC2, int &isomorphic_to1, int &isomorphic_to2, int *Elt_isomorphism_1to2, int verbose_level)
void identify_F13(int *Iso_type, int *Nb_lines, int verbose_level)
void test_isomorphism(cubic_surfaces_in_general::surface_create_description *Descr1, cubic_surfaces_in_general::surface_create_description *Descr2, int verbose_level)
void downstep(int verbose_level)
void report_surface(std::ostream &ost, int orbit_index, int verbose_level)
void create_report_double_sixes(int verbose_level)
classify_double_sixes * Classify_double_sixes
void identify_Eckardt_and_print_table(int verbose_level)
void init(cubic_surfaces_in_general::surface_with_action *Surf_A, poset_classification::poset_classification_control *Control, int verbose_level)
void identify_F13_and_print_table(int verbose_level)
invariant_relations::classification_step * Surfaces
void identify_general_abcd(int *Iso_type, int *Nb_lines, int verbose_level)
void identify_Eckardt(int *Iso_type, int *Nb_lines, int verbose_level)
void identify_Bes_and_print_table(int verbose_level)
algebraic_geometry::surface_domain * Surf
void report(std::ostream &ost, int f_with_stabilizers, graphics::layered_graph_draw_options *draw_options, poset_classification::poset_classification_report_options *Opt, int verbose_level)
void derived_arcs(int verbose_level)
void identify_Bes(int *Iso_type, int *Nb_lines, int verbose_level)
void sweep_Cayley(int verbose_level)
void generate_history(int verbose_level)
void latex_surfaces(std::ostream &ost, int f_with_stabilizers, int verbose_level)
void do_classify_double_sixes(int verbose_level)
cubic_surfaces_in_general::surface_with_action * Surf_A
void create_report(int f_with_stabilizers, graphics::layered_graph_draw_options *draw_options, poset_classification::poset_classification_report_options *Opt, int verbose_level)
invariant_relations::flag_orbits * Flag_orbits
~surface_classify_wedge()
void starter_configurations_which_are_involved(int iso_type, int *&Starter_configuration_idx, int &nb_starter_conf, int verbose_level)
void read_file(std::ifstream &fp, int verbose_level)
void write_file(std::ofstream &fp, int verbose_level)
int test_if_surfaces_have_been_computed_already()
void recognition(cubic_surfaces_in_general::surface_create_description *Descr, int verbose_level)
void read_surfaces(int verbose_level)
void identify_surface(int *coeff_of_given_surface, int &isomorphic_to, int *Elt_isomorphism, int verbose_level)
void write_surfaces(int verbose_level)
void generate_source_code(int verbose_level)
cubic surfaces in projective space with automorphism group
projective_geometry::projective_space_with_action * PA
algebraic_geometry::surface_domain * Surf
to create a cubic surface from a description using class surface_create_description
algebraic_geometry::surface_object * SO
void init(surface_create_description *Descr, surface_with_action *Surf_A, int verbose_level)
actions::action * A_on_lines
field_theory::finite_field * F
#define Lint_vec_copy(A, B, C)
#define Int_vec_zero(A, B)
#define Lint_vec_print(A, B, C)
#define Int_vec_copy(A, B, C)
#define Int_vec_print(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
std::vector< term > equation
the orbiter library for the classification of combinatorial objects
groups::matrix_group * matrix_grp