16namespace layer3_group_actions {
54 int verbose_level = 0;
55 int f_v = (verbose_level >= 1);
59 cout <<
"exceptional_isomorphism_O4::freeself finished" << endl;
67 int f_v = (verbose_level >= 1);
70 cout <<
"exceptional_isomorphism_O4::init" << endl;
84 cout <<
"exceptional_isomorphism_O4::init done" << endl;
90 int f_switch,
int *mtx2x2_T,
int *mtx2x2_S,
int *Elt,
93 int f_v = (verbose_level >= 1);
100 cout <<
"exceptional_isomorphism_O4::apply_2to4_embedded" << endl;
104 cout <<
"input in 2x2, 2x2:" << endl;
105 cout <<
"f_switch=" << f_switch << endl;
115 cout <<
"in 4x4:" << endl;
121 cout <<
"in 5x5:" << endl;
126 cout <<
"as group element:" << endl;
131 cout <<
"exceptional_isomorphism_O4::apply_2to4_embedded "
137 int *mtx4x4,
int *mtx5x5,
int verbose_level)
139 int f_v = (verbose_level >= 1);
144 cout <<
"exceptional_isomorphism_O4::apply_5_to_4" << endl;
149 cout <<
"as 5 x 5:" << endl;
153 for (u = 0; u < 4; u++) {
154 for (v = 0; v < 4; v++) {
155 mtx4x4[u * 4 + v] = Data[(u + 1) * 5 + v + 1];
159 cout <<
"as 4 x 4:" << endl;
163 cout <<
"exceptional_isomorphism_O4::apply_5_to_4 done" << endl;
168 int *E4,
int *E5,
int verbose_level)
170 int f_v = (verbose_level >= 1);
173 int sqrt_value, sqrt_inv;
185 int Gram5_transformed[25];
186 int ord4, ord4b, ord5;
190 cout <<
"exceptional_isomorphism_O4::apply_4_to_5" << endl;
194 cout <<
"E4:" << endl;
199 cout <<
"ord4=" << ord4 << endl;
211 cout <<
"Gram matrix:" << endl;
213 cout <<
"M4:" << endl;
215 cout <<
"M4t:" << endl;
223 cout <<
"transformed Gram matrix:" << endl;
228 for (i = 0; i < 16; i++) {
236 if (value != mtx_tmp2[i]) {
237 cout <<
"the transformed Gram matrix "
238 "has several values" << endl;
245 cout <<
"value=" << value << endl;
250 cout <<
"discrete_log=" << discrete_log << endl;
252 if (
ODD(discrete_log)) {
253 cout <<
"value is not a square: discrete_log=" << discrete_log << endl;
261 cout <<
"sqrt_value=" << sqrt_value << endl;
265 cout <<
"sqrt_inv=" << sqrt_inv << endl;
267 for (i = 0; i < 16; i++) {
268 M4[i] =
Fq->
mult(M4[i], sqrt_inv);
272 cout <<
"E4b:" << endl;
277 cout <<
"ord4b=" << ord4b << endl;
283 cout <<
"E4b^" << ord4b <<
"=" << endl;
291 for (i = 0; i < 4; i++) {
292 for (j = 0; j < 4; j++) {
293 M5[(i + 1) * 5 + j + 1] = M4[i * 4 + j];
299 cout <<
"E5:" << endl;
305 Gram5[0 * 5 + 0] =
Fq->
add(1, 1);
306 Gram5[1 * 5 + 2] = 1;
307 Gram5[2 * 5 + 1] = 1;
308 Gram5[3 * 5 + 4] = 1;
309 Gram5[4 * 5 + 3] = 1;
312 cout <<
"Gram5 matrix:" << endl;
314 cout <<
"M5:" << endl;
324 Fq->transpose_matrix(M5, M5t, 5, 5);
328 Fq->mult_matrix_matrix(M5, gram5, M5_tmp1, 5, 5, 5,
330 Fq->mult_matrix_matrix(M5_tmp1, M5t, M5_tmp2, 5, 5, 5,
334 cout <<
"transformed Gram5 matrix:" << endl;
339 cout <<
"ord4=" << ord4 <<
" ord5=" << ord5 << endl;
343 cout <<
"exceptional_isomorphism_O4::apply_4_to_5 done" << endl;
348 int *E4,
int &f_switch,
int *E2_a,
int *E2_b,
351 int f_v = (verbose_level >= 1);
358 cout <<
"exceptional_isomorphism_O4::apply_4_to_2" << endl;
361 cout <<
"E4:" << endl;
367 cout <<
"as 4 x 4:" << endl;
375 cout <<
"as 2 x 2:" << endl;
376 cout <<
"f_switch=" << f_switch << endl;
377 cout <<
"E2_a=" << endl;
379 cout <<
"E2_b=" << endl;
383 cout <<
"exceptional_isomorphism_O4::apply_4_to_2 done" << endl;
388 int &f_switch,
int *E2_a,
int *E2_b,
int *E4,
391 int f_v = (verbose_level >= 1);
396 cout <<
"exceptional_isomorphism_O4::apply_2_to_4" << endl;
399 cout <<
"as 2 x 2:" << endl;
400 cout <<
"f_switch=" << f_switch << endl;
401 cout <<
"E2_a=" << endl;
403 cout <<
"E2_b=" << endl;
408 E2_a, E2_b, f_switch, Data);
412 cout <<
"E4:" << endl;
417 cout <<
"exceptional_isomorphism_O4::apply_2_to_4 done" << endl;
423 int small[8], f_switch, r, order;
430 f_switch, mtx4x4, 0);
433 for (r = 0; r < 2; r++) {
434 cout <<
"component " << r <<
":" << endl;
439 cout <<
"has order " << order << endl;
450static void print_from_to(
int d,
int i,
int j,
int *v1,
int *v2)
453 int_vec_print(cout, v1, d);
454 cout <<
" -> " << j <<
" = ";
455 int_vec_print(cout, v2, d);
global functions related to finite fields, irreducible polynomials and such
void O4_isomorphism_4to2(field_theory::finite_field *F, int *At, int *As, int &f_switch, int *B, int verbose_level)
void O4_isomorphism_2to4(field_theory::finite_field *F, int *At, int *As, int f_switch, int *B)
void PG_element_normalize_from_front(int *v, int stride, int len)
linear_algebra::linear_algebra * Linear_algebra
void transform_form_matrix(int *A, int *Gram, int *new_Gram, int d, int verbose_level)
void transpose_matrix(int *A, int *At, int ma, int na)
void mult_matrix_matrix(int *A, int *B, int *C, int m, int n, int o, int verbose_level)
a permutation group in a fixed action.
void element_print_quick(void *elt, std::ostream &ost)
void element_power_int_in_place(int *Elt, int n, int verbose_level)
void make_element(int *Elt, int *data, int verbose_level)
void element_print_as_permutation(void *elt, std::ostream &ost)
int element_order(void *elt)
void apply_4_to_2(int *E4, int &f_switch, int *E2_a, int *E2_b, int verbose_level)
field_theory::finite_field * Fq
~exceptional_isomorphism_O4()
void apply_4_to_5(int *E4, int *E5, int verbose_level)
void print_as_2x2(int *mtx4x4)
void init(field_theory::finite_field *Fq, actions::action *A2, actions::action *A4, actions::action *A5, int verbose_level)
exceptional_isomorphism_O4()
void apply_2to4_embedded(int f_switch, int *mtx2x2_T, int *mtx2x2_S, int *Elt, int verbose_level)
void apply_2_to_4(int &f_switch, int *E2_a, int *E2_b, int *E4, int verbose_level)
void apply_5_to_4(int *mtx4x4, int *mtx5x5, int verbose_level)
#define Int_vec_zero(A, B)
#define Int_vec_print_integer_matrix_width(A, B, C, D, E, F)
#define Int_vec_copy(A, B, C)
the orbiter library for the classification of combinatorial objects