18namespace layer5_applications {
120 int f_prefix, std::string &prefix,
123 int f_v = (verbose_level >= 1);
127 cout <<
"semifield_lifting::init_level_three" << endl;
165 cout <<
"semifield_lifting::init_level_three done" << endl;
172 int f_v = (verbose_level >= 1);
178 cout <<
"semifield_lifting::report" << endl;
199 cout <<
"semifield_lifting::report before flag orbits" << endl;
203 ost <<
"\\bigskip" << endl;
208 ost <<
"\\section{Flag orbits at level 3}" << endl;
213 ost <<
"\\begin{array}{|r|r|r|}" << endl;
214 ost <<
"\\hline" << endl;
215 ost <<
"\\mbox{L2 Orbit} & \\mbox{Cand} & \\mbox{Flag orbits} \\\\" << endl;
216 ost <<
"\\hline" << endl;
217 ost <<
"\\hline" << endl;
222 ost <<
"\\hline" << endl;
223 ost <<
"\\end{array}" << endl;
227 ost <<
"\\bigskip" << endl;
232 ost <<
"There are " <<
nb_flag_orbits <<
" flag orbits at level 3" << endl;
234 ost <<
"\\bigskip" << endl;
237 ost <<
"\\begin{enumerate}[(1)]" << endl;
242 ost <<
"\\item" << endl;
262 int downstep_primary_orbit;
263 int downstep_secondary_orbit;
266 int downstep_orbit_len;
273 longinteger_object go;
274 strong_generators *gens;
279 ost <<
"\\end{enumerate}" << endl;
282 cout <<
"semifield_lifting::report before Orbits at level 3" << endl;
284 ost <<
"\\section{Orbits at level 3}" << endl;
287 ost <<
"There are " <<
nb_orbits <<
" orbits at level 3" << endl;
289 ost <<
"\\bigskip" << endl;
293 ost <<
"\\begin{enumerate}[(1)]" << endl;
297 ost <<
"\\item" << endl;
304 ost <<
"go=" << go <<
", ";
305 ost <<
"po=" <<
Po[i] <<
", ";
306 ost <<
"so=" <<
So[i] <<
", ";
307 ost <<
"mo=" <<
Mo[i] <<
", ";
308 ost <<
"go=" <<
Go[i] <<
", ";
309 ost <<
"pt=" <<
Pt[i] <<
"\\\\" << endl;
313 int f_elements_exponential =
FALSE;
318 string symbol_for_print;
320 symbol_for_print.assign(
"\\alpha");
323 ost <<
"\\left\\{" << endl;
324 ost <<
"\\left[" << endl;
326 symbol_for_print, Mtx_Id,
k,
k);
329 ost <<
"\\left[" << endl;
331 symbol_for_print, Mtx1,
k,
k);
334 ost <<
"\\left[" << endl;
336 symbol_for_print, Mtx2,
k,
k);
338 ost <<
"\\right\\}" << endl;
340 ost << go <<
"}" << endl;
346 ost <<
"\\end{enumerate}" << endl;
349 cout <<
"semifield_lifting::report "
350 "after Orbits at level 3" << endl;
359 cout <<
"semifield_lifting::report done" << endl;
366 int f_v = (verbose_level >= 1);
369 cout <<
"semifield_lifting::recover_level_three_downstep" << endl;
372 cout <<
"semifield_lifting::recover_level_three_downstep "
373 "before downstep" << endl;
379 cout <<
"semifield_lifting::recover_level_three_downstep "
380 "after downstep" << endl;
385 cout <<
"semifield_lifting::recover_level_three_downstep "
386 "after downstep" << endl;
391 cout <<
"semifield_lifting::recover_level_three_downstep done" << endl;
396 int f_read_flag_orbits,
int verbose_level)
398 int f_v = (verbose_level >= 1);
401 cout <<
"semifield_lifting::recover_level_three_from_file" << endl;
406 cout <<
"semifield_lifting::recover_level_three_from_file "
407 "before find_all_candidates" << endl;
413 cout <<
"semifield_lifting::recover_level_three_from_file "
414 "after find_all_candidates" << endl;
419 if (f_read_flag_orbits) {
422 cout <<
"semifield_lifting::recover_level_three_from_file "
423 "before read_flag_orbits" << endl;
427 cout <<
"semifield_lifting::recover_level_three_from_file "
428 "after read_flag_orbits" << endl;
433 cout <<
"semifield_lifting::recover_level_three_from_file "
434 "before read_level_info_file" << endl;
438 cout <<
"semifield_lifting::recover_level_three_from_file "
439 "after read_level_info_file" << endl;
443 cout <<
"semifield_lifting::recover_level_three_from_file "
444 "before read_stabilizers" << endl;
448 cout <<
"semifield_lifting::recover_level_three_from_file "
449 "after read_stabilizers" << endl;
455 cout <<
"semifield_lifting::recover_level_three_from_file" << endl;
461 int f_v = (verbose_level >= 1);
464 cout <<
"semifield_lifting::compute_level_three" << endl;
468 cout <<
"semifield_lifting::compute_level_three "
469 "before level_two_down" << endl;
475 cout <<
"semifield_lifting::compute_level_three "
476 "after level_two_down" << endl;
480 cout <<
"semifield_lifting::level_two_down done, "
481 "we found the following candidate sets:" << endl;
482 cout <<
"Orbit : # candidates : # orbits" << endl;
490 cout <<
"semifield_lifting::compute_level_three "
491 "before level_two_flag_orbits" << endl;
497 cout <<
"semifield_lifting::compute_level_three "
498 "after level_two_flag_orbits, nb_flag_orbits=" <<
nb_flag_orbits << endl;
502 cout <<
"semifield_lifting::compute_level_three "
503 "before level_two_upstep" << endl;
509 cout <<
"semifield_lifting::compute_level_three "
510 "after level_two_upstep, nb_orbits=" <<
nb_orbits << endl;
517 <<
Po[i] <<
"," <<
So[i] <<
"," <<
Mo[i] <<
"," <<
Pt[i] << endl;
522 cout <<
"semifield_lifting::compute_level_three "
523 "before save_flag_orbits" << endl;
529 cout <<
"semifield_lifting::compute_level_three "
530 "after save_flag_orbits" << endl;
534 cout <<
"semifield_lifting::compute_level_three "
535 "before save_stabilizers" << endl;
539 cout <<
"semifield_lifting::compute_level_three "
540 "after save_stabilizers" << endl;
545 cout <<
"semifield_lifting::compute_level_three "
552 int f_v = (verbose_level >= 1);
555 cout <<
"semifield_lifting::level_two_down" << endl;
558 cout <<
"semifield_lifting::level_two_down "
559 "before downstep(2)" << endl;
567 int Level_two_nb_orbits;
568 long int **Level_two_Candidates;
569 int *Level_two_Nb_candidates;
584 cout <<
"semifield_lifting::level_two_down "
585 "after downstep(2)" << endl;
589 cout <<
"semifield_lifting::level_two_down done, "
590 "we found the following candidate sets:" << endl;
591 cout <<
"Orbit : # candidates : # orbits" << endl;
598 cout <<
"semifield_lifting::level_two_down done" << endl;
604 int f_v = (verbose_level >= 1);
607 cout <<
"semifield_lifting::level_two_flag_orbits" << endl;
613 cout <<
"semifield_lifting::level_two_flag_orbits done" << endl;
619 int f_v = (verbose_level >= 1);
622 cout <<
"semifield_lifting::level_two_upstep" << endl;
626 Level_two_nb_orbits ,
630 level_two_nb_middle_nodes ,
635 Level_three_stabilizer_gens ,
636 Level_three_nb_orbits ,
642 cout <<
"semifield_lifting::level_two_upstep done" << endl;
650 int f_v = (verbose_level >= 1);
654 cout <<
"semifield_lifting::downstep "
655 "level = " << level << endl;
661 cout <<
"semifield_lifting::downstep "
662 "level = " << level <<
" before find_all_candidates" << endl;
670 cout <<
"semifield_lifting::downstep "
671 "level = " << level <<
" after find_all_candidates" << endl;
672 cout <<
"i : Nb_candidates[i]" << endl;
681 cout <<
"semifield_lifting::downstep "
683 <<
" before processing all primary orbits" << endl;
688 int first_flag_orbit = 0;
692 cout <<
"semifield_lifting::downstep "
693 "processing orbit " << orbit <<
" / "
704 cout <<
"semifield_lifting::downstep "
706 <<
" orbit " << orbit <<
" / "
715 cout <<
"semifield_lifting::downstep "
717 <<
" after processing all primary orbits" << endl;
721 cout <<
"semifield_lifting::downstep level " << level << endl;
722 cout <<
"orbit : candidates : number of down orbits" << endl;
737 cout <<
"semifield_lifting::downstep "
738 "level " << level <<
" distribution of orbit lengths: ";
743 cout <<
"semifield_lifting::downstep done" << endl;
752 int f_v = (verbose_level >= 1);
757 int so, f, pt_local, len;
763 cout <<
"semifield_lifting::compute_flag_orbits "
765 <<
" verbose_level = " << level
788 cout <<
"semifield_lifting::compute_flag_orbits "
789 "flag_orbit_first[po] != Downstep_nodes[po].first_flag_orbit" << endl;
797 cout <<
"semifield_lifting::compute_flag_orbits "
798 "done with downstep at level " << level <<
":" << endl;
799 cout <<
"orbit : number of orbits" << endl;
809 cout <<
"allocating flag orbit nodes" << endl;
816 <<
" primary orbits" << endl;
825 go_prev_int = go_prev.
as_int();
830 cout <<
"semifield_lifting::compute_flag_orbits "
831 "at level " << level <<
": orbit = " << po
833 <<
" stabilizer order " << go_prev
834 <<
" nb_secondary_orbits = " << S->
nb_orbits
839 for (so = 0; so < S->
nb_orbits; so++, f++) {
848 if (len == go_prev_int) {
852 f_long_orbit =
FALSE;
855 pt_local, pt, len, f_long_orbit,
859 if ((f % 100) == 0) {
861 <<
" po = " << po <<
" / "
865 <<
" pt_local=" << pt_local
869 <<
" computing stabilizer of order "
871 << f_long_orbit << endl;
873 cout <<
"element " << pt <<
" is" << endl;
895 if ((f % 100) == 0) {
899 cout <<
"The flag orbit stabilizer has order " << go << endl;
908 cout <<
"semifield_lifting::compute_flag_orbits "
909 "at level " << level <<
": orbit = " << po
911 <<
" stabilizer order " << go_prev
912 <<
" nb_secondary_orbits = " << S->
nb_orbits
918 cout <<
"semifield_lifting::compute_flag_orbits "
919 "f != nb_flag_orbits" << endl;
925 cout <<
"semifield_lifting::compute_flag_orbits "
926 "level " << level <<
" computing the distribution "
927 "of stabilizer orders" << endl;
939 cout <<
"semifield_lifting::compute_flag_orbits "
940 "level " << level <<
" distribution of "
941 "stabilizer orders of flag orbits is: ";
949 cout <<
"semifield_lifting::compute_flag_orbits "
950 "level " << level <<
" done" << endl;
959 int f_v = (verbose_level >= 1);
960 int f_vv = (verbose_level >= 2);
964 cout <<
"semifield_lifting::upstep" << endl;
968 cout <<
"semifield_lifting::upstep level != 3" << endl;
972 cout <<
"semifield_lifting::upstep cur_level != 3" << endl;
979 int *base_change_matrix;
993 base_change_matrix =
NEW_int(level * level);
1012 cout <<
"Level " << level <<
": flag orbit "
1018 cout <<
"Level " << level <<
": skipping flag orbit "
1020 <<
" as it is a fusion node" << endl;
1041 cout <<
"semifield_lifting::upstep Level "
1042 << level <<
" flag orbit " << f <<
" / "
1043 <<
nb_flag_orbits <<
", before SC->matrix_unrank, pt = " << pt << endl;
1048 class_idx =
L2->
So[po];
1058 cout <<
"semifield_lifting::upstep Level "
1059 << level <<
" flag orbit " << f <<
" / "
1063 cout <<
"Mtx=" << endl;
1074 level, f, po, so, N,
1076 base_change_matrix, changed_space,
1086 for (h = 0; h < N; h++) {
1103 coset_reps->
init(
SC->
A, verbose_level - 2);
1104 coset_reps->
allocate(nb_aut_gens, verbose_level - 2);
1106 for (h = 0; h < N; h++) {
1114 for (h = 0; h < N; h++) {
1122 cout <<
"Level " << level <<
" orbit " <<
nb_orbits
1123 <<
" flag orbit " << f <<
" = " << po <<
" / " << so
1124 <<
" We are now extending the group by a factor of "
1125 << nb_aut_gens <<
":" << endl;
1129 coset_reps, nb_aut_gens,
1139 cout <<
"Level " << level <<
" orbit " <<
nb_orbits
1140 <<
" The new group order is " << go << endl;
1142 if (f_v && ((f & ((1 << 10) - 1)) == 0)) {
1143 cout <<
"Level " << level <<
": flag orbit " << f <<
" / "
1155 cout <<
"semifield_lifting::upstep "
1156 "newly computed level " << level
1157 <<
" distribution of stabilizer orders: ";
1161 cout <<
"Level " << level <<
", done with upstep, "
1162 "we found " <<
nb_orbits <<
" orbits" << endl;
1168 cout <<
"Level " << level <<
", done with upstep, "
1170 "saving information" << endl;
1185 cout <<
"semifield_lifting::upstep "
1186 "level " << level <<
" done" << endl;
1193 int level,
int f,
int po,
int so,
int N,
1194 int *transporter,
int *Mtx,
1195 int *base_change_matrix,
1203 int f_v = (verbose_level >= 1);
1204 int f_vv = (verbose_level >= 2);
1205 int f_vvv = (verbose_level >= 3);
1208 int trace_po, trace_so;
1211 cout <<
"semifield_lifting::upstep_loop_over_down_set" << endl;
1212 cout <<
"semifield_lifting::upstep_loop_over_down_set Mtx:" << endl;
1217 for (h = 0; h < N; h++) {
1220 cout <<
"Level " << level <<
": flag orbit "
1222 <<
" coset " << h <<
" / " << N << endl;
1225 cout <<
"semifield_lifting::upstep_loop_over_down_set "
1226 "before Gr->unrank_lint_here_and_extend_basis" << endl;
1230 base_change_matrix, h,
1233 cout <<
"semifield_lifting::upstep_loop_over_down_set "
1234 "base_change_matrix=" << endl;
1238 cout <<
"semifield_lifting::upstep_loop_over_down_set "
1243 cout <<
"semifield_lifting::upstep_loop_over_down_set "
1244 "before SC->F->mult_matrix_matrix" << endl;
1247 Mtx, changed_space, level, level,
k2,
1250 cout <<
"Mtx:" << endl;
1252 cout <<
"changed_space:" << endl;
1255 for (i = 0; i < level; i++) {
1257 cout <<
"i=" << i <<
" / " << level << endl;
1263 cout <<
"Level " << level <<
": flag orbit "
1265 <<
" coset " << h <<
" / " << N <<
" set: ";
1267 cout <<
" before trace_very_general" << endl;
1279 cout <<
"Level " << level <<
": flag orbit "
1281 <<
" coset " << h <<
" / " << N <<
" after trace_very_general "
1282 <<
" trace_po = " << trace_po
1283 <<
" trace_so = " << trace_so << endl;
1286 if (trace_po == po && trace_so == so) {
1288 cout <<
"Level " << level
1289 <<
", we found an automorphism" << endl;
1303 cout <<
"Level " << level <<
": flag orbit "
1305 <<
" coset " << h <<
" / " << N <<
" we will install a "
1306 "fusion node from " << mo <<
"=" << trace_po
1307 <<
"/" << trace_so <<
" to " << f
1308 <<
"=" << po <<
"/" << so << endl;
1327 cout <<
"semifield_lifting::upstep_loop_over_down_set done" << endl;
1336 int f_v = (verbose_level >= 1);
1339 cout <<
"semifield_lifting::find_all_candidates = " << level << endl;
1344 cout <<
"semifield_lifting::find_all_candidates "
1345 "before find_all_candidates_at_level_two" << endl;
1354 cout <<
"semifield_lifting::find_all_candidates "
1355 "level = " << level <<
" nyi" << endl;
1360 else if (level == 3) {
1362 cout <<
"semifield_lifting::find_all_candidates "
1363 "before find_all_candidates_at_level_three" << endl;
1365 find_all_candidates_at_level_three(verbose_level);
1368 else if (level == 4) {
1370 cout <<
"semifield_lifting::find_all_candidates "
1371 "before find_all_candidates_at_level_four" << endl;
1373 find_all_candidates_at_level_four(
1374 Level_four_Candidates, Level_four_Nb_candidates,
1384 cout <<
"semifield_lifting::find_all_candidates "
1386 <<
" distribution of number of candidates: ";
1391 cout <<
"semifield_lifting::find_all_candidates "
1392 "level " << level <<
" done" << endl;
1398 int po3,
int *basis,
1401 int f_v = (verbose_level >= 1);
1402 int f_vv = (verbose_level >= 2);
1409 cout <<
"semifield_lifting::get_basis "
1410 "po3 = " << po3 << endl;
1421 cout <<
"po=" << po <<
" so=" << so <<
" mo=" << mo
1422 <<
" pt=" << pt << endl;
1426 ext =
L2->up_orbit_rep[po];
1427 idx =
L2->down_orbit_classes[ext * 2 + 0];
1440 for (i =
k - 1; i >= 2; i--) {
1441 if (basis[2 *
k2 + i *
k + 0]) {
1447 cout <<
"Could not find pivot element" << endl;
1451 cout <<
"semifield_lifting::get_basis_and_pivots "
1453 int_matrix_print(basis, 3,
k2);
1454 cout <<
"semifield_lifting::get_basis_and_pivots "
1456 int_vec_print(cout, pivots, 3);
1462 cout <<
"semifield_lifting::get_basis_and_pivots "
1463 "po=" << po <<
" done" << endl;
1470 int level,
int orbit_idx,
1473 int f_v = (verbose_level >= 1);
1476 cout <<
"semifield_lifting::get_stabilizer_generators "
1477 "level = " << level <<
" orbit_idx=" << orbit_idx << endl;
1482 cout <<
"semifield_lifting::get_stabilizer_generators "
1483 "before find_all_candidates_at_level_two" << endl;
1486 cout <<
"semifield_lifting::get_stabilizer_generators "
1487 "orbit_idx >= L2->nb_orbits" << endl;
1492 cout <<
"semifield_lifting::get_stabilizer_generators "
1493 "level not yet implemented" << endl;
1498 int *input_basis,
int basis_sz,
int *transporter,
1502 int f_v = (verbose_level >= 1);
1503 int f_vv = (verbose_level >= 2);
1512 cout <<
"semifield_lifting::trace_to_level_three" << endl;
1518 cout <<
"semifield_lifting::trace_to_level_three "
1519 "before trace_very_general" << endl;
1522 input_basis, basis_sz, transporter,
1526 cout <<
"semifield_lifting::trace_to_level_three "
1527 "after trace_very_general "
1528 "trace_po=" << trace_po
1529 <<
" trace_so=" << trace_so << endl;
1533 cout <<
"semifield_lifting::trace_to_level_three "
1534 "reduced basis=" << endl;
1536 cout <<
"Which is:" << endl;
1541 cout <<
"semifield_lifting::trace_to_level_three "
1542 "before trace_step_up" << endl;
1550 cout <<
"semifield_lifting::trace_to_level_three "
1551 "after trace_step_up" << endl;
1554 cout <<
"semifield_lifting::trace_to_level_three "
1555 "trace_step_up return FALSE" << endl;
1563 cout <<
"semifield_lifting::trace_to_level_three "
1571 int *changed_basis,
int basis_sz,
int *basis_tmp,
1572 int *transporter,
int *ELT3,
1575 int f_v = (verbose_level >= 1);
1576 int f_vv = (verbose_level >= 1);
1582 cout <<
"semifield_lifting::trace_step_up po=" << po <<
" so=" << so << endl;
1583 cout <<
"semifield_lifting::trace_step_up "
1584 "Downstep_nodes[po].first_flag_orbit="
1589 cout <<
"semifield_lifting::trace_step_up "
1590 "fo = " << fo << endl;
1594 cout <<
"semifield_lifting::trace_step_up "
1595 "fusion node" << endl;
1605 0, basis_sz, verbose_level);
1607 cout <<
"semifield_lifting::trace_step_up "
1608 "after fusion:" << endl;
1610 cout <<
"Which is:" << endl;
1619 cout <<
"semifield_lifting::trace_step_up "
1620 "f0 = " << f0 << endl;
1624 cout <<
"semifield_lifting::trace_step_up "
1625 "po = " << po << endl;
1628 cout <<
"semifield_lifting::trace_step_up "
1639 pivots, changed_basis, verbose_level);
1642 cout <<
"semifield_lifting::trace_step_up "
1644 int_vec_print(cout, pivots, 3);
1651 cout <<
"semifield_lifting::trace_step_up "
1652 "before Gauss_int_with_given_pivots" << endl;
1665 cout <<
"semifield_lifting::trace_step_up "
1666 "Gauss_int_with_given_pivots returns FALSE, "
1667 "pivot cannot be found" << endl;
1674 cout <<
"semifield_lifting::trace_step_up "
1675 "after Gauss_int_with_given_pivots:" << endl;
1678 for (i = 0; i < 3; i++) {
1679 for (j = 3; j < basis_sz; j++) {
1681 changed_basis + j *
k2,
k2,
1686 cout <<
"semifield_lifting::trace_step_up "
1687 "after reducing:" << endl;
1695 cout <<
"semifield_lifting::trace_step_up done" << endl;
1703 int *input_basis,
int basis_sz,
1705 int &trace_po,
int &trace_so,
1710 int f_v = (verbose_level >= 1);
1711 int f_vv = (verbose_level >= 2);
1712 int f_vvv = (verbose_level >= 3);
1718 cout <<
"semifield_lifting::trace_very_general" << endl;
1721 cout <<
"semifield_lifting::trace_very_general cur_level != 3" << endl;
1727 cout <<
"semifield_lifting::trace_very_general "
1728 "input basis:" << endl;
1733 cout <<
"does not satisfy the partial semifield condition" << endl;
1738 cout <<
"semifield_lifting::trace_very_general "
1739 "before trace_to_level_two" << endl;
1742 input_basis, basis_sz,
1747 cout <<
"semifield_lifting::trace_very_general "
1748 "after trace_to_level_two" << endl;
1749 cout <<
"trace_po=" << trace_po << endl;
1759 cout <<
"semifield_lifting::trace_very_general "
1760 "we will now compute the reduced coset reps:" << endl;
1766 cout <<
"semifield_lifting::trace_very_general base_cols=";
1770 for (i = 0; i < 2; i++) {
1771 for (j = 2; j < basis_sz; j++) {
1778 cout <<
"semifield_lifting::trace_very_general "
1779 "reduced basis=" << endl;
1781 cout <<
"Which is:" << endl;
1786 cout <<
"does not satisfy the partial "
1787 "semifield condition" << endl;
1805 cout <<
"semifield_lifting::trace_very_general "
1806 "rank of row 2: a = " << a << endl;
1811 cout <<
"semifield_lifting::trace_very_general "
1812 "a_local = " << a_local << endl;
1820 cout <<
"semifield_lifting::trace_very_general "
1821 "trace_so = " << trace_so << endl;
1834 2, basis_sz, verbose_level);
1836 cout <<
"semifield_lifting::trace_very_general "
1837 "after transforming with cosetrep from "
1838 "secondary orbit (4):" << endl;
1844 cout <<
"semifield_lifting::trace_very_general "
1849 for (i = 0; i < 2; i++) {
1850 for (j = 2; j < basis_sz; j++) {
1852 input_basis + j *
k2,
k2,
1858 cout <<
"semifield_lifting::trace_very_general "
1859 "reduced basis(2)=" << endl;
1861 cout <<
"Which is:" << endl;
1866 if (!test_partial_semifield(input_basis,
1868 cout <<
"does not satisfy the partial semifield condition" << endl;
1874 cout <<
"semifield_lifting::trace_very_general done" << endl;
1881 int *input_basis,
int basis_sz,
1888 int f_v = (verbose_level >= 1);
1889 int f_vv = (verbose_level >= 2);
1890 int f_vvv = (verbose_level >= 3);
1891 int i, j, idx, d, d0, c0, c1;
1896 cout <<
"semifield_lifting::trace_very_general" << endl;
1899 cout <<
"semifield_lifting::trace_very_general cur_level != 3" << endl;
1905 cout <<
"semifield_lifting::trace_very_general "
1906 "input basis:" << endl;
1911 cout <<
"does not satisfy the partial semifield condition" << endl;
1927 for (i = 0; i <
k; i++) {
1928 for (j = 0; j <
k; j++) {
1929 M1[i *
n + j] = input_basis[i *
k + j];
1932 for (i =
k; i <
n; i++) {
1938 cout <<
"transformation matrix transporter=" << endl;
1940 cout <<
"transformation matrix M1=" << endl;
1947 0, basis_sz, verbose_level);
1949 cout <<
"semifield_lifting::trace_very_general "
1950 "after transform (1):" << endl;
1954 cout <<
"semifield_lifting::trace_very_general "
1955 "basis_tmp is not the identity matrix" << endl;
1969 input_basis + 1 *
k2,
1985 cout <<
"semifield_lifting::trace_very_general "
1986 "the second matrix belongs to conjugacy class "
1987 << idx <<
" which is in down orbit " << d << endl;
2005 1, basis_sz, verbose_level);
2007 cout <<
"semifield_lifting::trace_very_general "
2008 "after transform (2):" << endl;
2025 if (c0 != idx && c1 == idx) {
2031 cout <<
"Adjusting" << endl;
2042 1, basis_sz, verbose_level);
2044 cout <<
"semifield_lifting::trace_very_general "
2045 "after transform because of adjustment:" << endl;
2050 for (i = 0; i <
k2; i++) {
2051 input_basis[1 *
k2 + i] = F->
add(
2052 input_basis[1 *
k2 + i],
2053 F->
negate(input_basis[i]));
2056 cout <<
"semifield_lifting::trace_very_general "
2057 "after subtracting the identity:" << endl;
2063 cout <<
"No adjustment needed" << endl;
2069 cout <<
"Applying fusion element" << endl;
2072 cout <<
"Fusion_elt[d] == NULL" << endl;
2088 cout <<
"semifield_lifting::trace_very_general "
2089 "after transform (3):" << endl;
2092 if (input_basis[0] == 0) {
2094 for (j = 0; j <
k2; j++) {
2095 input_basis[j] = F->
add(
2096 input_basis[j], input_basis[
k2 + j]);
2100 if (input_basis[0] == 0) {
2101 cout <<
"input_basis[0] == 0" << endl;
2104 if (input_basis[0] != 1) {
2107 lambda = F->
inverse(input_basis[0]);
2108 for (j = 0; j <
k2; j++) {
2109 input_basis[j] = F->
mult(input_basis[j], lambda);
2112 if (input_basis[0] != 1) {
2114 cout <<
"input_basis[0] != 1" << endl;
2117 if (input_basis[
k2]) {
2119 lambda = F->
negate(input_basis[
k2]);
2120 for (j = 0; j <
k2; j++) {
2121 input_basis[
k2 + j] = F->
add(
2122 input_basis[
k2 + j],
2123 F->
mult(input_basis[j], lambda));
2126 if (input_basis[
k]) {
2128 lambda = F->
negate(input_basis[
k]);
2129 for (j = 0; j <
k2; j++) {
2130 input_basis[j] = F->
add(
2132 F->
mult(input_basis[
k2 + j], lambda));
2135 if (input_basis[
k]) {
2136 cout <<
"input_basis[k] (should be zero by now)" << endl;
2140 cout <<
"semifield_lifting::trace_very_general "
2141 "after gauss elimination:" << endl;
2147 cout <<
"No fusion" << endl;
2152 cout <<
"semifield_lifting::trace_very_general "
2153 "d0 = " << d0 << endl;
2156 cout <<
"Fusion_elt[d0]" << endl;
2168 cout <<
"semifield_lifting::trace_very_general "
2169 "trace_po = " << trace_po << endl;
2177 cout <<
"semifield_lifting::trace_very_general done" << endl;
2183 int orbit_r,
int orbit_m,
2184 int f_out_path, std::string &out_path,
2187 int f_v = (verbose_level >= 1);
2191 cout <<
"semifield_lifting::deep_search "
2192 "orbit_r=" << orbit_r
2193 <<
" orbit_m=" << orbit_m << endl;
2200 cout <<
"semifield_lifting::deep_search "
2201 "before read_level_info_file" << endl;
2205 cout <<
"semifield_lifting::deep_search "
2206 "after read_level_info_file" << endl;
2210 cout <<
"semifield_lifting::deep_search "
2211 "before deep_search_at_level_three" << endl;
2217 f_out_path, out_path,
2221 cout <<
"semifield_lifting::deep_search "
2222 "after deep_search_at_level_three "
2223 "nb_sol=" << nb_sol << endl;
2227 cout <<
"semifield_lifting::deep_search "
2228 " orbit_r=" << orbit_r
2229 <<
" orbit_m=" << orbit_m <<
" done" << endl;
2235 int orbit_r,
int orbit_m,
2236 int f_out_path, std::string &out_path,
2240 int f_v = (verbose_level >= 1);
2249 cout <<
"semifield_lifting::deep_search_at_level_three" << endl;
2254 f_out_path, out_path, orbit_r, orbit_m);
2266 cout <<
"semifield_lifting::deep_search_at_level_three "
2267 "Level_three_nb_orbits = " <<
nb_orbits << endl;
2270 for (orbit = 0; orbit <
nb_orbits; orbit++) {
2272 if ((orbit % orbit_m) != orbit_r) {
2276 cout <<
"semifield_lifting::deep_search_at_level_three orbit "
2277 << orbit <<
" / " <<
nb_orbits <<
":" << endl;
2279 for (i = 0; i < 3; i++) {
2280 cout <<
"matrix " << i <<
":" << endl;
2294 deep_search_at_level_three_orbit_depth2(orbit,
2295 Basis, pivots, fp, verbose_level);
2301 cout <<
"Written file " << fname <<
" of size "
2306 f_out_path, out_path, orbit_r, orbit_m);
2309 fp <<
"Case " << orbit_r <<
" mod " << orbit_m
2310 <<
" is done" << endl;
2312 cout <<
"Written file " << fname <<
" of size "
2319 cout <<
"semifield_lifting::deep_search_at_level_three "
2337 cout <<
"distribution of stabilizer orders at level " <<
cur_level <<
" : ";
2343 int orbit,
int *Basis,
int *pivots,
2352 int f_v = (verbose_level >= 1);
2353 int f_vv = (verbose_level >= 2);
2354 int f_v3 = (verbose_level >= 3);
2357 long int a1, a2, a3;
2367 cout <<
"semifield_lifting::deep_search_at_level_three_orbit "
2371 cur_pivot_row = pivots[2] /
k;
2373 cout <<
"semifield_lifting::deep_search_at_level_three_orbit "
2374 "cur_pivot_row = " << cur_pivot_row << endl;
2377 if (cur_pivot_row !=
k - 1) {
2378 cout <<
"semifield_lifting::deep_search_at_level_three_orbit "
2379 "cur_pivot_row != k - 1" << endl;
2381 fp <<
"start orbit " << orbit << endl;
2382 fp <<
"finish orbit " << orbit <<
" " << nb_sol << endl;
2385 cout <<
"semifield_lifting::deep_search_at_level_three_orbit "
2387 <<
" skipped because pivot is not in the last row, "
2388 "nb_sol = " << nb_sol << endl;
2396 fp <<
"start orbit " << orbit << endl;
2406 cout <<
"semifield_lifting::deep_search_at_level_three_orbit "
2408 <<
" reading candidates by type, po = " << po << endl;
2419 long int underlying_set_size;
2434 for (u = 0; u < C3->
nb_sets; u++) {
2441 for (u = 0; u < C4->
nb_sets; u++) {
2445 for (u = 0; u < C5->
nb_sets; u++) {
2449 for (u = 0; u < C6->
nb_sets; u++) {
2456 cout <<
"semifield_lifting::deep_search_at_level_three_orbit "
2457 "computing candidates C4" << endl;
2468 cout <<
"semifield_lifting::deep_search_at_level_three_orbit "
2469 "computing candidates C4 done" << endl;
2480 for (c4 = 0; c4 < C4->
Set_size[1]; c4++) {
2486 a4 = C4->
Sets[1][c4];
2495 cout <<
"Level 3, orbit " << orbit <<
" / "
2497 << c4 <<
" / " << C4->
Set_size[1] <<
" is matrix" << endl;
2501 pivots[3] = (
k - 2) *
k;
2507 cout <<
"semifield_lifting::deep_search_at_level_three_orbit "
2508 "computing candidates C5" << endl;
2520 cout <<
"semifield_lifting::deep_search_at_level_three_orbit "
2521 "computing candidates C5 done" << endl;
2528 for (c5 = 0; c5 < C5->
Set_size[1]; c5++) {
2531 a5 = C5->
Sets[1][c5];
2540 cout <<
"Level 3, orbit " << orbit <<
" / "
2542 << c4 <<
" / " << C4->
Set_size[1] <<
" level 5 case "
2544 <<
" is matrix" << endl;
2548 pivots[4] = (
k - 3) *
k;
2553 cout <<
"semifield_lifting::deep_search_at_level_"
2554 "three_orbit computing candidates C6" << endl;
2566 cout <<
"semifield_lifting::deep_search_at_level_"
2567 "three_orbit computing candidates C6 done" << endl;
2573 for (c6 = 0; c6 < C6->
Set_size[1]; c6++) {
2576 a6 = C6->
Sets[1][c6];
2584 fp <<
"SOL " << orbit <<
" " << c4 <<
" " << c5 <<
" "
2585 << c6 <<
" " << a1 <<
" " << a2 <<
" " << a3
2586 <<
" " << A4 <<
" " << A5 <<
" " << A6 << endl;
2587 cout <<
"SEMIFIELD " << nb_sol <<
" : " << a1 <<
", "
2588 << a2 <<
", " << a3 <<
", " << A4 <<
", "
2589 << A5 <<
", " << A6 << endl;
2613 if (f_v && ((c4 % 1000) == 0)) {
2614 cout <<
"Level 3, orbit " << orbit <<
" / "
2616 <<
" / " << C4->
Set_size[1] <<
" done, "
2617 "yields nb_sol = " << nb_sol - nb_sol0
2618 <<
" solutions, nb_sol = " << nb_sol << endl;
2626 fp <<
"finish orbit " << orbit <<
" " << nb_sol << endl;
2644 cout <<
"semifield_lifting::deep_search_at_level_three_orbit "
2645 << orbit <<
" / " <<
nb_orbits <<
" done, "
2646 "nb_sol = " << nb_sol << endl;
2652 int *last_mtx,
int window_bottom,
int window_size,
2655 long int *Tmp1,
long int *Tmp2,
2658 int f_v = (verbose_level >= 1);
2662 int window_size_new;
2664 long int last_mtx_numeric;
2670 cout <<
"semifield_lifting::candidate_testing" << endl;
2679 window_size_new = window_size - 1;
2684 for (u = 1; u < Nb_sets_new; u++) {
2692 cout <<
"Level 3, Orbit " << orbit <<
" / "
2694 << u <<
" / " << Nb_sets_new <<
" v=" << v
2695 <<
" w=" << w <<
" testing " << l
2696 <<
" points, pattern: ";
2704 for (h = 0; h < l; h++) {
2705 Tmp1[h] = C_in->
Sets[v][h] ^ last_mtx_numeric;
2715 for (h = 0; h < set_sz; h++) {
2716 Tmp2[h] ^= last_mtx_numeric;
2719 for (h = 0; h < set_sz; h++) {
2720 C_out->
Sets[u][h] = Tmp2[h];
2724 if (u && C_out->
Set_size[u] == 0) {
2733 cout <<
"semifield_lifting::candidate_testing "
2740 int po3,
long int &a1,
long int &a2,
long int &a3,
2743 int f_v = (verbose_level >= 1);
2750 cout <<
"semifield_lifting::level_three_get_a1_a2_a3 "
2751 "po3 = " << po3 << endl;
2760 ext =
L2->up_orbit_rep[po];
2761 idx =
L2->down_orbit_classes[ext * 2 + 0];
2778 cout <<
"semifield_lifting::level_three_get_a1_a2_a3 "
2790 int f_v = (verbose_level >= 1);
2794 cout <<
"semifield_lifting::write_level_info_file "
2799 const char *column_label[] = {
2815 for (j = 0; j < nb_vecs; j++) {
2816 f <<
"," << column_label[j];
2831 cout <<
"Written file " << fname <<
" of size"
2834 cout <<
"semifield_lifting::write_level_info_file done" << endl;
2842 int f_v = (verbose_level >= 1);
2849 cout <<
"semifield_lifting::read_level_info_file" << endl;
2853 cout <<
"semifield_lifting::read_level_info_file " << fname << endl;
2856 cout <<
"semifield_lifting::read_level_info_file "
2857 "error trying to read the file " << fname << endl;
2873 for (i = 0; i < m; i++) {
2874 Po[i] = M[i *
n + 1];
2875 So[i] = M[i *
n + 2];
2876 Mo[i] = M[i *
n + 3];
2877 Go[i] = M[i *
n + 4];
2878 Pt[i] = M[i *
n + 5];
2884 cout <<
"semifield_lifting::read_level_info_file done" << endl;
2890 int f_v = (verbose_level >= 1);
2894 cout <<
"semifield_lifting::save_flag_orbits "
2903 ofstream fp(fname, ios::binary);
2910 cout <<
"Written file " << fname <<
" of size "
2913 cout <<
"semifield_lifting::save_flag_orbits "
2914 "cur_level = " <<
cur_level <<
" done" << endl;
2920 int f_v = (verbose_level >= 1);
2924 cout <<
"semifield_lifting::read_flag_orbits "
2936 cout <<
"semifield_lifting::read_flag_orbits "
2937 "file " << fname <<
" does not exist" << endl;
2941 cout <<
"semifield_lifting::read_flag_orbits "
2942 "reading file " << fname << endl;
2946 ifstream fp(fname, ios::binary);
2952 if ((i & ((1 << 15) - 1)) == 0) {
2953 cout <<
"semifield_lifting::read_flag_orbits "
2960 cout <<
"semifield_lifting::read_flag_orbits "
2961 "Read file " << fname <<
" of size "
2966 cout <<
"semifield_lifting::read_flag_orbits "
2967 "cur_level = " <<
cur_level <<
" done, "
2976 int f_v = (verbose_level >= 1);
2980 cout <<
"semifield_lifting::save_stabilizers "
2989 ofstream fp(fname, ios::binary);
2991 fp.write((
char *) &
nb_orbits,
sizeof(
int));
2996 cout <<
"Written file " << fname <<
" of size "
2999 cout <<
"semifield_lifting::save_stabilizers "
3000 "cur_level = " <<
cur_level <<
" done" << endl;
3006 int f_v = (verbose_level >= 1);
3010 cout <<
"semifield_lifting::read_stabilizers "
3021 cout <<
"semifield_lifting::read_stabilizers "
3022 "file " << fname <<
" does not exist" << endl;
3026 cout <<
"semifield_lifting::read_stabilizers "
3027 "reading file " << fname << endl;
3031 ifstream fp(fname, ios::binary);
3033 fp.read((
char *) &
nb_orbits,
sizeof(
int));
3037 if ((i & ((1 << 15) - 1)) == 0) {
3038 cout <<
"semifield_starter::read_stabilizers "
3045 cout <<
"semifield_lifting::read_stabilizers "
3046 "Read file " << fname <<
" of size "
3051 cout <<
"semifield_lifting::read_stabilizers "
3052 "cur_level = " <<
cur_level <<
" done" << endl;
3057 int level,
int orbit_idx)
3061 sprintf(str,
"L%d_orbit%d_schreier.csv", level, orbit_idx);
3075 sprintf(str,
"L%d_info.csv",
cur_level);
3089 sprintf(str,
"L%d_flag_orbits.bin",
cur_level);
3103 sprintf(str,
"L%d_flag_stabilizers.bin",
cur_level);
3114 int f_out_path, std::string &out_path,
3115 int orbit_r,
int orbit_m)
3119 sprintf(str,
"deep_slice%d_%d_sol.txt", orbit_r, orbit_m);
3121 fname.assign(out_path);
3130 int f_out_path, std::string &out_path,
3131 int orbit_r,
int orbit_m)
3135 sprintf(str,
"deep_slice%d_%d_suc.txt", orbit_r, orbit_m);
3137 fname.assign(out_path);
conjugacy class in GL(n,q) described using rational normal form
int find_class_rep(gl_class_rep *Reps, int nb_reps, gl_class_rep *R, int verbose_level)
void identify_matrix(int *Mtx, gl_class_rep *R, int *Basis, int verbose_level)
a collection of combinatorial functions
long int generalized_binomial(int n, int k, int q)
set of sets with entries over long int
void init_simple(long int underlying_set_size, int nb_sets, int verbose_level)
void init_set(int idx_of_set, long int *set, int sz, int verbose_level)
a collection of functions related to sorted vectors
void lint_vec_intersect_sorted_vectors(long int *v1, int len1, long int *v2, int len2, long int *v3, int &len3)
void lint_vec_heapsort(long int *v, int len)
a statistical analysis of data consisting of single integers
void init(int *data, int data_length, int f_second, int verbose_level)
void print(int f_backwards)
void init_lint(long int *data, int data_length, int f_second, int verbose_level)
void latex_matrix(std::ostream &f, int f_elements_exponential, std::string &symbol_for_print, int *M, int m, int n)
linear_algebra::linear_algebra * Linear_algebra
various functions related to geometries
void AG_element_unrank(int q, int *v, int stride, int len, long int a)
to rank and unrank subspaces of a fixed dimension in F_q^n
void init(int n, int k, field_theory::finite_field *F, int verbose_level)
void unrank_lint_here_and_extend_basis(int *Mtx, long int rk, int verbose_level)
int is_identity_matrix(int *A, int n)
void identity_matrix(int *A, int n)
void mult_matrix_matrix(int *A, int *B, int *C, int m, int n, int o, int verbose_level)
void Gauss_step(int *v1, int *v2, int len, int idx, int verbose_level)
int Gauss_int_with_given_pivots(int *A, int f_special, int f_complete, int *pivots, int nb_pivots, int m, int n, int verbose_level)
basic number theoretic functions
int i_power_j(int i, int j)
a collection of functions related to file io
long int file_size(std::string &fname)
void lint_matrix_read_csv(std::string &fname, long int *&M, int &m, int &n, int verbose_level)
domain to compute with objects of type longinteger
void integral_division_by_int(longinteger_object &a, int b, longinteger_object &q, int &r)
a class to represent arbitrary precision integers
a permutation group in a fixed action.
void element_mult(void *a, void *b, void *ab, int verbose_level)
void element_invert(void *a, void *av, int verbose_level)
void make_element(int *Elt, int *data, int verbose_level)
void element_move(void *a, void *b, int verbose_level)
to hold a vector of group elements
void allocate(int length, int verbose_level)
void init(actions::action *A, int verbose_level)
field_theory::finite_field * GFq
Schreier trees for orbits of groups on points.
void point_stabilizer(actions::action *default_action, ring_theory::longinteger_object &go, groups::sims *&Stab, int orbit_no, int verbose_level)
void coset_rep_inv(int j, int verbose_level)
a permutation group represented via a stabilizer chain
a strong generating set for a permutation group with respect to a fixed action
void init_trivial_group(actions::action *A, int verbose_level)
void init_copy(strong_generators *S, int verbose_level)
void print_generators_tex()
long int group_order_as_lint()
void read_from_file_binary(actions::action *A, std::ifstream &fp, int verbose_level)
void write_to_file_binary(std::ofstream &fp, int verbose_level)
void init_from_sims(groups::sims *S, int verbose_level)
void add_generators(data_structures_groups::vector_ge *coset_reps, int group_index, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
groups::matrix_group * Mtx
void basis_print(int *Mtx, int sz)
int test_partial_semifield(int *Basis, int n, int verbose_level)
void matrix_unrank(long int rk, int *Mtx)
void apply_element_and_copy_back(int *Elt, int *basis_in, int *basis_out, int first, int last_plus_one, int verbose_level)
long int matrix_rank(int *Mtx)
long int matrix_rank_without_first_column(int *Mtx)
auxiliary class for classifying semifields
void init(semifield_lifting *SL, int level, int orbit_number, long int *Candidates, int nb_candidates, int first_flag_orbit, int verbose_level)
int find_point(long int a)
auxiliary class for classifying semifields
groups::strong_generators * gens
void read_from_file_binary(semifield_lifting *SL, std::ifstream &fp, int verbose_level)
ring_theory::longinteger_object go
int downstep_secondary_orbit
void write_to_file_binary(semifield_lifting *SL, std::ofstream &fp, int verbose_level)
int downstep_primary_orbit
void init(int downstep_primary_orbit, int downstep_secondary_orbit, int pt_local, long int pt, int downstep_orbit_len, int f_long_orbit, int verbose_level)
The first and second steps in classifying semifields.
void find_all_candidates_at_level_two(int verbose_level)
int * class_to_flag_orbit
algebra::gl_class_rep * R
long int * class_rep_rank
int ** class_rep_plus_I_Basis_inv
void allocate_candidates_at_level_two(int verbose_level)
void read_candidates_at_level_two_by_type(data_structures::set_of_sets_lint *&Candidates_by_type, int orbit, int verbose_level)
groups::strong_generators * Stabilizer_gens
void multiply_to_the_right(int *ELT1, int *Mtx, int *ELT2, int *ELT3, int verbose_level)
int trace_step_up(int &po, int &so, int *changed_basis, int basis_sz, int *basis_tmp, int *transporter, int *ELT3, int verbose_level)
void make_file_name_schreier(std::string &fname, int level, int orbit_idx)
semifield_downstep_node * Downstep_nodes
void print_stabilizer_orders()
void trace_to_level_two(int *input_basis, int basis_sz, int *transporter, int &trace_po, int verbose_level)
void get_basis(int po3, int *basis, int verbose_level)
void upstep_loop_over_down_set(int level, int f, int po, int so, int N, int *transporter, int *Mtx, int *base_change_matrix, int *changed_space, long int *set, int **Aut, int verbose_level)
void save_stabilizers(int verbose_level)
void find_all_candidates(int level, int verbose_level)
void read_stabilizers(int verbose_level)
void level_three_get_a1_a2_a3(int po3, long int &a1, long int &a2, long int &a3, int verbose_level)
void report(std::ostream &ost, int verbose_level)
int candidate_testing(int orbit, int *last_mtx, int window_bottom, int window_size, data_structures::set_of_sets_lint *C_in, data_structures::set_of_sets_lint *C_out, long int *Tmp1, long int *Tmp2, int verbose_level)
int trace_to_level_three(int *input_basis, int basis_sz, int *transporter, int &trace_po, int verbose_level)
void trace_very_general(int *input_basis, int basis_sz, int *transporter, int &trace_po, int &trace_so, int verbose_level)
void compute_flag_orbits(int level, int verbose_level)
void upstep(int level, int verbose_level)
void deep_search_at_level_three(int orbit_r, int orbit_m, int f_out_path, std::string &out_path, int &nb_sol, int verbose_level)
algebra::gl_class_rep * R1
void level_two_upstep(int verbose_level)
groups::strong_generators * get_stabilizer_generators(int level, int orbit_idx, int verbose_level)
void init_level_three(semifield_level_two *L2, int f_prefix, std::string &prefix, int verbose_level)
void compute_level_three(int verbose_level)
void write_level_info_file(int verbose_level)
void level_two_down(int verbose_level)
semifield_flag_orbit_node * Flag_orbits
void read_flag_orbits(int verbose_level)
void make_fname_deep_search_slice_success(std::string &fname, int f_out_path, std::string &out_path, int orbit_r, int orbit_m)
void recover_level_three_downstep(int verbose_level)
void level_two_flag_orbits(int verbose_level)
void recover_level_three_from_file(int f_read_flag_orbits, int verbose_level)
void read_level_info_file(int verbose_level)
void deep_search_at_level_three_orbit(int orbit, int *Basis, int *pivots, std::ofstream &fp, int &nb_sol, int verbose_level)
void downstep(int level, int verbose_level)
groups::strong_generators * Stabilizer_gens
void make_fname_deep_search_slice_solutions(std::string &fname, int f_out_path, std::string &out_path, int orbit_r, int orbit_m)
void deep_search(int orbit_r, int orbit_m, int f_out_path, std::string &out_path, int verbose_level)
void create_fname_level_info_file(std::string &fname)
void make_fname_stabilizers(std::string &fname)
void make_fname_flag_orbits(std::string &fname)
void save_flag_orbits(int verbose_level)
groups::strong_generators * Prev_stabilizer_gens
#define Int_vec_zero(A, B)
#define Lint_vec_print(A, B, C)
#define Int_matrix_print(A, B, C)
#define NEW_OBJECTS(type, n)
#define Int_vec_print(A, B, C)
the orbiter library for the classification of combinatorial objects