8#ifndef SRC_LIB_TOP_LEVEL_SPREADS_SPREADS_H_
9#define SRC_LIB_TOP_LEVEL_SPREADS_SPREADS_H_
13namespace layer5_applications {
30 field_theory::finite_field *
F;
59 data_structures_groups::vector_ge *
gens2;
69 void init(
int n,
int k, field_theory::finite_field *
F,
70 geometry::grassmann *
Grass,
71 actions::action *
A, actions::action *
A2,
74 void *data,
int verbose_level),
79 groups::strong_generators *&Strong_gens,
int verbose_level);
85 void make_first_three(
long int &j1,
long int &j2,
long int &j3,
int verbose_level);
94#define SPREAD_OF_TYPE_FTWKB 1
95#define SPREAD_OF_TYPE_KANTOR 2
96#define SPREAD_OF_TYPE_KANTOR2 3
97#define SPREAD_OF_TYPE_GANLEY 4
98#define SPREAD_OF_TYPE_LAW_PENTTILA 5
99#define SPREAD_OF_TYPE_DICKSON_KANTOR 6
100#define SPREAD_OF_TYPE_HUDSON 7
111 groups::matrix_group *
Mtx;
133 induced_actions::action_on_grassmannian *
AG;
140 poset_classification::classification_base_case *
Base_case;
153 poset_classification::poset_with_group_action *
Poset;
154 poset_classification::poset_classification *
gen;
161 geometry::klein_correspondence *
Klein;
183 poset_classification::poset_classification_control *Control,
193 void compute(
int verbose_level);
195 long int *candidates,
int nb_candidates,
196 long int *good_candidates,
int &nb_good_candidates,
201 long int *candidates,
int nb_candidates,
202 groups::strong_generators *Strong_gens,
203 solvers::diophant *&Dio,
long int *&col_labels,
212 int iso_cnt, groups::sims *Stab, groups::schreier &Orb,
213 long int *data,
int verbose_level);
217 int iso_cnt, groups::sims *Stab, groups::schreier &Orb,
218 long int *data,
int verbose_level);
221 long int *data,
int data_size,
int verbose_level);
222 void klein(std::ostream &ost,
224 int iso_cnt, groups::sims *Stab, groups::schreier &Orb,
225 long int *data,
int data_size,
int verbose_level);
227 geometry::projective_space *P3,
228 geometry::projective_space *P5,
229 geometry::grassmann *Gr,
230 long int *data,
int size,
231 int *&intersection_type,
int &highest_intersection_number,
236 void make_spread(
long int *data,
int type_of_spread,
int verbose_level);
240 void HMO(std::string &fname,
int verbose_level);
242 void print_spread(std::ostream &ost,
long int *data,
int sz);
243 void report2(isomorph &Iso,
int verbose_level);
244 void report3(isomorph &Iso, std::ostream &ost,
int verbose_level);
247 int h,
int &cnt,
int verbose_level);
251 void print(std::ostream &ost,
int len,
long int *S);
306 field_theory::finite_field *
F;
318 groups::strong_generators *
Sg;
329 std::vector<std::string> transform_coeffs,
330 std::vector<int> f_inverse_transform,
int verbose_level);
392 int *&col_color,
int &nb_colors,
438 int argc, std::string *argv,
468 void report_spread2(std::ostream &ost,
int spread_idx,
int verbose_level);
484 field_theory::finite_field *
F;
530 int line1,
int line2,
int verbose_level);
534 groups::strong_generators *Strong_gens,
537 actions::action *A, actions::action *A2,
538 groups::strong_generators *Strong_gens,
539 long int **&Sets,
int *&Prev,
int *&Label,
int *&first,
int *&len,
540 int *&isomorphism_type_of_spread,
543 long int *&points_covered_by_starter,
544 int &nb_points_covered_by_starter,
545 long int *starter,
int starter_size,
550 long int *&free_points2,
int &nb_free_points2,
long int *&free_point_idx,
551 long int *points_covered_by_starter,
552 int nb_points_covered_by_starter,
553 long int *starter,
int starter_size,
559 exact_cover *EC,
int starter_case,
560 long int *&live_blocks2,
int &nb_live_blocks2,
561 long int *points_covered_by_starter,
int nb_points_covered_by_starter,
562 long int *starter,
int starter_size,
581 field_theory::finite_field *
F;
588 geometry::andre_construction *
Andre;
593 geometry::andre_construction_line_element *
Line;
606 geometry::incidence_structure *
Inc;
607 data_structures::partitionstack *
Stack;
609 poset_classification::poset_classification_control *
Control;
610 poset_classification::poset_with_group_action *
Poset;
611 poset_classification::poset_classification *
arcs;
621 void init(
long int *spread_elements_numeric,
622 int k, actions::action *
An, actions::action *
An1,
623 data_structures_groups::vector_ge *spread_stab_gens,
624 ring_theory::longinteger_object &spread_stab_go,
628 int depth,
int verbose_level);
631 int check_arc(
long int *S,
int len,
int verbose_level);
634 long int *S,
int *subplane7,
637 void report(std::ostream &ost,
int verbose_level);
an orthogonal geometry O^epsilon(n,q)
tactical decomposition of an incidence structure with respect to a given group
the Singer cycle in a finite projective geometry
classification of packings in PG(3,q)
projective space PG(n,q) with automorphism group PGGL(n+1,q)
three skew lines in PG(3,q), used to classify spreads
void do_recoordinatize(long int i1, long int i2, long int i3, int verbose_level)
void compute_starter(long int *&S, int &size, groups::strong_generators *&Strong_gens, int verbose_level)
actions::action * A0_linear
int(* check_function_incremental)(int len, long int *S, void *check_function_incremental_data, int verbose_level)
void * check_function_incremental_data
void stabilizer_of_first_three(groups::strong_generators *&Strong_gens, int verbose_level)
geometry::grassmann * Grass
void compute_live_points_low_level(long int *&live_points, int &nb_live_points, int verbose_level)
void make_first_three(long int &j1, long int &j2, long int &j3, int verbose_level)
void compute_live_points(int verbose_level)
data_structures_groups::vector_ge * gens2
void init(int n, int k, field_theory::finite_field *F, geometry::grassmann *Grass, actions::action *A, actions::action *A2, int f_projective, int f_semilinear, int(*check_function_incremental)(int len, long int *S, void *data, int verbose_level), void *check_function_incremental_data, int verbose_level)
field_theory::finite_field * F
to classify spreads of PG(k-1,q) in PG(n-1,q) where k divides n
groups::matrix_group * Mtx
poset_classification::poset_with_group_action * Poset
poset_classification::poset_classification * gen
groups::strong_generators * Starter_Strong_gens
void unrank_subspace(int *M, long int a)
void save_klein_invariants(char *prefix, int iso_cnt, long int *data, int data_size, int verbose_level)
void print_elements_and_points()
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 init(projective_geometry::projective_space_with_action *PA, int k, int f_recoordinatize, 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 print(std::ostream &ost, int len, long int *S)
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 lifting_prepare_function_new(exact_cover *E, int starter_case, long int *candidates, int nb_candidates, groups::strong_generators *Strong_gens, solvers::diophant *&Dio, long int *&col_labels, int &f_ruled_out, int verbose_level)
void write_spread_to_file(int type_of_spread, int verbose_level)
void print_spread(std::ostream &ost, long int *data, int sz)
int incremental_check_function(int len, long int *S, int verbose_level)
induced_actions::action_on_grassmannian * AG
void report2(isomorph &Iso, int verbose_level)
void cooperstein_thas_quotients(isomorph &Iso, std::ofstream &f, int h, int &cnt, int verbose_level)
long int rank_subspace(int *M)
long int rank_point(int *v)
apps_geometry::singer_cycle * Sing
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 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)
void compute(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 init2(poset_classification::poset_classification_control *Control, 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)
void unrank_point(int *v, long int a)
layer1_foundations::orthogonal_geometry::orthogonal * O
projective_geometry::projective_space_with_action * PA
geometry::klein_correspondence * Klein
poset_classification::classification_base_case * Base_case
void compute_dual_spread(int *spread, int *dual_spread, int verbose_level)
to describe the construction of a known spread from the command line
~spread_create_description()
int read_arguments(int argc, std::string *argv, int verbose_level)
spread_create_description()
to create a known spread using a description from class spread_create_description
void init(spread_create_description *Descr, int verbose_level)
groups::strong_generators * Sg
spread_create_description * Descr
field_theory::finite_field * F
void apply_transformations(std::vector< std::string > transform_coeffs, std::vector< int > f_inverse_transform, int verbose_level)
creates spreads from partial spreads using class exact_cover
int nb_points_covered_by_starter
void prepare_free_points(int verbose_level)
groups::strong_generators * Strong_gens
long int * points_covered_by_starter
long int * free_point_list
int starter_number_of_cases
solvers::diophant * create_system(int verbose_level)
void compute_points_covered_by_starter(int verbose_level)
void find_coloring(solvers::diophant *Dio, int *&col_color, int &nb_colors, int verbose_level)
void init(spread_classify *S, exact_cover *E, long int *starter, int starter_size, int starter_case_number, int starter_number_of_cases, long int *candidates, int nb_candidates, groups::strong_generators *Strong_gens, int f_lex, int verbose_level)
description of an activity for a spread table
spread_table_activity_description()
~spread_table_activity_description()
int f_find_spreads_containing_one_line
int find_spreads_containing_one_line_line_idx
std::string export_spreads_to_csv_fname
int find_spreads_containing_two_lines_line1
std::string export_spreads_to_csv_idx_text
int read_arguments(int argc, std::string *argv, int verbose_level)
std::string print_spreads_idx_text
std::string find_spread_and_dualize_text
std::string dualize_packing_text
int f_find_spread_and_dualize
int f_find_spreads_containing_two_lines
std::string find_spread_text
int find_spreads_containing_two_lines_line2
int f_export_spreads_to_csv
an activity for a spread table
void init(spreads::spread_table_activity_description *Descr, packings::packing_classify *P, int verbose_level)
packings::packing_classify * P
void report_spreads(int *spread_idx, int nb, int verbose_level)
void perform_activity(int verbose_level)
void export_spreads_to_csv(std::string &fname, int *spread_idx, int nb, int verbose_level)
void report_spread2(std::ostream &ost, int spread_idx, int verbose_level)
spread_table_activity_description * Descr
spreads tables with a selection of isomorphism types
int * tmp_isomorphism_type_of_spread
void compute_live_blocks2(exact_cover *EC, int starter_case, long int *&live_blocks2, int &nb_live_blocks2, long int *points_covered_by_starter, int nb_points_covered_by_starter, long int *starter, int starter_size, int verbose_level)
void find_spreads_containing_two_lines(std::vector< int > &v, int line1, int line2, int verbose_level)
data_structures::bitvector * Bitvec
void compute_covered_points(long int *&points_covered_by_starter, int &nb_points_covered_by_starter, long int *starter, int starter_size, int verbose_level)
void compute_spread_table(int verbose_level)
void init(spread_classify *T, int f_select_spread, std::string &select_spread_text, std::string &path_to_spread_tables, int verbose_level)
spread_table_with_selection()
geometry::spread_tables * Spread_tables
long int total_nb_of_spreads
actions::action * A_on_spreads
std::string path_to_spread_tables
void make_spread_table(actions::action *A, actions::action *A2, groups::strong_generators *Strong_gens, long int **&Sets, int *&Prev, int *&Label, int *&first, int *&len, int *&isomorphism_type_of_spread, int verbose_level)
field_theory::finite_field * F
void compute_adjacency_matrix(int verbose_level)
int nb_iso_types_of_spreads
int find_spread(long int *set, int verbose_level)
void compute_spread_table_from_scratch(int verbose_level)
int test_if_packing_is_self_dual(int *packing, int verbose_level)
void predict_spread_table_length(actions::action *A, groups::strong_generators *Strong_gens, int verbose_level)
int is_adjacent(int i, int j)
long int * spread_orbit_length
std::string select_spread_text
void create_action_on_spreads(int verbose_level)
~spread_table_with_selection()
long int * get_spread(int spread_idx)
void compute_free_points2(long int *&free_points2, int &nb_free_points2, long int *&free_point_idx, long int *points_covered_by_starter, int nb_points_covered_by_starter, long int *starter, int starter_size, int verbose_level)
Andre / Bruck / Bose model of a translation plane.
poset_classification::poset_classification_control * Control
apps_combinatorics::tactical_decomposition * T
geometry::andre_construction * Andre
void classify_arcs(const char *prefix, int depth, int verbose_level)
translation_plane_via_andre_model()
int check_if_quadrangle_defines_a_subplane(long int *S, int *subplane7, int verbose_level)
poset_classification::poset_with_group_action * Poset
poset_classification::poset_classification * arcs
groups::strong_generators * strong_gens
int check_subplane(long int *S, int len, int verbose_level)
void classify_subplanes(const char *prefix, int verbose_level)
int * Line_through_two_points
void report(std::ostream &ost, int verbose_level)
actions::action * OnAndre
data_structures::partitionstack * Stack
void init(long int *spread_elements_numeric, int k, actions::action *An, actions::action *An1, data_structures_groups::vector_ge *spread_stab_gens, ring_theory::longinteger_object &spread_stab_go, std::string &label, int verbose_level)
~translation_plane_via_andre_model()
field_theory::finite_field * F
geometry::andre_construction_line_element * Line
geometry::incidence_structure * Inc
void create_latex_report(int verbose_level)
int check_arc(long int *S, int len, int verbose_level)
the orbiter library for the classification of combinatorial objects