17namespace layer1_foundations {
18namespace algebraic_geometry {
45 int f_v = (verbose_level >= 1);
48 cout <<
"quartic_curve_domain::init" << endl;
55 cout <<
"quartic_curve_domain::init before P->projective_space_init" << endl;
61 cout <<
"quartic_curve_domain::init after P->projective_space_init" << endl;
67 cout <<
"quartic_curve_domain::init before init_polynomial_domains" << endl;
71 cout <<
"quartic_curve_domain::init after init_polynomial_domains" << endl;
79 cout <<
"quartic_curve_domain::init done" << endl;
85 int f_v = (verbose_level >= 1);
88 cout <<
"quartic_curve_domain::init_polynomial_domains" << endl;
94 cout <<
"surface_domain::init_polynomial_domains before Poly1_3->init" << endl;
102 cout <<
"surface_domain::init_polynomial_domains after Poly1_3->init" << endl;
109 cout <<
"surface_domain::init_polynomial_domains before Poly2_3->init" << endl;
117 cout <<
"surface_domain::init_polynomial_domains after Poly2_3->init" << endl;
124 cout <<
"surface_domain::init_polynomial_domains before Poly3_3->init" << endl;
132 cout <<
"surface_domain::init_polynomial_domains after Poly3_3->init" << endl;
138 cout <<
"surface_domain::init_polynomial_domains before Poly4_3->init" << endl;
146 cout <<
"surface_domain::init_polynomial_domains after Poly4_3->init" << endl;
151 cout <<
"surface_domain::init_polynomial_domains before Poly3_4->init" << endl;
159 cout <<
"surface_domain::init_polynomial_domains after Poly3_4->init" << endl;
167 cout <<
"surface_domain::init_polynomial_domains initializing partials" << endl;
169 for (i = 0; i < 3; i++) {
173 cout <<
"surface_domain::init_polynomial_domains initializing partials done" << endl;
178 cout <<
"quartic_curve_domain::init_polynomial_domains done" << endl;
232 ost <<
"The lines are:\\\\" << endl;
233 ost <<
"\\begin{multicols}{2}" << endl;
235 for (i = 0; i < nb_lines; i++) {
244 if (nb_lines == 27) {
248 ost <<
" = " << endl;
254 ost <<
"_{" << Lines[i] <<
"}" << endl;
258 ost <<
"\\left[" << endl;
260 ost <<
"\\right]_{" << Lines[i] <<
"}" << endl;
265 ost <<
"\\end{multicols}" << endl;
266 ost <<
"Rank of lines: ";
268 ost <<
"\\\\" << endl;
275 long int *Pts,
int nb_points,
276 long int *Lines,
int nb_lines,
281 int f_v = (verbose_level >= 1);
288 cout <<
"quartic_curve_domain::compute_points_on_lines" << endl;
290 f_is_on_line =
NEW_int(nb_points);
295 nb_lines,
F->
q + 1, 0 );
296 pt_coords =
NEW_int(nb_points * 3);
297 for (i = 0; i < nb_points; i++) {
302 for (i = 0; i < nb_lines; i++) {
305 for (j = 0; j < nb_points; j++) {
311 f_is_on_line[j] =
TRUE;
319 cout <<
"quartic_curve_domain::compute_points_on_lines done" << endl;
326 int *six_coeff_b,
int *fifteen_coeff,
329 int f_v = (verbose_level >= 1);
330 int i, j, a, b, c, idx, u;
334 cout <<
"quartic_curve_domain::multiply_conic_times_conic" << endl;
339 for (i = 0; i < 6; i++) {
344 for (j = 0; j < 6; j++) {
351 for (u = 0; u < 3; u++) {
356 cout <<
"quartic_curve_domain::multiply_conic_times_conic "
360 fifteen_coeff[idx] =
F->
add(fifteen_coeff[idx], c);
366 cout <<
"quartic_curve_domain::multiply_conic_times_conic done" << endl;
371 int *three_coeff,
int *ten_coeff,
374 int f_v = (verbose_level >= 1);
375 int i, j, a, b, c, idx, u;
379 cout <<
"quartic_curve_domain::multiply_conic_times_line" << endl;
384 for (i = 0; i < 6; i++) {
389 for (j = 0; j < 3; j++) {
396 for (u = 0; u < 3; u++) {
401 cout <<
"quartic_curve_domain::multiply_conic_times_line "
405 ten_coeff[idx] =
F->
add(ten_coeff[idx], c);
411 cout <<
"quartic_curve_domain::multiply_conic_times_line done" << endl;
416 int *line2,
int *six_coeff,
419 int f_v = (verbose_level >= 1);
420 int i, j, a, b, c, idx, u;
424 cout <<
"quartic_curve_domain::multiply_line_times_line" << endl;
429 for (i = 0; i < 3; i++) {
434 for (j = 0; j < 3; j++) {
441 for (u = 0; u < 3; u++) {
446 cout <<
"quartic_curve_domain::multiply_line_times_line "
450 six_coeff[idx] =
F->
add(six_coeff[idx], c);
456 cout <<
"quartic_curve_domain::multiply_line_times_line done" << endl;
464 int f_v = (verbose_level >= 1);
468 cout <<
"quartic_curve_domain::multiply_three_lines" << endl;
477 cout <<
"quartic_curve_domain::multiply_three_lines done" << endl;
486 int f_v = (verbose_level >= 1);
491 cout <<
"quartic_curve_domain::multiply_four_lines" << endl;
501 cout <<
"quartic_curve_domain::multiply_four_lines done" << endl;
510 int f_v = (verbose_level >= 1);
514 cout <<
"quartic_curve_domain::assemble_cubic_surface" << endl;
529 cout <<
"f1[" << i <<
"] = " << a << endl;
536 cout <<
"quartic_curve_domain::assemble_cubic_surface "
540 eqn20[idx] =
F->
add(eqn20[idx], a);
549 cout <<
"f2[" << i <<
"] = " << a << endl;
556 cout <<
"quartic_curve_domain::assemble_cubic_surface "
560 eqn20[idx] =
F->
add(eqn20[idx], a);
569 cout <<
"f3[" << i <<
"] = " << a << endl;
576 cout <<
"quartic_curve_domain::assemble_cubic_surface "
580 eqn20[idx] =
F->
add(eqn20[idx], a);
587 cout <<
"quartic_curve_domain::assemble_cubic_surface done" << endl;
592 int *eqn20,
int verbose_level)
604 int f_v = (verbose_level >= 1);
608 cout <<
"quartic_curve_domain::create_surface" << endl;
612 cout <<
"quartic_curve_domain::create_surface, QP == NULL" << endl;
622 long int Bitangents4[4];
623 int Bitangents_coeffs[16];
624 int six_coeffs_conic[6];
628 int conic_squared_15[15];
629 int four_lines_15[15];
636 if (nb_bitangents < 4) {
637 cout <<
"quartic_curve_domain::create_surface, nb_bitangents < 4" << endl;
643 cout <<
"quartic_curve_domain::create_surface we found " << nb_bitangents <<
" bitangents" << endl;
649 for (h = 0; h < nCk; h++) {
652 cout <<
"quartic_curve_domain::create_surface trying subset " << h <<
" / " << nCk <<
" which is ";
656 for (i = 0; i < 4; i++) {
657 Idx[i] = Bitangents[set[i]];
661 for (i = 0; i < 4; i++) {
664 cout <<
"quartic_curve_domain::create_surface QP->pts_on_lines->Set_size[Idx[i]] != 2" << endl;
671 for (i = 0; i < 8; i++) {
672 Points[i] = Q->
Pts[pt_idx[i]];
675 cout <<
"quartic_curve_domain::create_surface trying subset " << h <<
" / " << nCk <<
" Points = ";
684 cout <<
"quartic_curve_domain::create_surface The four bitangents are syzygetic" << endl;
689 cout <<
"quartic_curve_domain::create_surface, could not find a syzygetic set of bitangents" << endl;
693 cout <<
"quartic_curve_domain::create_surface trying subset " << h <<
" / " << nCk <<
" Bitangents4 = ";
699 six_coeffs_conic, conic_squared_15,
703 cout <<
"quartic_curve_domain::create_surface conic squared = ";
708 for (i = 0; i < 4; i++) {
713 cout <<
"quartic_curve_domain::create_surface chosen bitangents in dual coordinates = ";
719 Bitangents_coeffs + 1 * 3,
720 Bitangents_coeffs + 2 * 3,
721 Bitangents_coeffs + 3 * 3,
726 cout <<
"quartic_curve_domain::create_surface product of 4 bitangents = ";
740 cout <<
"quartic_curve_domain::create_surface r != 2" << endl;
746 cout <<
"quartic_curve_domain::create_surface kernel = ";
755 cout <<
"quartic_curve_domain::create_surface lambda = " << lambda <<
" mu = " << mu << endl;
758 int f1_three_coeff[3];
760 int f3_ten_coeff[10];
763 Bitangents_coeffs + 1 * 3,
764 Bitangents_coeffs + 2 * 3,
765 Bitangents_coeffs + 3 * 3,
773 cout <<
"quartic_curve_domain::create_surface computing square root of lambda" << endl;
777 cout <<
"quartic_curve_domain::create_surface sqrt_lambda = " << sqrt_lambda << endl;
782 six_coeffs_conic, lambda, f2_six_coeff,
788 fourth =
F->
mult(half, half);
792 Bitangents_coeffs + 0 * 3, a, f1_three_coeff,
805 cout <<
"quartic_curve_domain::create_surface eqn20 = ";
813 cout <<
"quartic_curve_domain::create_surface done" << endl;
819 int f_v = (verbose_level >= 1);
823 cout <<
"quartic_curve_domain::compute_gradient" << endl;
828 cout <<
"quartic_curve_domain::compute_gradient Poly3_3->get_nb_monomials() = " <<
Poly3_3->
get_nb_monomials() << endl;
833 for (i = 0; i < 3; i++) {
835 cout <<
"quartic_curve_domain::compute_gradient i=" << i << endl;
838 cout <<
"quartic_curve_domain::compute_gradient eqn_in=";
840 cout <<
" = " << endl;
848 cout <<
"quartic_curve_domain::compute_gradient "
861 cout <<
"quartic_curve_domain::compute_gradient done" << endl;
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)
data_structures::set_of_sets * pts_on_lines
data_structures::tally * Bitangent_line_type
a particular quartic curve in PG(2,q), given by its equation
long int bitangents28[28]
quartic_curve_object_properties * QP
schlaefli labeling of objects in cubic surfaces with 27 lines
std::string * Line_label_tex
void init(int verbose_level)
a collection of combinatorial functions
void unrank_k_subset(int rk, int *set, int n, int k)
long int binomial_lint(int n, int k)
void transpose(int *M, int m, int n, int *Mt)
void matrix_print(int *p, int m, int n)
void zero(long int *v, long int len)
void add_element(int i, long int a)
void init_basic_constant_size(int underlying_set_size, int nb_sets, int constant_size, int verbose_level)
void get_class_by_value(int *&Pts, int &nb_pts, int value, int verbose_level)
void PG_element_normalize_from_front(int *v, int stride, int len)
linear_algebra::linear_algebra * Linear_algebra
void unrank_lint(long int rk, int verbose_level)
void latex_matrix(std::ostream &ost, int *p)
projective space PG(n,q) of dimension n over Fq
int determine_conic_in_plane(long int *input_pts, int nb_pts, int *six_coeffs, int verbose_level)
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)
void unrank_line(int *basis, long int rk)
int Gauss_easy(int *A, int m, int n)
int RREF_and_kernel(int n, int k, int *A, int verbose_level)
interface to create latex output files
void print_integer_matrix_tex(std::ostream &ost, int *p, int m, int n)
data_structures::lint_vec * Lint_vec
data_structures::int_vec * Int_vec
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)
int get_monomial(int i, int j)
void multiply_by_scalar(int *coeff_in, int scalar, int *coeff_out, int verbose_level)
void print_equation(std::ostream &ost, int *coeffs)
int * get_monomial_pointer(int i)
void print_equation_with_line_breaks_tex(std::ostream &ost, int *coeffs, int nb_terms_per_line, const char *new_line_text)
int index_of_monomial(int *v)
void print_equation_str(std::stringstream &ost, int *coeffs)
partial derivative connects two homogeneous polynomial domains
void apply(int *eqn_in, int *eqn_out, int verbose_level)
void init(homogeneous_polynomial_domain *H, homogeneous_polynomial_domain *Hd, int variable_idx, int verbose_level)
#define Int_vec_zero(A, B)
#define Lint_vec_print(A, B, C)
#define NEW_OBJECTS(type, n)
#define Int_vec_copy(A, B, C)
#define Int_vec_print(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects