Orbiter 2022
Combinatorial Objects
set_stabilizer.h
Go to the documentation of this file.
1/*
2 * set_stabilizer.h
3 *
4 * Created on: Jun 27, 2021
5 * Author: betten
6 */
7
8#ifndef SRC_LIB_GROUP_ACTIONS_SET_STABILIZER_SET_STABILIZER_H_
9#define SRC_LIB_GROUP_ACTIONS_SET_STABILIZER_SET_STABILIZER_H_
10
11namespace orbiter {
12
13namespace layer4_classification {
14
15
16
17// ####################################################################################
18// compute_stabilizer.cpp
19// ####################################################################################
20
22
24
25public:
26
27
29
30 actions::action *A_on_the_set;
31 // only used to print the induced action on the set
32 // of the set stabilizer
33
34 groups::sims *Stab; // the stabilizer of the original set
35
36
37 ring_theory::longinteger_object stab_order, new_stab_order;
41
43
44
45
46
47
48
49
50 actions::action *A_induced; // the action on Stab_orbits->interesting_points[]
51
52 ring_theory::longinteger_object induced_go, K_go;
53
57 int *T1, *T1v;
58 int *T2;
59
60 groups::sims *Kernel_original;
61 groups::sims *K; // kernel for building up Stab
62
63
64
65 groups::sims *Aut;
66 groups::sims *Aut_original;
67 ring_theory::longinteger_object ago;
68 ring_theory::longinteger_object ago1;
69 ring_theory::longinteger_object target_go;
70
71
72 //union_find_on_k_subsets *U;
73
74
75 long int *Canonical_form_input; // [nb_interesting_subsets_reduced * reduced_set_size]
76 long int *Canonical_forms; // [nb_interesting_subsets_reduced * reduced_set_size]
77 int *Canonical_form_transporter; // [nb_interesting_subsets_reduced * A_induced->elt_size_in_int]
78
81
82
85
86 void null();
87 void freeself();
88 void init(
90 long int *canonical_pts,
91 int verbose_level);
92 void compute_automorphism_group(int verbose_level);
93 void compute_automorphism_group_handle_case(int cnt2, int verbose_level);
94 void setup_stabilizer(groups::sims *Stab0, int verbose_level);
95 void restricted_action_on_interesting_points(int verbose_level);
96 void compute_canonical_form(int verbose_level);
97 void compute_canonical_form_handle_case(int cnt, int verbose_level);
98 void compute_canonical_set(long int *set_in, long int *set_out, int sz,
99 int *transporter, int verbose_level);
100 void compute_canonical_set_and_group(long int *set_in, long int *set_out, int sz,
101 int *transporter, groups::sims *&stab, int verbose_level);
102 void update_stabilizer(int verbose_level);
103 void add_automorphism(int verbose_level);
104 void retrieve_automorphism(int verbose_level);
105 void make_canonical_second_set(int verbose_level);
106 void report(std::ostream &ost);
108
109};
110
111
112
113
114
115
116// #############################################################################
117// stabilizer_orbits_and_types.cpp
118// #############################################################################
119
120
121
122
124
125
126
128
129public:
131
132 groups::strong_generators *selected_set_stab_gens;
133 groups::sims *selected_set_stab;
134
135
136 int reduced_set_size; // = set_size - level
137
138
139
140
141 long int *reduced_set1; // [set_size]
142 long int *reduced_set2; // [set_size]
143 long int *reduced_set1_new_labels; // [set_size]
144 long int *reduced_set2_new_labels; // [set_size]
145 long int *canonical_set1; // [set_size]
146 long int *canonical_set2; // [set_size]
147
149 int *elt2, *Elt2;
150 int *transporter0; // = elt1 * elt2
151
152 ring_theory::longinteger_object go_G;
153
154 groups::schreier *Schreier;
156 int *orbit_count1; // [nb_orbits]
157 int *orbit_count2; // [nb_orbits]
158
159
163
164 int *Orbit_patterns; // [nb_interesting_subsets * nb_orbits]
165
166
167 int *orbit_to_interesting_orbit; // [nb_orbits]
168
170 int *interesting_orbits; // [nb_interesting_orbits]
171
172 int nb_interesting_points; // sum of orbit length of interesting orbits
173 long int *interesting_points; // [nb_interesting_points]
174 // Note: Interesting points are sorted within each orbit.
175 // Otherwise, it would not be possible to compute a canonical form.
176
177 int *interesting_orbit_first; // [nb_interesting_orbits]
178 int *interesting_orbit_len; // [nb_interesting_orbits]
179
181
182
183
186 void init(compute_stabilizer *CS, int verbose_level);
188 // uses selected_set_stab_gens to compute orbits on points in action A2
189 void save_interesting_subsets_reduced(int stage, int verbose_level);
190 void find_orbit_pattern(int cnt, int *transp, int verbose_level);
191 // computes transporter to transp
192 void find_interesting_orbits(int verbose_level);
193 void compute_local_labels(long int *set_in, long int *set_out, int sz, int verbose_level);
194 void map_subset_and_compute_local_labels(int cnt, int verbose_level);
196 long int subset_idx, int *transporter, int verbose_level);
197 // computes orbit_count1[]
198 int check_orbit_count();
199 void print_orbit_count(int f_both);
201
202};
203
204
205// #############################################################################
206// substructure_classifier.cpp
207// #############################################################################
208
209
210
212
213
214
215
217public:
218
219
220 std::string fname_base_out;
222
225 actions::action *A;
226 actions::action *A2;
229
230
234 std::string &fname_base_out,
235 actions::action *A,
236 actions::action *A2,
237 groups::strong_generators *gens,
239 int verbose_level);
241 actions::action *A, actions::action *A2,
242 groups::strong_generators *Strong_gens,
243 int intermediate_subset_size,
244 std::string &fname_mask, int nb, std::string &column_label,
245 std::string &fname_out,
246 int verbose_level);
248 std::string &fname_out,
249 int cnt, int nb, int row,
250 long int *pts,
251 int nb_pts,
252 long int *canonical_pts,
253 int verbose_level);
254 void handle_orbit(
256 long int *canonical_pts,
257 int *transporter_to_canonical_form,
258 groups::strong_generators *&Gens_stabilizer_original_set,
259 int verbose_level);
260
261
262};
263
264
265
266
267
268// #############################################################################
269// substructure_stats_and_selection.cpp
270// #############################################################################
271
272
273
275
276
277
278
280public:
281
282 std::string fname_case_out;
283
285
286 long int *Pts;
288
289
290 // computed by SubC->PC->trace_all_k_subsets_and_compute_frequencies:
291 int nCk;
292 int *isotype; // [nCk]
293 int *orbit_frequencies; // [nb_orbits]
295 data_structures::tally *T;
296
297
298 data_structures::set_of_sets *SoS;
299 int *types;
304
305 long int *interesting_subsets; // [selected_frequency]
307 // interesting_subsets are the lvl-subsets of the given set
308 // which are of the chosen type.
309 // There is nb_interesting_subsets of them.
310
311 groups::strong_generators *gens; // generators for the selected canonical subset
312 //int *transporter_to_canonical_form;
313 //strong_generators *Gens_stabilizer_original_set;
314
315
318 void init(
319 std::string &fname_case_out,
321 long int *Pts,
322 int nb_pts,
323 int verbose_level);
324
325};
326
327
328
329
330}}
331
332
333
334
335
336#endif /* SRC_LIB_GROUP_ACTIONS_SET_STABILIZER_SET_STABILIZER_H_ */
void compute_canonical_set(long int *set_in, long int *set_out, int sz, int *transporter, int verbose_level)
ring_theory::longinteger_object induced_go
ring_theory::longinteger_object stab_order
void compute_automorphism_group_handle_case(int cnt2, int verbose_level)
void init(substructure_stats_and_selection *SubSt, long int *canonical_pts, int verbose_level)
ring_theory::longinteger_object new_stab_order
void compute_canonical_set_and_group(long int *set_in, long int *set_out, int sz, int *transporter, groups::sims *&stab, int verbose_level)
void compute_canonical_form_handle_case(int cnt, int verbose_level)
substructure_stats_and_selection * SubSt
void setup_stabilizer(groups::sims *Stab0, int verbose_level)
to control the behavior of the poset classification algorithm
orbits of the stabilizer of the substructure and orbit types
void find_orbit_pattern(int cnt, int *transp, int verbose_level)
void compute_local_labels(long int *set_in, long int *set_out, int sz, int verbose_level)
void map_reduced_set_and_do_orbit_counting(int cnt, long int subset_idx, int *transporter, int verbose_level)
void set_stabilizer_in_any_space(actions::action *A, actions::action *A2, groups::strong_generators *Strong_gens, int intermediate_subset_size, std::string &fname_mask, int nb, std::string &column_label, std::string &fname_out, int verbose_level)
void set_stabilizer_of_set(std::string &fname_out, int cnt, int nb, int row, long int *pts, int nb_pts, long int *canonical_pts, int verbose_level)
void classify_substructures(std::string &fname_base_out, actions::action *A, actions::action *A2, groups::strong_generators *gens, int substructure_size, int verbose_level)
poset_classification::poset_classification * PC
poset_classification::poset_classification_control * Control
poset_classification::poset_with_group_action * Poset
void handle_orbit(substructure_stats_and_selection *SubSt, long int *canonical_pts, int *transporter_to_canonical_form, groups::strong_generators *&Gens_stabilizer_original_set, int verbose_level)
void init(std::string &fname_case_out, substructure_classifier *SubC, long int *Pts, int nb_pts, int verbose_level)
the orbiter library for the classification of combinatorial objects