Orbiter 2022
Combinatorial Objects
projective_space.h
Go to the documentation of this file.
1/*
2 * projective_space.h
3 *
4 * Created on: Mar 28, 2021
5 * Author: betten
6 */
7
8#ifndef SRC_LIB_TOP_LEVEL_PROJECTIVE_SPACE_PROJECTIVE_SPACE_H_
9#define SRC_LIB_TOP_LEVEL_PROJECTIVE_SPACE_PROJECTIVE_SPACE_H_
10
11
12
13namespace orbiter {
14namespace layer5_applications {
15namespace projective_geometry {
16
17
18
19// #############################################################################
20// canonical_form_classifier_description.cpp
21// #############################################################################
22
23
24
26
27
29
30public:
31
32 std::string fname_mask;
34
36 std::string fname_base_out;
37
39 int degree;
40
43
45
47
49
50
51
54};
55
56
57// #############################################################################
58// canonical_form_classifier.cpp
59// #############################################################################
60
61
62
64
65
67
68public:
69
71
72
73 ring_theory::homogeneous_polynomial_domain *Poly_ring;
74
75 induced_actions::action_on_homogeneous_polynomials *AonHPD;
76
78
79 // nauty stuff:
80
81 data_structures::classify_bitvectors *CB;
83 long int *alpha;
84 int *gamma;
85
86 // substructure stuff:
87
88
89 // needed once for the whole classification process:
90 substructure_classifier *SubC;
91
92
93 // needed once for each object:
94 canonical_form_substructure **CFS_table; // [nb_objects_to_test]
95
96
97
98 int *Elt;
99 int *eqn2;
100
101
103 int *Canonical_forms; // [nb_objects_to_test * Poly_ring->get_nb_monomials()]
104 long int *Goi; // [nb_objects_to_test]
105
106 data_structures::tally_vector_data *Classification_of_quartic_curves;
107 // based on Canonical_forms, nb_objects_to_test
108
109 // transversal of the isomorphism types:
112 int nb_types; // number of isomorphism types
113
114
117 void count_nb_objects_to_test(int verbose_level);
119 int verbose_level);
120 void classify_nauty(int verbose_level);
121 void classify_with_substructure(int verbose_level);
122 void main_loop(int verbose_level);
123 void classify_curve_nauty(int cnt, int row,
124 int *eqn,
125 int sz,
126 long int *pts,
127 int nb_pts,
128 long int *bitangents,
129 int nb_bitangents,
130 int *canonical_equation,
131 int *transporter_to_canonical_form,
132 int verbose_level);
134 std::string &fname_base,
135 int verbose_level);
137 std::string &fname_base,
138 data_structures::tally_vector_data *Classification_of_quartic_curves,
139 int verbose_level);
140 void report(std::string &fname, int verbose_level);
141 void report2(std::ostream &ost, std::string &fname_base, int verbose_level);
142
143};
144
145
146// #############################################################################
147// canonical_form_nauty.cpp
148// #############################################################################
149
150
151
153
154
156
157public:
158
159 int idx;
160 int *eqn;
161 int sz;
162
163 long int *Pts_on_curve;
165
166 long int *bitangents;
168
170 data_structures::bitvector *Canonical_form;
173
174
175 groups::strong_generators *SG_pt_stab;
176
177 orbit_of_equations *Orb;
178
179 groups::strong_generators *Stab_gens_quartic;
180
181
184 void quartic_curve(
186 ring_theory::homogeneous_polynomial_domain *Poly4_x123,
187 induced_actions::action_on_homogeneous_polynomials *AonHPD,
188 int idx, int *eqn, int sz,
189 long int *Pts_on_curve, int sz_curve,
190 long int *bitangents, int nb_bitangents,
191 int *canonical_equation,
192 int *transporter_to_canonical_form,
193 groups::strong_generators *&gens_stab_of_canonical_equation,
194 int verbose_level);
195
196};
197
198
199
200// #############################################################################
201// canonical_form_substructure.cpp
202// #############################################################################
203
204
205
207
209
210public:
211
212 std::string fname_case_out;
213
215 // has substructure_classifier *SubC
216
217
218 int cnt;
219 int row;
221 int *eqn;
222 int sz;
223 long int *pts;
225 long int *bitangents;
227
228 long int *canonical_pts;
229
230
231 substructure_stats_and_selection *SubSt;
232
233
234
235
236
237 compute_stabilizer *CS;
238
239 groups::strong_generators *Gens_stabilizer_original_set;
240 groups::strong_generators *Gens_stabilizer_canonical_form;
241
242
243 orbit_of_equations *Orb;
244
245 groups::strong_generators *gens_stab_of_canonical_equation;
246
247 int *trans1;
248 int *trans2;
250
251
252
253 int *Elt;
254 int *eqn2;
255
258
259
264 int counter, int cnt, int row,
265 std::string &fname_case_out,
266 int *eqn,
267 int sz,
268 long int *pts,
269 int nb_pts,
270 long int *bitangents,
271 int nb_bitangents,
272 ring_theory::longinteger_object &go_eqn,
273 int verbose_level);
274 void handle_orbit(
276 groups::strong_generators *&Gens_stabilizer_original_set,
277 groups::strong_generators *&Gens_stabilizer_canonical_form,
278 int verbose_level);
279
280
281};
282
283
284
285// #############################################################################
286// object_in_projective_space_with_action.cpp
287// #############################################################################
288
289
290
292
293
295
296public:
297
298 geometry::object_with_canonical_form *OwCF;
299 // do not free
300 groups::strong_generators *Aut_gens;
301 // generators for the automorphism group
302 long int ago;
305
306
309 void null();
310 void freeself();
311 void init(
312 geometry::object_with_canonical_form *OwCF,
313 long int ago,
314 groups::strong_generators *Aut_gens,
316 int verbose_level);
317 void print();
318 void report(std::ostream &fp,
319 projective_space_with_action *PA, int max_TDO_depth, int verbose_level);
320
321};
322
323
324
325// #############################################################################
326// projective_space_activity_description.cpp
327// #############################################################################
328
330
331
333public:
334
335
337
342
346
350 combinatorics::classification_of_objects_description *Canonical_form_codes_Descr;
351
352 int f_map;
353 std::string map_label;
354 std::string map_parameters;
355
359
364
367 groups::linear_group_description * decomposition_by_subgroup_Descr;
368
369
372 geometry::geometric_object_description *Object_Descr;
373
374
378
380 // based on knowledge_base
381
383 // based on knowledge_base
384
388
391 poset_classification::poset_classification_control *classify_surfaces_with_double_sixes_control;
392
393
396 int nb_E;
399 poset_classification::poset_classification_control *Trihedra1_control;
401 poset_classification::poset_classification_control *Trihedra2_control;
403 poset_classification::poset_classification_control *Control_six_arcs;
404
406 std::string sweep_fname;
407
411
415
419
421 std::string sweep_4_27_fname;
423
430
434
435
438 poset_classification::poset_classification_control *spread_classify_Control;
439
442 poset_classification::poset_classification_control *Semifield_classify_Control;
443
445
450
457
464
468
471
474
477 int arc_d;
479 int arc_s;
480 std::string arc_input_set;
481 std::string arc_label;
482
484 int arc_t;
485 std::string t_lines_string;
486
488 int arc_u;
489 std::string u_lines_string;
490
493 std::string dualize_input_set;
494
497
500
502
508
512
515
518
520 long int line1_from;
521 long int line2_from;
522 long int line1_to;
523 long int line2_to;
524
526 std::string line1_from_text;
527 std::string line2_from_text;
528 std::string line1_to_text;
529 std::string line2_to_text;
530
531
534 int read_arguments(
535 int argc, std::string *argv,
536 int verbose_level);
537 void print();
538
539
540};
541
542
543// #############################################################################
544// projective_space_activity.cpp
545// #############################################################################
546
548
549
551public:
552
554
556
557
560 void perform_activity(int verbose_level);
562 std::string &label,
563 int verbose_level);
564
565};
566
567// #############################################################################
568// projective_space_global.cpp
569// #############################################################################
570
572
573
575public:
576 void map(
578 std::string &label,
579 std::string &evaluate_text,
580 int verbose_level);
583 std::string &label,
584 std::string &evaluate_text,
585 int verbose_level);
588 expression_parser::formula *F,
589 std::string &evaluate_text,
590 int verbose_level);
596 int verbose_level);
597 void conic_type(
599 int threshold,
600 std::string &set_text,
601 int verbose_level);
604 std::string &text,
605 int verbose_level);
608 std::string &polarity_36,
609 int verbose_level);
610 void do_classify_arcs(
612 apps_geometry::arc_generator_description *Arc_generator_description,
613 int verbose_level);
616 apps_geometry::arc_generator_description *Arc_generator_description,
617 int verbose_level);
620 std::string &fname_mask, int nb,
621 std::string &fname_classification,
622 canonical_form_classifier *&Classifier,
623 int verbose_level);
626 std::string &fname_mask, int nb, int substructure_size, int degree,
627 std::string &fname_classification,
628 canonical_form_classifier *&Classifier,
629 int verbose_level);
632 std::string &fname_mask,
633 int nb,
634 int size,
635 int degree,
636 std::string &fname_classification,
637 int verbose_level);
638 void set_stabilizer(
640 int intermediate_subset_size,
641 std::string &fname_mask, int nb, std::string &column_label,
642 std::string &fname_out,
643 int verbose_level);
644
645};
646
647
648
649
650// #############################################################################
651// projective_space_with_action_description.cpp
652// #############################################################################
653
654
656
658public:
659
660 int n;
661 std::string input_q;
662 field_theory::finite_field *F;
663
665
668 int read_arguments(
669 int argc, std::string *argv,
670 int verbose_level);
671 void print();
672
673};
674
675
676
677// #############################################################################
678// projective_space_with_action.cpp
679// #############################################################################
680
681
682
683
685
686
687
689
690public:
691
692 int n; // projective dimension
693 int d; // n + 1
694 int q;
695 field_theory::finite_field *F; // do not free
698
699 geometry::projective_space *P;
700
701 // if n >= 3:
703
704
705 // if n == 2:
706 algebraic_geometry::quartic_curve_domain *Dom;
708
709
710 actions::action *A; // linear group PGGL(d,q) in the action on points
711 actions::action *A_on_lines; // linear group PGGL(d,q) acting on lines
712
714 actions::action *A_on_planes; // linear group PGGL(d,q) acting on planes
715
716
717 int *Elt1;
718
719
722 void null();
723 void freeself();
724 void init(field_theory::finite_field *F, int n, int f_semilinear,
725 int f_init_incidence_structure, int verbose_level);
726 void init_group(int f_semilinear, int verbose_level);
728 geometry::object_with_canonical_form *OiP,
730 int verbose_level);
732 int *Elt, std::ostream &ost,
733 int verbose_level);
735 int *Elt, std::ostream &ost,
736 int verbose_level);
738 int *Elt, std::ostream &ost, std::string &fname_base,
739 int verbose_level);
741 data_structures::classify_bitvectors *CB,
742 geometry::object_with_canonical_form *OiP,
743 int f_save_incma_in_and_out, std::string &prefix,
744 int nb_objects_to_test,
745 groups::strong_generators *&SG,
746 long int *canonical_labeling,
747 int verbose_level);
748 void compute_group_of_set(long int *set, int set_sz,
749 groups::strong_generators *&Sg,
750 int verbose_level);
751 void map(
752 expression_parser::formula *Formula,
753 std::string &evaluate_text,
754 int verbose_level);
756 expression_parser::formula *Formula,
757 std::string &evaluate_text,
758 int verbose_level);
760 int decomposition_by_element_power,
761 std::string &decomposition_by_element_data, std::string &fname_base,
762 int verbose_level);
763 void do_cheat_sheet_for_decomposition_by_subgroup(std::string &label,
764 groups::linear_group_description * subgroup_Descr, int verbose_level);
765 void report(
766 std::ostream &ost,
767 graphics::layered_graph_draw_options *O,
768 int verbose_level);
772 int verbose_level);
774 std::string &label,
775 int *genma, int m, int n,
776 combinatorics::classification_of_objects_description *Canonical_form_codes_Descr,
777 int verbose_level);
778 void table_of_quartic_curves(int verbose_level);
779 void table_of_cubic_surfaces(int verbose_level);
780 void conic_type(
781 long int *Pts, int nb_pts, int threshold,
782 int verbose_level);
783 void cheat_sheet(
784 graphics::layered_graph_draw_options *O,
785 int verbose_level);
786 void do_spread_classify(int k,
787 poset_classification::poset_classification_control *Control,
788 int verbose_level);
791 int verbose_level);
793 groups::strong_generators *SG, std::ostream &ost, std::string &fname_base,
794 int verbose_level);
796 std::string &label,
797 int verbose_level);
799 std::string &text,
800 int verbose_level);
801
802
803};
804
805
806
807}}}
808
809
810
811
812
813#endif /* SRC_LIB_TOP_LEVEL_PROJECTIVE_SPACE_PROJECTIVE_SPACE_H_ */
to create a cubic surface from a description using class surface_create_description
to create a quartic curve from a description using class quartic_curve_create_description
description of a classification problem of arcs in a geometry
Definition: tl_geometry.h:27
void classify(canonical_form_classifier_description *Descr, int verbose_level)
induced_actions::action_on_homogeneous_polynomials * AonHPD
void classify_curve_nauty(int cnt, int row, int *eqn, int sz, long int *pts, int nb_pts, long int *bitangents, int nb_bitangents, int *canonical_equation, int *transporter_to_canonical_form, int verbose_level)
void generate_source_code(std::string &fname_base, data_structures::tally_vector_data *Classification_of_quartic_curves, int verbose_level)
void report2(std::ostream &ost, std::string &fname_base, int verbose_level)
to compute the canonical form of an object using nauty
void quartic_curve(projective_space_with_action *PA, ring_theory::homogeneous_polynomial_domain *Poly4_x123, induced_actions::action_on_homogeneous_polynomials *AonHPD, int idx, int *eqn, int sz, long int *Pts_on_curve, int sz_curve, long int *bitangents, int nb_bitangents, int *canonical_equation, int *transporter_to_canonical_form, groups::strong_generators *&gens_stab_of_canonical_equation, int verbose_level)
to compute the canonical form of an object using substructure canonization
void handle_orbit(int *transporter_to_canonical_form, groups::strong_generators *&Gens_stabilizer_original_set, groups::strong_generators *&Gens_stabilizer_canonical_form, int verbose_level)
void classify_curve_with_substructure(canonical_form_classifier *Canonical_form_classifier, int counter, int cnt, int row, std::string &fname_case_out, int *eqn, int sz, long int *pts, int nb_pts, long int *bitangents, int nb_bitangents, ring_theory::longinteger_object &go_eqn, int verbose_level)
void report(std::ostream &fp, projective_space_with_action *PA, int max_TDO_depth, int verbose_level)
void init(geometry::object_with_canonical_form *OwCF, long int ago, groups::strong_generators *Aut_gens, int *canonical_labeling, int verbose_level)
applications_in_algebraic_geometry::cubic_surfaces_in_general::surface_create_description * sweep_4_15_lines_surface_description
applications_in_algebraic_geometry::cubic_surfaces_in_general::surface_create_description * Surface_Descr
applications_in_algebraic_geometry::quartic_curves::quartic_curve_create_description * Quartic_curve_descr
applications_in_algebraic_geometry::cubic_surfaces_in_general::surface_create_description * sweep_F_beta_9_lines_surface_description
applications_in_algebraic_geometry::cubic_surfaces_in_general::surface_create_description * sweep_6_9_lines_surface_description
combinatorics::classification_of_objects_description * Canonical_form_codes_Descr
poset_classification::poset_classification_control * classify_surfaces_with_double_sixes_control
applications_in_algebraic_geometry::cubic_surfaces_in_general::surface_create_description * sweep_4_27_surface_description
void do_classify_cubic_curves(projective_space_with_action *PA, apps_geometry::arc_generator_description *Arc_generator_description, int verbose_level)
void analyze_del_Pezzo_surface(projective_space_with_action *PA, std::string &label, std::string &evaluate_text, int verbose_level)
void conic_type(projective_space_with_action *PA, int threshold, std::string &set_text, int verbose_level)
void do_lift_skew_hexagon_with_polarity(projective_space_with_action *PA, std::string &polarity_36, int verbose_level)
void map(projective_space_with_action *PA, std::string &label, std::string &evaluate_text, int verbose_level)
void set_stabilizer(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 do_classify_arcs(projective_space_with_action *PA, apps_geometry::arc_generator_description *Arc_generator_description, int verbose_level)
void do_create_surface(projective_space_with_action *PA, applications_in_algebraic_geometry::cubic_surfaces_in_general::surface_create_description *Surface_Descr, applications_in_algebraic_geometry::cubic_surfaces_in_general::surface_with_action *&Surf_A, applications_in_algebraic_geometry::cubic_surfaces_in_general::surface_create *&SC, int verbose_level)
void classify_quartic_curves_with_substructure(projective_space_with_action *PA, std::string &fname_mask, int nb, int substructure_size, int degree, std::string &fname_classification, canonical_form_classifier *&Classifier, int verbose_level)
void do_lift_skew_hexagon(projective_space_with_action *PA, std::string &text, int verbose_level)
void analyze_del_Pezzo_surface_formula_given(projective_space_with_action *PA, expression_parser::formula *F, std::string &evaluate_text, int verbose_level)
void classify_quartic_curves(projective_space_with_action *PA, std::string &fname_mask, int nb, int size, int degree, std::string &fname_classification, int verbose_level)
void classify_quartic_curves_nauty(projective_space_with_action *PA, std::string &fname_mask, int nb, std::string &fname_classification, canonical_form_classifier *&Classifier, int verbose_level)
projective space PG(n,q) with automorphism group PGGL(n+1,q)
void conic_type(long int *Pts, int nb_pts, int threshold, int verbose_level)
void do_spread_classify(int k, poset_classification::poset_classification_control *Control, int verbose_level)
applications_in_algebraic_geometry::quartic_curves::quartic_curve_domain_with_action * QCDA
void report(std::ostream &ost, graphics::layered_graph_draw_options *O, int verbose_level)
void do_cheat_sheet_for_decomposition_by_element_PG(int decomposition_by_element_power, std::string &decomposition_by_element_data, std::string &fname_base, int verbose_level)
void canonical_form_of_code(std::string &label, int *genma, int m, int n, combinatorics::classification_of_objects_description *Canonical_form_codes_Descr, int verbose_level)
void map(expression_parser::formula *Formula, std::string &evaluate_text, int verbose_level)
int process_object(data_structures::classify_bitvectors *CB, geometry::object_with_canonical_form *OiP, int f_save_incma_in_and_out, std::string &prefix, int nb_objects_to_test, groups::strong_generators *&SG, long int *canonical_labeling, int verbose_level)
void init(field_theory::finite_field *F, int n, int f_semilinear, int f_init_incidence_structure, int verbose_level)
void analyze_del_Pezzo_surface(expression_parser::formula *Formula, std::string &evaluate_text, int verbose_level)
void cheat_sheet(graphics::layered_graph_draw_options *O, int verbose_level)
void canonical_labeling(geometry::object_with_canonical_form *OiP, int *canonical_labeling, int verbose_level)
void report_decomposition_by_group(groups::strong_generators *SG, std::ostream &ost, std::string &fname_base, int verbose_level)
void do_cheat_sheet_for_decomposition_by_subgroup(std::string &label, groups::linear_group_description *subgroup_Descr, int verbose_level)
void report_decomposition_by_single_automorphism(int *Elt, std::ostream &ost, std::string &fname_base, int verbose_level)
void create_quartic_curve(applications_in_algebraic_geometry::quartic_curves::quartic_curve_create_description *Quartic_curve_descr, applications_in_algebraic_geometry::quartic_curves::quartic_curve_create *&QC, int verbose_level)
void compute_group_of_set(long int *set, int set_sz, groups::strong_generators *&Sg, int verbose_level)
void report_orbits_on_points_lines_and_planes(int *Elt, std::ostream &ost, int verbose_level)
void setup_surface_with_action(applications_in_algebraic_geometry::cubic_surfaces_in_general::surface_with_action *&Surf_A, int verbose_level)
description of a semifield classification problem
Definition: semifields.h:24
the orbiter library for the classification of combinatorial objects