17namespace layer1_foundations {
18namespace field_theory {
76 int f_v = (verbose_level >= 1);
81 cout <<
"subfield_structure::init" << endl;
88 cout <<
"subfield_structure::init "
89 "different characteristics" << endl;
94 cout <<
"Fq is not a subfield of FQ" << endl;
98 cout <<
"index = " <<
s << endl;
105 for (i = 0; i <
s; i++) {
106 my_basis[i] =
FQ->
power(omega, i);
113 cout <<
"subfield_structure::init done" << endl;
121 int f_v = (verbose_level >= 1);
126 cout <<
"subfield_structure::init_with_given_basis" << endl;
133 cout <<
"subfield_structure::init_with_given_basis "
134 "different characteristics" << endl;
139 cout <<
"Fq is not a subfield of FQ" << endl;
143 cout <<
"index = " <<
s << endl;
155 for (i = 0; i <
s; i++) {
156 Basis[i] = given_basis[i];
159 cout <<
"Field basis: ";
163 for (i = 0; i <
Q; i++) {
166 for (i = 0; i <
q; i++) {
172 for (i = 0; i <
Q; i++) {
177 for (h = 0; h <
s; h++) {
184 cout <<
"subfield_structure::init_with_given_basis done" << endl;
193 cout <<
"subfield_structure::print_embedding:" << endl;
194 cout <<
"i : vector over F_q : embedding" << endl;
195 for (i = 0; i <
Q; i++) {
198 cout << setw(4) << i <<
" : ";
200 cout <<
" : " << j << endl;
202 cout <<
"subfield_structure::print_embedding in reverse:" << endl;
203 cout <<
"element i in F_Q : vector over F_q : vector AG_rank" << endl;
204 for (i = 0; i <
Q; i++) {
206 cout << setw(4) << i <<
" : ";
208 cout <<
" : " << j << endl;
219 ost <<
"\\subsection*{The Subfield of Order $" <<
q <<
"$}" << endl;
220 ost <<
"Field basis:\\\\" << endl;
225 ost <<
"Embedding:\\\\" << endl;
227 ost <<
"\\begin{array}{|r|r|r|}" << endl;
228 ost <<
"\\hline" << endl;
229 for (i = 0; i <
Q; i++) {
232 ost << setw(4) << i <<
" & ";
234 ost <<
" & " << j <<
"\\\\" << endl;
236 ost <<
"\\hline" << endl;
237 ost <<
"\\end{array}" << endl;
241 ost <<
"In reverse:\\\\" << endl;
243 ost <<
"\\begin{array}{|r|r|r|}" << endl;
244 ost <<
"\\hline" << endl;
245 ost <<
"i \\in {\\mathbb F}_Q & \\mbox{vector} & \\mbox{rank}\\\\" << endl;
246 ost <<
"\\hline" << endl;
247 for (i = 0; i <
Q; i++) {
249 ost << setw(4) << i <<
" & ";
251 ost <<
" & " << j <<
"\\\\" << endl;
253 ost <<
"\\hline" << endl;
254 ost <<
"\\end{array}" << endl;
264 for (i = 0; i <
s; i++) {
276 for (i = 0; i <
s; i++) {
285 int m,
int *Mq,
int verbose_level)
287 int f_v = (verbose_level >= 1);
288 int i, j, I, J, a, b, c, d, u,
v, n;
291 cout <<
"subfield_structure::lift_matrix" << endl;
294 for (i = 0; i < m; i++) {
295 for (j = 0; j < m; j++) {
299 for (u = 0; u <
s; u++) {
302 for (
v = 0;
v <
s;
v++) {
304 Mq[(I + u) * n + J +
v] = d;
311 cout <<
"subfield_structure::lift_matrix done" << endl;
316 int n,
int *MQ,
int m,
int verbose_level)
318 int f_v = (verbose_level >= 1);
320 long int i, j, I, J, u,
v, d, b, bv, a, rk;
324 cout <<
"subfield_structure::retract_matrix" << endl;
327 cout <<
"subfield_structure::retract_matrix m * s != n" << endl;
331 for (i = 0; i < m; i++) {
332 for (j = 0; j < m; j++) {
335 for (u = 0; u <
s; u++) {
336 for (
v = 0;
v <
s;
v++) {
337 vec[
v] = Mq[(I + u) * n + J +
v];
348 if (a != MQ[i * m + j]) {
349 cout <<
"subfield_structure::retract_matrix "
350 "a != MQ[i * m + j]" << endl;
359 cout <<
"subfield_structure::retract_matrix done" << endl;
392 long int *&Pts,
int &nb_pts,
int verbose_level)
394 int f_v = (verbose_level >= 1);
400 int i, t, b, bq, bk, tr_b, tr_bk, tr_b_down, tr_bk_down, tr_b_down_inv;
401 int a, tr_a, tr_a_down, t_lift, alpha, k;
402 int sqrt_t, c, cv, d, f;
403 int top1, top2, u,
v, w, r;
407 cout <<
"subfield_structure::Adelaide_hyperoval "
412 cout <<
"subfield_structure::Adelaide_hyperoval "
413 "need e even" << endl;
419 if (k * 3 !=
q - 1) {
420 cout <<
"subfield_structure::Adelaide_hyperoval "
421 "k * 3 != q - 1" << endl;
428 cout <<
"subfield_structure::Adelaide_hyperoval "
429 "FQ->power(b, q + 1) != 1" << endl;
434 tr_b =
FQ->
add(b, bq);
437 if (tr_b_down == -1) {
438 cout <<
"subfield_structure::Adelaide_hyperoval "
439 "tr_b_down == -1" << endl;
443 if (tr_bk_down == -1) {
444 cout <<
"subfield_structure::Adelaide_hyperoval "
445 "tr_bk_down == -1" << endl;
455 for (t = 0; t <
q; t++) {
458 if (
Fq->
mult(sqrt_t, sqrt_t) != t) {
459 cout <<
"subfield_structure::Adelaide_hyperoval "
460 "Fq->mult(sqrt_t, sqrt_t) != t" << endl;
469 if (tr_a_down == -1) {
470 cout <<
"subfield_structure::Adelaide_hyperoval "
471 "tr_a_down == -1" << endl;
481 u =
Fq->
mult(top1, tr_b_down_inv);
483 top2 =
Fq->
mult(tr_a_down, f);
484 v =
Fq->
mult(top2, tr_b_down_inv);
502 for (i = 0; i < N; i++) {
510 cout <<
"subfield_structure::Adelaide_hyperoval "
511 "q=" <<
q <<
" done" << endl;
517 std::string &fname,
int &nb_pts,
long int *&Pts,
520 int f_v = (verbose_level >= 1);
526 cout <<
"subfield_structure::create_adelaide_hyperoval" << endl;
532 sprintf(str,
"adelaide_hyperoval_q%d.txt",
q);
538 int n = 2, d = n + 1;
549 cout <<
"i : point : projective rank" << endl;
550 for (i = 0; i < nb_pts; i++) {
553 cout << setw(4) << i <<
" : ";
563 cout <<
"subfield_structure::create_adelaide_hyperoval "
564 "the set is not a set, "
565 "something is wrong" << endl;
576 int f_v = (verbose_level >= 1);
577 int i, j, a, b, c, t, J;
583 cout <<
"subfield_structure::field_reduction" << endl;
589 cout <<
"input:" << endl;
596 for (i = 0; i <
s; i++) {
599 cout <<
"i=" << i <<
" / " <<
s << endl;
604 for (j = 0; j < sz; j++) {
607 cout <<
"j=" << j <<
" / " << sz
608 <<
" a=" << a <<
" b=" << b << endl;
614 cout <<
"i=" << i <<
" / " <<
s <<
" w=";
619 for (j = 0; j < sz; j++) {
622 for (t = 0; t <
s; t++) {
624 output[i * n + J + t] = c;
628 cout <<
"output:" << endl;
635 cout <<
"subfield_structure::field_reduction done" << endl;
a collection of functions related to sorted vectors
int test_if_set_with_return_value_lint(long int *set, int set_size)
void PG_element_rank_modified(int *v, int stride, int len, int &a)
int frobenius_power(int a, int frob_power)
int add3(int i1, int i2, int i3)
int embed(finite_field &subfield, int index, int b, int verbose_level)
void report(std::ostream &ost)
void retract_matrix(int *Mq, int n, int *MQ, int m, int verbose_level)
void Adelaide_hyperoval(long int *&Pts, int &nb_pts, int verbose_level)
void init(finite_field *FQ, finite_field *Fq, int verbose_level)
void create_adelaide_hyperoval(std::string &fname, int &nb_pts, long int *&Pts, int verbose_level)
void field_reduction(int *input, int sz, int *output, int verbose_level)
void init_with_given_basis(finite_field *FQ, finite_field *Fq, int *given_basis, int verbose_level)
int evaluate_over_FQ(int *v)
int evaluate_over_Fq(int *v)
void lift_matrix(int *MQ, int m, int *Mq, int verbose_level)
various functions related to geometries
void AG_element_unrank(int q, int *v, int stride, int len, long int a)
long int AG_element_rank(int q, int *v, int stride, int len)
projective space PG(n,q) of dimension n over Fq
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)
#define Int_vec_zero(A, B)
#define Int_matrix_print(A, B, C)
#define Int_vec_print(A, B, C)
the orbiter library for the classification of combinatorial objects