Orbiter 2022
Combinatorial Objects
action_projective.cpp
Go to the documentation of this file.
1/*
2 * action_projective.cpp
3 *
4 * Created on: Feb 18, 2019
5 * Author: betten
6 */
7
8
9
11#include "group_actions.h"
12
13using namespace std;
14
15
16namespace orbiter {
17namespace layer3_group_actions {
18namespace actions {
19
22 long int *set, int set_size, //int &canonical_pt,
23 int *canonical_set_or_NULL,
24 int verbose_level)
25// assuming we are in a linear action.
26// added 2/28/2011, called from analyze.cpp
27// November 17, 2014 moved here from TOP_LEVEL/extra.cpp
28// December 31, 2014, moved here from projective_space.cpp
29{
30 int f_v = (verbose_level >= 1);
33
34 if (f_v) {
35 cout << "action::set_stabilizer_in_projective_space" << endl;
36 cout << "verbose_level = " << verbose_level << endl;
37 cout << "set_size = " << set_size << endl;
38 }
39
40
42
43 OwCF->init_point_set(set, set_size, verbose_level);
44
45 OwCF->P = P;
46
47 int nb_rows, nb_cols;
48 data_structures::bitvector *Canonical_form = NULL;
49
50 OwCF->encoding_size(
51 nb_rows, nb_cols,
52 verbose_level);
53
54
55
58
59
61 NO->allocate(nb_rows + nb_cols, 0 /* verbose_level */);
62
63 if (f_v) {
64 cout << "action::set_stabilizer_in_projective_space before Nau.set_stabilizer_of_object" << endl;
65 }
67 OwCF,
68 this /* A_linear */,
69 FALSE /* f_compute_canonical_form */, Canonical_form,
70 NO,
71 verbose_level - 2);
72 if (f_v) {
73 cout << "action::set_stabilizer_in_projective_space after Nau.set_stabilizer_of_object" << endl;
74 }
75
76 if (f_v) {
77 cout << "canonical_form_nauty::quartic_curve "
78 "go = " << *NO->Ago << endl;
79
80 NO->print_stats();
81
82
83 }
84
85
86 FREE_OBJECT(NO);
87
88
89 FREE_OBJECT(OwCF);
90
91 return SG;
92}
93
96 int *Elt, int *Mtx, int &frobenius,
97 int verbose_level)
98// uses the function A->element_image_of
99{
100 int f_v = (verbose_level >= 1);
101 int ret;
102
103 if (f_v) {
104 cout << "action::reverse_engineer_semilinear_map, before P->reverse_engineer_semilinear_map" << endl;
105 }
106 ret = P->reverse_engineer_semilinear_map(Elt, Mtx, frobenius, verbose_level);
107 if (f_v) {
108 cout << "action::reverse_engineer_semilinear_map, after P->reverse_engineer_semilinear_map" << endl;
109 }
110 if (f_v) {
111 cout << "action::reverse_engineer_semilinear_map done" << endl;
112 }
113 return ret;
114}
115
116
119 int *Elt,
120 int verbose_level)
121{
122 int f_v = (verbose_level >= 1);
123 int i, j, cnt;
124 int v[4];
126
127 if (f_v) {
128 cout << "action::report_fixed_objects_in_P3" << endl;
129 }
130 //ost << "\\section{Fixed Objects}" << endl;
131
132 F = P3->F;
133
134 ost << "\\bigskip" << endl;
135
136 ost << "The element" << endl;
137 ost << "$$" << endl;
138 element_print_latex(Elt, ost);
139 ost << "$$" << endl;
140 ost << "has the following fixed objects:\\\\" << endl;
141
142
143 ost << "\\bigskip" << endl;
144 //ost << "Fixed Points:\\" << endl;
145
146 cnt = 0;
147 for (i = 0; i < P3->N_points; i++) {
148 j = element_image_of(i, Elt, 0 /* verbose_level */);
149 if (j == i) {
150 cnt++;
151 }
152 }
153
154 ost << "There are " << cnt << " fixed points, they are: \\\\" << endl;
155 for (i = 0; i < P3->N_points; i++) {
156 j = element_image_of(i, Elt, 0 /* verbose_level */);
157 F->PG_element_unrank_modified(v, 1, 4, i);
158 if (j == i) {
159 ost << i << " : ";
160 Int_vec_print(ost, v, 4);
161 ost << "\\\\" << endl;
162 cnt++;
163 }
164 }
165
166 ost << "\\bigskip" << endl;
167 //ost << "Fixed Lines\\\\" << endl;
168
169 {
170 action *A2;
171
172 A2 = induced_action_on_grassmannian(2, 0 /* verbose_level*/);
173
174 cnt = 0;
175 for (i = 0; i < A2->degree; i++) {
176 j = A2->element_image_of(i, Elt, 0 /* verbose_level */);
177 if (j == i) {
178 cnt++;
179 }
180 }
181
182 ost << "There are " << cnt << " fixed lines, they are: \\\\" << endl;
183 cnt = 0;
184 for (i = 0; i < A2->degree; i++) {
185 j = A2->element_image_of(i, Elt, 0 /* verbose_level */);
186 if (j == i) {
187 ost << i << " : $";
189 ost << "$\\\\" << endl;
190 cnt++;
191 }
192 }
193
194 FREE_OBJECT(A2);
195 }
196
197 ost << "\\bigskip" << endl;
198 //ost << "Fixed Planes\\\\" << endl;
199
200 {
201 action *A3;
202
203 A3 = induced_action_on_grassmannian(3, 0 /* verbose_level*/);
204
205 cnt = 0;
206 for (i = 0; i < A3->degree; i++) {
207 j = A3->element_image_of(i, Elt, 0 /* verbose_level */);
208 if (j == i) {
209 cnt++;
210 }
211 }
212
213 ost << "There are " << cnt << " fixed planes, they are: \\\\" << endl;
214 cnt = 0;
215 for (i = 0; i < A3->degree; i++) {
216 j = A3->element_image_of(i, Elt, 0 /* verbose_level */);
217 if (j == i) {
218 ost << i << " : $";
220 ost << "$\\\\" << endl;
221 cnt++;
222 }
223 }
224
225 FREE_OBJECT(A3);
226 }
227 if (f_v) {
228 cout << "action::report_fixed_objects_in_P3 done" << endl;
229 }
230}
231
232
233}}}
234
235
compact storage of 0/1-data as bitvectors
void PG_element_unrank_modified(int *v, int stride, int len, int a)
void print_single_generator_matrix_tex(std::ostream &ost, long int a)
Definition: grassmann.cpp:122
a combinatorial object for which a canonical form can be computed using Nauty
Definition: geometry.h:1487
void encoding_size(int &nb_rows, int &nb_cols, int verbose_level)
projective space PG(n,q) of dimension n over Fq
Definition: geometry.h:1916
int reverse_engineer_semilinear_map(int *Elt, int *Mtx, int &frobenius, int verbose_level)
a permutation group in a fixed action.
Definition: actions.h:99
void element_print_latex(void *elt, std::ostream &ost)
Definition: action_cb.cpp:364
groups::strong_generators * set_stabilizer_in_projective_space(geometry::projective_space *P, long int *set, int set_size, int *canonical_set_or_NULL, int verbose_level)
int reverse_engineer_semilinear_map(geometry::projective_space *P, int *Elt, int *Mtx, int &frobenius, int verbose_level)
action * induced_action_on_grassmannian(int k, int verbose_level)
void report_fixed_objects_in_P3(std::ostream &ost, geometry::projective_space *P3, int *Elt, int verbose_level)
long int element_image_of(long int a, void *elt, int verbose_level)
Definition: action_cb.cpp:198
Interface to the graph canonization software Nauty.
Definition: actions.h:1154
groups::strong_generators * set_stabilizer_of_object(geometry::object_with_canonical_form *OwCF, action *A_linear, int f_compute_canonical_form, data_structures::bitvector *&Canonical_form, data_structures::nauty_output *&NO, int verbose_level)
a strong generating set for a permutation group with respect to a fixed action
Definition: groups.h:1703
#define NEW_OBJECT(type)
Definition: foundations.h:638
#define FREE_OBJECT(p)
Definition: foundations.h:651
#define FALSE
Definition: foundations.h:234
#define Int_vec_print(A, B, C)
Definition: foundations.h:685
the orbiter library for the classification of combinatorial objects
induced_actions::action_on_grassmannian * AG