Orbiter 2022
Combinatorial Objects
surfaces_and_double_sixes.h
Go to the documentation of this file.
1/*
2 * surfaces_and_double_sixes.h
3 *
4 * Created on: Jun 26, 2021
5 * Author: betten
6 */
7
8#ifndef SRC_LIB_TOP_LEVEL_SURFACES_SURFACES_AND_DOUBLE_SIXES_SURFACES_AND_DOUBLE_SIXES_H_
9#define SRC_LIB_TOP_LEVEL_SURFACES_SURFACES_AND_DOUBLE_SIXES_SURFACES_AND_DOUBLE_SIXES_H_
10
11
12namespace orbiter {
13namespace layer5_applications {
14namespace applications_in_algebraic_geometry {
15namespace cubic_surfaces_and_double_sixes {
16
17
18
19// #############################################################################
20// classification_of_cubic_surfaces_with_double_sixes_activity_description.cpp
21// #############################################################################
22
24
25
27public:
28
30 poset_classification::poset_classification_report_options *report_options;
31
33
35
37
39
43
46
48
50
51
55 int argc, std::string *argv,
56 int verbose_level);
57 void print();
58
59
60};
61
62// #############################################################################
63// classification_of_cubic_surfaces_with_double_sixes_activity.cpp
64// #############################################################################
65
67
68
70public:
71
74
77 void init(
80 int verbose_level);
81 void perform_activity(int verbose_level);
82 void report(
83 poset_classification::poset_classification_report_options *report_options,
84 int verbose_level);
85 void do_surface_identify_Eckardt(int verbose_level);
86 void do_surface_identify_F13(int verbose_level);
87 void do_surface_identify_Bes(int verbose_level);
88 void do_surface_identify_general_abcd(int verbose_level);
92 int verbose_level);
93 void do_recognize(
95 int verbose_level);
96 void do_write_source_code(int verbose_level);
97 void do_sweep(
98 int verbose_level);
99
100
101};
102
103
104// #############################################################################
105// classify_double_sixes.cpp
106// #############################################################################
107
109
110
112
113public:
114
115 int q;
116 field_theory::finite_field *F;
117 actions::action *A;
118
119 //linear_group *LG;
120
122 algebraic_geometry::surface_domain *Surf;
123
124
125 // pulled from surface_classify_wedge:
126
127 actions::action *A2; // the action on the wedge product
128 induced_actions::action_on_wedge_product *AW;
129 // internal data structure for the wedge action
130
131 int *Elt0; // used in identify_five_plus_one
132 int *Elt1; // used in identify_five_plus_one
133 int *Elt2; // used in upstep
134 int *Elt3; // used in upstep
135 int *Elt4; // used in upstep
136
137 groups::strong_generators *SG_line_stab;
138 // stabilizer of the special line in PGL(4,q)
139 // this group acts on the set Neighbors[] in the wedge action
140
141 int l_min;
143
145 // = (q + 1) * q * (q + 1)
146
147 long int *Neighbors; // [nb_neighbors]
148 // The lines which intersect the special line.
149 // In wedge ranks.
150 // The array Neighbors is sorted.
151
152 long int *Neighbor_to_line; // [nb_neighbors]
153 // The lines which intersect the special line.
154 // In grassmann (i.e., line) ranks.
155 long int *Neighbor_to_klein; // [nb_neighbors]
156 // In orthogonal ranks (i.e., points on the Klein quadric).
157
158 //long int *Line_to_neighbor; // [Surf->nb_lines_PG_3]
159
160 ring_theory::longinteger_object go, stab_go;
161 groups::sims *Stab;
162 groups::strong_generators *stab_gens;
163
164 int *orbit;
166
168 long int pt0_wedge;
169 long int pt0_line;
170 long int pt0_klein;
171
172
173 int Basis[8];
174 int *line_to_orbit; // [nb_lines_PG_3]
175 long int *orbit_to_line; // [nb_lines_PG_3]
176
177 long int *Pts_klein;
178 long int *Pts_wedge;
180
181 long int *Pts_wedge_to_line; // [nb_pts]
182 long int *line_to_pts_wedge; // [nb_lines_PG_3]
183
184 actions::action *A_on_neighbors;
185 // restricted action A2 on the set Neighbors[]
186
187 poset_classification::poset_classification_control *Control;
188 poset_classification::poset_with_group_action *Poset;
189 poset_classification::poset_classification *Five_plus_one;
190 // orbits on five-plus-one configurations
191
192
193 int *u, *v, *w; // temporary vectors of length 6
194 int *u1, *v1; // temporary vectors of length 6
195
196 int len;
197 // = gen->nb_orbits_at_level(5)
198 // = number of orbits on 5-sets of lines
199 int *Idx;
200 // Idx[nb], list of orbits
201 // for which the rank of the system is equal to 19
202 int nb; // number of good orbits
203 int *Po;
204 // Po[Flag_orbits->nb_flag_orbits],
205 //list of orbits for which a double six exists
206
208
209
210 invariant_relations::flag_orbits *Flag_orbits;
211
212 invariant_relations::classification_step *Double_sixes;
213
214
217 void null();
218 void freeself();
220 poset_classification::poset_classification_control *Control,
221 int verbose_level);
222 void compute_neighbors(int verbose_level);
223 void make_spreadsheet_of_neighbors(data_structures::spreadsheet *&Sp,
224 int verbose_level);
226 int verbose_level);
227 void report(std::ostream &ost,
228 graphics::layered_graph_draw_options *draw_options,
229 poset_classification::poset_classification_report_options *Opt,
230 int verbose_level);
231 void partial_ovoid_test_early(long int *S, int len,
232 long int *candidates, int nb_candidates,
233 long int *good_candidates, int &nb_good_candidates,
234 int verbose_level);
235 void test_orbits(int verbose_level);
237 data_structures::spreadsheet *&Sp,
238 int verbose_level);
239 void identify_five_plus_one(long int *five_lines, long int transversal_line,
240 long int *five_lines_out_as_neighbors, int &orbit_index,
241 int *transporter, int verbose_level);
242 void classify(int verbose_level);
243 void downstep(int verbose_level);
244 void upstep(int verbose_level);
245 void print_five_plus_ones(std::ostream &ost);
246 void identify_double_six(long int *double_six,
247 int *transporter, int &orbit_index, int verbose_level);
248 void write_file(std::ofstream &fp, int verbose_level);
249 void read_file(std::ifstream &fp, int verbose_level);
250 int line_to_neighbor(long int line_rk, int verbose_level);
251};
252
253
254
255// #############################################################################
256// surface_classify_wedge.cpp
257// #############################################################################
258
260
261
263public:
264 field_theory::finite_field *F;
265 int q;
266
267 std::string fname_base;
268
269 actions::action *A; // the action of PGL(4,q) on points
270 actions::action *A2; // the action on the wedge product
271
272 algebraic_geometry::surface_domain *Surf;
274
275 int *Elt0;
276 int *Elt1;
277 int *Elt2;
278 int *Elt3;
279
281
282 // classification of surfaces:
283 invariant_relations::flag_orbits *Flag_orbits;
284
285 invariant_relations::classification_step *Surfaces;
286
287
288
291 void null();
292 void freeself();
293 void init(
295 poset_classification::poset_classification_control *Control,
296 int verbose_level);
297 void do_classify_double_sixes(int verbose_level);
298 void do_classify_surfaces(int verbose_level);
299 void classify_surfaces_from_double_sixes(int verbose_level);
300 void downstep(int verbose_level);
301 void upstep(int verbose_level);
302 void derived_arcs(int verbose_level);
304 int *&Starter_configuration_idx, int &nb_starter_conf, int verbose_level);
305 void write_file(std::ofstream &fp, int verbose_level);
306 void read_file(std::ifstream &fp, int verbose_level);
307
308 void identify_Eckardt_and_print_table(int verbose_level);
309 void identify_F13_and_print_table(int verbose_level);
310 void identify_Bes_and_print_table(int verbose_level);
311 void identify_Eckardt(int *Iso_type, int *Nb_lines, int verbose_level);
312 void identify_F13(
313 int *Iso_type, int *Nb_lines, int verbose_level);
314 void identify_Bes(
315 int *Iso_type, int *Nb_lines, int verbose_level);
319 int &isomorphic_to1, int &isomorphic_to2,
320 int *Elt_isomorphism_1to2,
321 int verbose_level);
322 void identify_surface(int *coeff_of_given_surface,
323 int &isomorphic_to, int *Elt_isomorphism,
324 int verbose_level);
325 void latex_surfaces(std::ostream &ost, int f_with_stabilizers, int verbose_level);
326 void report_surface(std::ostream &ost, int orbit_index, int verbose_level);
327 void generate_source_code(int verbose_level);
328 // no longer produces nb_E[] and single_six[]
329 void generate_history(int verbose_level);
331 void write_surfaces(int verbose_level);
332 void read_surfaces(int verbose_level);
334 void write_double_sixes(int verbose_level);
335 void read_double_sixes(int verbose_level);
336 void create_report(int f_with_stabilizers,
337 graphics::layered_graph_draw_options *draw_options,
338 poset_classification::poset_classification_report_options *Opt,
339 int verbose_level);
340 void report(std::ostream &ost, int f_with_stabilizers,
341 graphics::layered_graph_draw_options *draw_options,
342 poset_classification::poset_classification_report_options *Opt,
343 int verbose_level);
344 void create_report_double_sixes(int verbose_level);
345 void test_isomorphism(
348 int verbose_level);
349 void recognition(
351 int verbose_level);
352 void sweep_Cayley(int verbose_level);
354 int *Iso_type, int *Nb_lines, int verbose_level);
355 void identify_general_abcd_and_print_table(int verbose_level);
356
357};
358
359
360}}}}
361
362
363
364
365
366#endif /* SRC_LIB_TOP_LEVEL_SURFACES_SURFACES_AND_DOUBLE_SIXES_SURFACES_AND_DOUBLE_SIXES_H_ */
void init(cubic_surfaces_in_general::surface_with_action *Surf_A, poset_classification::poset_classification_control *Control, int verbose_level)
void partial_ovoid_test_early(long int *S, int len, long int *candidates, int nb_candidates, long int *good_candidates, int &nb_good_candidates, int verbose_level)
void report(std::ostream &ost, graphics::layered_graph_draw_options *draw_options, poset_classification::poset_classification_report_options *Opt, int verbose_level)
void identify_five_plus_one(long int *five_lines, long int transversal_line, long int *five_lines_out_as_neighbors, int &orbit_index, int *transporter, int verbose_level)
int isomorphism_test_pairwise(cubic_surfaces_in_general::surface_create *SC1, cubic_surfaces_in_general::surface_create *SC2, int &isomorphic_to1, int &isomorphic_to2, int *Elt_isomorphism_1to2, int verbose_level)
void test_isomorphism(cubic_surfaces_in_general::surface_create_description *Descr1, cubic_surfaces_in_general::surface_create_description *Descr2, int verbose_level)
void init(cubic_surfaces_in_general::surface_with_action *Surf_A, poset_classification::poset_classification_control *Control, int verbose_level)
void report(std::ostream &ost, int f_with_stabilizers, graphics::layered_graph_draw_options *draw_options, poset_classification::poset_classification_report_options *Opt, int verbose_level)
void create_report(int f_with_stabilizers, graphics::layered_graph_draw_options *draw_options, poset_classification::poset_classification_report_options *Opt, int verbose_level)
void starter_configurations_which_are_involved(int iso_type, int *&Starter_configuration_idx, int &nb_starter_conf, int verbose_level)
void identify_surface(int *coeff_of_given_surface, int &isomorphic_to, int *Elt_isomorphism, int verbose_level)
to create a cubic surface from a description using class surface_create_description
void do_surface_isomorphism_testing(cubic_surfaces_in_general::surface_create_description *surface_descr_isomorph1, cubic_surfaces_in_general::surface_create_description *surface_descr_isomorph2, int verbose_level)
the orbiter library for the classification of combinatorial objects