17namespace layer1_foundations {
18namespace algebraic_geometry {
73 cout <<
"surface_domain::freeself" << endl;
108 cout <<
"before Poly1" << endl;
177 cout <<
"surface_domain::freeself done" << endl;
187 int f_v = (verbose_level >= 1);
190 cout <<
"surface_domain::init" << endl;
199 cout <<
"surface::init nb_pts_on_surface_with_27_lines = "
209 cout <<
"surface::init before P->projective_space_init" << endl;
215 cout <<
"surface::init after P->projective_space_init" << endl;
220 cout <<
"surface::init before P2->projective_space_init" << endl;
226 cout <<
"surface::init after P2->projective_space_init" << endl;
233 cout <<
"surface::init nb_lines_PG_3 = "
242 cout <<
"surface::init "
243 "initializing orthogonal" << endl;
246 O->
init(1 , 6 ,
F, verbose_level - 2);
248 cout <<
"surface::init "
249 "initializing orthogonal done" << endl;
255 cout <<
"surface::init before Klein->init" << endl;
259 cout <<
"surface::init after Klein->init" << endl;
265 cout <<
"surface::init before init_polynomial_domains" << endl;
269 cout <<
"surface::init after init_polynomial_domains" << endl;
277 cout <<
"surface::init before init_Schlaefli" << endl;
281 cout <<
"surface::init after init_Schlaefli" << endl;
289 cout <<
"surface::init done" << endl;
296 int f_v = (verbose_level >= 1);
299 cout <<
"surface_domain::init_polynomial_domains" << endl;
306 cout <<
"surface_domain::init_polynomial_domains before Poly1->init" << endl;
314 cout <<
"surface_domain::init_polynomial_domains after Poly1->init" << endl;
317 cout <<
"surface_domain::init_polynomial_domains before Poly2->init" << endl;
325 cout <<
"surface_domain::init_polynomial_domains after Poly2->init" << endl;
328 cout <<
"surface_domain::init_polynomial_domains before Poly3->init" << endl;
336 cout <<
"surface_domain::init_polynomial_domains after Poly3->init" << endl;
344 cout <<
"surface_domain::init_polynomial_domains before Poly1_x123->init" << endl;
352 cout <<
"surface_domain::init_polynomial_domains after Poly1_x123->init" << endl;
355 cout <<
"surface_domain::init_polynomial_domains before Poly2_x123->init" << endl;
363 cout <<
"surface_domain::init_polynomial_domains after Poly2_x123->init" << endl;
366 cout <<
"surface_domain::init_polynomial_domains before Poly3_x123->init" << endl;
374 cout <<
"surface_domain::init_polynomial_domains after Poly3_x123->init" << endl;
377 cout <<
"surface_domain::init_polynomial_domains before Poly4_x123->init" << endl;
385 cout <<
"surface_domain::init_polynomial_domains after Poly4_x123->init" << endl;
402 cout <<
"surface_domain::init_polynomial_domains before Poly1_4->init" << endl;
410 cout <<
"surface_domain::init_polynomial_domains after Poly1_4->init" << endl;
413 cout <<
"surface_domain::init_polynomial_domains before Poly2_4->init" << endl;
421 cout <<
"surface_domain::init_polynomial_domains after Poly2_4->init" << endl;
424 cout <<
"surface_domain::init_polynomial_domains before Poly3_4->init" << endl;
432 cout <<
"surface_domain::init_polynomial_domains after Poly3_4->init" << endl;
436 cout <<
"surface_domain::init_polynomial_domains before label_variables_4" << endl;
442 cout <<
"surface_domain::init_polynomial_domains after label_variables_4" << endl;
448 cout <<
"Poly3_4->nb_monomials = " <<
nb_monomials << endl;
459 cout <<
"surface_domain::init_polynomial_domains initializing partials" << endl;
461 for (i = 0; i < 4; i++) {
465 cout <<
"surface_domain::init_polynomial_domains initializing partials done" << endl;
472 cout <<
"surface_domain::init_polynomial_domains done" << endl;
478 int f_v = (verbose_level >= 1);
481 cout <<
"surface_domain::init_large_polynomial_domains" << endl;
528 cout <<
"surface_domain::init_large_polynomial_domains "
529 "before clebsch_cubics" << endl;
533 cout <<
"surface_domain::init_large_polynomial_domains "
534 "after clebsch_cubics" << endl;
538 cout <<
"surface::init_large_polynomial_domains done" << endl;
546 int f_v = (verbose_level >= 1);
549 cout <<
"surface_domain::label_variables_3" << endl;
552 cout <<
"surface_domain::label_variables_3 HPD->nb_variables != 3" << endl;
557 "y_%d",
"y_{%d}", verbose_level);
560 cout <<
"surface_domain::label_variables_3 done" << endl;
568 int f_v = (verbose_level >= 1);
571 cout <<
"surface_domain::label_variables_x123" << endl;
574 cout <<
"surface_domain::label_variables_x123 "
575 "HPD->nb_variables != 3" << endl;
581 "x_%d",
"x_{%d}", verbose_level);
584 cout <<
"surface_domain::label_variables_x123 done" << endl;
592 int f_v = (verbose_level >= 1);
597 cout <<
"surface_domain::label_variables_4" << endl;
600 cout <<
"surface_domain::label_variables_4 HPD->nb_variables != 4" << endl;
606 "X_%d",
"X_{%d}", verbose_level);
610 cout <<
"surface::label_variables_4 done" << endl;
619 int f_v = (verbose_level >= 1);
622 cout <<
"surface_domain::label_variables_27" << endl;
625 cout <<
"surface_domain::label_variables_27 HPD->n != 27" << endl;
659 cout <<
"surface_domain::label_variables_27 done" << endl;
667 int f_v = (verbose_level >= 1);
670 cout <<
"surface_domain::label_variables_24" << endl;
673 cout <<
"surface_domain::label_variables_24 HPD->n != 24" << endl;
703 cout <<
"surface_domain::label_variables_24 done" << endl;
740 std::vector<long int> &Pts,
743 int f_v = (verbose_level >= 1);
746 cout <<
"surface_domain::enumerate_points" << endl;
751 cout <<
"surface_domain::enumerate_points done" << endl;
756 int *coeff_in,
int *coeff_out,
757 int f_semilinear,
int frob,
int *Mtx_inv,
760 int f_v = (verbose_level >= 1);
763 cout <<
"surface_domain::substitute_semilinear" << endl;
766 f_semilinear, frob, Mtx_inv, verbose_level);
768 cout <<
"surface_domain::substitute_semilinear done" << endl;
773 long int *Lines,
int nb_lines,
777 int f_v = (verbose_level >= 1);
786 cout <<
"surface_domain::list_starter_configurations" << endl;
790 for (i = 0; i < nb_lines; i++) {
791 if (line_intersections->
Set_size[i] < 5) {
795 for (j = 0; j < nCk; j++) {
797 line_intersections->
Set_size[i], 5);
798 for (h = 0; h < 5; h++) {
800 line_intersections->
Sets[i][subset[h]];
801 S3[h] = Lines[subset2[h]];
811 cout <<
"surface_domain::list_starter_configurations We found "
812 << N <<
" starter configurations on this surface"
817 for (i = 0; i < nb_lines; i++) {
818 if (line_intersections->
Set_size[i] < 5) {
822 for (j = 0; j < nCk; j++) {
824 line_intersections->
Set_size[i], 5);
825 for (h = 0; h < 5; h++) {
827 line_intersections->
Sets[i][subset[h]];
828 S3[h] = Lines[subset2[h]];
833 Table[N1 * 2 + 0] = i;
834 Table[N1 * 2 + 1] = j;
840 cout <<
"N1 != N" << endl;
844 cout <<
"surface_domain::list_starter_configurations done" << endl;
849 int line_idx,
int subset_idx,
853 int f_v = (verbose_level >= 1);
860 cout <<
"surface_domain::create_starter_configuration" << endl;
864 line_neighbors->
Set_size[line_idx], 5);
865 for (h = 0; h < 5; h++) {
866 subset2[h] = line_neighbors->
Sets[line_idx][subset[h]];
867 S[h] = Lines[subset2[h]];
869 S[5] = Lines[line_idx];
871 cout <<
"surface_domain::create_starter_configuration done" << endl;
914 long int *Line_rk,
long int *Wedge_rk,
int len)
918 for (i = 0; i < len; i++) {
924 long int *Line_rk,
long int *Klein_rk,
int len)
934 for (i = 0; i < len; i++) {
951 long int *Klein_rk,
long int *Wedge_rk,
int len)
955 for (i = 0; i < len; i++) {
961 long int *Lines_wedge,
long int *Lines,
long int *Lines_klein,
int nb_lines)
966 Lines_wedge, Lines, Lines_klein, nb_lines,
969 Sp->
save(fname_csv, 0 );
976 int f_v = (verbose_level >= 1);
979 cout <<
"surface_domain::build_surface_from_double_six_and_count_Eckardt_points" << endl;
982 cout <<
"surface_domain::build_surface_from_double_six_and_count_Eckardt_points before Surf->build_cubic_surface_from_lines" << endl;
986 long int Lines27[27];
994 cout <<
"surface_domain::build_surface_from_double_six_and_count_Eckardt_points after Surf->build_cubic_surface_from_lines" << endl;
998 cout <<
"surface_domain::build_surface_from_double_six_and_count_Eckardt_points "
1012 cout <<
"surface_domain::build_surface_from_double_six_and_count_Eckardt_points before Surf->create_the_fifteen_other_lines" << endl;
1015 Lines27 + 12, verbose_level);
1017 cout <<
"surface_domain::build_surface_from_double_six_and_count_Eckardt_points after Surf->create_the_fifteen_other_lines" << endl;
1027 cout <<
"surface_domain::build_surface_from_double_six_and_count_Eckardt_points before SO->init_with_27_lines" << endl;
1035 cout <<
"surface_domain::build_surface_from_double_six_and_count_Eckardt_points after SO->init_with_27_lines" << endl;
1040 cout <<
"surface_domain::build_surface_from_double_six_and_count_Eckardt_points the surface has " << nb_E <<
" Eckardt points" << endl;
1045 cout <<
"surface_domain::build_surface_from_double_six_and_count_Eckardt_points done" << endl;
ring_theory::homogeneous_polynomial_domain * Poly3
geometry::projective_space * P2
void unrank_plane(int *v, long int rk)
ring_theory::partial_derivative * Partials
ring_theory::homogeneous_polynomial_domain * Poly3_x123
int build_surface_from_double_six_and_count_Eckardt_points(long int *double_six, int verbose_level)
void label_variables_27(ring_theory::homogeneous_polynomial_domain *HPD, int verbose_level)
void label_variables_3(ring_theory::homogeneous_polynomial_domain *HPD, int verbose_level)
ring_theory::homogeneous_polynomial_domain * Poly4_x123
geometry::projective_space * P
geometry::grassmann * Gr3
void klein_to_wedge(int *K, int *W)
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)
ring_theory::homogeneous_polynomial_domain * Poly1_4
long int rank_point(int *v)
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.
void clebsch_cubics(int verbose_level)
orthogonal_geometry::orthogonal * O
void init_Schlaefli(int verbose_level)
void save_lines_in_three_kinds(std::string &fname_csv, long int *Lines_wedge, long int *Lines, long int *Lines_klein, int nb_lines)
int nb_pts_on_surface_with_27_lines
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)
long int line_to_wedge(long int line_rk)
void klein_to_wedge_vec(long int *Klein_rk, long int *Wedge_rk, int len)
ring_theory::homogeneous_polynomial_domain * Poly3_24
ring_theory::homogeneous_polynomial_domain * Poly3_4
void wedge_to_klein(int *W, int *K)
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 init_large_polynomial_domains(int verbose_level)
void enumerate_points(int *coeff, std::vector< long int > &Pts, int verbose_level)
void label_variables_4(ring_theory::homogeneous_polynomial_domain *HPD, int verbose_level)
field_theory::finite_field * F
ring_theory::homogeneous_polynomial_domain * Poly1_x123
void line_to_klein_vec(long int *Line_rk, long int *Klein_rk, int len)
long int rank_plane(int *v)
ring_theory::homogeneous_polynomial_domain * Poly6_27
geometry::klein_correspondence * Klein
ring_theory::homogeneous_polynomial_domain * Poly2_4
ring_theory::homogeneous_polynomial_domain * Poly2
void init_polynomial_domains(int verbose_level)
int index_of_monomial(int *v)
void label_variables_x123(ring_theory::homogeneous_polynomial_domain *HPD, int verbose_level)
ring_theory::homogeneous_polynomial_domain * Poly2_27
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)
void substitute_semilinear(int *coeff_in, int *coeff_out, int f_semilinear, int frob, int *Mtx_inv, int verbose_level)
ring_theory::homogeneous_polynomial_domain * Poly4_27
int f_has_large_polynomial_domains
void build_cubic_surface_from_lines(int len, long int *S, int *coeff, int verbose_level)
void label_variables_24(ring_theory::homogeneous_polynomial_domain *HPD, int verbose_level)
void init(field_theory::finite_field *F, int verbose_level)
void unrank_point(int *v, long int rk)
ring_theory::homogeneous_polynomial_domain * Poly2_x123
ring_theory::homogeneous_polynomial_domain * Poly1
a particular cubic surface in PG(3,q), given by its equation
surface_object_properties * SOP
void init_with_27_lines(surface_domain *Surf, long int *Lines27, int *eqn, int f_find_double_six_and_rearrange_lines, int verbose_level)
a collection of combinatorial functions
void unrank_k_subset(int rk, int *set, int n, int k)
long int int_n_choose_k(int n, int k)
for reading and writing of csv files
void save(std::string &fname, int verbose_level)
void klein_to_wedge(int *K, int *W)
void PG_element_rank_modified_lint(int *v, int stride, int len, long int &a)
void wedge_to_klein(int *W, int *K)
to rank and unrank subspaces of a fixed dimension in F_q^n
ring_theory::longinteger_object * nCkq
long int rank_lint_here(int *Mtx, int verbose_level)
void unrank_lint_here(int *Mtx, long int rk, int verbose_level)
void init(int n, int k, field_theory::finite_field *F, int verbose_level)
the Klein correspondence between lines in PG(3,q) and points on the Klein quadric
void init(field_theory::finite_field *F, orthogonal_geometry::orthogonal *O, int verbose_level)
long int line_to_point_on_quadric(long int line_rk, int verbose_level)
projective space PG(n,q) of dimension n over Fq
long int rank_point(int *v)
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)
an orthogonal geometry O^epsilon(n,q)
void unrank_point(int *v, int stride, long int rk, int verbose_level)
void init(int epsilon, int n, field_theory::finite_field *F, int verbose_level)
homogeneous polynomials of a given degree in a given number of variables over a finite field GF(q)
void init(field_theory::finite_field *F, int nb_vars, int degree, int f_init_incidence_structure, monomial_ordering_type Monomial_ordering_type, int verbose_level)
void enumerate_points(int *coeff, std::vector< long int > &Pts, int verbose_level)
void print_equation(std::ostream &ost, int *coeffs)
void remake_symbols(int symbol_offset, const char *symbol_mask, const char *symbol_mask_latex, int verbose_level)
void substitute_semilinear(int *coeff_in, int *coeff_out, int f_semilinear, int frob_power, int *Mtx_inv, int verbose_level)
void remake_symbols_interval(int symbol_offset, int from, int len, const char *symbol_mask, const char *symbol_mask_latex, int verbose_level)
int index_of_monomial(int *v)
partial derivative connects two homogeneous polynomial domains
void init(homogeneous_polynomial_domain *H, homogeneous_polynomial_domain *Hd, int variable_idx, int verbose_level)
#define Lint_vec_copy(A, B, C)
#define NEW_OBJECTS(type, n)
#define Int_vec_print(A, B, C)
the orbiter library for the classification of combinatorial objects