Orbiter 2022
Combinatorial Objects
surface_object_with_action.cpp
Go to the documentation of this file.
1// surface_object_with_action.cpp
2//
3// Anton Betten
4//
5// October 4, 2017
6//
7//
8//
9//
10//
11
12#include "orbiter.h"
13
14using namespace std;
15
16namespace orbiter {
17namespace layer5_applications {
18namespace applications_in_algebraic_geometry {
19namespace cubic_surfaces_in_general {
20
21
22
24{
25 q = 0;
26 F = NULL;
27 Surf = NULL;
28 Surf_A = NULL;
29 SO = NULL;
30 Aut_gens = NULL;
31
33 nice_gens = NULL;
34
35
37 Syl = NULL;
38
39 A_on_points = NULL;
41 A_on_Double_points = NULL;
42 A_on_the_lines = NULL;
43 A_single_sixes = NULL;
45 A_on_Hesse_planes = NULL;
48
49
50 Orbits_on_points = NULL;
53 Orbits_on_lines = NULL;
59 null();
60}
61
63{
64 freeself();
65}
66
68{
69}
70
72{
75 }
76 if (Syl) {
78 }
79 if (A_on_points) {
81 }
84 }
87 }
88 if (A_on_the_lines) {
90 }
91 if (A_single_sixes) {
93 }
96 }
99 }
102 }
105 }
106 if (Orbits_on_points) {
108 }
111 }
114 }
115 if (Orbits_on_lines) {
117 }
120 }
123 }
126 }
129 }
132 }
133 null();
134}
135
137 surface_with_action *Surf_A, int *eqn,
138 groups::strong_generators *Aut_gens, int verbose_level)
139{
140 int f_v = (verbose_level >= 1);
141
142 if (f_v) {
143 cout << "surface_object_with_action::init_equation" << endl;
144 }
145
148 Surf = Surf_A->Surf;
149 F = Surf->F;
150 q = F->q;
151
153 if (f_v) {
154 cout << "surface_object_with_action::init_equation "
155 "before SO->init_equation" << endl;
156 }
157 SO->init_equation(Surf_A->Surf, eqn, verbose_level);
158 if (f_v) {
159 cout << "surface_object_with_action::init_equation "
160 "after SO->init_equation" << endl;
161 }
162
163#if 0
164 if (SO->nb_lines != 27) {
165 cout << "surface_object_with_action::init_equation "
166 "the surface does not have 27 lines" << endl;
167 return FALSE;
168 }
169#endif
170
171
172 compute_projectivity_group(verbose_level);
173
174 if (f_v) {
175 cout << "surface_object_with_action::init_equation "
176 "before compute_orbits_of_automorphism_group" << endl;
177 }
179 if (f_v) {
180 cout << "surface_object_with_action::init_equation "
181 "after compute_orbits_of_automorphism_group" << endl;
182 }
183
184 if (f_v) {
185 cout << "surface_object_with_action::init_equation done" << endl;
186 }
187}
188
189
190
192 surface_with_action *Surf_A,
193 long int *Lines, int nb_lines, int *eqn,
195 int f_find_double_six_and_rearrange_lines,
196 int f_has_nice_gens,
198 int verbose_level)
199{
200 int f_v = (verbose_level >= 1);
201
202 if (f_v) {
203 cout << "surface_object_with_action::init_with_group" << endl;
204 }
205
208 if (nb_lines == 27) {
209 if (f_v) {
210 cout << "surface_object_with_action::init_with_group "
211 "before SO->init_with_27_lines" << endl;
212 }
213 SO->init_with_27_lines(Surf_A->Surf, Lines, eqn,
214 f_find_double_six_and_rearrange_lines, verbose_level);
215 if (f_v) {
216 cout << "surface_object_with_action::init_with_group "
217 "after SO->init_with_27_lines" << endl;
218 }
219 }
220 else {
221 if (f_v) {
222 cout << "surface_object_with_action::init_with_group "
223 "before SO->init_equation" << endl;
224 }
226 verbose_level);
227 if (f_v) {
228 cout << "surface_object_with_action::init_with_group "
229 "after SO->init_equation" << endl;
230 }
231
232 }
233
234 if (f_v) {
235 cout << "surface_object_with_action::init_with_group "
236 "before SO->init_with_surface_object" << endl;
237 }
238
240 SO,
241 Aut_gens,
243 verbose_level);
244
245 if (f_v) {
246 cout << "surface_object_with_action::init_with_group "
247 "after SO->init_with_surface_object" << endl;
248 }
249
250 if (f_v) {
251 cout << "surface_object_with_action::init_with_group done" << endl;
252 }
253}
254
255
257 surface_with_action *Surf_A,
260 int f_has_nice_gens,
262 int verbose_level)
263{
264 int f_v = (verbose_level >= 1);
265
266 if (f_v) {
267 cout << "surface_object_with_action::init_with_surface_object" << endl;
268 }
269
275 Surf = Surf_A->Surf;
276 F = Surf->F;
277 q = F->q;
278
279 if (f_v) {
280 cout << "surface_object_with_action::init_with_surface_object "
281 "testing Aut_gens" << endl;
282 }
284 Surf_A->A2, SO->Lines, SO->nb_lines, verbose_level);
285 if (f_v) {
286 cout << "surface_object_with_action::init_with_surface_object "
287 "testing Aut_gens done" << endl;
288 }
289
290 if (f_v) {
291 cout << "surface_object_with_action::init_with_surface_object "
292 "before compute_projectivity_group" << endl;
293 }
294 compute_projectivity_group(verbose_level);
295 if (f_v) {
296 cout << "surface_object_with_action::init_with_surface_object "
297 "after compute_projectivity_group" << endl;
298 }
299
300
301 if (f_v) {
302 cout << "surface_object_with_action::init_with_surface_object "
303 "before compute_orbits_of_automorphism_group" << endl;
304 }
306 if (f_v) {
307 cout << "surface_object_with_action::init_with_surface_object "
308 "after compute_orbits_of_automorphism_group" << endl;
309 }
310
311 if (f_v) {
312 cout << "surface_object_with_action::init_with_surface_object done" << endl;
313 }
314}
315
316
319 groups::strong_generators *Aut_gens, int verbose_level)
320{
321 int f_v = (verbose_level >= 1);
322
323 if (f_v) {
324 cout << "surface_object_with_action::init_surface_object" << endl;
325 }
329
330
331 Surf = Surf_A->Surf;
332 F = Surf->F;
333 q = F->q;
334
335
336
337 if (f_v) {
338 cout << "surface_object_with_action::init_surface_object "
339 "before compute_projectivity_group" << endl;
340 }
341 compute_projectivity_group(verbose_level - 5);
342 if (f_v) {
343 cout << "surface_object_with_action::init_surface_object "
344 "after compute_projectivity_group" << endl;
345 }
346
347
348
349
350
351 if (f_v) {
352 cout << "surface_object_with_action::init_surface_object "
353 "before compute_orbits_of_automorphism_group" << endl;
354 }
356 if (f_v) {
357 cout << "surface_object_with_action::init_surface_object "
358 "after compute_orbits_of_automorphism_group" << endl;
359 }
360
361 if (f_v) {
362 cout << "surface_object_with_action::init_surface_object "
363 "done" << endl;
364 }
365}
366
368 int verbose_level)
369{
370 int f_v = (verbose_level >= 1);
371
372 if (f_v) {
373 cout << "surface_object_with_action::compute_projectivity_group" << endl;
374 cout << "surface_object_with_action::compute_projectivity_group "
375 "verbose_level=" << verbose_level << endl;
376 }
377
379 Aut_gens, verbose_level);
380
381
382
383
384 if (f_v) {
385 cout << "surface_object_with_action::compute_projectivity_group "
386 "computing Sylow structure" << endl;
387 }
388 // compute the Sylow structure:
389 groups::sims *S = NULL;
390
392 S = projectivity_group_gens->create_sims(0 /*verbose_level */);
393 }
394 else {
395 if (Aut_gens) {
396 S = Aut_gens->create_sims(0 /*verbose_level */);
397 }
398 }
399
400 if (S) {
401 if (f_v) {
402 cout << "surface_object_with_action::compute_projectivity_group "
403 "before Syl->init" << endl;
404 }
406 Syl->init(S, verbose_level);
407 if (f_v) {
408 cout << "surface_object_with_action::compute_projectivity_group "
409 "after Syl->init" << endl;
410 }
411 }
412
413
414 if (f_v) {
415 cout << "surface_object_with_action::compute_projectivity_group done" << endl;
416 }
417}
418
420 int verbose_level)
421{
422 int f_v = (verbose_level >= 1);
423
424 if (f_v) {
425 cout << "surface_object_with_action::compute_orbits_of_automorphism_group" << endl;
426 }
427
428 // orbits on points:
429
430 if (f_v) {
431 cout << "surface_object_with_action::compute_orbits_of_automorphism_group "
432 "orbits on points" << endl;
433 }
434 init_orbits_on_points(verbose_level - 1);
435
436
437 // orbits on Eckardt points:
438
439 if (f_v) {
440 cout << "surface_object_with_action::compute_orbits_of_automorphism_group "
441 "orbits on Eckardt points" << endl;
442 }
443 init_orbits_on_Eckardt_points(verbose_level - 1);
444
445
446 // orbits on Double points:
447
448 if (f_v) {
449 cout << "surface_object_with_action::compute_orbits_of_automorphism_group "
450 "orbits on double points" << endl;
451 }
452 init_orbits_on_Double_points(verbose_level - 1);
453
454
455 // orbits on lines:
456
457 if (f_v) {
458 cout << "surface_object_with_action::compute_orbits_of_automorphism_group "
459 "orbits on lines" << endl;
460 }
461 init_orbits_on_lines(verbose_level);
462
463
464
465 if (SO->nb_lines == 27) {
466
467 // orbits on half double sixes:
468
469 if (f_v) {
470 cout << "surface_object_with_action::compute_orbits_of_automorphism_group "
471 "orbits on half double sixes" << endl;
472 }
474
475
476 // orbits on tritangent planes:
477
478 if (f_v) {
479 cout << "surface_object_with_action::compute_orbits_of_automorphism_group "
480 "orbits on tritangent planes" << endl;
481 }
483
484
485 // orbits on Hesse planes:
486
487 if (f_v) {
488 cout << "surface_object_with_action::compute_orbits_of_automorphism_group "
489 "orbits on Hesse planes" << endl;
490 }
491 init_orbits_on_Hesse_planes(verbose_level);
492
493
494 // orbits on trihedral pairs:
495
496 if (f_v) {
497 cout << "surface_object_with_action::compute_orbits_of_automorphism_group "
498 "orbits on trihedral pairs" << endl;
499 }
500 init_orbits_on_trihedral_pairs(verbose_level);
501 }
502
503
504
505 // orbits on points not on lines:
506
507 if (f_v) {
508 cout << "surface_object_with_action::compute_orbits_of_automorphism_group "
509 "orbits on points not on lines" << endl;
510 }
512
513
514 if (f_v) {
515 cout << "surface_object_with_action::compute_orbits_of_automorphism_group done" << endl;
516 }
517}
518
520 int verbose_level)
521{
522 int f_v = (verbose_level >= 1);
523
524 if (f_v) {
525 cout << "surface_object_with_action::init_orbits_on_points" << endl;
526 }
527
528 if (f_v) {
529 cout << "surface_object_with_action action on points:" << endl;
530 }
532 SO->Pts, SO->nb_pts, 0 /*verbose_level*/);
533 if (f_v) {
534 cout << "surface_object_with_action action "
535 "on points done" << endl;
536 }
537
538
539 if (f_v) {
540 cout << "surface_object_with_action::init_orbits_on_points "
541 "computing orbits on points:" << endl;
542 }
543 if (f_has_nice_gens) {
544 if (f_v) {
545 cout << "surface_object_with_action::init_orbits_on_points "
546 "computing orbits on points using nice gens:" << endl;
547 }
549 A_on_points, 0 /*verbose_level*/);
550
551 }
552 else {
553 if (f_v) {
554 cout << "surface_object_with_action::init_orbits_on_points "
555 "computing orbits on points using Aut_gens:" << endl;
556 }
558 A_on_points, 0 /*verbose_level*/);
559 }
560 if (f_v) {
561 cout << "surface_object_with_action::init_orbits_on_points "
562 "We found " << Orbits_on_points->nb_orbits
563 << " orbits on points" << endl;
564 }
565
566 if (f_v) {
567 cout << "surface_object_with_action::init_orbits_on_points done" << endl;
568 }
569}
570
572 int verbose_level)
573{
574 int f_v = (verbose_level >= 1);
575
576 if (f_v) {
577 cout << "surface_object_with_action::init_orbits_on_Eckardt_points" << endl;
578 }
579
580 if (f_v) {
581 cout << "creating action on Eckardt points:" << endl;
582 }
584 SO->SOP->Eckardt_points, SO->SOP->nb_Eckardt_points, 0 /*verbose_level*/);
585 if (f_v) {
586 cout << "creating action on Eckardt points done" << endl;
587 }
588
589
590 if (f_v) {
591 cout << "computing orbits on Eckardt points:" << endl;
592 }
593 if (f_has_nice_gens) {
594 if (f_v) {
595 cout << "surface_object_with_action::init_orbits_on_Eckardt_points "
596 "computing orbits on points using nice gens:" << endl;
597 }
599 A_on_Eckardt_points, 0 /*verbose_level*/);
600 }
601 else {
603 A_on_Eckardt_points, 0 /*verbose_level*/);
604 }
605 if (f_v) {
606 cout << "We found " << Orbits_on_Eckardt_points->nb_orbits
607 << " orbits on Eckardt points" << endl;
608 }
609
610 if (f_v) {
611 cout << "surface_object_with_action::init_orbits_on_Eckardt_points done" << endl;
612 }
613}
614
616 int verbose_level)
617{
618 int f_v = (verbose_level >= 1);
619
620 if (f_v) {
621 cout << "surface_object_with_action::init_orbits_on_Double_points" << endl;
622 }
623
624 if (f_v) {
625 cout << "creating action on Double points:" << endl;
626 }
629 0 /*verbose_level*/);
630 if (f_v) {
631 cout << "creating action on Double points done" << endl;
632 }
633
634
635 if (f_v) {
636 cout << "computing orbits on Double points:" << endl;
637 }
638 if (f_has_nice_gens) {
640 A_on_Double_points, 0 /*verbose_level*/);
641 }
642 else {
644 A_on_Double_points, 0 /*verbose_level*/);
645 }
646 if (f_v) {
647 cout << "We found " << Orbits_on_Double_points->nb_orbits
648 << " orbits on Double points" << endl;
649 }
650
651 if (f_v) {
652 cout << "surface_object_with_action::init_orbits_on_Double_points done" << endl;
653 }
654}
655
657 int verbose_level)
658{
659 int f_v = (verbose_level >= 1);
660
661 if (f_v) {
662 cout << "surface_object_with_action::init_orbits_on_lines" << endl;
663 }
664
665 if (f_v) {
666 cout << "creating restricted action "
667 "on the lines:" << endl;
668 }
670 SO->Lines, SO->nb_lines, 0 /*verbose_level*/);
671 if (f_v) {
672 cout << "creating restricted action "
673 "on the lines done" << endl;
674 }
675
676 if (f_v) {
677 cout << "computing orbits on lines:" << endl;
678 }
679 if (f_has_nice_gens) {
681 A_on_the_lines, 0 /*verbose_level*/);
682 }
683 else {
685 A_on_the_lines, 0 /*verbose_level*/);
686 }
687 if (f_v) {
688 cout << "We found " << Orbits_on_lines->nb_orbits
689 << " orbits on lines" << endl;
690 }
691
692 if (f_v) {
693 cout << "surface_object_with_action::init_orbits_on_lines done" << endl;
694 }
695}
696
698 int verbose_level)
699{
700 int f_v = (verbose_level >= 1);
701
702 if (f_v) {
703 cout << "surface_object_with_action::init_orbits_on_half_double_sixes" << endl;
704 }
705
706 if (f_v) {
707 cout << "creating action on half double sixes:" << endl;
708 }
710 72, 6, Surf->Schlaefli->Double_six, 0 /*verbose_level*/);
711 if (f_v) {
712 cout << "creating action on half double sixes done" << endl;
713 }
714
715
716 if (f_v) {
717 cout << "computing orbits on single sixes:" << endl;
718 }
719 if (f_has_nice_gens) {
721 A_single_sixes, 0 /*verbose_level*/);
722 }
723 else {
725 A_single_sixes, 0 /*verbose_level*/);
726 }
727 if (f_v) {
728 cout << "computing orbits on single sixes done" << endl;
729 }
730 if (f_v) {
731 cout << "We found " << Orbits_on_single_sixes->nb_orbits
732 << " orbits on single sixes" << endl;
733 }
734
735 //nb_orbits_on_single_sixes = Orbits_on_single_sixes->nb_orbits;
736
737 if (f_v) {
738 cout << "surface_object_with_action::init_orbits_on_half_double_sixes done" << endl;
739 }
740}
741
743 int verbose_level)
744{
745 int f_v = (verbose_level >= 1);
746
747 if (f_v) {
748 cout << "surface_object_with_action::init_orbits_on_tritangent_planes" << endl;
749 }
750
751 if (f_v) {
752 cout << "creating action on tritangent planes:" << endl;
753 cout << "SO->SOP->nb_tritangent_planes = "
754 << SO->SOP->nb_tritangent_planes << endl;
755 }
758 //SO->Lines_in_tritangent_planes,
760 0 /*verbose_level*/);
761 if (f_v) {
762 cout << "action on tritangent planes done" << endl;
763 }
764
765 if (f_has_nice_gens) {
767 A_on_tritangent_planes, 0 /*verbose_level*/);
768 }
769 else {
771 A_on_tritangent_planes, 0 /*verbose_level*/);
772 }
773 if (f_v) {
774 cout << "We found " << Orbits_on_tritangent_planes->nb_orbits
775 << " orbits on the set of " << SO->SOP->nb_tritangent_planes
776 << " tritangent planes" << endl;
777 }
778
780
781 if (f_v) {
782 cout << "surface_object_with_action::init_orbits_on_tritangent_planes done" << endl;
783 }
784}
785
787 int verbose_level)
788{
789 int f_v = (verbose_level >= 1);
790
791 if (f_v) {
792 cout << "surface_object_with_action::init_orbits_on_Hesse_planes" << endl;
793 }
794
795 if (f_v) {
796 cout << "creating action on Hesse planes:" << endl;
797 cout << "SO->SOP->nb_Hesse_planes = "
798 << SO->SOP->nb_Hesse_planes << endl;
799 }
801 SO->SOP->Hesse_planes, SO->SOP->nb_Hesse_planes, 0 /*verbose_level*/);
802 if (f_v) {
803 cout << "action on Hesse planes done" << endl;
804 }
805
806 if (f_has_nice_gens) {
808 A_on_Hesse_planes, 0 /*verbose_level*/);
809 }
810 else {
812 A_on_Hesse_planes, 0 /*verbose_level*/);
813 }
814 if (f_v) {
815 cout << "We found " << Orbits_on_Hesse_planes->nb_orbits
816 << " orbits on the set of " << SO->SOP->nb_Hesse_planes
817 << " Hesse planes" << endl;
818 }
819
821
822 if (f_v) {
823 cout << "surface_object_with_action::init_orbits_on_Hesse_planes done" << endl;
824 }
825}
826
828 int verbose_level)
829{
830 int f_v = (verbose_level >= 1);
831
832 if (f_v) {
833 cout << "surface_object_with_action::init_orbits_on_trihedral_pairs" << endl;
834 }
835
836 if (f_v) {
837 cout << "creating action on trihedral pairs:" << endl;
838 }
841 120, 6,
843 0 /*verbose_level*/);
844 if (f_v) {
845 cout << "action on trihedral pairs created" << endl;
846 }
847
848 if (f_has_nice_gens) {
850 A_on_trihedral_pairs, 0 /*verbose_level*/);
851 }
852 else {
854 A_on_trihedral_pairs, 0 /*verbose_level*/);
855 }
856 if (f_v) {
857 cout << "We found " << Orbits_on_trihedral_pairs->nb_orbits
858 << " orbits on trihedral pairs" << endl;
859 }
860
862
863 if (f_v) {
864 cout << "surface_object_with_action::init_orbits_on_trihedral_pairs done" << endl;
865 }
866}
867
869 int verbose_level)
870{
871 int f_v = (verbose_level >= 1);
872
873 if (f_v) {
874 cout << "surface_object_with_action::init_orbits_on_points_not_on_lines" << endl;
875 }
876
877 if (f_v) {
878 cout << "creating action on points not on lines:" << endl;
879 }
882 0 /*verbose_level*/);
883 if (f_v) {
884 cout << "creating action on points not on lines done" << endl;
885 }
886
887 if (f_has_nice_gens) {
890 A_on_pts_not_on_lines, 0 /*verbose_level*/);
891 }
892 else {
895 A_on_pts_not_on_lines, 0 /*verbose_level*/);
896 }
897 if (f_v) {
898 cout << "We found " << Orbits_on_points_not_on_lines->nb_orbits
899 << " orbits on points not on lines" << endl;
900 }
901
903
904 if (f_v) {
905 cout << "surface_object_with_action::init_orbits_on_points_not_on_lines done" << endl;
906 }
907}
908
909
911 ostream &ost,
913 int verbose_level)
914{
915 int f_v = (verbose_level >= 1);
916
917 if (f_v) {
918 cout << "surface_object_with_action::print_generators_on_lines" << endl;
919 }
920 //Aut_gens->print_generators_tex(ost);
923 ost,
925 Surf);
926
927}
928
930 ostream &ost,
932 int verbose_level)
933{
934 int f_v = (verbose_level >= 1);
935
936 if (f_v) {
937 cout << "surface_object_with_action::print_elements_on_lines" << endl;
938 }
939 //Aut_gens->print_generators_tex(ost);
942 ost,
944 Surf);
945
946}
947
949 std::ostream &ost,
950 int f_print_orbits, std::string &fname_mask,
952 int verbose_level)
953{
956
958
959 ost << "\\section*{Orbits of the automorphism group}" << endl;
960 ost << "The automorphism group has order " << go << endl;
961 ost << "\\bigskip" << endl;
962 ost << "\\subsection*{Orbits on points}" << endl;
963 //Orbits_on_points->print_and_list_orbits_and_
964 //stabilizer_sorted_by_length(ost, TRUE, Surf_A->A, go);
966
967
968
969 ost << "\\subsection*{Orbits on Eckardt points}" << endl;
971 if (f_print_orbits) {
972
973 string my_fname_mask;
974
975 my_fname_mask.assign(fname_mask);
976 my_fname_mask.append("_Eckardt_points");
977
979 my_fname_mask, Opt,
980 verbose_level);
981 }
982
984 ost, Surf_A->A, Aut_gens,
985 verbose_level);
986
987
988 ost << "\\subsection*{Orbits on Double points}" << endl;
990
991 ost << "\\subsection*{Orbits on points not on lines}" << endl;
992 //Orbits_on_points_not_on_lines->print_and_list_orbits_sorted_by_length_tex(ost);
994
995 print_full_del_Pezzo(ost, verbose_level);
996
997
998 ost << "\\subsection*{Orbits on lines}" << endl;
1000 if (f_print_orbits) {
1001
1002 string my_fname_mask;
1003
1004 my_fname_mask.assign(fname_mask);
1005 my_fname_mask.append("_on_lines");
1006
1008 my_fname_mask, Opt,
1009 verbose_level);
1010 }
1011
1012
1013 ost << "\\bigskip" << endl;
1014
1016
1017 ost << "\\bigskip" << endl;
1018
1019#if 0
1021 int i, action *default_action,
1022 strong_generators *gens, std::ostream &ost);
1023#endif
1024
1026
1027 int *Decomp_scheme;
1028 int nb;
1029 int block_width = 10;
1032 SO->SOP->Adj_line_intersection_graph, SO->nb_lines, Decomp_scheme,
1033 0 /*verbose_level*/);
1034 ost << "\\subsection*{Decomposition scheme of line intersection graph}" << endl;
1035 ost << "Decomposition scheme of line intersection graph:" << endl;
1037 Decomp_scheme, nb, nb, block_width);
1038 FREE_int(Decomp_scheme);
1039
1040
1041 if (SO->nb_lines == 27) {
1042 ost << "\\subsection*{Orbits on single sixes}" << endl;
1044
1045 if (f_print_orbits) {
1046
1047
1048 string my_fname_mask;
1049
1050 my_fname_mask.assign(fname_mask);
1051 my_fname_mask.append("_single_sixes");
1052
1054 my_fname_mask, Opt,
1055 verbose_level);
1056 }
1057
1058
1059 ost << "\\subsection*{Orbits on tritangent planes}" << endl;
1061 if (f_print_orbits) {
1062
1063 string my_fname_mask;
1064
1065 my_fname_mask.assign(fname_mask);
1066 my_fname_mask.append("_tritangent_planes");
1067
1069 my_fname_mask, Opt,
1070 verbose_level);
1071 }
1072
1073 ost << "\\subsection*{Orbits on Hesse planes}" << endl;
1075 if (f_print_orbits) {
1076
1077 string my_fname_mask;
1078
1079 my_fname_mask.assign(fname_mask);
1080 my_fname_mask.append("_Hesse_planes");
1081
1083 my_fname_mask, Opt,
1084 verbose_level);
1085 }
1087 ost, Surf_A->A, Aut_gens,
1088 verbose_level);
1089
1090 ost << "\\subsection*{Orbits on trihedral pairs}" << endl;
1092 }
1093
1094
1095 ost << "\\clearpage" << endl;
1096
1097}
1098
1099void surface_object_with_action::cheat_sheet_basic(ostream &ost, int verbose_level)
1100{
1101 int f_v = (verbose_level >= 1);
1104
1105 if (f_v) {
1106 cout << "surface_object_with_action::cheat_sheet_basic" << endl;
1107 }
1108
1109
1111 Aut_gens->group_order(ago);
1112 ost << "The automorphism group has order "
1113 << ago << "\\\\" << endl;
1114 ost << "The automorphism group is generated by:\\\\" << endl;
1115 if (f_v) {
1116 cout << "surface_object_with_action::cheat_sheet_basic "
1117 "before Aut_gens->"
1118 "print_generators_tex" << endl;
1119 }
1121
1122
1123 if (f_has_nice_gens) {
1124 ost << "The stabilizer is generated by the following nice generators:\\\\" << endl;
1125 nice_gens->print_tex(ost);
1126
1127 }
1128
1129 ost << "Orbits on Eckardt points:\\\\" << endl;
1131
1132 ost << "\\bigskip" << endl;
1133
1134 if (SO->nb_lines == 27) {
1135 ost << "Orbits on half double-sixes:\\\\" << endl;
1136 int i, idx;
1137
1138 for (i = 0; i < Orbits_on_single_sixes->nb_orbits; i++) {
1139
1140 //ost << "\\bigskip" << endl;
1141 //ost << "" << endl;
1142 ost << "Orbit " << i << " / " << Orbits_on_single_sixes->nb_orbits
1143 << " of length " << Orbits_on_single_sixes->orbit_len[i]
1144 << " consists of the following half double sixes:" << endl;
1145
1146
1147 ost << "$$" << endl;
1148 L.int_set_print_tex(ost,
1152 ost << "$$" << endl;
1153
1155
1156 ost << "orbit rep:" << endl;
1157 ost << "$$" << endl;
1159 ost << "$$" << endl;
1160
1161 }
1162 }
1163
1164 ost << "\\bigskip" << endl;
1165
1166 if (f_v) {
1167 cout << "surface_object_with_action::cheat_sheet_basic done" << endl;
1168 }
1169}
1170
1172 std::string &label_txt,
1173 std::string &label_tex,
1174 int f_print_orbits, std::string &fname_mask,
1176 int verbose_level)
1177{
1178 int f_v = (verbose_level >= 1);
1180
1181 if (f_v) {
1182 cout << "surface_object_with_action::cheat_sheet" << endl;
1183 cout << "surface_object_with_action::cheat_sheet verbose_level = " << verbose_level << endl;
1184 }
1185
1186 if (f_v) {
1187 cout << "surface_object_with_action::cheat_sheet "
1188 "before SO->print_equation" << endl;
1189 }
1190 SO->SOP->print_equation(ost);
1191 if (f_v) {
1192 cout << "surface_object_with_action::cheat_sheet "
1193 "after SO->print_equation" << endl;
1194 }
1195
1196
1198 Aut_gens->group_order(ago);
1199 ost << "The automorphism group has order "
1200 << ago << "\\\\" << endl;
1201
1202
1203
1204
1205 if (f_v) {
1206 cout << "surface_object_with_action::cheat_sheet "
1207 "before SO->print_everything" << endl;
1208 }
1209
1210 SO->SOP->print_everything(ost, verbose_level - 1);
1211
1212 if (f_v) {
1213 cout << "surface_object_with_action::cheat_sheet "
1214 "after SO->print_everything" << endl;
1215 }
1216
1217 print_automorphism_group_gnerators(ost, verbose_level);
1218
1219
1220
1221 if (f_v) {
1222 cout << "surface_object_with_action::cheat_sheet "
1223 "before print_automorphism_group" << endl;
1224 }
1225 print_automorphism_group(ost, f_print_orbits, fname_mask, Opt, verbose_level - 1);
1226
1227
1228#if 0
1229 if (SO->nb_pts_not_on_lines) {
1230
1231 if (f_v) {
1232 cout << "surface_object_with_action::cheat_sheet "
1233 "before cheat_sheet_quartic_curve" << endl;
1234 }
1235 cheat_sheet_quartic_curve(ost,
1236 label_txt, label_tex, verbose_level);
1237 if (f_v) {
1238 cout << "surface_object_with_action::cheat_sheet "
1239 "after cheat_sheet_quartic_curve" << endl;
1240 }
1241
1242 }
1243#endif
1244
1245 ost << "\\clearpage\\subsection*{The Elements of "
1246 "the Automorphism Group}" << endl;
1248
1249 ost << "\\clearpage\\subsection*{The Group Table}" << endl;
1250 long int go;
1251 int block_width = 24;
1252
1254 if (go < 50) {
1256 int *Table;
1257 Aut_gens->create_group_table(Table, go, verbose_level - 1);
1259 Table, go, go, block_width);
1260 FREE_int(Table);
1261 }
1262 else {
1263 ost << "Too big to print." << endl;
1264 }
1265
1266
1268 ost,
1270 verbose_level - 2);
1271
1272
1273 if (Aut_gens->A->degree < 500) {
1274
1276 ost,
1277 Aut_gens->A,
1278 verbose_level - 2);
1279
1280 }
1281 else {
1282 cout << "permutation degree is too large, "
1283 "skipping export to magma and GAP" << endl;
1284 }
1285
1286
1287 if (f_v) {
1288 cout << "surface_object_with_action::cheat_sheet done" << endl;
1289 }
1290
1291
1292}
1293
1295{
1296 int f_v = (verbose_level >= 1);
1298
1299 if (f_v) {
1300 cout << "surface_object_with_action::print_automorphism_group_gnerators" << endl;
1301 }
1302
1303 if (Aut_gens == NULL) {
1304 if (f_v) {
1305 cout << "surface_object_with_action::print_automorphism_group_gnerators "
1306 "the automorphism group is not available" << endl;
1307 }
1308 return;
1309 }
1310 ost << "The automorphism group is generated by:\\\\" << endl;
1311 if (f_v) {
1312 cout << "surface_object_with_action::cheat_sheet "
1313 "before Aut_gens->print_generators_tex" << endl;
1314 }
1316
1317 if (f_v) {
1318 cout << "surface_object_with_action::cheat_sheet "
1319 "before Aut_gens->print_generators_in_different_action_tex" << endl;
1321 }
1323
1324
1325 if (f_has_nice_gens) {
1326 ost << "The stabilizer is generated by the following nice generators:\\\\" << endl;
1327 nice_gens->print_tex(ost);
1328
1329 }
1330
1331
1333 if (f_v) {
1334 cout << "surface_object_with_action::cheat_sheet "
1335 "projectivity stabilizer" << endl;
1336 }
1339 ost << "The projectivity group has order "
1340 << go << "\\\\" << endl;
1341 ost << "The projectivity group is generated by:\\\\" << endl;
1342 if (f_v) {
1343 cout << "surface_object_with_action::cheat_sheet "
1344 "before projectivity_group_gens->"
1345 "print_generators_tex" << endl;
1346 }
1349
1350
1351 ost << "The projectivity group in the action on the lines:\\\\" << endl;
1353 ost,
1355 verbose_level);
1356
1357#if 1
1358 ost << "The elements of the projectivity group "
1359 "in the action on the lines:\\\\" << endl;
1361 ost,
1363 verbose_level);
1364#endif
1365
1366 string label_group;
1367
1368 label_group.assign("label_txt_proj_grp");
1370 ost,
1372 verbose_level - 2);
1373
1374 label_group.assign("label_txt_proj_grp_on_lines");
1376 ost,
1378 verbose_level - 2);
1379
1380 label_group.assign("label_txt_proj_grp_on_tritangent_planes");
1382 ost,
1384 verbose_level - 2);
1385
1386
1387
1388 }
1389
1391 if (f_v) {
1392 cout << "surface_object_with_action::cheat_sheet "
1393 "Sylow subgroups" << endl;
1394 }
1395 int idx;
1396
1397 for (idx = 0; idx < Syl->nb_primes; idx++) {
1398 if (f_v) {
1399 cout << "surface_object_with_action::cheat_sheet "
1400 "idx=" << idx << " / " << Syl->nb_primes << endl;
1401 }
1402 ost << "The " << Syl->primes[idx]
1403 << "-Sylow subgroup is generated by:\\\\" << endl;
1404 Syl->Sub[idx].SG->print_generators_tex(ost);
1405
1406
1407 if (f_v) {
1408 cout << "surface_object_with_action::cheat_sheet "
1409 "idx=" << idx << " / " << Syl->nb_primes << " making label_group" << endl;
1410 }
1411
1412 string label_group;
1413 char str[1000];
1414
1415
1416 label_group.assign("label_txt_proj_grp_syl_");
1417 sprintf(str, "%d", Syl->primes[idx]);
1418 label_group.append(str);
1419
1420 if (f_v) {
1421 cout << "surface_object_with_action::cheat_sheet "
1422 "idx=" << idx << " / " << Syl->nb_primes << " label_group=" << label_group << endl;
1423 }
1424
1425 if (f_v) {
1426 cout << "surface_object_with_action::cheat_sheet "
1427 "idx=" << idx << " / " << Syl->nb_primes << " before export_group_and_copy_to_latex" << endl;
1428 }
1429
1430 Syl->Sub[idx].SG->export_group_and_copy_to_latex(label_group,
1431 ost,
1433 verbose_level - 2);
1434
1435 label_group.assign("label_txt_proj_grp_syl_");
1436 sprintf(str, "%d", Syl->primes[idx]);
1437 label_group.append(str);
1438 label_group.append("_on_lines");
1439
1440 if (f_v) {
1441 cout << "surface_object_with_action::cheat_sheet "
1442 "idx=" << idx << " / " << Syl->nb_primes << " label_group=" << label_group << endl;
1443 }
1444
1445 if (f_v) {
1446 cout << "surface_object_with_action::cheat_sheet "
1447 "idx=" << idx << " / " << Syl->nb_primes << " before export_group_and_copy_to_latex" << endl;
1448 }
1449 Syl->Sub[idx].SG->export_group_and_copy_to_latex(label_group,
1450 ost,
1452 verbose_level - 2);
1453
1454 }
1455 }
1456
1457
1458}
1459
1460
1463 actions::action *A,
1464 surface_create *SC,
1466 int verbose_level)
1467{
1468 int f_v = (verbose_level >= 1);
1469
1470
1471 if (f_v) {
1472 cout << "surface_object_with_action::investigate_surface_and_write_report" << endl;
1473 }
1474
1475 string fname;
1476 string fname_mask;
1477 string label;
1478 string label_tex;
1479
1480
1481 fname.assign("surface_");
1482 fname.append(SC->prefix);
1483 fname.append("_with_group.tex");
1484
1485
1486 label.assign("surface_");
1487 label.append(SC->label_txt);
1488
1489 label_tex.assign("surface_");
1490 label_tex.append(SC->label_tex);
1491
1492 fname_mask.assign("surface_");
1493 fname_mask.append(SC->prefix);
1494 fname_mask.append("_orbit_%d");
1495
1496 {
1497 ofstream fp(fname);
1499
1500 L.head_easy(fp);
1501
1503 fp,
1504 Opt,
1505 A,
1506 SC,
1507 Six_arcs,
1508 fname_mask,
1509 label,
1510 label_tex,
1511 verbose_level);
1512
1513
1514 L.foot(fp);
1515 }
1517
1518 cout << "Written file " << fname << " of size "
1519 << Fio.file_size(fname) << endl;
1520
1521
1522}
1523
1524
1525
1526
1528 std::ostream &ost,
1530 actions::action *A,
1531 surface_create *SC,
1533 std::string &fname_mask,
1534 std::string &label,
1535 std::string &label_tex,
1536 int verbose_level)
1537{
1538 int f_v = (verbose_level >= 1);
1539
1540 if (f_v) {
1541 cout << "surface_object_with_action::investigate_surface_and_write_report2" << endl;
1542 }
1543
1544
1545 if (f_v) {
1546 cout << "surface_object_with_action::investigate_surface_and_write_report2 before cheat_sheet" << endl;
1547 }
1548 ost << "\\section{The Cubic Surface " << SC->label_tex << " over $\\mathbb F_{" << SC->F->q << "}$}" << endl;
1549
1550 cheat_sheet(ost,
1551 label,
1552 label_tex,
1553 TRUE /* f_print_orbits */,
1554 fname_mask /* const char *fname_mask*/,
1555 Opt,
1556 verbose_level);
1557 if (f_v) {
1558 cout << "surface_object_with_action::investigate_surface_and_write_report2 after cheat_sheet" << endl;
1559 }
1560
1561
1562
1563 ost << "\\bigskip" << endl;
1564
1565 ost << "\\section{The Finite Field $\\mathbb F_{" << SC->F->q << "}$}" << endl;
1566 SC->F->cheat_sheet(ost, verbose_level);
1567
1568
1569
1570
1571
1572 ost << "\\setlength{\\parindent}{0pt}" << endl;
1573
1574#if 0
1575 if (f_surface_clebsch) {
1576
1577 if (f_v) {
1578 cout << "surface_object_with_action::investigate_surface_and_write_report2 f_surface_clebsch" << endl;
1579 }
1580
1581 //surface_object *SO;
1582 //SO = SoA->SO;
1583
1584 ost << endl;
1585 ost << "\\bigskip" << endl;
1586 ost << endl;
1587 ost << "\\section{Points on the surface}" << endl;
1588 ost << endl;
1589
1591
1592
1593 ost << endl;
1594 ost << "\\bigskip" << endl;
1595 ost << endl;
1596
1597 ost << "\\section{Clebsch maps}" << endl;
1598
1600
1601
1602 ost << endl;
1603 ost << "\\clearpage" << endl;
1604 ost << endl;
1605
1606
1607
1608 ost << "\\section{Six-arcs not on a conic}" << endl;
1609 ost << endl;
1610
1611
1612 //ost << "The six-arcs not on a conic are:\\\\" << endl;
1613 Six_arcs->report_latex(ost);
1614
1615
1616
1617
1618 }
1619 else {
1620 if (f_v) {
1621 cout << "surface_object_with_action::investigate_surface_and_write_report2 !f_surface_clebsch" << endl;
1622 }
1623
1624 }
1625
1626
1627
1628 if (f_surface_quartic) {
1629
1630 if (f_v) {
1631 cout << "surface_object_with_action::investigate_surface_and_write_report2 f_surface_quartic" << endl;
1632 }
1633
1634 {
1635 ofstream ost_quartics("quartics.txt");
1636
1637
1638
1639 all_quartic_curves(ost, ost_quartics, verbose_level);
1640 }
1641
1642 }
1643 else {
1644 if (f_v) {
1645 cout << "surface_object_with_action::investigate_surface_and_write_report2 !f_surface_quartic" << endl;
1646 }
1647
1648
1649 }
1650
1651
1652
1653
1654 if (f_surface_codes) {
1655
1656 if (f_v) {
1657 cout << "surface_object_with_action::investigate_surface_and_write_report2 f_surface_codes" << endl;
1658 }
1659
1660 homogeneous_polynomial_domain *HPD;
1661
1662 HPD = NEW_OBJECT(homogeneous_polynomial_domain);
1663
1664 HPD->init(SC->F, 3, 2 /* degree */,
1665 TRUE /* f_init_incidence_structure */,
1666 t_PART,
1667 verbose_level);
1668
1669 action *A_on_poly;
1670
1671 A_on_poly = NEW_OBJECT(action);
1672 A_on_poly->induced_action_on_homogeneous_polynomials(A,
1673 HPD,
1674 FALSE /* f_induce_action */, NULL,
1675 verbose_level);
1676
1677 cout << "created action A_on_poly" << endl;
1678 A_on_poly->print_info();
1679
1680 schreier *Sch;
1681 longinteger_object full_go;
1682
1683 //Sch = new schreier;
1684 //A2->all_point_orbits(*Sch, verbose_level);
1685
1686 cout << "computing orbits:" << endl;
1687
1688 Sch = A->Strong_gens->orbits_on_points_schreier(A_on_poly, verbose_level);
1689
1690 //SC->Sg->
1691 //Sch = SC->Sg->orbits_on_points_schreier(A_on_poly, verbose_level);
1692
1693 orbit_transversal *T;
1694
1695 A->group_order(full_go);
1696 T = NEW_OBJECT(orbit_transversal);
1697
1698 cout << "before T->init_from_schreier" << endl;
1699
1700 T->init_from_schreier(
1701 Sch,
1702 A,
1703 full_go,
1704 verbose_level);
1705
1706 cout << "after T->init_from_schreier" << endl;
1707
1708 Sch->print_orbit_reps(cout);
1709
1710 cout << "orbit reps:" << endl;
1711
1712 ost << "\\section{Orbits on conics}" << endl;
1713 ost << endl;
1714
1715 T->print_table_latex(
1716 ost,
1717 TRUE /* f_has_callback */,
1718 HPD_callback_print_function2,
1719 HPD /* callback_data */,
1720 TRUE /* f_has_callback */,
1721 HPD_callback_print_function,
1722 HPD /* callback_data */,
1723 verbose_level);
1724
1725
1726 }
1727 else {
1728 if (f_v) {
1729 cout << "surface_object_with_action::investigate_surface_and_write_report2 !f_surface_codes" << endl;
1730 }
1731
1732
1733 }
1734#endif
1735
1736
1737
1738 if (f_v) {
1739 cout << "surface_object_with_action::investigate_surface_and_write_report2 done" << endl;
1740 }
1741}
1742
1744 std::string &surface_prefix,
1745 std::ostream &ost,
1746 std::ostream &ost_quartics,
1747 int verbose_level)
1748{
1749 int f_v = (verbose_level >= 1);
1750
1751 int f_TDO = FALSE;
1752
1753 if (f_v) {
1754 cout << "surface_object_with_action::all_quartic_curves surface_prefix=" << surface_prefix << endl;
1755 }
1756 int pt_orbit;
1757
1758
1759 ost << "Orbits on points not on lines nb orbits = " << Orbits_on_points_not_on_lines->nb_orbits << "\\\\" << endl;
1760
1761 for (pt_orbit = 0; pt_orbit < Orbits_on_points_not_on_lines->nb_orbits; pt_orbit++) {
1762
1763 ost << "\\section{Quartic curve associated with orbit " << pt_orbit
1764 << " / " << Orbits_on_points_not_on_lines->nb_orbits << "}" << endl;
1765
1766
1768
1770
1771 QC->init(this, verbose_level);
1772
1773
1774 if (f_v) {
1775 cout << "surface_object_with_action::all_quartic_curves before QC->quartic" << endl;
1776 }
1777 QC->quartic(surface_prefix, pt_orbit, f_TDO, verbose_level);
1778 if (f_v) {
1779 cout << "surface_object_with_action::all_quartic_curves after QC->quartic" << endl;
1780 }
1781
1782 // the quartic curve is now in QC->curve
1783 // as a Surf->Poly4_x123
1784
1785 if (f_v) {
1786 cout << "surface_object_with_action::all_quartic_curves before QC->compute_stabilizer" << endl;
1787 }
1788 QC->compute_stabilizer(verbose_level);
1789 if (f_v) {
1790 cout << "surface_object_with_action::all_quartic_curves after QC->compute_stabilizer" << endl;
1791 }
1792
1793
1794 if (f_v) {
1795 cout << "surface_object_with_action::all_quartic_curves before QC->cheat_sheet_quartic_curve" << endl;
1796 }
1797 QC->cheat_sheet_quartic_curve(surface_prefix, ost, ost_quartics, f_TDO, verbose_level);
1798 if (f_v) {
1799 cout << "surface_object_with_action::all_quartic_curves after QC->cheat_sheet_quartic_curve" << endl;
1800 }
1801
1802 FREE_OBJECT(QC);
1803 }
1804 if (f_v) {
1805 cout << "surface_object_with_action::all_quartic_curves done" << endl;
1806 }
1807}
1808
1810 std::string &surface_prefix,
1811 std::ostream &ost_quartics_csv,
1812 int verbose_level)
1813{
1814 int f_v = (verbose_level >= 1);
1815 int f_TDO = FALSE;
1816
1817 if (f_v) {
1818 cout << "surface_object_with_action::export_all_quartic_curves surface_prefix=" << surface_prefix << endl;
1819 }
1820 int pt_orbit;
1821
1822 ost_quartics_csv << "orbit,curve,pts_on_curve,bitangents,go" << endl;
1823 for (pt_orbit = 0; pt_orbit < Orbits_on_points_not_on_lines->nb_orbits; pt_orbit++) {
1824
1825 cout << "Quartic curve associated with surface " << surface_prefix
1826 << " and with orbit " << pt_orbit
1827 << " / " << Orbits_on_points_not_on_lines->nb_orbits << "}" << endl;
1828
1829
1831
1833
1834 QC->init(this, verbose_level);
1835
1836
1837 if (f_v) {
1838 cout << "surface_object_with_action::export_all_quartic_curves before QC->quartic" << endl;
1839 }
1840 QC->quartic(surface_prefix, pt_orbit, f_TDO, verbose_level);
1841 if (f_v) {
1842 cout << "surface_object_with_action::export_all_quartic_curves after QC->quartic" << endl;
1843 }
1844
1845
1846#if 0
1847 // the quartic curve is now in QC->curve
1848 // as a Surf->Poly4_x123
1849
1850 if (f_v) {
1851 cout << "surface_object_with_action::export_all_quartic_curves before QC->compute_stabilizer" << endl;
1852 }
1853 QC->compute_stabilizer(verbose_level);
1854 if (f_v) {
1855 cout << "surface_object_with_action::export_all_quartic_curves after QC->compute_stabilizer" << endl;
1856 }
1857
1858#endif
1859
1860 ost_quartics_csv << pt_orbit;
1861
1862 int i;
1863 {
1864 ostringstream s;
1865
1866
1867 for (i = 0; i < Surf->Poly4_x123->get_nb_monomials(); i++) {
1868 s << QC->curve[i];
1869 if (i < Surf->Poly4_x123->get_nb_monomials() - 1) {
1870 s << ",";
1871 }
1872 }
1873 ost_quartics_csv << ",\"" << s.str() << "\"";
1874 }
1875 {
1876 ostringstream s;
1877
1878
1879 for (i = 0; i < QC->sz_curve; i++) {
1880 s << QC->Pts_on_curve[i];
1881 if (i < QC->sz_curve - 1) {
1882 s << ",";
1883 }
1884 }
1885 ost_quartics_csv << ",\"" << s.str() << "\"";
1886 }
1887 {
1888 ostringstream s;
1889
1890 for (i = 0; i < QC->nb_bitangents; i++) {
1891 s << QC->Bitangents[i];
1892 if (i < QC->nb_bitangents - 1) {
1893 s << ",";
1894 }
1895 }
1896 ost_quartics_csv << ",\"" << s.str() << "\"";
1897 }
1898 {
1899 //longinteger_object go;
1900
1901 //QC->Stab_gens_quartic->group_order(go);
1902 ost_quartics_csv << "," << -1;
1903 }
1904
1905 ost_quartics_csv << endl;
1906
1907 FREE_OBJECT(QC);
1908 }
1909 ost_quartics_csv << "END" << endl;
1910 if (f_v) {
1911 cout << "surface_object_with_action::export_all_quartic_curves done" << endl;
1912 }
1913}
1914
1915void surface_object_with_action::print_full_del_Pezzo(std::ostream &ost, int verbose_level)
1916{
1917 int f_v = (verbose_level >= 1);
1918 int i, f, P_idx, P_idx_local;
1919 long int P;
1920
1921 if (f_v) {
1922 cout << "surface_object_with_action::print_full_del_Pezzo" << endl;
1923 }
1924
1925
1926 //schreier *Orbits_on_points_not_on_lines;
1927
1928 ost << "Full del Pezzo surfaces:\\\\" << endl;
1929 ost << "testing all " << Orbits_on_points_not_on_lines->nb_orbits << " orbits:\\\\" << endl;
1930
1931 ost << "$$" << endl;
1932 ost << "\\begin{array}{|c|c|c|c|c|}" << endl;
1933 for (i = 0; i < Orbits_on_points_not_on_lines->nb_orbits; i++) {
1935 P_idx_local = Orbits_on_points_not_on_lines->orbit[f];
1936 P = SO->SOP->Pts_not_on_lines[P_idx_local];
1937 if (!SO->find_point(P, P_idx)) {
1938 cout << "surface_object_with_action::print_full_del_Pezzo could not find point" << endl;
1939 exit(1);
1940 }
1941 ost << i << " & " << P_idx << " & " << P << " & ";
1942
1943 int *f_deleted;
1944 int j, f_first;
1945
1946 SO->SOP->compute_reduced_set_of_points_not_on_lines_wrt_P(P_idx, f_deleted, verbose_level);
1947 // P_idx = index into SO->Pts[]
1948
1949 ost << "\\{";
1950 f_first = TRUE;
1951 for (j = 0; j < SO->SOP->nb_pts_not_on_lines; j++) {
1952 if (!f_deleted[j]) {
1953 if (f_first) {
1954 f_first = FALSE;
1955 }
1956 else {
1957 ost << ",";
1958 }
1959 ost << j;
1960 }
1961 }
1962 ost << "\\}";
1963 ost << " & ";
1964 if (SO->SOP->test_full_del_pezzo(P_idx, f_deleted, verbose_level)) {
1965 ost << " \\mbox{is full}\\\\" << endl;
1966 }
1967 else {
1968 ost << " \\mbox{is not full}\\\\" << endl;
1969 }
1970
1971
1972 //, SO->SOP->nb_pts_not_on_lines,
1973
1974 FREE_int(f_deleted);
1975 }
1976 ost << "\\end{array}" << endl;
1977 ost << "$$" << endl;
1978
1979 if (f_v) {
1980 cout << "surface_object_with_action::print_full_del_Pezzo done" << endl;
1981 }
1982}
1983
1984
1985
1986
1987}}}}
1988
void latex_half_double_six(std::ostream &ost, int idx)
Definition: schlaefli.cpp:2259
ring_theory::homogeneous_polynomial_domain * Poly4_x123
void compute_reduced_set_of_points_not_on_lines_wrt_P(int P_idx, int *&f_deleted, int verbose_level)
a particular cubic surface in PG(3,q), given by its equation
void init_equation(surface_domain *Surf, int *eqn, int verbose_level)
void init_with_27_lines(surface_domain *Surf, long int *Lines27, int *eqn, int f_find_double_six_and_rearrange_lines, int verbose_level)
void cheat_sheet(std::ostream &f, int verbose_level)
options for drawing an object of type layered_graph
Definition: graphics.h:457
void print_integer_matrix_tex_block_by_block(std::ostream &ost, int *p, int m, int n, int block_width)
a class to represent arbitrary precision integers
Definition: ring_theory.h:366
a permutation group in a fixed action.
Definition: actions.h:99
void compute_projectivity_subgroup(groups::strong_generators *&projectivity_gens, groups::strong_generators *Aut_gens, int verbose_level)
action * restricted_action(long int *points, int nb_points, int verbose_level)
action * create_induced_action_on_sets(int nb_sets, int set_size, long int *sets, int verbose_level)
groups::strong_generators * Strong_gens
Definition: actions.h:130
void group_order(ring_theory::longinteger_object &go)
Definition: action.cpp:2223
groups::schreier * orbits_on_points_schreier(actions::action *A_given, int verbose_level)
Definition: vector_ge.cpp:930
void get_orbit_decomposition_scheme_of_graph(int *Adj, int n, int *&Decomp_scheme, int verbose_level)
Definition: schreier.cpp:2858
void print_and_list_all_orbits_and_stabilizers_with_list_of_elements_tex(std::ostream &ost, actions::action *default_action, strong_generators *gens, int verbose_level)
void print_and_list_orbits_with_original_labels_tex(std::ostream &ost)
void print_and_list_orbit_and_stabilizer_with_list_of_elements_tex(int i, actions::action *default_action, strong_generators *gens, std::ostream &ost)
void make_orbit_trees(std::ostream &ost, std::string &fname_mask, graphics::layered_graph_draw_options *Opt, int verbose_level)
void print_and_list_orbits_sorted_by_length_tex(std::ostream &ost)
a permutation group represented via a stabilizer chain
Definition: groups.h:1273
a strong generating set for a permutation group with respect to a fixed action
Definition: groups.h:1703
void create_group_table(int *&Table, long int &go, int verbose_level)
void export_group_and_copy_to_latex(std::string &label_txt, std::ostream &ost, actions::action *A2, int verbose_level)
void test_if_set_is_invariant_under_given_action(actions::action *A_given, long int *set, int set_sz, int verbose_level)
void print_elements_latex_ost_with_print_point_function(actions::action *A, std::ostream &ost, void(*point_label)(std::stringstream &sstr, long int pt, void *data), void *point_label_data)
void print_generators_tex_with_print_point_function(actions::action *A, std::ostream &ost, void(*point_label)(std::stringstream &sstr, long int pt, void *data), void *point_label_data)
schreier * orbits_on_points_schreier(actions::action *A_given, int verbose_level)
void print_generators_in_different_action_tex(std::ostream &ost, actions::action *A2)
void group_order(ring_theory::longinteger_object &go)
The Sylow structure of a finite group.
Definition: groups.h:2068
void init_equation(surface_with_action *Surf_A, int *eqn, groups::strong_generators *Aut_gens, int verbose_level)
void cheat_sheet(std::ostream &ost, std::string &label_txt, std::string &label_tex, int f_print_orbits, std::string &fname_mask, graphics::layered_graph_draw_options *Opt, int verbose_level)
void print_automorphism_group(std::ostream &ost, int f_print_orbits, std::string &fname_mask, graphics::layered_graph_draw_options *Opt, int verbose_level)
void init_with_group(surface_with_action *Surf_A, long int *Lines, int nb_lines, int *eqn, groups::strong_generators *Aut_gens, int f_find_double_six_and_rearrange_lines, int f_has_nice_gens, data_structures_groups::vector_ge *nice_gens, int verbose_level)
void init_with_surface_object(surface_with_action *Surf_A, algebraic_geometry::surface_object *SO, groups::strong_generators *Aut_gens, int f_has_nice_gens, data_structures_groups::vector_ge *nice_gens, int verbose_level)
void investigate_surface_and_write_report(graphics::layered_graph_draw_options *Opt, actions::action *A, surface_create *SC, cubic_surfaces_and_arcs::six_arcs_not_on_a_conic *Six_arcs, int verbose_level)
void all_quartic_curves(std::string &surface_prefix, std::ostream &ost, std::ostream &ost_quartics, int verbose_level)
void init_surface_object(surface_with_action *Surf_A, algebraic_geometry::surface_object *SO, groups::strong_generators *Aut_gens, int verbose_level)
void export_all_quartic_curves(std::string &surface_prefix, std::ostream &ost_quartics_csv, int verbose_level)
void investigate_surface_and_write_report2(std::ostream &ost, graphics::layered_graph_draw_options *Opt, actions::action *A, surface_create *SC, cubic_surfaces_and_arcs::six_arcs_not_on_a_conic *Six_arcs, std::string &fname_mask, std::string &label, std::string &label_tex, int verbose_level)
to create a cubic surface from a description using class surface_create_description
construction of a quartic curve from a cubic surface by means of projecting the intersection with the...
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)
#define FREE_int(p)
Definition: foundations.h:640
#define NEW_OBJECT(type)
Definition: foundations.h:638
#define FREE_OBJECT(p)
Definition: foundations.h:651
#define TRUE
Definition: foundations.h:231
#define FALSE
Definition: foundations.h:234
void callback_surface_domain_sstr_line_label(std::stringstream &sstr, long int pt, void *data)
the orbiter library for the classification of combinatorial objects