Orbiter 2022
Combinatorial Objects
representation_theory_domain.cpp
Go to the documentation of this file.
1/*
2 * representation_theory_domain.cpp
3 *
4 * Created on: Jan 10, 2022
5 * Author: betten
6 */
7
8
9
10
11#include "foundations.h"
12
13using namespace std;
14
15
16
17namespace orbiter {
18namespace layer1_foundations {
19namespace linear_algebra {
20
21
22
24{
25 F = NULL;
26}
27
29{
30
31}
32
34{
35 int f_v = (verbose_level >= 1);
36
37 if (f_v) {
38 cout << "representation_theory_domain::init" << endl;
39 }
41 if (f_v) {
42 cout << "representation_theory_domain::init done" << endl;
43 }
44
45}
46
48 int q, int a, int b, int c, int d)
49{
50 //int i;
51
52 Int_vec_zero(A, 64);
53
54 A[0 * 8 + 0] = m_term(q, d, d, d);
55 A[0 * 8 + 1] = m_term(q, c, c, c);
56 A[0 * 8 + 2] = m_term(q, d, d, c);
57 A[0 * 8 + 3] = m_term(q, d, c, d);
58 A[0 * 8 + 4] = m_term(q, c, d, d);
59 A[0 * 8 + 5] = m_term(q, d, c, c);
60 A[0 * 8 + 6] = m_term(q, c, c, d);
61 A[0 * 8 + 7] = m_term(q, c, d, c);
62
63 A[1 * 8 + 0] = m_term(q, b, b, b);
64 A[1 * 8 + 1] = m_term(q, a, a, a);
65 A[1 * 8 + 2] = m_term(q, b, b, a);
66 A[1 * 8 + 3] = m_term(q, b, a, b);
67 A[1 * 8 + 4] = m_term(q, a, b, b);
68 A[1 * 8 + 5] = m_term(q, b, a, a);
69 A[1 * 8 + 6] = m_term(q, a, a, b);
70 A[1 * 8 + 7] = m_term(q, a, b, a);
71
72 A[2 * 8 + 0] = m_term(q, d, d, b);
73 A[2 * 8 + 1] = m_term(q, c, c, a);
74 A[2 * 8 + 2] = m_term(q, d, d, a);
75 A[2 * 8 + 3] = m_term(q, d, c, b);
76 A[2 * 8 + 4] = m_term(q, c, d, b);
77 A[2 * 8 + 5] = m_term(q, d, c, a);
78 A[2 * 8 + 6] = m_term(q, c, c, b);
79 A[2 * 8 + 7] = m_term(q, c, d, a);
80
81 A[3 * 8 + 0] = m_term(q, d, b, d);
82 A[3 * 8 + 1] = m_term(q, c, a, c);
83 A[3 * 8 + 2] = m_term(q, d, b, c);
84 A[3 * 8 + 3] = m_term(q, d, a, d);
85 A[3 * 8 + 4] = m_term(q, c, b, d);
86 A[3 * 8 + 5] = m_term(q, d, a, c);
87 A[3 * 8 + 6] = m_term(q, c, a, d);
88 A[3 * 8 + 7] = m_term(q, c, b, c);
89
90 A[4 * 8 + 0] = m_term(q, b, d, d);
91 A[4 * 8 + 1] = m_term(q, a, c, c);
92 A[4 * 8 + 2] = m_term(q, b, d, c);
93 A[4 * 8 + 3] = m_term(q, b, c, d);
94 A[4 * 8 + 4] = m_term(q, a, d, d);
95 A[4 * 8 + 5] = m_term(q, b, c, c);
96 A[4 * 8 + 6] = m_term(q, a, c, d);
97 A[4 * 8 + 7] = m_term(q, a, d, c);
98
99 A[5 * 8 + 0] = m_term(q, d, b, b);
100 A[5 * 8 + 1] = m_term(q, c, a, a);
101 A[5 * 8 + 2] = m_term(q, d, b, a);
102 A[5 * 8 + 3] = m_term(q, d, a, b);
103 A[5 * 8 + 4] = m_term(q, c, b, b);
104 A[5 * 8 + 5] = m_term(q, d, a, a);
105 A[5 * 8 + 6] = m_term(q, c, a, b);
106 A[5 * 8 + 7] = m_term(q, c, b, a);
107
108 A[6 * 8 + 0] = m_term(q, b, b, d);
109 A[6 * 8 + 1] = m_term(q, a, a, c);
110 A[6 * 8 + 2] = m_term(q, b, b, c);
111 A[6 * 8 + 3] = m_term(q, b, a, d);
112 A[6 * 8 + 4] = m_term(q, a, b, d);
113 A[6 * 8 + 5] = m_term(q, b, a, c);
114 A[6 * 8 + 6] = m_term(q, a, a, d);
115 A[6 * 8 + 7] = m_term(q, a, b, c);
116
117 A[7 * 8 + 0] = m_term(q, b, d, b);
118 A[7 * 8 + 1] = m_term(q, a, c, a);
119 A[7 * 8 + 2] = m_term(q, b, d, a);
120 A[7 * 8 + 3] = m_term(q, b, c, b);
121 A[7 * 8 + 4] = m_term(q, a, d, b);
122 A[7 * 8 + 5] = m_term(q, b, c, a);
123 A[7 * 8 + 6] = m_term(q, a, c, b);
124 A[7 * 8 + 7] = m_term(q, a, d, a);
125
127}
128
130 int q, int a, int b, int c, int d)
131{
132 //int i;
133 int tq = 2 * q;
134 int tq1 = 2 * q + 1;
135 int tq2 = 2 * q + 2;
136 int q1 = q + 1;
137 int q2 = q + 2;
138
139
140 Int_vec_zero(A, 81);
141
142 A[0 * 9 + 0] = term1(d,tq2);
143 A[0 * 9 + 1] = term2(c,d,q1,q1);
144 A[0 * 9 + 2] = term1(c,tq2);
145 A[0 * 9 + 3] = term2(c,d,q,q2);
146 A[0 * 9 + 4] = term2(c,d,1,tq1);
147 A[0 * 9 + 5] = term2(c,d,tq,2);
148 A[0 * 9 + 6] = term2(c,d,2,tq);
149 A[0 * 9 + 7] = term2(c,d,tq1,1);
150 A[0 * 9 + 8] = term2(c,d,q2,q);
151
152 A[1 * 9 + 0] = F->four_times(term2(b,d,q1,q1));
153 A[1 * 9 + 1] = add(add(add(term2(a,d,q1,q1),term4(a,b,c,d,q,1,1,q)),term4(a,b,c,d,1,q,q,1)),term2(b,c,q1,q1));
154 A[1 * 9 + 2] = F->four_times(term2(a,c,q1,q1));
155 A[1 * 9 + 3] = twice(add(term3(a,b,d,q,1,q1),term3(b,c,d,q1,q,1)));
156 A[1 * 9 + 4] = twice(add(term3(a,b,d,1,q,q1),term3(b,c,d,q1,1,q)));
157 A[1 * 9 + 5] = F->four_times(term4(a,b,c,d,q,1,q,1));
158 A[1 * 9 + 6] = F->four_times(term4(a,b,c,d,1,q,1,q));
159 A[1 * 9 + 7] = twice(add(term3(a,b,c,q,1,q1),term3(a,c,d,q1,q,1)));
160 A[1 * 9 + 8] = twice(add(term3(a,c,d,q1,1,q),term3(a,b,c,1,q,q1)));
161
162 A[2 * 9 + 0] = term1(b,tq2);
163 A[2 * 9 + 1] = term2(a,b,q1,q1);
164 A[2 * 9 + 2] = term1(a,tq2);
165 A[2 * 9 + 3] = term2(a,b,q,q2);
166 A[2 * 9 + 4] = term2(a,b,1,tq1);
167 A[2 * 9 + 5] = term2(a,b,tq,2);
168 A[2 * 9 + 6] = term2(a,b,2,tq);
169 A[2 * 9 + 7] = term2(a,b,tq1,1);
170 A[2 * 9 + 8] = term2(a,b,q2,q);
171
172 A[3 * 9 + 0] = twice(term2(b,d,q,q2));
173 A[3 * 9 + 1] = add(term3(a,c,d,q,1,q1),term3(b,c,d,q,q1,1));
174 A[3 * 9 + 2] = twice(term2(a,c,q,q2));
175 A[3 * 9 + 3] = add(term2(a,d,q,q2),term3(b,c,d,q,q,2));
176 A[3 * 9 + 4] = twice(term3(b,c,d,q,1,q1));
177 A[3 * 9 + 5] = twice(term3(a,c,d,q,q,2));
178 A[3 * 9 + 6] = twice(term3(b,c,d,q,2,q));
179 A[3 * 9 + 7] = twice(term3(a,c,d,q,q1,1));
180 A[3 * 9 + 8] = add(term3(a,c,d,q,2,q),term2(b,c,q,q2));
181
182 A[4 * 9 + 0] = twice(term2(b,d,1,tq1));
183 A[4 * 9 + 1] = add(term3(a,c,d,1,q,q1),term3(b,c,d,1,q1,q));
184 A[4 * 9 + 2] = twice(term2(a,c,1,tq1));
185 A[4 * 9 + 3] = twice(term3(b,c,d,1,q,q1));
186 A[4 * 9 + 4] = add(term2(a,d,1,tq1),term3(b,c,d,1,1,tq));
187 A[4 * 9 + 5] = twice(term3(b,c,d,1,tq,1));
188 A[4 * 9 + 6] = twice(term3(a,c,d,1,1,tq));
189 A[4 * 9 + 7] = add(term3(a,c,d,1,tq,1),term2(b,c,1,tq1));
190 A[4 * 9 + 8] = twice(term3(a,c,d,1,q1,q));
191
192 A[5 * 9 + 0] = term2(b,d,tq,2);
193 A[5 * 9 + 1] = term4(a,b,c,d,q,q,1,1);
194 A[5 * 9 + 2] = term2(a,c,tq,2);
195 A[5 * 9 + 3] = term3(a,b,d,q,q,2);
196 A[5 * 9 + 4] = term3(b,c,d,tq,1,1);
197 A[5 * 9 + 5] = term2(a,d,tq,2);
198 A[5 * 9 + 6] = term2(b,c,tq,2);
199 A[5 * 9 + 7] = term3(a,c,d,tq,1,1);
200 A[5 * 9 + 8] = term3(a,b,c,q,q,2);
201
202 A[6 * 9 + 0] = term2(b,d,2,tq);
203 A[6 * 9 + 1] = term4(a,b,c,d,1,1,q,q);
204 A[6 * 9 + 2] = term2(a,c,2,tq);
205 A[6 * 9 + 3] = term3(b,c,d,2,q,q);
206 A[6 * 9 + 4] = term3(a,b,d,1,1,tq);
207 A[6 * 9 + 5] = term2(b,c,2,tq);
208 A[6 * 9 + 6] = term2(a,d,2,tq);
209 A[6 * 9 + 7] = term3(a,b,c,1,1,tq);
210 A[6 * 9 + 8] = term3(a,c,d,2,q,q);
211
212 A[7 * 9 + 0] = twice(term2(b,d,tq1,1));
213 A[7 * 9 + 1] = add(term3(a,b,d,q1,q,1),term3(a,b,c,q,q1,1));
214 A[7 * 9 + 2] = twice(term2(a,c,tq1,1));
215 A[7 * 9 + 3] = twice(term3(a,b,d,q,q1,1));
216 A[7 * 9 + 4] = add(term3(a,b,d,1,tq,1),term2(b,c,tq1,1));
217 A[7 * 9 + 5] = twice(term3(a,b,d,tq,1,1));
218 A[7 * 9 + 6] = twice(term3(a,b,c,1,tq,1));
219 A[7 * 9 + 7] = add(term2(a,d,tq1,1),term3(a,b,c,tq,1,1));
220 A[7 * 9 + 8] = twice(term3(a,b,c,q1,q,1));
221
222 A[8 * 9 + 0] = twice(term2(b,d,q2,q));
223 A[8 * 9 + 1] = add(term3(a,b,d,q1,1,q),term3(a,b,c,1,q1,q));
224 A[8 * 9 + 2] = twice(term2(a,c,q2,q));
225 A[8 * 9 + 3] = add(term3(a,b,d,q,2,q),term2(b,c,q2,q));
226 A[8 * 9 + 4] = twice(term3(a,b,d,1,q1,q));
227 A[8 * 9 + 5] = twice(term3(a,b,c,q,2,q));
228 A[8 * 9 + 6] = twice(term3(a,b,d,2,q,q));
229 A[8 * 9 + 7] = twice(term3(a,b,c,q1,1,q));
230 A[8 * 9 + 8] = add(term2(a,d,q2,q),term3(a,b,c,2,q,q));
232
233}
234
236 int a, int b, int c, int d, int beta)
237{
238 int beta_q, delta, gamma;
239 int r, q, q1,q2,tq, tq1; //, tq2;
241
242 if (!F->f_has_table) {
243 cout << "representation_theory_domain::representing_matrix9_U !F->f_has_table" << endl;
244 exit(1);
245 }
246 if (!F->has_quadratic_subfield()) {
247 cout << "representation_theory_domain::representing_matrix9_U "
248 "field does not have a quadratic subfield" << endl;
249 exit(1);
250 }
251 r = F->e >> 1;
252 q = NT.i_power_j(F->p, r);
253 q1 = q + 1;
254 q2 = q + 2;
255 tq = 2 * q;
256 tq1 = tq + 1;
257 //tq2 = tq + 2;
258 beta_q = F->frobenius_power(beta, r);
259 delta = inverse(add(beta, negate(beta_q)));
260 gamma = mult(delta, beta);
261
262 A[0 * 9 + 0] = N2(F->square(d));
263 A[0 * 9 + 1] = F->four_times(N2(mult(b, d)));
264 A[0 * 9 + 2] = N2(F->square(b));
265 A[0 * 9 + 3] = twice(Term3(b,d,gamma,q,q2,1));
266 A[0 * 9 + 4] = twice(Term3(b,d,delta,1,tq1,1));
267 A[0 * 9 + 5] = Term3(b,d,gamma,tq,2,1);
268 A[0 * 9 + 6] = Term3(b,d,delta,2,tq,1);
269 A[0 * 9 + 7] = twice(Term3(b,d,gamma,tq1,1,1));
270 A[0 * 9 + 8] = twice(Term3(b,d,delta,q2,q,1));
271
272 A[1 * 9 + 0] = N2(mult(c,d));
273 A[1 * 9 + 1] = add3(N2(mult(a,d)),N2(mult(b,c)),T2(term4(a,b,c,d,q,1,1,q)));
274 A[1 * 9 + 2] = N2(mult(a,b));
275 A[1 * 9 + 3] = add(Term4(a,c,d,gamma,q,1,q1,1),Term4(b,c,d,gamma,q,q1,1,1));
276 A[1 * 9 + 4] = add(Term4(a,c,d,delta,1,q,q1,1),Term4(b,c,d,delta,1,q1,q,1));
277 A[1 * 9 + 5] = Term5(a,b,c,d,gamma,q,q,1,1,1);
278 A[1 * 9 + 6] = Term5(a,b,c,d,delta,1,1,q,q,1);
279 A[1 * 9 + 7] = add(Term4(a,b,d,gamma,q1,q,1,1),Term4(a,b,c,gamma,q,q1,1,1));
280 A[1 * 9 + 8] = add(Term4(a,b,c,delta,1,q1,q,1),Term4(a,b,d,delta,q1,1,q,1));
281
282 A[2 * 9 + 0] = N2(F->square(c));
283 A[2 * 9 + 1] = F->four_times(N2(mult(a,c)));
284 A[2 * 9 + 2] = N2(F->square(a));
285 A[2 * 9 + 3] = twice(Term3(a,c,gamma,q,q2,1));
286 A[2 * 9 + 4] = twice(Term3(a,c,delta,1,tq1,1));
287 A[2 * 9 + 5] = Term3(a,c,gamma,tq,2,1);
288 A[2 * 9 + 6] = Term3(a,c,delta,2,tq,1);
289 A[2 * 9 + 7] = twice(Term3(a,c,gamma,tq1,1,1));
290 A[2 * 9 + 8] = twice(Term3(a,c,delta,q2,q,1));
291
292 A[3 * 9 + 0] = Term2(c,d,1,tq1);
293 A[3 * 9 + 1] = twice(add(Term3(a,b,d,1,q,q1),Term3(b,c,d,q1,1,q)));
294 A[3 * 9 + 2] = Term2(a,b,1,tq1);
295 A[3 * 9 + 3] = add3(twice(Term4(b,c,d,gamma,q,1,q1,1)),Term3(a,d,gamma,q,q2,1),Term4(b,c,d,gamma,q,q,2,1));
296 A[3 * 9 + 4] = add3(twice(Term4(b,c,d,delta,1,q,q1,1)),Term3(a,d,delta,1,tq1,1),Term4(b,c,d,delta,1,1,tq,1));
297 A[3 * 9 + 5] = add(Term4(a,b,d,gamma,q,q,2,1),Term4(b,c,d,gamma,tq,1,1,1));
298 A[3 * 9 + 6] = add(Term4(b,c,d,delta,2,q,q,1),Term4(a,b,d,delta,1,1,tq,1));
299 A[3 * 9 + 7] = add3(twice(Term4(a,b,d,gamma,q,q1,1,1)),Term4(a,b,d,gamma,1,tq,1,1),Term3(b,c,gamma,tq1,1,1));
300 A[3 * 9 + 8] = add3(twice(Term4(a,b,d,delta,1,q1,q,1)),Term4(a,b,d,delta,q,2,q,1),Term3(b,c,delta,q2,q,1));
301
302 A[4 * 9 + 0] = Term3(c,d,beta,1,tq1,1);
303 A[4 * 9 + 1] = twice(add(Term4(a,b,d,beta,1,q,q1,1),Term4(b,c,d,beta,q1,1,q,1)));
304 A[4 * 9 + 2] = Term3(a,b,beta,1,tq1,1);
305 A[4 * 9 + 3] = add3(twice(Term5(b,c,d,beta,gamma,q,1,q1,1,1)),Term4(a,d,beta,gamma,q,q2,q,1),Term5(b,c,d,beta,gamma,q,q,2,q,1));
306 A[4 * 9 + 4] = add3(twice(Term5(b,c,d,beta,delta,1,q,q1,q,1)),Term4(a,d,beta,delta,1,tq1,1,1),Term5(b,c,d,beta,delta,1,1,tq,1,1));
307 A[4 * 9 + 5] = add(Term5(a,b,d,beta,gamma,q,q,2,q,1),Term5(b,c,d,beta,gamma,tq,1,1,1,1));
308 A[4 * 9 + 6] = add(Term5(b,c,d,beta,delta,2,q,q,q,1),Term5(a,b,d,beta,delta,1,1,tq,1,1));
309 A[4 * 9 + 7] = add3(twice(Term5(a,b,d,beta,gamma,q,q1,1,q,1)),Term5(a,b,d,beta,gamma,1,tq,1,1,1),Term4(b,c,beta,gamma,tq1,1,1,1));
310 A[4 * 9 + 8] = add3(twice(Term5(a,b,d,beta,delta,1,q1,q,1,1)),Term5(a,b,d,beta,delta,q,2,q,q,1),Term4(b,c,beta,delta,q2,q,q,1));
311
312 A[5 * 9 + 0] = Term2(c,d,2,tq);
313 A[5 * 9 + 1] = F->four_times(Term4(a,b,c,d,1,q,1,q));
314 A[5 * 9 + 2] = Term2(a,b,2,tq);
315 A[5 * 9 + 3] = twice(add(Term4(a,c,d,gamma,q,q,2,1),Term4(b,c,d,gamma,q,2,q,1)));
316 A[5 * 9 + 4] = twice(add(Term4(b,c,d,delta,1,tq,1,1),Term4(a,c,d,delta,1,1,tq,1)));
317 A[5 * 9 + 5] = add(Term3(a,d,gamma,tq,2,1),Term3(b,c,gamma,tq,2,1));
318 A[5 * 9 + 6] = add(Term3(a,d,delta,2,tq,1),Term3(b,c,delta,2,tq,1));
319 A[5 * 9 + 7] = twice(add(Term4(a,b,d,gamma,tq,1,1,1),Term4(a,b,c,gamma,1,tq,1,1)));
320 A[5 * 9 + 8] = twice(add(Term4(a,b,c,delta,q,2,q,1),Term4(a,b,d,delta,2,q,q,1)));
321
322 A[6 * 9 + 0] = Term3(c,d,beta,2,tq,1);
323 A[6 * 9 + 1] = F->four_times(Term5(a,b,c,d,beta,1,q,1,q,1));
324 A[6 * 9 + 2] = Term3(a,b,beta,2,tq,1);
325 A[6 * 9 + 3] = twice(add(Term5(a,c,d,beta,gamma,q,q,2,q,1),Term5(b,c,d,beta,gamma,q,2,q,1,1)));
326 A[6 * 9 + 4] = twice(add(Term5(b,c,d,beta,delta,1,tq,1,q,1),Term5(a,c,d,beta,delta,1,1,tq,1,1)));
327 A[6 * 9 + 5] = add(Term4(a,d,beta,gamma,tq,2,q,1),Term4(b,c,beta,gamma,tq,2,1,1));
328 A[6 * 9 + 6] = add(Term4(a,d,beta,delta,2,tq,1,1),Term4(b,c,beta,delta,2,tq,q,1));
329 A[6 * 9 + 7] = twice(add(Term5(a,b,d,beta,gamma,tq,1,1,q,1),Term5(a,b,c,beta,gamma,1,tq,1,1,1)));
330 A[6 * 9 + 8] = twice(add(Term5(a,b,c,beta,delta,q,2,q,q,1),Term5(a,b,d,beta,delta,2,q,q,1,1)));
331
332 A[7 * 9 + 0] = Term2(c,d,q2,q);
333 A[7 * 9 + 1] = twice(add(Term3(a,c,d,q1,1,q),Term3(a,b,c,1,q,q1)));
334 A[7 * 9 + 2] = Term2(a,b,q2,q);
335 A[7 * 9 + 3] = add3(twice(Term4(a,c,d,gamma,q,q1,1,1)),Term4(a,c,d,gamma,q,2,q,1),Term3(b,c,gamma,q,q2,1));
336 A[7 * 9 + 4] = add3(twice(Term4(a,c,d,delta,1,q1,q,1)),Term4(a,c,d,delta,1,tq,1,1),Term3(b,c,delta,1,tq1,1));
337 A[7 * 9 + 5] = add(Term4(a,c,d,gamma,tq,1,1,1),Term4(a,b,c,gamma,q,q,2,1));
338 A[7 * 9 + 6] = add(Term4(a,b,c,delta,1,1,tq,1),Term4(a,c,d,delta,2,q,q,1));
339 A[7 * 9 + 7] = add3(twice(Term4(a,b,c,gamma,q1,q,1,1)),Term3(a,d,gamma,tq1,1,1),Term4(a,b,c,gamma,tq,1,1,1));
340 A[7 * 9 + 8] = add3(twice(Term4(a,b,c,delta,q1,1,q,1)),Term3(a,d,delta,q2,q,1),Term4(a,b,c,delta,2,q,q,1));
341
342 A[8 * 9 + 0] = Term3(c,d,beta,q2,q,1);
343 A[8 * 9 + 1] = twice(add(Term4(a,c,d,beta,q1,1,q,1),Term4(a,b,c,beta,1,q,q1,1)));
344 A[8 * 9 + 2] = Term3(a,b,beta,q2,q,1);
345 A[8 * 9 + 3] = add3(twice(Term5(a,c,d,beta,gamma,q,q1,1,q,1)),Term5(a,c,d,beta,gamma,q,2,q,1,1),Term4(b,c,beta,gamma,q,q2,1,1));
346 A[8 * 9 + 4] = add3(twice(Term5(a,c,d,beta,delta,1,q1,q,1,1)),Term5(a,c,d,beta,delta,1,tq,1,q,1),Term4(b,c,beta,delta,1,tq1,q,1));
347 A[8 * 9 + 5] = add(Term5(a,c,d,beta,gamma,tq,1,1,q,1),Term5(a,b,c,beta,gamma,q,q,2,1,1));
348 A[8 * 9 + 6] = add(Term5(a,b,c,beta,delta,1,1,tq,q,1),Term5(a,c,d,beta,delta,2,q,q,1,1));
349 A[8 * 9 + 7] = add3(twice(Term5(a,b,c,beta,gamma,q1,q,1,1,1)),Term4(a,d,beta,gamma,tq1,1,q,1),Term5(a,b,c,beta,gamma,tq,1,1,q,1));
350 A[8 * 9 + 8] = add3(twice(Term5(a,b,c,beta,delta,q1,1,q,q,1)),Term4(a,d,beta,delta,q2,q,1,1),Term5(a,b,c,beta,delta,2,q,q,1,1));
351
352
353}
354
355void representation_theory_domain::representing_matrix8_U(int *A, int a, int b, int c, int d, int beta)
356{
357 int delta1, delta2;
358 int r, q, i, j;
359 int beta_2, beta_11, beta_22, beta_21, beta_12, beta_123, beta_132;
360 int gamma3, gamma4, gamma5, gamma6, gamma7, gamma8;
361 int *eta, *M1, *B1;
362 int *zeta, *M2, *B2;
364
365
366
367 r = F->e / 3;
368 if (F->e != 3 * r) {
369 cout << "representation_theory_domain::representing_matrix8_U "
370 "field does not have a cubic subfield" << endl;
371 exit(1);
372 }
373 //cout << "a=" << a << " b=" << b << " c=" << c << " d=" << d << endl;
374
375 q = NT.i_power_j(F->p, r);
376 beta_2 = beta_trinomial(q, beta, 0, 0, 2);
377 beta_11 = beta_trinomial(q, beta, 0, 1, 1);
378 beta_22 = beta_trinomial(q, beta, 0, 2, 2);
379 beta_21 = beta_trinomial(q, beta, 0, 2, 1);
380 beta_12 = beta_trinomial(q, beta, 0, 1, 2);
381 beta_123 = beta_trinomial(q, beta, 1, 2, 3);
382 beta_132 = beta_trinomial(q, beta, 1, 3, 2);
383 delta1 = inverse(T3(add(beta_21, negate(beta_12))));
384 delta2 = inverse(T3(add(beta_123, negate(beta_132))));
385 gamma3 = add(beta_trinomial(q, beta, 1, 0, 2), negate(beta_trinomial(q, beta, 2, 0, 1)));
386 gamma4 = add(beta_trinomial(q, beta, 2, 0, 0), negate(beta_trinomial(q, beta, 0, 0, 2)));
387 gamma5 = add(beta_trinomial(q, beta, 0, 0, 1), negate(beta_trinomial(q, beta, 1, 0, 0)));
388 gamma6 = add(beta_trinomial(q, beta, 1, 2, 3), negate(beta_trinomial(q, beta, 2, 1, 3)));
389 gamma7 = add(beta_trinomial(q, beta, 2, 0, 2), negate(beta_trinomial(q, beta, 0, 2, 2)));
390 gamma8 = add(beta_trinomial(q, beta, 0, 1, 1), negate(beta_trinomial(q, beta, 1, 0, 1)));
391 //cout << "delta1=" << delta1 << endl;
392 //cout << "delta2=" << delta2 << endl;
393 //cout << "gamma8=" << gamma8 << endl;
394 //cout << "beta_trinomial(q, beta, 1, 2, 3)=" << beta_trinomial(q, beta, 1, 2, 3) << endl;
395 //cout << "beta_trinomial(q, beta, 2, 1, 3)=" << beta_trinomial(q, beta, 2, 1, 3) << endl;
396
397 eta = NEW_int(2 * 3);
398 zeta = NEW_int(2 * 3);
399 M1 = NEW_int(2 * 3);
400 M2 = NEW_int(2 * 3);
401 B1 = NEW_int(3 * 3);
402 B2 = NEW_int(3 * 3);
403
404 M1[0 * 3 + 0] = m_term(q, d, b, c);
405 M1[0 * 3 + 1] = m_term(q, d, a, d);
406 M1[0 * 3 + 2] = m_term(q, c, b, d);
407 M1[1 * 3 + 0] = m_term(q, b, b, c);
408 M1[1 * 3 + 1] = m_term(q, b, a, d);
409 M1[1 * 3 + 2] = m_term(q, a, b, d);
410
411 M2[0 * 3 + 0] = m_term(q, d, a, c);
412 M2[0 * 3 + 1] = m_term(q, c, a, d);
413 M2[0 * 3 + 2] = m_term(q, c, b, c);
414 M2[1 * 3 + 0] = m_term(q, b, a, c);
415 M2[1 * 3 + 1] = m_term(q, a, a, d);
416 M2[1 * 3 + 2] = m_term(q, a, b, c);
417
418 B1[0 * 3 + 0] = 1;
419 B1[0 * 3 + 1] = beta_trinomial(q, beta, 0, 0, 1);
420 B1[0 * 3 + 2] = beta_trinomial(q, beta, 0, 0, 2);
421 B1[1 * 3 + 0] = 1;
422 B1[1 * 3 + 1] = beta_trinomial(q, beta, 0, 1, 0);
423 B1[1 * 3 + 2] = beta_trinomial(q, beta, 0, 2, 0);
424 B1[2 * 3 + 0] = 1;
425 B1[2 * 3 + 1] = beta_trinomial(q, beta, 1, 0, 0);
426 B1[2 * 3 + 2] = beta_trinomial(q, beta, 2, 0, 0);
427
428 B2[0 * 3 + 0] = 1;
429 B2[0 * 3 + 1] = beta_trinomial(q, beta, 0, 1, 1);
430 B2[0 * 3 + 2] = beta_trinomial(q, beta, 0, 2, 2);
431 B2[1 * 3 + 0] = 1;
432 B2[1 * 3 + 1] = beta_trinomial(q, beta, 1, 1, 0);
433 B2[1 * 3 + 2] = beta_trinomial(q, beta, 2, 2, 0);
434 B2[2 * 3 + 0] = 1;
435 B2[2 * 3 + 1] = beta_trinomial(q, beta, 1, 0, 1);
436 B2[2 * 3 + 2] = beta_trinomial(q, beta, 2, 0, 2);
437
438 F->Linear_algebra->mult_matrix_matrix(M1, B1, eta, 2, 3, 3, 0 /* verbose_level */);
439 F->Linear_algebra->mult_matrix_matrix(M2, B2, zeta, 2, 3, 3, 0 /* verbose_level */);
440 int eta11, eta12, eta13;
441 int eta21, eta22, eta23;
442 int zeta11, zeta12, zeta13;
443 int zeta21, zeta22, zeta23;
444 eta11 = eta[0*3+0];
445 eta12 = eta[0*3+1];
446 eta13 = eta[0*3+2];
447 eta21 = eta[1*3+0];
448 eta22 = eta[1*3+1];
449 eta23 = eta[1*3+2];
450 zeta11 = zeta[0*3+0];
451 zeta12 = zeta[0*3+1];
452 zeta13 = zeta[0*3+2];
453 zeta21 = zeta[1*3+0];
454 zeta22 = zeta[1*3+1];
455 zeta23 = zeta[1*3+2];
456
457 //cout << "eta22=" << eta22 << endl;
458 //cout << "eta22 gamma8=" << mult(eta22,gamma8) << endl;
459
460 A[0 * 8 + 0] = N3(d);
461 A[0 * 8 + 1] = N3(b);
462 A[0 * 8 + 2] = T3product2(m_term(q, d, b, d), gamma3);
463 A[0 * 8 + 3] = T3product2(m_term(q, d, b, d), gamma4);
464 A[0 * 8 + 4] = T3product2(m_term(q, d, b, d), gamma5);
465 A[0 * 8 + 5] = T3product2(m_term(q, b, b, d), gamma6);
466 A[0 * 8 + 6] = T3product2(m_term(q, b, b, d), gamma7);
467 A[0 * 8 + 7] = T3product2(m_term(q, b, b, d), gamma8);
468
469 A[1 * 8 + 0] = N3(c);
470 A[1 * 8 + 1] = N3(a);
471 A[1 * 8 + 2] = T3product2(m_term(q, c, a, c), gamma3);
472 A[1 * 8 + 3] = T3product2(m_term(q, c, a, c), gamma4);
473 A[1 * 8 + 4] = T3product2(m_term(q, c, a, c), gamma5);
474 A[1 * 8 + 5] = T3product2(m_term(q, a, a, c), gamma6);
475 A[1 * 8 + 6] = T3product2(m_term(q, a, a, c), gamma7);
476 A[1 * 8 + 7] = T3product2(m_term(q, a, a, c), gamma8);
477
478 A[2 * 8 + 0] = T3(m_term(q, d, d, c));
479 A[2 * 8 + 1] = T3(m_term(q, b, b, a));
480 A[2 * 8 + 2] = T3product2(eta11, gamma3);
481 A[2 * 8 + 3] = T3product2(eta11, gamma4);
482 A[2 * 8 + 4] = T3product2(eta11, gamma5);
483 A[2 * 8 + 5] = T3product2(eta21, gamma6);
484 A[2 * 8 + 6] = T3product2(eta21, gamma7);
485 A[2 * 8 + 7] = T3product2(eta21, gamma8);
486
487 A[3 * 8 + 0] = T3product2(m_term(q, d, d, c), beta);
488 A[3 * 8 + 1] = T3product2(m_term(q, b, b, a), beta);
489 A[3 * 8 + 2] = T3product2(eta12, gamma3);
490 A[3 * 8 + 3] = T3product2(eta12, gamma4);
491 A[3 * 8 + 4] = T3product2(eta12, gamma5);
492 A[3 * 8 + 5] = T3product2(eta22, gamma6);
493 A[3 * 8 + 6] = T3product2(eta22, gamma7);
494 A[3 * 8 + 7] = T3product2(eta22, gamma8);
495
496 A[4 * 8 + 0] = T3product2(m_term(q, d, d, c), beta_2);
497 A[4 * 8 + 1] = T3product2(m_term(q, b, b, a), beta_2);
498 A[4 * 8 + 2] = T3product2(eta13, gamma3);
499 A[4 * 8 + 3] = T3product2(eta13, gamma4);
500 A[4 * 8 + 4] = T3product2(eta13, gamma5);
501 A[4 * 8 + 5] = T3product2(eta23, gamma6);
502 A[4 * 8 + 6] = T3product2(eta23, gamma7);
503 A[4 * 8 + 7] = T3product2(eta23, gamma8);
504
505 A[5 * 8 + 0] = T3product2(m_term(q, d, c, c), 1);
506 A[5 * 8 + 1] = T3product2(m_term(q, b, a, a), 1);
507 A[5 * 8 + 2] = T3product2(zeta11, gamma3);
508 A[5 * 8 + 3] = T3product2(zeta11, gamma4);
509 A[5 * 8 + 4] = T3product2(zeta11, gamma5);
510 A[5 * 8 + 5] = T3product2(zeta21, gamma6);
511 A[5 * 8 + 6] = T3product2(zeta21, gamma7);
512 A[5 * 8 + 7] = T3product2(zeta21, gamma8);
513
514 A[6 * 8 + 0] = T3product2(m_term(q, d, c, c), beta_11);
515 A[6 * 8 + 1] = T3product2(m_term(q, b, a, a), beta_11);
516 A[6 * 8 + 2] = T3product2(zeta12, gamma3);
517 A[6 * 8 + 3] = T3product2(zeta12, gamma4);
518 A[6 * 8 + 4] = T3product2(zeta12, gamma5);
519 A[6 * 8 + 5] = T3product2(zeta22, gamma6);
520 A[6 * 8 + 6] = T3product2(zeta22, gamma7);
521 A[6 * 8 + 7] = T3product2(zeta22, gamma8);
522
523 A[7 * 8 + 0] = T3product2(m_term(q, d, c, c), beta_22);
524 A[7 * 8 + 1] = T3product2(m_term(q, b, a, a), beta_22);
525 A[7 * 8 + 2] = T3product2(zeta13, gamma3);
526 A[7 * 8 + 3] = T3product2(zeta13, gamma4);
527 A[7 * 8 + 4] = T3product2(zeta13, gamma5);
528 A[7 * 8 + 5] = T3product2(zeta23, gamma6);
529 A[7 * 8 + 6] = T3product2(zeta23, gamma7);
530 A[7 * 8 + 7] = T3product2(zeta23, gamma8);
531
532 for (j = 2; j <= 4; j++) {
533 for (i = 0; i < 8; i++) {
534 A[i * 8 + j] = mult(A[i * 8 + j], delta1);
535 }
536 }
537 for (j = 5; j <= 7; j++) {
538 for (i = 0; i < 8; i++) {
539 A[i * 8 + j] = mult(A[i * 8 + j], delta2);
540 }
541 }
542 FREE_int(eta);
543 FREE_int(zeta);
544 FREE_int(M1);
545 FREE_int(M2);
546 FREE_int(B1);
547 FREE_int(B2);
548}
549
551{
552 int delta1, delta2;
553 int beta_21, beta_12, beta_123, beta_132;
554 int r, q, i, j;
556
557
558
559 r = F->e / 3;
560 if (F->e != 3 * r) {
561 cout << "representation_theory_domain::representing_matrix8_V "
562 "field does not have a cubic subfield" << endl;
563 exit(1);
564 }
565 //cout << "a=" << a << " b=" << b << " c=" << c << " d=" << d << endl;
566
567 q = NT.i_power_j(F->p, r);
568 beta_21 = beta_trinomial(q, beta, 0, 2, 1);
569 beta_12 = beta_trinomial(q, beta, 0, 1, 2);
570 beta_123 = beta_trinomial(q, beta, 1, 2, 3);
571 beta_132 = beta_trinomial(q, beta, 1, 3, 2);
572 delta1 = inverse(T3(add(beta_21, negate(beta_12))));
573 delta2 = inverse(T3(add(beta_123, negate(beta_132))));
574
575 Int_vec_zero(A, 64);
576
577 A[0 * 8 + 0] = 1;
578 A[1 * 8 + 1] = 1;
579 A[2 * 8 + 2] = T3(add(beta_trinomial(q, beta, 0, 2, 1), negate(beta_trinomial(q, beta, 0, 1, 2))));
580 A[2 * 8 + 3] = T3(add(beta_trinomial(q, beta, 0, 0, 2), negate(beta_trinomial(q, beta, 0, 2, 0))));
581 A[2 * 8 + 4] = T3(add(beta_trinomial(q, beta, 0, 1, 0), negate(beta_trinomial(q, beta, 0, 0, 1))));
582 A[3 * 8 + 2] = T3(add(beta_trinomial(q, beta, 0, 3, 1), negate(beta_trinomial(q, beta, 0, 2, 2))));
583 A[3 * 8 + 3] = T3(add(beta_trinomial(q, beta, 0, 1, 2), negate(beta_trinomial(q, beta, 0, 3, 0))));
584 A[3 * 8 + 4] = T3(add(beta_trinomial(q, beta, 0, 2, 0), negate(beta_trinomial(q, beta, 0, 1, 1))));
585 A[4 * 8 + 2] = T3(add(beta_trinomial(q, beta, 0, 4, 1), negate(beta_trinomial(q, beta, 0, 3, 2))));
586 A[4 * 8 + 3] = T3(add(beta_trinomial(q, beta, 0, 2, 2), negate(beta_trinomial(q, beta, 0, 4, 0))));
587 A[4 * 8 + 4] = T3(add(beta_trinomial(q, beta, 0, 3, 0), negate(beta_trinomial(q, beta, 0, 2, 1))));
588
589 A[5 * 8 + 5] = T3(add(beta_trinomial(q, beta, 2, 3, 1), negate(beta_trinomial(q, beta, 1, 3, 2))));
590 A[5 * 8 + 6] = T3(add(beta_trinomial(q, beta, 0, 2, 2), negate(beta_trinomial(q, beta, 2, 2, 0))));
591 A[5 * 8 + 7] = T3(add(beta_trinomial(q, beta, 1, 1, 0), negate(beta_trinomial(q, beta, 0, 1, 1))));
592 A[6 * 8 + 5] = T3(add(beta_trinomial(q, beta, 3, 4, 1), negate(beta_trinomial(q, beta, 2, 4, 2))));
593 A[6 * 8 + 6] = T3(add(beta_trinomial(q, beta, 1, 3, 2), negate(beta_trinomial(q, beta, 3, 3, 0))));
594 A[6 * 8 + 7] = T3(add(beta_trinomial(q, beta, 2, 2, 0), negate(beta_trinomial(q, beta, 1, 2, 1))));
595 A[7 * 8 + 5] = T3(add(beta_trinomial(q, beta, 4, 5, 1), negate(beta_trinomial(q, beta, 3, 5, 2))));
596 A[7 * 8 + 6] = T3(add(beta_trinomial(q, beta, 2, 4, 2), negate(beta_trinomial(q, beta, 4, 4, 0))));
597 A[7 * 8 + 7] = T3(add(beta_trinomial(q, beta, 3, 3, 0), negate(beta_trinomial(q, beta, 2, 3, 1))));
598
599 for (j = 2; j <= 4; j++) {
600 for (i = 2; i <= 4; i++) {
601 A[i * 8 + j] = mult(A[i * 8 + j], delta1);
602 }
603 }
604 for (j = 5; j <= 7; j++) {
605 for (i = 5; i <= 7; i++) {
606 A[i * 8 + j] = mult(A[i * 8 + j], delta2);
607 }
608 }
609}
610
611
613{
614 int r, /*q,*/ beta_q, delta, minus_one; //, i;
615 // gamma, betagamma, i, Tgamma, Tbetagamma, nTgamma;
616
617 r = F->e / 2;
618 if (F->e != 2 * r) {
619 cout << "representation_theory_domain::representing_matrix9b field "
620 "does not have a quadratic subfield" << endl;
621 exit(1);
622 }
623 //q = i_power_j(p, r);
624 minus_one = negate(1);
625 beta_q = F->frobenius_power(beta, r);
626 delta = add(beta_q, beta);
627 //gamma = mult(delta, beta);
628 //betagamma = mult(beta, gamma);
629 //Tgamma = T2(gamma);
630 //Tbetagamma = T2(betagamma);
631 //nTgamma = negate(Tgamma);
632 //cout << "gamma=" << gamma << endl;
633 //cout << "betagamma=" << betagamma << endl;
634 //cout << "Tgamma=" << Tgamma << endl;
635 //cout << "nTgamma=" << nTgamma << endl;
636 //cout << "Tbetagamma=" << Tbetagamma << endl;
637
638 Int_vec_zero(A, 81);
639
640 // changed to n e w base:
641 // attention, now transposed!
642 A[0 * 9 + 0] = 1;
643 A[1 * 9 + 1] = 1;
644 A[2 * 9 + 2] = 1;
645 A[3 * 9 + 3] = 1;
646 A[4 * 9 + 3] = delta;
647 A[4 * 9 + 4] = minus_one;
648 A[5 * 9 + 5] = 1;
649 A[6 * 9 + 5] = delta;
650 A[6 * 9 + 6] = minus_one;
651 A[7 * 9 + 7] = 1;
652 A[8 * 9 + 7] = delta;
653 A[8 * 9 + 8] = minus_one;
654#if 0
655 // changed to n e w base:
656 A[0 * 9 + 0] = 1;
657 A[1 * 9 + 1] = 1;
658 A[2 * 9 + 2] = 1;
659 A[4 * 9 + 4] = Tgamma;
660 A[4 * 9 + 3] = Tbetagamma;
661 A[6 * 9 + 6] = Tgamma;
662 A[6 * 9 + 5] = Tbetagamma;
663 A[3 * 9 + 3] = nTgamma;
664 A[8 * 9 + 8] = Tgamma;
665 A[8 * 9 + 7] = Tbetagamma;
666 A[5 * 9 + 5] = nTgamma;
667 A[7 * 9 + 7] = nTgamma;
668#endif
669}
670
672 int a, int b, int c, int d, int beta)
673{
674
675
676#if 0
677 int delta, omega, gamma, eta, zeta, epsilon, xi, tau;
678 int r, q;
679
680 r = e / 3;
681 if (e != 3 * r) {
682 cout << "representation_theory_domain::representing_matrix8a "
683 "field does not have a cubic subfield" << endl;
684 exit(1);
685 }
686 q = i_power_j(p, r);
687
688 delta = inverse(add(T3(power(beta, 2*q+1)),negate(T3(power(beta,q+2)))));
689 omega = inverse(add(T3(power(beta,q*q+2*q+3)),negate(T3(power(beta,q*q+3*q+2)))));
690 gamma = add(power(beta,2*q),negate(power(beta,2*q*q)));
691 eta = add(power(beta,2*q*q+q),negate(power(beta,q*q+2*q)));
692 zeta = add(power(beta,q),negate(power(beta,1)));
693 epsilon = add(power(beta,3*q*q+q+2),negate(power(beta,3*q*q+2*q+1)));
694 xi = add(power(beta,2*q*q+2*q),negate(power(beta,2*q*q+2)));
695 tau = add(power(beta,q*q+1),negate(power(beta,q*q+q)));
696
697 //cout << "delta=" << delta << endl;
698 //cout << "omega=" << omega << endl;
699 //cout << "gamma=" << gamma << endl;
700 //cout << "eta=" << eta << endl;
701 //cout << "zeta=" << zeta << endl;
702 //cout << "epsilon=" << epsilon << endl;
703 //cout << "xi=" << xi << endl;
704 //cout << "tau=" << tau << endl;
705
706A[0 * 8 + 0] = N3(d);
707A[0 * 8 + 1] = T3(term3(beta,c,d,1,1,q*q+q));
708A[0 * 8 + 2] = T3(term2(c,d,1,q*q+q));
709A[0 * 8 + 3] = T3(term2(c,d,q+1,q*q));
710A[0 * 8 + 4] = T3(term3(beta,c,d,2,1,q*q+q));
711A[0 * 8 + 5] = T3(term3(beta,c,d,q+1,q+1,q*q));
712A[0 * 8 + 6] = T3(term3(beta,c,d,2*q+2,q+1,q*q));
713A[0 * 8 + 7] = N3(c);
714
715A[1*8+0]=mult(delta,T3(term3(gamma,b,d,1,1,q*q+q)));
716A[1*8+1]=mult(delta,T3(mult(beta,add(add(term3(gamma,a,d,1,1,q*q+q),term4(gamma,b,c,d,q,q,1,q*q)),term4(gamma,b,c,d,q*q,q*q,1,q)))));
717A[1*8+2]=mult(delta,T3(mult(gamma,add(add(term2(a,d,1,q*q+q),term3(b,c,d,1,q,q*q)),term3(b,c,d,1,q*q,q)))));
718A[1*8+3]=mult(delta,T3(mult(gamma,add(add(term3(a,c,d,1,q,q*q),term2(b,c,1,q*q+q)),term3(a,c,d,1,q*q,q)))));
719A[1*8+4]=mult(delta,T3(mult(mult(beta,beta),add(add(term3(gamma,a,d,1,1,q*q+q),term4(gamma,b,c,d,q,q,1,q*q)),term4(gamma,b,c,d,q*q,q*q,1,q)))));
720A[1*8+5]=mult(delta,T3(mult(power(beta,q+1),add(add(term4(gamma,a,c,d,1,1,q,q*q),term4(gamma,a,c,d,q,q,1,q*q)),term3(gamma,b,c,q*q,q*q,q+1)))));
721A[1*8+6]=mult(delta,T3(mult(power(beta,2*q+2),add(add(term4(gamma,a,c,d,1,1,q,q*q),term4(gamma,a,c,d,q,q,1,q*q)),term3(gamma,b,c,q*q,q*q,q+1)))));
722A[1*8+7]=mult(delta,T3(term3(gamma,a,c,1,1,q*q+q)));
723
724A[2*8+0]=mult(delta,T3(term3(eta,b,d,1,1,q*q+q)));
725A[2*8+1]=mult(delta,T3(mult(beta,add(add(term3(eta,a,d,1,1,q*q+q),term4(eta,b,c,d,q,q,1,q*q)),term4(eta,b,c,d,q*q,q*q,1,q)))));
726A[2*8+2]=mult(delta,T3(mult(eta,add(add(term3(b,c,d,1,q,q*q),term2(a,d,1,q*q+q)),term3(b,c,d,1,q*q,q)))));
727A[2*8+3]=mult(delta,T3(mult(eta,add(add(term3(a,c,d,1,q,q*q),term2(b,c,1,q*q+q)),term3(a,c,d,1,q*q,q)))));
728A[2*8+4]=mult(delta,T3(mult(power(beta,2),add(add(term3(eta,a,d,1,1,q*q+q),term4(eta,b,c,d,q,q,1,q*q)),term4(eta,b,c,d,q*q,q*q,1,q)))));
729A[2*8+5]=mult(delta,T3(mult(power(beta,q+1),add(add(term4(eta,a,c,d,1,1,q,q*q),term4(eta,a,c,d,q,q,1,q*q)),term3(eta,b,c,q*q,q*q,q+1)))));
730A[2*8+6]=mult(delta,T3(mult(power(beta,2*q+2),add(add(term4(eta,a,c,d,1,1,q,q*q),term4(eta,a,c,d,q,q,1,q*q)),term3(eta,b,c,q*q,q*q,q+1)))));
731A[2*8+7]=mult(delta,T3(term3(eta,a,c,1,1,q*q+q)));
732
733A[3*8+0]=mult(omega,T3(term3(epsilon,b,d,1,q+1,q*q)));
734A[3*8+1]=mult(omega,T3(mult(beta,add(add(term4(epsilon,a,b,d,1,1,q,q*q),term3(epsilon,b,c,q,q*q+q,1)),term4(epsilon,a,b,d,q*q,1,q*q,q)))));
735A[3*8+2]=mult(omega,T3(mult(epsilon,add(add(term3(a,b,d,q,1,q*q),term3(a,b,d,1,q,q*q)),term2(b,c,q+1,q*q)))));
736A[3*8+3]=mult(omega,T3(mult(epsilon,add(add(term2(a,d,q+1,q*q),term3(a,b,c,q,1,q*q)),term3(a,b,c,1,q,q*q)))));
737A[3*8+4]=mult(omega,T3(mult(power(beta,2),add(add(term4(epsilon,a,b,d,1,1,q,q*q),term3(epsilon,b,c,q,q*q+q,1)),term4(epsilon,a,b,d,q*q,1,q*q,q)))));
738A[3*8+5]=mult(omega,T3(mult(power(beta,q+1),add(add(term3(epsilon,a,d,1,q+1,q*q),term4(epsilon,a,b,c,q,q,q*q,1)),term4(epsilon,a,b,c,q*q,1,q*q,q)))));
739A[3*8+6]=mult(omega,T3(mult(power(beta,2*q+2),add(add(term3(epsilon,a,d,1,q+1,q*q),term4(epsilon,a,b,c,q,q,q*q,1)),term4(epsilon,a,b,c,q*q,1,q*q,q)))));
740A[3*8+7]=mult(omega,T3(term3(epsilon,a,c,1,q+1,q*q)));
741
742
743A[4*8+0]=mult(delta,T3(term3(zeta,b,d,1,q*q,q+1)));
744A[4*8+1]=mult(delta,T3(mult(beta,add(add(term4(zeta,b,c,d,1,q*q,1,q),term3(zeta,a,d,q,1,q*q+q)),term4(zeta,b,c,d,q*q,q,1,q*q)))));
745A[4*8+2]=mult(delta,T3(mult(zeta,add(add(term3(b,c,d,q*q,q,1),term3(b,c,d,q*q,1,q)),term2(a,d,q*q,q+1)))));
746A[4*8+3]=mult(delta,T3(mult(zeta,add(add(term2(b,c,q*q,q+1),term3(a,c,d,q*q,q,1)),term3(a,c,d,q*q,1,q)))));
747A[4*8+4]=mult(delta,T3(mult(power(beta,2),add(add(term4(zeta,b,c,d,1,q*q,1,q),term3(zeta,a,d,q,1,q*q+q)),term4(zeta,b,c,d,q*q,q,1,q*q)))));
748A[4*8+5]=mult(delta,T3(mult(power(beta,q+1),add(add(term3(zeta,b,c,1,q*q,q+1),term4(zeta,a,c,d,q,1,q,q*q)),term4(zeta,a,c,d,q*q,q,1,q*q)))));
749A[4*8+6]=mult(delta,T3(mult(power(beta,2*q+2),add(add(term3(zeta,b,c,1,q*q,q+1),term4(zeta,a,c,d,q,1,q,q*q)),term4(zeta,a,c,d,q*q,q,1,q*q)))));
750A[4*8+7]=mult(delta,T3(term3(zeta,a,c,1,q*q,q+1)));
751
752A[5*8+0]=mult(omega,T3(term3(xi,b,d,1,q+1,q*q)));
753A[5*8+1]=mult(omega,T3(mult(beta,add(add(term4(xi,a,b,d,1,1,q,q*q),term3(xi,b,c,q,q*q+q,1)),term4(xi,a,b,d,q*q,1,q*q,q)))));
754A[5*8+2]=mult(omega,T3(mult(xi,add(add(term3(a,b,d,q,1,q*q),term3(a,b,d,1,q,q*q)),term2(b,c,q+1,q*q)))));
755A[5*8+3]=mult(omega,T3(mult(xi,add(add(term2(a,d,q+1,q*q),term3(a,b,c,q,1,q*q)),term3(a,b,c,1,q,q*q)))));
756A[5*8+4]=mult(omega,T3(mult(power(beta,2),add(add(term4(xi,a,b,d,1,1,q,q*q),term3(xi,b,c,q,q*q+q,1)),term4(xi,a,b,d,q*q,1,q*q,q)))));
757A[5*8+5]=mult(omega,T3(mult(power(beta,q+1),add(add(term3(xi,a,d,1,q+1,q*q),term4(xi,a,b,c,q,q,q*q,1)),term4(xi,a,b,c,q*q,1,q*q,q)))));
758A[5*8+6]=mult(omega,T3(mult(power(beta,2*q+2),add(add(term3(xi,a,d,1,q+1,q*q),term4(xi,a,b,c,q,q,q*q,1)),term4(xi,a,b,c,q*q,1,q*q,q)))));
759A[5*8+7]=mult(omega,T3(term3(xi,a,c,1,q+1,q*q)));
760
761A[6*8+0]=mult(omega,T3(term3(tau,b,d,1,q+1,q*q)));
762A[6*8+1]=mult(omega,T3(mult(beta,add(add(term4(tau,a,b,d,1,1,q,q*q),term3(tau,b,c,q,q*q+q,1)),term4(tau,a,b,d,q*q,1,q*q,q)))));
763A[6*8+2]=mult(omega,T3(mult(tau,add(add(term3(a,b,d,q,1,q*q),term3(a,b,d,1,q,q*q)),term2(b,c,q+1,q*q)))));
764A[6*8+3]=mult(omega,T3(mult(tau,add(add(term2(a,d,q+1,q*q),term3(a,b,c,q,1,q*q)),term3(a,b,c,1,q,q*q)))));
765A[6*8+4]=mult(omega,T3(mult(power(beta,2),add(add(term4(tau,a,b,d,1,1,q,q*q),term3(tau,b,c,q,q*q+q,1)),term4(tau,a,b,d,q*q,1,q*q,q)))));
766A[6*8+5]=mult(omega,T3(mult(power(beta,q+1),add(add(term3(tau,a,d,1,q+1,q*q),term4(tau,a,b,c,q,q,q*q,1)),term4(tau,a,b,c,q*q,1,q*q,q)))));
767A[6*8+6]=mult(omega,T3(mult(power(beta,2*q+2),add(add(term3(tau,a,d,1,q+1,q*q),term4(tau,a,b,c,q,q,q*q,1)),term4(tau,a,b,c,q*q,1,q*q,q)))));
768A[6*8+7]=mult(omega,T3(term3(tau,a,c,1,q+1,q*q)));
769
770A[7 * 8 + 0] = N3(b);
771A[7 * 8 + 1] = T3(term3(beta,a,b,1,1,q*q+q));
772A[7 * 8 + 2] = T3(term2(a,b,1,q*q+q));
773A[7 * 8 + 3] = T3(term2(a,b,q+1,q*q));
774A[7 * 8 + 4] = T3(term3(beta,a,b,2,1,q*q+q));
775A[7 * 8 + 5] = T3(term3(beta,a,b,q+1,q+1,q*q));
776A[7 * 8 + 6] = T3(term3(beta,a,b,2*q+2,q+1,q*q));
777A[7 * 8 + 7] = N3(a);
778#endif
779}
780
782{
783 int r, q, delta, omega; //, i;
785
786 r = F->e / 3;
787 if (F->e != 3 * r) {
788 cout << "representation_theory_domain::representing_matrix8b "
789 "field does not have a cubic subfield" << endl;
790 exit(1);
791 }
792 q = NT.i_power_j(F->p, r);
793
794 delta = inverse(add(T3(power(beta, 2*q+1)),negate(T3(power(beta,q+2)))));
795 omega = inverse(add(T3(power(beta,q*q+2*q+3)),negate(T3(power(beta,q*q+3*q+2)))));
796 cout << "delta=" << delta << endl;
797 cout << "omega=" << omega << endl;
798
799 Int_vec_zero(A, 64);
800
801 A[0 * 8 + 0] = 1;
802 A[7 * 8 + 7] = 1;
803#if 1
804 A[1 * 8 + 1] = mult(delta,T3(add(power(beta,3),negate(power(beta,2*q+1)))));
805 A[1 * 8 + 2] = mult(delta,T3(add(power(beta,2),negate(power(beta,2*q)))));
806 A[1 * 8 + 4] = mult(delta,T3(add(power(beta,4),negate(power(beta,2*q+2)))));
807 A[2 * 8 + 1] = mult(delta,T3(add(power(beta,2*q+2),negate(power(beta,q+3)))));
808 A[2 * 8 + 2] = mult(delta,T3(add(power(beta,2*q+1),negate(power(beta,q+2)))));
809 A[2 * 8 + 4] = mult(delta,T3(add(power(beta,2*q+3),negate(power(beta,q+4)))));
810 A[3 * 8 + 3] = mult(omega,T3(add(power(beta,q*q+2*q+3),negate(power(beta,2*q*q+q+3)))));
811 A[3 * 8 + 5] = mult(omega,T3(add(power(beta,2*q*q+4*q+2),negate(power(beta,q*q+4*q+3)))));
812 A[3 * 8 + 6] = mult(omega,T3(add(power(beta,2*q*q+5*q+3),negate(power(beta,q*q+5*q+4)))));
813 A[4 * 8 + 1] = mult(delta,T3(add(power(beta,q+1),negate(power(beta,2)))));
814 A[4 * 8 + 2] = mult(delta,T3(add(power(beta,q),negate(power(beta,1)))));
815 A[4 * 8 + 4] = mult(delta,T3(add(power(beta,q+2),negate(power(beta,3)))));
816 A[5 * 8 + 3] = mult(omega,T3(add(power(beta,2*q*q+2),negate(power(beta,2*q+2)))));
817 A[5 * 8 + 5] = mult(omega,T3(add(power(beta,3*q+3),negate(power(beta,2*q*q+3*q+1)))));
818 A[5 * 8 + 6] = mult(omega,T3(add(power(beta,4*q+4),negate(power(beta,2*q*q+4*q+2)))));
819 A[6 * 8 + 3] = mult(omega,T3(add(power(beta,q+1),negate(power(beta,q*q+1)))));
820 A[6 * 8 + 5] = mult(omega,T3(add(power(beta,q*q+2*q+1),negate(power(beta,2*q+2)))));
821 A[6 * 8 + 6] = mult(omega,T3(add(power(beta,q*q+3*q+2),negate(power(beta,3*q+3)))));
822#else
823 A[1 * 8 + 1] = mult(delta,T3(add(power(beta,q+2),negate(power(beta,3*q)))));
824 A[1 * 8 + 2] = mult(delta,T3(add(power(beta,2),negate(power(beta,2*q)))));
825 A[1 * 8 + 4] = mult(delta,T3(add(power(beta,2*q+2),negate(power(beta,4*q)))));
826 A[2 * 8 + 1] = mult(delta,T3(add(power(beta,2*q+1),negate(power(beta,2*q+2)))));
827 A[2 * 8 + 2] = mult(delta,T3(add(power(beta,2*q+1),negate(power(beta,q+2)))));
828 A[2 * 8 + 4] = mult(delta,T3(add(power(beta,4*q+1),negate(power(beta,3*q+2)))));
829 A[4 * 8 + 1] = mult(delta,T3(add(power(beta,2),negate(power(beta,q*q+1)))));
830 A[4 * 8 + 2] = mult(delta,T3(add(power(beta,1),negate(power(beta,q*q)))));
831 A[4 * 8 + 4] = mult(delta,T3(add(power(beta,3),negate(power(beta,q*q+2)))));
832 A[3 * 8 + 3] = mult(omega,T3(add(power(beta,q*q+2*q+3),negate(power(beta,2*q*q+q+3)))));
833 A[3 * 8 + 5] = mult(omega,T3(add(power(beta,q*q+3*q+4),negate(power(beta,2*q*q+2*q+4)))));
834 A[3 * 8 + 6] = mult(omega,T3(add(power(beta,q*q+4*q+5),negate(power(beta,2*q*q+3*q+5)))));
835 A[5 * 8 + 3] = mult(omega,T3(add(power(beta,2*q*q+2),negate(power(beta,2*q+2)))));
836 A[5 * 8 + 5] = mult(omega,T3(add(power(beta,2*q*q+q+3),negate(power(beta,3*q+3)))));
837 A[5 * 8 + 6] = mult(omega,T3(add(power(beta,2*q*q+2*q+4),negate(power(beta,4*q+4)))));
838 A[6 * 8 + 3] = mult(omega,T3(add(power(beta,q+1),negate(power(beta,q*q+1)))));
839 A[6 * 8 + 5] = mult(omega,T3(add(power(beta,2*q+2),negate(power(beta,q*q+q+2)))));
840 A[6 * 8 + 6] = mult(omega,T3(add(power(beta,3*q+3),negate(power(beta,q*q+2*q+3)))));
841 //transpose_matrix_in_place(A, 8);
842#endif
843}
844
846{
847 int x;
848
849 x = term1(a1, e1);
850 return T2(x);
851}
852
853int representation_theory_domain::Term2(int a1, int a2, int e1, int e2)
854{
855 int x;
856
857 x = term2(a1, a2, e1, e2);
858 return T2(x);
859}
860
861int representation_theory_domain::Term3(int a1, int a2, int a3, int e1, int e2, int e3)
862{
863 int x;
864
865 x = term3(a1, a2, a3, e1, e2, e3);
866 return T2(x);
867}
868
869int representation_theory_domain::Term4(int a1, int a2, int a3, int a4,
870 int e1, int e2, int e3, int e4)
871{
872 int x;
873
874 x = term4(a1, a2, a3, a4, e1, e2, e3, e4);
875 return T2(x);
876}
877
878int representation_theory_domain::Term5(int a1, int a2, int a3, int a4, int a5,
879 int e1, int e2, int e3, int e4, int e5)
880{
881 int x;
882
883 x = term5(a1, a2, a3, a4, a5, e1, e2, e3, e4, e5);
884 return T2(x);
885}
886
888{
889 int x;
890
891 x = 1;
892 if (e1) {
893 x = mult(x, power(a1, e1));
894 }
895 return x;
896}
897
898int representation_theory_domain::term2(int a1, int a2, int e1, int e2)
899{
900 int x;
901
902 x = 1;
903 if (e1) {
904 x = mult(x, power(a1, e1));
905 }
906 if (e2) {
907 x = mult(x, power(a2, e2));
908 }
909 return x;
910}
911
912int representation_theory_domain::term3(int a1, int a2, int a3, int e1, int e2, int e3)
913{
914 int x;
915
916 x = 1;
917 if (e1) {
918 x = mult(x, power(a1, e1));
919 }
920 if (e2) {
921 x = mult(x, power(a2, e2));
922 }
923 if (e3) {
924 x = mult(x, power(a3, e3));
925 }
926 return x;
927}
928
929int representation_theory_domain::term4(int a1, int a2, int a3, int a4,
930 int e1, int e2, int e3, int e4)
931{
932 int x;
933
934 x = 1;
935 if (e1) {
936 x = mult(x, power(a1, e1));
937 }
938 if (e2) {
939 x = mult(x, power(a2, e2));
940 }
941 if (e3) {
942 x = mult(x, power(a3, e3));
943 }
944 if (e4) {
945 x = mult(x, power(a4, e4));
946 }
947 return x;
948}
949
950int representation_theory_domain::term5(int a1, int a2, int a3, int a4, int a5,
951 int e1, int e2, int e3, int e4, int e5)
952{
953 int x;
954
955 x = 1;
956 if (e1) {
957 x = mult(x, power(a1, e1));
958 }
959 if (e2) {
960 x = mult(x, power(a2, e2));
961 }
962 if (e3) {
963 x = mult(x, power(a3, e3));
964 }
965 if (e4) {
966 x = mult(x, power(a4, e4));
967 }
968 if (e5) {
969 x = mult(x, power(a5, e5));
970 }
971 return x;
972}
973
974int representation_theory_domain::m_term(int q, int a1, int a2, int a3)
975{
976 int x;
977
978 x = 1;
979 x = mult(x, power(a1, q * q));
980 x = mult(x, power(a2, q));
981 x = mult(x, a3);
982 return x;
983}
984
985int representation_theory_domain::beta_trinomial(int q, int beta, int a1, int a2, int a3)
986{
987 int x;
988
989 x = 1;
990 x = mult(x, power(beta, a1 * q * q));
991 x = mult(x, power(beta, a2 * q));
992 x = mult(x, power(beta, a3));
993 return x;
994}
995
997{
998 int x;
999
1000 x = mult(a1, a2);
1001 return T3(x);
1002}
1003
1005{
1006 return F->add(a, b);
1007}
1008
1010{
1011 return F->add3(a, b, c);
1012}
1013
1015{
1016 return F->negate(a);
1017}
1018
1020{
1021 return F->twice(a);
1022}
1023
1024
1025
1027{
1028 return F->mult(a, b);
1029}
1030
1032{
1033 return F->inverse(a);
1034}
1035
1036
1038{
1039 return F->power(a, n);
1040}
1041
1043{
1044 return F->T2(a);
1045}
1046
1048{
1049 return F->T3(a);
1050}
1051
1053{
1054 return F->N2(a);
1055}
1056
1058{
1059 return F->N3(a);
1060}
1061
1062}}}
1063
void mult_matrix_matrix(int *A, int *B, int *C, int m, int n, int o, int verbose_level)
int term4(int a1, int a2, int a3, int a4, int e1, int e2, int e3, int e4)
int Term5(int a1, int a2, int a3, int a4, int a5, int e1, int e2, int e3, int e4, int e5)
int term5(int a1, int a2, int a3, int a4, int a5, int e1, int e2, int e3, int e4, int e5)
int Term4(int a1, int a2, int a3, int a4, int e1, int e2, int e3, int e4)
#define FREE_int(p)
Definition: foundations.h:640
#define Int_vec_zero(A, B)
Definition: foundations.h:713
#define NEW_int(n)
Definition: foundations.h:625
the orbiter library for the classification of combinatorial objects