|  |  7.5.8.0. findAuto Procedure from libraryinvolut.lib(see  involut_lib).
 
Example:Usage:
findAuto(n); n an integer
Return:
a ring together with a list of pairs L, where
L[i][1] = ideal; a Groebner Basis of an i-th associated prime,
 L[i][2] = matrix, defining a linear map, with entries, reduced with respect to L[i][1]
 
Purpose:
compute the ideal of linear automorphisms of the basering,
given by a matrix, n-th power of which gives identity (i.e. unipotent matrix)
 
Assume:
the relations on the algebra are of the form YX = XY + D, that is
the current ring is a G-algebra of Lie type.
Note:
if n=0, a matrix, defining an automorphism is not assumed to be unipotent
but just non-degenerate. A nonzero parameter
 @pis introduced as the value ofthe determinant of the matrix above.
 For convenience, the full ideal of relations
 idJand the initial matrix with indeterminates
 matDare mutually exported in the output ring
 See also:
 findInvo.|  | LIB "involut.lib";
def a = makeWeyl(1);
setring a; // this algebra is a first Weyl algebra
a;
==> // coefficients: QQ
==> // number of vars : 2
==> //        block   1 : ordering dp
==> //                  : names    x D
==> //        block   2 : ordering C
==> // noncommutative relations:
==> //    Dx=xD+1
def X = findAuto(2);  // in contrast to findInvo look for automorphisms
setring X; // ring with new variables - unknown coefficients
X;
==> // coefficients: QQ
==> // number of vars : 4
==> //        block   1 : ordering dp
==> //                  : names    a11 a12 a21 a22
==> //        block   2 : ordering C
size(L); // we have (size(L)) families in the answer
==> 2
// look at matrices, defining linear automorphisms:
print(L[1][2]);  // a first one: we see it is the identity
==> 1,0,
==> 0,1 
print(L[2][2]);  // and a second possible matrix; it is diagonal
==> -1,0,
==> 0, -1
// L; // we can take a look on the whole list, too
idJ;
==> idJ[1]=-a12*a21+a11*a22-1
==> idJ[2]=a11^2+a12*a21-1
==> idJ[3]=a11*a12+a12*a22
==> idJ[4]=a11*a21+a21*a22
==> idJ[5]=a12*a21+a22^2-1
kill X; kill a;
//----------- find all the linear automorphisms --------------------
//----------- use the call findAuto(0)          --------------------
ring R = 0,(x,s),dp;
def r = nc_algebra(1,s); setring r; // the shift algebra
s*x; // the only relation in the algebra is:
==> xs+s
def Y = findAuto(0);
setring Y;
size(L); // here, we have 1 parametrized family
==> 1
print(L[1][2]); // here, @p is a nonzero parameter
==> 1,a12,
==> 0,(@p)
det(L[1][2]-@p);  // check whether determinante is zero
==> 0
 | 
 
 |