Orbiter 2022
Combinatorial Objects
poset_classification_combinatorics.cpp
Go to the documentation of this file.
1// poset_classification_combinatorics.cpp
2//
3// Anton Betten
4//
5// moved here from poset_classification.cpp
6// July 18, 2014
7
8
10#include "discreta/discreta.h"
13
14using namespace std;
15
16namespace orbiter {
17namespace layer4_classification {
18namespace poset_classification {
19
20
21void poset_classification::Plesken_matrix_up(int depth,
22 int *&P, int &N, int verbose_level)
23{
24 int f_v = (verbose_level >= 1);
25 int *Nb;
26 int *Fst;
27 int *Pij;
28 int i, j;
29 int N1, N2;
30 int a, b, cnt;
31
32 if (f_v) {
33 cout << "poset_classification::Plesken_matrix_up" << endl;
34 }
35 N = 0;
36 Nb = NEW_int(depth + 1);
37 Fst = NEW_int(depth + 2);
38 Fst[0] = 0;
39 for (i = 0; i <= depth; i++) {
40 Nb[i] = nb_orbits_at_level(i);
41 Fst[i + 1] = Fst[i] + Nb[i];
42 N += Nb[i];
43 }
44 P = NEW_int(N * N);
45 for (i = 0; i <= depth; i++) {
46 for (j = 0; j <= depth; j++) {
47 Plesken_submatrix_up(i, j, Pij, N1, N2, verbose_level - 1);
48 for (a = 0; a < N1; a++) {
49 for (b = 0; b < N2; b++) {
50 cnt = Pij[a * N2 + b];
51 P[(Fst[i] + a) * N + Fst[j] + b] = cnt;
52 }
53 }
54 FREE_int(Pij);
55 }
56 }
57 if (f_v) {
58 cout << "poset_classification::Plesken_matrix_up done" << endl;
59 }
60}
61
62void poset_classification::Plesken_matrix_down(int depth,
63 int *&P, int &N, int verbose_level)
64{
65 int f_v = (verbose_level >= 1);
66 int *Nb;
67 int *Fst;
68 int *Pij;
69 int i, j;
70 int N1, N2;
71 int a, b, cnt;
72
73 if (f_v) {
74 cout << "poset_classification::Plesken_matrix_down" << endl;
75 }
76 N = 0;
77 Nb = NEW_int(depth + 1);
78 Fst = NEW_int(depth + 2);
79 Fst[0] = 0;
80 for (i = 0; i <= depth; i++) {
81 Nb[i] = nb_orbits_at_level(i);
82 Fst[i + 1] = Fst[i] + Nb[i];
83 N += Nb[i];
84 }
85 P = NEW_int(N * N);
86 for (i = 0; i <= depth; i++) {
87 for (j = 0; j <= depth; j++) {
89 Pij, N1, N2, verbose_level - 1);
90 for (a = 0; a < N1; a++) {
91 for (b = 0; b < N2; b++) {
92 cnt = Pij[a * N2 + b];
93 P[(Fst[i] + a) * N + Fst[j] + b] = cnt;
94 }
95 }
96 FREE_int(Pij);
97 }
98 }
99 if (f_v) {
100 cout << "poset_classification::Plesken_matrix_down done" << endl;
101 }
102}
103
104void poset_classification::Plesken_submatrix_up(int i, int j,
105 int *&Pij, int &N1, int &N2, int verbose_level)
106{
107 int f_v = (verbose_level >= 1);
108 int a, b;
109
110 if (f_v) {
111 cout << "poset_classification::Plesken_submatrix_up "
112 "i=" << i << " j=" << j << endl;
113 }
114 N1 = nb_orbits_at_level(i);
115 N2 = nb_orbits_at_level(j);
116 Pij = NEW_int(N1 * N2);
117 for (a = 0; a < N1; a++) {
118 for (b = 0; b < N2; b++) {
119 Pij[a * N2 + b] = count_incidences_up(
120 i, a, j, b, verbose_level - 1);
121 }
122 }
123 if (f_v) {
124 cout << "poset_classification::Plesken_submatrix_up done" << endl;
125 }
126}
127
128void poset_classification::Plesken_submatrix_down(int i, int j,
129 int *&Pij, int &N1, int &N2, int verbose_level)
130{
131 int f_v = (verbose_level >= 1);
132 int a, b;
133
134 if (f_v) {
135 cout << "poset_classification::Plesken_submatrix_down "
136 "i=" << i << " j=" << j << endl;
137 }
138 N1 = nb_orbits_at_level(i);
139 N2 = nb_orbits_at_level(j);
140 Pij = NEW_int(N1 * N2);
141 for (a = 0; a < N1; a++) {
142 for (b = 0; b < N2; b++) {
143 Pij[a * N2 + b] = count_incidences_down(
144 i, a, j, b, verbose_level - 1);
145 }
146 }
147 if (f_v) {
148 cout << "poset_classification::Plesken_submatrix_down done" << endl;
149 }
150}
151
152int poset_classification::count_incidences_up(int lvl1, int po1,
153 int lvl2, int po2, int verbose_level)
154{
155 int f_v = (verbose_level >= 1);
156 int f_vv = (verbose_level >= 2);
157 long int *set;
158 long int *set1;
159 long int *set2;
160 int ol, i, cnt = 0;
161 int f_contained;
162
163 if (f_v) {
164 cout << "poset_classification::count_incidences_up "
165 "lvl1=" << lvl1 << " po1=" << po1
166 << " lvl2=" << lvl2 << " po2=" << po2 << endl;
167 }
168 if (lvl1 > lvl2) {
169 return 0;
170 }
171 set = NEW_lint(lvl2 + 1);
172 set1 = NEW_lint(lvl2 + 1);
173 set2 = NEW_lint(lvl2 + 1);
174
175 orbit_element_unrank(lvl1, po1, 0 /*el1 */,
176 set1, 0 /* verbose_level */);
177
178 ol = orbit_length_as_int(po2, lvl2);
179
180 if (f_vv) {
181 cout << "set1=";
182 Lint_vec_print(cout, set1, lvl1);
183 cout << endl;
184 }
185
186 for (i = 0; i < ol; i++) {
187
188 Lint_vec_copy(set1, set, lvl1);
189
190
191 orbit_element_unrank(lvl2, po2, i, set2, 0 /* verbose_level */);
192
193 if (f_vv) {
194 cout << "set2 " << i << " / " << ol << "=";
195 Lint_vec_print(cout, set2, lvl2);
196 cout << endl;
197 }
198
199 f_contained = poset_structure_is_contained(
200 set, lvl1, set2, lvl2, verbose_level - 2);
201 //f_contained = int_vec_sort_and_test_if_contained(
202 // set, lvl1, set2, lvl2);
203
204 if (f_vv) {
205 cout << "f_contained=" << f_contained << endl;
206 }
207
208
209 if (f_contained) {
210 cnt++;
211 }
212 }
213
214
215 FREE_lint(set);
216 FREE_lint(set1);
217 FREE_lint(set2);
218 if (f_v) {
219 cout << "poset_classification::count_incidences_up "
220 "lvl1=" << lvl1 << " po1=" << po1
221 << " lvl2=" << lvl2 << " po2=" << po2
222 << " cnt=" << cnt << endl;
223 }
224 return cnt;
225}
226
227int poset_classification::count_incidences_down(
228 int lvl1, int po1, int lvl2, int po2, int verbose_level)
229{
230 int f_v = (verbose_level >= 1);
231 int f_vv = (verbose_level >= 2);
232 long int *set;
233 long int *set1;
234 long int *set2;
235 int ol, i, cnt = 0;
236 int f_contained;
237
238 if (f_v) {
239 cout << "poset_classification::count_incidences_down "
240 "lvl1=" << lvl1 << " po1=" << po1
241 << " lvl2=" << lvl2 << " po2=" << po2 << endl;
242 }
243 if (lvl1 > lvl2) {
244 return 0;
245 }
246 set = NEW_lint(lvl2 + 1);
247 set1 = NEW_lint(lvl2 + 1);
248 set2 = NEW_lint(lvl2 + 1);
249
250 orbit_element_unrank(lvl2, po2, 0 /*el1 */, set2, 0 /* verbose_level */);
251
252 ol = orbit_length_as_int(po1, lvl1);
253
254 if (f_vv) {
255 cout << "set2=";
256 Lint_vec_print(cout, set2, lvl2);
257 cout << endl;
258 }
259
260 for (i = 0; i < ol; i++) {
261
262 Lint_vec_copy(set2, set, lvl2);
263
264
265 orbit_element_unrank(lvl1, po1, i, set1, 0 /* verbose_level */);
266
267 if (f_vv) {
268 cout << "set1 " << i << " / " << ol << "=";
269 Lint_vec_print(cout, set1, lvl1);
270 cout << endl;
271 }
272
273
274 f_contained = poset_structure_is_contained(
275 set1, lvl1, set, lvl2, verbose_level - 2);
276 //f_contained = int_vec_sort_and_test_if_contained(
277 // set1, lvl1, set, lvl2);
278
279 if (f_vv) {
280 cout << "f_contained=" << f_contained << endl;
281 }
282
283 if (f_contained) {
284 cnt++;
285 }
286 }
287
288
289 FREE_lint(set);
290 FREE_lint(set1);
291 FREE_lint(set2);
292 if (f_v) {
293 cout << "poset_classification::count_incidences_down "
294 "lvl1=" << lvl1 << " po1=" << po1
295 << " lvl2=" << lvl2 << " po2=" << po2
296 << " cnt=" << cnt << endl;
297 }
298 return cnt;
299}
300
301void poset_classification::Asup_to_Ainf(int t, int k,
302 int *M_sup, int *M_inf, int verbose_level)
303{
304 int f_v = (verbose_level >= 1);
306 ring_theory::longinteger_object quo, rem, aa, bb, cc;
312 int Nt, Nk;
313 int i, j, a, c;
314
315 if (f_v) {
316 cout << "poset_classification::Asup_to_Ainf" << endl;
317 }
318 Nt = nb_orbits_at_level(t);
319 Nk = nb_orbits_at_level(k);
320 get_stabilizer_order(0, 0, go);
321 if (f_v) {
322 cout << "poset_classification::Asup_to_Ainf go=" << go << endl;
323 }
328 if (f_v) {
329 cout << "poset_classification::Asup_to_Ainf "
330 "computing orbit lengths t-orbits" << endl;
331 }
332 for (i = 0; i < Nt; i++) {
333 get_stabilizer_order(t, i, go_t[i]);
334 D.integral_division_exact(go, go_t[i], ol_t[i]);
335 }
336 if (f_v) {
337 cout << "i : go_t[i] : ol_t[i]" << endl;
338 for (i = 0; i < Nt; i++) {
339 cout << i << " : " << go_t[i] << " : " << ol_t[i] << endl;
340 }
341 }
342 if (f_v) {
343 cout << "poset_classification::Asup_to_Ainf "
344 "computing orbit lengths k-orbits" << endl;
345 }
346 for (i = 0; i < Nk; i++) {
347 get_stabilizer_order(k, i, go_k[i]);
348 D.integral_division_exact(go, go_k[i], ol_k[i]);
349 }
350 if (f_v) {
351 cout << "i : go_k[i] : ol_k[i]" << endl;
352 for (i = 0; i < Nk; i++) {
353 cout << i << " : " << go_k[i] << " : " << ol_k[i] << endl;
354 }
355 }
356 if (f_v) {
357 cout << "poset_classification::Asup_to_Ainf computing Ainf" << endl;
358 }
359 for (i = 0; i < Nt; i++) {
360 for (j = 0; j < Nk; j++) {
361 a = M_sup[i * Nk + j];
362 aa.create(a, __FILE__, __LINE__);
363 D.mult(ol_t[i], aa, bb);
364 D.integral_division(bb, ol_k[j], cc, rem, 0);
365 if (!rem.is_zero()) {
366 cout << "poset_classification::Asup_to_Ainf "
367 "stabilizer order does not "
368 "divide group order" << endl;
369 cout << "i=" << i << " j=" << j
370 << " M_sup[i,j] = " << a
371 << " ol_t[i]=" << ol_t[i]
372 << " ol_k[j]=" << ol_k[j] << endl;
373 exit(1);
374 }
375 c = cc.as_int();
376 M_inf[i * Nk + j] = c;
377 }
378 }
379 if (f_v) {
380 cout << "poset_classification::Asup_to_Ainf computing Ainf done" << endl;
381 }
382 FREE_OBJECTS(go_t);
383 FREE_OBJECTS(go_k);
384 FREE_OBJECTS(ol_t);
385 FREE_OBJECTS(ol_k);
386 if (f_v) {
387 cout << "poset_classification::Asup_to_Ainf done" << endl;
388 }
389}
390
391void poset_classification::test_for_multi_edge_in_classification_graph(
392 int depth, int verbose_level)
393{
394 int f_v = (verbose_level >= 1);
395 int i, f, l, j, h1;
396
397 if (f_v) {
398 cout << "poset_classification::test_for_multi_edge_in_classification_graph "
399 "depth=" << depth << endl;
400 }
401 for (i = 0; i <= depth; i++) {
402 f = Poo->first_node_at_level(i);
403 l = nb_orbits_at_level(i);
404 if (f_v) {
405 cout << "poset_classification::test_for_multi_edge_in_classification_graph "
406 "level=" << i << " with " << l << " nodes" << endl;
407 }
408 for (j = 0; j < l; j++) {
410
411 //O = &root[f + j];
412 O = get_node_ij(i, j);
413 for (h1 = 0; h1 < O->get_nb_of_extensions(); h1++) {
414 extension *E1 = O->get_E(h1); // O->E + h1;
415
416 if (E1->get_type() != EXTENSION_TYPE_FUSION) {
417 continue;
418 }
419
420 //cout << "fusion (" << f + j << "/" << h1 << ") ->
421 // (" << E1->data1 << "/" << E1->data2 << ")" << endl;
422 if (E1->get_data1() == f + j) {
423 cout << "multiedge detected ! level "
424 << i << " with " << l << " nodes, fusion ("
425 << j << "/" << h1 << ") -> ("
426 << E1->get_data1() - f << "/"
427 << E1->get_data2() << ")" << endl;
428 }
429
430#if 0
431 for (h2 = 0; h2 < O->get_nb_of_extensions(); h2++) {
432 extension *E2 = O->E + h2;
433
434 if (E2->get_type() != EXTENSION_TYPE_FUSION) {
435 continue;
436
437 if (E2->data1 == E1->data1 && E2->data2 == E1->data2) {
438 cout << "multiedge detected!" << endl;
439 cout << "fusion (" << f + j << "/" << h1
440 << ") -> (" << E1->get_data1() << "/"
441 << E1->get_data2() << ")" << endl;
442 cout << "fusion (" << f + j << "/" << h2
443 << ") -> (" << E2->get_data1() << "/"
444 << E2->get_data2() << ")" << endl;
445 }
446 }
447#endif
448
449 }
450 }
451 if (f_v) {
452 cout << "poset_classification::test_for_multi_edge_in_classification_graph "
453 "level=" << i << " with " << l << " nodes done" << endl;
454 }
455 }
456 if (f_v) {
457 cout << "poset_classification::test_for_multi_edge_in_classification_graph "
458 "done" << endl;
459 }
460}
461
463 int level, long int *&M, int &nb_rows, int &nb_cols, int verbose_level)
464// we assume that we don't use implicit fusion nodes
465{
466 int f_v = (verbose_level >= 1);
467 int f_vv = FALSE;//(verbose_level >= 2);
468 int f1, f2, i, j, k, I, J, len;
470
471 if (f_v) {
472 cout << "poset_classification::Kramer_Mesner_matrix_neighboring "
473 "level=" << level << endl;
474 }
475
476 f1 = first_node_at_level(level);
477 f2 = first_node_at_level(level + 1);
478 nb_rows = nb_orbits_at_level(level);
479 nb_cols = nb_orbits_at_level(level + 1);
480
481 M = NEW_lint(nb_rows * nb_cols);
482
483 for (i = 0; i < nb_rows * nb_cols; i++) {
484 M[i] = 0;
485 }
486
487
488 if (f_v) {
489 cout << "poset_classification::Kramer_Mesner_matrix_neighboring "
490 "the size of the matrix is " << nb_rows << " x " << nb_cols << endl;
491 }
492
493 for (i = 0; i < nb_rows; i++) {
494 if (f_vv) {
495 cout << "poset_classification::Kramer_Mesner_matrix_neighboring "
496 "i=" << i << " / " << nb_rows << endl;
497 }
498 I = f1 + i;
499 O = get_node(I);
500 for (k = 0; k < O->get_nb_of_extensions(); k++) {
501 if (f_vv) {
502 cout << "poset_classification::Kramer_Mesner_matrix_neighboring "
503 "i=" << i << " / " << nb_rows << " extension "
504 << k << " / " << O->get_nb_of_extensions() << endl;
505 }
506 if (O->get_E(k)->get_type() == EXTENSION_TYPE_EXTENSION) {
507 if (f_vv) {
508 cout << "poset_classification::Kramer_Mesner_matrix_neighboring "
509 "i=" << i << " / " << nb_rows << " extension "
510 << k << " / " << O->get_nb_of_extensions()
511 << " type extension node" << endl;
512 }
513 len = O->get_E(k)->get_orbit_len();
514 J = O->get_E(k)->get_data();
515 j = J - f2;
516 M[i * nb_cols + j] += len;
517 }
518 if (O->get_E(k)->get_type() == EXTENSION_TYPE_FUSION) {
519 if (f_vv) {
520 cout << "poset_classification::Kramer_Mesner_matrix_neighboring "
521 "i=" << i << " / " << nb_rows << " extension "
522 << k << " / " << O->get_nb_of_extensions()
523 << " type fusion" << endl;
524 }
525 // fusion node
526 len = O->get_E(k)->get_orbit_len();
527
528 int I1, ext1;
530
531 I1 = O->get_E(k)->get_data1();
532 ext1 = O->get_E(k)->get_data2();
533 O1 = get_node(I1);
534 if (O1->get_E(ext1)->get_type() != EXTENSION_TYPE_EXTENSION) {
535 cout << "poset_classification::Kramer_Mesner_matrix_neighboring "
536 "O1->get_E(ext1)->type != EXTENSION_TYPE_EXTENSION "
537 "something is wrong" << endl;
538 exit(1);
539 }
540 J = O1->get_E(ext1)->get_data();
541
542#if 0
543 O->store_set(gen, level - 1);
544 // stores a set of size level to gen->S
545 gen->S[level] = O->E[k].pt;
546
547 for (ii = 0; ii < level + 1; ii++) {
548 gen->set[level + 1][ii] = gen->S[ii];
549 }
550
551 gen->A->element_one(gen->transporter->ith(level + 1), 0);
552
553 J = O->apply_isomorphism(gen,
554 level, I /* current_node */,
555 //0 /* my_node */, 0 /* my_extension */, 0 /* my_coset */,
556 k /* current_extension */, level + 1,
557 FALSE /* f_tolerant */,
558 0/*verbose_level - 2*/);
559 if (FALSE) {
560 cout << "after apply_isomorphism J=" << J << endl;
561 }
562#else
563
564#endif
565
566
567
568
569#if 0
570 //cout << "fusion node:" << endl;
571 //int_vec_print(cout, gen->S, level + 1);
572 //cout << endl;
573 gen->A->element_retrieve(O->E[k].data, gen->Elt1, 0);
574
575 gen->A2->map_a_set(gen->S, gen->S0, level + 1, gen->Elt1, 0);
576 //int_vec_print(cout, gen->S0, level + 1);
577 //cout << endl;
578
579 int_vec_heapsort(gen->S0, level + 1); //int_vec_sort(level + 1, gen->S0);
580
581 //int_vec_print(cout, gen->S0, level + 1);
582 //cout << endl;
583
584 J = gen->find_poset_orbit_node_for_set(level + 1, gen->S0, 0);
585#endif
586 j = J - f2;
587 M[i * nb_cols + j] += len;
588 }
589 }
590 }
591 if (f_v) {
592 cout << "poset_classification::Kramer_Mesner_matrix_neighboring "
593 "level=" << level << " done" << endl;
594 }
595}
596
598 long int *Mtr, long int *Mrk, long int *&Mtk,
599 int nb_r1, int nb_c1, int nb_r2, int nb_c2, int &nb_r3, int &nb_c3,
600 int verbose_level)
601// Computes $M_{tk}$ via a recursion formula:
602// $M_{tk} = {{k - t} \choose {k - r}} \cdot M_{t,r} \cdot M_{r,k}$.
603{
604 int f_v = (verbose_level >= 1);
605 int i, j, h, a, b, c, s = 0;
607
608 if (f_v) {
609 cout << "poset_classification::Mtk_via_Mtr_Mrk t = " << t << ", r = "
610 << r << ", k = " << k << endl;
611 }
612 if (nb_c1 != nb_r2) {
613 cout << "poset_classification::Mtk_via_Mtr_Mrk nb_c1 != nb_r2" << endl;
614 exit(1);
615 }
616
617 nb_r3 = nb_r1;
618 nb_c3 = nb_c2;
619 Mtk = NEW_lint(nb_r3 * nb_c3);
620 for (i = 0; i < nb_r3; i++) {
621 for (j = 0; j < nb_c3; j++) {
622 c = 0;
623 for (h = 0; h < nb_c1; h++) {
624 a = Mtr[i * nb_c1 + h];
625 b = Mrk[h * nb_c2 + j];
626 c += a * b;
627 }
628 Mtk[i * nb_c3 + j] = c;
629 }
630 }
631
632
633 //Mtk.mult(Mtr, Mrk);
634 /* Mtk := (k - t) atop (k - r) * M_t,k */
635
636
638
639 if (Poset->f_subset_lattice) {
640 C.binomial(S, k - t, k - r, 0/* verbose_level*/);
641 s = S.as_lint();
642 }
643 else if (Poset->f_subspace_lattice) {
644 C.q_binomial(S, k - t, r - t, Poset->VS->F->q, 0/* verbose_level*/);
645 s = S.as_lint();
646 }
647 else {
648 cout << "poset_classification::Mtk_via_Mtr_Mrk neither subset lattice nor subspace lattice" << endl;
649 exit(1);
650 }
651 if (f_v) {
652 cout << "poset_classification::Mtk_via_Mtr_Mrk dividing by " << s << endl;
653 }
654
655
656 for (i = 0; i < nb_r3; i++) {
657 for (j = 0; j < nb_c3; j++) {
658 Mtk[i * nb_c3 + j] /= s;
659 }
660 }
661 if (f_v) {
662 cout << "poset_classification::Mtk_via_Mtr_Mrk matrix M_{" << t << "," << k
663 << "} of format " << nb_r3 << " x " << nb_c3 << " computed" << endl;
664 }
665}
666
668 int *Nb_rows, int *Nb_cols,
669 int t, int k,
670 long int *&Mtk, int &nb_r, int &nb_c,
671 int verbose_level)
672{
673 int f_v = (verbose_level >= 1);
674 int i, j;
675
676 if (f_v) {
677 cout << "poset_classification::Mtk_from_MM t = " << t << ", k = " << k << endl;
678 }
679 if (k == t) {
680 cout << "poset_classification::Mtk_from_MM k == t" << endl;
681 exit(1);
682 }
683
684 long int *T;
685 long int *T2;
686 int Tr, Tc;
687 int T2r, T2c;
688
689 Tr = Nb_rows[t];
690 Tc = Nb_cols[t];
691
692 T = NEW_lint(Tr * Tc);
693 for (i = 0; i < Tr; i++) {
694 for (j = 0; j < Tc; j++) {
695 T[i * Tc + j] = pM[t][i * Tc + j];
696 }
697 }
698 if (f_v) {
699 cout << "poset_classification::Mtk_from_MM Tr=" << Tr << " Tc=" << Tc << endl;
700 }
701
702 if (t + 1 < k) {
703 for (i = t + 2; i <= k; i++) {
704 if (f_v) {
705 cout << "poset_classification::Mtk_from_MM i = " << i << " calling Mtk_via_Mtr_Mrk" << endl;
706 }
707 Mtk_via_Mtr_Mrk(t, i - 1, i,
708 T, pM[i - 1], T2,
709 Tr, Tc, Nb_rows[i - 1], Nb_cols[i - 1], T2r, T2c,
710 verbose_level - 1);
711 FREE_lint(T);
712 T = T2;
713 Tr = T2r;
714 Tc = T2c;
715 T2 = NULL;
716 }
717 Mtk = T;
718 nb_r = Tr;
719 nb_c = Tc;
720 }
721 else {
722 Mtk = T;
723 nb_r = Tr;
724 nb_c = Tc;
725 }
726
727
728 if (f_v) {
729 cout << "poset_classification::Mtk_from_MM nb_r=" << nb_r << " nb_c=" << nb_c << endl;
730 }
731
732 if (f_v) {
733 cout << "poset_classification::Mtk_from_MM t = " << t << ", k = " << k << " done" << endl;
734 }
735}
736
737
738}}}
739
740
741
void binomial(ring_theory::longinteger_object &a, int n, int k, int verbose_level)
void q_binomial(ring_theory::longinteger_object &a, int n, int k, int q, int verbose_level)
domain to compute with objects of type longinteger
Definition: ring_theory.h:240
void integral_division_exact(longinteger_object &a, longinteger_object &b, longinteger_object &a_over_b)
void mult(longinteger_object &a, longinteger_object &b, longinteger_object &c)
void integral_division(longinteger_object &a, longinteger_object &b, longinteger_object &q, longinteger_object &r, int verbose_level)
a class to represent arbitrary precision integers
Definition: ring_theory.h:366
void create(long int i, const char *file, int line)
represents a flag in the poset classification algorithm; related to poset_orbit_node
int poset_structure_is_contained(long int *set1, int sz1, long int *set2, int sz2, int verbose_level)
void orbit_element_unrank(int depth, int orbit_idx, long int rank, long int *set, int verbose_level)
void Kramer_Mesner_matrix_neighboring(int level, long int *&M, int &nb_rows, int &nb_cols, int verbose_level)
int count_incidences_up(int lvl1, int po1, int lvl2, int po2, int verbose_level)
void get_stabilizer_order(int level, int orbit_at_level, ring_theory::longinteger_object &go)
void Mtk_via_Mtr_Mrk(int t, int r, int k, long int *Mtr, long int *Mrk, long int *&Mtk, int nb_r1, int nb_c1, int nb_r2, int nb_c2, int &nb_r3, int &nb_c3, int verbose_level)
int count_incidences_down(int lvl1, int po1, int lvl2, int po2, int verbose_level)
void Plesken_submatrix_up(int i, int j, int *&Pij, int &N1, int &N2, int verbose_level)
void Plesken_submatrix_down(int i, int j, int *&Pij, int &N1, int &N2, int verbose_level)
void Mtk_from_MM(long int **pM, int *Nb_rows, int *Nb_cols, int t, int k, long int *&Mtk, int &nb_r, int &nb_c, int verbose_level)
to represent one poset orbit; related to the class poset_classification
int apply_isomorphism(poset_classification *gen, int lvl, int current_node, int current_extension, int len, int f_tolerant, int verbose_level)
#define Lint_vec_copy(A, B, C)
Definition: foundations.h:694
#define FREE_OBJECTS(p)
Definition: foundations.h:652
#define FREE_int(p)
Definition: foundations.h:640
#define Lint_vec_print(A, B, C)
Definition: foundations.h:686
#define NEW_int(n)
Definition: foundations.h:625
#define NEW_OBJECTS(type, n)
Definition: foundations.h:639
#define FALSE
Definition: foundations.h:234
#define FREE_lint(p)
Definition: foundations.h:642
#define NEW_lint(n)
Definition: foundations.h:628
the orbiter library for the classification of combinatorial objects
#define EXTENSION_TYPE_FUSION
#define EXTENSION_TYPE_EXTENSION