Orbiter 2022
Combinatorial Objects
six_arcs_not_on_a_conic.cpp
Go to the documentation of this file.
1// six_arcs_not_on_a_conic.cpp
2//
3// Anton Betten
4//
5// March 6, 2018
6//
7
8
9#include "orbiter.h"
10
11using namespace std;
12
13namespace orbiter {
14namespace layer5_applications {
15namespace applications_in_algebraic_geometry {
16namespace cubic_surfaces_and_arcs {
17
18
20{
21 //P2 = NULL;
22 Descr = NULL;
23 PA = NULL;
24 Gen = NULL;
25 nb_orbits = 0;
26 Not_on_conic_idx = NULL;
28 //null();
29}
30
31
33{
34 freeself();
35}
36
38{
39}
40
42{
43 if (Gen) {
45 }
46 if (Not_on_conic_idx) {
48 }
49 null();
50}
51
55 int f_test_nb_Eckardt_points, int nb_E,
56 //algebraic_geometry::surface_domain *Surf,
57 int verbose_level)
58{
59 int f_v = (verbose_level >= 1);
60 int level = 6;
61
62 if (f_v) {
63 cout << "six_arcs_not_on_a_conic::init" << endl;
64 }
65
66 if (PA->n != 2) {
67 cout << "six_arcs_not_on_a_conic::init PA->n != 2" << endl;
68 exit(1);
69 }
70
71 //six_arcs_not_on_a_conic::P2 = P2;
74
75
76
77
79 Descr->target_size = 6;
80 Descr->f_d = TRUE;
81 Descr->d = 2;
82 //Descr->f_n = TRUE;
83 //Descr->n = 3;
85 Descr->f_test_nb_Eckardt_points = f_test_nb_Eckardt_points;
86 Descr->nb_E = nb_E;
87 //Descr->Surf = Surf;
88
89
90
91
92
93 if (f_v) {
94 cout << "six_arcs_not_on_a_conic::init "
95 "before Gen->init" << endl;
96 }
97
99
100
101 Gen->init(
102 Descr,
103 PA,
104 PA->A->Strong_gens,
105 verbose_level - 2);
106
107
108
109 if (f_v) {
110 cout << "six_arcs_not_on_a_conic::init "
111 "after Gen->init" << endl;
112 }
113
114
115
116 if (f_v) {
117 cout << "six_arcs_not_on_a_conic::init "
118 "Classifying 6-arcs for q=" << PA->F->q << endl;
119 cout << "six_arcs_not_on_a_conic::init before Gen->compute_starter" << endl;
120 }
121
122 Gen->compute_starter(verbose_level - 1);
123
124 if (f_v) {
125 cout << "six_arcs_not_on_a_conic::init "
126 "Classifying 6-arcs for q=" << PA->F->q << endl;
127 cout << "six_arcs_not_on_a_conic::init after Gen->compute_starter" << endl;
128 }
129
130
132
133 if (f_v) {
134 cout << "six_arcs_not_on_a_conic::init "
135 "We found " << nb_orbits << " isomorphism types "
136 "of 6-arcs" << endl;
137 }
138
139
140
141 long int Arc6[6];
142 int h, j;
143
144
146
148
149 if (f_v) {
150 cout << "six_arcs_not_on_a_conic::init "
151 "testing the arcs" << endl;
152 }
153
154 for (h = 0; h < nb_orbits; h++) {
155
156 if (f_v && (h % 10000) == 0) {
157 cout << "six_arcs_not_on_a_conic::init "
158 "testing arc " << h << " / " << nb_orbits << endl;
159 }
160
161
162 Gen->gen->get_set_by_level(level, h, Arc6);
163
164
165 long int **Pts_on_conic;
166 int **Conic_eqn;
167 int *nb_pts_on_conic;
168 int len1;
169
170 if (f_v && (h % 10000) == 0) {
171 cout << "six_arcs_not_on_a_conic::init "
172 "testing arc " << h << " / " << nb_orbits << " : ";
173 Lint_vec_print(cout, Arc6, 6);
174 cout << endl;
175 }
176
177
178
179 if (f_v && (h % 10000) == 0) {
180 cout << "six_arcs_not_on_a_conic::init "
181 "computing conic intersections:" << endl;
182 }
183 PA->P->conic_type(
184 Arc6, 6,
185 6 /* threshold */,
186 Pts_on_conic, Conic_eqn, nb_pts_on_conic, len1,
187 0 /*verbose_level - 2*/);
188 if (f_v && (h % 10000) == 0) {
189 cout << "The arc intersects " << len1
190 << " conics in 6 or more points. " << endl;
191 }
192
193 if (len1 == 0) {
195 }
196
197 for (j = 0; j < len1; j++) {
198 FREE_lint(Pts_on_conic[j]);
199 FREE_int(Conic_eqn[j]);
200 }
201 FREE_plint(Pts_on_conic);
202 FREE_pint(Conic_eqn);
203 FREE_int(nb_pts_on_conic);
204 }
205
206 if (f_v) {
207 cout << "We found " << nb_arcs_not_on_conic << " isomorphism types "
208 "of 6-arcs not on a conic, out of a total of "
209 << nb_orbits << " isomorphism types of arcs" << endl;
210 }
211
212
213
214
215 if (f_v) {
216 cout << "six_arcs_not_on_a_conic::done" << endl;
217 }
218
219}
220
221
222void six_arcs_not_on_a_conic::recognize(long int *arc6, int *transporter,
223 int &orbit_not_on_conic_idx, int verbose_level)
224{
225 int f_v = (verbose_level >= 1);
226 int orbit_at_level;
228
229 if (f_v) {
230 cout << "six_arcs_not_on_a_conic::recognize" << endl;
231 }
232
233 Gen->gen->identify(arc6, 6,
234 transporter,
235 orbit_at_level,
236 0 /*verbose_level */);
237
238
239 if (!Sorting.int_vec_search(Not_on_conic_idx,
240 nb_arcs_not_on_conic, orbit_at_level,
241 orbit_not_on_conic_idx)) {
242 cout << "six_arcs_not_on_a_conic::recognize could not find orbit" << endl;
243 exit(1);
244 }
245 if (f_v) {
246 cout << "six_arcs_not_on_a_conic::recognize done" << endl;
247 }
248}
249
250
252{
253 int h;
254
255 ost << "\\subsection*{Classification of 6-arcs not on a conic "
256 "in $\\PG(2," << PA->F->q << ")$}" << endl;
257
260 {
262
263 ost << "The order of the group $" << PA->A->label_tex << "$ is ";
264 go.print_not_scientific(ost);
265 ost << endl;
266
267 ost << "\\bigskip" << endl << endl;
268 }
269
271 Ol.create(0, __FILE__, __LINE__);
272 for (h = 0; h < nb_arcs_not_on_conic; h++) {
274
276 6 /* level */,
277 Not_on_conic_idx[h] /* orbit_at_level */,
278 0 /* verbose_level */);
280 Not_on_conic_idx[h] /* node */,
281 6 /* level */, ol);
282 D.add_in_place(Ol, ol);
283
284
285 ost << "$" << h << " / " << nb_arcs_not_on_conic
286 << "$ Arc $" << Not_on_conic_idx[h] << "$ $" << endl;
287 R->print_set_tex(ost);
288 ost << "$ orbit length $";
289 ol.print_not_scientific(ost);
290 ost << "$\\\\" << endl;
291
292 FREE_OBJECT(R);
293 }
294 ost << "The overall number of 6-arcs not on a conic "
295 "in $\\PG(2," << PA->F->q << ")$ is: " << Ol << "\\\\" << endl;
296}
297
299{
302
303 The_arc = Gen->gen->get_set_and_stabilizer(
304 6 /* level */,
305 Not_on_conic_idx[arc_idx],
306 0 /* verbose_level */);
307
308 The_arc->Strong_gens->group_order(go);
309
310 ost << "Arc " << arc_idx << " / " << nb_arcs_not_on_conic << " is: ";
311 ost << "$$" << endl;
312 //int_vec_print(fp, Arc6, 6);
313 //ost << "\{";
314 The_arc->print_set_tex(ost);
315 //ost << "\}_{" << go << "}";
316 ost << "$$" << endl;
317
318 //P2->F->display_table_of_projective_points(ost, The_arc->data, 6, 3);
319
320
321 //ost << "The arc-stabilizer is the following group:\\\\" << endl;
322 //The_arc->Strong_gens->print_generators_tex(ost);
323
324 FREE_OBJECT(The_arc);
325
326
327}
328
329void six_arcs_not_on_a_conic::report_specific_arc(ostream &ost, int arc_idx)
330{
333
334 The_arc = Gen->gen->get_set_and_stabilizer(
335 6 /* level */,
336 Not_on_conic_idx[arc_idx],
337 0 /* verbose_level */);
338
339 The_arc->Strong_gens->group_order(go);
340
341 ost << "Arc " << arc_idx << " / " << nb_arcs_not_on_conic << " is: ";
342 ost << "$$" << endl;
343 //int_vec_print(fp, Arc6, 6);
344 //ost << "\{";
345 The_arc->print_set_tex(ost);
346 //ost << "\}_{" << go << "}";
347 ost << "$$" << endl;
348
349 PA->F->display_table_of_projective_points(ost, The_arc->data, 6, 3);
350
351
352 //ost << "The arc-stabilizer is the following group:\\\\" << endl;
353 //The_arc->Strong_gens->print_generators_tex(ost);
354
355 FREE_OBJECT(The_arc);
356
357
358}
359
360
361}}}}
362
363
364
365
a collection of functions related to sorted vectors
int int_vec_search(int *v, int len, int a, int &idx)
Definition: sorting.cpp:1094
void display_table_of_projective_points(std::ostream &ost, long int *Pts, int nb_pts, int len)
void conic_type(long int *set, int set_size, int threshold, long int **&Pts_on_conic, int **&Conic_eqn, int *&nb_pts_on_conic, int &nb_conics, int verbose_level)
domain to compute with objects of type longinteger
Definition: ring_theory.h:240
void add_in_place(longinteger_object &a, longinteger_object &b)
a class to represent arbitrary precision integers
Definition: ring_theory.h:366
void create(long int i, const char *file, int line)
groups::strong_generators * Strong_gens
Definition: actions.h:130
void group_order(ring_theory::longinteger_object &go)
data_structures_groups::set_and_stabilizer * get_set_and_stabilizer(int level, int orbit_at_level, int verbose_level)
void orbit_length(int orbit_at_level, int level, ring_theory::longinteger_object &len)
void identify(long int *data, int sz, int *transporter, int &orbit_at_level, int verbose_level)
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)
void recognize(long int *arc6, int *transporter, int &orbit_not_on_conic_idx, int verbose_level)
description of a classification problem of arcs in a geometry
Definition: tl_geometry.h:27
classification of arcs in desarguesian projective planes
Definition: tl_geometry.h:75
void init(arc_generator_description *Descr, projective_geometry::projective_space_with_action *PA, groups::strong_generators *SG, int verbose_level)
poset_classification::poset_classification * gen
Definition: tl_geometry.h:104
projective space PG(n,q) with automorphism group PGGL(n+1,q)
#define FREE_int(p)
Definition: foundations.h:640
#define FREE_plint(p)
Definition: foundations.h:643
#define NEW_OBJECT(type)
Definition: foundations.h:638
#define Lint_vec_print(A, B, C)
Definition: foundations.h:686
#define FREE_OBJECT(p)
Definition: foundations.h:651
#define NEW_int(n)
Definition: foundations.h:625
#define TRUE
Definition: foundations.h:231
#define FREE_lint(p)
Definition: foundations.h:642
#define FREE_pint(p)
Definition: foundations.h:641
the orbiter library for the classification of combinatorial objects