17namespace layer1_foundations {
18namespace algebraic_geometry {
22 int *three_coeff,
int *ten_coeff,
25 int f_v = (verbose_level >= 1);
26 int i, j, a, b, c, idx, u;
30 cout <<
"surface_domain::multiply_conic_times_linear" << endl;
35 for (i = 0; i < 6; i++) {
40 for (j = 0; j < 3; j++) {
47 for (u = 0; u < 3; u++) {
52 cout <<
"surface_domain::multiply_conic_times_linear "
56 ten_coeff[idx] =
F->
add(ten_coeff[idx], c);
62 cout <<
"surface_domain::multiply_conic_times_linear done" << endl;
67 int *three_coeff1,
int *three_coeff2,
int *three_coeff3,
68 int *ten_coeff,
int verbose_level)
70 int f_v = (verbose_level >= 1);
71 int i, j, k, a, b, c, d, idx, u;
75 cout <<
"surface_domain::multiply_linear_times_linear_times_linear" << endl;
79 for (i = 0; i < 3; i++) {
84 for (j = 0; j < 3; j++) {
89 for (k = 0; k < 3; k++) {
95 for (u = 0; u < 3; u++) {
102 cout <<
"surface::multiply_linear_times_"
103 "linear_times_linear idx >= 10" << endl;
106 ten_coeff[idx] =
F->
add(ten_coeff[idx], d);
113 cout <<
"surface_domain::multiply_linear_times_linear_times_linear done" << endl;
118 int *four_coeff1,
int *four_coeff2,
int *four_coeff3,
119 int *twenty_coeff,
int verbose_level)
121 int f_v = (verbose_level >= 1);
122 int i, j, k, a, b, c, d, idx, u;
126 cout <<
"surface_domain::multiply_linear_times_linear_times_linear_in_space" << endl;
130 for (i = 0; i < 4; i++) {
135 for (j = 0; j < 4; j++) {
140 for (k = 0; k < 4; k++) {
146 for (u = 0; u < 4; u++) {
153 cout <<
"surface_domain::multiply_linear_times_linear_"
154 "times_linear_in_space idx >= 20" << endl;
157 twenty_coeff[idx] =
F->
add(twenty_coeff[idx], d);
164 cout <<
"surface_domain::multiply_linear_times_linear_times_linear_in_space done" << endl;
169 int *input1,
int *input2,
170 int *result,
int verbose_level)
172 int f_v = (verbose_level >= 1);
173 int i, j, a, b, c, idx, u;
177 cout <<
"surface_domain::multiply_Poly2_3_times_Poly2_3" << endl;
193 for (u = 0; u < 3; u++) {
197 result[idx] =
F->
add(result[idx], c);
203 cout <<
"surface_domain::multiply_Poly2_3_times_Poly2_3 done" << endl;
208 int *result,
int verbose_level)
210 int f_v = (verbose_level >= 1);
211 int i, j, a, b, c, idx, u;
215 cout <<
"surface_domain::multiply_Poly1_3_times_Poly3_3" << endl;
230 for (u = 0; u < 3; u++) {
234 result[idx] =
F->
add(result[idx], c);
239 cout <<
"surface_domain::multiply_Poly1_3_times_Poly3_3 done" << endl;
244 int *The_six_plane_equations,
int *The_surface_equations,
249 int f_v = (verbose_level >= 1);
258 cout <<
"surface_domain::create_equations_for_pencil_of_surfaces_from_trihedral_pair" << endl;
263 The_six_plane_equations + 0 * 4,
264 The_six_plane_equations + 1 * 4,
265 The_six_plane_equations + 2 * 4,
268 The_six_plane_equations + 3 * 4,
269 The_six_plane_equations + 4 * 4,
270 The_six_plane_equations + 5 * 4,
274 for (l = 0; l <
q + 1; l++) {
286 cout <<
"surface_domain::create_equations_for_pencil_of_surfaces_from_trihedral_pair done" << endl;
296 int f_v = (verbose_level >= 1);
301 cout <<
"surface_domain::plane_from_three_lines" << endl;
306 cout <<
"surface_domain::plane_from_three_lines rk != 3" << endl;
312 cout <<
"surface_domain::plane_from_three_lines done" << endl;
321 int f_v = (verbose_level >= 1);
324 long int lines_in_tritangent_plane[3];
325 long int three_lines[3];
329 cout <<
"surface_domain::Trihedral_pairs_to_planes" << endl;
332 for (i = 0; i < 3; i++) {
333 for (j = 0; j < 3; j++) {
335 three_lines[j] = Lines[lines_in_tritangent_plane[j]];
338 Planes_by_rank[t * 6 + i] = rk;
340 for (j = 0; j < 3; j++) {
341 for (i = 0; i < 3; i++) {
343 three_lines[i] = Lines[lines_in_tritangent_plane[i]];
346 Planes_by_rank[t * 6 + 3 + j] = rk;
350 cout <<
"Trihedral_pairs_to_planes:" << endl;
355 cout <<
"surface_domain::Trihedral_pairs_to_planes done" << endl;
361void surface_domain::compute_tritangent_planes_slow(
long int *Lines,
362 long int *&Tritangent_planes,
int &nb_tritangent_planes,
363 long int *&Unitangent_planes,
int &nb_unitangent_planes,
364 long int *&Lines_in_tritangent_plane,
365 long int *&Line_in_unitangent_plane,
368 int f_v = (verbose_level >= 1);
369 int *Inc_lines_planes;
375 cout <<
"surface_domain::compute_tritangent_planes_slow" << endl;
378 cout <<
"Lines=" << endl;
379 lint_vec_print(cout, Lines, 27);
383 Inc_lines_planes, nb_planes, 0 );
385 The_plane_type =
NEW_int(nb_planes);
386 int_vec_zero(The_plane_type, nb_planes);
388 for (j = 0; j < nb_planes; j++) {
389 for (i = 0; i < 27; i++) {
390 if (Inc_lines_planes[i * nb_planes + j]) {
397 Plane_type.init(The_plane_type, nb_planes,
FALSE, 0);
399 cout <<
"surface_domain::compute_tritangent_planes_slow The plane type is: ";
400 Plane_type.print_naked(
TRUE);
405 Plane_type.get_class_by_value_lint(Tritangent_planes,
406 nb_tritangent_planes, 3 , 0 );
408 cout <<
"surface_domain::compute_tritangent_planes_slow "
409 "The tritangent planes are: ";
410 lint_vec_print(cout, Tritangent_planes, nb_tritangent_planes);
413 Lines_in_tritangent_plane =
NEW_lint(nb_tritangent_planes * 3);
414 for (h = 0; h < nb_tritangent_planes; h++) {
415 j = Tritangent_planes[h];
417 for (i = 0; i < 27; i++) {
418 if (Inc_lines_planes[i * nb_planes + j]) {
419 Lines_in_tritangent_plane[h * 3 + c++] = i;
423 cout <<
"surface_domain::compute_tritangent_planes_slow c != 3" << endl;
429 Plane_type.get_class_by_value_lint(Unitangent_planes,
430 nb_unitangent_planes, 1 , 0 );
432 cout <<
"surface_domain::compute_tritangent_planes_slow "
433 "The unitangent planes are: ";
434 lint_vec_print(cout, Unitangent_planes, nb_unitangent_planes);
437 Line_in_unitangent_plane =
NEW_lint(nb_unitangent_planes);
438 for (h = 0; h < nb_unitangent_planes; h++) {
439 j = Unitangent_planes[h];
441 for (i = 0; i < 27; i++) {
442 if (Inc_lines_planes[i * nb_planes + j]) {
443 Line_in_unitangent_plane[h * 1 + c++] = i;
447 cout <<
"surface_domain::compute_tritangent_planes_slow c != 1" << endl;
456 cout <<
"surface_domain::compute_tritangent_planes_slow done" << endl;
467 int f_v = (verbose_level >= 1);
472 cout <<
"surface_domain::clebsch_cubics" << endl;
476 cout <<
"surface::clebsch_cubics f_has_large_"
477 "polynomial_domains is FALSE" << endl;
491 for (i = 0; i < 3; i++) {
492 for (j = 0; j < 4; j++) {
497 for (i = 0; i < 3; i++) {
498 for (j = 0; j < 3; j++) {
520 cout <<
"surface_domain::clebsch_cubics "
521 "Setting up the matrix P:" << endl;
523 for (i = 0; i < 3; i++) {
524 for (j = 0; j < 4; j++) {
525 cout <<
"i=" << i <<
" j=" << j << endl;
527 c0 = coeffs[(i * 4 + j) * 4 + 0];
528 c1 = coeffs[(i * 4 + j) * 4 + 1];
534 c0 = coeffs[(i * 4 + j) * 4 + 2];
535 c1 = coeffs[(i * 4 + j) * 4 + 3];
546 cout <<
"surface_domain::clebsch_cubics the matrix "
547 "Clebsch_P is:" << endl;
549 for (i = 0; i < 3; i++) {
550 for (j = 0; j < 4; j++) {
551 cout <<
"Clebsch_P_" << i <<
"," << j <<
":";
565 cout <<
"surface_domain::clebsch_cubics allocating cubics" << endl;
574 for (i = 0; i < 4; i++) {
577 for (i = 0; i < 3; i++) {
578 for (j = 0; j < 3; j++) {
584 cout <<
"surface_domain::clebsch_cubics computing "
585 "C[3] = the determinant" << endl;
618 int size_complement, scalar;
622 cout <<
"surface_domain::clebsch_cubics computing adjugate" << endl;
625 for (i = 0; i < 3; i++) {
628 for (j = 0; j < 3; j++) {
645 cout <<
"surface_domain::clebsch_cubics multiply adjugate "
646 "times last column" << endl;
649 for (i = 0; i < 3; i++) {
650 for (j = 0; j < 3; j++) {
657 cout <<
"surface_domain::clebsch_cubics We have "
658 "computed the Clebsch cubics" << endl;
671 for (i = 0; i < 4; i++) {
683 for (h = 0; h < 4; h++) {
699 cout <<
"surface_domain::clebsch_cubics done" << endl;
704 int scalar,
int *MM,
int verbose_level)
706 int f_v = (verbose_level >= 1);
707 int i, j, k, a, b, c, d, idx;
711 cout <<
"surface_domain::multiply_222_27_and_add" << endl;
715 cout <<
"surface_domain::multiply_222_27_and_add "
716 "f_has_large_polynomial_domains is FALSE" << endl;
742 cout <<
"surface_domain::multiply_222_27_and_add "
743 "idx >= nb_monomials6" << endl;
746 d =
F->
mult(scalar, d);
747 MM[idx] =
F->
add(MM[idx], d);
754 cout <<
"surface_domain::multiply_222_27_and_add done" << endl;
759 int scalar,
int *Ad,
int verbose_level)
761 int f_v = (verbose_level >= 1);
762 int i, j, a, b, d, idx;
766 cout <<
"surface_domain::minor22" << endl;
770 cout <<
"surface_domain::minor22 "
771 "f_has_large_polynomial_domains is FALSE" << endl;
776 a = P3[i1 * 3 + j1][i];
781 b = P3[i2 * 3 + j2][j];
791 cout <<
"surface_domain::minor22 "
792 "idx >= nb_monomials4" << endl;
795 d =
F->
mult(scalar, d);
796 Ad[idx] =
F->
add(Ad[idx], d);
800 a = P3[i2 * 3 + j1][i];
805 b = P3[i1 * 3 + j2][j];
815 cout <<
"surface_domain::minor22 "
816 "idx >= nb_monomials4" << endl;
819 d =
F->
mult(scalar, d);
821 Ad[idx] =
F->
add(Ad[idx], d);
827 cout <<
"surface_domain::minor22 done" << endl;
832 int *MM,
int verbose_level)
834 int f_v = (verbose_level >= 1);
835 int i, j, a, b, d, idx;
839 cout <<
"surface_domain::multiply42_and_add" << endl;
843 cout <<
"surface_domain::multiply42_and_add "
844 "f_has_large_polynomial_domains is FALSE" << endl;
863 cout <<
"surface_domain::multiply42_and_add "
864 "idx >= nb_monomials6" << endl;
867 MM[idx] =
F->
add(MM[idx], d);
872 cout <<
"surface_domain::multiply42_and_add done" << endl;
877 int lambda,
int *&system,
int verbose_level)
879 int f_v = (verbose_level >= 1);
884 cout <<
"surface_domain::prepare_system_from_FG" << endl;
888 for (i = 0; i < 3; i++) {
889 for (j = 0; j < 4; j++) {
890 int *p = system + (i * 4 + j) * 3;
893 p[1] =
F->
mult(lambda, G_planes[0 * 4 + j]);
894 p[2] = F_planes[2 * 4 + j];
897 p[0] = F_planes[0 * 4 + j];
899 p[2] = G_planes[1 * 4 + j];
902 p[0] = G_planes[2 * 4 + j];
903 p[1] = F_planes[1 * 4 + j];
909 cout <<
"surface_domain::prepare_system_from_FG done" << endl;
915 long int *nine_lines,
int verbose_level)
917 int f_v = (verbose_level >= 1);
922 cout <<
"surface_domain::compute_nine_lines" << endl;
924 for (i = 0; i < 3; i++) {
925 for (j = 0; j < 3; j++) {
934 cout <<
"The nine lines are: ";
939 cout <<
"surface_domain::compute_nine_lines done" << endl;
944 long int *F_planes_rank,
945 long int *G_planes_rank,
long int *nine_lines,
int verbose_level)
947 int f_v = (verbose_level >= 1);
954 cout <<
"surface_domain::compute_nine_lines_by_dual_point_ranks" << endl;
956 for (i = 0; i < 3; i++) {
959 for (i = 0; i < 3; i++) {
963 for (i = 0; i < 3; i++) {
964 for (j = 0; j < 3; j++) {
973 cout <<
"The nine lines are: ";
978 cout <<
"surface_domain::compute_nine_lines_by_dual_point_ranks done" << endl;
983 int *&f1,
int *&f2,
int *&f3,
int verbose_level)
985 int f_v = (verbose_level >= 1);
988 cout <<
"surface_domain::split_nice_equation" << endl;
1000 for (i = 0; i < 20; i++) {
1001 a = nice_equation[i];
1007 cout <<
"surface_domain::split_nice_equation the x_0^3 "
1008 "term is supposed to be zero" << endl;
1011 else if (M[0] == 2) {
1015 else if (M[0] == 1) {
1019 else if (M[0] == 0) {
1025 cout <<
"surface_domain::split_nice_equation done" << endl;
1030 int *f1,
int *f2,
int *f3,
1031 int *&tangent_quadric,
int verbose_level)
1034 int f_v = (verbose_level >= 1);
1037 cout <<
"surface_domain::assemble_tangent_quadric" << endl;
1055 tangent_quadric[idx] =
F->
mult(two, a);
1066 tangent_quadric[idx] = a;
1070 cout <<
"surface_domain::assemble_tangent_quadric done" << endl;
1075 int tritangent_plane_idx,
1076 int &trihedral_pair_idx,
int &position,
int verbose_level)
1078 int f_v = (verbose_level >= 1);
1079 static int Table[] = {
1128 cout <<
"surface_domain::tritangent_plane_to_trihedral_pair_and_position" << endl;
1130 trihedral_pair_idx = Table[2 * tritangent_plane_idx + 0];
1131 position = Table[2 * tritangent_plane_idx + 1];
1133 cout <<
"surface_domain::tritangent_plane_to_trihedral_pair_and_position done" << endl;
1138 long int *Arc6,
int p1_idx,
int p2_idx,
int partition_rk,
1139 long int line1,
long int line2,
1140 int *coeff20,
long int *lines27,
1143 int f_v = (verbose_level >= 1);
1150 cout <<
"surface_domain::do_arc_lifting_with_two_lines" << endl;
1154 cout <<
"p1_idx=" << p1_idx <<
" p2_idx=" << p2_idx
1155 <<
" partition_rk=" << partition_rk
1156 <<
" line1=" << line1 <<
" line2=" << line2 << endl;
1163 cout <<
"surface_domain::do_arc_lifting_with_two_lines before "
1164 "Gg.rearrange_arc_for_lifting" << endl;
1167 P1,
P2, partition_rk, arc,
1171 cout <<
"surface_domain::do_arc_lifting_with_two_lines after "
1172 "Gg.rearrange_arc_for_lifting" << endl;
1184 cout <<
"surface_domain::do_arc_lifting_with_two_lines before "
1185 "AL->create_surface" << endl;
1189 cout <<
"surface_domain::do_arc_lifting_with_two_lines after "
1190 "AL->create_surface" << endl;
1191 cout <<
"equation: ";
1207 cout <<
"surface_domain::do_arc_lifting_with_two_lines done" << endl;
1212 long int *P6,
long int *P6_local,
int verbose_level)
1214 int f_v = (verbose_level >= 1);
1217 cout <<
"surface_domain::compute_local_coordinates_of_arc" << endl;
1222 int base_cols[3] = {0, 1, 2};
1223 int coefficients[3];
1224 int Basis_of_hyperplane[12] = { 1,0,0,0, 0,1,0,0, 0,0,1,0 };
1226 for (i = 0; i < 6; i++) {
1228 cout <<
"surface_domain::compute_local_coordinates_of_arc "
1233 cout <<
"surface_domain::compute_local_coordinates_of_arc "
1239 3, 4, Basis_of_hyperplane, base_cols,
1243 cout <<
"surface_domain::compute_local_coordinates_of_arc "
1244 "local coefficients ";
1251 cout <<
"surface_domain::compute_local_coordinates_of_arc" << endl;
1252 cout <<
"P6_local=" << endl;
1258 cout <<
"surface_domain::compute_local_coordinates_of_arc done" << endl;
1264 int f_v = (verbose_level >= 1);
1268 cout <<
"surface_domain::compute_gradient" << endl;
1273 cout <<
"surface_domain::compute_gradient Poly2_4->get_nb_monomials() = " <<
Poly2_4->
get_nb_monomials() << endl;
1278 for (i = 0; i < 4; i++) {
1280 cout <<
"surface_domain::compute_gradient i=" << i << endl;
1283 cout <<
"surface_domain::compute_gradient eqn_in=";
1285 cout <<
" = " << endl;
1293 cout <<
"surface_domain::compute_gradient "
1306 cout <<
"surface_domain::compute_gradient done" << endl;
1312 int f_v = (verbose_level >= 1);
1313 int f_vv = (verbose_level >= 2);
1320 cout <<
"surface_domain::compute_tangent_plane" << endl;
1323 cout <<
"surface_domain::compute_tangent_plane before compute_gradient" << endl;
1327 cout <<
"surface_domain::compute_tangent_plane after compute_gradient" << endl;
1330 for (i = 0; i < nb_eqns; i++) {
1332 cout <<
"surface_domain::compute_tangent_plane "
1333 "gradient i=" << i <<
" / " << nb_eqns << endl;
1336 cout <<
"surface_domain::compute_tangent_plane "
1337 "gradient " << i <<
" = ";
1346 cout <<
"surface_domain::compute_tangent_plane "
1347 "value = " << w[i] << endl;
1350 for (i = 0; i < nb_eqns; i++) {
1357 cout <<
"surface_domain::compute_tangent_plane the point is singular" << endl;
creates a cubic surface from a 6-arc in a plane
void create_surface(surface_domain *Surf, long int *Arc6, long int line1, long int line2, int verbose_level)
ring_theory::homogeneous_polynomial_domain * Poly3
geometry::projective_space * P2
void prepare_system_from_FG(int *F_planes, int *G_planes, int lambda, int *&system, int verbose_level)
ring_theory::partial_derivative * Partials
void multiply_Poly2_3_times_Poly2_3(int *input1, int *input2, int *result, int verbose_level)
void split_nice_equation(int *nice_equation, int *&f1, int *&f2, int *&f3, int verbose_level)
ring_theory::homogeneous_polynomial_domain * Poly4_x123
geometry::projective_space * P
void multiply_222_27_and_add(int *M1, int *M2, int *M3, int scalar, int *MM, int verbose_level)
void multiply42_and_add(int *M1, int *M2, int *MM, int verbose_level)
void compute_nine_lines(int *F_planes, int *G_planes, long int *nine_lines, int verbose_level)
ring_theory::homogeneous_polynomial_domain * Poly1_4
void clebsch_cubics(int verbose_level)
void multiply_linear_times_linear_times_linear_in_space(int *four_coeff1, int *four_coeff2, int *four_coeff3, int *twenty_coeff, int verbose_level)
void minor22(int **P3, int i1, int i2, int j1, int j2, int scalar, int *Ad, int verbose_level)
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 compute_local_coordinates_of_arc(long int *P6, long int *P6_local, int verbose_level)
long int compute_tangent_plane(int *pt_coords, int *equation20, int verbose_level)
field_theory::finite_field * F
void print_clebsch_cubics(std::ostream &ost)
long int plane_from_three_lines(long int *three_lines, 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 unrank_lines(int *v, long int *Rk, int nb)
long int rank_plane(int *v)
ring_theory::homogeneous_polynomial_domain * Poly6_27
ring_theory::homogeneous_polynomial_domain * Poly2_4
void multiply_Poly1_3_times_Poly3_3(int *input1, int *input2, int *result, int verbose_level)
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)
int index_of_monomial(int *v)
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
ring_theory::homogeneous_polynomial_domain * Poly4_27
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)
int f_has_large_polynomial_domains
void create_equations_for_pencil_of_surfaces_from_trihedral_pair(int *The_six_plane_equations, int *The_surface_equations, 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)
a collection of combinatorial functions
void set_complement(int *subset, int subset_size, int *complement, int &size_complement, int universal_set_size)
void add3(int *v1, int *v2, int *v3, int *w, int len)
void add(int *v1, int *v2, int *w, int len)
a collection of functions related to sorted vectors
int int_vec_compare(int *p, int *q, int len)
void PG_element_normalize(int *v, int stride, int len)
void PG_element_unrank_modified(int *v, int stride, int len, int a)
int mult3(int a1, int a2, int a3)
linear_algebra::linear_algebra * Linear_algebra
void PG_element_rank_modified_lint(int *v, int stride, int len, long int &a)
various functions related to geometries
void rearrange_arc_for_lifting(long int *Arc6, long int P1, long int P2, int partition_rk, long int *arc, int verbose_level)
long int rank_lint_here(int *Mtx, int verbose_level)
long int plane_rank_using_dual_coordinates_in_three_space(int *eqn4, int verbose_level)
void line_plane_incidence_matrix_restricted(long int *Lines, int nb_lines, int *&M, int &nb_planes, int verbose_level)
void unrank_point(int *v, long int rk)
void reduce_mod_subspace_and_get_coefficient_vector(int k, int len, int *basis, int *base_cols, int *v, int *coefficients, int verbose_level)
void scalar_multiply_vector_in_place(int c, int *A, int m)
int Gauss_easy(int *A, int m, int n)
int RREF_and_kernel(int n, int k, int *A, int verbose_level)
void add_vector(int *A, int *B, int *C, int m)
interface to create latex output files
void print_lint_matrix_with_standard_labels(std::ostream &ost, long int *p, int m, int n, int f_tex)
data_structures::int_vec * Int_vec
int evaluate_at_a_point(int *coeff, int *pt_vec)
int get_monomial(int i, int j)
void print_equation(std::ostream &ost, int *coeffs)
int * get_monomial_pointer(int i)
int index_of_monomial(int *v)
void apply(int *eqn_in, int *eqn_out, int verbose_level)
#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
the orbiter library for the classification of combinatorial objects