18namespace layer1_foundations {
19namespace orthogonal_geometry {
123void unusual_model::setup_sum_of_squares(
int q,
124 std::string &poly_q, std::string &poly_Q,
140 int f_sum_of_squares,
int verbose_level)
142 int f_v = (verbose_level >= 1);
143 int f_vv = (verbose_level >= 2);
144 int f_vvv = (verbose_level >= 2);
150 cout <<
"unusual_model::setup2 f_sum_of_squares=" << f_sum_of_squares << endl;
157 cout <<
"unusual_model::setup2 the large field must be a "
158 "quadratic extension of the small field" << endl;
172 override_poly_Q = override_polynomial_extension_field(
q);
173 override_poly_q = override_polynomial_subfield(
q);
175 cout <<
"field of order " <<
Q <<
" initialized" << endl;
180 cout <<
"initializing large field" << endl;
184 cout <<
"initializing small field" << endl;
190 cout <<
"need to choose the generator polynomial "
191 "for the field" << endl;
199 cout <<
"initializing large field" << endl;
203 cout <<
"field of order " <<
Q <<
" initialized" << endl;
206 cout <<
"initializing small field" << endl;
210 cout <<
"field of order " <<
q <<
" initialized" << endl;
218 char *override_poly_Q =
"110";
220 char *override_poly_q =
"17";
230 cout <<
"field of order " <<
Q <<
" initialized" << endl;
234 char *override_poly_Q =
"767";
236 char *override_poly_q =
"47";
244 cout <<
"field of order " <<
Q <<
" initialized" << endl;
248 char *override_poly_Q =
"974";
250 char *override_poly_q =
"34";
263 cout <<
"field of order " <<
Q <<
" initialized" << endl;
267 char *override_poly_Q =
"2754";
268 char *override_poly_q =
"94";
275 cout <<
"field of order " <<
Q <<
" initialized" << endl;
279 char *override_poly_Q =
"6590";
280 char *override_poly_q =
"89";
289 cout <<
"field of order " <<
Q <<
" initialized" << endl;
293 char *override_poly_Q =
"15985";
295 char *override_poly_q =
"200";
303 cout <<
"field of order " <<
Q <<
" initialized" << endl;
315 cout <<
"unusual_model::setup2 primitive element alpha=" <<
alpha << endl;
319 cout <<
"unusual_model::setup calling "
320 "subfield_embedding_2dimensional" << endl;
325 cout <<
"unusual_model::setup2 "
326 "subfield_embedding_2dimensional finished" << endl;
334 cout <<
"unusual_model::setup2 T_alpha = " <<
T_alpha << endl;
335 cout <<
"unusual_model::setup2 N_alpha = " <<
N_alpha << endl;
345 if (f_sum_of_squares) {
360 cout <<
"unusual_model::setup2 Gram matrix:" << endl;
362 cout <<
"quadratic form:" << endl;
367 cout <<
"unusual_model::setup2 finding hyperbolic pair" << endl;
374 cout <<
"basis:" << endl;
378 for (i = 0; i < 2 * 4; i++) {
383 for (i = 0; i < 4; i++) {
387 cout <<
"i=" << i <<
" form value " << b << endl;
397 cout <<
"unusual_model::setup2 restricted quadratic form:" << endl;
406 cout <<
"unusual_model::setup2 restricted Gram matrix:" << endl;
414 cout <<
"unusual_model::setup2 basis_subspace:" << endl;
422 cout <<
"unusual_model::setup2 hyperbolic basis:" << endl;
424 for (i = 0; i < 4; i++) {
428 cout <<
"i=" << i <<
" quadratic form value " << b << endl;
433 for (i = 0; i < 4; i++) {
434 for (j = 0; j < 4; j++) {
442 cout <<
"unusual_model::setup2 bilinear form on the hyperbolic basis:" << endl;
452 cout <<
"unusual_model::setup2 restricted quadratic form:" << endl;
460 cout <<
"unusual_model::setup2 inverse hyperbolic basis:" << endl;
465 cout <<
"unusual_model::setup2 done" << endl;
471 int *unusual_coordinates,
long int *ranks,
int verbose_level)
473 int f_v = (verbose_level >= 1);
474 int f_vv = (verbose_level >= 2);
479 cout <<
"unusual_model::convert_to_ranks" << endl;
482 cout <<
"unusual_model::convert_to_ranks unusual_coordinates:" << endl;
484 unusual_coordinates, n, 3, 3, 2);
492 for (i = 0; i < n; i++) {
495 cout <<
"ranks[" << i <<
"]=" << ranks[i] << endl;
500 cout <<
"unusual_model::convert_to_ranks ranks:" << endl;
509 long int *ranks,
int *unusual_coordinates,
int verbose_level)
511 int f_v = (verbose_level >= 1);
516 cout <<
"unusual_model::convert_from_ranks" << endl;
519 cout <<
"unusual_model::convert_from_ranks ranks:" << endl;
525 for (i = 0; i < n; i++) {
531 unusual_coordinates, verbose_level - 1);
534 cout <<
"unusual_model::convert_from_ranks unusual_coordinates:" << endl;
536 unusual_coordinates, n, 3, 3, 2);
544 int *unusual_coordinates,
int verbose_level)
555 int *unusual_coordinates,
int verbose_level)
561 unusual_coordinates, verbose_level - 1);
565 int *unusual_coordinates,
int *usual_coordinates,
568 int f_v = (verbose_level >= 1);
574 cout <<
"convert_to_usual:" << endl;
576 unusual_coordinates, n, 3, 3, 2);
578 for (i = 0; i < n; i++) {
579 for (j = 0; j < 2; j++) {
580 c = unusual_coordinates[i * 3 + j];
585 tmp[i * 4 + j * 2 + 0] = a;
586 tmp[i * 4 + j * 2 + 1] = b;
590 cout <<
"tmp:" << endl;
593 for (i = 0; i < n; i++) {
596 usual_coordinates + i * 5 + 1, 1, 4, 4,
598 usual_coordinates[i * 5 + 0] = unusual_coordinates[i * 3 + 2];
601 cout <<
"usual_coordinates:" << endl;
608 int *usual_coordinates,
609 int *unusual_coordinates,
612 int f_v = (verbose_level >= 1);
613 int i, j, a, b, c, aa, bb;
618 cout <<
"convert_from_usual:" << endl;
620 usual_coordinates, n, 5, 5, 2);
623 cout <<
"q=" <<
q <<
" is zero" << endl;
626 for (i = 0; i < n; i++) {
632 cout <<
"tmp:" << endl;
636 for (i = 0; i < n; i++) {
637 for (j = 0; j < 2; j++) {
638 a = tmp[i * 4 + j * 2 + 0];
639 b = tmp[i * 4 + j * 2 + 1];
645 cout <<
"aa=" << aa <<
" not equal to a=" << a << endl;
646 cout <<
"a=" << a <<
" b=" << b <<
" c=" << c << endl;
647 cout <<
"a * q + b = " << a *
q + b << endl;
648 cout <<
"q=" <<
q << endl;
649 cout <<
"aa=" << aa << endl;
650 cout <<
"bb=" << bb << endl;
654 cout <<
"bb=" << bb <<
" not equal to b=" << b << endl;
655 cout <<
"a=" << a <<
" b=" << b <<
" c=" << c << endl;
656 cout <<
"a * q + b = " << a *
q + b << endl;
657 cout <<
"aa=" << aa << endl;
658 cout <<
"bb=" << bb << endl;
661 unusual_coordinates[i * 3 + j] = c;
663 unusual_coordinates[i * 3 + 2] = usual_coordinates[i * 5 + 0];
666 cout <<
"unusual_coordinates:" << endl;
673 long int *Fisher_BLT,
int *ABC,
int verbose_level)
675 int f_v = (verbose_level >= 1);
677 int i, j, beta, minus_one, k;
678 int *norm_one_table, nb_norm_one = 0;
682 cout <<
"unusual_model::create_Fisher_BLT_set" << endl;
687 for (beta = 1; beta <
Q; beta++) {
688 if (
FQ->
N2(beta) == minus_one) {
693 cout <<
"did not find beta" << endl;
696 cout <<
"beta=" << beta << endl;
699 for (i = 0; i <
Q; i++) {
700 if (
FQ->
N2(i) == 1) {
702 for (k = 0; k < nb_norm_one; k++) {
703 if (norm_one_table[k] == j)
706 if (k == nb_norm_one) {
707 norm_one_table[nb_norm_one++] = i;
712 cout << nb_norm_one <<
" norm one elements reduced:" << endl;
716 if (nb_norm_one != (
q + 1) / 2) {
717 cout <<
"nb_norm_one != (q + 1) / 2" << endl;
722 for (i = 0; i < nb_norm_one; i++) {
723 ABC[i * 3 + 0] =
FQ->
mult(beta,
724 FQ->
mult(norm_one_table[i], norm_one_table[i]));
728 for (i = 0; i < nb_norm_one; i++) {
729 ABC[(nb_norm_one + i) * 3 + 0] = 0;
730 ABC[(nb_norm_one + i) * 3 + 1] =
731 FQ->
mult(beta,
FQ->
mult(norm_one_table[i], norm_one_table[i]));
732 ABC[(nb_norm_one + i) * 3 + 2] = 1;
735 cout <<
"Table:" << endl;
742 cout <<
"Fisher BLT set:" << endl;
751 long int *BLT,
int *ABC,
int verbose_level)
753 int f_v = (verbose_level >= 1);
756 int *norm_table, nb = 0;
760 cout <<
"unusual_model::create_Linear_BLT_set" << endl;
765 for (i = 0; i <
Q; i++) {
766 if (
FQ->
N2(i) == minus_one) {
767 norm_table[nb++] = i;
771 cout << nb <<
" norm -1 elements reduced:" << endl;
776 cout <<
"nb != q + 1" << endl;
781 for (i = 0; i < nb; i++) {
782 ABC[i * 3 + 0] = norm_table[i];
787 cout <<
"ABC:" << endl;
794 cout <<
"Linear BLT set:" << endl;
803 long int *BLT,
int *ABC,
int verbose_level)
805 int f_v = (verbose_level >= 1);
808 int *norm_one_table, nb_norm_one = 0;
811 int minus_four_fifth, minus_one_fifth;
814 cout <<
"unusual_model::create_Mondello_BLT_set" << endl;
824 for (beta = 1; beta <
Q; beta++) {
825 if (
FQ->
N2(beta) == minus_four_fifth) {
830 cout <<
"did not find beta" << endl;
833 cout <<
"beta=" << beta << endl;
838 for (gamma = 1; gamma <
Q; gamma++) {
839 if (
FQ->
N2(gamma) == minus_one_fifth) {
844 cout <<
"did not find gamma" << endl;
847 cout <<
"gamma=" << gamma << endl;
851 for (i = 0; i <
Q; i++) {
852 if (
FQ->
N2(i) == 1) {
853 norm_one_table[nb_norm_one++] = i;
857 cout << nb_norm_one <<
" norm one elements:" << endl;
861 if (nb_norm_one !=
q + 1) {
862 cout <<
"nb_norm_one != q + 1" << endl;
866 for (i = 0; i <
q + 1; i++) {
867 ABC[i * 3 + 0] =
FQ->
mult(beta,
FQ->
power(norm_one_table[i], 2));
868 ABC[i * 3 + 1] =
FQ->
mult(gamma,
FQ->
power(norm_one_table[i], 3));
872 cout <<
"ABC:" << endl;
879 cout <<
"Mondello BLT set:" << endl;
900 int a,
int b,
int c,
int verbose_level)
902 int f_v = (verbose_level >= 1);
906 cout <<
"quadratic_form a=" << a <<
" b=" << b
907 <<
" c=" << c << endl;
913 cout <<
"quadratic_form N(a)=" << x
914 <<
" N(b)=" << y <<
" c^2=" << z << endl;
918 cout <<
"quadratic_form w=" << w << endl;
924 int a1,
int b1,
int c1,
925 int a2,
int b2,
int c2,
928 int f_v = (verbose_level >= 1);
929 int a3, b3, c3, q1, q2, q3, w;
932 cout <<
"bilinear_form (" << a1 <<
"," << b1
933 <<
"," << c1 <<
" and " << a2 <<
","
934 << b2 <<
"," << c2 <<
")";
936 a3 =
FQ->
add(a1, a2);
937 b3 =
FQ->
add(b1, b2);
938 c3 =
Fq->
add(c1, c2);
940 cout <<
"a3=" << a3 <<
" b3=" << b3 <<
" c3=" << c3 << endl;
946 cout <<
"q1=" << q1 <<
" q2=" << q2 <<
" q3=" << q3 << endl;
950 cout <<
"evaluates to " << w << endl;
956 long int *set,
int len)
960 for (j = 0; j < len; j++) {
969 int a, b, c, x, y, l1, l2, aq, bq, ll1, ll2, a1, a2, b1, b2, w;
974 int unusual_point_rank;
987 unusual_point_rank = a *
Q + b *
q + c;
995 cout << setw(3) << cnt <<
" : " << setw(6) << pt <<
" : ";
996 cout << setw(4) << l1 <<
", " << setw(4) << l2 <<
" : ";
997 cout << setw(4) << ll1 <<
", " << setw(4) << ll2
998 <<
" : Q(a,b,c)=" << w <<
" ";
999 cout <<
"(" << setw(3) << a <<
", " << setw(3)
1000 << b <<
", " << c <<
" : " << setw(3) << a1
1001 <<
", " << setw(4) << a2 <<
", " << setw(3)
1002 << b1 <<
", " << setw(4) << b2 <<
", 1) : ";
1004 cout <<
" : " << unusual_point_rank <<
" : ";
1009 cout << setw(4) << x <<
" " << setw(4) << y;
1013 int gamma,
int delta,
int m,
long int *Set,
1014 int f_second_half,
int verbose_level)
1019 offset = (2 * m + 2) % len;
1022 O,
q, gamma, delta, offset,
1023 m, Set, f_second_half,
TRUE, verbose_level);
1028 int gamma,
int delta,
int offset,
int m,
long int *Set,
1029 int f_second_half,
int verbose_level)
1032 O,
q, gamma, delta, offset,
1033 m, Set, f_second_half,
TRUE, verbose_level);
1038 int gamma,
int delta,
int offset,
int m,
long int *Set,
1039 int f_second_half,
int f_test,
int verbose_level)
1041 int f_v = (verbose_level >= 1);
1042 int f_vv = (verbose_level >= 2);
1043 int f_vvv = (verbose_level >= 3);
1045 int len = (
q + 1) / 2;
1053 for (i = 0; i < len; i++) {
1056 Table[i * 3 + 0] =
FQ->
mult(gamma, z2i);
1057 Table[i * 3 + 1] =
FQ->
mult(delta, z2mi);
1058 Table[i * 3 + 2] = 1;
1064 cout <<
"created the following 1st half:" << endl;
1071 for (i = 1; i < Len; i++) {
1073 cout <<
"BLT test fails in point " << i
1074 <<
" in 1st half" << endl;
1080 cout <<
"passes BLT test for 1st half" << endl;
1084 if (f_second_half) {
1087 for (i = 0; i < len; i++) {
1090 z2s =
FQ->
power(zeta, 2 * offset);
1091 Table[(len + i) * 3 + 0] =
FQ->
mult(delta, z2i);
1092 Table[(len + i) * 3 + 1] =
FQ->
mult(
FQ->
mult(gamma, z2mi), z2s);
1093 Table[(len + i) * 3 + 2] = 1;
1098 for (i = 1; i < len; i++) {
1101 cout <<
"BLT test fails in point " << i
1102 <<
" in 2nd half" << endl;
1108 cout <<
"passes BLT test for second half" << endl;
1113 cout <<
"Table:" << endl;
1120 cout <<
"created the following set:" << endl;
1127 for (i = 0; i < Len - 1; i++) {
1128 if (Set[i] == Set[i + 1]) {
1129 cout <<
"the set contains repeats" << endl;
1137 for (i = 1; i < Len; i++) {
1140 cout <<
"BLT test fails in point " << i
1141 <<
" in the joining" << endl;
1148 cout <<
"passes BLT test" << endl;
1160 int gamma,
int delta,
int m,
long int *Set,
1161 int f_test,
int verbose_level)
1164 int f_vv = (verbose_level >= 2);
1165 int f_vvv = (verbose_level >= 3);
1167 int len = (
q + 1) / 2;
1174 for (i = 0; i < len; i++) {
1176 Table[i * 3 + 0] =
FQ->
mult(gamma, z2i);
1178 Table[i * 3 + 2] = 1;
1183 cout <<
"created the following psi-orbit:" << endl;
1190 for (i = 1; i < len; i++) {
1192 cout <<
"BLT test fails in point " << i
1193 <<
" in create_orbit_of_psi" << endl;
1199 cout <<
"passes BLT test for 1st half" << endl;
1209 int *M4,
int *M5,
int verbose_level)
1211 int f_v = (verbose_level >= 1);
1212 int f_vv = (verbose_level >= 2);
1213 int f_vvv = (verbose_level >= 3);
1215 int *M4_tmp1, *M4_tmp2, *M5t, *M5_tmp1, *M5_tmp2;
1226 cout <<
"unusual_model::transform_matrix_"
1227 "unusual_to_usual" << endl;
1230 cout <<
"transformation matrix in unusual model" << endl;
1235 M4, M4_tmp1, 4, 4, 4,
1241 cout <<
"transformation matrix in "
1242 "standard coordinates:" << endl;
1245 for (i = 0; i < 25; i++) {
1248 for (i = 0; i < 4; i++) {
1249 for (j = 0; j < 4; j++) {
1250 a = M4_tmp2[i * 4 + j];
1251 M5[(i + 1) * 5 + j + 1] = a;
1256 cout <<
"embedded (M5):" << endl;
1263 cout <<
"transposed (M5t):" << endl;
1266 cout <<
"Gram matrix:" << endl;
1278 cout <<
"Gram matrix transformed:" << endl;
1282 for (i = 0; i < 25; i++) {
1284 cout <<
"does not preserve the form" << endl;
1290 A->make_element(Elt, M5, verbose_level);
1293 A->print(cout, Elt);
1306 int *M5,
int *M4,
int verbose_level)
1308 int f_v = (verbose_level >= 1);
1309 int f_vv = (verbose_level >= 2);
1312 int *M4_tmp1, *M4_tmp2;
1320 cout <<
"unusual_model::transform_matrix_"
1321 "usual_to_unusual" << endl;
1325 A->print(cout, Elt);
1327 for (i = 0; i < 25; i++) {
1333 for (i = 0; i < 25; i++) {
1334 M5[i] =
Fq->
mult(a, M5[i]);
1337 for (i = 0; i < 4; i++) {
1338 for (j = 0; j < 4; j++) {
1339 a = M5[(i + 1) * 5 + j + 1];
1340 M4_tmp2[i * 4 + j] = a;
1345 M4_tmp2, M4_tmp1, 4, 4, 4,
1352 cout <<
"transformation matrix in unusual model" << endl;
1361 int &a,
int &b,
int &c,
int &d,
1362 int &f_semi1,
int &f_semi2,
int &f_semi3,
int &f_semi4)
1364 int i, j, x, y, image1, image2, u, v, f_semi;
1366 for (i = 0; i < 2; i++) {
1367 for (j = 0; j < 2; j++) {
1368 x = M4[i * 8 + j * 2 + 0];
1369 y = M4[i * 8 + j * 2 + 1];
1370 if (x == 0 && y == 0) {
1376 x = M4[i * 8 + 4 + j * 2 + 0];
1377 y = M4[i * 8 + 4 + j * 2 + 1];
1386 cout <<
"unusual_model::parse_"
1387 "4by4_matrix v != FQ->power(q, q)" << endl;
1393 if (i == 0 && j == 0) {
1397 else if (i == 0 && j == 1) {
1401 else if (i == 1 && j == 0) {
1405 else if (i == 1 && j == 1) {
1414 int a,
int b,
int c,
int d,
1415 int f_semi1,
int f_semi2,
int f_semi3,
int f_semi4,
1418 int i, j, f_phi, coeff = 0, image1, image2;
1421 for (i = 0; i < 2; i++) {
1422 for (j = 0; j < 2; j++) {
1423 if (i == 0 && j == 0) {
1427 if (i == 0 && j == 1) {
1431 if (i == 1 && j == 0) {
1435 if (i == 1 && j == 1) {
1440 image1 =
FQ->
mult(1, coeff);
1444 image1 =
FQ->
mult(1, coeff);
1447 M4[i * 8 + j * 2 + 0] =
components[image1 * 2 + 0];
1448 M4[i * 8 + j * 2 + 1] =
components[image1 * 2 + 1];
1449 M4[i * 8 + 4 + j * 2 + 0] =
components[image2 * 2 + 0];
1450 M4[i * 8 + 4 + j * 2 + 1] =
components[image2 * 2 + 1];
1459 for (i = 0; i < 2; i++) {
1460 for (j = 0; j < 2; j++) {
1461 if (f_semi[i * 2 + j]) {
1470 if (l ==
q *
q - 1) {
1475 if ((l % (
q - 1)) == 0) {
1477 << l / (
q - 1) <<
" ";
1496 int M4[16], v[4], f_semi[4];
1500 v[0], v[1], v[2], v[3],
1501 f_semi[0], f_semi[1], f_semi[2], f_semi[3]);
void init(finite_field_description *Descr, int verbose_level)
orthogonal_geometry::orthogonal_indexing * Orthogonal_indexing
int add3(int i1, int i2, int i3)
void init_override_polynomial(int q, std::string &poly, int f_without_tables, int verbose_level)
void subfield_embedding_2dimensional(finite_field &subfield, int *&components, int *&embedding, int *&pair_embedding, int verbose_level)
linear_algebra::linear_algebra * Linear_algebra
void print_embedding(finite_field &subfield, int *components, int *embedding, int *pair_embedding)
void compute_subfields(int verbose_level)
int retract(finite_field &subfield, int index, int a, int verbose_level)
various functions related to geometries
void add_term(int n, field_theory::finite_field &F, int &nb_terms, int *form_i, int *form_j, int *form_coeff, int *Gram, int i, int j, int coeff)
void print_quadratic_form_list_coded(int form_nb_terms, int *form_i, int *form_j, int *form_coeff)
void make_Gram_matrix_from_list_coded_quadratic_form(int n, field_theory::finite_field &F, int nb_terms, int *form_i, int *form_j, int *form_coeff, int *Gram)
void transpose_matrix(int *A, int *At, int ma, int na)
void mult_matrix_matrix(int *A, int *B, int *C, int m, int n, int o, int verbose_level)
void restrict_quadratic_form_list_coding(int k, int n, int *basis, int form_nb_terms, int *form_i, int *form_j, int *form_coeff, int &restricted_form_nb_terms, int *&restricted_form_i, int *&restricted_form_j, int *&restricted_form_coeff, int verbose_level)
int perp(int n, int k, int *A, int *Gram, int verbose_level)
int evaluate_quadratic_form(int n, int nb_terms, int *i, int *j, int *coeff, int *x)
int evaluate_bilinear_form(int n, int *v1, int *v2, int *Gram)
void matrix_inverse(int *A, int *Ainv, int n, int verbose_level)
void find_hyperbolic_pair(int n, int form_nb_terms, int *form_i, int *form_j, int *form_coeff, int *Gram, int *vec1, int *vec2, int verbose_level)
basic number theoretic functions
int is_prime_power(int q)
void Q_unrank(int *v, int stride, int k, long int a, int verbose_level)
long int Q_rank(int *v, int stride, int k, int verbose_level)
an orthogonal geometry O^epsilon(n,q)
int BLT_test_full(int size, long int *set, int verbose_level)
int BLT_test(int size, long int *set, int verbose_level)
int hyperbolic_basis_inverse[4 *4]
field_theory::finite_field * FQ
int build_candidate_set_with_offset(orthogonal &O, int q, int gamma, int delta, int offset, int m, long int *Set, int f_second_half, int verbose_level)
void transform_matrix_unusual_to_usual(orthogonal *O, int *M4, int *M5, int verbose_level)
int build_candidate_set(orthogonal &O, int q, int gamma, int delta, int m, long int *Set, int f_second_half, int verbose_level)
void create_Mondello_BLT_set(long int *BLT, int *ABC, int verbose_level)
void convert_to_ranks(int n, int *unusual_coordinates, long int *ranks, int verbose_level)
void setup2(field_theory::finite_field *FQ, field_theory::finite_field *Fq, int f_sum_of_squares, int verbose_level)
field_theory::finite_field * Fq
void print_2x2(int *v, int *f_semi)
int hyperbolic_basis[4 *4]
void convert_from_rank(long int rank, int *unusual_coordinates, int verbose_level)
int quadratic_form(int a, int b, int c, int verbose_level)
void create_Linear_BLT_set(long int *BLT, int *ABC, int verbose_level)
void transform_matrix_usual_to_unusual(orthogonal *O, int *M5, int *M4, int verbose_level)
void parse_4by4_matrix(int *M4, int &a, int &b, int &c, int &d, int &f_semi1, int &f_semi2, int &f_semi3, int &f_semi4)
void convert_from_usual(int n, int *usual_coordinates, int *unusual_coordinates, int verbose_level)
void setup(field_theory::finite_field *FQ, field_theory::finite_field *Fq, int verbose_level)
int build_candidate_set_with_or_without_test(orthogonal &O, int q, int gamma, int delta, int offset, int m, long int *Set, int f_second_half, int f_test, int verbose_level)
int create_orbit_of_psi(orthogonal &O, int q, int gamma, int delta, int m, long int *Set, int f_test, int verbose_level)
void print_coordinates_detailed(long int pt, int cnt)
void create_4by4_matrix(int *M4, int a, int b, int c, int d, int f_semi1, int f_semi2, int f_semi3, int f_semi4, int verbose_level)
void create_Fisher_BLT_set(long int *Fisher_BLT, int *ABC, int verbose_level)
int bilinear_form(int a1, int b1, int c1, int a2, int b2, int c2, int verbose_level)
void convert_from_ranks(int n, long int *ranks, int *unusual_coordinates, int verbose_level)
void print_M5(orthogonal *O, int *M5)
long int convert_to_rank(int *unusual_coordinates, int verbose_level)
void convert_to_usual(int n, int *unusual_coordinates, int *usual_coordinates, int verbose_level)
void print_coordinates_detailed_set(long int *set, int len)
#define Int_vec_zero(A, B)
#define Lint_vec_print(A, B, C)
#define Int_vec_print_integer_matrix_width(A, B, C, D, E, F)
#define Int_vec_print(A, B, C)
the orbiter library for the classification of combinatorial objects