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

spielwiese
Last change on this file since c6793a was c6793a, checked in by Hans Schoenemann <hannes@…>, 6 years ago
doc: fpalgebras.lib, freegb.lib
  • Property mode set to 100644
File size: 38.7 KB
Line 
1////////////////////////////////////////////////////////////////
2version="version fpalgebras.lib 4.1.1.0 Mar_2018 "; // $Id$
3category="Noncommutative";
4info="
5LIBRARY: fpalgebras.lib Generation of various algebras in the letterplace case
6AUTHORS: Karim Abou Zeid,       karim.abou.zeid at rwth-aachen.de
7@*       Grischa Studzinski,    grischa.studzinski at rwth-aachen.de
8
9Support: Project II.6 in the transregional collaborative research centre
10SFB-TRR 195 'Symbolic Tools in Mathematics and their Application' of the German DFG
11
12OVERVIEW:
13Generation of various algebras, including group algebras of finitely presented groups in the Letterplace ring
14
15PROCEDURES:
16operatorAlgebra(string a, int d);
17baumslagSolitar(int n, int m, int d, list #);
18baumslag(int m, int n, int d);
19crystallographicGroupP1(int d);
20crystallographicGroupPM(int d);
21crystallographicGroupPG(int d);
22crystallographicGroupP2MM(int d);
23crystallographicGroupP2(int d);
24crystallographicGroupP2GG(int d);
25crystallographicGroupCM(int d);
26crystallographicGroupC2MM(int d);
27crystallographicGroupP4(int d);
28crystallographicGroupP4MM(int d);
29crystallographicGroupP4GM(int d);
30crystallographicGroupP3(int d);
31crystallographicGroupP31M(int d);
32crystallographicGroupP3M1(int d);
33crystallographicGroupP6(int d);
34crystallographicGroupP6MM(int d);
35dyckGroup1(int n, int d, intvec P);
36dyckGroup2(int n, int d, intvec P);
37dyckGroup3(int n, int d, intvec P);
38fibonacciGroup(int m, int d);
39tetrahedronGroup(int g, int d);
40triangularGroup(int g, int d);
41";
42
43LIB "freegb.lib";
44LIB "general.lib";
45////////////////////////////////////////////////////////////////////
46
47////////////////////////////////////////////////////////////////////
48// Operator Algebras ///////////////////////////////////////////////
49////////////////////////////////////////////////////////////////////
50
51proc operatorAlgebra(string a, int d)
52"USAGE: operatorAlgebra(a,d); a a string, d an integer
53RETURN: ring
54NOTE: - the ring contains the ideal I, which contains the required relations
55@*    - a gives the name of the algebra
56@*    - d gives the degreebound for the Letterplace ring
57@*
58@*    a must be one of the following:
59@*      integrodiff3
60@*      toeplitz
61@*      weyl1
62@*      usl2
63@*      usl2h
64@*      shift1inverse
65@*      exterior2
66@*      quadrowmm
67@*      shift1
68@*      weyl1inverse
69@*
70@*    This is a collection of common algebras
71@*
72"
73{
74  if (d < 2) {
75    ERROR("Degbound d is too small. Must be at least 2.");
76  }
77  int baseringdef;
78  if (defined(basering)) // if a basering is defined, it should be saved for later use
79  {
80    def save = basering;
81    baseringdef = 1;
82  }
83
84  if (a == "integrodiff3") {
85    ring r = 0,(d,I,x),dp;
86    def R = makeLetterplaceRing(d);
87    setring(R);
88    ideal I = d(1)*x(2)-x(1)*d(2)-1,
89          I(1)*x(2)-x(1)*I(2)+I(1)*I(2),
90          d(1)*I(2)-1;
91  }
92  if (a == "toeplitz") {
93    ring r = 0,(y,x),dp;
94    def R = makeLetterplaceRing(d);
95    setring(R);
96    ideal I = y(1)*x(2)-1;
97  }
98  if (a == "weyl1") {
99    ring r = 0,(d,x),dp;
100    def R = makeLetterplaceRing(d);
101    setring(R);
102    ideal I = d(1)*x(2)-x(1)*d(2)-1;
103  }
104  if (a == "usl2") {
105    ring r = 0,(h,f,e),dp;
106    def R = makeLetterplaceRing(d);
107    setring(R);
108    ideal I = f(1)*e(2)-e(1)*f(2)+h(1),
109          h(1)*e(2)-e(1)*h(2)-2*e(1),
110          h(1)*f(2)-f(1)*h(2)+2*f(1);
111  }
112  if (a == "usl2h") {
113    ring r = 0,(H,h,f,e),dp;
114    def R = makeLetterplaceRing(d);
115    setring(R);
116    ideal I = f(1)*e(2)-e(1)*f(2)+h(1)*H(2),
117          h(1)*e(2)-e(1)*h(2)-2*e(1)*H(2),
118          h(1)*f(2)-f(1)*h(2)+2*f(1)*H(2),
119          f(1)*H(2)-H(1)*f(2),
120          e(1)*H(2)-H(1)*e(2),
121          h(1)*H(2)-H(1)*h(2);
122  }
123  if (a == "shift1inverse") {
124    ring r = 0,(d,x,t),dp;
125    def R = makeLetterplaceRing(d);
126    setring(R);
127    ideal I = d(1)*x(2)-x(1)*d(2)-d(1),
128          t(1)*x(2)-1,
129          x(1)*t(2)-1;
130  }
131  if (a == "exterior2") {
132    ring r = 0,(y,x),dp;
133    def R = makeLetterplaceRing(d);
134    setring(R);
135    ideal I = y(1)*x(2)+x(1)*y(2),
136          x(1)*x(2),
137          y(1)*y(2);
138  }
139  if (a == "quadrowmm") {
140    ring r = 0,(y,x),dp;
141    def R = makeLetterplaceRing(d);
142    setring(R);
143    ideal I = y(1)*x(2)-x(1)*y(2),
144          x(1)*x(2),
145          y(1)*y(2);
146  }
147  if (a == "shift1") {
148    ring r = 0,(s,x),dp;
149    def R = makeLetterplaceRing(d);
150    setring(R);
151    ideal I = s(1)*x(2)-x(1)*s(2)-s(1);
152  }
153  if (a == "weyl1inverse") {
154    ring r = 0,(d,x,t),dp;
155    def R = makeLetterplaceRing(d);
156    setring(R);
157    ideal I = d(1)*x(2)-x(1)*d(2)-1,
158          t(1)*x(2)-1,
159          x(1)*t(2)-1;
160  }
161
162  if (!defined(I)) {
163    ERROR("Illegal argument for algebra");
164  }
165
166  export(I);
167  if (baseringdef == 1) {setring save;}
168  return(R);
169}
170
171////////////////////////////////////////////////////////////////////
172// Baumslag ////////////////////////////////////////////////////////
173// from Grischa Studzinski /////////////////////////////////////////
174////////////////////////////////////////////////////////////////////
175
176proc baumslagSolitar(int n, int m, int d, list #)
177"USAGE: baumslagSolitar(m,n,d[,IsGroup]); n an integer, m an integer, d an integer, IsGroup an optional integer
178RETURN: ring
179NOTE: - the ring contains the ideal I, which contains the required relations
180@*    - in the group case: A = a^(-1), B = b^(-1)
181@*    - negativ input is only allowed in the group case!
182@*    - d gives a degreebound and must be >m,n
183@*
184@*    This is a family
185@*
186"
187{
188  int isGroup = 0;
189  if (size(#) > 0) {isGroup = #[1];}
190
191  if (isGroup != 0)
192  {
193   int baseringdef;
194   if (defined(basering)) // if a basering is defined, it should be saved for later use
195   {
196    def save = basering;
197    baseringdef = 1;
198   }
199   if (m < 0 || n < 0) {ERROR("Exponent can't be negativ in monoid rings!");}
200   if (d < 1 || d < m || d < n) {ERROR("Degree bound must be positiv and greater then m,n!");}
201   int i;
202   ring mr = 0,(a,b),Dp;
203   def Mr = makeLetterplaceRing(d);
204   setring Mr;
205   poly p,q;
206   if (n==0) {p = b(1);}
207   else
208   {
209    p = a(1)*b(2);
210    for (i = 1; i < n; i++) {p = lpMult(a(1),p);}
211   }
212   if (m==0) {q = b(1);}
213   else
214   {
215    q = b(1)*a(2);
216    for (i = 1; i < m; i++) {q = lpMult(q,a(1));}
217   }
218   ideal I = p - q;
219   export(I);
220   if (baseringdef == 1) {setring save;}
221   return(Mr);
222  }
223  else
224  {
225   int baseringdef;
226   if (defined(basering)) // if a basering is defined, it should be saved for later use
227   {
228    def save = basering;
229    baseringdef = 1;
230   }
231   int i;
232   if (d < 1 || d < absValue(m) || d < absValue(n)) {ERROR("Degree bound must be positiv and greater then |m|,|n|!");}
233   ring gr = 0,(a,b,A,B),Dp;
234   def Gr = makeLetterplaceRing(d);
235   setring Gr;
236   poly p,q;
237   if (n==0) {p = b(1);}
238   else
239   {if (n > 0)
240    {
241     p = a(1)*b(2);
242     for (i = 1; i < n; i++) {p = lpMult(a(1),p);}
243    }
244    else
245    {
246     p = A(1)*b(2);
247     for (i = 1; i < -n; i++) {p = lpMult(A(1),p);}
248    }
249   }
250   if (m==0) {q = b(1);}
251   else
252   {if (m > 0)
253    {
254     q = b(1)*a(2);
255     for (i = 1; i < m; i++) {q = lpMult(q,a(1));}
256    }
257    else
258    {
259     q = A(1)*b(2);
260     for (i = 1; i < -m; i++) {q = lpMult(q,A(1));}
261    }
262   }
263   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);
264   export(I);
265   if (baseringdef == 1) {setring save;}
266   return(Gr);
267  }
268}
269example {
270  "EXAMPLE:"; echo = 2;
271  def R = baumslagSolitar(2,3,4); setring R;
272  I;
273}
274
275proc baumslagGroup(int m, int n, int d)
276"USAGE: baumslagGroup(m,n,d); m an integer, n an integer, d an integer
277RETURN: ring
278NOTE: - the ring contains the ideal I, which contains the required relations
279@*    - Baumslag group with the following presentation
280@*      < a, b | a^m = b^n = 1 >
281@*    -d gives the degreebound for the Letterplace ring
282@*
283@*    This is a family
284@*
285"
286{
287 if (m < 0 || n < 0 ) {ERROR("m,n must be non-negativ integers!");}
288 if (d < 1 || d < m || d < n) {ERROR("degreebound must be positiv and larger than n and m!");}
289 int i;
290 ring r = 0,(a,b),dp;
291 def R = makeLetterplaceRing(d);
292 setring R;
293 poly p,q;
294 p = 1; q = 1;
295 for (i = 1; i <= m; i++){p = lpMult(p,a(1));}
296 for (i = 1; i <= n; i++){q = lpMult(q,b(1));}
297 ideal I = p-1,q-1;
298 export(I);
299 return(R);
300}
301example {
302  "EXAMPLE:"; echo = 2;
303  def R = baumslag(2,3,4); setring R;
304  I;
305}
306
307////////////////////////////////////////////////////////////////////
308// Crystallographic Groups //////////////////////////////////////////
309// from Grischa Studzinski /////////////////////////////////////////
310////////////////////////////////////////////////////////////////////
311
312proc crystallographicGroupP1(int d)
313"USAGE: crystallographicGroupP1(d); d an integer
314RETURN: ring
315NOTE: - the ring contains the ideal I, which contains the required relations
316@*    - p1 group with the following presentation
317@*      < x, y | [x, y] = 1 >
318@*    -d gives the degreebound for the Letterplace ring
319"
320{
321 if (d < 2){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,X,Y),dp;
330 def R = makeLetterplaceRing(d);
331 setring R;
332 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;
333 I = simplify(I,2);
334 export(I);
335 if (baseringdef == 1) {setring save;}
336 return(R);
337}
338example {
339  "EXAMPLE:"; echo = 2;
340  def R = crystallographicGroupP1(5); setring R;
341  I;
342}
343
344// old? there is already another crystallographicGroupP2 proc
345/* proc crystallographicGroupP2(int d) */
346/* " */
347/* p2 group with the following presentation */
348/* < x, y, r | [x, y] = r^2 = 1, r^-1*x*r = x^-1, r^-1*y*r = y^-1 > */
349/* Note: r = r^-1 */
350/* " */
351/* { */
352/*  if (d < 3){ERROR("Degreebound is to small for choosen example!");} */
353 
354/*  int baseringdef; */
355/*  if (defined(basering)) // if a basering is defined, it should be saved for later use */
356/*  { */
357/*   def save = basering; */
358/*   baseringdef = 1; */
359/*  } */
360/*  ring r = 2,(x,y,r,X,Y),dp; */
361/*  def R = makeLetterplaceRing(d); */
362/*  setring R; */
363/*  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, */ 
364/* X(1)*x(2)-1, Y(1)*y(2)-1,  y(1)*Y(2)-1; */
365/*  I = simplify(I,2); */
366/*  export(I); */
367/*  if (baseringdef == 1) {setring save;} */
368/*  return(R); */
369/* } */
370
371proc crystallographicGroupPM(int d)
372"USAGE: crystallographicGroupPM(d); d an integer
373RETURN: ring
374NOTE: - the ring contains the ideal I, which contains the required relations
375@*    - pm group with the following presentation
376@*      < x, y, m | [x, y] = m^2 = 1, m^-1*x*m = x, m^-1*y*m = y^-1 >
377@*    - d gives the degreebound for the Letterplace ring
378"
379{
380 if (d < 3){ERROR("Degreebound is to small for choosen example!");}
381 
382 int baseringdef;
383 if (defined(basering)) // if a basering is defined, it should be saved for later use
384 {
385  def save = basering;
386  baseringdef = 1;
387 }
388 ring r = 2,(x,y,m,X,Y),dp;
389 def R = makeLetterplaceRing(d);
390 setring R;
391 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, 
392X(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}
398example {
399  "EXAMPLE:"; echo = 2;
400  def R = crystallographicGroupPM(5); setring R;
401  I;
402}
403
404proc crystallographicGroupPG(int d)
405"USAGE: crystallographicGroupPG(d); d an integer
406RETURN: ring
407NOTE: - the ring contains the ideal I, which contains the required relations
408@*    - pg group with the following presentation
409@*      < x, y, t | [x, y] = 1, t^2 = x, t^-1*y*t = y^-1 >
410@*    - d gives the degreebound for the Letterplace ring
411"
412{
413 if (d < 3){ERROR("Degreebound is to small for choosen example!");}
414 
415 int baseringdef;
416 if (defined(basering)) // if a basering is defined, it should be saved for later use
417 {
418  def save = basering;
419  baseringdef = 1;
420 }
421 ring r = 2,(x,y,t,X,Y,T),dp;
422 def R = makeLetterplaceRing(d);
423 setring R;
424 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, 
425Y(1)*y(2)-1,  y(1)*Y(2)-1, t(1)*T(2)-1, T(1)*t(2)-1;
426 I = simplify(I,2);
427 export(I);
428 if (baseringdef == 1) {setring save;}
429 return(R);
430}
431example {
432  "EXAMPLE:"; echo = 2;
433  def R = crystallographicGroupPG(5); setring R;
434  I;
435}
436
437
438proc crystallographicGroupP2MM(int d)
439"USAGE: crystallographicGroupP2MM(d); d an integer
440RETURN: ring
441NOTE: - the ring contains the ideal I, which contains the required relations
442@*    - p2mm group with the following presentation
443@*      < 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 >
444@*    - d gives the degreebound for the Letterplace ring
445"
446{
447 if (d < 3){ERROR("Degreebound is to small for choosen example!");}
448 
449 int baseringdef;
450 if (defined(basering)) // if a basering is defined, it should be saved for later use
451 {
452  def save = basering;
453  baseringdef = 1;
454 }
455 ring r = 2,(x,y,p,q,X,Y),dp;
456 def R = makeLetterplaceRing(d);
457 setring R;
458 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),
459 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),
460 x(1)*y(2)-y(1)*x(2)- q(1)*q(2), p(1)*p(2)-q(1)*q(2);
461 I = simplify(I,2);
462 export(I);
463 if (baseringdef == 1) {setring save;}
464 return(R);
465}
466example {
467  "EXAMPLE:"; echo = 2;
468  def R = crystallographicGroupP2MM(5); setring R;
469  I;
470}
471
472proc crystallographicGroupP2(int d)
473"USAGE: crystallographicGroupP2(d); d an integer
474RETURN: ring
475NOTE: - the ring contains the ideal I, which contains the required relations
476@*    - p2 group with the following presentation
477@*      < 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 >
478@*    - d gives the degreebound for the Letterplace ring
479"
480{
481 if (d < 3){ERROR("Degreebound is to small for choosen example!");}
482 
483 int baseringdef;
484 if (defined(basering)) // if a basering is defined, it should be saved for later use
485 {
486  def save = basering;
487  baseringdef = 1;
488 }
489 ring r = 2,(x,y,m,t,X,Y,M),dp;
490 def R = makeLetterplaceRing(d);
491 setring R;
492 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),
493M(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,
494m(1)*M(2)-1, M(1)*m(2)-1;
495 I = simplify(I,2);
496 export(I);
497 if (baseringdef == 1) {setring save;}
498 return(R);
499}
500example {
501  "EXAMPLE:"; echo = 2;
502  def R = crystallographicGroupP2(5); setring R;
503  I;
504}
505
506proc crystallographicGroupP2GG(int d)
507"USAGE: crystallographicGroupP2GG(d); d an integer
508RETURN: ring
509NOTE: - the ring contains the ideal I, which contains the required relations
510@*    - p2gg group with the following presentation
511@*      < 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 >
512@*    - d gives the degreebound for the Letterplace ring
513"
514{
515 if (d < 4){ERROR("Degreebound is to small for choosen example!");}
516 
517 int baseringdef;
518 if (defined(basering)) // if a basering is defined, it should be saved for later use
519 {
520  def save = basering;
521  baseringdef = 1;
522 }
523 ring r = 2,(x,y,u,v,X,Y,u,v),dp;
524 def R = makeLetterplaceRing(d);
525 setring R;
526 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,
527V(1)*x(2)*v(3)-X(1), U(1)*y(2)*u(3)-Y(1),
528X(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;
529 I = simplify(I,2);
530 export(I);
531 if (baseringdef == 1) {setring save;}
532 return(R);
533}
534example {
535  "EXAMPLE:"; echo = 2;
536  def R = crystallographicGroupP2GG(5); setring R;
537  I;
538}
539
540proc crystallographicGroupCM(int d)
541"USAGE: crystallographicGroupCM(d); d an integer
542RETURN: ring
543NOTE: - the ring contains the ideal I, which contains the required relations
544@*    - cm group with the following presentation
545@*      < x, y, t | [x, y] = t^2 = 1, t^-1*x*t = x*y, t^-1*y*t = y^-1 >   
546@*    - d gives the degreebound for the Letterplace ring
547"
548{
549 if (d < 3){ERROR("Degreebound is to small for choosen example!");}
550 
551 int baseringdef;
552 if (defined(basering)) // if a basering is defined, it should be saved for later use
553 {
554  def save = basering;
555  baseringdef = 1;
556 }
557 ring r = 2,(x,y,t,X,Y),dp;
558 def R = makeLetterplaceRing(d);
559 setring R;
560 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, 
561t(1)*x(2)*t(3)-x(1)*y(2), t(1)*y(2)*t(3)-Y(1),
562X(1)*x(2)-1, x(1)*X(2)-1,  Y(1)*y(2)-1,  y(1)*Y(2)-1;
563 I = simplify(I,2);
564 export(I);
565 if (baseringdef == 1) {setring save;}
566 return(R);
567}
568example {
569  "EXAMPLE:"; echo = 2;
570  def R = crystallographicGroupCM(5); setring R;
571  I;
572}
573
574proc crystallographicGroupC2MM(int d)
575"USAGE: crystallographicGroupC2MM(d); d an integer
576RETURN: ring
577NOTE: - the ring contains the ideal I, which contains the required relations
578@*    - c2mm group with the following presentation
579@*      < 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 >
580@*    - d gives the degreebound for the Letterplace ring
581"
582{
583 if (d < 3){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,m,r,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)-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,
595 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),
596X(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}
602example {
603  "EXAMPLE:"; echo = 2;
604  def R = crystallographicGroupC2MM(5); setring R;
605  I;
606}
607
608proc crystallographicGroupP4(int d)
609"USAGE: crystallographicGroupP4(d); d an integer
610RETURN: ring
611NOTE: - the ring contains the ideal I, which contains the required relations
612@*    - p4 group with the following presentation
613@*      < x, y, r | [x, y] = r^4 = 1, r^-1*x*r = x^-1, r^-1*x*r = y >   
614@*    - d gives the degreebound for the Letterplace ring
615"
616{
617 if (d < 5){ERROR("Degreebound is to small for choosen example!");}
618 
619 int baseringdef;
620 if (defined(basering)) // if a basering is defined, it should be saved for later use
621 {
622  def save = basering;
623  baseringdef = 1;
624 }
625 ring r = 2,(x,y,r,X,Y),dp;
626 def R = makeLetterplaceRing(d);
627 setring R;
628 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,
629 r(1)*r(2)*r(3)*x(4)*r(5)-X(1), r(1)*r(2)*r(3)*x(4)*r(5)-y(1),
630X(1)*x(2)-1, x(1)*X(2)-1,  Y(1)*y(2)-1,  y(1)*Y(2)-1;
631 I = simplify(I,2);
632 export(I);
633 if (baseringdef == 1) {setring save;}
634 return(R);
635}
636example {
637  "EXAMPLE:"; echo = 2;
638  def R = crystallographicGroupP4(5); setring R;
639  I;
640}
641
642proc crystallographicGroupP4MM(int d)
643"USAGE: crystallographicGroupP4MM(d); d an integer
644RETURN: ring
645NOTE: - the ring contains the ideal I, which contains the required relations
646@*    - p4mm group with the following presentation
647@*      < 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 >
648@*    - d gives the degreebound for the Letterplace ring
649"
650{
651 if (d < 5){ERROR("Degreebound is to small for choosen example!");}
652 
653 int baseringdef;
654 if (defined(basering)) // if a basering is defined, it should be saved for later use
655 {
656  def save = basering;
657  baseringdef = 1;
658 }
659 ring r = 2,(x,y,r,m,X,Y),dp;
660 def R = makeLetterplaceRing(d);
661 setring R;
662 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,
663 r(1)*r(2)*r(3)*x(4)*r(5)-X(1), r(1)*r(2)*r(3)*x(4)*r(5)-y(1),
664X(1)*x(2)-1, x(1)*X(2)-1,  Y(1)*y(2)-1,  y(1)*Y(2)-1;
665 I = simplify(I,2);
666 export(I);
667 if (baseringdef == 1) {setring save;}
668 return(R);
669}
670example {
671  "EXAMPLE:"; echo = 2;
672  def R = crystallographicGroupP4MM(5); setring R;
673  I;
674}
675
676proc crystallographicGroupP4GM(int d)
677"USAGE: crystallographicGroupP4GM(d); d an integer
678RETURN: ring
679NOTE: - the ring contains the ideal I, which contains the required relations
680@*    - p4gm group with the following presentation
681@*      < 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>
682@*    - d gives the degreebound for the Letterplace ring
683"
684{
685 if (d < 5){ERROR("Degreebound is to small for choosen example!");}
686 
687 int baseringdef;
688 if (defined(basering)) // if a basering is defined, it should be saved for later use
689 {
690  def save = basering;
691  baseringdef = 1;
692 }
693 ring r = 2,(x,y,r,t,X,Y),dp;
694 def R = makeLetterplaceRing(d);
695 setring R;
696 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),
697 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),
698 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;
699 I = simplify(I,2);
700 export(I);
701 if (baseringdef == 1) {setring save;}
702 return(R);
703}
704example {
705  "EXAMPLE:"; echo = 2;
706  def R = crystallographicGroupP4GM(5); setring R;
707  I;
708}
709
710proc crystallographicGroupP3(int d)
711"USAGE: crystallographicGroupP3(d); d an integer
712RETURN: ring
713NOTE: - the ring contains the ideal I, which contains the required relations
714@*    - p3 group with the following presentation
715@*      < x, y, r | [x, y] = r^3 = 1, r^-1*x*r = x^-1*y, r^-1*y*r = x^-1>
716@*    - d gives the degreebound for the Letterplace ring
717"
718{
719 if (d < 4){ERROR("Degreebound is to small for choosen example!");}
720 
721 int baseringdef;
722 if (defined(basering)) // if a basering is defined, it should be saved for later use
723 {
724  def save = basering;
725  baseringdef = 1;
726 }
727 ring r = 2,(x,y,r,X,Y),dp;
728 def R = makeLetterplaceRing(d);
729 setring R;
730 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,
731  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;
732 I = simplify(I,2);
733 export(I);
734 if (baseringdef == 1) {setring save;}
735 return(R);
736}
737example {
738  "EXAMPLE:"; echo = 2;
739  def R = crystallographicGroupP3(5); setring R;
740  I;
741}
742
743proc crystallographicGroupP31M(int d)
744"USAGE: crystallographicGroupP31M(d); d an integer
745RETURN: ring
746NOTE: - the ring contains the ideal I, which contains the required relations
747@*    - p31m group with the following presentation
748@*      < 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 >
749@*    - d gives the degreebound for the Letterplace ring
750"
751{
752 if (d < 6){ERROR("Degreebound is to small for choosen example!");}
753 
754 int baseringdef;
755 if (defined(basering)) // if a basering is defined, it should be saved for later use
756 {
757  def save = basering;
758  baseringdef = 1;
759 }
760 ring r = 2,(x,y,r,t,X,Y),dp;
761 def R = makeLetterplaceRing(d);
762 setring R;
763 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,
764 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),
765 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),
766 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),
767 X(1)*x(2)-1, x(1)*X(2)-1, Y(1)*y(2)-1,  y(1)*Y(2)-1;
768 I = simplify(I,2);
769 export(I);
770 if (baseringdef == 1) {setring save;}
771 return(R);
772}
773example {
774  "EXAMPLE:"; echo = 2;
775  def R = crystallographicGroupP31M(5); setring R;
776  I;
777}
778
779proc crystallographicGroupP3M1(int d)
780"USAGE: crystallographicGroupP3M1(d); d an integer
781RETURN: ring
782NOTE: - the ring contains the ideal I, which contains the required relations
783@*    - p3m1 group with the following presentation
784@*      < 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 >
785@*    - d gives the degreebound for the Letterplace ring
786"
787{
788 if (d < 4){ERROR("Degreebound is to small for choosen example!");}
789 
790 int baseringdef;
791 if (defined(basering)) // if a basering is defined, it should be saved for later use
792 {
793  def save = basering;
794  baseringdef = 1;
795 }
796 ring r = 2,(x,y,r,m,X,Y),dp;
797 def R = makeLetterplaceRing(d);
798 setring R;
799 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,
800 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),
801 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;
802 I = simplify(I,2);
803 export(I);
804 if (baseringdef == 1) {setring save;}
805 return(R);
806}
807example {
808  "EXAMPLE:"; echo = 2;
809  def R = crystallographicGroupP3M1(5); setring R;
810  I;
811}
812
813proc crystallographicGroupP6(int d)
814"USAGE: crystallographicGroupP6(d); d an integer
815RETURN: ring
816NOTE: - the ring contains the ideal I, which contains the required relations
817@*    - p6 group with the following presentation
818@*      < x, y, r | [x, y] = r^6 = 1, r^-1*x*r = y, r^-1*y*r = x^-1*y>
819@*    - d gives the degreebound for the Letterplace ring
820"
821{
822 if (d < 7){ERROR("Degreebound is to small for choosen example!");}
823 
824 int baseringdef;
825 if (defined(basering)) // if a basering is defined, it should be saved for later use
826 {
827  def save = basering;
828  baseringdef = 1;
829 }
830 ring r = 2,(x,y,r,X,Y),dp;
831 def R = makeLetterplaceRing(d);
832 setring R;
833 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,
834 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),
835 X(1)*x(2)-1, x(1)*X(2)-1, Y(1)*y(2)-1,  y(1)*Y(2)-1;
836 I = simplify(I,2);
837 export(I);
838 if (baseringdef == 1) {setring save;}
839 return(R);
840}
841example {
842  "EXAMPLE:"; echo = 2;
843  def R = crystallographicGroupP6(5); setring R;
844  I;
845}
846
847proc crystallographicGroupP6MM(int d)
848"USAGE: crystallographicGroupP6MM(d); d an integer
849RETURN: ring
850NOTE: - the ring contains the ideal I, which contains the required relations
851@*    - p6mm group with the following presentation
852@*      < 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>
853@*    - d gives the degreebound for the Letterplace ring
854"
855{
856 if (d < 7){ERROR("Degreebound is to small for choosen example!");}
857 
858 int baseringdef;
859 if (defined(basering)) // if a basering is defined, it should be saved for later use
860 {
861  def save = basering;
862  baseringdef = 1;
863 }
864 ring r = 2,(x,y,r,m,X,Y),dp;
865 def R = makeLetterplaceRing(d);
866 setring R;
867 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,
868 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),
869 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)
870 X(1)*x(2)-1, x(1)*X(2)-1, Y(1)*y(2)-1,  y(1)*Y(2)-1;
871 I = simplify(I,2);
872 export(I);
873 if (baseringdef == 1) {setring save;}
874 return(R);
875}
876example {
877  "EXAMPLE:"; echo = 2;
878  def R = crystallographicGroupP6MM(5); setring R;
879  I;
880}
881
882////////////////////////////////////////////////////////////////////
883// Dyck Group //////////////////////////////////////////////////////
884// from Grischa Studzinski /////////////////////////////////////////
885////////////////////////////////////////////////////////////////////
886
887proc dyckGroup1(int n, int d, intvec P)
888"USAGE: dyckGroup1(n,d,P); n an integer, d an integer, P an intvec
889RETURN: ring
890NOTE: - the ring contains the ideal I, which contains the required relations
891@*    - The Dyck group with the following presentation
892@*      < x_1, x_2, ... , x_n | (x_1)^p1 = (x_2)^p2 = ... = (x_n)^pn = x_1 * x_2 * ... * x_n = 1 >
893@*    - negative exponents are allowed
894@*    - representation in the form x_i^p_i - x_(i+1)^p_(i+1)
895@*    - d gives the degreebound for the Letterplace ring
896@*
897@*    This is a family
898@*
899"
900{
901 int baseringdef,i,j;
902 if (n < 1) {ERROR("There must be at least one variable!");}
903 if (d < n) {ERROR("Degreebound is to small!");}
904 for (i = 1; i <= size(P); i++) {if (d < absValue(P[i])){ERROR("Degreebound is to small!");}}
905
906 if (defined(basering)) // if a basering is defined, it should be saved for later use
907 {
908  def save = basering;
909  baseringdef = 1;
910 }
911 ring r = 2,(x(1..n),Y(1..n)),dp;
912 def R = makeLetterplaceRing(d);
913 setring R;
914 ideal I; poly p,q;
915 p = 1; q = 1;
916 for (i = 1; i<= n; i++) {p = lpMult(p,var(i));}
917 I = p-1;
918 for (i = n; i > 0; i--)
919 {
920  if (P[i] >= 0) {for (j = 1; j <= P[i]; j++){q = lpMult(q,var(i));}}
921  else {for (j = 1; j <= -P[i]; j++){q = lpMult(q,var(i+n));}}
922  I = p - q,I;
923  p = q; q = 1;
924 }
925 
926 I = simplify(I,2);
927 export(I);
928 if (baseringdef == 1) {setring save;}
929 return(R);
930}
931example {
932  "EXAMPLE:"; echo = 2;
933  intvec P = 1,2,3;
934  def R = dyckGroup1(3,5,P); setring R;
935  I;
936}
937
938
939proc dyckGroup2(int n, int d, intvec P)
940"USAGE: dyckGroup2(n,d,P); n an integer, d an integer, P an intvec
941RETURN: ring
942NOTE: - the ring contains the ideal I, which contains the required relations
943@*    - The Dyck group with the following presentation
944@*      < x_1, x_2, ... , x_n | (x_1)^p1 = (x_2)^p2 = ... = (x_n)^pn = x_1 * x_2 * ... * x_n = 1 >
945@*    - negative exponents are allowed
946@*    - representation in the form x_i^p_i - 1
947@*    - d gives the degreebound for the Letterplace ring
948@*
949@*    This is a family
950@*
951"
952{
953 int baseringdef,i,j;
954 if (n < 1) {ERROR("There must be at least one variable!");}
955 if (d < n) {ERROR("Degreebound is to small!");}
956 for (i = 1; i <= size(P); i++) {if (d < absValue(P[i])){ERROR("Degreebound is to small!");}}
957
958 if (defined(basering)) // if a basering is defined, it should be saved for later use
959 {
960  def save = basering;
961  baseringdef = 1;
962 }
963 ring r = 2,(x(1..n),Y(1..n)),dp;
964 def R = makeLetterplaceRing(d);
965 setring R;
966 ideal I; poly p;
967 p = 1;
968 for (i = 1; i<= n; i++) {p = lpMult(p,var(i));}
969 I = p-1;
970 for (i = n; i > 0; i--)
971 {
972  p = 1;
973  if (P[i] >= 0) {for (j = 1; j <= P[i]; j++){p = lpMult(p,var(i));}}
974  else {for (j = 1; j <= -P[i]; j++){p = lpMult(p,var(i+n));}}
975  I = p - 1,I;
976 }
977 
978 I = simplify(I,2);
979 export(I);
980 if (baseringdef == 1) {setring save;}
981 return(R);
982}
983example {
984  "EXAMPLE:"; echo = 2;
985  intvec P = 1,2,3;
986  def R = dyckGroup2(3,5,P); setring R;
987  I;
988}
989
990
991
992proc dyckGroup3(int n, int d, intvec P)
993"USAGE: dyckGroup2(n,d,P); n an integer, d an integer, P an intvec
994RETURN: ring
995NOTE: - the ring contains the ideal I, which contains the required relations
996@*    - The Dyck group with the following presentation
997@*      < x_1, x_2, ... , x_n | (x_1)^p1 = (x_2)^p2 = ... = (x_n)^pn = x_1 * x_2 * ... * x_n = 1 >
998@*    - only positive exponents are allowed
999@*    - no inverse generators needed
1000@*    - d gives the degreebound for the Letterplace ring
1001@*
1002@*    This is a family
1003@*
1004"
1005{
1006 int baseringdef,i,j;
1007 if (n < 1) {ERROR("There must be at least one variable!");}
1008 if (d < n) {ERROR("Degreebound is to small!");}
1009 for (i = 1; i <= size(P); i++) {if (P[i] < 0){ERROR("Exponents must be positive!");}}
1010 for (i = 1; i <= size(P); i++) {if (d < P[i]){ERROR("Degreebound is to small!");}}
1011 
1012
1013 if (defined(basering)) // if a basering is defined, it should be saved for later use
1014 {
1015  def save = basering;
1016  baseringdef = 1;
1017 }
1018 ring r = 2,x(1..n),dp;
1019 def R = makeLetterplaceRing(d);
1020 setring R;
1021 ideal I; poly p;
1022 p = 1;
1023 for (i = 1; i<= n; i++) {p = lpMult(p,var(i));}
1024 I = p-1;
1025 for (i = n; i > 0; i--)
1026 {
1027  p = 1;
1028  for (j = 1; j <= P[i]; j++){p = lpMult(p,var(i));}
1029  I = p - 1,I;
1030 }
1031 
1032 I = simplify(I,2);
1033 export(I);
1034 if (baseringdef == 1) {setring save;}
1035 return(R);
1036}
1037example {
1038  "EXAMPLE:"; echo = 2;
1039  intvec P = 1,2,3;
1040  def R = dyckGroup3(3,5,P); setring R;
1041  I;
1042}
1043
1044////////////////////////////////////////////////////////////////////
1045// Fibonacci Group /////////////////////////////////////////////////
1046// from Grischa Studzinski /////////////////////////////////////////
1047////////////////////////////////////////////////////////////////////
1048
1049proc fibonacciGroup(int m, int d)
1050"USAGE: fibonacciGroup(m,d); m an integer, d an integer
1051RETURN: ring
1052NOTE: - the ring contains the ideal I, which contains the required relations
1053@*    - The Fibonacci group F(2, m) with the following presentation
1054@*      < x_1, x_2, ... , x_m | x_i * x_(i + 1) = x_(i + 2) >
1055@*    - d gives the degreebound for the Letterplace ring
1056@*
1057@*    This is a family
1058@*
1059"
1060// TODO: basefield Q oder F2?
1061// TODO: inverse Elemente!
1062{
1063 if (m < 3) {ERROR("At least three generators are required!");}
1064 if (d < 2) {ERROR("Degree bound must be at least 2!");}
1065 int baseringdef,i;
1066 if (defined(basering)) // if a basering is defined, it should be saved for later use
1067 {
1068  def save = basering;
1069  baseringdef = 1;
1070 }
1071 ring r = 2,(x(1..m),Y(1..m)),dp;
1072 def R = makeLetterplaceRing(d);
1073 setring R;
1074 ideal I; poly p;
1075 for (i = 1; i < m-1; i++)
1076 {
1077  p = lpMult(var(i),var(i+1))-var(i+2);
1078  I = I,p;
1079 }
1080 for (i = 1; i <= m; i++)
1081 {
1082  p = lpMult(var(i),var(i+m))-1;
1083  I = I,p;
1084  p = lpMult(var(i+m),var(i))-1;
1085  I = I,p;
1086 }
1087 I = simplify(I,2);
1088 export(I);
1089 if (baseringdef == 1) {setring save;}
1090 return(R);
1091}
1092example {
1093  "EXAMPLE:"; echo = 2;
1094  def R = fibonacciGroup(3,5); setring R;
1095  I;
1096}
1097
1098
1099////////////////////////////////////////////////////////////////////
1100// Tetrahedron Groups ///////////////////////////////////////////////
1101// from Grischa Studzinski /////////////////////////////////////////
1102////////////////////////////////////////////////////////////////////
1103
1104proc tetrahedronGroup(int g, int d)
1105"USAGE: tetrahedronGroup(g,d); g an integer, d an integer
1106RETURN: ring
1107NOTE: - the ring contains the ideal I, which contains the required relations
1108@*    - g gives the number of the example (1 - 5)
1109@*    - d gives the degreebound for the Letterplace ring
1110@*
1111@*    This is a family
1112@*
1113The examples are found in
1114Classification of the finite generalized tetrahedron groups
1115by Gerhard Rosenberger and Martin Scheer.
1116The 5 examples are denoted in Proposition 1.9 and concern
1117finite generalized tetrahedron group in the Tsarnarov-case, which are
1118not equivalent to a presentation for an ordinary tetrahedron group.
1119@*
1120"
1121{
1122 if (g < 1 || g > 5) {ERROR("There are only 5 examples!");}
1123 if ((g == 1 && d < 6)||(g == 2 && d < 6)||(g == 3 && d < 5)||(g == 4 && d < 4)||(g == 5 && d < 5))
1124 {ERROR("Degreebound is to small for choosen example!");}
1125 
1126 int baseringdef,i,j;
1127 if (defined(basering)) // if a basering is defined, it should be saved for later use
1128 {
1129  def save = basering;
1130  baseringdef = 1;
1131 }
1132 ring r = 2,(x,y,z),dp;
1133 def R = makeLetterplaceRing(d);
1134 setring R;
1135 ideal I;
1136 if (g == 1)
1137 {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,
1138      y(1)*z(2)*y(3)*z(4)-1;
1139 }
1140 if (g == 2)
1141 {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,
1142      y(1)*z(2)*z(3)*y(4)*z(5)*z(6)-1;
1143 }
1144 if (g == 3)
1145 {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;
1146 }
1147 if (g == 4)
1148 {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;
1149 }
1150 if (g ==5)
1151 {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;
1152 }
1153 
1154 I = simplify(I,2);
1155 export(I);
1156 if (baseringdef == 1) {setring save;}
1157 return(R);
1158}
1159example {
1160  "EXAMPLE:"; echo = 2;
1161  def R = tetrahedronGroup(3,5); setring R;
1162  I;
1163}
1164
1165
1166////////////////////////////////////////////////////////////////////
1167// Triangular Groups ///////////////////////////////////////////////
1168// from Grischa Studzinski /////////////////////////////////////////
1169////////////////////////////////////////////////////////////////////
1170
1171proc triangularGroup(int g, int d)
1172"USAGE: triangularGroup(g,d); g an integer, d an integer
1173RETURN: ring
1174NOTE: - the ring contains the ideal I, which contains the required relations
1175@*    - g gives the number of the example (1 - 14)
1176@*    - d gives the degreebound for the Letterplace ring
1177@*
1178@*    This is a family
1179@*
1180The examples are found in
1181Classification of the finite generalized tetrahedron groups
1182by Gerhard Rosenberger and Martin Scheer.
1183The 14 examples are denoted in theorem 2.12
1184@*
1185"
1186{
1187 if (g < 1 || g > 14) {ERROR("There are only 14 examples!");}
1188 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))
1189 {ERROR("Degreebound is to small for choosen example!");}
1190 
1191 int baseringdef;
1192 if (defined(basering)) // if a basering is defined, it should be saved for later use
1193 {
1194  def save = basering;
1195  baseringdef = 1;
1196 }
1197 ring r = 2,(a,b),dp;
1198 def R = makeLetterplaceRing(d);
1199 setring R;
1200 ideal I;
1201 
1202 if (g == 1)
1203 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)-1,
1204  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;
1205 }
1206 if (g == 2)
1207 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)-1,
1208  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;
1209 }
1210 if (g == 3)
1211 {I = a(1)*a(2)*a(3)-1, b(1)*b(2)*b(3)-1,
1212  a(1)*b(2)*a(3)*b(4)*b(5)*a(6)*b(7)*a(8)*b(9)*b(10)-1;
1213 }
1214 if (g == 4)
1215 {I = a(1)*a(2)*a(3)-1, b(1)*b(2)*b(3)-1,
1216  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;
1217 }
1218 if (g == 5)
1219 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)*b(4)*b(5)-1,
1220   a(1)*b(2)*a(3)*b(4)*b(5)*a(6)*b(7)*a(8)*b(9)*b(10)-1;
1221 }
1222 if (g == 6)
1223 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)*b(4)*b(5)-1,
1224   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;
1225 }
1226 if (g == 7)
1227 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)*b(4)*b(5)-1,
1228   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;
1229 }
1230 if (g == 8)
1231 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)*b(4)-1,
1232   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;
1233 }
1234 if (g == 9)
1235 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)-1,
1236   a(1)*b(2)*a(3)*b(4)*b(5)*a(6)*b(7)*a(8)*b(9)*b(10)-1;
1237 }
1238 if (g == 10)
1239 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)-1,
1240  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;
1241 }
1242 if (g == 11)
1243 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)-1,
1244  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;
1245 }
1246 if (g == 12)
1247 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)-1,
1248  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;
1249 }
1250 if (g == 13)
1251 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)-1,
1252a(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;
1253 }
1254 if (g == 14)
1255 {I = a(1)*a(2)-1, b(1)*b(2)*b(3)-1,
1256a(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;
1257 }
1258
1259 I = simplify(I,2);
1260 export(I);
1261 if (baseringdef == 1) {setring save;}
1262 return(R);
1263}
1264example {
1265  "EXAMPLE:"; echo = 2;
1266  def R = triangularGroup(3,10); setring R;
1267  I;
1268}
Note: See TracBrowser for help on using the repository browser.