Orbiter 2022
Combinatorial Objects
quartic_curves.h
Go to the documentation of this file.
1/*
2 * quartic_curves.cpp
3 *
4 * Created on: May 25, 2021
5 * Author: betten
6 */
7
8#ifndef SRC_LIB_TOP_LEVEL_QUARTIC_CURVES_QUARTIC_CURVES_CPP_
9#define SRC_LIB_TOP_LEVEL_QUARTIC_CURVES_QUARTIC_CURVES_CPP_
10
11
12
13
14namespace orbiter {
15namespace layer5_applications {
16namespace applications_in_algebraic_geometry {
17namespace quartic_curves {
18
19
20// #############################################################################
21// quartic_curve_activity_description.cpp
22// #############################################################################
23
25
26
28public:
29
31
33
35
37
38
42 int argc, std::string *argv,
43 int verbose_level);
44 void print();
45
46};
47
48
49// #############################################################################
50// quartic_curve_activity.cpp
51// #############################################################################
52
54
55
57public:
58
61
62
65 void init(quartic_curve_activity_description *Quartic_curve_activity_description,
66 quartic_curve_create *QC, int verbose_level);
67 void perform_activity(int verbose_level);
68 void do_report(
70 int verbose_level);
71
72};
73
74
75
76
77// #############################################################################
78// quartic_curve_create_description.cpp
79// #############################################################################
80
81
82
84
85
87
88public:
89
90 int f_q;
91 int q;
92
94 std::string label_txt;
95
97 std::string label_tex;
98
100 std::string label_for_summary;
101
103 int iso;
104
106 std::string coefficients_text;
107
108
113 std::string equation_text;
116
121
122 std::vector<std::string> transform_coeffs;
123 std::vector<int> f_inverse_transform;
124
125
126
129 void null();
130 void freeself();
131 int read_arguments(int argc, std::string *argv,
132 int verbose_level);
133 void print();
134 int get_q();
135};
136
137
138
139// #############################################################################
140// quartic_curve_create.cpp
141// #############################################################################
142
143
145
146
148
149public:
151
152 std::string prefix;
153 std::string label_txt;
154 std::string label_tex;
155
157
158 int q;
159 field_theory::finite_field *F;
160
162
163
165
167
168 algebraic_geometry::quartic_curve_object *QO;
169
171
173 groups::strong_generators *Sg;
175 data_structures_groups::vector_ge *nice_gens;
176
177
178
179
182 void null();
183 void freeself();
184 void init_with_data(
188 int verbose_level);
189 void init(
193 int verbose_level);
195 void override_group(std::string &group_order_text,
196 int nb_gens, std::string &gens_text, int verbose_level);
197 void create_quartic_curve_by_coefficients(std::string &coefficients_text,
198 int verbose_level);
200 int verbose_level);
202 int iso,
203 int verbose_level);
205 std::string &name_of_formula,
206 std::string &name_of_formula_tex,
207 std::string &managed_variables,
208 std::string &equation_text,
209 std::string &equation_parameters,
210 std::string &equation_parameters_tex,
211 int verbose_level);
213 std::vector<std::string> &transform_coeffs,
214 std::vector<int> &f_inverse_transform,
215 int verbose_level);
216 void compute_group(
218 int verbose_level);
219
220};
221
222
223// #############################################################################
224// quartic_curve_domain_with_action.cpp
225// #############################################################################
226
228
229
230
232
233public:
234
235
237
239
240 algebraic_geometry::quartic_curve_domain *Dom; // do not free
241
242 actions::action *A; // linear group PGGL(3,q)
243
244
245 actions::action *A_on_lines; // linear group PGGL(3,q) acting on lines
246
247 int *Elt1;
248
249 induced_actions::action_on_homogeneous_polynomials *AonHPD_4_3;
250
251
254 void init(algebraic_geometry::quartic_curve_domain *Dom,
256 int verbose_level);
257
258};
259
260
261// #############################################################################
262// quartic_curve_from_surface.cpp
263// #############################################################################
264
265
267
268
270
271public:
272
274
276 int equation_nice[20]; // equation after transformation
277 int *transporter; // the transformation that maps the point off the lines to (1,0,0,0)
278
279 int v[4]; // = (1,0,0,0)
280 int pt_A; // = SOA->SO->SOP->Pts_not_on_lines[i];
281 int pt_B; // = SOA->Surf->rank_point(v);
282
283 long int *Lines_nice; // lines after transformation
285
286 long int *Bitangents;
287 int nb_bitangents; // = nb_lines + 1
288
289
290 // computed by split_nice_equation starting from the equation of the cubic surface:
291 int *f1; // terms involving X0^2, with X0^2 removed (linear)
292 int *f2; // terms involving X0, with X0 removed (quadratic)
293 int *f3; // terms free of X0 (cubic)
294
295 long int *Pts_on_surface; // points on the transformed surface
297
298 // the equation of the quartic curve:
299 int *curve; // poly1 + poly2 = f2^2 - 4 * f1 * f3
300 int *poly1; // f2 * f2
301 int *poly2; // -4 * f1 * f3
302 int two, four, mfour; // 2, 4, -4 in F
303
304 int *tangent_quadric; // = 2 * x_0 * f_1 + f_2
305 long int *Pts_on_tangent_quadric; // = SOA->Surf->Poly2_4->enumerate_points(tangent_quadric)
307
308 //int *line_type;
309 //int *type_collected;
310
311 //int *Class_pts;
312 //int nb_class_pts;
313 //long int *Pts_intersection;
314 //int nb_pts_intersection;
315
316 long int *Pts_on_curve; // = SOA->Surf->Poly4_x123->enumerate_points(curve)
318
319#if 0
320 strong_generators *gens_copy;
321 set_and_stabilizer *moved_surface;
322 //strong_generators *stab_gens_moved_surface;
323 strong_generators *stab_gens_P0;
324#endif
325
326 groups::strong_generators *Stab_gens_quartic;
327
328
329
333 void quartic(std::string &surface_prefix, int pt_orbit, int f_TDO, int verbose_level);
334 void compute_quartic(int pt_orbit,
335 int *equation, long int *Lines, int nb_lines,
336 int verbose_level);
337 void compute_stabilizer(int verbose_level);
339 std::string &surface_prefix,
340 std::ostream &ost,
341 std::ostream &ost_curves,
342 int f_TDO,
343 int verbose_level);
344
345};
346
347
348
349
350// #############################################################################
351// quartic_curve_object_with_action.cpp
352// #############################################################################
353
354
356
357
359
360public:
361
362 field_theory::finite_field *F; // do not free
363
365
366 algebraic_geometry::quartic_curve_object *QO; // do not free
367 groups::strong_generators *Aut_gens;
368 // generators for the automorphism group
369
371 data_structures_groups::vector_ge *nice_gens;
372
373 groups::strong_generators *projectivity_group_gens;
374 groups::sylow_structure *Syl;
375
376 actions::action *A_on_points;
377
378 groups::schreier *Orbits_on_points;
379
383 algebraic_geometry::quartic_curve_object *QO,
384 groups::strong_generators *Aut_gens,
385 int verbose_level);
386
387};
388
389
390
391
392
393}}}}
394
395
396
397#endif /* SRC_LIB_TOP_LEVEL_QUARTIC_CURVES_QUARTIC_CURVES_CPP_ */
void init(quartic_curve_domain_with_action *DomA, algebraic_geometry::quartic_curve_object *QO, groups::strong_generators *Aut_gens, int verbose_level)
void init(quartic_curve_activity_description *Quartic_curve_activity_description, quartic_curve_create *QC, int verbose_level)
to create a quartic curve from a description using class quartic_curve_create_description
void init(quartic_curve_create_description *Descr, projective_geometry::projective_space_with_action *PA, quartic_curve_domain_with_action *QCDA, int verbose_level)
void apply_transformations(std::vector< std::string > &transform_coeffs, std::vector< int > &f_inverse_transform, int verbose_level)
void create_quartic_curve_by_equation(std::string &name_of_formula, std::string &name_of_formula_tex, std::string &managed_variables, std::string &equation_text, std::string &equation_parameters, std::string &equation_parameters_tex, int verbose_level)
void create_quartic_curve_from_catalogue(quartic_curve_domain_with_action *DomA, int iso, int verbose_level)
void init_with_data(quartic_curve_create_description *Descr, projective_geometry::projective_space_with_action *PA, quartic_curve_domain_with_action *QCDA, int verbose_level)
void create_quartic_curve_from_description(quartic_curve_domain_with_action *DomA, int verbose_level)
void override_group(std::string &group_order_text, int nb_gens, std::string &gens_text, int verbose_level)
void compute_group(projective_geometry::projective_space_with_action *PA, int verbose_level)
construction of a quartic curve from a cubic surface by means of projecting the intersection with the...
void compute_quartic(int pt_orbit, int *equation, long int *Lines, int nb_lines, int verbose_level)
void init(cubic_surfaces_in_general::surface_object_with_action *SOA, int verbose_level)
void cheat_sheet_quartic_curve(std::string &surface_prefix, std::ostream &ost, std::ostream &ost_curves, int f_TDO, int verbose_level)
void init(algebraic_geometry::quartic_curve_domain *Dom, projective_geometry::projective_space_with_action *PA, int verbose_level)
projective space PG(n,q) with automorphism group PGGL(n+1,q)
the orbiter library for the classification of combinatorial objects