Orbiter 2022
Combinatorial Objects
semifields.h
Go to the documentation of this file.
1/*
2 * semifields.h
3 *
4 * Created on: Nov 4, 2020
5 * Author: betten
6 */
7
8#ifndef SRC_LIB_TOP_LEVEL_SEMIFIELDS_SEMIFIELDS_H_
9#define SRC_LIB_TOP_LEVEL_SEMIFIELDS_SEMIFIELDS_H_
10
11
12
13namespace orbiter {
14namespace layer5_applications {
15namespace semifields {
16
17// #############################################################################
18// semifield_classify_description.cpp
19// #############################################################################
20
21
23
25public:
26
28 int order;
32 std::string prefix;
43
45 std::string level_two_prefix;
47 std::string level_three_prefix;
48
49
53 int argc, std::string *argv,
54 int verbose_level);
55
56};
57
58
59
60// #############################################################################
61// semifield_classify_with_substructure.cpp
62// #############################################################################
63
64
66
68public:
69
70 int t0;
71
73
75 //linear_group *LG;
76 groups::matrix_group *Mtx;
77 poset_classification::poset_classification_control *Control;
78
79
82
83
87 std::string fname_FstLen;
88 int f_Data;
89 std::string fname_Data;
90
91 int p, e, e1, n, k, q, k2;
92
95
96
101
102
108
109
110 invariant_relations::classification_step *Semifields;
111
112
115 void init(
118 poset_classification::poset_classification_control *Control,
119 int verbose_level);
120 void read_data(int verbose_level);
121 void create_fname_for_classification(char *fname);
122 void create_fname_for_flag_orbits(char *fname);
123 void classify_semifields(int verbose_level);
124 void load_classification(int verbose_level);
125 void load_flag_orbits(int verbose_level);
126 void identify_semifield(int verbose_level);
127 void identify_semifields_from_file(int verbose_level);
128 void latex_report(int verbose_level);
129 void generate_source_code(int verbose_level);
130 void decomposition(int verbose_level);
131};
132
133
134
135
136
137// #############################################################################
138// semifield_classify.cpp
139// #############################################################################
140
141
143
145public:
146
148
149 int n;
150 int k;
151 int k2; // = k * k
152 //linear_group *LG;
153 groups::matrix_group *Mtx;
154
155 int q;
156 int order; // q^k
157
158
159 std::string level_two_prefix;
160
162
163
165
166 actions::action *A; // = T->A = PGL_n_q
167 int *Elt1;
168 groups::sims *G; // = T->R->A0_linear->Sims
169
170 actions::action *A0;
171 actions::action *A0_linear;
172
173
174 induced_actions::action_on_spread_set *A_on_S;
175 actions::action *AS;
176
177 groups::strong_generators *Strong_gens;
178 // the stabilizer of two components in a spread:
179 // infinity and zero
180
181
182 poset_classification::poset_with_group_action *Poset;
183 poset_classification::poset_classification_control *Control;
184
185 poset_classification::poset_classification *Gen;
186 groups::sims *Symmetry_group;
187
188
191
192 // for test_partial_semifield:
193 int *test_base_cols; // [n]
194 int *test_v; // [n]
195 int *test_w; // [k2]
196 int *test_Basis; // [k * k2]
197
198 // for knuth operations:
199 int *Basis1; // [k * k2]
200 int *Basis2; // [k * k2]
201
202 // for compute_orbit_of_subspaces:
204
207 void null();
208 void freeself();
209 void init(
211 int k,
212 poset_classification::poset_classification_control *Control,
213 std::string &level_two_prefix,
214 std::string &level_three_prefix,
215 int verbose_level);
216 void report(std::ostream &ost, int level,
219 graphics::layered_graph_draw_options *draw_options,
220 int verbose_level);
222 poset_classification::poset_classification_control *Control,
223 int verbose_level);
224 void compute_orbits(int depth, int verbose_level);
225 void list_points();
226 long int rank_point(int *v, int verbose_level);
227 void unrank_point(int *v, long int rk, int verbose_level);
228 void early_test_func(long int *S, int len,
229 long int *candidates, int nb_candidates,
230 long int *good_candidates, int &nb_good_candidates,
231 int verbose_level);
232 int test_candidate(
233 int **Mtx_stack, int stack_size, int *M,
234 int verbose_level);
236 long int *data, int data_sz, int verbose_level);
238 int *Basis, int n, int verbose_level);
239 void test_rank_unrank();
240 void matrix_unrank(long int rk, int *Mtx);
241 long int matrix_rank(int *Mtx);
243 void basis_print(int *Mtx, int sz);
244 void basis_print_numeric(long int *Rk, int sz);
245 void matrix_print(int *Mtx);
246 void matrix_print_numeric(long int rk);
247 void print_set_of_matrices_numeric(long int *Rk, int nb);
248 void apply_element(int *Elt,
249 int *basis_in, int *basis_out,
250 int first, int last_plus_one, int verbose_level);
251 void apply_element_and_copy_back(int *Elt,
252 int *basis_in, int *basis_out,
253 int first, int last_plus_one, int verbose_level);
254 int test_if_third_basis_vector_is_ok(int *Basis);
256 long int *Input_set, int input_set_sz,
257 int window_bottom, int window_size,
258 long int **&Set, int *&Set_sz, int &Nb_sets,
259 int verbose_level);
261 std::string &fname, int orbit);
263 std::string &fname, int orbit);
265 std::string &fname, int orbit);
267 std::string &fname, int orbit, int h);
269 long int *input_data,
270 groups::strong_generators *stabilizer_gens,
271 orbit_of_subspaces *&Orb,
272 int verbose_level);
273 // allocates an orbit_of_subspaces data structure in Orb
274 void init_desired_pivots(int verbose_level);
275 void knuth_operation(int t,
276 long int *data_in, long int *data_out,
277 int verbose_level);
278};
279
280
281
282// #############################################################################
283// semifield_level_two.cpp
284// #############################################################################
285
286
288
289
291public:
293 int n; // = 2 * k
294 int k;
295 int k2;
296 int q;
297
298 actions::action *A; // PGL(n,q)
299 actions::action *A_PGLk; // PGL(k,q)
300 groups::matrix_group *M;
301 field_theory::finite_field *F;
302 algebra::gl_classes *C;
303 int *desired_pivots; // [k]
304
305
306 // Level one:
307 algebra::gl_class_rep *R; // [nb_classes]
308 // conjugacy class reps,
309 // allocated and computed in C->make_classes,
310 // which is called from downstep()
312
313 int *Basis, *Mtx, *Mtx_Id, *Mtx_2, *Elt, *Elt2;
314
315 // the following arrays are all [nb_classes]
316 long int *class_rep_rank;
319 // computed via C->identify_matrix
320 // aplied to the matrix representing the conjugacy class
321 // plus the identity matrix
322 // if the two matrices A and A + I belong to the same conjugacy class,
323 // then the matrix class_rep_plus_I_Basis will be added to the
324 // centralizer to form the stabilizer of the flag.
328 // class_to_flag_orbit[i] is the flag orbit which contains class i
329
330
331 int nb_flag_orbits; // the number of flag orbits
332 groups::strong_generators *Flag_orbit_stabilizer; // [nb_flag_orbits]
333 int *flag_orbit_classes; // [nb_flag_orbits * 2]
334 // for each flag orbit i,
335 // the conjugacy class associated to R_i and R_i + I, respectively
336 int *flag_orbit_number_of_matrices; // [nb_flag_orbits]
337 int *flag_orbit_length; // [nb_flag_orbits]
338 int *f_Fusion; // [nb_flag_orbits]
339 int *Fusion_idx; // [nb_flag_orbits]
340 int **Fusion_elt; // [nb_flag_orbits]
341
343 int *defining_flag_orbit; // same as Fo
344 // The flag orbit which led to the definition
345 // of this orbit representative.
346 // To get the actual rep a, do
347 // idx = flag_orbit_classes[ext * 2 + 0];
348 // a = class_rep_rank[idx];
349 // where ext = up_orbit_rep[i]
350
351 //int *Po; // [nb_orbits]
352 // There is only one orbit at level one,
353 // so there is no need to store Po
354
355 // it does not have a Po[]
356
357 int *So;
358 // [nb_orbits] So[i] is the index of the conjugacy class
359 // associated with the flag orbit Fo[i]
360 // So[i] = flag_orbit_classes[Fo[i] * 2 + 0];
361
362 int *Fo;
363 // [nb_orbits]
364 // Fo[i] is the index of the flag orbit
365 // which let to the definition of orbit i
366
367 long int *Go; // [nb_orbits]
368 long int *Pt; // [nb_orbits]
369
370
371 //for (i = 0; i < nb_orbits; i++) {
372 //ext = defining_flag_orbit[i];
373 //idx = flag_orbit_classes[ext * 2 + 0];
374 //a = class_rep_rank[idx];
375 //b = class_rep_plus_I_rank[idx];
376 //Fo[i] = ext;
377 //So[i] = idx;
378 //Pt[i] = a;
379 //Go[i] = go.as_lint();
380
381
382 groups::strong_generators *Stabilizer_gens;
383 // stabilizer generators for the
384 // chosen orbit representatives at level two
385
386 int *E1, *E2, *E3, *E4;
387 //int *Mnn;
388 int *Mtx1, *Mtx2, *Mtx3, *Mtx4, *Mtx5, *Mtx6;
389 int *ELT1, *ELT2, *ELT3;
390 int *M1;
392
393 algebra::gl_class_rep *R1, *R2;
394
395 long int **Candidates;
396 // candidates for the generator matrix,
397 // [nb_orbits]
399 // [nb_orbits]
400
401
404 void init(semifield_classify *SC, int verbose_level);
405 void init_desired_pivots(int verbose_level);
407 int c, int verbose_level);
408 void compute_level_two(int nb_stages, int verbose_level);
409 void downstep(int verbose_level);
410 void compute_stabilizers_downstep(int verbose_level);
411 void upstep(int verbose_level);
412 void trace(int f, int coset,
413 long int a, long int b, int &f_automorphism, int *&Aut,
414 int verbose_level);
416 int *ELT1, int *Mtx, int *ELT2, int *ELT3,
417 int verbose_level);
418 // Creates the n x n matrix which is the 2 x 2 block matrix
419 // (A 0)
420 // (0 A)
421 // where A is Mtx.
422 // The resulting element is stored in ELT2.
423 // After this, ELT1 * ELT2 will be stored in ELT3
425 int orbit,
426 long int *&Candidates, int &nb_candidates,
427 int verbose_level);
429 int verbose_level);
431 int orbit, int verbose_level);
433 int orbit, int verbose_level);
435 int verbose_level);
437 long int *&Candidates, int &Nb_candidates, int orbit,
438 int verbose_level);
440 long int *&Candidates, int &Nb_candidates, int orbit,
441 int verbose_level);
443 long int *Candidates, int Nb_candidates, int orbit,
444 int verbose_level);
446 data_structures::set_of_sets_lint *&Candidates_by_type, int orbit,
447 int verbose_level);
448 void get_basis_and_pivots(int po,
449 int *basis, int *pivots, int verbose_level);
450 void report(std::ofstream &ost, int verbose_level);
451 void create_fname_level_info_file(std::string &fname);
452 void write_level_info_file(int verbose_level);
453 void read_level_info_file(int verbose_level);
454};
455
456
457// #############################################################################
458// semifield_lifting.cpp
459// #############################################################################
460
461
463
464
466public:
468 semifield_level_two *L2; // only if cur_level == 3
469 semifield_lifting *Prev; // only if cur_level > 3
470 int n;
471 int k;
472 int k2;
473
476
478 std::string prefix;
479
480 groups::strong_generators *Prev_stabilizer_gens;
481 long int **Candidates;
482 // candidates for the generator matrix,
483 // [nb_orbits]
485 // [nb_orbits]
486
487
489
491
492 int *flag_orbit_first; // [prev_level_nb_orbits]
493 int *flag_orbit_len; // [prev_level_nb_orbits]
494
495
497
498 geometry::grassmann *Gr;
499
500 // po = primary orbit
501 // so = secondary orbit
502 // mo = middle orbit = flag orbit
503 // pt = point
505 int *Po; // [nb_orbits]
506 int *So; // [nb_orbits]
507 int *Mo; // [nb_orbits]
508 long int *Go; // [nb_orbits]
509 long int *Pt; // [nb_orbits]
510 groups::strong_generators *Stabilizer_gens; // [nb_orbits]
511
512 // deep_search:
515
516 // for trace_very_general:
517 int *ELT1, *ELT2, *ELT3;
520 int *M1;
521 int *Basis;
522 algebra::gl_class_rep *R1;
523
524
525
529 int f_prefix, std::string &prefix,
530 int verbose_level);
531 void report(std::ostream &ost, int verbose_level);
532 void recover_level_three_downstep(int verbose_level);
533 void recover_level_three_from_file(int f_read_flag_orbits, int verbose_level);
534 void compute_level_three(int verbose_level);
535 void level_two_down(int verbose_level);
536 void level_two_flag_orbits(int verbose_level);
537 void level_two_upstep(int verbose_level);
538 void downstep(
539 int level,
540 int verbose_level);
541 // level is the previous level
543 int level,
544 int verbose_level);
545 // level is the previous level
546 void upstep(
547 int level,
548 int verbose_level);
549 // level is the level that we want to classify
551 int level, int f, int po, int so, int N,
552 int *transporter, int *Mtx, //int *pivots,
553 int *base_change_matrix,
554 int *changed_space,
555 //int *changed_space_after_trace,
556 long int *set,
557 int **Aut,
558 int verbose_level);
559 // level is the level that we want to classify
561 int level,
562 int verbose_level);
563 void get_basis(
564 int po3, int *basis,
565 int verbose_level);
566 groups::strong_generators *get_stabilizer_generators(
567 int level, int orbit_idx,
568 int verbose_level);
570 int *input_basis, int basis_sz, int *transporter,
571 int &trace_po,
572 int verbose_level);
573 int trace_step_up(
574 int &po, int &so,
575 int *changed_basis, int basis_sz, int *basis_tmp,
576 int *transporter, int *ELT3,
577 int verbose_level);
579 int *input_basis, int basis_sz,
580 int *transporter,
581 int &trace_po, int &trace_so,
582 int verbose_level);
583 // input basis is input_basis of size basis_sz x k2
584 // there is a check if input_basis defines a semifield
586 int *input_basis, int basis_sz,
587 int *transporter,
588 int &trace_po,
589 int verbose_level);
590 // input basis is input_basis of size basis_sz x k2
591 // there is a check if input_basis defines a semifield
592 void deep_search(
593 int orbit_r, int orbit_m,
594 int f_out_path, std::string &out_path,
595 int verbose_level);
597 int orbit_r, int orbit_m,
598 int f_out_path, std::string &out_path,
599 int &nb_sol,
600 int verbose_level);
603 int orbit, int *Basis, int *pivots,
604 std::ofstream &fp,
605 int &nb_sol,
606 int verbose_level);
608 int orbit,
609 int *last_mtx, int window_bottom, int window_size,
610 data_structures::set_of_sets_lint *C_in,
611 data_structures::set_of_sets_lint *C_out,
612 long int *Tmp1, long int *Tmp2,
613 int verbose_level);
615 int po3, long int &a1, long int &a2, long int &a3,
616 int verbose_level);
617 void write_level_info_file(int verbose_level);
618 void read_level_info_file(int verbose_level);
619 void make_fname_flag_orbits(std::string &fname);
620 void save_flag_orbits(int verbose_level);
621 void read_flag_orbits(int verbose_level);
622 void save_stabilizers(int verbose_level);
623 void read_stabilizers(int verbose_level);
624 void make_file_name_schreier(std::string &fname,
625 int level, int orbit_idx);
626 void create_fname_level_info_file(std::string &fname);
627 void make_fname_stabilizers(std::string &fname);
628 void make_fname_deep_search_slice_solutions(std::string &fname,
629 int f_out_path, std::string &out_path,
630 int orbit_r, int orbit_m);
631 void make_fname_deep_search_slice_success(std::string &fname,
632 int f_out_path, std::string &out_path,
633 int orbit_r, int orbit_m);
634
635};
636
637
638// #############################################################################
639// semifield_substructure.cpp
640// #############################################################################
641
643
644
646public:
650 geometry::grassmann *Gr3;
651 geometry::grassmann *Gr2;
654
657
659 int N; // = number of 3-dimensional subspaces
660 int N2; // = number of 2-dimensional subspaces
661 int f;
662 long int *Data;
666 int *FstLen;
667 int *Len;
669 int nb_orb_total; // = sum_i Nb_orb[i]
670 orbit_of_subspaces ***All_Orbits; // [nb_non_unique_cases_with_non_trivial_group]
671 int *Nb_orb; // [nb_non_unique_cases_with_non_trivial_group]
672 // Nb_orb[i] is the number of orbits in All_Orbits[i]
673 int **Orbit_idx; // [nb_non_unique_cases_with_non_trivial_group]
674 // Orbit_idx[i][j] = b
675 // means that the j-th solution of Nontrivial case i belongs to orbt All_Orbits[i][b]
676 int **Position; // [nb_non_unique_cases_with_non_trivial_group]
677 // Position[i][j] = a
678 // means that the j-th solution of Nontrivial case i is the a-th element in All_Orbits[i][b]
679 // where Orbit_idx[i][j] = b
680 int *Fo_first; // [nb_orbits_at_level_3]
682 invariant_relations::flag_orbits *Flag_orbits; // [nb_flag_orbits]
683 long int *data1;
684 long int *data2;
685 int *Basis1;
686 int *Basis2;
687 //int *Basis3;
688 int *B;
689 int *v1;
690 int *v2;
691 int *v3;
695 int *Elt1;
696 data_structures_groups::vector_ge *coset_reps;
697
700 void init();
701 void compute_cases(
702 int nb_non_unique_cases,
703 int *Non_unique_cases, long int *Non_unique_cases_go,
704 int verbose_level);
705 void compute_orbits(int verbose_level);
706 void compute_flag_orbits(int verbose_level);
707 void do_classify(int verbose_level);
708 void loop_over_all_subspaces(int *f_processed, int &nb_processed,
709 int verbose_level);
711 int *Trace_po, int verbose_level);
712 // Trace_po[N2]
714 int po,
715 long int *given_data,
716 int &idx,
717 int verbose_level);
718 int identify(long int *data,
719 int &rk, int &trace_po, int &fo, int &po,
720 int *transporter,
721 int verbose_level);
722};
723
724
725
726
727// #############################################################################
728// semifield_downstep_node.cpp
729// #############################################################################
730
732
733
735public:
738 field_theory::finite_field *F;
739 int k;
740 int k2;
741
742 int level;
744
745 long int *Candidates;
747
749
750 induced_actions::action_on_cosets *on_cosets;
751 actions::action *A_on_cosets;
752
753 groups::schreier *Sch;
754
756
759 void null();
760 void freeself();
762 long int *Candidates, int nb_candidates, int first_flag_orbit,
763 int verbose_level);
764 int find_point(long int a);
765
766};
767
768
769
770// #############################################################################
771// semifield_flag_orbit_node.cpp
772// #############################################################################
773
774
776
778public:
782 long int pt;
785 int upstep_orbit; // if !f_fusion_node
789
790 ring_theory::longinteger_object go;
791 groups::strong_generators *gens;
792
795 void null();
796 void freeself();
798 int pt_local, long int pt, int downstep_orbit_len, int f_long_orbit,
799 int verbose_level);
800 void group_order(ring_theory::longinteger_object &go);
801 int group_order_as_int();
803 semifield_lifting *SL, std::ofstream &fp,
804 int verbose_level);
806 semifield_lifting *SL, std::ifstream &fp,
807 int verbose_level);
808
809};
810
811// #############################################################################
812// semifield_trace.cpp
813// #############################################################################
814
815
817
819public:
823 actions::action *A;
824 field_theory::finite_field *F;
825 int n;
826 int k;
827 int k2;
828 int *ELT1, *ELT2, *ELT3;
829 int *M1;
830 int *Basis;
833 algebra::gl_class_rep *R1;
834
839 int cur_level,
840 int *input_basis, int basis_sz,
841 int *basis_after_trace, int *transporter,
842 int &trace_po, int &trace_so,
843 int verbose_level);
844 // input basis is input_basis of size basis_sz x k2
845 // there is a check if input_basis defines a semifield
846};
847
848
849// #############################################################################
850// trace_record.cpp
851// #############################################################################
852
853
855
856
858public:
859 int coset;
864 long int go;
865 int pos;
866 int so;
868 int f2;
869 trace_record();
871};
872
874 trace_record *T,
875 int f_trace_record_prefix, std::string &trace_record_prefix,
876 int iso, int f, int po, int so, int N);
877
878
879}}}
880
881#endif /* SRC_LIB_TOP_LEVEL_SEMIFIELDS_SEMIFIELDS_H_ */
projective space PG(n,q) with automorphism group PGGL(n+1,q)
description of a semifield classification problem
Definition: semifields.h:24
projective_geometry::projective_space_with_action * PA
Definition: semifields.h:74
poset_classification::poset_classification_control * Control
Definition: semifields.h:77
void init(semifield_classify_description *Descr, projective_geometry::projective_space_with_action *PA, poset_classification::poset_classification_control *Control, int verbose_level)
classification of semifields using poset classification
Definition: semifields.h:144
induced_actions::action_on_spread_set * A_on_S
Definition: semifields.h:174
void unrank_point(int *v, long int rk, int verbose_level)
poset_classification::poset_with_group_action * Poset
Definition: semifields.h:182
int test_partial_semifield(int *Basis, int n, int verbose_level)
void compute_orbit_of_subspaces(long int *input_data, groups::strong_generators *stabilizer_gens, orbit_of_subspaces *&Orb, int verbose_level)
poset_classification::poset_classification * Gen
Definition: semifields.h:185
void knuth_operation(int t, long int *data_in, long int *data_out, int verbose_level)
void make_fname_candidates_at_level_two_orbit_txt(std::string &fname, int orbit)
void make_fname_candidates_at_level_three_orbit(std::string &fname, int orbit)
int test_candidate(int **Mtx_stack, int stack_size, int *M, int verbose_level)
void apply_element(int *Elt, int *basis_in, int *basis_out, int first, int last_plus_one, int verbose_level)
void make_fname_candidates_at_level_two_orbit(std::string &fname, int orbit)
void candidates_classify_by_first_column(long int *Input_set, int input_set_sz, int window_bottom, int window_size, long int **&Set, int *&Set_sz, int &Nb_sets, int verbose_level)
void make_fname_candidates_at_level_two_orbit_by_type(std::string &fname, int orbit, int h)
void apply_element_and_copy_back(int *Elt, int *basis_in, int *basis_out, int first, int last_plus_one, int verbose_level)
void init_poset_classification(poset_classification::poset_classification_control *Control, int verbose_level)
projective_geometry::projective_space_with_action * PA
Definition: semifields.h:147
void report(std::ostream &ost, int level, semifield_level_two *L2, semifield_lifting *L3, graphics::layered_graph_draw_options *draw_options, int verbose_level)
poset_classification::poset_classification_control * Control
Definition: semifields.h:183
void early_test_func(long int *S, int len, long int *candidates, int nb_candidates, long int *good_candidates, int &nb_good_candidates, int verbose_level)
int test_partial_semifield_numerical_data(long int *data, int data_sz, int verbose_level)
void init(projective_geometry::projective_space_with_action *PA, int k, poset_classification::poset_classification_control *Control, std::string &level_two_prefix, std::string &level_three_prefix, int verbose_level)
auxiliary class for classifying semifields
Definition: semifields.h:734
void init(semifield_lifting *SL, int level, int orbit_number, long int *Candidates, int nb_candidates, int first_flag_orbit, int verbose_level)
void read_from_file_binary(semifield_lifting *SL, std::ifstream &fp, int verbose_level)
void write_to_file_binary(semifield_lifting *SL, std::ofstream &fp, int verbose_level)
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.
Definition: semifields.h:290
void compute_candidates_at_level_two_case(int orbit, long int *&Candidates, int &nb_candidates, int verbose_level)
void trace(int f, int coset, long int a, long int b, int &f_automorphism, int *&Aut, int verbose_level)
void write_candidates_at_level_two_case(long int *Candidates, int Nb_candidates, int orbit, int verbose_level)
void read_candidates_at_level_two_case(long int *&Candidates, int &Nb_candidates, int orbit, int verbose_level)
int test_if_file_exists_candidates_at_level_two_case(int orbit, 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)
int test_if_txt_file_exists_candidates_at_level_two_case(int orbit, int verbose_level)
void read_candidates_at_level_two_case_txt_file(long int *&Candidates, int &Nb_candidates, int orbit, int verbose_level)
void init(semifield_classify *SC, int verbose_level)
void multiply_to_the_right(int *ELT1, int *Mtx, int *ELT2, int *ELT3, int verbose_level)
void get_basis_and_pivots(int po, int *basis, int *pivots, int verbose_level)
One step of lifting for classifying semifields.
Definition: semifields.h:465
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)
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 level_three_get_a1_a2_a3(int po3, long int &a1, long int &a2, long int &a3, 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 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)
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 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_from_file(int f_read_flag_orbits, 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 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)
auxiliary class for classifying semifields using a three-dimensional substructure
Definition: semifields.h:645
int find_semifield_in_table(int po, long int *given_data, int &idx, int verbose_level)
int identify(long int *data, int &rk, int &trace_po, int &fo, int &po, int *transporter, int verbose_level)
void compute_cases(int nb_non_unique_cases, int *Non_unique_cases, long int *Non_unique_cases_go, int verbose_level)
void loop_over_all_subspaces(int *f_processed, int &nb_processed, int verbose_level)
auxiliary class for isomorph recognition of a semifield
Definition: semifields.h:818
void trace_very_general(int cur_level, int *input_basis, int basis_sz, int *basis_after_trace, int *transporter, int &trace_po, int &trace_so, int verbose_level)
to record the result of isomorphism testing
Definition: semifields.h:857
to classify spreads of PG(k-1,q) in PG(n-1,q) where k divides n
Definition: spreads.h:106
void save_trace_record(trace_record *T, int f_trace_record_prefix, std::string &trace_record_prefix, int iso, int f, int po, int so, int N)
the orbiter library for the classification of combinatorial objects