# 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+RjgsJi1JJmV2YWxtR0Y7NiNGOEZFLUZhcDYjLUkpa3JvbnByb2RHRiU2JEZib0ZaRkVPRmBwRiVGJUYlconstructM := 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==A1 := matrix(3,3,[1,20,210,20,402,4240,210,4240,44903]);NiM+SSNBMUc2Ii1JJ21hdHJpeEc2JEkqcHJvdGVjdGVkR0YpSShfc3lzbGliR0YlNiM3JTclIiIiIiM/IiQ1IzclRi8iJC0lIiVTVTclRjBGMyImLlwlB1 := matrix(3,3,[36501,-3820,190,-3820,401,-20,190,-20,1]);NiM+SSNCMUc2Ii1JJ21hdHJpeEc2JEkqcHJvdGVjdGVkR0YpSShfc3lzbGliR0YlNiM3JTclIiYsbCQhJT9RIiQhPjclRi8iJCwlISM/NyVGMEYzIiIibigjacobian := wordjacobian(B1,A1,[1,1,2,3,2,1,1],3,7);NiM+SSxiaWdqYWNvYmlhbkc2Ii1JJ21hdHJpeEc2JEkqcHJvdGVjdGVkR0YpSShfc3lzbGliR0YlNiM3KzcrITQlUioqKilRWidcRlslITUrWFd4SzFbeCxYITZncXdMLWYzYUJ6JUYvIjQrOylvdjdOLyFcKiI1K20uLmVpdU0sXUYwRjIhNCtZPSlHRjpUMl03KyIzP25vJDRicioqcCUiNHAzJylISEhdJD5aIjU/WyR6QzxJRVMtJiI0Kz9wLlAtRS9zJSEzK05GVzUqKVFnKiohNCtzRUJURW9JQyYiNStXWHh4dWk2RF0hND8oZV5kJnBcXUQmIjMrT25ta2lHZ183KyEyZyszQUZSOk0jITNTVSczbCRbJDROIyE0KWVWN3lrQ3QtRCEzKyU+cHcjSCc+TiMiMis7MUsnKipvbVwiMytYIm8vJD1ZNkUhNCspUiVHcSZIeC5EIjMrdUpOISlwOEJFITIhKVtgXE5HTmojNytGNUY4RjtGNkY5RjxGN0Y6Rj03KyEyKyFHIjNRPngjXCEzK0lzYmsicCZbXCE0KyVReG4jcFMhb19GSyIzIyo0aWxYSlNYNSIzU2QzamFCLjRiRkxGTiEyK0Mxeip5IWZfJjcrIjErW0ltUStiQyIyK3NBPXc+XlkjIjMhRzpvTSEqKUdDRSIyU1okUW9kamxDITE/ZlorZyRHQCYhMjA+JCl5KFEkUnUjIjMrX295cy8iW2kjITIra0s7STsqXEYiMWdZZT0+W21GNytGP0ZCRkVGQEZDRkZGQUZERkc3K0ZRRlRGV0ZSRlVGWEZTRlZGWTcrITArPVgjKiozQjchMSt1ZiVcXiNHNyEyZ2ZBJ0dsYjI4RmhuIjArT0onW00qZiMiMStNKVJEdydwOEZpbkZbbyEwVTpyM3RcUSI=smalljacobian := evalm(constructM(3)&*bigjacobian&*constructN(3));NiM+SS5zbWFsbGphY29iaWFuRzYiLUknbWF0cml4RzYkSSpwcm90ZWN0ZWRHRilJKF9zeXNsaWJHRiU2IzcoNyghNCVSKioqKVFaJ1xGWyUhNSshKilbYkVoXE4rKiE2P1Rgbi89PDNaZSoiNCs7KW92N04vIVwqIjYrSzIxO0RccC0rIiE0K1k9KUdGOlQyXTcoIjM/bm8kNGJyKipwJSI0cEdiTG1KdyhSJSoiNj8jKlFEXXdEOVwrIiEzK05GVzUqKVFnKiohNT9mVSlwZno2KVw1IjMrT25ta2lHZ183KCEyZyszQUZSOk0jITNTT3k8a3gqR3ElITQpUSRvND1VMGwrJiIyKzsxSycqKm9tXCIzKz44IzMiKSlmTV8hMiEpW2BcTkdOaiM3KCEyKyFHIjNRPngjXCEzK2dXNkgkUXIqKSohNStvWmJgUSIzTzAiIjMjKjRpbFhKU1g1IjQhW3JoIzRaMT01IiEyK0Mxeip5IWZfJjcoIjErW0ltUStiQyIyUz4xLWBiMiRcIjMhWytiaVAqNFxfITE/ZlorZyRHQCYhMjAkZV56LCZRXCYiMWdZZT0+W21GNyghMCs9WCMqKjNCNyExK1s+KilIXWNDITI/PlhzMDheaCMiMCtPSidbTSpmIyIxK28nel1fJFJGITBVOnIzdFxRIg==det(smalljacobian);NiMhRVNZOVtyVng2JFFASHRaNGZxTCc=