8#ifndef SRC_LIB_FOUNDATIONS_ALGEBRAIC_GEOMETRY_ALGEBRAIC_GEOMETRY_H_
9#define SRC_LIB_FOUNDATIONS_ALGEBRAIC_GEOMETRY_ALGEBRAIC_GEOMETRY_H_
12namespace layer1_foundations {
13namespace algebraic_geometry {
107 int hds,
int verbose_level);
110 long int *Image_rk,
int *Image_coeff,
125 void report(std::ostream &ost,
int verbose_level);
163 int nb_pts,
long int *pt_list,
int verbose_level);
165 int *eqn_in,
int verbose_level);
168 long int *Pts_on_curve,
int nb_pts_on_curve,
169 long int *Pts,
int &nb_pts,
173 long int *Pts_on_curve,
int nb_pts_on_curve,
174 long int *Pts,
int &nb_pts,
208 std::vector<long int> &Pts,
287 long int *
arc6,
int verbose_level);
290 void print_conics(std::ostream &ost,
int verbose_level);
317 void latex(std::ostream &ost);
321 void init2(
int i,
int j);
322 void init3(
int ij,
int kl,
int mn);
323 void init6(
int i,
int j,
int k,
int l,
int m,
int n);
327 void unrank(
int rk,
int &i,
int &j,
int &k,
int &l,
int &m,
int &n);
370 void print_lines_tex(std::ostream &ost,
long int *Lines,
int nb_lines);
372 long int *Pts,
int nb_points,
373 long int *Lines,
int nb_lines,
378 int *six_coeff_b,
int *fifteen_coeff,
381 int *three_coeff,
int *ten_coeff,
384 int *line2,
int *six_coeff,
467 std::string &surface_label, std::string &col_postfix,
int verbose_level);
565 void init(
int verbose_level);
592 std::string *Line_label;
593 std::string *Line_label_tex;
670 int &plane1,
int &plane2,
int verbose_level);
683 void make_Tijk(
int *T,
int i,
int j,
int k);
684 void make_Tlmnp(
int *T,
int l,
int m,
int n,
int p);
685 void make_Tdefght(
int *T,
int d,
int e,
int f,
int g,
int h,
int t);
691 int *E_idx,
int nb_E,
692 int *&T_idx,
int &nb_T,
int verbose_level);
696 void ijklm2n(
int i,
int j,
int k,
int l,
int m,
int &n);
697 void ijkl2mn(
int i,
int j,
int k,
int l,
int &m,
int &n);
698 void ijk2lmn(
int i,
int j,
int k,
int &l,
int &m,
int &n);
699 void ij2klmn(
int i,
int j,
int &k,
int &l,
int &m,
int &n);
701 int line1,
int line2,
int transversal,
705 int &line2,
int &transversal,
int verbose_level);
711 int transversal_line,
int verbose_level);
953 std::vector<long int> &Pts,
956 int f_semilinear,
int frob,
int *Mtx_inv,
int verbose_level);
971 long int *Lines_wedge,
long int *Lines,
long int *Lines_klein,
int nb_lines);
977 int *ten_coeff,
int verbose_level);
979 int *three_coeff2,
int *three_coeff3,
int *ten_coeff,
982 int *four_coeff1,
int *four_coeff2,
int *four_coeff3,
983 int *twenty_coeff,
int verbose_level);
985 int *result,
int verbose_level);
987 int *result,
int verbose_level);
989 int *The_six_plane_equations,
int *The_surface_equations,
998 int scalar,
int *MM,
int verbose_level);
999 void minor22(
int **P3,
int i1,
int i2,
int j1,
int j2,
1000 int scalar,
int *Ad,
int verbose_level);
1004 int lambda,
int *&system,
int verbose_level);
1006 long int *nine_lines,
int verbose_level);
1008 long int *G_planes_rank,
long int *nine_lines,
int verbose_level);
1010 int *&f2,
int *&f3,
int verbose_level);
1012 int *&tangent_quadric,
int verbose_level);
1014 int tritangent_plane_idx,
1015 int &trihedral_pair_idx,
int &position,
int verbose_level);
1017 long int *Arc6,
int p1_idx,
int p2_idx,
int partition_rk,
1018 long int line1,
long int line2,
1019 int *coeff20,
long int *lines27,
1022 long int *P6,
long int *P6_local,
int verbose_level);
1039 int *&System,
int &nb_rows,
int verbose_level);
1041 long int *Lines,
int nb_lines,
1042 long int *&Intersection_pt,
1045 long int *Points,
int nb_points,
1046 long int *Lines,
int nb_lines,
1047 int *&Intersection_pt,
int *&Intersection_pt_idx,
1050 long int *&lines,
int &nb_lines,
int verbose_level);
1058 long int *five_pts,
long int *double_six,
1061 long int *double_six,
int verbose_level);
1063 long int *fifteen_other_lines,
int verbose_level);
1067 long int *S,
int n,
int verbose_level);
1070 long int *S,
int n,
int verbose_level);
1072 long int *Pts_on_surface,
1073 int nb_points_on_surface,
1074 long int *Lines,
int nb_lines,
1079 long int *&Rk,
int &nb_subsets,
long int *lines,
1080 int sz,
int verbose_level);
1082 int *given_double_six,
1083 long int *New_lines,
1088 long int *Lines,
long int *New_lines,
1089 int line_idx,
int subset_idx,
int *Adj,
1092 int *four_lines_idx,
int b6,
int verbose_level);
1096 long int *New_lines,
long int *double_six,
int verbose_level);
1098 long int *Lines,
int verbose_level);
1100 long int *double_six,
long int *fifteen_lines,
1103 int i,
int j,
int verbose_level);
1105 long int *&Trans,
int &nb_subsets,
1106 long int *lines,
int sz,
int verbose_level);
1118 long int *Wedge_rk,
long int *Line_rk,
long int *Klein_rk,
int nb_lines,
1121 int *the_six_plane_equations,
int lambda,
int *the_equation);
1123 void print_lines_tex(std::ostream &ost,
long int *Lines,
int nb_lines);
1124 void alice(std::ostream &ost,
long int *Lines,
int nb_lines);
1130 long int *F_planes_rank,
long int *G_planes_rank);
1136 int *Q_table,
int Q_table_len,
int verbose_level);
1138 int *Q_table,
int Q_table_len,
int verbose_level);
1142 int *field_orders,
int nb_fields,
1145 int *&E,
int &nb_E_types,
int verbose_level);
1161 int &alpha,
int &beta,
1270 int Adj_ij(
int i,
int j);
1318 int *F_planes,
int *G_planes,
int &lambda,
int *
equation,
1321 int *F_planes,
int *G_planes,
int lambda);
1323 int *F_planes,
int *G_planes,
int lambda);
1329 int line_a,
int line_b,
int *transversals5,
1332 long int *Arc,
long int *Blown_up_lines,
int verbose_level);
1334 long int *Clebsch_map,
int *Clebsch_coeff);
1341 std::string &surface_label, std::string &col_postfix,
int verbose_level);
1383 void find_real_lines(std::vector<long int> &The_Lines,
int verbose_level);
1385 int f_find_double_six_and_rearrange_lines,
int verbose_level);
1392 int *nine_lines_idx);
1448 int t_idx,
int *surface_equation,
1452 long int *
arc6,
int t_idx,
1453 int &lambda,
int &lambda_rk,
1460 int *The_six_plane_equations,
1461 long int *plane6, std::ostream &ost);
1463 int *The_surface_equations,
1464 int lambda,
int lambda_rk, std::ostream &ost);
1468 void report(std::ostream &ost,
int verbose_level);
creates a cubic surface from a 6-arc in a plane
field_theory::finite_field * F
arc_lifting_with_two_lines()
void create_surface(surface_domain *Surf, long int *Arc6, long int line1, long int line2, int verbose_level)
~arc_lifting_with_two_lines()
records the images of a specific Clebsch map
field_theory::finite_field * F
int intersection_points_local[6]
int intersection_points[6]
void report(std::ostream &ost, int verbose_level)
int compute_Clebsch_map_down_worker(long int *Image_rk, int *Image_coeff, int verbose_level)
long int Blown_up_lines[6]
void clebsch_map_find_arc_and_lines(int verbose_level)
void clebsch_map_print_fibers()
void init_half_double_six(surface_object *SO, int hds, int verbose_level)
void compute_Clebsch_map_down(int verbose_level)
field_theory::finite_field * F
ring_theory::partial_derivative * Partials
void compute_gradient(int *eqn_in, int verbose_level)
ring_theory::homogeneous_polynomial_domain * Poly
void init(field_theory::finite_field *F, int verbose_level)
void compute_inflexion_points(int *eqn_in, long int *Pts_on_curve, int nb_pts_on_curve, long int *Pts, int &nb_pts, int verbose_level)
ring_theory::homogeneous_polynomial_domain * Poly2
void compute_singular_points(int *eqn_in, long int *Pts_on_curve, int nb_pts_on_curve, long int *Pts, int &nb_pts, int verbose_level)
int compute_system_in_RREF(int nb_pts, long int *pt_list, int verbose_level)
geometry::projective_space * P
domain for del Pezzo surfaces of degree two
void init(geometry::projective_space *P, ring_theory::homogeneous_polynomial_domain *Poly4_3, int verbose_level)
del_pezzo_surface_of_degree_two_domain()
ring_theory::homogeneous_polynomial_domain * Poly4_3
void enumerate_points(int *coeff, std::vector< long int > &Pts, int verbose_level)
field_theory::finite_field * F
~del_pezzo_surface_of_degree_two_domain()
geometry::projective_space * P2
void print_equation_with_line_breaks_tex(std::ostream &ost, int *coeffs)
geometry::projective_space * P
long int rank_point(int *v)
geometry::grassmann * Gr3
void unrank_point(int *v, long int rk)
a del Pezzo surface of degree two
void enumerate_points_and_lines(int verbose_level)
del_pezzo_surface_of_degree_two_object()
void print_points(std::ostream &ost)
expression_parser::syntax_tree_node ** Subtrees
~del_pezzo_surface_of_degree_two_object()
geometry::points_and_lines * pal
void report_properties(std::ostream &ost, int verbose_level)
void init(del_pezzo_surface_of_degree_two_domain *Dom, expression_parser::formula *RHS, expression_parser::syntax_tree_node **Subtrees, int *Coefficient_vector, int verbose_level)
void print_lines(std::ostream &ost)
void print_all_points_on_surface(std::ostream &ost)
void print_equation(std::ostream &ost)
expression_parser::formula * RHS
del_pezzo_surface_of_degree_two_domain * Dom
void create_latex_report(std::string &label, std::string &label_tex, int verbose_level)
information about the Eckardt points of a surface derived from a six-arc
geometry::projective_space * P2
void print_intersections(std::ostream &ost, int verbose_level)
void print_Eckardt_points(std::ostream &ost, int verbose_level)
void print_bisecants(std::ostream &ost, int verbose_level)
void print_conics(std::ostream &ost, int verbose_level)
void init(geometry::projective_space *P2, long int *arc6, int verbose_level)
Eckardt point on a cubic surface using the Schlaefli labeling.
void init_by_rank(int rk)
void latex_to_str(char *str)
void unrank(int rk, int &i, int &j, int &k, int &l, int &m, int &n)
void latex_to_str_without_E(char *str)
void init3(int ij, int kl, int mn)
void init6(int i, int j, int k, int l, int m, int n)
void three_lines(surface_domain *S, int *three_lines)
void latex_index_only(std::ostream &ost)
void latex(std::ostream &ost)
domain for quartic curves in PG(2,q) with 28 bitangents
long int rank_point(int *v)
void unrank_point(int *v, long int rk)
void compute_points_on_lines(long int *Pts, int nb_points, long int *Lines, int nb_lines, data_structures::set_of_sets *&pts_on_lines, int *&f_is_on_line, int verbose_level)
void init_polynomial_domains(int verbose_level)
void print_lines_tex(std::ostream &ost, long int *Lines, int nb_lines)
void multiply_conic_times_line(int *six_coeff, int *three_coeff, int *ten_coeff, int verbose_level)
ring_theory::homogeneous_polynomial_domain * Poly3_3
geometry::projective_space * P
void unrank_line_in_dual_coordinates(int *v, long int rk)
void print_gradient_with_line_breaks_tex(std::ostream &ost, int *coeffs)
void multiply_four_lines(int *line1, int *line2, int *line3, int *line4, int *fifteen_coeff, int verbose_level)
void multiply_line_times_line(int *line1, int *line2, int *six_coeff, int verbose_level)
void init(field_theory::finite_field *F, int verbose_level)
void print_equation_maple(std::stringstream &ost, int *coeffs)
void assemble_cubic_surface(int *f1, int *f2, int *f3, int *eqn20, int verbose_level)
ring_theory::partial_derivative * Partials
field_theory::finite_field * F
ring_theory::homogeneous_polynomial_domain * Poly1_3
void multiply_three_lines(int *line1, int *line2, int *line3, int *ten_coeff, int verbose_level)
void create_surface(quartic_curve_object *Q, int *eqn20, int verbose_level)
void print_equation_with_line_breaks_tex(std::ostream &ost, int *coeffs)
void compute_gradient(int *equation15, int *&gradient, int verbose_level)
ring_theory::homogeneous_polynomial_domain * Poly4_3
algebraic_geometry::schlaefli_labels * Schlaefli
ring_theory::homogeneous_polynomial_domain * Poly3_4
ring_theory::homogeneous_polynomial_domain * Poly2_3
void multiply_conic_times_conic(int *six_coeff_a, int *six_coeff_b, int *fifteen_coeff, int verbose_level)
properties of a particular quartic curve surface in PG(2,q), as defined by an object of class quartic...
quartic_curve_object_properties()
void report_bitangent_line_type(std::ostream &ost)
long int * Kovalevski_points
data_structures::tally * Point_type
void init(quartic_curve_object *QO, int verbose_level)
void compute_singular_points_and_tangent_lines(int verbose_level)
data_structures::set_of_sets * pts_on_lines
void print_lines_with_points_on_them(std::ostream &ost, long int *Lines, int nb_lines, data_structures::set_of_sets *SoS)
void print_points(std::ostream &ost)
void print_bitangents(std::ostream &ost)
data_structures::set_of_sets * lines_on_points_off
void compute_gradient(int verbose_level)
void create_summary_file(std::string &fname, std::string &surface_label, std::string &col_postfix, int verbose_level)
void print_general(std::ostream &ost)
~quartic_curve_object_properties()
int f_fullness_has_been_established
data_structures::tally * Point_off_type
data_structures::set_of_sets * lines_on_point
long int * tangent_line_rank_dual
void print_all_points(std::ostream &ost)
int * Kovalevski_point_idx
void print_gradient(std::ostream &ost)
void points_on_curve_on_lines(int verbose_level)
data_structures::tally * Bitangent_line_type
long int * tangent_line_rank_global
void print_equation(std::ostream &ost)
void report_properties_simple(std::ostream &ost, int verbose_level)
quartic_curve_object * QO
data_structures::set_of_sets * pts_off_on_lines
int line_type_distribution[3]
a particular quartic curve in PG(2,q), given by its equation
quartic_curve_domain * Dom
void init_equation_and_bitangents_and_compute_properties(quartic_curve_domain *Dom, int *eqn15, long int *bitangents28, int verbose_level)
long int bitangents28[28]
void init_equation_and_bitangents(quartic_curve_domain *Dom, int *eqn15, long int *bitangents28, int verbose_level)
quartic_curve_object_properties * QP
void enumerate_points(int verbose_level)
void compute_properties(int verbose_level)
field_theory::finite_field * F
int find_point(long int P, int &idx)
void identify_lines(long int *lines, int nb_lines, int *line_idx, int verbose_level)
void init_equation_but_no_bitangents(quartic_curve_domain *Dom, int *eqn15, int verbose_level)
void recompute_properties(int verbose_level)
schlaefli labeling of objects in cubic surfaces with 27 lines
std::string * Line_label_tex
void init(int verbose_level)
schlaefli labeling of objects in cubic surfaces with 27 lines
void print_trihedral_pairs(std::ostream &ost)
int type_of_line(int line)
void latex_table_of_Schlaefli_labeling_of_lines(std::ostream &ost)
void create_half_double_sixes(int verbose_level)
void latex_table_of_double_sixes(std::ostream &ost)
void latex_abstract_trihedral_pair(std::ostream &ost, int t_idx)
int * incidence_lines_vs_tritangent_planes
void find_trihedral_pairs_from_collinear_triples_of_Eckardt_points(int *E_idx, int nb_E, int *&T_idx, int &nb_T, int verbose_level)
void make_Eckardt_points(int verbose_level)
int find_half_double_six(long int *half_double_six)
long int * Half_double_sixes
int nb_collinear_Eckardt_triples
std::string * Eckard_point_label_tex
int choose_tritangent_plane_for_Clebsch_map(int line_a, int line_b, int transversal_line, int verbose_level)
void make_Tijk(int *T, int i, int j, int k)
void print_set_of_lines_tex(std::ostream &ost, long int *v, int len)
int * collinear_Eckardt_triples_rank
void latex_table_of_clebsch_maps(std::ostream &ost)
int * Trihedral_pairs_col_sets
void init_collinear_Eckardt_triples(int verbose_level)
int third_line_in_tritangent_plane(int l1, int l2, int verbose_level)
int * Half_double_six_to_double_six
void init_adjacency_matrix_of_lines(int verbose_level)
data_structures::tally * Classify_collinear_Eckardt_triples
void find_tritangent_planes_intersecting_in_a_line(int line_idx, int &plane1, int &plane2, int verbose_level)
void latex_triads(std::ostream &ost)
int nb_trihedral_to_Eckardt
void make_trihedral_pair_disjointness_graph(int *&Adj, int verbose_level)
int Eckardt_point_from_tritangent_plane(int *tritangent_plane)
std::string * Double_six_label_tex
long int * Lines_in_tritangent_planes
int * Half_double_six_to_double_six_row
long int * Trihedral_to_Eckardt
data_structures::tally * Classify_trihedral_pairs_row_values
eckardt_point * Eckardt_points
std::string * Trihedral_pair_labels
void print_Steiner_and_Eckardt(std::ostream &ost)
void make_Tlmnp(int *T, int l, int m, int n, int p)
void set_adjacency_matrix_of_lines(int i, int j)
data_structures::tally * Classify_trihedral_pairs_col_values
void init_line_data(int verbose_level)
void ijkl2mn(int i, int j, int k, int l, int &m, int &n)
void make_trihedral_pairs(int verbose_level)
void make_Tdefght(int *T, int d, int e, int f, int g, int h, int t)
void ij2klmn(int i, int j, int &k, int &l, int &m, int &n)
void print_Schlaefli_labelling(std::ostream &ost)
void latex_table_of_tritangent_planes(std::ostream &ost)
void latex_trihedral_pair(std::ostream &ost, int *T, long int *TE)
void latex_half_double_six(std::ostream &ost, int idx)
void make_triads(int verbose_level)
void ijklm2n(int i, int j, int k, int l, int m, int &n)
int get_adjacency_matrix_of_lines(int i, int j)
void get_half_double_six_associated_with_Clebsch_map(int line1, int line2, int transversal, int hds[6], int verbose_level)
void index_of_line(int line, int &i, int &j)
void init(surface_domain *Surf, int verbose_level)
int line_cij(int i, int j)
std::string * Eckard_point_label
void init_Trihedral_to_Eckardt(int verbose_level)
int * adjacency_matrix_of_lines
void latex_table_of_half_double_sixes(std::ostream &ost)
void print_half_double_sixes_in_GAP()
int * Trihedral_pairs_row_sets
std::string * Half_double_six_label_tex
void latex_table_of_trihedral_pairs(std::ostream &ost)
schlaefli_labels * Labels
void init_incidence_matrix_of_lines_vs_tritangent_planes(int verbose_level)
void init_double_sixes(int verbose_level)
void prepare_clebsch_map(int ds, int ds_row, int &line1, int &line2, int &transversal, int verbose_level)
void latex_table_of_Eckardt_points(std::ostream &ost)
int identify_Eckardt_point(int line1, int line2, int line3, int verbose_level)
void process_trihedral_pairs(int verbose_level)
void print_line(std::ostream &ost, int rk)
void ijk2lmn(int i, int j, int k, int &l, int &m, int &n)
void init_Schlaefli_labels(int verbose_level)
description of a Clebsch map with a fixed tritangent plane
long int half_double_six[6]
void report_seventytwo_maps_bottom(std::ostream &ost)
int orbit_not_on_conic_idx
void compute_half_double_six(surface_object *SO, int verbose_level)
void report_seventytwo_maps_line(std::ostream &ost)
long int P6_perm_mapped[6]
void init(surface_domain *Surf, int f, int tritangent_plane_idx, int *three_lines_idx, long int *three_lines, int line_idx, int m1, int m2, int m3, int line_l1_l2_idx, int l1, int l2)
void compute_arc(surface_object *SO, int verbose_level)
Computes the six base points in a tritangent plane associated with the Clebsch map defined by two ske...
long int tritangent_plane_rk
int half_double_six_index
void compute_partition(int verbose_level)
void report_single_Clebsch_map(std::ostream &ost, int verbose_level)
void report_Clebsch_map_details(std::ostream &ost, surface_object *SO, int verbose_level)
void report_Clebsch_map_aut_coset(std::ostream &ost, int coset, int relative_order, int verbose_level)
long int P6_local_canonical[6]
void report_seventytwo_maps_top(std::ostream &ost)
long int transversals4[4]
cubic surfaces in PG(3,q) with 27 lines
void latex_double_six(std::ostream &ost, long int *double_six)
ring_theory::homogeneous_polynomial_domain * Poly3
int compute_rank_of_any_four(long int *&Rk, int &nb_subsets, long int *lines, int sz, int verbose_level)
int intersection_of_four_lines_but_not_b6(int *Adj, int *four_lines_idx, int b6, int verbose_level)
geometry::projective_space * P2
void prepare_system_from_FG(int *F_planes, int *G_planes, int lambda, int *&system, int verbose_level)
void unrank_plane(int *v, long int rk)
ring_theory::partial_derivative * Partials
int compute_transversals_of_any_four(long int *&Trans, int &nb_subsets, long int *lines, int sz, int verbose_level)
void read_string_of_schlaefli_labels(std::string &str, int *&v, int &sz, int verbose_level)
void print_clebsch_P_matrix_only(std::ostream &ost)
long int rank_line(int *v)
ring_theory::homogeneous_polynomial_domain * Poly3_x123
void multiply_Poly2_3_times_Poly2_3(int *input1, int *input2, int *result, int verbose_level)
int build_surface_from_double_six_and_count_Eckardt_points(long int *double_six, int verbose_level)
void print_polynomial_domains(std::ostream &ost)
void label_variables_27(ring_theory::homogeneous_polynomial_domain *HPD, int verbose_level)
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)
void label_variables_3(ring_theory::homogeneous_polynomial_domain *HPD, int verbose_level)
int rank_of_four_lines_on_Klein_quadric(long int *four_lines, int verbose_level)
void print_trihedral_pair_in_dual_coordinates_in_GAP(long int *F_planes_rank, long int *G_planes_rank)
int test_double_six_property(long int *S12, int verbose_level)
Given a set of lines in S12[12], test the double six property.
void split_nice_equation(int *nice_equation, int *&f1, int *&f2, int *&f3, int verbose_level)
ring_theory::homogeneous_polynomial_domain * Poly4_x123
void make_table_of_surfaces(int verbose_level)
void create_equation_bes(int a, int c, int *coeff, int verbose_level)
geometry::projective_space * P
geometry::grassmann * Gr3
void print_system(std::ostream &ost, int *system)
void klein_to_wedge(int *K, int *W)
surface_object * create_surface_general_abcd(int a, int b, int c, int d, int verbose_level)
void compute_intersection_points_and_indices(int *Adj, long int *Points, int nb_points, long int *Lines, int nb_lines, int *&Intersection_pt, int *&Intersection_pt_idx, int verbose_level)
void multiply_222_27_and_add(int *M1, int *M2, int *M3, int scalar, int *MM, int verbose_level)
void line_to_wedge_vec(long int *Line_rk, long int *Wedge_rk, int len)
void alice(std::ostream &ost, long int *Lines, int nb_lines)
void lines_meet3_and_skew3(long int *lines_meet3, long int *lines_skew3, long int *&lines, int &nb_lines, int verbose_level)
void print_equation_maple(std::stringstream &ost, int *coeffs)
void multiply42_and_add(int *M1, int *M2, int *MM, int verbose_level)
int rank_of_system(int len, long int *S, int verbose_level)
int create_double_six_from_five_lines_with_a_common_transversal(long int *five_pts, long int *double_six, int verbose_level)
Given a five-plus-one five_pts[5], complete the double-six.
void compute_nine_lines(int *F_planes, int *G_planes, long int *nine_lines, int verbose_level)
ring_theory::homogeneous_polynomial_domain * Poly1_4
long int rank_point(int *v)
void unrank_line(int *v, long int rk)
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)
void print_clebsch_P(std::ostream &ost)
void multiply_linear_times_linear_times_linear_in_space(int *four_coeff1, int *four_coeff2, int *four_coeff3, int *twenty_coeff, int verbose_level)
orthogonal_geometry::orthogonal * O
void create_Eckardt_fifteen_lines(long int *fifteen_lines, int a, int b, int verbose_level)
void init_Schlaefli(int verbose_level)
surface_object * create_surface_G13(int a, 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)
void minor22(int **P3, int i1, int i2, int j1, int j2, int scalar, int *Ad, 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)
void rearrange_lines_according_to_double_six(long int *Lines, int verbose_level)
Picks a double six and rearranges the lines accordingly.
ring_theory::homogeneous_polynomial_domain * Poly3_24
void Trihedral_pairs_to_planes(long int *Lines, long int *Planes_by_rank, int verbose_level)
ring_theory::homogeneous_polynomial_domain * Poly3_4
void compute_gradient(int *equation20, int *&gradient, int verbose_level)
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 compute_intersection_points(int *Adj, long int *Lines, int nb_lines, long int *&Intersection_pt, int verbose_level)
void init_large_polynomial_domains(int verbose_level)
void create_lines_from_plane_equations(int *The_plane_equations, long int *Lines, int verbose_level)
void enumerate_points(int *coeff, std::vector< long int > &Pts, int verbose_level)
void compute_local_coordinates_of_arc(long int *P6, long int *P6_local, int verbose_level)
void label_variables_4(ring_theory::homogeneous_polynomial_domain *HPD, int verbose_level)
long int compute_tangent_plane(int *pt_coords, int *equation20, int verbose_level)
field_theory::finite_field * F
surface_object * create_surface_F13(int a, int verbose_level)
int test_Eckardt_form_alpha_beta(int *coeff, int &alpha, int &beta, int verbose_level)
ring_theory::homogeneous_polynomial_domain * Poly1_x123
void print_clebsch_cubics(std::ostream &ost)
void print_basics(std::ostream &ost)
long int plane_from_three_lines(long int *three_lines, int verbose_level)
void perp_of_three_lines(long int *three_lines, long int *&perp, int &perp_sz, int verbose_level)
void line_to_klein_vec(long int *Line_rk, long int *Klein_rk, int len)
surface_object * create_surface_bes(int a, int c, int verbose_level)
void create_equation_general_abcd(int a, int b, int c, int d, int *coeff, int verbose_level)
void print_equation_tex(std::ostream &ost, int *coeffs)
surface_object * create_Eckardt_surface(int a, int b, int &alpha, int &beta, int verbose_level)
void rearrange_lines_according_to_starter_configuration(long int *Lines, long int *New_lines, int line_idx, int subset_idx, int *Adj, data_structures::set_of_sets *line_intersections, int verbose_level)
void create_equation_G13(int a, int *coeff, int verbose_level)
void make_table_of_surfaces2(std::ostream &ost, int *Q_table, int Q_table_len, int verbose_level)
void multiply_linear_times_linear_times_linear(int *three_coeff1, int *three_coeff2, int *three_coeff3, int *ten_coeff, int verbose_level)
void create_Eckardt_double_six(long int *double_six, int a, int b, int verbose_level)
void unrank_lines(int *v, long int *Rk, int nb)
long int rank_plane(int *v)
void print_equation_with_line_breaks_tex(std::ostream &ost, int *coeffs)
ring_theory::homogeneous_polynomial_domain * Poly6_27
geometry::klein_correspondence * Klein
int read_schlaefli_label(const char *p)
void create_equation_F13(int a, int *coeff, int verbose_level)
ring_theory::homogeneous_polynomial_domain * Poly2_4
void multiply_Poly1_3_times_Poly3_3(int *input1, int *input2, int *result, int verbose_level)
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.
ring_theory::homogeneous_polynomial_domain * Poly2
void do_arc_lifting_with_two_lines(long int *Arc6, int p1_idx, int p2_idx, int partition_rk, long int line1, long int line2, int *coeff20, long int *lines27, int verbose_level)
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)
void print_lines_tex(std::ostream &ost, long int *Lines, int nb_lines)
void tritangent_plane_to_trihedral_pair_and_position(int tritangent_plane_idx, int &trihedral_pair_idx, int &position, 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)
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 compute_table_E(int *field_orders, int nb_fields, long int *&Table, int *&Q, int &nb_Q, int *&E, int &nb_E_types, int verbose_level)
ring_theory::homogeneous_polynomial_domain * Poly4_27
void create_equation_Cayley_klmn(int k, int l, int m, int n, int *coeff, int verbose_level)
void print_equation_wrapped(std::ostream &ost, int *the_equation)
void compute_nine_lines_by_dual_point_ranks(long int *F_planes_rank, long int *G_planes_rank, long int *nine_lines, int verbose_level)
void make_table_of_surfaces_detailed(int *Q_table, int Q_table_len, int verbose_level)
void create_remaining_fifteen_lines(long int *double_six, long int *fifteen_lines, int verbose_level)
int f_has_large_polynomial_domains
void create_equation_Eckardt_surface(int a, int b, int *coeff, int verbose_level)
int create_double_six_from_six_disjoint_lines(long int *single_six, long int *double_six, int verbose_level)
Given a single six in single_six[6], compute the other 6 lines in a double-six.
void print_equation_in_trihedral_form(std::ostream &ost, int *the_six_plane_equations, int lambda, int *the_equation)
void build_cubic_surface_from_lines(int len, long int *S, int *coeff, int verbose_level)
void print_equation_tex_lint(std::ostream &ost, long int *coeffs)
void create_system(int len, long int *S, int *&System, int &nb_rows, int verbose_level)
void sstr_line_label(std::stringstream &sstr, long int pt)
void rearrange_lines_according_to_a_given_double_six(long int *Lines, int *given_double_six, long int *New_lines, int verbose_level)
void table_bottom(std::ostream &ost)
void label_variables_24(ring_theory::homogeneous_polynomial_domain *HPD, int verbose_level)
void compute_adjacency_matrix_of_line_disjointness_graph(int *&Adj, long int *S, int n, int verbose_level)
Given a set of lines in S[n], compute the associated disjointness graph.
void init(field_theory::finite_field *F, int verbose_level)
long int compute_cij(long int *double_six, int i, int j, int verbose_level)
Computes cij, given a double six.
void create_equations_for_pencil_of_surfaces_from_trihedral_pair(int *The_six_plane_equations, int *The_surface_equations, int verbose_level)
void unrank_point(int *v, long int rk)
ring_theory::homogeneous_polynomial_domain * Poly2_x123
void table_top(std::ostream &ost)
int intersection_of_five_lines(int *Adj, int *five_lines_idx, int verbose_level)
void assemble_tangent_quadric(int *f1, int *f2, int *f3, int *&tangent_quadric, int verbose_level)
ring_theory::homogeneous_polynomial_domain * Poly1
void multiply_conic_times_linear(int *six_coeff, int *three_coeff, int *ten_coeff, int verbose_level)
void print_equation(std::ostream &ost, int *coeffs)
properties of a particular cubic surface in PG(3,q), as defined by an object of class surface_object
void compute_reduced_set_of_points_not_on_lines_wrt_P(int P_idx, int *&f_deleted, int verbose_level)
void print_half_double_sixes_numerically(std::ostream &ost)
int * Eckardt_point_bitvector_in_Schlaefli_labeling
void print_double_sixes(std::ostream &ost)
void print_single_points(std::ostream &ost)
long int * Tritangent_plane_rk
long int * Pts_not_on_lines
void print_tritangent_planes(std::ostream &ost)
void print_plane_type_by_points(std::ostream &ost)
void make_and_print_equation_in_trihedral_form(std::ostream &ost, int t_idx)
void compute_tritangent_planes_by_rank(int verbose_level)
int * Line_intersection_pt
void report_properties_simple(std::ostream &ost, int verbose_level)
data_structures::set_of_sets * pts_on_lines
void compute_plane_type_by_points(int verbose_level)
void compute_Lines_in_tritangent_planes(int verbose_level)
void compute_gradient(int verbose_level)
void compute_axes(int verbose_level)
long int * Trihedral_pairs_as_tritangent_planes
data_structures::set_of_sets * lines_on_point
void clebsch_map_latex(std::ostream &ost, long int *Clebsch_map, int *Clebsch_coeff)
void report_properties(std::ostream &ost, int verbose_level)
void clebsch_map_find_arc_and_lines(long int *Clebsch_map, long int *Arc, long int *Blown_up_lines, int verbose_level)
void print_planes_in_trihedral_pairs(std::ostream &ost)
void latex_trihedral_pair(std::ostream &ost, int t_idx)
void print_points_on_lines(std::ostream &ost)
void print_half_double_sixes(std::ostream &ost)
void compute_transversal_lines(int line_a, int line_b, int *transversals5, int verbose_level)
int * Eckardt_point_Hesse_plane_incidence
void print_points_on_surface_but_not_on_a_line(std::ostream &ost)
void create_summary_file(std::string &fname, std::string &surface_label, std::string &col_postfix, int verbose_level)
void make_equation_in_trihedral_form(int t_idx, int *F_planes, int *G_planes, int &lambda, int *equation, int verbose_level)
void print_Hesse_planes(std::ostream &ost)
void print_points(std::ostream &ost)
void print_affine_points_in_source_code(std::ostream &ost)
void print_line_intersection_graph(std::ostream &ost)
int * Line_intersection_pt_idx
int * Eckardt_points_plane_type
void init(surface_object *SO, int verbose_level)
~surface_object_properties()
void print_equation_in_trihedral_form(std::ostream &ost, int *F_planes, int *G_planes, int lambda)
long int * tangent_plane_rank_dual
long int * Axes_Eckardt_points
void print_double_points(std::ostream &ost)
void print_Eckardt_points(std::ostream &ost)
void print_points_on_surface(std::ostream &ost)
void print_adjacency_list(std::ostream &ost)
void print_singular_points(std::ostream &ost)
int * Eckardt_points_line_type
void compute_singular_points_and_tangent_planes(int verbose_level)
void print_lines(std::ostream &ost)
void print_trihedral_pairs_numerically(std::ostream &ost)
int * Eckardt_points_schlaefli_labels
void print_equation_in_trihedral_form_equation_only(std::ostream &ost, int *F_planes, int *G_planes, int lambda)
void print_all_points_on_surface(std::ostream &ost)
long int * tangent_plane_rank_global
void print_trihedral_pairs(std::ostream &ost)
int test_full_del_pezzo(int P_idx, int *f_deleted, int verbose_level)
void print_single_tritangent_plane(std::ostream &ost, int plane_idx)
void print_adjacency_matrix_with_intersection_points(std::ostream &ost)
void print_lines_with_points_on_them(std::ostream &ost)
void print_general(std::ostream &ost)
void compute_planes_and_dual_point_ranks(int verbose_level)
void print_equation(std::ostream &ost)
void print_axes(std::ostream &ost)
surface_object_properties()
void compute_adjacency_matrix_of_line_intersection_graph(int verbose_level)
void print_neighbor_sets(std::ostream &ost)
void print_everything(std::ostream &ost, int verbose_level)
int * Eckardt_points_index
data_structures::set_of_sets * Line_neighbors
void latex_table_of_trihedral_pairs_and_clebsch_system(std::ostream &ost, int *T, int nb_T)
void compute_Trihedral_pairs_as_tritangent_planes(int verbose_level)
long int * Eckardt_points
data_structures::tally * Type_lines_on_point
long int * Lines_in_tritangent_planes
int * Adj_line_intersection_graph
void compute_properties(int verbose_level)
int * plane_type_by_points
int * plane_type_by_lines
int * Single_points_index
void print_adjacency_matrix(std::ostream &ost)
int compute_transversal_line(int line_a, int line_b, int verbose_level)
long int * Axes_line_rank
data_structures::tally * C_plane_type_by_points
data_structures::tally * Type_pts_on_lines
void print_Steiner_and_Eckardt(std::ostream &ost)
void latex_table_of_trihedral_pairs(std::ostream &ost, int *T, int nb_T)
int * Double_points_index
a particular cubic surface in PG(3,q), given by its equation
void enumerate_points(int verbose_level)
void init_equation(surface_domain *Surf, int *eqn, int verbose_level)
surface_object_properties * SOP
void recompute_properties(int verbose_level)
void compute_properties(int verbose_level)
void identify_lines(long int *lines, int nb_lines, int *line_idx, int verbose_level)
void find_double_six_and_rearrange_lines(long int *Lines, int verbose_level)
void enumerate_points_and_lines(int verbose_level)
field_theory::finite_field * F
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 init_equation_points_and_lines_only(surface_domain *Surf, int *eqn, int verbose_level)
int find_point(long int P, int &idx)
void print_nine_lines_latex(std::ostream &ost, long int *nine_lines, int *nine_lines_idx)
void find_real_lines(std::vector< long int > &The_Lines, int verbose_level)
a web of cubic curves which is used to create an algebraic variety
int * Tritangent_plane_equations
void print_dual_point_ranks(std::ostream &ost)
long int row_col_Eckardt_points[6]
void print_web_of_cubic_curves(long int *arc6, std::ostream &ost)
void report(std::ostream &ost, int verbose_level)
void create_web_and_equations_based_on_four_tritangent_planes(long int *arc6, int *base_curves4, int verbose_level)
void print_trihedral_plane_equations(std::ostream &ost)
void compute_web_of_cubic_curves(long int *arc6, int verbose_level)
long int * The_plane_rank
void create_lambda_from_trihedral_pair_and_arc(long int *arc6, int t_idx, int &lambda, int &lambda_rk, int verbose_level)
void create_surface_equation_from_trihedral_pair(long int *arc6, int t_idx, int *surface_equation, int &lambda, int verbose_level)
long int * Dual_point_ranks
void init(surface_domain *Surf, long int *arc6, int verbose_level)
void extract_six_curves_from_web(int verbose_level)
void find_Eckardt_points(int verbose_level)
void report_basics(std::ostream &ost, int verbose_level)
void print_Eckardt_point_data(std::ostream &ost, int verbose_level)
void find_point_not_on_six_curves(int &pt, int &f_point_was_found, int verbose_level)
void print_surface_equations_on_line(int *The_surface_equations, int lambda, int lambda_rk, std::ostream &ost)
int * Web_of_cubic_curves
void find_trihedral_pairs(int verbose_level)
void print_lines(std::ostream &ost)
void print_the_six_plane_equations(int *The_six_plane_equations, long int *plane6, std::ostream &ost)
void rank_of_foursubsets(int *&rk, int &N, int verbose_level)
long int * The_plane_duals
for reading and writing of csv files
a statistical analysis of data consisting of single integers
interior node in a syntax tree
to rank and unrank subspaces of a fixed dimension in F_q^n
the Klein correspondence between lines in PG(3,q) and points on the Klein quadric
points and lines in projective space, for instance on a surface
projective space PG(n,q) of dimension n over Fq
an orthogonal geometry O^epsilon(n,q)
homogeneous polynomials of a given degree in a given number of variables over a finite field GF(q)
partial derivative connects two homogeneous polynomial domains
void callback_surface_domain_sstr_line_label(std::stringstream &sstr, long int pt, void *data)
std::vector< term > equation
the orbiter library for the classification of combinatorial objects