# Maple file for the computations in "A degree theoretic approach to solvability of # symmetric word equations in two positive definite letters"with(linalg):Warning, the protected names norm and trace have been redefined and unprotected kronprod := proc (A, B) options `Maple Advisor Database 1.01 for Maple 6`, `Copyright (c) 1998 by Robert B. Israel. All rights reserved`; local Ap, Bp, i,j; if nargs > 2 then RETURN(kronprod(kronprod(A,B),args[3..nargs])) fi; if type(A,{vector,list(algebraic)}) and type(B,{vector,list(algebraic)}) then # vector x vector = vector vector([seq(seq(A[i]*B[j], j=1..linalg[vectdim](B)), i=1..linalg[vectdim](A))]) else # otherwise result is matrix if type(A,matrix) then Ap:= A elif type(A,listlist) then Ap:= convert(A,matrix) elif type(A,list) then Ap:= matrix(map(t->[t],A)) elif type(A,specfunc(list,transpose)) then Ap:= matrix([op(A)]) else Ap:= convert(A,matrix) fi; if type(B,matrix) then Bp:= B elif type(B,listlist) then Bp:= convert(B,matrix) elif type(B,list) then Bp:= matrix(map(t->[t],B)) elif type(B,specfunc(list,transpose)) then Bp:= matrix([op(B)]) else Bp:= convert(B,matrix) fi; linalg[stackmatrix](seq(linalg[augment]( seq(linalg[scalarmul](Bp,Ap[i,j]), j = 1 .. linalg[coldim](Ap))), i = 1 .. linalg[rowdim](Ap))); fi end;NiM+SSlrcm9ucHJvZEc2ImYqNiRJIkFHRiVJIkJHRiU2JkkjQXBHRiVJI0JwR0YlSSJpR0YlSSJqR0YlNiRJSE1hcGxlfkFkdmlzb3J+RGF0YWJhc2V+MS4wMX5mb3J+TWFwbGV+NkdGJUlnbkNvcHlyaWdodH4oYyl+MTk5OH5ieX5Sb2JlcnR+Qi5+SXNyYWVsLn5+QWxsfnJpZ2h0c35yZXNlcnZlZEdGJUYlQyRAJDIiIiM5Iy1JJ1JFVFVSTkdJKnByb3RlY3RlZEdGOTYjLUYkNiQtRiQ2JDkkOSUmOSI2IzsiIiRGNkAlMy1JJXR5cGVHRjk2JEY/PCRJJ3ZlY3Rvckc2JEY5SShfc3lzbGliR0YlLUklbGlzdEdGOTYjSSphbGdlYnJhaWNHRjktRkk2JEZARkstRkw2IzcjLUkkc2VxR0Y5NiQtRlk2JComJkY/NiM4JiIiIiZGQDYjOCdGW28vRl5vO0Zbby0mSSdsaW5hbGdHRk02I0kodmVjdGRpbUdGJTYjRkAvRmpuO0Zbby1GYm82I0Y/QyVAKy1GSTYkRj9JJ21hdHJpeEdGTT44JEY/LUZJNiRGP0kpbGlzdGxpc3RHRiU+RmFwLUkoY29udmVydEdGOUZecC1GSTYkRj9GUD5GYXAtRl9wNiMtSSRtYXBHRjk2JGYqNiNJInRHRiVGJTYkSSlvcGVyYXRvckdGJUkmYXJyb3dHRiVGJTcjRj9GJUYlRiVGPy1GSTYkRj8tSSlzcGVjZnVuY0dGOTYkRlBJKnRyYW5zcG9zZUdGJT5GYXAtRl9wNiM3Iy1JI29wR0Y5RmpvRmVwQCstRkk2JEZARl9wPjglRkAtRkk2JEZARmRwPkZnci1GZ3BGZXItRkk2JEZARlA+RmdyLUZfcDYjLUZecTYkRmBxRkAtRkk2JEZARmlxPkZnci1GX3A2IzcjLUZickZmb0Zqci0mRmNvNiNJLHN0YWNrbWF0cml4R0YlNiMtRlk2JC0mRmNvNiNJKGF1Z21lbnRHRiU2Iy1GWTYkLSZGY282I0kqc2NhbGFybXVsR0YlNiRGZ3ImRmFwNiRGam5GXm8vRl5vO0Zbby0mRmNvNiNJJ2NvbGRpbUdGJTYjRmFwL0ZqbjtGW28tJkZjbzYjSSdyb3dkaW1HRiVGZXVGJUYlRiU=isequal := proc (a,b) # are a and b equal? if (a = b) then return(1); end; return(0); end;NiM+SShpc2VxdWFsRzYiZio2JEkiYUdGJUkiYkdGJUYlRiVGJUMkQCQvOSQ5JU8iIiJPIiIhRiVGJUYlmatrixpower := proc( M, n, p ) # finds the n-by-n matrix power M^p local temp, temp2; if (p = 1) then return(M); end; if (p = 0) then return(matrix(n,n,(i,j)->isequal(i,j))); end; if (modp(p,2) = 0) then temp := matrixpower(M,n,p/2); return(evalm(temp&*temp)); else temp := M; temp2 := matrixpower(M,n,(p-1)/2); return(evalm(temp2&*temp2&*temp)); end; end;NiM+SSxtYXRyaXhwb3dlckc2ImYqNiVJIk1HRiVJIm5HRiVJInBHRiU2JEkldGVtcEdGJUkmdGVtcDJHRiVGJUYlQyVAJC85JiIiIk85JEAkL0YxIiIhTy1JJ21hdHJpeEc2JEkqcHJvdGVjdGVkR0Y8SShfc3lzbGliR0YlNiU5JUY/Zio2JEkiaUdGJUkiakdGJUYlNiRJKW9wZXJhdG9yR0YlSSZhcnJvd0dGJUYlLUkoaXNlcXVhbEdGJTYkRjRGP0YlRiVGJUAlLy1JJW1vZHBHRjw2JEYxIiIjRjdDJD44JC1GJDYlRjRGPywkRjEjRjJGT08tSSZldmFsbUdGJTYjLUkjJipHRiU2JEZSRlJDJT5GUkY0PjglLUYkNiVGNEY/LCZGMUZWIyEiIkZPRjJPLUZZNiMtRmZuNiQtRmZuNiRGW29GW29GUkYlRiVGJQ==evalword := proc (X,B,W,n,k,start) # evalautes a word with k products of powers at two n-by-n X and B # word W = X^p_1 B^q1 X^p2... is given as an integer vector [p_1,q_1,...] # e.g. word XB^2XB^4 is [1,2,1,4] # start designates where in the vector to start multiplying left to right, local i,j, totalProd; totalProd := evalm(matrix(n,n,(i,j)->isequal(i,j))); # identity matrix for i from start to k do # construct product if (modp(i,2) = 1) then totalProd := evalm(totalProd&*matrixpower(X,n,W[i])); else totalProd := evalm(totalProd&*matrixpower(B,n,W[i])); end; od; return evalm(totalProd); end; NiM+SSlldmFsd29yZEc2ImYqNihJIlhHRiVJIkJHRiVJIldHRiVJIm5HRiVJImtHRiVJJnN0YXJ0R0YlNiVJImlHRiVJImpHRiVJKnRvdGFsUHJvZEdGJUYlRiVDJT44Ji1JJmV2YWxtR0YlNiMtSSdtYXRyaXhHNiRJKnByb3RlY3RlZEdGO0koX3N5c2xpYkdGJTYlOSdGPmYqNiRGL0YwRiU2JEkpb3BlcmF0b3JHRiVJJmFycm93R0YlRiUtSShpc2VxdWFsR0YlNiQ5JDklRiVGJUYlPyg4JDkpIiIiOShJJXRydWVHRjtAJS8tSSVtb2RwR0Y7NiRGSiIiI0ZMPkY0LUY2NiMtSSMmKkdGJTYkRjQtSSxtYXRyaXhwb3dlckdGJTYlRkdGPiY5JjYjRko+RjQtRjY2Iy1GWTYkRjQtRmZuNiVGSEY+RmhuTy1GNjYjRjRGJUYlRiU=wordjacobian := proc (X,B,W,n,k) # finds jacobian of word W with k products of powers evaluated at n-by-n X and B # word W = X^p_1 B^q1 X^p2... is given as an integer vector [p_1,q_1,...] # e.g. word XB^2XB^4X is [1,2,1,4,1] local i,j, subword, totalSum, leftSubword, leftProd, rightSubword, rightProd; totalSum := matrix(n^2,n^2,0); for i from 1 to k do # construct tensor product sum if (modp(i,2) = 1) then for j from 0 to W[i]-1 do leftSubword := W; # form left subword vector leftSubword[i] := j; leftProd := evalword(X,B,leftSubword,n,i,1); rightSubword := W; # form right subword vector rightSubword[i] := W[i]-j-1; if ( W[i]-j-1 = 0 ) then rightProd := transpose(evalword(X,B,W,n,k,i+1)); else rightProd := transpose(evalword(X,B,rightSubword,n,k,i)); end; totalSum := evalm(totalSum) + evalm(kronprod(rightProd,leftProd)); od; end; od; return(evalm(totalSum)); end; NiM+SS13b3JkamFjb2JpYW5HNiJmKjYnSSJYR0YlSSJCR0YlSSJXR0YlSSJuR0YlSSJrR0YlNipJImlHRiVJImpHRiVJKHN1YndvcmRHRiVJKXRvdGFsU3VtR0YlSSxsZWZ0U3Vid29yZEdGJUkpbGVmdFByb2RHRiVJLXJpZ2h0U3Vid29yZEdGJUkqcmlnaHRQcm9kR0YlRiVGJUMlPjgnLUknbWF0cml4RzYkSSpwcm90ZWN0ZWRHRjxJKF9zeXNsaWJHRiU2JSokOSciIiNGPyIiIT8oOCQiIiJGRTkoSSV0cnVlR0Y8QCQvLUklbW9kcEdGPDYkRkRGQUZFPyg4JUZCRkUsJiY5JjYjRkRGRSEiIkZFRkdDKT44KEZRPiZGVkZSRk4+OCktSSlldmFsd29yZEdGJTYoOSQ5JUZWRkBGREZFPjgqRlE+JkZbb0ZSLChGUEZFRk5GU0ZTRkVAJS9GXm9GQj44Ky1JKnRyYW5zcG9zZUdGJTYjLUZmbjYoRmhuRmluRlFGQEZGLCZGREZFRkVGRT5GYm8tRmRvNiMtRmZuNihGaG5GaW5GW29GQEZGRkQ+RjgsJi1JJmV2YWxtR0YlNiNGOEZFLUZhcDYjLUkpa3JvbnByb2RHRiU2JEZib0ZaRkVPRmBwRiVGJUYlconstructM := proc(n) # Finds the matrix M local i,j,l,k,m, M,N,alpha,beta; m := n*(n+1)/2; M := matrix(m,n*n,0); N := matrix(m*n*n,m*n*n,0); for i from 1 to n do for j from 1 to n do for l from 1 to n do for k from l to n do alpha := n*(j-1)+i; beta := (2*n-l)*(l-1)/2+k; if (i = k and j = l) then M[beta,alpha] := 1; end; od; od; od; od; return M; end;NiM+SStjb25zdHJ1Y3RNRzYiZio2I0kibkdGJTYrSSJpR0YlSSJqR0YlSSJsR0YlSSJrR0YlSSJtR0YlSSJNR0YlSSJOR0YlSSZhbHBoYUdGJUklYmV0YUdGJUYlRiVDJz44KCwkKiY5JCIiIiwmRjhGOUY5RjlGOSNGOSIiIz44KS1JJ21hdHJpeEc2JEkqcHJvdGVjdGVkR0ZCSShfc3lzbGliR0YlNiVGNSomRjhGOUY4RjkiIiE+OCotRkA2JSooRjVGOUY4RjlGOEY5RktGRj8oOCRGOUY5RjhJJXRydWVHRkI/KDglRjlGOUY4Rk4/KDgmRjlGOUY4Rk4/KDgnRlJGOUY4Rk5DJT44KywmKiZGOEY5LCZGUEY5ISIiRjlGOUY5Rk1GOT44LCwmKiYsJkY4RjxGUkZlbkY5LCZGUkY5RmVuRjlGOUY7RlRGOUAkMy9GTUZUL0ZQRlI+JkY+NiRGZ25GV0Y5T0Y+RiVGJUYlconstructN := proc(n) # Finds the matrix N local i,j,l,k,m, N,alpha,beta; m := n*(n+1)/2; N := matrix(n*n,m,0); for i from 1 to n do for j from 1 to n do for l from 1 to n do for k from l to n do alpha := n*(j-1)+i; beta := (2*n-l)*(l-1)/2+k; if ((i = k and j = l) or (i = l and j = k)) then N[alpha,beta] := 1; end; od; od; od; od; return N; end;NiM+SStjb25zdHJ1Y3RORzYiZio2I0kibkdGJTYqSSJpR0YlSSJqR0YlSSJsR0YlSSJrR0YlSSJtR0YlSSJOR0YlSSZhbHBoYUdGJUklYmV0YUdGJUYlRiVDJj44KCwkKiY5JCIiIiwmRjdGOEY4RjhGOCNGOCIiIz44KS1JJ21hdHJpeEc2JEkqcHJvdGVjdGVkR0ZBSShfc3lzbGliR0YlNiUqJkY3RjhGN0Y4RjQiIiE/KDgkRjhGOEY3SSV0cnVlR0ZBPyg4JUY4RjhGN0ZIPyg4JkY4RjhGN0ZIPyg4J0ZMRjhGN0ZIQyU+OCosJiomRjdGOCwmRkpGOCEiIkY4RjhGOEZHRjg+OCssJiomLCZGN0Y7RkxGVUY4LCZGTEY4RlVGOEY4RjpGTkY4QCQ1My9GR0ZOL0ZKRkwzL0ZHRkwvRkpGTj4mRj02JEZRRldGOE9GPUYlRiVGJQ==B := diag(a,b);NiM+SSJCRzYiLUknbWF0cml4RzYkSSpwcm90ZWN0ZWRHRilJKF9zeXNsaWJHRiU2IzckNyRJImFHRiUiIiE3JEYvSSJiR0YlX := matrix(2,2,[x,y,y,(1+y^2)/x]);NiM+SSJYRzYiLUknbWF0cml4RzYkSSpwcm90ZWN0ZWRHRilJKF9zeXNsaWJHRiU2IzckNyRJInhHRiVJInlHRiU3JEYvKiYsJiIiIkYzKiRGLyIiI0YzRjNGLiEiIg==bigjacobian := wordjacobian(B,X,[1,1,2,3,2,1,1],2,7):smalljacobian := evalm(constructM(2)&*bigjacobian&*constructN(2)):factor(det(%));NiMsJCoqSSJhRzYiIiImSSJiR0YmRidJInhHRiYhIiYsYnEqJkYlRidGKSIjNSIiJCooRiUiIiVGKCIiIkYpIiIpRi4qJEYoRidGLiooRiUiIiNGKEYuRilGNUYuKihGJUYxRihGMEYpRjVGLiooRiVGLkYoRjVGKUYyRi4qKkYlRjFGKUYwSSJ5R0YmIiInRihGMEY6KipGJUYxRilGNUY5RjVGKEYwIiM3KipGJUYxRilGNUY5RjBGKEYwIiM9KipGJUYxRilGNUY5RjpGKEYwRjwqKkYlRjFGKUY1RjlGMkYoRjBGLiomRihGJ0Y5Ri1GLioqRiVGMUYoRjBGKUYwRjlGNUYyKipGJUYxRihGMEYpRjpGOUY1RicqKkYlRjVGKEYuRilGNUY5RjAiI0YqKkYlRjVGKEYuRilGNUY5RjJGOioqRiVGNUYoRi5GKUY1RjlGOiIjQCoqRiVGNUYoRi5GKUYwRjlGMCIjQSoqRiVGNUYoRi5GKUY1RjlGNSIjOioqRiVGNUYoRi5GKUYwRjlGOkY8KipGJUY1RihGLkYpRjpGOUY1IiIoKipGJUY1RihGLkYpRjBGOUY1Ri0qKkYlRjVGKEYuRilGOkY5RjBGOioqRiVGMEYoRjFGKUYwRjlGNUYnKipGJUYwRihGMUYpRjBGOUY6Ri4qKkYlRjBGKEYxRilGMEY5RjBGMioqRiVGMEYoRjFGKUYyRjlGNUYuKipGJUYwRihGMUYpRjpGOUYwRjoqKkYlRjBGKEYxRilGOkY5RjVGMiooRiVGJ0YpRjJGOUY1RjoqKEYlRidGKUY6RjlGNUYuKihGJUYnRilGOkY5RjBGLiomRihGJ0Y5RjoiI0kqJkYoRidGOUYwRmZuKihGKEYnRjlGMkYpRjVGOiooRihGJ0Y5RjpGKUYwRi4qJkYoRidGOUYyRkwqKEYoRidGOUY1RilGNUY6KihGKEYnRjlGNUYpRjBGLiooRihGJ0YpRjVGOUY6Rj4qJkYoRidGOUY1RkwqKEYoRidGKUYwRjlGMEY6KihGKEYnRjlGMEYpRjVGPioqRiVGLkYpRjJGOUY1RihGNUY6KipGJUYuRilGOkY5RjBGKEY1RjwqKkYlRi5GKUY6RjlGNUYoRjVGLSoqRiVGLkYpRjBGOUY1RihGNUZPKipGJUYuRilGMEY5RjBGKEY1IiM4KipGJUYuRilGMEY5RjpGKEY1RjoqKkYlRjFGKUY6RjlGMEYoRjBGLioqRiVGMUYpRjBGOUYwRihGMCIjOUYxRjw=# all postive coefficients