source: git/Singular/LIB/fpalgebras.lib @ fe1b64

spielwiese
Last change on this file since fe1b64 was fe1b64, checked in by Karim Abou Zeid <karim23697@…>, 6 years ago
Add PROCEDURES doc and update Baumslag doc
  • Property mode set to 100644
File size: 33.2 KB
Line 
1////////////////////////////////////////////////////////////////
2version="version fpalgebras.lib 4.1.1.0 Feb_2018 ";
3category="Noncommutative";
4info="
5LIBRARY: fpalgebras.lib
6AUTHORS: Karim Abou Zeid,       karim.abou.zeid at rwth-aachen.de
7
8Support: Project II.6 in the transregional collaborative research centre
9SFB-TRR 195 'Symbolic Tools in Mathematics and their Application' of the German DFG
10
11OVERVIEW:
12Generation of various groups and algebras in the Letterplace ring
13
14PROCEDURES:
15baumslagSolitar(int n, int m, int d, list #);
16baumslag(int m, int n, int d);
17crystallographicGroupP1(int d);
18crystallographicGroupPM(int d);
19crystallographicGroupPG(int d);
20crystallographicGroupP2MM(int d);
21crystallographicGroupP2(int d);
22crystallographicGroupP2GG(int d);
23crystallographicGroupCM(int d);
24crystallographicGroupC2MM(int d);
25crystallographicGroupP4(int d);
26crystallographicGroupP4MM(int d);
27crystallographicGroupP4GM(int d);
28crystallographicGroupP3(int d);
29crystallographicGroupP31M(int d);
30crystallographicGroupP3M1(int d);
31crystallographicGroupP6(int d);
32crystallographicGroupP6MM(int d);
33dyckGroup1(int n, int d, intvec P);
34dyckGroup2(int n, int d, intvec P);
35dyckGroup3(int n, int d, intvec P);
36fibonacciGroup(int m, int d);
37tetrahedronGroup(int g, int d);
38triangularGroup(int g, int d);
39";
40
41LIB "freegb.lib";
42LIB "general.lib";
43////////////////////////////////////////////////////////////////////
44
45////////////////////////////////////////////////////////////////////
46// Baumslag ////////////////////////////////////////////////////////
47// from Grischa Studzinski /////////////////////////////////////////
48////////////////////////////////////////////////////////////////////
49
50proc baumslagSolitar(int n, int m, int d, list #)
51"USAGE: baumslagSolitar(m,n,d[,IsGroup]); n an integer, m an integer, d an integer, IsGroup an optional integer
52RETURN: ring
53NOTE: - the ring contains the ideal I, which contains the required relations
54@*    - in the group case: A = a^(-1), B = b^(-1)
55@*    - negativ input is only allowed in the group case!
56@*    - d gives a degreebound and must be >m,n
57"
58{
59  int isGroup = 0;
60  if (size(#) > 0) {isGroup = #[1];}
61
62  if (isGroup != 0)
63  {
64   int baseringdef;
65   if (defined(basering)) // if a basering is defined, it should be saved for later use
66   {
67    def save = basering;
68    baseringdef = 1;
69   }
70   if (m < 0 || n < 0) {ERROR("Exponent can't be negativ in monoid rings!");}
71   if (d < 1 || d < m || d < n) {ERROR("Degree bound must be positiv and greater then m,n!");}
72   int i;
73   ring mr = 0,(a,b),Dp;
74   def Mr = makeLetterplaceRing(d);
75   setring Mr;
76   poly p,q;
77   if (n==0) {p = b(1);}
78   else
79   {
80    p = a(1)*b(2);
81    for (i = 1; i < n; i++) {p = lpMult(a(1),p);}
82   }
83   if (m==0) {q = b(1);}
84   else
85   {
86    q = b(1)*a(2);
87    for (i = 1; i < m; i++) {q = lpMult(q,a(1));}
88   }
89   ideal I = p - q;
90   export(I);
91   if (baseringdef == 1) {setring save;}
92   return(Mr);
93  }
94  else
95  {
96   int baseringdef;
97   if (defined(basering)) // if a basering is defined, it should be saved for later use
98   {
99    def save = basering;
100    baseringdef = 1;
101   }
102   int i;
103   if (d < 1 || d < absValue(m) || d < absValue(n)) {ERROR("Degree bound must be positiv and greater then |m|,|n|!");}
104   ring gr = 0,(a,b,A,B),Dp;
105   def Gr = makeLetterplaceRing(d);
106   setring Gr;
107   poly p,q;
108   if (n==0) {p = b(1);}
109   else
110   {if (n > 0)
111    {
112     p = a(1)*b(2);
113     for (i = 1; i < n; i++) {p = lpMult(a(1),p);}
114    }
115    else
116    {
117     p = A(1)*b(2);
118     for (i = 1; i < -n; i++) {p = lpMult(A(1),p);}
119    }
120   }
121   if (m==0) {q = b(1);}
122   else
123   {if (m > 0)
124    {
125     q = b(1)*a(2);
126     for (i = 1; i < m; i++) {q = lpMult(q,a(1));}
127    }
128    else
129    {
130     q = A(1)*b(2);
131     for (i = 1; i < -m; i++) {q = lpMult(q,A(1));}
132    }
133   }
134   ideal I = p - q, a(1)*A(2) - 1, b(1)*B(2) - 1, a(1)*A(2) - A(1)*a(2), b(1)*B(2) - B(1)*b(2);
135   export(I);
136   if (baseringdef == 1) {setring save;}
137   return(Gr);
138  }
139}
140
141
142proc baumslagGroup(int m, int n, int d)
143"USAGE: baumslagGroup(m,n,d); m an integer, n an integer, d an integer
144RETURN: ring
145NOTE: - the ring contains the ideal I, which contains the required relations
146@*    - Baumslag group with the following presentation
147@*      < a, b | a^m = b^n = 1 >
148@*    -d gives the degreebound for the Letterplace ring
149"
150{
151 if (m < 0 || n < 0 ) {ERROR("m,n must be non-negativ integers!");}
152 if (d < 1 || d < m || d < n) {ERROR("degreebound must be positiv and larger than n and m!");}
153 int i;
154 ring r = 0,(a,b),dp;
155 def R = makeLetterplaceRing(d);
156 setring R;
157 poly p,q;
158 p = 1; q = 1;
159 for (i = 1; i <= m; i++){p = lpMult(p,a(1));}
160 for (i = 1; i <= n; i++){q = lpMult(q,b(1));}
161 ideal I = p-1,q-1;
162 export(I);
163 return(R);
164}
165
166
167////////////////////////////////////////////////////////////////////
168// Crystallographic Groups //////////////////////////////////////////
169// from Grischa Studzinski /////////////////////////////////////////
170////////////////////////////////////////////////////////////////////
171
172proc crystallographicGroupP1(int d)
173"USAGE: crystallographicGroupP1(d); d an integer
174RETURN: ring
175NOTE: - the ring contains the ideal I, which contains the required relations
176@*    - p1 group with the following presentation
177@*      < x, y | [x, y] = 1 >
178@*    -d gives the degreebound for the Letterplace ring
179"
180{
181 if (d < 2){ERROR("Degreebound is to small for choosen example!");}
182 
183 int baseringdef;
184 if (defined(basering)) // if a basering is defined, it should be saved for later use
185 {
186  def save = basering;
187  baseringdef = 1;
188 }
189 ring r = 2,(x,y,X,Y),dp;
190 def R = makeLetterplaceRing(d);
191 setring R;
192 ideal I = x(1)*y(2)-y(1)*x(2)-1, X(1)*x(2)-1, x(1)*X(2)-1, y(1)*Y(2)-1, Y(1)*y(2)-1;
193 I = simplify(I,2);
194 export(I);
195 if (baseringdef == 1) {setring save;}
196 return(R);
197}
198
199// old? there is already another crystallographicGroupP2 proc
200/* proc crystallographicGroupP2(int d) */
201/* " */
202/* p2 group with the following presentation */
203/* < x, y, r | [x, y] = r^2 = 1, r^-1*x*r = x^-1, r^-1*y*r = y^-1 > */
204/* Note: r = r^-1 */
205/* " */
206/* { */
207/*  if (d < 3){ERROR("Degreebound is to small for choosen example!");} */
208 
209/*  int baseringdef; */
210/*  if (defined(basering)) // if a basering is defined, it should be saved for later use */
211/*  { */
212/*   def save = basering; */
213/*   baseringdef = 1; */
214/*  } */
215/*  ring r = 2,(x,y,r,X,Y),dp; */
216/*  def R = makeLetterplaceRing(d); */
217/*  setring R; */
218/*  ideal I = x(1)*y(2)-y(1)*x(2)-1, x(1)*y(2)-y(1)*x(2)-r(1)*r(2), r(1)*r(2)-1, r(1)*x(2)*r(3)-X(1), r(1)*y(2)*r(3)-Y(1),x(1)*X(2)-1, */ 
219/* X(1)*x(2)-1, Y(1)*y(2)-1,  y(1)*Y(2)-1; */
220/*  I = simplify(I,2); */
221/*  export(I); */
222/*  if (baseringdef == 1) {setring save;} */
223/*  return(R); */
224/* } */
225
226proc crystallographicGroupPM(int d)
227"USAGE: crystallographicGroupPM(d); d an integer
228RETURN: ring
229NOTE: - the ring contains the ideal I, which contains the required relations
230@*    - pm group with the following presentation
231@*      < x, y, m | [x, y] = m^2 = 1, m^-1*x*m = x, m^-1*y*m = y^-1 >
232@*    - d gives the degreebound for the Letterplace ring
233"
234{
235 if (d < 3){ERROR("Degreebound is to small for choosen example!");}
236 
237 int baseringdef;
238 if (defined(basering)) // if a basering is defined, it should be saved for later use
239 {
240  def save = basering;
241  baseringdef = 1;
242 }
243 ring r = 2,(x,y,m,X,Y),dp;
244 def R = makeLetterplaceRing(d);
245 setring R;
246 ideal I = x(1)*y(2)-y(1)*x(2)-1, x(1)*y(2)-y(1)*x(2)-m(1)*m(2), m(1)*m(2)-1, m(1)*x(2)*m(3)-x(1), m(1)*y(2)*m(3)-Y(1),x(1)*X(2)-1, 
247X(1)*x(2)-1, Y(1)*y(2)-1,  y(1)*Y(2)-1;
248 I = simplify(I,2);
249 export(I);
250 if (baseringdef == 1) {setring save;}
251 return(R);
252}
253
254proc crystallographicGroupPG(int d)
255"USAGE: crystallographicGroupPG(d); d an integer
256RETURN: ring
257NOTE: - the ring contains the ideal I, which contains the required relations
258@*    - pg group with the following presentation
259@*      < x, y, t | [x, y] = 1, t^2 = x, t^-1*y*t = y^-1 >
260@*    - d gives the degreebound for the Letterplace ring
261"
262{
263 if (d < 3){ERROR("Degreebound is to small for choosen example!");}
264 
265 int baseringdef;
266 if (defined(basering)) // if a basering is defined, it should be saved for later use
267 {
268  def save = basering;
269  baseringdef = 1;
270 }
271 ring r = 2,(x,y,t,X,Y,T),dp;
272 def R = makeLetterplaceRing(d);
273 setring R;
274 ideal I = x(1)*y(2)-y(1)*x(2)-1, t(1)*t(2) - x(1), T(1)*y(2)*t(3)-Y(1), X(1)*x(2)-1, x(1)*X(2)-1, 
275Y(1)*y(2)-1,  y(1)*Y(2)-1, t(1)*T(2)-1, T(1)*t(2)-1;
276 I = simplify(I,2);
277 export(I);
278 if (baseringdef == 1) {setring save;}
279 return(R);
280}
281
282
283proc crystallographicGroupP2MM(int d)
284"USAGE: crystallographicGroupP2MM(d); d an integer
285RETURN: ring
286NOTE: - the ring contains the ideal I, which contains the required relations
287@*    - p2mm group with the following presentation
288@*      < x, y, p, q | [x, y] = [p, q] = p^2 = q^2 = 1, p^-1*x*p = x, q^-1*x*q = x^-1, p^-1*y*p = y^-1, q^-1*y*q = y >
289@*    - d gives the degreebound for the Letterplace ring
290"
291{
292 if (d < 3){ERROR("Degreebound is to small for choosen example!");}
293 
294 int baseringdef;
295 if (defined(basering)) // if a basering is defined, it should be saved for later use
296 {
297  def save = basering;
298  baseringdef = 1;
299 }
300 ring r = 2,(x,y,p,q,X,Y),dp;
301 def R = makeLetterplaceRing(d);
302 setring R;
303 ideal I = x(1)*y(2)-y(1)*x(2)-1, p(1)*q(2)-q(1)*p(2)-1, p(1)*p(2) - 1, q(1)*q(2) - 1, p(1)*y(2)*p(3)-Y(1), p(1)*x(2)*p(3)-x(1),
304 q(1)*y(2)*q(3)-y(1), q(1)*x(2)*q(3)-X(1), X(1)*x(2)-1, x(1)*X(2)-1,  Y(1)*y(2)-1,  y(1)*Y(2)-1,  x(1)*y(2)-y(1)*x(2)- p(1)*p(2),
305 x(1)*y(2)-y(1)*x(2)- q(1)*q(2), p(1)*p(2)-q(1)*q(2);
306 I = simplify(I,2);
307 export(I);
308 if (baseringdef == 1) {setring save;}
309 return(R);
310}
311
312proc crystallographicGroupP2(int d)
313"USAGE: crystallographicGroupP2(d); d an integer
314RETURN: ring
315NOTE: - the ring contains the ideal I, which contains the required relations
316@*    - p2 group with the following presentation
317@*      < x, y, m, t | [x, y] = t^2 = 1, m^2 = y, t^-1*x*t = x, m^-1*x*m = x^-1, t^-1*y*t = y^-1, t^-1*m*t = m^-1 >
318@*    - d gives the degreebound for the Letterplace ring
319"
320{
321 if (d < 3){ERROR("Degreebound is to small for choosen example!");}
322 
323 int baseringdef;
324 if (defined(basering)) // if a basering is defined, it should be saved for later use
325 {
326  def save = basering;
327  baseringdef = 1;
328 }
329 ring r = 2,(x,y,m,t,X,Y,M),dp;
330 def R = makeLetterplaceRing(d);
331 setring R;
332 ideal I = x(1)*y(2)-y(1)*x(2)-1, x(1)*y(2)-y(1)*x(2)-t(1)*t(2), m(1)*m(2)-y(1), t(1)*t(2) - 1, t(1)*x(2)*t(3)-x(1),
333M(1)*x(2)*m(3)-X(1), t(1)*y(2)*t(3)-Y(1), t(1)*m(2)*t(3)-M(1), X(1)*x(2)-1, x(1)*X(2)-1,  Y(1)*y(2)-1,  y(1)*Y(2)-1,
334m(1)*M(2)-1, M(1)*m(2)-1;
335 I = simplify(I,2);
336 export(I);
337 if (baseringdef == 1) {setring save;}
338 return(R);
339}
340
341proc crystallographicGroupP2GG(int d)
342"USAGE: crystallographicGroupP2GG(d); d an integer
343RETURN: ring
344NOTE: - the ring contains the ideal I, which contains the required relations
345@*    - p2gg group with the following presentation
346@*      < x, y, u, v | [x, y] = (u*v)^2 = 1, u^2 = x, v^2 = y, v^-1*x*v = x^-1, u^-1*y*u = y^-1 >
347@*    - d gives the degreebound for the Letterplace ring
348"
349{
350 if (d < 4){ERROR("Degreebound is to small for choosen example!");}
351 
352 int baseringdef;
353 if (defined(basering)) // if a basering is defined, it should be saved for later use
354 {
355  def save = basering;
356  baseringdef = 1;
357 }
358 ring r = 2,(x,y,u,v,X,Y,u,v),dp;
359 def R = makeLetterplaceRing(d);
360 setring R;
361 ideal I = x(1)*y(2)-y(1)*x(2)-1, x(1)*y(2)-y(1)*x(2)-u(1)*v(2)*u(3)*v(4), u(1)*v(2)*u(3)*v(4)-1, u(1)*u(2)-x(1), v(1)*v(2) - y,
362V(1)*x(2)*v(3)-X(1), U(1)*y(2)*u(3)-Y(1),
363X(1)*x(2)-1, x(1)*X(2)-1,  Y(1)*y(2)-1,  y(1)*Y(2)-1, u(1)*U(2)-1, U(1)*u(2)-1, v(1)*V(2)-1, V(1)*v(2)-1;
364 I = simplify(I,2);
365 export(I);
366 if (baseringdef == 1) {setring save;}
367 return(R);
368}
369
370proc crystallographicGroupCM(int d)
371"USAGE: crystallographicGroupCM(d); d an integer
372RETURN: ring
373NOTE: - the ring contains the ideal I, which contains the required relations
374@*    - cm group with the following presentation
375@*      < x, y, t | [x, y] = t^2 = 1, t^-1*x*t = x*y, t^-1*y*t = y^-1 >   
376@*    - d gives the degreebound for the Letterplace ring
377"
378{
379 if (d < 3){ERROR("Degreebound is to small for choosen example!");}
380 
381 int baseringdef;
382 if (defined(basering)) // if a basering is defined, it should be saved for later use
383 {
384  def save = basering;
385  baseringdef = 1;
386 }
387 ring r = 2,(x,y,t,X,Y),dp;
388 def R = makeLetterplaceRing(d);
389 setring R;
390 ideal I = x(1)*y(2)-y(1)*x(2)-1, x(1)*y(2)-y(1)*x(2)-t(1)*t(2), t(1)*t(2)-1, 
391t(1)*x(2)*t(3)-x(1)*y(2), t(1)*y(2)*t(3)-Y(1),
392X(1)*x(2)-1, x(1)*X(2)-1,  Y(1)*y(2)-1,  y(1)*Y(2)-1;
393 I = simplify(I,2);
394 export(I);
395 if (baseringdef == 1) {setring save;}
396 return(R);
397}
398
399proc crystallographicGroupC2MM(int d)
400"USAGE: crystallographicGroupC2MM(d); d an integer
401RETURN: ring
402NOTE: - the ring contains the ideal I, which contains the required relations
403@*    - c2mm group with the following presentation
404@*      < x, y, m, r | [x, y] = m^2 = r^2 = 1, m^-1*y*m = y^-1, m^-1*x*m = x*y, r^-1*y*r = y^-1, r^-1*x*r = x^-1, m^-1*r*m = r^-1 >
405@*    - d gives the degreebound for the Letterplace ring
406"
407{
408 if (d < 3){ERROR("Degreebound is to small for choosen example!");}
409 
410 int baseringdef;
411 if (defined(basering)) // if a basering is defined, it should be saved for later use
412 {
413  def save = basering;
414  baseringdef = 1;
415 }
416 ring r = 2,(x,y,m,r,X,Y),dp;
417 def R = makeLetterplaceRing(d);
418 setring R;
419 ideal I = x(1)*y(2)-y(1)*x(2)-1, x(1)*y(2)-y(1)*x(2)-m(1)*m(2), x(1)*y(2)-y(1)*x(2)-r(1)*r(2), m(1)*m(2)-1,  r(1)*r(2)-1,
420 m(1)*m(2)-r(1)*r(2), m(1)*y(2)*m(3)-Y(1), m(1)*x(2)*m(3)-x(1)*y(2), (1)*y(2)*r(3)-Y(1), r(1)*x(2)*r(3)-X(1), m(1)*r(2)*m(3)-r(1),
421X(1)*x(2)-1, x(1)*X(2)-1,  Y(1)*y(2)-1,  y(1)*Y(2)-1;
422 I = simplify(I,2);
423 export(I);
424 if (baseringdef == 1) {setring save;}
425 return(R);
426}
427
428proc crystallographicGroupP4(int d)
429"USAGE: crystallographicGroupP4(d); d an integer
430RETURN: ring
431NOTE: - the ring contains the ideal I, which contains the required relations
432@*    - p4 group with the following presentation
433@*      < x, y, r | [x, y] = r^4 = 1, r^-1*x*r = x^-1, r^-1*x*r = y >   
434@*    - d gives the degreebound for the Letterplace ring
435"
436{
437 if (d < 5){ERROR("Degreebound is to small for choosen example!");}
438 
439 int baseringdef;
440 if (defined(basering)) // if a basering is defined, it should be saved for later use
441 {
442  def save = basering;
443  baseringdef = 1;
444 }
445 ring r = 2,(x,y,r,X,Y),dp;
446 def R = makeLetterplaceRing(d);
447 setring R;
448 ideal I = x(1)*y(2)-y(1)*x(2)-1, x(1)*y(2)-y(1)*x(2)-r(1)*r(2)*r(3)*r(4), r(1)*r(2)*r(3)*r(4)-1,
449 r(1)*r(2)*r(3)*x(4)*r(5)-X(1), r(1)*r(2)*r(3)*x(4)*r(5)-y(1),
450X(1)*x(2)-1, x(1)*X(2)-1,  Y(1)*y(2)-1,  y(1)*Y(2)-1;
451 I = simplify(I,2);
452 export(I);
453 if (baseringdef == 1) {setring save;}
454 return(R);
455}
456
457proc crystallographicGroupP4MM(int d)
458"USAGE: crystallographicGroupP4MM(d); d an integer
459RETURN: ring
460NOTE: - the ring contains the ideal I, which contains the required relations
461@*    - p4mm group with the following presentation
462@*      < x, y, r, m | [x, y] = r^4 = m^2 = 1, r^-1*y*r = x^-1, r^-1*x*r = y, m^-1*x*m = y, m^-1*r*m = r^-1 >
463@*    - d gives the degreebound for the Letterplace ring
464"
465{
466 if (d < 5){ERROR("Degreebound is to small for choosen example!");}
467 
468 int baseringdef;
469 if (defined(basering)) // if a basering is defined, it should be saved for later use
470 {
471  def save = basering;
472  baseringdef = 1;
473 }
474 ring r = 2,(x,y,r,m,X,Y),dp;
475 def R = makeLetterplaceRing(d);
476 setring R;
477 ideal I = x(1)*y(2)-y(1)*x(2)-1, x(1)*y(2)-y(1)*x(2)-r(1)*r(2)*r(3)*r(4),  r(1)*r(2)*r(3)*r(4)-1,
478 r(1)*r(2)*r(3)*x(4)*r(5)-X(1), r(1)*r(2)*r(3)*x(4)*r(5)-y(1),
479X(1)*x(2)-1, x(1)*X(2)-1,  Y(1)*y(2)-1,  y(1)*Y(2)-1;
480 I = simplify(I,2);
481 export(I);
482 if (baseringdef == 1) {setring save;}
483 return(R);
484}
485
486proc crystallographicGroupP4GM(int d)
487"USAGE: crystallographicGroupP4GM(d); d an integer
488RETURN: ring
489NOTE: - the ring contains the ideal I, which contains the required relations
490@*    - p4gm group with the following presentation
491@*      < x, y, r, t | [x, y] = r^4 = t^2 = 1, r^-1*y*r = x^-1, r^-1*x*r = y, t^-1*x*t = y, t^-1*r*t = x^-1*r^-1>
492@*    - d gives the degreebound for the Letterplace ring
493"
494{
495 if (d < 5){ERROR("Degreebound is to small for choosen example!");}
496 
497 int baseringdef;
498 if (defined(basering)) // if a basering is defined, it should be saved for later use
499 {
500  def save = basering;
501  baseringdef = 1;
502 }
503 ring r = 2,(x,y,r,t,X,Y),dp;
504 def R = makeLetterplaceRing(d);
505 setring R;
506 ideal I = x(1)*y(2)-y(1)*x(2)-1, x(1)*y(2)-y(1)*x(2)-r(1)*r(2)*r(3)*r(4),  r(1)*r(2)*r(3)*r(4)-1, x(1)*y(2)-y(1)*x(2)-t(1)*t(2),
507 t(1)*t(2)-1,  r(1)*r(2)*r(3)*r(4)-t(1)*t(2),  r(1)*r(2)*r(3)*y(4)*r(5)-X(1), r(1)*r(2)*r(3)*x(4)*r(5)-y(1),
508 t(1)*r(2)*t(3)-X(1)*r(2)*r(3)*r(4), X(1)*x(2)-1, x(1)*X(2)-1,  Y(1)*y(2)-1,  y(1)*Y(2)-1;
509 I = simplify(I,2);
510 export(I);
511 if (baseringdef == 1) {setring save;}
512 return(R);
513}
514
515proc crystallographicGroupP3(int d)
516"USAGE: crystallographicGroupP3(d); d an integer
517RETURN: ring
518NOTE: - the ring contains the ideal I, which contains the required relations
519@*    - p3 group with the following presentation
520@*      < x, y, r | [x, y] = r^3 = 1, r^-1*x*r = x^-1*y, r^-1*y*r = x^-1>
521@*    - d gives the degreebound for the Letterplace ring
522"
523{
524 if (d < 4){ERROR("Degreebound is to small for choosen example!");}
525 
526 int baseringdef;
527 if (defined(basering)) // if a basering is defined, it should be saved for later use
528 {
529  def save = basering;
530  baseringdef = 1;
531 }
532 ring r = 2,(x,y,r,X,Y),dp;
533 def R = makeLetterplaceRing(d);
534 setring R;
535 ideal I = x(1)*y(2)-y(1)*x(2)-1, x(1)*y(2)-y(1)*x(2)-r(1)*r(2)*r(3),  r(1)*r(2)*r(3)-1,
536  r(1)*r(2)*x(3)*r(4)-X(1)*y(2),  r(1)*r(2)*y(3)*r(4)-X(1), X(1)*x(2)-1, x(1)*X(2)-1,  Y(1)*y(2)-1,  y(1)*Y(2)-1;
537 I = simplify(I,2);
538 export(I);
539 if (baseringdef == 1) {setring save;}
540 return(R);
541}
542
543proc crystallographicGroupP31M(int d)
544"USAGE: crystallographicGroupP31M(d); d an integer
545RETURN: ring
546NOTE: - the ring contains the ideal I, which contains the required relations
547@*    - p31m group with the following presentation
548@*      < x, y, r, t | [x, y] = r^2 = t^2 = (t*r)^3 = 1, r^-1*x*r = x, t^-1*y*t = y, t^-1*x*t = x^-1*y, r^-1*y*r = x*y^-1 >
549@*    - d gives the degreebound for the Letterplace ring
550"
551{
552 if (d < 6){ERROR("Degreebound is to small for choosen example!");}
553 
554 int baseringdef;
555 if (defined(basering)) // if a basering is defined, it should be saved for later use
556 {
557  def save = basering;
558  baseringdef = 1;
559 }
560 ring r = 2,(x,y,r,t,X,Y),dp;
561 def R = makeLetterplaceRing(d);
562 setring R;
563 ideal I = x(1)*y(2)-y(1)*x(2)-1, x(1)*y(2)-y(1)*x(2)-r(1)*r(2), x(1)*y(2)-y(1)*x(2)-t(1)*t(2), r(1)*r(2)-1, t(1)*t(2)-1,
564 t(1)*r(2)*t(3)*r(4)*t(5)*r(6)-1, r(1)*r(2)-t(1)*t(2),  x(1)*y(2)-y(1)*x(2)-t(1)*r(2)*t(3)*r(4)*t(5)*r(6),
565 t(1)*r(2)*t(3)*r(4)*t(5)*r(6)-r(1)*r(2), t(1)*r(2)*t(3)*r(4)*t(5)*r(6)-t(1)*t(2),
566 r(1)*x(2)*r(3)-x(1),  t(1)*y(2)*t(3)-y(1), t(1)*x(2)*t(3)-X(1)*y(2), r(1)*y(2)*r(3)-x(1)*Y(2),
567 X(1)*x(2)-1, x(1)*X(2)-1, Y(1)*y(2)-1,  y(1)*Y(2)-1;
568 I = simplify(I,2);
569 export(I);
570 if (baseringdef == 1) {setring save;}
571 return(R);
572}
573
574proc crystallographicGroupP3M1(int d)
575"USAGE: crystallographicGroupP3M1(d); d an integer
576RETURN: ring
577NOTE: - the ring contains the ideal I, which contains the required relations
578@*    - p3m1 group with the following presentation
579@*      < x, y, r, m | [x, y] = r^3 = m^2 = 1, m^-1*r*m = r^2, r^-1*x*r = x^-1*y, r^-1*y*r = x^-1, m^-1*x*m = x^-1, m^-1*y*m = x^-1*y >
580@*    - d gives the degreebound for the Letterplace ring
581"
582{
583 if (d < 4){ERROR("Degreebound is to small for choosen example!");}
584 
585 int baseringdef;
586 if (defined(basering)) // if a basering is defined, it should be saved for later use
587 {
588  def save = basering;
589  baseringdef = 1;
590 }
591 ring r = 2,(x,y,r,m,X,Y),dp;
592 def R = makeLetterplaceRing(d);
593 setring R;
594 ideal I = x(1)*y(2)-y(1)*x(2)-1, x(1)*y(2)-y(1)*x(2)-r(1)*r(2)*r(3), x(1)*y(2)-y(1)*x(2)-m(1)*m(2), r(1)*r(2)*r(3)-1, m(1)*m(2)-1,
595 r(1)*r(2)*r(3)-m(1)*m(2),  m(1)*r(2)*m(3)-r(1)*r(2), r(1)*r(2)*x(3)*r(4)-X(1)*y(2), r(1)*r(2)*y(3)*r(4)-X(1),m(1)*x(2)*m(3)-X(1),
596 m(1)*y(2)*m(3)-X(1)*y(2), X(1)*x(2)-1, x(1)*X(2)-1, Y(1)*y(2)-1,  y(1)*Y(2)-1;
597 I = simplify(I,2);
598 export(I);
599 if (baseringdef == 1) {setring save;}
600 return(R);
601}
602
603proc crystallographicGroupP6(int d)
604"USAGE: crystallographicGroupP6(d); d an integer
605RETURN: ring
606NOTE: - the ring contains the ideal I, which contains the required relations
607@*    - p6 group with the following presentation
608@*      < x, y, r | [x, y] = r^6 = 1, r^-1*x*r = y, r^-1*y*r = x^-1*y>
609@*    - d gives the degreebound for the Letterplace ring
610"
611{
612 if (d < 7){ERROR("Degreebound is to small for choosen example!");}
613 
614 int baseringdef;
615 if (defined(basering)) // if a basering is defined, it should be saved for later use
616 {
617  def save = basering;
618  baseringdef = 1;
619 }
620 ring r = 2,(x,y,r,X,Y),dp;
621 def R = makeLetterplaceRing(d);
622 setring R;
623 ideal I = x(1)*y(2)-y(1)*x(2)-1, x(1)*y(2)-y(1)*x(2)-r(1)*r(2)*r(3)*r(4)*r(5)*r(6), r(1)*r(2)*r(3)*r(4)*r(5)*r(6)-1,
624 r(1)*r(2)*r(3)*r(4)*r(5)*x(6)*r(7)-y(1), r(1)*r(2)*r(3)*r(4)*r(5)*y(6)*r(7)-X(1)*y(2),
625 X(1)*x(2)-1, x(1)*X(2)-1, Y(1)*y(2)-1,  y(1)*Y(2)-1;
626 I = simplify(I,2);
627 export(I);
628 if (baseringdef == 1) {setring save;}
629 return(R);
630}
631
632proc crystallographicGroupP6MM(int d)
633"USAGE: crystallographicGroupP6MM(d); d an integer
634RETURN: ring
635NOTE: - the ring contains the ideal I, which contains the required relations
636@*    - p6mm group with the following presentation
637@*      < x, y, r, m | [x, y] = r^6 = m^2 = 1, r^-1*y*r = x^-1*y, r^-1*x*r = y, m^-1*x*m = x^-1, m^-1*y*m = x^-1*y, m^-1*r*m = r^-1*y>
638@*    - d gives the degreebound for the Letterplace ring
639"
640{
641 if (d < 7){ERROR("Degreebound is to small for choosen example!");}
642 
643 int baseringdef;
644 if (defined(basering)) // if a basering is defined, it should be saved for later use
645 {
646  def save = basering;
647  baseringdef = 1;
648 }
649 ring r = 2,(x,y,r,m,X,Y),dp;
650 def R = makeLetterplaceRing(d);
651 setring R;
652 ideal I = x(1)*y(2)-y(1)*x(2)-1, x(1)*y(2)-y(1)*x(2)-r(1)*r(2)*r(3)*r(4)*r(5)*r(6), r(1)*r(2)*r(3)*r(4)*r(5)*r(6)-1,
653 x(1)*y(2)-y(1)*x(2)-m(1)*m(2), r(1)*r(2)*r(3)*r(4)*r(5)*r(6)-m(1)*m(2), m(1)*m(2)-1, m(1)*x(2)*m(3)-X(1),  m(1)*y(2)*m(3)-X(1)*y(2),
654 r(1)*r(2)*r(3)*r(4)*r(5)*x(6)*r(7)-y(1), r(1)*r(2)*r(3)*r(4)*r(5)*y(6)*r(7)-X(1)*y(2), M(1)*r(2)*m(3)- r(1)*r(2)*r(3)*r(4)*r(5)*y(6)
655 X(1)*x(2)-1, x(1)*X(2)-1, Y(1)*y(2)-1,  y(1)*Y(2)-1;
656 I = simplify(I,2);
657 export(I);
658 if (baseringdef == 1) {setring save;}
659 return(R);
660}
661
662////////////////////////////////////////////////////////////////////
663// Dyck Group //////////////////////////////////////////////////////
664// from Grischa Studzinski /////////////////////////////////////////
665////////////////////////////////////////////////////////////////////
666
667proc dyckGroup1(int n, int d, intvec P)
668"USAGE: dyckGroup1(n,d,P); n an integer, d an integer, P an intvec
669RETURN: ring
670NOTE: - the ring contains the ideal I, which contains the required relations
671@*    - The Dyck group with the following presentation
672@*      < x_1, x_2, ... , x_n | (x_1)^p1 = (x_2)^p2 = ... = (x_n)^pn = x_1 * x_2 * ... * x_n = 1 >
673@*    - negative exponents are allowed
674@*    - representation in the form x_i^p_i - x_(i+1)^p_(i+1)
675@*    - d gives the degreebound for the Letterplace ring
676"
677{
678 int baseringdef,i,j;
679 if (n < 1) {ERROR("There must be at least one variable!");}
680 if (d < n) {ERROR("Degreebound is to small!");}
681 for (i = 1; i <= size(P); i++) {if (d < absValue(P[i])){ERROR("Degreebound is to small!");}}
682
683 if (defined(basering)) // if a basering is defined, it should be saved for later use
684 {
685  def save = basering;
686  baseringdef = 1;
687 }
688 ring r = 2,(x(1..n),Y(1..n)),dp;
689 def R = makeLetterplaceRing(d);
690 setring R;
691 ideal I; poly p,q;
692 p = 1; q = 1;
693 for (i = 1; i<= n; i++) {p = lpMult(p,var(i));}
694 I = p-1;
695 for (i = n; i > 0; i--)
696 {
697  if (P[i] >= 0) {for (j = 1; j <= P[i]; j++){q = lpMult(q,var(i));}}
698  else {for (j = 1; j <= -P[i]; j++){q = lpMult(q,var(i+n));}}
699  I = p - q,I;
700  p = q; q = 1;
701 }
702 
703 I = simplify(I,2);
704 export(I);
705 if (baseringdef == 1) {setring save;}
706 return(R);
707}
708
709
710proc dyckGroup2(int n, int d, intvec P)
711"USAGE: dyckGroup2(n,d,P); n an integer, d an integer, P an intvec
712RETURN: ring
713NOTE: - the ring contains the ideal I, which contains the required relations
714@*    - The Dyck group with the following presentation
715@*      < x_1, x_2, ... , x_n | (x_1)^p1 = (x_2)^p2 = ... = (x_n)^pn = x_1 * x_2 * ... * x_n = 1 >
716@*    - negative exponents are allowed
717@*    - representation in the form x_i^p_i - 1
718@*    - d gives the degreebound for the Letterplace ring
719"
720{
721 int baseringdef,i,j;
722 if (n < 1) {ERROR("There must be at least one variable!");}
723 if (d < n) {ERROR("Degreebound is to small!");}
724 for (i = 1; i <= size(P); i++) {if (d < absValue(P[i])){ERROR("Degreebound is to small!");}}
725
726 if (defined(basering)) // if a basering is defined, it should be saved for later use
727 {
728  def save = basering;
729  baseringdef = 1;
730 }
731 ring r = 2,(x(1..n),Y(1..n)),dp;
732 def R = makeLetterplaceRing(d);
733 setring R;
734 ideal I; poly p;
735 p = 1;
736 for (i = 1; i<= n; i++) {p = lpMult(p,var(i));}
737 I = p-1;
738 for (i = n; i > 0; i--)
739 {
740  p = 1;
741  if (P[i] >= 0) {for (j = 1; j <= P[i]; j++){p = lpMult(p,var(i));}}
742  else {for (j = 1; j <= -P[i]; j++){p = lpMult(p,var(i+n));}}
743  I = p - 1,I;
744 }
745 
746 I = simplify(I,2);
747 export(I);
748 if (baseringdef == 1) {setring save;}
749 return(R);
750}
751
752
753
754proc dyckGroup3(int n, int d, intvec P)
755"USAGE: dyckGroup2(n,d,P); n an integer, d an integer, P an intvec
756RETURN: ring
757NOTE: - the ring contains the ideal I, which contains the required relations
758@*    - The Dyck group with the following presentation
759@*      < x_1, x_2, ... , x_n | (x_1)^p1 = (x_2)^p2 = ... = (x_n)^pn = x_1 * x_2 * ... * x_n = 1 >
760@*    - only positive exponents are allowed
761@*    - no inverse generators needed
762@*    - d gives the degreebound for the Letterplace ring
763"
764{
765 int baseringdef,i,j;
766 if (n < 1) {ERROR("There must be at least one variable!");}
767 if (d < n) {ERROR("Degreebound is to small!");}
768 for (i = 1; i <= size(P); i++) {if (P[i] < 0){ERROR("Exponents must be positive!");}}
769 for (i = 1; i <= size(P); i++) {if (d < P[i]){ERROR("Degreebound is to small!");}}
770 
771
772 if (defined(basering)) // if a basering is defined, it should be saved for later use
773 {
774  def save = basering;
775  baseringdef = 1;
776 }
777 ring r = 2,x(1..n),dp;
778 def R = makeLetterplaceRing(d);
779 setring R;
780 ideal I; poly p;
781 p = 1;
782 for (i = 1; i<= n; i++) {p = lpMult(p,var(i));}
783 I = p-1;
784 for (i = n; i > 0; i--)
785 {
786  p = 1;
787  for (j = 1; j <= P[i]; j++){p = lpMult(p,var(i));}
788  I = p - 1,I;
789 }
790 
791 I = simplify(I,2);
792 export(I);
793 if (baseringdef == 1) {setring save;}
794 return(R);
795}
796
797////////////////////////////////////////////////////////////////////
798// Fibonacci Group /////////////////////////////////////////////////
799// from Grischa Studzinski /////////////////////////////////////////
800////////////////////////////////////////////////////////////////////
801
802proc fibonacciGroup(int m, int d)
803"USAGE: fibonacciGroup(m,d); m an integer, d an integer
804RETURN: ring
805NOTE: - the ring contains the ideal I, which contains the required relations
806@*    - The Fibonacci group F(2, m) with the following presentation
807@*      < x_1, x_2, ... , x_m | x_i * x_(i + 1) = x_(i + 2) >
808@*    - d gives the degreebound for the Letterplace ring
809"
810// TODO: basefield Q oder F2?
811// TODO: inverse Elemente!
812{
813 if (m < 3) {ERROR("At least three generators are required!");}
814 if (d < 2) {ERROR("Degree bound must be at least 2!");}
815 int baseringdef,i;
816 if (defined(basering)) // if a basering is defined, it should be saved for later use
817 {
818  def save = basering;
819  baseringdef = 1;
820 }
821 ring r = 2,(x(1..m),Y(1..m)),dp;
822 def R = makeLetterplaceRing(d);
823 setring R;
824 ideal I; poly p;
825 for (i = 1; i < m-1; i++)
826 {
827  p = lpMult(var(i),var(i+1))-var(i+2);
828  I = I,p;
829 }
830 for (i = 1; i <= m; i++)
831 {
832  p = lpMult(var(i),var(i+m))-1;
833  I = I,p;
834  p = lpMult(var(i+m),var(i))-1;
835  I = I,p;
836 }
837 I = simplify(I,2);
838 export(I);
839 if (baseringdef == 1) {setring save;}
840 return(R);
841}
842
843
844////////////////////////////////////////////////////////////////////
845// Tetrahedon Groups ///////////////////////////////////////////////
846// from Grischa Studzinski /////////////////////////////////////////
847////////////////////////////////////////////////////////////////////
848
849proc tetrahedronGroup(int g, int d)
850"USAGE: tetrahedronGroup(g,d); g an integer, d an integer
851RETURN: ring
852NOTE: - the ring contains the ideal I, which contains the required relations
853@*    - g gives the number of the example
854@*    - d gives the degreebound for the Letterplace ring
855@*
856The examples are found in
857Classification of the finite generalized tetrahedron groups
858by Gerhard Rosenberger and Martin Scheer.
859The 5 examples are denoted in Proposition 1.9 and concern
860finite generalized tetrahedron group in the Tsarnarov-case, which are
861not equivalent to a presentation for an ordinary tetrahedron group.
862@*
863"
864{
865 if (g < 1 || g > 5) {ERROR("There are only 5 examples!");}
866 if ((g == 1 && d < 6)||(g == 2 && d < 6)||(g == 3 && d < 5)||(g == 4 && d < 4)||(g == 5 && d < 5))
867 {ERROR("Degreebound is to small for choosen example!");}
868 
869 int baseringdef,i,j;
870 if (defined(basering)) // if a basering is defined, it should be saved for later use
871 {
872  def save = basering;
873  baseringdef = 1;
874 }
875 ring r = 2,(x,y,z),dp;
876 def R = makeLetterplaceRing(d);
877 setring R;
878 ideal I;
879 if (g == 1)
880 {I = x(1)*x(2)*x(3)*x(4)*x(5)-1, y(1)*y(2)-1, z(1)*z(2)*z(3)-1, x(1)*y(2)*x(3)*y(4)*x(5)*y(6)-1, x(1)*x(2)*z(3)*x(4)*x(5)*z(6)-1,
881      y(1)*z(2)*y(3)*z(4)-1;
882 }
883 if (g == 2)
884 {I = x(1)*x(2)*x(3)-1, y(1)*y(2)*y(3)-1, z(1)*z(2)*z(3)*z(4)*z(5)-1,x(1)*y(2)*x(3)*y(4)-1,x(1)*z(2)*x(3)*z(4)-1,
885      y(1)*z(2)*z(3)*y(4)*z(5)*z(6)-1;
886 }
887 if (g == 3)
888 {I =  x(1)*x(2)*x(3)-1, y(1)*y(2)*y(3)-1, z(1)*z(2)*z(3)-1, x(1)*y(2)*x(3)*y(4)-1, x(1)*z(2)*x(3)*z(4)-1, y(1)*z(2)*y(3)*z(4)-1;
889 }
890 if (g == 4)
891 {I =  x(1)*x(2)*x(3)-1, y(1)*y(2)*y(3)-1, z(1)*z(2)*z(3)*z(4)-1,x(1)*y(2)*x(3)*y(4)-1, x(1)*z(2)*x(3)*z(4)-1, y(1)*z(2)*y(3)*z(4)-1;
892 }
893 if (g ==5)
894 {I =  x(1)*x(2)*x(3)-1, y(1)*y(2)*y(3)-1, z(1)*z(2)*z(3)*z(4)*z(5)-1,x(1)*y(2)*x(3)*y(4)-1, x(1)*z(2)*x(3)*z(4)-1, y(1)*z(2)*y(3)*z(4)-1;
895 }
896 
897 I = simplify(I,2);
898 export(I);
899 if (baseringdef == 1) {setring save;}
900 return(R);
901}
902
903
904////////////////////////////////////////////////////////////////////
905// Triangular Groups ///////////////////////////////////////////////
906// from Grischa Studzinski /////////////////////////////////////////
907////////////////////////////////////////////////////////////////////
908
909proc triangularGroup(int g, int d)
910"USAGE: triangularGroup(g,d); g an integer, d an integer
911RETURN: ring
912NOTE: - the ring contains the ideal I, which contains the required relations
913@*    - g gives the number of the example
914@*    - d gives the degreebound for the Letterplace ring
915@*
916The examples are found in
917Classification of the finite generalized tetrahedron groups
918by Gerhard Rosenberger and Martin Scheer.
919The 14 examples are denoted in theorem 2.12
920@*
921"
922{
923 if (g < 1 || g > 14) {ERROR("There are only 14 examples!");}
924 if ((g == 1 && d < 20)||(g == 2 && d < 21)||(g == 3 && d < 10)||(g == 4 && d < 12)||(g == 5 && d < 10)||(g == 6 && d < 18)||(g == 7 && d < 20)||(g == 8 && d < 16)||(g == 9 && d < 10)||(g == 10 && d < 14)||(g == 11 && d < 16)||(g == 12 && d < 24)||(g == 13 && d < 28)||(g == 14 && d < 37))
925 {ERROR("Degreebound is to small for choosen example!");}
926 
927 int baseringdef;
928 if (defined(basering)) // if a basering is defined, it should be saved for later use
929 {
930  def save = basering;
931  baseringdef = 1;
932 }
933 ring r = 2,(a,b),dp;
934 def R = makeLetterplaceRing(d);
935 setring R;
936 ideal I;
937 
938 if (g == 1)
939 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)-1,
940  a(1)*b(2)*a(3)*b(4)*a(5)*b(6)*b(7)*a(8)*b(9)*b(10)*a(11)*b(12)*a(13)*b(14)*a(15)*b(16)*b(17)*a(18)*b(19)*b(20)-1;
941 }
942 if (g == 2)
943 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)-1,
944  a(1)*b(2)*a(3)*b(4)*a(5)*b(6)*b(7)*a(8)*b(9)*a(10)*b(11)*a(12)*b(13)*b(14)*a(15)*b(16)*a(17)*b(18)*a(19)*b(20)*b(21)-1;
945 }
946 if (g == 3)
947 {I = a(1)*a(2)*a(3)-1, b(1)*b(2)*b(3)-1,
948  a(1)*b(2)*a(3)*b(4)*b(5)*a(6)*b(7)*a(8)*b(9)*b(10)-1;
949 }
950 if (g == 4)
951 {I = a(1)*a(2)*a(3)-1, b(1)*b(2)*b(3)-1,
952  a(1)*b(2)*a(3)*a(4)*b(5)*b(6)*a(7)*b(8)*a(9)*a(10)*b(11)*b(12)-1;
953 }
954 if (g == 5)
955 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)*b(4)*b(5)-1,
956   a(1)*b(2)*a(3)*b(4)*b(5)*a(6)*b(7)*a(8)*b(9)*b(10)-1;
957 }
958 if (g == 6)
959 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)*b(4)*b(5)-1,
960   a(1)*b(2)*a(3)*b(4)*a(5)*b(6)*b(7)*b(8)*b(9)*a(10)*b(11)*a(12)*b(13)*a(14)*b(15)*b(16)*b(17)*b(18)-1;
961 }
962 if (g == 7)
963 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)*b(4)*b(5)-1,
964   a(1)*b(2)*a(3)*b(4)*b(5)*a(6)*b(7)*b(8)*b(9)*b(10)*a(11)*b(12)*a(13)*b(14)*b(15)*a(16)*b(17)*b(18)*b(19)*b(20)-1;
965 }
966 if (g == 8)
967 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)*b(4)-1,
968   a(1)*b(2)*a(3)*b(4)*a(5)*b(6)*b(7)*b(8)*a(9)*b(10)*a(11)*b(12)*a(13)*b(14)*b(15)*b(16)-1;
969 }
970 if (g == 9)
971 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)-1,
972   a(1)*b(2)*a(3)*b(4)*b(5)*a(6)*b(7)*a(8)*b(9)*b(10)-1;
973 }
974 if (g == 10)
975 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)-1,
976  a(1)*b(2)*a(3)*b(4)*a(5)*b(6)*b(7)*a(8)*b(9)*a(10)*b(11)*a(12)*b(13)*b(14)-1;
977 }
978 if (g == 11)
979 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)-1,
980  a(1)*b(2)*a(3)*b(4)*a(5)*b(6)*a(7)*b(8)*b(9)*a(10)*b(11)*a(12)*b(13)*a(14)*b(15)*b(16)-1;
981 }
982 if (g == 12)
983 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)-1,
984  a(1)*b(2)*a(3)*b(4)*a(5)*b(6)*b(7)*a(8)*b(9)*a(10)*b(11)*b(12)*a(13)*b(14)*a(15)*b(16)*a(17)*b(18)*b(19)*a(20)*b(21)*a(22)*b(23)*b(24)-1;
985 }
986 if (g == 13)
987 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)-1,
988a(1)*b(2)*a(3)*b(4)*a(5)*b(6)*a(7)*b(8)*a(9)*b(10)*b(11)*a(12)*b(13)*b(14)*a(15)*b(16)*a(17)*b(18)*a(19)*b(20)*a(21)*b(22)*a(23)*b(24)*b(25)*a(26)*b(27)*b(28)-1;
989 }
990 if (g == 14)
991 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)-1,
992a(1)*b(2)*a(3)*b(4)*a(5)*b(6)*a(7)*b(8)*b(9)*a(10)*b(11)*b(12)*a(13)*b(14)*a(15)*b(16)*b(17)*a(18)*b(19)*b(20)*a(21)*b(22)*a(23)*b(24)*a(25)*b(26)*a(27)*b(28)*b(29)*a(30)*b(31)*a(32)*b(33)*b(34)*a(35)*b(36)*b(37)-1;
993 }
994
995 I = simplify(I,2);
996 export(I);
997 if (baseringdef == 1) {setring save;}
998 return(R);
999}
Note: See TracBrowser for help on using the repository browser.