8#ifndef SRC_LIB_TOP_LEVEL_SURFACES_SURFACES_AND_ARCS_SURFACES_AND_ARCS_H_
9#define SRC_LIB_TOP_LEVEL_SURFACES_SURFACES_AND_ARCS_SURFACES_AND_ARCS_H_
12namespace layer5_applications {
13namespace applications_in_algebraic_geometry {
14namespace cubic_surfaces_and_arcs {
29 field_theory::finite_field *
F;
31 algebraic_geometry::surface_domain *
Surf;
44 algebraic_geometry::web_of_cubic_curves *
Web;
57 void report(std::ostream &ost,
int verbose_level);
76 data_structures_groups::set_and_stabilizer *
The_arc;
80 poset_classification::poset_with_group_action *
Poset;
81 poset_classification::poset_classification_control *
Control;
103 void recognize(
long int *pair,
int *transporter,
104 int &orbit_idx,
int verbose_level);
125 data_structures_groups::set_and_stabilizer *
The_pair;
143 actions::action *
A, actions::action *
A_on_arc,
145 void recognize(
int *partition,
int *transporter,
146 int &orbit_idx,
int verbose_level);
164 field_theory::finite_field *
F;
168 algebraic_geometry::surface_domain *
Surf;
173 poset_classification::poset_with_group_action *
Poset1;
174 poset_classification::poset_with_group_action *
Poset2;
198 poset_classification::poset_classification_control *Control1,
199 poset_classification::poset_classification_control *Control2,
202 void report(std::ostream &ost);
206 long int *candidates,
int nb_candidates,
207 long int *good_candidates,
int &nb_good_candidates,
210 long int *candidates,
int nb_candidates,
211 long int *good_candidates,
int &nb_good_candidates,
214 int &type,
int *transporter,
int verbose_level);
216 poset_classification::poset_classification_control *Control1,
217 poset_classification::poset_classification_control *Control2,
220 void upstep(
int verbose_level);
223 int f_with_stabilizers);
225 long int *planes6,
int *transporter,
int &orbit_index,
228 int *transporter,
int &orbit_index,
int verbose_level);
264 int f_test_nb_Eckardt_points,
int nb_E,
267 void recognize(
long int *arc6,
int *transporter,
268 int &orbit_not_on_conic_idx,
int verbose_level);
310 poset_classification::poset_classification_control *Control_six_arcs,
312 int f_test_nb_Eckardt_points,
int nb_E,
315 graphics::layered_graph_draw_options *Opt,
317 void report2(std::ostream &ost,
318 graphics::layered_graph_draw_options *Opt,
357 void report(std::ostream &ost,
358 graphics::layered_graph_draw_options *Opt,
381 algebraic_geometry::surface_object *
SO;
420 int f,
int orbit_idx,
long int *Lines27,
int *eqn20,
423 void report(
int verbose_level);
424 void report2(std::ostream &ost,
int verbose_level);
436 int plane_idx,
int verbose_level);
514 long int *P6_local,
long int *P6_local_canonical,
515 int &orbit_not_on_conic_idx,
int verbose_level);
518 int pair_orbit_idx,
int &partition_orbit_idx,
519 int *the_partition4,
int verbose_level);
521 void embed(
int *Elt_A3,
int *Elt_A4,
int verbose_level);
522 void report_product(std::ostream &ost,
int *Elt,
int verbose_level);
551 ring_theory::longinteger_object
A4_go;
595 groups::strong_generators *&Aut_gens,
int verbose_level);
615 field_theory::finite_field *
F;
617 groups::linear_group *
LG4;
626 algebraic_geometry::surface_domain *
Surf;
646 invariant_relations::classification_step *
Surfaces;
654 poset_classification::poset_classification_control *Control_six_arcs,
655 int f_test_nb_Eckardt_points,
int nb_E,
659 int &cur_flag_orbit,
long int *Flag,
int verbose_level);
661 graphics::layered_graph_draw_options *draw_options,
663 void report2(std::ostream &ost,
664 graphics::layered_graph_draw_options *draw_options,
699 data_structures_groups::vector_ge *
cosets;
732 data_structures_groups::vector_ge *
cosets,
733 data_structures_groups::vector_ge *&
coset_reps,
747 groups::strong_generators *gens_for_stabilizer_of_trihedral_pair,
754 void report(std::ostream &ost,
int verbose_level);
classification of double triplets in PG(3,q)
~classify_trihedral_pairs()
algebraic_geometry::surface_domain * Surf
void downstep(int verbose_level)
void identify_three_planes(int p1, int p2, int p3, int &type, int *transporter, int verbose_level)
classify_trihedral_pairs()
groups::strong_generators * gens_type1
void upstep(int verbose_level)
field_theory::finite_field * F
poset_classification::poset_classification * orbits_on_trihedra_type1
poset_classification::poset_with_group_action * Poset1
void list_orbits_on_trihedra_type1(std::ostream &ost, int f_detailed)
void report(std::ostream &ost)
void early_test_func_type2(long int *S, int len, long int *candidates, int nb_candidates, long int *good_candidates, int &nb_good_candidates, int verbose_level)
void classify_orbits_on_trihedra(poset_classification::poset_classification_control *Control1, poset_classification::poset_classification_control *Control2, int verbose_level)
void print_trihedral_pairs_summary(std::ostream &ost)
void init(cubic_surfaces_in_general::surface_with_action *Surf_A, int verbose_level)
cubic_surfaces_in_general::surface_with_action * Surf_A
void list_orbits_on_trihedra_type2(std::ostream &ost, int f_detailed)
void early_test_func_type1(long int *S, int len, long int *candidates, int nb_candidates, long int *good_candidates, int &nb_good_candidates, int verbose_level)
int nb_orbits_trihedral_pairs
void report_summary(std::ostream &ost)
invariant_relations::classification_step * Trihedral_pairs
groups::strong_generators * gens_type2
poset_classification::poset_classification * orbits_on_trihedra_type2
groups::strong_generators * identify_trihedral_pair_and_get_stabilizer(long int *planes6, int *transporter, int &orbit_index, int verbose_level)
invariant_relations::flag_orbits * Flag_orbits
void print_trihedral_pairs(std::ostream &ost, int f_with_stabilizers)
void classify(poset_classification::poset_classification_control *Control1, poset_classification::poset_classification_control *Control2, int verbose_level)
void identify_trihedral_pair(long int *planes6, int *transporter, int &orbit_index, int verbose_level)
poset_classification::poset_with_group_action * Poset2
int nb_orbits_ordered_total
classification of cubic surfaces using lifted 6-arcs
~surfaces_arc_lifting_upstep()
ring_theory::longinteger_object A4_go
algebraic_geometry::seventytwo_cases Seventytwo[72]
surfaces_arc_lifting_definition_node * D
void compute_stabilizer(surfaces_arc_lifting_definition_node *D, groups::strong_generators *&Aut_gens, int verbose_level)
void process_flag_orbit(int verbose_level)
void make_seventytwo_cases(int verbose_level)
surfaces_arc_lifting * Lift
void init(surfaces_arc_lifting *Lift, int verbose_level)
surfaces_arc_lifting_upstep()
long int * Flag_representation
void process_tritangent_plane(surfaces_arc_lifting_definition_node *D, int verbose_level)
long int * Flag2_representation
orbits on pairs of points of a non-conical six-arc in PG(2,q)
int total_nb_orbits_on_partitions
int * partition_orbit_len
poset_classification::poset_classification * Orbits_on_pairs
arc_partition * Table_orbits_on_partition
poset_classification::poset_with_group_action * Poset
actions::action * A_on_arc
void recognize(long int *pair, int *transporter, int &orbit_idx, int verbose_level)
poset_classification::poset_classification_control * Control
int * partition_orbit_first
void init(surfaces_arc_lifting *SAL, int arc_idx, actions::action *A, int verbose_level)
surfaces_arc_lifting * SAL
data_structures_groups::set_and_stabilizer * The_arc
flag orbit node which is a definition node and hence describes a surface
void init_with_27_lines(surfaces_arc_lifting *Lift, int f, int orbit_idx, long int *Lines27, int *eqn20, int verbose_level)
void tally_f2(int verbose_level)
void report_cosets_detailed(std::ostream &ost, int verbose_level)
long int three_lines[45 *3]
surfaces_arc_lifting_definition_node()
groups::strong_generators * Flag_stab_gens
algebraic_geometry::seventytwo_cases Seventytwo[45 *72]
void report_HDS_bottom(std::ostream &ost)
void report_cosets_HDS(std::ostream &ost, int verbose_level)
void report_cosets(std::ostream &ost, int verbose_level)
algebraic_geometry::surface_object * SO
void report_tally_F2(std::ostream &ost, int verbose_level)
~surfaces_arc_lifting_definition_node()
void report_cosets_T3(std::ostream &ost, int verbose_level)
int three_lines_idx[45 *3]
void report_Clebsch_maps(std::ostream &ost, int verbose_level)
cubic_surfaces_in_general::surface_object_with_action * SOA
data_structures_groups::vector_ge * coset_reps
void report_HDS_top(std::ostream &ost)
void report2(std::ostream &ost, int verbose_level)
data_structures::tally * tally_F2
ring_theory::longinteger_object Flag_stab_go
void report_T3_top(std::ostream &ost)
void report(int verbose_level)
surfaces_arc_lifting * Lift
int * relative_order_table
void report_T3_bottom(std::ostream &ost)
surfaces_arc_lifting_trace ** T
void report_Clebsch_maps_for_one_tritangent_plane(std::ostream &ost, int plane_idx, int verbose_level)
an instance of a cubic surface together with its stabilizer
tracing data to be used during the classification of cubic surfaces using lifted 6-arcs
surfaces_arc_lifting_trace()
void move_plane_and_arc(long int *P6a, int verbose_level)
void embed(int *Elt_A3, int *Elt_A4, int verbose_level)
void compute_beta2(int orbit_not_on_conic_idx, int pair_orbit_idx, int &partition_orbit_idx, int *the_partition4, int verbose_level)
surfaces_arc_lifting_upstep * Up
algebraic_geometry::seventytwo_cases The_case
void compute_beta1(algebraic_geometry::seventytwo_cases *The_case, int verbose_level)
void init(surfaces_arc_lifting_upstep *Up, int seventytwo_case_idx, int verbose_level)
void make_arc_canonical(long int *P6_local, long int *P6_local_canonical, int &orbit_not_on_conic_idx, int verbose_level)
void process_flag_orbit(surfaces_arc_lifting_upstep *Up, int verbose_level)
void move_arc(int verbose_level)
void report_product(std::ostream &ost, int *Elt, int verbose_level)
void lift_group_elements_and_move_two_lines(int verbose_level)
~surfaces_arc_lifting_trace()
to create a single cubic surface from an arc using arc lifting
cubic_surfaces_in_general::surface_clebsch_map * Clebsch
std::string arc_label_short
void report(std::ostream &ost, graphics::layered_graph_draw_options *Opt, int verbose_level)
surface_classify_using_arc * SCA
~surface_create_by_arc_lifting()
void init(int arc_idx, surface_classify_using_arc *SCA, int verbose_level)
void report_summary(std::ostream &ost, int verbose_level)
surface_create_by_arc_lifting()
cubic_surfaces_in_general::surface_object_with_action * SOA
a Clebsch map associated with a cubic surface and a choice of half double six
classification of cubic surfaces using nonconial six-arcs as substructures
six_arcs_not_on_a_conic * Six_arcs
void report2(std::ostream &ost, graphics::layered_graph_draw_options *Opt, int verbose_level)
cubic_surfaces_in_general::surface_with_action * Surf_A
void classify_surfaces_through_arcs_and_trihedral_pairs(poset_classification::poset_classification_control *Control_six_arcs, cubic_surfaces_in_general::surface_with_action *Surf_A, int f_test_nb_Eckardt_points, int nb_E, int verbose_level)
void report_decomposition_matrix(std::ostream &ost, int verbose_level)
void report(graphics::layered_graph_draw_options *Opt, int verbose_level)
surface_create_by_arc_lifting * SCAL
surface_classify_using_arc()
apps_geometry::arc_generator_description * Descr
~surface_classify_using_arc()
creates a cubic surface from a 6-arc in a plane using trihedral pairs
void report_equation(std::ostream &ost)
field_theory::finite_field * F
void create_surface_and_group(cubic_surfaces_in_general::surface_with_action *Surf_A, long int *Arc6, int verbose_level)
void report(std::ostream &ost, int verbose_level)
void create_web_of_cubic_curves(int verbose_level)
algebraic_geometry::surface_domain * Surf
algebraic_geometry::web_of_cubic_curves * Web
cubic_surfaces_in_general::surface_with_action * Surf_A
trihedral_pair_with_action * Trihedral_pair
orbits on the partitions of the remaining four points of a non-conical arc
actions::action * A_on_partition
void init(arc_orbits_on_pairs *OP, int pair_orbit_idx, actions::action *A, actions::action *A_on_arc, int verbose_level)
actions::action * A_on_arc
data_structures_groups::set_and_stabilizer * The_pair
long int arc_remainder[4]
void recognize(int *partition, int *transporter, int &orbit_idx, int verbose_level)
actions::action * A_on_rest
int nb_orbits_on_partition
groups::schreier * Orbits_on_partition
classification of cubic surfaces using lifted 6-arcs
invariant_relations::classification_step * Surfaces
int * flag_orbit_on_arcs_not_on_a_conic_idx
void init(cubic_surfaces_in_general::surface_with_action *Surf_A, poset_classification::poset_classification_control *Control_six_arcs, int f_test_nb_Eckardt_points, int nb_E, int verbose_level)
arc_orbits_on_pairs * Table_orbits_on_pairs
void report_flag_orbits_in_detail(std::ostream &ost, int verbose_level)
int * flag_orbit_on_partition_idx
six_arcs_not_on_a_conic * Six_arcs
void downstep_one_arc(int arc_idx, int &cur_flag_orbit, long int *Flag, int verbose_level)
groups::linear_group * LG4
algebraic_geometry::surface_domain * Surf
void downstep(int verbose_level)
void report2(std::ostream &ost, graphics::layered_graph_draw_options *draw_options, int verbose_level)
void report(graphics::layered_graph_draw_options *draw_options, int verbose_level)
void report_flag_orbits(std::ostream &ost, int verbose_level)
void report_surfaces_in_detail(std::ostream &ost, int verbose_level)
invariant_relations::flag_orbits * Flag_orbits
int * flag_orbit_on_pairs_idx
cubic_surfaces_in_general::surface_with_action * Surf_A
field_theory::finite_field * F
a trihedral pair and its stabilizer
void loop_over_trihedral_pairs(data_structures_groups::vector_ge *cosets, data_structures_groups::vector_ge *&coset_reps, int *&aut_T_index, int *&aut_coset_index, int verbose_level)
int The_six_plane_equations[6 *4]
int Iso_type_as_double_triplet[120]
int nb_double_triplet_types
data_structures_groups::vector_ge * cosets
data_structures::set_of_sets * Double_triplet_types
long int plane6_by_dual_ranks[6]
actions::action * A_on_equations
trihedral_pair_with_action()
~trihedral_pair_with_action()
int * The_surface_equations
groups::strong_generators * Aut_gens
void create_clebsch_system(int verbose_level)
int trihedral_pair_orbit_index
data_structures::tally * Double_triplet_type_distribution
groups::strong_generators * stab_gens_trihedral_pair
void compute_iso_types_as_double_triplets(int verbose_level)
void init(arc_lifting *AL, int verbose_level)
groups::strong_generators * gens_subgroup
ring_theory::longinteger_object stabilizer_of_trihedral_pair_go
void create_the_six_plane_equations(int t_idx, int verbose_level)
void print_FG(std::ostream &ost)
groups::strong_generators * create_stabilizer_of_trihedral_pair(int &trihedral_pair_orbit_index, int verbose_level)
data_structures_groups::vector_ge * coset_reps
void create_action_on_equations_and_compute_orbits(int *The_surface_equations, groups::strong_generators *gens_for_stabilizer_of_trihedral_pair, actions::action *&A_on_equations, groups::schreier *&Orb, int verbose_level)
ring_theory::longinteger_object stab_order
int * Double_triplet_type_values
void report(std::ostream &ost, int verbose_level)
void create_surface_from_trihedral_pair_and_arc(int t_idx, int verbose_level)
void report_iso_type_as_double_triplets(std::ostream &ost)
classification of six-arcs not on a conic in PG(2,q)
void report_specific_arc_basic(std::ostream &ost, int arc_idx)
void init(apps_geometry::arc_generator_description *Descr, projective_geometry::projective_space_with_action *PA, int f_test_nb_Eckardt_points, int nb_E, int verbose_level)
six_arcs_not_on_a_conic()
~six_arcs_not_on_a_conic()
void report_specific_arc(std::ostream &ost, int arc_idx)
apps_geometry::arc_generator * Gen
void report_latex(std::ostream &ost)
projective_geometry::projective_space_with_action * PA
void recognize(long int *arc6, int *transporter, int &orbit_not_on_conic_idx, int verbose_level)
apps_geometry::arc_generator_description * Descr
cubic surfaces in projective space with automorphism group
description of a classification problem of arcs in a geometry
classification of arcs in desarguesian projective planes
projective space PG(n,q) with automorphism group PGGL(n+1,q)
the orbiter library for the classification of combinatorial objects