restart; with(LinearAlgebra): # Define indeterminates QParam := [q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11,q12,q13,q14,q15,q16]: PParam := Matrix([[p1],[p2],[p3],[p4],[p5],[p6],[p7],[p8],[p9],[p10],[p11],[p12],[p13],[p14],[p15],[p16]]): # Special Fourier parameterization and inverse F := Matrix([ [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1], [1,-1,-1,1,1,-1,-1,1,1,-1,-1,1,1,-1,-1,1], [1,-1,1,-1,-1,1,-1,1,1,-1,1,-1,-1,1,-1,1], [1,1,-1,-1,-1,-1,1,1,1,1,-1,-1,-1,-1,1,1], [1,-1,1,-1,1,-1,1,-1,-1,1,-1,1,-1,1,-1,1], [1,1,-1,-1,1,1,-1,-1,-1,-1,1,1,-1,-1,1,1], [1,1,1,1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1], [1,-1,-1,1,-1,1,1,-1,-1,1,1,-1,1,-1,-1,1], [1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1], [1,1,-1,-1,1,1,-1,-1,1,1,-1,-1,1,1,-1,-1], [1,1,1,1,-1,-1,-1,-1,1,1,1,1,-1,-1,-1,-1], [1,-1,-1,1,-1,1,1,-1,1,-1,-1,1,-1,1,1,-1], [1,1,1,1,1,1,1,1,-1,-1,-1,-1,-1,-1,-1,-1], [1,-1,-1,1,1,-1,-1,1,-1,1,1,-1,-1,1,1,-1], [1,-1,1,-1,-1,1,-1,1,-1,1,-1,1,1,-1,1,-1], [1,1,-1,-1,-1,-1,1,1,-1,-1,1,1,1,1,-1,-1]]): FI := Matrix([ [1/16,1/16,1/16,1/16,1/16,1/16,1/16,1/16,1/16,1/16,1/16,1/16,1/16,1/16,1/16,1/16], [1/16,-1/16,-1/16,1/16,-1/16,1/16,1/16,-1/16,-1/16,1/16,1/16,-1/16,1/16,-1/16,-1/16,1/16], [1/16,-1/16,1/16,-1/16,1/16,-1/16,1/16,-1/16,1/16,-1/16,1/16,-1/16,1/16,-1/16,1/16,-1/16], [1/16,1/16,-1/16,-1/16,-1/16,-1/16,1/16,1/16,-1/16,-1/16,1/16,1/16,1/16,1/16,-1/16,-1/16], [1/16,1/16,-1/16,-1/16,1/16,1/16,-1/16,-1/16,1/16,1/16,-1/16,-1/16,1/16,1/16,-1/16,-1/16], [1/16,-1/16,1/16,-1/16,-1/16,1/16,-1/16,1/16,-1/16,1/16,-1/16,1/16,1/16,-1/16,1/16,-1/16], [1/16,-1/16,-1/16,1/16,1/16,-1/16,-1/16,1/16,1/16,-1/16,-1/16,1/16,1/16,-1/16,-1/16,1/16], [1/16,1/16,1/16,1/16,-1/16,-1/16,-1/16,-1/16,-1/16,-1/16,-1/16,-1/16,1/16,1/16,1/16,1/16], [1/16,1/16,1/16,1/16,-1/16,-1/16,-1/16,-1/16,1/16,1/16,1/16,1/16,-1/16,-1/16,-1/16,-1/16], [1/16,-1/16,-1/16,1/16,1/16,-1/16,-1/16,1/16,-1/16,1/16,1/16,-1/16,-1/16,1/16,1/16,-1/16], [1/16,-1/16,1/16,-1/16,-1/16,1/16,-1/16,1/16,1/16,-1/16,1/16,-1/16,-1/16,1/16,-1/16,1/16], [1/16,1/16,-1/16,-1/16,1/16,1/16,-1/16,-1/16,-1/16,-1/16,1/16,1/16,-1/16,-1/16,1/16,1/16], [1/16,1/16,-1/16,-1/16,-1/16,-1/16,1/16,1/16,1/16,1/16,-1/16,-1/16,-1/16,-1/16,1/16,1/16], [1/16,-1/16,1/16,-1/16,1/16,-1/16,1/16,-1/16,-1/16,1/16,-1/16,1/16,-1/16,1/16,-1/16,1/16], [1/16,-1/16,-1/16,1/16,-1/16,1/16,1/16,-1/16,1/16,-1/16,-1/16,1/16,-1/16,1/16,1/16,-1/16], [1/16,1/16,1/16,1/16,1/16,1/16,1/16,1/16,-1/16,-1/16,-1/16,-1/16,-1/16,-1/16,-1/16,-1/16]]): # List of polynomial parametrizations P0 := [ a0*b0*c0*d0*e0*f0+a0*b1*c1*d1*e0*f1+a1*b0*c1*d0*e1*f0+a1*b1*c0*d1*e1*f1, a0*b0*c1*d1*e0*f1+a0*b1*c0*d0*e0*f0+a1*b0*c0*d1*e1*f1+a1*b1*c1*d0*e1*f0, a0*b0*c0*d1*e0*f0+a0*b1*c1*d0*e0*f1+a1*b0*c1*d1*e1*f0+a1*b1*c0*d0*e1*f1, a0*b0*c1*d0*e0*f1+a0*b1*c0*d1*e0*f0+a1*b0*c0*d0*e1*f1+a1*b1*c1*d1*e1*f0, a0*b0*c0*d0*e0*f1+a0*b1*c1*d1*e0*f0+a1*b0*c1*d0*e1*f1+a1*b1*c0*d1*e1*f0, a0*b0*c1*d1*e0*f0+a0*b1*c0*d0*e0*f1+a1*b0*c0*d1*e1*f0+a1*b1*c1*d0*e1*f1, a0*b0*c0*d1*e0*f1+a0*b1*c1*d0*e0*f0+a1*b0*c1*d1*e1*f1+a1*b1*c0*d0*e1*f0, a0*b0*c1*d0*e0*f0+a0*b1*c0*d1*e0*f1+a1*b0*c0*d0*e1*f0+a1*b1*c1*d1*e1*f1, a0*b0*c0*d0*e1*f0+a0*b1*c1*d1*e1*f1+a1*b0*c1*d0*e0*f0+a1*b1*c0*d1*e0*f1, a0*b0*c1*d1*e1*f1+a0*b1*c0*d0*e1*f0+a1*b0*c0*d1*e0*f1+a1*b1*c1*d0*e0*f0, a0*b0*c0*d1*e1*f0+a0*b1*c1*d0*e1*f1+a1*b0*c1*d1*e0*f0+a1*b1*c0*d0*e0*f1, a0*b0*c1*d0*e1*f1+a0*b1*c0*d1*e1*f0+a1*b0*c0*d0*e0*f1+a1*b1*c1*d1*e0*f0, a0*b0*c0*d0*e1*f1+a0*b1*c1*d1*e1*f0+a1*b0*c1*d0*e0*f1+a1*b1*c0*d1*e0*f0, a0*b0*c1*d1*e1*f0+a0*b1*c0*d0*e1*f1+a1*b0*c0*d1*e0*f0+a1*b1*c1*d0*e0*f1, a0*b0*c0*d1*e1*f1+a0*b1*c1*d0*e1*f0+a1*b0*c1*d1*e0*f1+a1*b1*c0*d0*e0*f0, a0*b0*c1*d0*e1*f0+a0*b1*c0*d1*e1*f1+a1*b0*c0*d0*e0*f0+a1*b1*c1*d1*e0*f1]: # Substitutions based on the model P := P0: P := subs(a0 = 1-a1, P): P := subs(b0 = 1-b1, P): P := subs(c0 = 1-c1, P): P := subs(d0 = 1-d1, P): P := subs(e0 = 1-e1, P): P := subs(f0 = 1-f1, P): # Check that the polynomial parametrization lies in the probability simplex suma := 0: for i from 1 to nops(P) do suma := suma + P[i]: od: normal(expand(suma)); # Ideal of Invariants in Fourier coordinates Invariants := Matrix([ q4*q15-q3*q16, q4*q14-q2*q16, q3*q14-q2*q15, q12*q13-q11*q14, q12*q13-q10*q15, q12*q13-q9*q16, q8*q13-q5*q16, q8*q13-q6*q15, q8*q13-q7*q14, q4*q13-q1*q16, q3*q13-q1*q15, q2*q13-q1*q14, q8*q11-q7*q12, q8*q10-q6*q12, q7*q10-q6*q11, q8*q9-q5*q12, q7*q9-q5*q11, q6*q9-q5*q10, q4*q9-q1*q12, q4*q9-q2*q11, q4*q9-q3*q10, q4*q5-q3*q6, q4*q5-q2*q7, q4*q5-q1*q8]): # Ideal of Invariants in probability coordinates Fourier := MatrixMatrixMultiply(F,PParam): PInvariants := Invariants: for i from 1 to nops(QParam) do PInvariants := subs(QParam[i] = Fourier[i, 1], PInvariants): od: # Evaluation of Invariants at the polynomial/rational parametrization num := op(PInvariants[1,1..-1])[1]: for j from 1 to num do coordpoly := PInvariants[1, j]: for i from 1 to op(PParam[1..-1,1])[1] do coordpoly := subs(PParam[i, 1] = P0[i], coordpoly): od: coordpoly :=expand(coordpoly): lprint(j,coordpoly); od: