8#ifndef SRC_LIB_TOP_LEVEL_SEMIFIELDS_SEMIFIELDS_H_
9#define SRC_LIB_TOP_LEVEL_SEMIFIELDS_SEMIFIELDS_H_
14namespace layer5_applications {
53 int argc, std::string *argv,
76 groups::matrix_group *
Mtx;
77 poset_classification::poset_classification_control *
Control;
118 poset_classification::poset_classification_control *
Control,
153 groups::matrix_group *
Mtx;
174 induced_actions::action_on_spread_set *
A_on_S;
182 poset_classification::poset_with_group_action *
Poset;
183 poset_classification::poset_classification_control *
Control;
185 poset_classification::poset_classification *
Gen;
212 poset_classification::poset_classification_control *
Control,
216 void report(std::ostream &ost,
int level,
219 graphics::layered_graph_draw_options *draw_options,
222 poset_classification::poset_classification_control *
Control,
226 long int rank_point(
int *v,
int verbose_level);
227 void unrank_point(
int *v,
long int rk,
int verbose_level);
229 long int *candidates,
int nb_candidates,
230 long int *good_candidates,
int &nb_good_candidates,
233 int **Mtx_stack,
int stack_size,
int *M,
236 long int *data,
int data_sz,
int verbose_level);
238 int *Basis,
int n,
int verbose_level);
249 int *basis_in,
int *basis_out,
250 int first,
int last_plus_one,
int verbose_level);
252 int *basis_in,
int *basis_out,
253 int first,
int last_plus_one,
int verbose_level);
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,
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,
276 long int *data_in,
long int *data_out,
300 groups::matrix_group *
M;
301 field_theory::finite_field *
F;
302 algebra::gl_classes *
C;
307 algebra::gl_class_rep *
R;
393 algebra::gl_class_rep *
R1, *
R2;
407 int c,
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,
431 int orbit,
int verbose_level);
433 int orbit,
int verbose_level);
446 data_structures::set_of_sets_lint *&Candidates_by_type,
int orbit,
449 int *basis,
int *pivots,
int verbose_level);
450 void report(std::ofstream &ost,
int verbose_level);
498 geometry::grassmann *
Gr;
522 algebra::gl_class_rep *
R1;
531 void report(std::ostream &ost,
int verbose_level);
551 int level,
int f,
int po,
int so,
int N,
552 int *transporter,
int *Mtx,
553 int *base_change_matrix,
567 int level,
int orbit_idx,
570 int *input_basis,
int basis_sz,
int *transporter,
575 int *changed_basis,
int basis_sz,
int *
basis_tmp,
576 int *transporter,
int *
ELT3,
579 int *input_basis,
int basis_sz,
581 int &trace_po,
int &trace_so,
586 int *input_basis,
int basis_sz,
593 int orbit_r,
int orbit_m,
594 int f_out_path, std::string &out_path,
597 int orbit_r,
int orbit_m,
598 int f_out_path, std::string &out_path,
603 int orbit,
int *
Basis,
int *pivots,
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,
615 int po3,
long int &a1,
long int &a2,
long int &a3,
625 int level,
int orbit_idx);
629 int f_out_path, std::string &out_path,
630 int orbit_r,
int orbit_m);
632 int f_out_path, std::string &out_path,
633 int orbit_r,
int orbit_m);
702 int nb_non_unique_cases,
703 int *Non_unique_cases,
long int *Non_unique_cases_go,
711 int *Trace_po,
int verbose_level);
715 long int *given_data,
719 int &rk,
int &trace_po,
int &fo,
int &po,
738 field_theory::finite_field *
F;
790 ring_theory::longinteger_object
go;
791 groups::strong_generators *
gens;
824 field_theory::finite_field *
F;
833 algebra::gl_class_rep *
R1;
840 int *input_basis,
int basis_sz,
841 int *basis_after_trace,
int *transporter,
842 int &trace_po,
int &trace_so,
875 int f_trace_record_prefix, std::string &trace_record_prefix,
876 int iso,
int f,
int po,
int so,
int N);
projective space PG(n,q) with automorphism group PGGL(n+1,q)
description of a semifield classification problem
semifield_classify_description()
int f_decomposition_matrix_level_3
int read_arguments(int argc, std::string *argv, int verbose_level)
std::string test_semifield_data
int f_load_classification
std::string level_two_prefix
std::string level_three_prefix
std::string identify_semifields_from_file_fname
std::string identify_semifield_data
~semifield_classify_description()
int f_identify_semifields_from_file
classification of semifields using substructure
semifield_classify_description * Descr
int * identify_semifields_from_file_Po
semifield_classify_with_substructure()
groups::matrix_group * Mtx
void generate_source_code(int verbose_level)
void load_classification(int verbose_level)
int * Non_unique_cases_fst
std::string trace_record_prefix
void create_fname_for_classification(char *fname)
int f_trace_record_prefix
void identify_semifield(int verbose_level)
void create_fname_for_flag_orbits(char *fname)
int * Non_unique_cases_len
invariant_relations::classification_step * Semifields
projective_geometry::projective_space_with_action * PA
long int * Non_unique_cases_go
void load_flag_orbits(int verbose_level)
void identify_semifields_from_file(int verbose_level)
semifield_substructure * Sub
poset_classification::poset_classification_control * Control
~semifield_classify_with_substructure()
int identify_semifields_from_file_m
void latex_report(int verbose_level)
void decomposition(int verbose_level)
void read_data(int verbose_level)
void classify_semifields(int verbose_level)
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
induced_actions::action_on_spread_set * A_on_S
void unrank_point(int *v, long int rk, int verbose_level)
poset_classification::poset_with_group_action * Poset
std::string level_two_prefix
void compute_orbits(int depth, int verbose_level)
void print_set_of_matrices_numeric(long int *Rk, int nb)
void matrix_print_numeric(long int rk)
long int rank_point(int *v, int verbose_level)
groups::matrix_group * Mtx
void basis_print(int *Mtx, int sz)
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
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)
int test_if_third_basis_vector_is_ok(int *Basis)
void basis_print_numeric(long int *Rk, int sz)
void make_fname_candidates_at_level_three_orbit(std::string &fname, int orbit)
void matrix_unrank(long int rk, int *Mtx)
int test_candidate(int **Mtx_stack, int stack_size, int *M, int verbose_level)
actions::action * A0_linear
int vector_space_dimension
std::string level_three_prefix
void apply_element(int *Elt, int *basis_in, int *basis_out, int first, int last_plus_one, int verbose_level)
spreads::spread_classify * T
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)
void matrix_print(int *Mtx)
projective_geometry::projective_space_with_action * PA
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
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)
groups::strong_generators * Strong_gens
long int matrix_rank(int *Mtx)
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)
groups::sims * Symmetry_group
long int matrix_rank_without_first_column(int *Mtx)
void init_desired_pivots(int verbose_level)
auxiliary class for classifying semifields
~semifield_downstep_node()
void init(semifield_lifting *SL, int level, int orbit_number, long int *Candidates, int nb_candidates, int first_flag_orbit, int verbose_level)
actions::action * A_on_cosets
induced_actions::action_on_cosets * on_cosets
semifield_downstep_node()
int find_point(long int a)
field_theory::finite_field * F
auxiliary class for classifying semifields
~semifield_flag_orbit_node()
semifield_flag_orbit_node()
groups::strong_generators * gens
void read_from_file_binary(semifield_lifting *SL, std::ifstream &fp, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
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 compute_candidates_at_level_two_case(int orbit, long int *&Candidates, int &nb_candidates, int verbose_level)
void downstep(int verbose_level)
void compute_stabilizers_downstep(int verbose_level)
void find_all_candidates_at_level_two(int verbose_level)
void write_level_info_file(int verbose_level)
int * defining_flag_orbit
void create_fname_level_info_file(std::string &fname)
void trace(int f, int coset, long int a, long int b, int &f_automorphism, int *&Aut, int verbose_level)
int * class_to_flag_orbit
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)
void upstep(int verbose_level)
void read_level_info_file(int verbose_level)
algebra::gl_class_rep * R
long int * class_rep_rank
int * flag_orbit_number_of_matrices
int ** class_rep_plus_I_Basis_inv
void report(std::ofstream &ost, int verbose_level)
field_theory::finite_field * F
void allocate_candidates_at_level_two(int verbose_level)
int test_if_file_exists_candidates_at_level_two_case(int orbit, int verbose_level)
long int * class_rep_plus_I_rank
algebra::gl_class_rep * R2
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 compute_level_two(int nb_stages, int verbose_level)
int test_if_txt_file_exists_candidates_at_level_two_case(int orbit, int verbose_level)
groups::strong_generators * Flag_orbit_stabilizer
int * R_i_plus_I_class_idx
void list_all_elements_in_conjugacy_class(int c, 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_desired_pivots(int verbose_level)
algebra::gl_class_rep * R1
void init(semifield_classify *SC, int verbose_level)
int ** class_rep_plus_I_Basis
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.
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
auxiliary class for classifying semifields using a three-dimensional substructure
~semifield_substructure()
int find_semifield_in_table(int po, long int *given_data, int &idx, int verbose_level)
semifield_classify_with_substructure * SCWS
void compute_orbits(int verbose_level)
void all_two_dimensional_subspaces(int *Trace_po, int verbose_level)
void do_classify(int verbose_level)
void compute_flag_orbits(int verbose_level)
geometry::grassmann * Gr2
int identify(long int *data, int &rk, int &trace_po, int &fo, int &po, int *transporter, int verbose_level)
data_structures_groups::vector_ge * coset_reps
void compute_cases(int nb_non_unique_cases, int *Non_unique_cases, long int *Non_unique_cases_go, int verbose_level)
invariant_relations::flag_orbits * Flag_orbits
int * Non_unique_cases_with_non_trivial_group
orbit_of_subspaces *** All_Orbits
void loop_over_all_subspaces(int *f_processed, int &nb_processed, int verbose_level)
int nb_non_unique_cases_with_non_trivial_group
geometry::grassmann * Gr3
auxiliary class for isomorph recognition of a semifield
field_theory::finite_field * F
void init(semifield_lifting *SL)
algebra::gl_class_rep * R1
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
to classify spreads of PG(k-1,q) in PG(n-1,q) where k divides n
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