16namespace layer5_applications {
17namespace applications_in_algebraic_geometry {
18namespace cubic_surfaces_and_arcs {
93 int seventytwo_case_idx,
int verbose_level)
95 int f_v = (verbose_level >= 1);
99 cout <<
"surfaces_arc_lifting_trace::init" << endl;
100 cout <<
"verbose_level = " << verbose_level << endl;
131 cout <<
"surfaces_arc_lifting_upstep::process_flag_orbit "
132 "po=" <<
po <<
" so=" <<
so << endl;
138 cout <<
"surfaces_arc_lifting_trace::init done" << endl;
145 int f_v = (verbose_level >= 1);
146 int f_vv = (verbose_level >= 2);
147 int f_vvv = (verbose_level >= 3);
151 cout <<
"surfaces_arc_lifting_trace::process_flag_orbit" << endl;
160 <<
" before move_arc" << endl;
170 <<
" after move_arc" << endl;
176 <<
", upstep " <<
upstep_idx <<
" / " << 3240;
177 cout <<
" f2=" <<
f2 <<
" before lift_group_elements_and_move_two_lines";
184 <<
", upstep " <<
upstep_idx <<
" / " << 3240;
185 cout <<
" f2=" <<
f2 <<
" after lift_group_elements_and_move_two_lines";
194 cout <<
" f2=" <<
f2 <<
" the lifted group elements are:";
197 cout <<
"Alpha1=" << endl;
199 cout <<
"Alpha2=" << endl;
201 cout <<
"Beta1=" << endl;
203 cout <<
"Beta2=" << endl;
205 cout <<
"Beta3=" << endl;
221 cout <<
" f2=" <<
f2;
223 cout <<
"T4 = Alpha1 * Alpha2 * Beta1 * Beta2 * Beta3 = " << endl;
231 cout <<
"surfaces_arc_lifting_trace::process_flag_orbit done" << endl;
257 int f_v = (verbose_level >= 1);
261 cout <<
"surfaces_arc_lifting_trace::move_arc" << endl;
262 cout <<
"verbose_level = " << verbose_level;
278 cout <<
"surfaces_arc_lifting_trace::move_arc before move_plane_and_arc" << endl;
282 cout <<
"surfaces_arc_lifting_trace::move_arc after move_plane_and_arc" << endl;
288 cout <<
"surfaces_arc_lifting_trace::move_arc before compute_local_coordinates_of_arc" << endl;
292 cout <<
"surfaces_arc_lifting_trace::move_arc after compute_local_coordinates_of_arc" << endl;
302 cout <<
"surfaces_arc_lifting_trace::move_arc before make_arc_canonical" << endl;
307 cout <<
"surfaces_arc_lifting_trace::move_arc after make_arc_canonical" << endl;
316 cout <<
"surfaces_arc_lifting_trace::move_arc before compute_beta1" << endl;
320 cout <<
"surfaces_arc_lifting_trace::move_arc after compute_beta1" << endl;
330 cout <<
"surfaces_arc_lifting_trace::move_arc before compute_beta2" << endl;
340 cout <<
"surfaces_arc_lifting_trace::move_arc after compute_beta2" << endl;
345 cout <<
"surfaces_arc_lifting_trace::move_arc done" << endl;
351 int f_v = (verbose_level >= 1);
355 cout <<
"surfaces_arc_lifting_trace::move_plane_and_arc" << endl;
356 cout <<
"verbose_level = " << verbose_level;
374 cout <<
"surfaces_arc_lifting_upstep::move_plane_and_arc" << endl;
382 cout <<
"surfaces_arc_lifting_trace::move_plane_and_arc" << endl;
383 cout <<
"Basis=" << endl;
389 cout <<
"surfaces_arc_lifting_trace::move_plane_and_arc" << endl;
390 cout <<
"Basis_inv=" << endl;
397 for (i = 0; i < 6; i++) {
401 cout <<
"surfaces_arc_lifting_trace::move_plane_and_arc" << endl;
402 cout <<
"P6a=" << endl;
409 cout <<
"surfaces_arc_lifting_trace::move_plane_and_arc done" << endl;
415 long int *P6_local,
long int *P6_local_canonical,
416 int &orbit_not_on_conic_idx,
int verbose_level)
418 int f_v = (verbose_level >= 1);
421 cout <<
"surfaces_arc_lifting_trace::make_arc_canonical" << endl;
426 orbit_not_on_conic_idx, verbose_level - 2);
429 cout <<
"surfaces_arc_lifting_trace::make_arc_canonical" << endl;
430 cout <<
"P6_local=" << endl;
432 cout <<
" orbit_not_on_conic_idx=" << orbit_not_on_conic_idx << endl;
434 for (i = 0; i < 6; i++) {
438 cout <<
"surfaces_arc_lifting_trace::make_arc_canonical" << endl;
439 cout <<
"P6_local_canonical=" << endl;
441 cout <<
" orbit_not_on_conic_idx=" << orbit_not_on_conic_idx << endl;
442 cout <<
"The flag orbit f satisfies "
450 cout <<
"surfaces_arc_lifting_trace::make_arc_canonical done" << endl;
456 int f_v = (verbose_level >= 1);
459 cout <<
"surfaces_arc_lifting_trace::compute_beta1" << endl;
464 long int P6_orbit_rep[6];
469 for (i = 0; i < 6; i++) {
476 cout <<
"surfaces_arc_lifting_trace::compute_beta1" << endl;
477 cout <<
"P6_orbit_rep=" << endl;
480 cout <<
"P6_perm=" << endl;
490 cout <<
"surfaces_arc_lifting_trace::compute_beta1 before "
491 "Table_orbits_on_pairs[orbit_not_on_conic_idx].recognize" << endl;
496 cout <<
"surfaces_arc_lifting_trace::compute_beta1 after "
497 "Table_orbits_on_pairs[orbit_not_on_conic_idx].recognize" << endl;
500 for (i = 0; i < 6; i++) {
508 cout <<
"surfaces_arc_lifting_trace::compute_beta1 before "
509 "The_case->compute_partition" << endl;
513 cout <<
"surfaces_arc_lifting_trace::compute_beta1 after "
514 "The_case->compute_partition" << endl;
519 cout <<
"surfaces_arc_lifting_trace::compute_beta1 after "
520 "Table_orbits_on_pairs[orbit_not_on_conic_idx].recognize" << endl;
521 cout <<
"the_partition4=";
527 cout <<
"surfaces_arc_lifting_trace::compute_beta1 done" << endl;
532 int orbit_not_on_conic_idx,
534 int &partition_orbit_idx,
535 int *the_partition4,
int verbose_level)
537 int f_v = (verbose_level >= 1);
540 cout <<
"surfaces_arc_lifting_trace::compute_beta2" << endl;
544 cout <<
"surfaces_arc_lifting_trace::compute_beta2 before "
545 "Table_orbits_on_pairs[orbit_not_on_conic_idx].recognize" << endl;
548 Table_orbits_on_partition[pair_orbit_idx].
recognize(
550 partition_orbit_idx, verbose_level - 4);
552 cout <<
"surfaces_arc_lifting_trace::compute_beta2 after "
553 "Table_orbits_on_pairs[orbit_not_on_conic_idx].recognize" << endl;
554 cout <<
"pair_orbit_idx=" << pair_orbit_idx << endl;
555 cout <<
"partition_orbit_idx=" << partition_orbit_idx << endl;
560 partition_orbit_first[pair_orbit_idx] + partition_orbit_idx;
564 cout <<
"surfaces_arc_lifting_trace::compute_beta2 after "
565 "Table_orbits_on_pairs[orbit_not_on_conic_idx].recognize" << endl;
566 cout <<
"pair_orbit_idx=" << pair_orbit_idx << endl;
567 cout <<
"partition_orbit_idx=" << partition_orbit_idx << endl;
568 cout <<
"f2=" <<
f2 << endl;
572 cout <<
"flag_orbit_on_arcs_not_on_a_conic_idx[f2] != orbit_not_on_conic_idx" << endl;
576 cout <<
"flag_orbit_on_pairs_idx[f2] != pair_orbit_idx" << endl;
581 cout <<
"flag_orbit_on_partition_idx[f2] != partition_orbit_idx" << endl;
586 cout <<
"surfaces_arc_lifting_trace::compute_beta2 done" << endl;
594 int f_v = (verbose_level >= 1);
595 int f_vv = (verbose_level >= 2);
599 cout <<
"surfaces_arc_lifting_trace::lift_group_elements_and_move_two_lines" << endl;
600 cout <<
"verbose_level = " << verbose_level;
606 cout <<
" f2 = " <<
f2 << endl;
611 cout <<
"surfaces_arc_lifting_trace::lift_group_elements_and_move_two_lines "
612 "before embedding" << endl;
613 cout <<
"Elt_alpha2=" << endl;
615 cout <<
"Elt_beta1=" << endl;
617 cout <<
"Elt_beta2=" << endl;
624 cout <<
"surfaces_arc_lifting_trace::lift_group_elements_and_move_two_lines "
625 "before embed Elt_alpha2" << endl;
629 cout <<
"surfaces_arc_lifting_trace::lift_group_elements_and_move_two_lines "
630 "before embed Elt_alpha2" << endl;
636 cout <<
"surfaces_arc_lifting_trace::lift_group_elements_and_move_two_lines "
637 "after embedding" << endl;
638 cout <<
"Elt_Alpha2=" << endl;
640 cout <<
"Elt_Beta1=" << endl;
642 cout <<
"Elt_Beta2=" << endl;
662 cout <<
"surfaces_arc_lifting_trace::lift_group_elements_and_move_two_lines "
671 long int line1_to, line2_to;
679 line1_to = Table_orbits_on_pairs[orbit_not_on_conic_idx].
680 Table_orbits_on_partition[pair_orbit_idx].;
707 cout <<
"surfaces_arc_lifting_trace::lift_group_elements_and_move_two_lines "
708 "line1_to=" << line1_to <<
" line2_to=" << line2_to << endl;
712 cout <<
"line1_to=" << line1_to <<
"=" << endl;
715 cout <<
"line2_to=" << line2_to <<
"=" << endl;
720 cout <<
"surfaces_arc_lifting_trace::lift_group_elements_and_move_two_lines "
748 cout <<
"surfaces_arc_lifting_trace::lift_group_elements_and_move_two_lines "
749 "p1=" << p1 <<
" p2=" << p2 << endl;
755 cout <<
"L1 and line1_to do not intersect the plane in "
756 "the same point, so we switch L1 and L2" << endl;
766 cout <<
"no need to switch" << endl;
774 cout <<
"surfaces_arc_lifting_trace::lift_group_elements_and_move_two_lines "
775 "before hyperplane_lifting_with_two_lines_moved" << endl;
784 cout <<
"surfaces_arc_lifting_trace::lift_group_elements_and_move_two_lines "
785 "after hyperplane_lifting_with_two_lines_moved" << endl;
791 cout <<
"surfaces_arc_lifting_trace::lift_group_elements_and_move_two_lines" << endl;
792 cout <<
"Elt_beta3=" << endl;
794 cout <<
"Elt_beta3=" << endl;
803 cout <<
"surfaces_arc_lifting_trace::lift_group_elements_and_move_two_lines done" << endl;
809 int f_v = (verbose_level >= 1);
816 cout <<
"surfaces_arc_lifting_trace::embed" << endl;
821 for (i = 0; i < 3; i++) {
822 for (j = 0; j < 3; j++) {
829 cout <<
"surfaces_arc_lifting_trace::embed M4=" << endl;
837 cout <<
"surfaces_arc_lifting_trace::embed before make_element" << endl;
843 cout <<
"surfaces_arc_lifting_trace::embed done" << endl;
861 if (f_print_as_exponentials_save ==
FALSE) {
description of a Clebsch map with a fixed tritangent plane
int orbit_not_on_conic_idx
long int P6_perm_mapped[6]
long int tritangent_plane_rk
void compute_partition(int verbose_level)
long int P6_local_canonical[6]
geometry::projective_space * P
geometry::grassmann * Gr3
void compute_local_coordinates_of_arc(long int *P6, long int *P6_local, int verbose_level)
field_theory::finite_field * F
long int * Tritangent_plane_rk
surface_object_properties * SOP
a collection of functions related to sorted vectors
int lint_vec_search_linear(long int *v, int len, long int a, int &idx)
void lint_vec_heapsort(long int *v, int len)
int f_print_as_exponentials
void PG_element_normalize(int *v, int stride, int len)
linear_algebra::linear_algebra * Linear_algebra
various functions related to geometries
void hyperplane_lifting_with_two_lines_moved(projective_space *P, long int line1_from, long int line1_to, long int line2_from, long int line2_to, int *A4, int verbose_level)
void unrank_embedded_subspace_lint_here(int *Basis, long int rk, int verbose_level)
int point_of_intersection_of_a_line_and_a_plane_in_three_space(long int line, int plane, int verbose_level)
void unrank_line(int *basis, long int rk)
void invert_matrix(int *A, int *A_inv, int n, int verbose_level)
void element_print_latex(void *elt, std::ostream &ost)
void element_print_quick(void *elt, std::ostream &ost)
void element_mult(void *a, void *b, void *ab, int verbose_level)
int image_of(void *elt, int a)
void make_element(int *Elt, int *data, int verbose_level)
long int element_image_of(long int a, void *elt, int verbose_level)
int downstep_primary_orbit
int downstep_secondary_orbit
flag_orbit_node * Flag_orbit_node
classification of cubic surfaces using lifted 6-arcs
algebraic_geometry::seventytwo_cases Seventytwo[72]
surfaces_arc_lifting_definition_node * D
surfaces_arc_lifting * Lift
long int * Flag2_representation
actions::action * A_on_arc
void recognize(long int *pair, int *transporter, int &orbit_idx, int verbose_level)
algebraic_geometry::surface_object * SO
surfaces_arc_lifting_trace()
void move_plane_and_arc(long int *P6a, int verbose_level)
void embed(int *Elt_A3, int *Elt_A4, int verbose_level)
void compute_beta2(int orbit_not_on_conic_idx, int pair_orbit_idx, int &partition_orbit_idx, int *the_partition4, int verbose_level)
surfaces_arc_lifting_upstep * Up
algebraic_geometry::seventytwo_cases The_case
void compute_beta1(algebraic_geometry::seventytwo_cases *The_case, int verbose_level)
void init(surfaces_arc_lifting_upstep *Up, int seventytwo_case_idx, int verbose_level)
void make_arc_canonical(long int *P6_local, long int *P6_local_canonical, int &orbit_not_on_conic_idx, int verbose_level)
void process_flag_orbit(surfaces_arc_lifting_upstep *Up, int verbose_level)
void move_arc(int verbose_level)
void report_product(std::ostream &ost, int *Elt, int verbose_level)
void lift_group_elements_and_move_two_lines(int verbose_level)
~surfaces_arc_lifting_trace()
int * flag_orbit_on_arcs_not_on_a_conic_idx
arc_orbits_on_pairs * Table_orbits_on_pairs
int * flag_orbit_on_partition_idx
six_arcs_not_on_a_conic * Six_arcs
algebraic_geometry::surface_domain * Surf
invariant_relations::flag_orbits * Flag_orbits
int * flag_orbit_on_pairs_idx
cubic_surfaces_in_general::surface_with_action * Surf_A
field_theory::finite_field * F
void recognize(long int *arc6, int *transporter, int &orbit_not_on_conic_idx, int verbose_level)
algebraic_geometry::surface_domain * Surf
#define Lint_vec_copy(A, B, C)
#define Int_vec_zero(A, B)
#define Lint_vec_print(A, B, C)
#define Int_matrix_print(A, B, C)
#define Int_vec_copy(A, B, C)
#define Int_vec_print(A, B, C)
the orbiter library for the classification of combinatorial objects