19namespace layer5_applications {
26static int spread_check_function_callback(
int len,
long int *S,
27 void *data,
int verbose_level);
28static void spread_callback_report(
isomorph *Iso,
void *data,
int verbose_level);
29static void spread_callback_make_quotients(
isomorph *Iso,
void *data,
31static void callback_spread_print(std::ostream &ost,
int len,
long int *S,
void *data);
36 long int *data,
int verbose_level)
39 int f_v = (verbose_level >= 1);
48 cout <<
"spread_classify::print_isomorphism_type" << endl;
52 sprintf(str,
"_%d.tex", iso_cnt);
58 fname_klein.assign(Iso->
prefix);
59 sprintf(str,
"_%d_klein.tex", iso_cnt);
60 fname_klein.append(str);
71 cout <<
"opening file " << fname <<
" for writing" << endl;
95 cout <<
"spread_classify::print_isomorphism_type written file "
96 << fname <<
" of size " << Fio.
file_size(fname) << endl;
97 cout <<
"spread_classify::print_isomorphism_type written file "
98 << fname_klein <<
" of size "
110 long int *data,
int verbose_level)
112 int f_v = (verbose_level >= 1);
116 int f, l, j, idx, pt;
118 int f_elements_exponential =
FALSE;
119 string symbol_for_print;
125 cout <<
"spread_classify::print_isomorphism_type2" << endl;
129 symbol_for_print.assign(
"\\alpha");
134 f_elements_exponential =
TRUE;
137 ost <<
"\\parindent=0pt" << endl;
139 ost <<
"\\section{Spread " << iso_cnt <<
"}" << endl;
150 ost <<
"Stabilizer has order " << so <<
"\\\\" << endl;
152 ost <<
"\\bigskip" << endl;
155 <<
"$ orbits on the set.\\\\" << endl;
156 ost <<
"The orbit type is $[";
158 ost <<
"]$\\\\" << endl;
159 ost <<
"\\bigskip" << endl;
163 klein(ost, Iso, iso_cnt,
164 Stab, Orb, data, Iso->
size, verbose_level);
167 ost <<
"The set of " <<
k - 1 <<
"-Subspaces in "
168 "PG($" <<
n - 1 <<
", " <<
q <<
"$) is:\\\\" << endl;
170 for (i = 0; i < Iso->
size; i++) {
171 ost <<
"$S_{" << i + 1 <<
"}$ has rank " << data[i]
172 <<
" and is generated by\\\\" << endl;
175 ost <<
"\\left[" << endl;
178 ost <<
"\\right]" << endl;
179 ost <<
"$$" << endl << endl;
182 ost <<
"The stabilizer of order " << so
183 <<
" is generated by:\\\\" << endl;
184 for (i = 0; i < Stab->
gens.
len; i++) {
193 ost <<
"$$ g_{" << i + 1 <<
"}=" << endl;
195 ost <<
"$$" << endl <<
"with " <<
n <<
" fixed points" << endl;
201 cout <<
"spread_classify::print_isomorphism_type "
202 "calling induced_action_on_set_and_kernel" << endl;
205 A, Stab, Iso->
size, data, verbose_level - 1);
208 cout <<
"spread_classify::print_isomorphism_type "
209 "induced_action_on_set_and_kernel finished" << endl;
214 for (i = 0; i < Stab->
gens.
len; i++) {
215 file <<
"$g_{" << setw(2) << i + 1 <<
"} = ";
216 AA->element_print_as_permutation_with_offset(Stab->
gens.
ith(i), file, 1);
217 file <<
"$\\\\" << endl;
223 ost <<
"The orbits on the set are:\\\\" << endl;
227 ost <<
"$O_{" << i <<
"}=\\{";
228 for (j = 0; j < l; j++) {
236 for (j = 0; j < l; j++) {
237 ost << pt_list[j] + 1;
241 ost <<
"\\}$ (length $" << l <<
"$)\\\\" << endl;
247 file <<
"\\bigskip" << endl;
248 file <<
"The actions induced on the orbits are:\\\\" << endl;
251 induced_action_on_orbit(file, AA, Stab, Orb, i, verbose_level - 2);
262 cout <<
"spread_classify::print_isomorphism_type2 done" << endl;
269 long int *data,
int data_size,
int verbose_level)
271 int f_v = (verbose_level >= 1);
273 long int **Pts_on_plane;
274 int *nb_pts_on_plane;
279 cout <<
"spread_classify::klein_invariants" << endl;
283 cout <<
"spread_classify::klein_invariants Klein == NULL" << endl;
298 v.
m_ii(0, nb_planes);
304 for (i = 0; i < nb_planes; i++) {
310 for (j = 0; j < nb_pts_on_plane[i]; j++) {
317 sprintf(fname,
"%s%d_klein_invariant.bin", prefix, iso_cnt);
321 for (i = 0; i < nb_planes; i++) {
328 cout <<
"spread_classify::klein_invariants done" << endl;
335 long int *data,
int data_size,
int verbose_level)
338 int f_v = (verbose_level >= 1);
340 long int **Pts_on_plane;
341 int *nb_pts_on_plane;
346 int set_size = data_size;
357 int f_second =
FALSE;
359 C.
init(nb_pts_on_plane, nb_planes, f_second, 0);
361 cout <<
"spread::klein: plane-intersection type: ";
365 ost <<
"Plane type of Klein-image is $( ";
367 ost <<
" )$" << endl << endl;
368 ost <<
"\\bigskip" << endl << endl;
370 int nb_blocks, f, l, m, u, uu, idx;
391 cout <<
"There are " << nb_blocks
392 <<
" interesting planes" << endl;
394 Inc =
NEW_int(set_size * nb_blocks);
395 for (i = 0; i < set_size * nb_blocks; i++) {
404 for (u = 0; u < l; u++) {
407 for (uu = 0; uu < a; uu++) {
408 i = Pts_on_plane[idx][uu];
409 Inc[i * nb_blocks + j] = 1;
416 if (nb_blocks < 20) {
418 cout <<
"we will draw an incidence picture" << endl;
428 Stack->
allocate(set_size + nb_blocks, 0 );
433 fname_pic.assign(Iso->
prefix);
434 sprintf(str,
"_%d_planes.tex", iso_cnt);
435 fname_pic.append(str);
438 ofstream fp_pic(fname_pic);
440 ost <<
"\\input " << fname_pic << endl;
442 ost <<
"\\\\" << endl;
457 Stack->
allocate(set_size + nb_blocks, 0 );
465 string fname_row_scheme;
466 string fname_col_scheme;
469 fname_row_scheme.assign(Iso->
prefix);
470 sprintf(str,
"_%d_planes_row_scheme.tex", iso_cnt);
471 fname_row_scheme.append(str);
473 fname_col_scheme.assign(Iso->
prefix);
474 sprintf(str,
"_%d_planes_col_scheme.tex", iso_cnt);
475 fname_col_scheme.append(str);
478 ofstream fp_row_scheme(fname_row_scheme);
479 ofstream fp_col_scheme(fname_col_scheme);
481 fp_row_scheme,
FALSE ,
484 fp_col_scheme,
FALSE ,
490 ost2 <<
"\\section*{Spread " << iso_cnt <<
"}" << endl << endl;
492 longinteger_object go;
495 ost2 <<
"Stabilizer has order " << go <<
"\\\\" << endl;
497 ost2 <<
"\\bigskip" << endl;
503 ost2 <<
"There are $" << Orb.
nb_orbits <<
"$ orbits on the set.\\\\" << endl;
504 ost2 <<
"The orbit type is $[";
505 C0.print_naked_tex(ost2);
506 ost2 <<
"]$\\\\" << endl;
507 ost2 <<
"\\bigskip" << endl;
509 ost2 <<
"Plane type of Klein-image is $(";
511 ost2 <<
")$" << endl << endl;
515 ost <<
"\\bigskip" << endl << endl;
516 ost <<
"\\[" << endl;
517 ost <<
"\\input " << fname_row_scheme << endl;
518 ost <<
"\\quad" << endl;
519 ost <<
"\\input " << fname_col_scheme << endl;
520 ost <<
"\\]" << endl;
529 for (i = 0; i < nb_planes; i++) {
536 cout <<
"spread_classify::klein done" << endl;
544 long int *data,
int size,
545 int *&intersection_type,
int &highest_intersection_number,
548 int f_v = (verbose_level >= 1);
552 long int *the_set_out;
555 cout <<
"spread_classify::plane_intersection_type_of_klein_image" << endl;
563 data, size, the_set_out, 0);
565 cout <<
"after Klein correspondence:" << endl;
577 cout <<
"spread_classify::plane_intersection_type_of_klein_image "
578 "after P3->klein_correspondence" << endl;
584 cout <<
"spread_classify::klein N = " << N << endl;
590 intersection_type, highest_intersection_number,
598 int f_v = (verbose_level >= 1);
599 int f_vv = (verbose_level >= 2);
603 int h, u, i, a = 0, b = 0, c = 0, d = 0;
1177 cout <<
"spread_classify::czerwinski_oakden" << endl;
1180 const char *label[] = {
1203 char fname[] =
"Czerwinski_Oakden.txt";
1208 for (h = 0; h < 21; h++) {
1209 for (u = 0; u < sz; u++) {
1210 for (i = 0; i < 8; i++) {
1220 a = spreads[h * 25 * 4 + (u - 1) * 4 + 0];
1221 b = spreads[h * 25 * 4 + (u - 1) * 4 + 1];
1222 c = spreads[h * 25 * 4 + (u - 1) * 4 + 2];
1223 d = spreads[h * 25 * 4 + (u - 1) * 4 + 3];
1229 for (i = 0; i < 8; i++) {
1233 cout <<
"spread " << h <<
", element " << u <<
":" << endl;
1235 cout <<
"a=" << a <<
" b=" << b
1236 <<
" c=" << c <<
" d=" << d << endl;
1244 cout <<
"spread " << h <<
":";
1249 for (i = 0; i < sz; i++) {
1250 fp << data[i] <<
" ";
1255 fname2.assign(
"Czerwinski_Oakden_");
1256 fname2.append(label[h]);
1257 fname2.append(
".txt");
1260 cout <<
"Written file " << fname2 <<
" of size "
1265 cout <<
"Written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
1270 int f_v = (verbose_level >= 1);
1276 cout <<
"spread_classify::write_spread_to_file" << endl;
1279 sprintf(str,
"spread_q%d_FTW.txt",
q);
1282 sprintf(str,
"spread_q%d_Kantor.txt",
q);
1285 sprintf(str,
"spread_q%d_Kantor2.txt",
q);
1288 sprintf(str,
"spread_q%d_Ganley.txt",
q);
1291 sprintf(str,
"spread_q%d_Law_Penttila.txt",
q);
1294 sprintf(str,
"spread_q%d_DicksonKantor.txt",
q);
1297 sprintf(str,
"spread_q%d_Hudson.txt",
q);
1315 cout <<
"Written file " << fname <<
" of size "
1321 int type_of_spread,
int verbose_level)
1323 int f_v = (verbose_level >= 1);
1324 int f_vv = (verbose_level >= 2);
1327 int h, i, h1, s, t, sq, tq, x, y, w, z, eta, exponent;
1332 cout <<
"spread_classify::make_spread q=" <<
q <<
" q1=" << q1 << endl;
1335 cout <<
"spread_classify::make_spread n != 4" << endl;
1339 cout <<
"spread_classify::make_spread need q odd" << endl;
1343 cout <<
"spread_classify::make_spread k != 2" << endl;
1346 for (eta = q1; eta <
q; eta++) {
1349 cout <<
"spread_classify::make_spread eta=" << eta << endl;
1354 exponent = (
Mtx->
GFq->
q + 2 * q1 - 1) >> 1;
1355 for (h = 0; h < sz; h++) {
1356 for (i = 0; i < 8; i++) {
1385 for (i = 0; i < 8; i++) {
1389 cout <<
"spread element " << h <<
":" << endl;
1396 cout <<
"spread_classify::make_spread The set is a spread" << endl;
1400 cout <<
"spread_classify::make_spread The set is NOT a spread" << endl;
1405 cout <<
"spread_classify::make_spread done" << endl;
1411 int type_of_spread,
int verbose_level)
1413 int f_v = (verbose_level >= 1);
1414 int f_vv = (verbose_level >= 2);
1417 int h, h1, i, s, t, t2, t3, t4, t5, t7, t9;
1418 int a_t = 0, b_t = 0, c_t = 0, x, y, w, z,
r;
1419 int three, five, nonsquare = 0, minus_nonsquare = 0, nonsquare_inv = 0;
1423 cout <<
"spread_classify::make_spread_from_q_clan" << endl;
1426 cout <<
"spread_classify::make_spread_from_q_clan n != 4" << endl;
1430 cout <<
"spread_classify::make_spread_from_q_clan k != 2" << endl;
1442 for (h = 0; h < sz; h++) {
1443 for (i = 0; i < 8; i++) {
1465 cout <<
"FTWKB needs q equiv 2 mod 3" << endl;
1474 cout <<
"KANTOR needs q to be odd" << endl;
1478 cout <<
"KANTOR needs q to be a prime power" << endl;
1487 cout <<
"KANTOR2 needs q to be odd" << endl;
1490 if ((
q % 5) != 2 && (
q % 5) != 3) {
1491 cout <<
"KANTOR needs q congruent 2 or 3 mod 5" << endl;
1503 cout <<
"GANLEY, q needs to be "
1504 "a power of three" << endl;
1519 cout <<
"LAW_PENTTILA, q needs to "
1520 "be a power of three" << endl;
1537 cout <<
"s=" << s << endl;
1538 cout <<
"t=" << t << endl;
1539 cout <<
"n=" << nonsquare << endl;
1540 cout <<
"t2=" << t2 << endl;
1541 cout <<
"t3=" << t3 << endl;
1542 cout <<
"t4=" << t4 << endl;
1543 cout <<
"t7=" << t7 << endl;
1544 cout <<
"t9=" << t9 << endl;
1545 cout <<
"a_t=" << a_t << endl;
1546 cout <<
"b_t=" << b_t << endl;
1547 cout <<
"c_t=" << c_t << endl;
1564 for (i = 0; i < 8; i++) {
1568 cout <<
"spread element " << h <<
":" << endl;
1574 cout <<
"The set is a spread" << endl;
1577 cout <<
"The set is NOT a spread" << endl;
1600 int alpha, beta, omega, x, y, tmp1, tmp2, f, z;
1605 cout <<
"spread_classify::print_spread order != q * q" << endl;
1626 for (i = 0; i <
q *
q; i++) {
1630 cout <<
"spread::HMO after embedding" << endl;
1631 cout <<
"Ge:" << endl;
1633 cout <<
"He:" << endl;
1638 omega = Sub->
Basis[1];
1639 cout <<
"omega=" << omega << endl;
1640 for (alpha = 0; alpha < q2; alpha++) {
1641 for (beta = 0; beta < q2; beta++) {
1644 cout <<
"alpha=" << alpha <<
" beta=" << beta
1645 <<
" x=" << x <<
" y=" << y << endl;
1646 tmp1 = Ge[x *
q + y];
1647 tmp2 = Fq2->
negate(Fq2->
mult(He[x *
q + y], omega));
1648 f = Fq2->
add(tmp1, tmp2);
1650 GG[alpha * q2 + beta] = f;
1651 HH[alpha * q2 + beta] = z;
1654 cout <<
"GG:" << endl;
1656 cout <<
"HH:" << endl;
1664 Gq2->
init(
n,
k, Fq2, verbose_level);
1669 for (h = 0; h < Sz; h++) {
1670 for (i = 0; i < 8; i++) {
1688 cout <<
"h=" << h <<
" x=" << x <<
" y=" << y << endl;
1691 M[1 * 4 + 2] = GG[x * q2 + y];
1692 M[1 * 4 + 3] = HH[x * q2 + y];
1694 cout <<
"element " << h <<
":" << endl;
1696 for (i = 0; i < 8; i++) {
1700 cout <<
"has rank " <<
Data2[h] << endl;
1705 fname2.assign(
"HMO_");
1706 fname2.append(fname);
1724 long int *data,
int verbose_level)
1726 int f_v = (verbose_level >= 1);
1727 int h, i, x, y, f, g;
1732 cout <<
"spread_classify::get_spread_matrices" << endl;
1734 for (i = 0; i <
order; i++) {
1738 for (h = 0; h < sz; h++) {
1740 for (i = 0; i < 8; i++) {
1745 if (M[0 * 4 + 0] == 0 &&
1746 M[0 * 4 + 1] == 0 &&
1747 M[1 * 4 + 0] == 0 &&
1748 M[1 * 4 + 1] == 0) {
1751 if (M[0 * 4 + 0] != 1) {
1752 cout <<
"generator matrix is not in standard form" << endl;
1755 if (M[1 * 4 + 1] != 1) {
1756 cout <<
"generator matrix is not in standard form" << endl;
1759 if (M[0 * 4 + 1] != 0) {
1760 cout <<
"generator matrix is not in standard form" << endl;
1763 if (M[1 * 4 + 0] != 0) {
1764 cout <<
"generator matrix is not in standard form" << endl;
1775 cout <<
"spread::get_FG_matrices" << endl;
1776 cout <<
"G:" << endl;
1778 cout <<
"H:" << endl;
1788 for (h = 0; h < sz; h++) {
1790 ost <<
"Spread element " << h <<
":" << endl;
1797 int f_v = (verbose_level >= 1);
1801 cout <<
"spread_classify::report2" << endl;
1803 sprintf(fname,
"report_Spreads_q%d_k%d.tex",
q,
k);
1810 const char *author =
"Orbiter";
1812 int f_landscape =
FALSE;
1814 int f_enlarged_page =
TRUE;
1815 int f_pagenumbers =
TRUE;
1818 sprintf(title,
"$%d$-Spreads of PG($%d,%d$)",
k - 1, 2 *
k - 1,
q);
1819 cout <<
"Writing file " << fname <<
" with "
1820 << Iso.
Reps->
count <<
" spreads:" << endl;
1821 L.
head(f, f_book, f_title,
1823 f_toc, f_landscape, f_12pt, f_enlarged_page, f_pagenumbers,
1826 report3(Iso, f, verbose_level);
1833 cout <<
"Written file " << fname <<
" of size "
1840 int f_v = (verbose_level >= 1);
1843 cout <<
"spread_classify::report3" << endl;
1846 int target_size =
order + 1;
1849 ost <<
"\\chapter{Summary}" << endl << endl;
1850 ost <<
"There are " << Iso.
Reps->
count <<
" spreads." << endl << endl;
1856 int u, v, h, rep, tt;
1858 long int data[1000];
1882 Ago_int[h] = Ago[h].
as_int();
1886 cout <<
"spread::print_isomorphism_types computing "
1887 "induced action on the set (in data)" << endl;
1899 cout <<
"Classification by ago:" << endl;
1904 ost <<
"\\chapter{Invariants}" << endl << endl;
1906 ost <<
"Classification by automorphism group order: $";
1909 ost <<
"\\\\" << endl;
1911 ost <<
"\\begin{center}" << endl;
1912 ost <<
"\\begin{tabular}{|c|l|}" << endl;
1913 ost <<
"\\hline" << endl;
1914 ost <<
"Ago & Isom. Types \\\\" << endl;
1915 ost <<
"\\hline" << endl;
1916 ost <<
"\\hline" << endl;
1918 int cnt, length, t, vv, *set;
1921 for (u = C_ago.
nb_types - 1; u >= 0; u--) {
1929 for (v = 0; v < length; v++, cnt++) {
1937 for (v = 0; v < length; v++, cnt++) {
1941 if (v < length - 1) {
1943 if ((v + 1) % 10 == 0) {
1944 ost <<
"\\\\" << endl;
1945 ost <<
" & " << endl;
1949 ost <<
"\\\\" << endl;
1951 ost <<
"\\hline" << endl;
1955 ost <<
"\\hline" << endl;
1956 ost <<
"\\end{tabular}" << endl;
1957 ost <<
"\\end{center}" << endl << endl;
1960 ost <<
"\\clearpage" << endl << endl;
1962 ost <<
"\\begin{center}" << endl;
1963 ost <<
"\\begin{tabular}{|r|r|r|r|r|r|}" << endl;
1964 ost <<
"\\hline" << endl;
1965 ost <<
"ID & Isom. Type & $|\\mbox{Aut}|$ & $|\\mbox{Aut}|$ "
1966 "(induced) & \\# Orbits & Orbit Type\\\\" << endl;
1967 ost <<
"\\hline" << endl;
1968 ost <<
"\\hline" << endl;
1971 for (u = 0; u < C_ago.
nb_types; u ++) {
1977 for (v = 0; v < length; v++) {
1986 for (v = 0; v < length; v++) {
1990 ost << setw(3) << first + v + 1 <<
" & ";
1991 ost << setw(3) << h <<
" & ";
1999 ost <<
"\\\\" << endl;
2001 if ((cnt % 30) == 0) {
2002 ost <<
"\\hline" << endl;
2003 ost <<
"\\end{tabular}" << endl;
2004 ost <<
"\\end{center}" << endl << endl;
2005 ost <<
"\\begin{center}" << endl;
2006 ost <<
"\\begin{tabular}{|r|r|r|r|r|r|}" << endl;
2007 ost <<
"\\hline" << endl;
2008 ost <<
"ID & Isom. Type & $|\\mbox{Aut}|$ & $|\\mbox{Aut}|$ "
2009 "(induced) & \\# Orbits & Orbit Type\\\\" << endl;
2010 ost <<
"\\hline" << endl;
2011 ost <<
"\\hline" << endl;
2017 ost <<
"\\hline" << endl;
2018 ost <<
"\\end{tabular}" << endl;
2019 ost <<
"\\end{center}" << endl << endl;
2022 ost <<
"\\chapter{The Spreads}" << endl << endl;
2024 ost <<
"\\clearpage" << endl << endl;
2035 ost <<
"\\section{Isomorphism type " << h <<
"}" << endl;
2036 ost <<
"\\bigskip" << endl;
2043 ost <<
"Stabilizer has order $";
2045 ost <<
"$\\\\" << endl;
2053 cout <<
"Isomorphism type 35:" << endl;
2054 cout <<
"rep=" << rep << endl;
2055 cout <<
"first=" << first << endl;
2056 cout <<
"id=" <<
id << endl;
2057 cout <<
"starter_number=" << c << endl;
2058 cout <<
"solution:" << endl;
2059 int_vec_print(cout, data, target_size);
2069 cout <<
"spread::print_isomorphism_types computing "
2070 "induced action on the set (in data)" << endl;
2077 cout <<
"action " << Iso.
AA->
label <<
" computed, "
2078 "group order is " << go1 << endl;
2080 ost <<
"Order of the group that is induced on the "
2081 "collection of subspaces is ";
2084 ost <<
"$\\\\" << endl;
2091 Stab->
gens, verbose_level - 2);
2093 <<
" orbits on the subspaces\\\\" << endl;
2099 ost <<
"Orbit lengths: $";
2102 ost <<
"$ \\\\" << endl;
2106 ost <<
"$ \\\\" << endl;
2109 tt = (target_size + 3) / 4;
2111 ost <<
"The subspaces by ranks:\\\\" << endl;
2112 ost <<
"\\begin{center}" << endl;
2114 for (u = 0; u < 4; u++) {
2115 ost <<
"\\begin{tabular}[t]{|c|c|}" << endl;
2116 ost <<
"\\hline" << endl;
2117 ost <<
"$i$ & Rank \\\\" << endl;
2118 ost <<
"\\hline" << endl;
2119 for (i = 0; i < tt; i++) {
2121 if (v < target_size) {
2122 ost <<
"$" << v <<
"$ & $" << data[v] <<
"$ \\\\" << endl;
2125 ost <<
"\\hline" << endl;
2126 ost <<
"\\end{tabular}" << endl;
2128 ost <<
"\\end{center}" << endl;
2130 ost <<
"The subspaces:\\\\" << endl;
2131 for (i = 0; i < target_size; i++) {
2135 ost <<
"$$" << endl;
2137 ost <<
"$$" << endl;
2139 ost <<
"\\left[" << endl;
2140 ost <<
"\\begin{array}{c}" << endl;
2141 for (u = 0; u <
k; u++) {
2142 for (v = 0; v <
n; v++) {
2145 ost <<
"\\\\" << endl;
2147 ost <<
"\\end{array}" << endl;
2148 ost <<
"\\right]" << endl;
2150 ost <<
"$$" << endl;
2156 klein(ost, &Iso, h, Stab, Orb, data, Iso.
size, verbose_level);
2160 ost <<
"\\bigskip" << endl;
2162 ost <<
"Induced action on the orbits:\\\\" << endl;
2163 ost <<
"$$" << endl;
2164 ost <<
"\\begin{array}{|c|c|c|c|}" << endl;
2165 ost <<
"\\hline" << endl;
2166 ost <<
"\\mbox{Orbit} & \\mbox{Length} & \\mbox{Induced} "
2167 "& \\mbox{Kernel} \\\\" << endl;
2168 ost <<
"\\hline" << endl;
2174 cout <<
"inducing action on orbit " << i
2175 <<
" of length " << len << endl;
2176 ost << i <<
" & " << len <<
" & ";
2183 for (j = 0; j < len; j++) {
2184 set[j] = data[Orb.
orbit[fst + j]];
2192 cout <<
"after induced_action_by_restriction" << endl;
2196 cout <<
"induced group order " << go1
2197 <<
" kernel order " << gok << endl;
2199 ost << go1 <<
" & " << gok <<
"\\\\" << endl;
2204 ost <<
"\\hline" << endl;
2205 ost <<
"\\end{array}" << endl;
2206 ost <<
"$$" << endl;
2215 cout <<
"inducing action on orbit " << i
2216 <<
" of length " << len << endl;
2217 ost <<
"Generators for the kernel in the action "
2218 "on orbit " << i <<
" are:";
2229 for (j = 0; j < len; j++) {
2230 set[j] = data[Orb.
orbit[fst + j]];
2238 cout <<
"after induced_action_by_restriction" << endl;
2242 cout <<
"induced group order " << go1
2243 <<
" kernel order " << gok << endl;
2246 if (gens->
len == 0) {
2247 ost <<
" No generators\\\\" << endl;
2249 for (j = 0; j < gens->
len; j++) {
2252 ost <<
"$$ g_{" << j + 1 <<
"}=" << endl;
2254 ost <<
"$$" << endl;
2269 char label_of_structure_plural[1000];
2271 sprintf(prefix,
"Spreads_%d_%d",
q,
k);
2272 sprintf(label_of_structure_plural,
"Spreads");
2280 prefix, label_of_structure_plural, ost, verbose_level);
2289 cout <<
"spread_classify::report3 done" << endl;
2297 int f_v = (verbose_level >= 1);
2303 cout <<
"spread_classify::all_cooperstein_thas_quotients" << endl;
2310 sprintf(fname,
"quotients_q%d.txt",
order);
2326 cout <<
"Written file " << fname <<
" of size "
2333 cout <<
"spread::all_cooperstein_thas_quotients done" << endl;
2340 ofstream &f,
int h,
int &cnt,
int verbose_level)
2342 int f_v = (verbose_level >= 1);
2343 int f_vv = (verbose_level >= 2);
2346 long int data[1000];
2347 long int data2[1000];
2348 int u, fst, orbit_length, i, idx, i0, j, the_point, pivot, rem;
2365 cout <<
"spread_classify::cooperstein_thas_quotients" << endl;
2366 cout <<
"spread_classify::cooperstein_thas_quotients h=" << h << endl;
2385 cout <<
"spread_classify::cooperstein_thas_quotients "
2386 "Isomorphism type " << h <<
" with automorphism group "
2387 "of order " << go <<
":" << endl;
2391 cout <<
"spread_classify::cooperstein_thas_quotients "
2392 "before compute_all_point_orbits" << endl;
2399 cout <<
"spread_classify::cooperstein_thas_quotients There are "
2400 << Orb.
nb_orbits <<
" orbits on points" << endl;
2413 for (i = 0; i <
order + 1; i++) {
2416 Pts[i], nb_points, 0 );
2424 the_point = Orb.
orbit[fst];
2428 cout <<
"spread_classify::cooperstein_thas_quotients Orbit " << u
2429 <<
" is represented by point " << the_point
2430 <<
" orbit length = " << orbit_length
2431 <<
" stabilizer order before " << go
2432 <<
" after " << stab_order << endl;
2440 for (i = 0; i <
order + 1; i++) {
2445 if (i ==
order + 1) {
2446 cout <<
"spread_classify::cooperstein_thas_quotients "
2447 "Did not find the point" << endl;
2452 for (i = 0; i <
order + 1; i++) {
2458 cout <<
"spread_classify::cooperstein_thas_quotients j != order" << endl;
2461 for (i = 0; i <
order; i++) {
2465 for (j = 0; j <
k; j++) {
2481 cout <<
"spread_classify::cooperstein_thas_quotients the reduction "
2482 "of the " << i <<
"-th matrix is:" << endl;
2491 cout <<
"spread_classify::cooperstein_thas_quotients The quotient "
2492 "system with respect to orbit " << u <<
" / "
2499 f << h <<
" " << u <<
" " << the_point <<
" " << orbit_length <<
" ";
2504 for (i = 0; i <
order; i++) {
2505 f <<
" " << data2[i];
2512 sprintf(str,
"quotient_q%d_iso%d_nb%d_orbit_length%d.txt",
2527 for (i = 0; i <
order + 1; i++) {
2534 cout <<
"spread_classify::cooperstein_thas_quotients done" << endl;
2544 long int data[1000];
2560 cout <<
"action " << Iso.
AA->
label <<
" computed, "
2561 "group order is " << go1 << endl;
2565 f <<
"Order of the group that is induced on the "
2566 "collection of subspaces is ";
2569 f <<
"$\\\\" << endl;
2596 ostream &ost,
int orbit,
int verbose_level)
2605 ost <<
"The stabilizer of order $" << go <<
"$ is generated by:\\\\" << endl;
2606 for (i = 0; i < Stab->
gens.
len; i++) {
2617 ost <<
"$$ g_{" << i + 1 <<
"}=" << endl;
2619 ost <<
"$$" << endl <<
"of order $" << ord <<
"$ and with "
2620 <<
n <<
" fixed points" << endl;
2634static int spread_check_function_callback(
int len,
2635 long int *S,
void *data,
int verbose_level)
2644static void spread_callback_report(
isomorph *Iso,
void *data,
int verbose_level)
2646 spread_classify *Spread = (spread_classify *) data;
2648 Spread->
report2(*Iso, verbose_level);
2651static void spread_callback_make_quotients(
isomorph *Iso,
2652 void *data,
int verbose_level)
2654 spread_classify *Spread = (spread_classify *) data;
2656 Spread->all_cooperstein_thas_quotients(*Iso, verbose_level);
2659static void callback_spread_print(ostream &ost,
int len,
long int *S,
void *data)
2661 spread_classify *Spread = (spread_classify *) data;
2663 Spread->print_spread(ost, S, len);
int find_first_nonzero_entry(int *v, int len)
void matrix_print_ost(std::ostream &ost, int *p, int m, int n)
void matrix_delete_column_in_place(int *Mtx, int k, int n, int pivot)
data structure for set partitions following Jeffrey Leon
void subset_continguous(int from, int len)
void split_cell(int verbose_level)
void allocate(int n, int verbose_level)
a collection of functions related to sorted vectors
void int_vec_heapsort(int *v, int len)
int lint_vec_search(long int *v, int len, long int a, int &idx, int verbose_level)
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 print_naked_tex(std::ostream &ost, int f_backwards)
void PG_element_normalize_from_front(int *v, int stride, int len)
void all_PG_elements_in_subspace(int *genma, int k, int n, long int *&point_list, int &nb_points, int verbose_level)
void PG_element_unrank_modified(int *v, int stride, int len, int a)
int product3(int a1, int a2, int a3)
int frobenius_power(int a, int frob_power)
int add3(int i1, int i2, int i3)
void finite_field_init(int q, int f_without_tables, 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
a finite field as a vector space over a subfield
void init(finite_field *FQ, finite_field *Fq, int verbose_level)
to rank and unrank subspaces of a fixed dimension in F_q^n
void unrank_lint(long int rk, int verbose_level)
long int rank_lint_here(int *Mtx, int verbose_level)
long int rank_lint(int verbose_level)
void unrank_lint_here(int *Mtx, long int rk, int verbose_level)
void init(int n, int k, field_theory::finite_field *F, int verbose_level)
interface for various incidence geometries
void get_and_print_row_tactical_decomposition_scheme_tex(std::ostream &ost, int f_enter_math, int f_print_subscripts, data_structures::partitionstack &PStack)
void get_and_print_column_tactical_decomposition_scheme_tex(std::ostream &ost, int f_enter_math, int f_print_subscripts, data_structures::partitionstack &PStack)
void init_by_matrix(int m, int n, int *M, int verbose_level)
void compute_TDO_safe(data_structures::partitionstack &PStack, int depth, int verbose_level)
void latex_it(std::ostream &ost, data_structures::partitionstack &P)
void plane_intersections(long int *lines_in_PG3, int nb_lines, ring_theory::longinteger_object *&R, long int **&Pts_on_plane, int *&nb_pts_on_plane, int &nb_planes, int verbose_level)
projective space PG(n,q) of dimension n over Fq
void print_set_numerical(std::ostream &ost, long int *set, int set_size)
void klein_correspondence(projective_space *P5, long int *set_in, int set_size, long int *set_out, int verbose_level)
void print_line_set_numerical(long int *set, int set_size)
long int nb_rk_k_subspaces_as_lint(int k)
void plane_intersection_type(grassmann *G, long int *set, int set_size, int *&intersection_type, int &highest_intersection_number, int verbose_level)
void Gauss_step(int *v1, int *v2, int len, int idx, int verbose_level)
basic number theoretic functions
int i_power_j(int i, int j)
void factor_prime_power(int q, int &p, int &e)
a collection of functions related to file io
long int file_size(std::string &fname)
void read_set_from_file(std::string &fname, long int *&the_set, int &set_size, int verbose_level)
void write_set_to_file(std::string &fname, long int *the_set, int set_size, int verbose_level)
interface to create latex output files
void head(std::ostream &ost, int f_book, int f_title, const char *title, const char *author, int f_toc, int f_landscape, int f_12pt, int f_enlarged_page, int f_pagenumbers, const char *extras_for_preamble)
void foot(std::ostream &ost)
int longinteger_f_print_scientific
data_structures::int_vec * Int_vec
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
std::ostream & print_not_scientific(std::ostream &ost)
DISCRETA vector class for vectors of DISCRETA objects.
discreta_base & s_i(int i)
void save_file(const char *fname)
Vector & change_to_vector()
a permutation group in a fixed action.
void element_print_latex(void *elt, std::ostream &ost)
void compute_all_point_orbits(groups::schreier &S, data_structures_groups::vector_ge &gens, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
action * create_induced_action_by_restriction(groups::sims *S, int size, long int *set, int f_induce, int verbose_level)
int find_fixed_points(void *elt, int *fixed_points, int verbose_level)
int element_order(void *elt)
to hold a vector of group elements
field_theory::finite_field * GFq
Schreier trees for orbits of groups on points.
void list_all_orbits_tex(std::ostream &ost)
a permutation group represented via a stabilizer chain
void extract_strong_generators_in_order(data_structures_groups::vector_ge &SG, int *tl, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
data_structures_groups::vector_ge gens
auxiliary class for class isomorph
void report_data_in_source_code_inside_tex(isomorph &Iso, const char *prefix, char *label_of_structure_plural, std::ostream &f, int verbose_level)
void init(actions::action *A_base, actions::action *A, poset_classification::poset_classification *gen, int verbose_level)
classification of combinatorial objects using subobjects
void induced_action_on_set_and_kernel(std::ostream &file, actions::action *A, groups::sims *Stab, int size, long int *set, int verbose_level)
void load_solution(int id, long int *data)
void induced_action_on_set(groups::sims *S, long int *set, int verbose_level)
poset_classification::poset_classification * gen
to classify spreads of PG(k-1,q) in PG(n-1,q) where k divides n
groups::matrix_group * Mtx
void save_klein_invariants(char *prefix, int iso_cnt, long int *data, int data_size, int verbose_level)
void read_and_print_spread(std::string &fname, int verbose_level)
void print_isomorphism_type(isomorph *Iso, int iso_cnt, groups::sims *Stab, groups::schreier &Orb, long int *data, int verbose_level)
void report3(isomorph &Iso, std::ostream &ost, int verbose_level)
void report_stabilizer(isomorph &Iso, std::ostream &ost, int orbit, int verbose_level)
void get_spread_matrices(int *F, int *G, long int *data, int verbose_level)
void make_spread_from_q_clan(long int *data, int type_of_spread, int verbose_level)
geometry::grassmann * Grass
void write_spread_to_file(int type_of_spread, int verbose_level)
void print_spread(std::ostream &ost, long int *data, int sz)
void report2(isomorph &Iso, int verbose_level)
void cooperstein_thas_quotients(isomorph &Iso, std::ofstream &f, int h, int &cnt, int verbose_level)
void klein(std::ostream &ost, isomorph *Iso, int iso_cnt, groups::sims *Stab, groups::schreier &Orb, long int *data, int data_size, int verbose_level)
void orbit_info_short(std::ostream &ost, isomorph &Iso, int h)
void plane_intersection_type_of_klein_image(geometry::projective_space *P3, geometry::projective_space *P5, geometry::grassmann *Gr, long int *data, int size, int *&intersection_type, int &highest_intersection_number, int verbose_level)
void czerwinski_oakden(int level, int verbose_level)
int check_function(int len, long int *S, int verbose_level)
void all_cooperstein_thas_quotients(isomorph &Iso, int verbose_level)
void HMO(std::string &fname, int verbose_level)
void make_spread(long int *data, int type_of_spread, int verbose_level)
void print_isomorphism_type2(isomorph *Iso, std::ostream &ost, int iso_cnt, groups::sims *Stab, groups::schreier &Orb, long int *data, int verbose_level)
geometry::klein_correspondence * Klein
#define Lint_vec_print(A, B, C)
#define Int_matrix_print(A, B, C)
#define NEW_OBJECTS(type, n)
#define Int_vec_copy(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects
#define SPREAD_OF_TYPE_LAW_PENTTILA
#define SPREAD_OF_TYPE_KANTOR
#define SPREAD_OF_TYPE_HUDSON
#define SPREAD_OF_TYPE_GANLEY
#define SPREAD_OF_TYPE_KANTOR2
#define SPREAD_OF_TYPE_DICKSON_KANTOR
#define SPREAD_OF_TYPE_FTWKB