10#ifndef ORBITER_SRC_LIB_TOP_LEVEL_GEOMETRY_TL_GEOMETRY_H_
11#define ORBITER_SRC_LIB_TOP_LEVEL_GEOMETRY_TL_GEOMETRY_H_
15namespace layer5_applications {
16namespace apps_geometry {
32 poset_classification::poset_classification_control *
Control;
61 int read_arguments(
int argc, std::string *argv,
int verbose_level);
95 groups::strong_generators *
SG;
97 poset_classification::poset_with_group_action *
Poset;
104 poset_classification::poset_classification *
gen;
114 void main(
int verbose_level);
118 groups::strong_generators *
SG,
124 long int *S,
int len,
int pt,
int nb_E,
int verbose_level);
125 int conic_test(
long int *S,
int len,
int pt,
int verbose_level);
127 long int *candidates,
int nb_candidates,
128 long int *good_candidates,
int &nb_good_candidates,
130 void print(
int len,
long int *S);
137 long int *candidates,
int nb_candidates,
138 groups::strong_generators *Strong_gens,
139 solvers::diophant *&Dio,
long int *&col_labels,
145 void report(isomorph &Iso,
int verbose_level);
148 long int *data,
int verbose_level);
174 field_theory::finite_field *
F;
182 ring_theory::longinteger_object
go;
186 poset_classification::poset_with_group_action *
Poset;
187 poset_classification::poset_classification *
Gen;
188 geometry::projective_space *
P;
196 void init(
int q,
int d,
int n,
int k,
199 long int *candidates,
int nb_candidates,
200 long int *good_candidates,
int &nb_good_candidates,
251 poset_classification::poset_classification *
gen;
252 poset_classification::poset_classification_control *
Control;
253 poset_classification::poset_with_group_action *
Poset;
283 actions::action *
A, actions::action *
A_lines,
291 void compute_orbits(groups::strong_generators *Strong_gens,
int verbose_level);
292 void choose_orbit(
int orbit_no,
int &f_hit_favorite,
int verbose_level);
295 long int *the_favorite_representative,
316 field_theory::finite_field *
F;
320 algebraic_geometry::cubic_curve *
CC;
336 invariant_relations::classification_step *
Curves;
352 void upstep(
int verbose_level);
355 int *Elt,
int &iso_type,
int verbose_level);
362 void report(std::ostream &ost,
int verbose_level);
383 field_theory::finite_field *
F;
385 algebraic_geometry::cubic_curve *
CC;
392 induced_actions::action_on_homogeneous_polynomials *
AonHPD_3_3;
400 void init(algebraic_geometry::cubic_curve *
CC, actions::action *
A,
int verbose_level);
416 field_theory::finite_field *
F;
417 geometry::hermitian *
H;
423 geometry::projective_space *
P;
424 groups::strong_generators *
sg;
435 poset_classification::poset_classification_control *
Control;
436 poset_classification::poset_with_group_action *
Poset;
437 poset_classification::poset_classification *
gen;
444 void init(
int n,
int Q,
int verbose_level);
446 void init2(
int verbose_level);
447 void compute(
int depth,
int verbose_level);
449 long int *candidates,
int nb_candidates,
450 long int *good_candidates,
int &nb_good_candidates,
491 field_theory::finite_field *
Fq;
492 field_theory::finite_field *
FQ;
493 field_theory::subfield_structure *
SubS;
494 geometry::projective_space *
P;
505 algebra::vector_space *
VS;
506 poset_classification::poset_classification_control *
Control1;
507 poset_classification::poset_with_group_action *
Poset1;
508 poset_classification::poset_classification *
Gen;
515 geometry::desarguesian_spread *
D;
520 geometry::desarguesian_spread *
D1;
540 poset_classification::poset_classification *
Gen_stab;
542 poset_classification::poset_classification_control *
Control2;
543 poset_classification::poset_with_group_action *
Poset2;
544 poset_classification::poset_classification *
Gen2;
553 std::string &poly_q, std::string &poly_Q,
556 int test_set(
int len,
long int *S,
int verbose_level);
558 int &nb_nodes,
int *&Intersection_dimensions,
564 int level,
int orbit_at_level,
565 groups::strong_generators *strong_gens,
568 long int *candidates,
int nb_candidates,
569 groups::strong_generators *Strong_gens_previous,
574 int level,
int orbit_at_level,
575 groups::strong_generators *&strong_gens,
578 int level,
int orbit_at_level,
579 long int *candidates,
int nb_candidates,
580 groups::strong_generators *Strong_gens_previous,
581 groups::strong_generators *&strong_gens,
584 long int *candidates,
int nb_candidates,
585 groups::strong_generators *&strong_gens,
607 poset_classification::poset_classification_control *
Control;
636 groups::linear_group *
LG;
640 poset_classification::poset_with_group_action *
Poset;
641 poset_classification::poset_classification *
gen;
647 orthogonal_geometry::orthogonal *
O;
657 geometry::klein_correspondence *
K;
668 groups::linear_group *
LG,
671 long int *candidates,
int nb_candidates,
672 long int *good_candidates,
int &nb_good_candidates,
674 void print(std::ostream &ost,
long int *S,
int len);
675 void make_graphs(orbiter_kernel_system::orbiter_data_file *ODF,
677 int f_split,
int split_r,
int split_m,
679 const char *fname_mask,
681 void make_one_graph(orbiter_kernel_system::orbiter_data_file *ODF,
685 graph_theory::colored_graph *&CG,
687 void create_graph(orbiter_kernel_system::orbiter_data_file *ODF,
689 long int *candidates,
int nb_candidates,
690 graph_theory::colored_graph *&CG,
693 long int *candidates,
int nb_points,
694 int *point_color,
int &nb_colors_used,
int verbose_level);
723 groups::matrix_group *
Mtx;
724 orthogonal_geometry::orthogonal *
O;
725 field_theory::finite_field *
F;
730 algebra::vector_space *
VS;
731 poset_classification::poset_classification_control *
Control;
732 poset_classification::poset_with_group_action *
Poset;
733 poset_classification::poset_classification *
Gen;
748 int group_generator_size,
749 int f_group_order_target,
const char *group_order_target,
751 void init_group(
int *group_generator_data,
int group_generator_size,
752 int f_group_order_target,
const char *group_order_target,
754 void init(actions::action *
A,
755 orthogonal_geometry::orthogonal *
O,
762 ring_theory::longinteger_object *&Rank_table,
int &nb_maximals,
766 long int *candidates,
int nb_candidates,
767 long int *good_candidates,
int &nb_good_candidates,
770 int *candidates,
int nb_candidates,
771 int *good_candidates,
int &nb_good_candidates,
774 data_structures_groups::group_container &G,
775 ring_theory::longinteger_object &go_G);
776 void get_orbit_length(
int orbit_idx, ring_theory::longinteger_object &length);
779 long int *set,
int verbose_level);
781 long int *set,
int verbose_level);
800 geometry::incidence_structure *
Inc;
802 poset_classification::poset_classification_control *
Control;
803 poset_classification::poset_with_group_action *
Poset;
804 poset_classification::poset_classification *
gen;
831 void init(geometry::incidence_structure *
Inc, actions::action *
A,
int verbose_level);
838 int level,
int f_all,
int verbose_level);
840 int starter_level,
int level,
int verbose_level);
855 field_theory::finite_field *
F;
863 groups::strong_generators *
SG;
865 geometry::projective_space *
P;
877 geometry::incidence_structure *
Inc;
884 void init(
int n, field_theory::finite_field *
F, actions::action *
A,
885 actions::action *
A2,
int verbose_level);
907 field_theory::finite_field *
F;
916 groups::strong_generators *
SG;
917 ring_theory::longinteger_object
go;
918 groups::wreath_product *
W;
919 algebra::vector_space *
VS;
920 poset_classification::poset_classification_control *
Control;
921 poset_classification::poset_with_group_action *
Poset;
922 poset_classification::poset_classification *
Gen;
929 field_theory::finite_field *
F, groups::linear_group *LG,
932 poset_classification::poset_classification_control *
Control,
937 long int *candidates,
int nb_candidates,
938 long int *good_candidates,
int &nb_good_candidates,
940 void report(
int f_poset_classify,
int poset_classify_depth,
941 graphics::layered_graph_draw_options *draw_options,
970 int intermediate_subset_size,
971 std::string &fname_mask,
int nb, std::string &column_label,
972 std::string &fname_out,
976 groups::strong_generators *SG, std::ostream &ost, std::string &fname_base,
980 int *Elt, std::ostream &ost, std::string &fname_base,
tactical decomposition of an incidence structure with respect to a given group
description of a classification problem of arcs in a geometry
arc_generator_description()
int f_has_forbidden_point_set
int f_test_nb_Eckardt_points
~arc_generator_description()
int f_poset_classification_control
std::string forbidden_point_set_string
int read_arguments(int argc, std::string *argv, int verbose_level)
poset_classification::poset_classification_control * Control
std::string override_group_label
classification of arcs in desarguesian projective planes
void compute_line_type(long int *set, int len, int verbose_level)
poset_classification::poset_with_group_action * Poset
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)
arc_generator_description * Descr
void compute_starter(int verbose_level)
void report_decompositions(isomorph &Iso, std::ostream &ost, int orbit, long int *data, int verbose_level)
void print(int len, long int *S)
void init(arc_generator_description *Descr, projective_geometry::projective_space_with_action *PA, groups::strong_generators *SG, int verbose_level)
void point_unrank(int *v, int rk)
void report(isomorph &Iso, int verbose_level)
void report_do_the_work(std::ostream &ost, isomorph &Iso, int verbose_level)
void main(int verbose_level)
groups::strong_generators * SG
int conic_test(long int *S, int len, int pt, 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)
int test_nb_Eckardt_points(long int *S, int len, int pt, int nb_E, int verbose_level)
projective_geometry::projective_space_with_action * PA
void report_stabilizer(isomorph &Iso, std::ostream &ost, int orbit, int verbose_level)
poset_classification::poset_classification * gen
void prepare_generator(int verbose_level)
void print_set_in_affine_plane(int len, long int *S)
arc lifting according to Simeon Ball and Ray Hill
ring_theory::longinteger_object go
poset_classification::poset_with_group_action * Poset
void do_covering_problem(data_structures_groups::set_and_stabilizer *SaS)
poset_classification::poset_classification * Gen
void init(int q, int d, int n, int k, int verbose_level)
geometry::projective_space * P
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)
field_theory::finite_field * F
classification of objects in projective planes
void choose_orbit(int orbit_no, int &f_hit_favorite, int verbose_level)
poset_classification::poset_classification * gen
actions::action * A_lines
int print_generators_verbose_level
~choose_points_or_lines()
void null_representative()
ring_theory::longinteger_object * stab_order
poset_classification::poset_with_group_action * Poset
long int * representative
void compute_orbits_from_sims(groups::sims *G, int verbose_level)
poset_classification::poset_classification_control * Control
void compute_orbits(groups::strong_generators *Strong_gens, int verbose_level)
void init(const char *label, void *data, actions::action *A, actions::action *A_lines, int f_choose_lines, int nb_points_or_lines, int(*check_function)(int len, long int *S, void *data, int verbose_level), int t0, int verbose_level)
void free_representative()
int(* check_function)(int len, long int *S, void *data, int verbose_level)
int favorite_orbit_representative(int *transporter, int *transporter_inv, long int *the_favorite_representative, int verbose_level)
groups::strong_generators * Stab_Strong_gens
classification of cubic curves in PG(2,q)
void family2_recognize(int *Iso_type, int verbose_level)
void familyH_recognize(int *Iso_type, int verbose_level)
void familyE_recognize(int *Iso_type, int verbose_level)
cubic_curve_with_action * CCA
void report(std::ostream &ost, int verbose_level)
invariant_relations::classification_step * Curves
field_theory::finite_field * F
void upstep(int verbose_level)
int recognize(int *eqn_in, int *Elt, int &iso_type, int verbose_level)
void test_orbits(int verbose_level)
void family3_recognize(int *Iso_type, int verbose_level)
void compute_starter(int verbose_level)
void familyG_recognize(int *Iso_type, int verbose_level)
void family1_recognize(int *Iso_type, int verbose_level)
void init(projective_geometry::projective_space_with_action *PA, cubic_curve_with_action *CCA, arc_generator_description *Descr, int verbose_level)
algebraic_geometry::cubic_curve * CC
invariant_relations::flag_orbits * Flag_orbits
void do_classify(int verbose_level)
void downstep(int verbose_level)
domain for cubic curves in projective space with automorphism group
algebraic_geometry::cubic_curve * CC
void init(algebraic_geometry::cubic_curve *CC, actions::action *A, int verbose_level)
field_theory::finite_field * F
cubic_curve_with_action()
~cubic_curve_with_action()
induced_actions::action_on_homogeneous_polynomials * AonHPD_3_3
classification of Hermitian spreads
poset_classification::poset_classification_control * Control
groups::strong_generators * sg
void read_arguments(int argc, std::string *argv)
void init(int n, int Q, int verbose_level)
hermitian_spreads_classify()
~hermitian_spreads_classify()
field_theory::finite_field * F
poset_classification::poset_classification * gen
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)
geometry::projective_space * P
long int ** Intersection_sets
poset_classification::poset_with_group_action * Poset
void compute(int depth, int verbose_level)
void init2(int verbose_level)
classification of linear sets
geometry::desarguesian_spread * D1
geometry::desarguesian_spread * D
int secondary_nb_candidates
poset_classification::poset_classification_control * Control2
void construct_semifield(int orbit_for_W, int verbose_level)
void init_compute_stabilizer(int argc, const char **argv, int level, int orbit_at_level, long int *candidates, int nb_candidates, groups::strong_generators *Strong_gens_previous, groups::strong_generators *&strong_gens, int verbose_level)
geometry::projective_space * P
void read_data_file(int depth, int verbose_level)
field_theory::finite_field * FQ
poset_classification::poset_classification * Gen
groups::strong_generators * Strong_gens
poset_classification::poset_classification_control * Control_stab
poset_classification::poset_classification * Gen2
void init_secondary(int argc, const char **argv, long int *candidates, int nb_candidates, groups::strong_generators *Strong_gens_previous, int verbose_level)
void calculate_intersections(int depth, int verbose_level)
int(* extra_test_func)(void *, int len, long int *S, void *extra_test_func_data, int verbose_level)
int test_set_secondary(int len, long int *S, int verbose_level)
spreads::spread_classify * T
int secondary_schreier_depth
poset_classification::poset_classification_control * Control1
void init(int s, int n, int q, std::string &poly_q, std::string &poly_Q, int depth, int f_identify, int verbose_level)
field_theory::subfield_structure * SubS
int test_set(int len, long int *S, int verbose_level)
poset_classification::poset_classification * Gen_stab
long int * secondary_candidates
algebra::vector_space * VS
poset_classification::poset_with_group_action * Poset2
void print_orbits_at_level(int level)
poset_classification::poset_with_group_action * Poset_stab
void compute_intersection_types_at_level(int level, int &nb_nodes, int *&Intersection_dimensions, int verbose_level)
int f_has_extra_test_func
void compute_stabilizer_of_linear_set(int argc, const char **argv, int level, int orbit_at_level, groups::strong_generators *&strong_gens, int verbose_level)
void classify_secondary(int argc, const char **argv, int level, int orbit_at_level, groups::strong_generators *strong_gens, int verbose_level)
poset_classification::poset_with_group_action * Poset1
void do_classify(int verbose_level)
int vector_space_dimension
void * extra_test_func_data
field_theory::finite_field * Fq
void do_compute_stabilizer(int level, int orbit_at_level, long int *candidates, int nb_candidates, groups::strong_generators *&strong_gens, int verbose_level)
int secondary_orbit_at_level
int f_use_invariant_subset_if_available
void do_classify_secondary(int verbose_level)
description of a problem of classification of ovoids in orthogonal spaces
ovoid_classify_description()
poset_classification::poset_classification_control * Control
~ovoid_classify_description()
int read_arguments(int argc, std::string *argv, int verbose_level)
classification of ovoids in orthogonal spaces
poset_classification::poset_classification * gen
void compute_coloring(long int *starter, int starter_size, long int *candidates, int nb_points, int *point_color, int &nb_colors_used, int verbose_level)
void print(std::ostream &ost, long int *S, int len)
poset_classification::poset_with_group_action * Poset
geometry::klein_correspondence * K
void create_graph(orbiter_kernel_system::orbiter_data_file *ODF, int orbit_idx, long int *candidates, int nb_candidates, graph_theory::colored_graph *&CG, int verbose_level)
groups::linear_group * LG
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 init(ovoid_classify_description *Descr, groups::linear_group *LG, int &verbose_level)
void make_graphs(orbiter_kernel_system::orbiter_data_file *ODF, std::string &prefix, int f_split, int split_r, int split_m, int f_lexorder_test, const char *fname_mask, int verbose_level)
orthogonal_geometry::orthogonal * O
void make_one_graph(orbiter_kernel_system::orbiter_data_file *ODF, std::string &prefix, int orbit_idx, int f_lexorder_test, graph_theory::colored_graph *&CG, int verbose_level)
ovoid_classify_description * Descr
the polar space arising from an orthogonal geometry
field_theory::finite_field * F
poset_classification::poset_classification_control * Control
groups::strong_generators * Strong_gens
void init_group(int *group_generator_data, int group_generator_size, int f_group_order_target, const char *group_order_target, int verbose_level)
void init(actions::action *A, orthogonal_geometry::orthogonal *O, int epsilon, int n, int k, field_theory::finite_field *F, int depth, int verbose_level)
void unrank_point(int *v, int rk)
poset_classification::poset_with_group_action * Poset
int f_has_strong_generators_allocated
orthogonal_geometry::orthogonal * O
void compute_cosets(int depth, int orbit_idx, int verbose_level)
void dual_polar_graph(int depth, int orbit_idx, ring_theory::longinteger_object *&Rank_table, int &nb_maximals, int verbose_level)
void init2(int depth, int verbose_level)
int get_orbit_length_as_int(int orbit_idx)
int f_use_invariant_subset_if_available
algebra::vector_space * VS
void init_group_by_base_images(int *group_generator_data, int group_generator_size, int f_group_order_target, const char *group_order_target, int verbose_level)
void list_whole_orbit(int depth, int orbit_idx, int f_limit, int limit)
void orbit_element_rank(int &orbit_idx, long int &rank, long int *set, int verbose_level)
int f_has_strong_generators
void get_orbit_length(int orbit_idx, ring_theory::longinteger_object &length)
void show_stabilizer(int depth, int orbit_idx, int verbose_level)
groups::matrix_group * Mtx
poset_classification::poset_classification * Gen
void get_stabilizer(int orbit_idx, data_structures_groups::group_container &G, ring_theory::longinteger_object &go_G)
void compute_orbits(int t0, int verbose_level)
void test_if_closed_under_cosets(int *S, int len, int *candidates, int nb_candidates, int *good_candidates, int &nb_good_candidates, int verbose_level)
void orbit_element_unrank(int orbit_idx, long int rank, long int *set, int verbose_level)
void test_if_in_perp(long int *S, int len, long int *candidates, int nb_candidates, long int *good_candidates, int &nb_good_candidates, int verbose_level)
classification of blocking sets in projective planes
int recursive_search_for_blocking_set(int input_no, int starter_level, int level, int verbose_level)
void save_line_intersection_size(int level)
poset_classification::poset_classification * gen
void restore_line_intersection_size(int level)
int test_blocking_set_upper_bound_only(int len, long int *S, int verbose_level)
int test_level(int depth, int verbose_level)
void find_partial_blocking_sets(int depth, int verbose_level)
int test_blocking_set(int len, long int *S, int verbose_level)
void init(geometry::incidence_structure *Inc, actions::action *A, int verbose_level)
std::deque< std::vector< int > > solutions
int blocking_set_size_desired
data_structures::fancy_set * active_set
data_structures::fancy_set * Line_intersections
int * search_nb_candidates
void search_for_blocking_set(int input_no, int level, int f_all, int verbose_level)
poset_classification::poset_classification_control * Control
int f_blocking_set_size_desired
geometry::incidence_structure * Inc
poset_classification::poset_with_group_action * Poset
the Singer cycle in a finite projective geometry
void init_lines(int verbose_level)
geometry::incidence_structure * Inc
int * singer_point_list_inv
std::string * line_orbit_label_tex
groups::strong_generators * SG
void init(int n, field_theory::finite_field *F, actions::action *A, actions::action *A2, int verbose_level)
data_structures_groups::vector_ge * nice_gens
geometry::projective_space * P
std::string * line_orbit_label
apps_combinatorics::tactical_decomposition * T
ring_theory::longinteger_object target_go
field_theory::finite_field * F
classification of tensors under the wreath product group
void init(field_theory::finite_field *F, groups::linear_group *LG, int verbose_level)
void create_restricted_action_on_rank_one_tensors(int verbose_level)
groups::strong_generators * SG
poset_classification::poset_with_group_action * Poset
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)
field_theory::finite_field * F
void report(int f_poset_classify, int poset_classify_depth, graphics::layered_graph_draw_options *draw_options, int verbose_level)
poset_classification::poset_classification * Gen
groups::wreath_product * W
algebra::vector_space * VS
ring_theory::longinteger_object go
int vector_space_dimension
void classify_poset(int depth, poset_classification::poset_classification_control *Control, int verbose_level)
poset_classification::poset_classification_control * Control
catch all class for geometry
~top_level_geometry_global()
top_level_geometry_global()
void set_stabilizer_projective_space(projective_geometry::projective_space_with_action *PA, int intermediate_subset_size, std::string &fname_mask, int nb, std::string &column_label, std::string &fname_out, int verbose_level)
void report_decomposition_by_single_automorphism(projective_geometry::projective_space_with_action *PA, int *Elt, std::ostream &ost, std::string &fname_base, int verbose_level)
void report_decomposition_by_group(projective_geometry::projective_space_with_action *PA, groups::strong_generators *SG, std::ostream &ost, std::string &fname_base, int verbose_level)
projective space PG(n,q) with automorphism group PGGL(n+1,q)
to classify spreads of PG(k-1,q) in PG(n-1,q) where k divides n
the orbiter library for the classification of combinatorial objects