restart; with(LinearAlgebra): # Define indeterminates QParam := [q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11,q12,q13]: PParam := Matrix([[p1],[p2],[p3],[p4],[p5],[p6],[p7],[p8],[p9],[p10],[p11],[p12],[p13],[p14],[p15]]): # Special Fourier parameterization and inverse F := Matrix([ [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1], [1,-1/3,-1/3,1,-1/3,1,-1/3,-1/3,-1/3,1,-1/3,-1/3,-1/3,1,-1/3], [1,-1/3,1,-1/3,-1/3,-1/3,1,-1/3,-1/3,1,-1/3,-1/3,1,-1/3,-1/3], [1,1,-1/3,-1/3,-1/3,-1/3,-1/3,-1/3,1,1,1,-1/3,-1/3,-1/3,-1/3], [1,-1/3,-1/3,-1/3,1/3,-1/3,-1/3,1/3,-1/3,1,-1/3,1/3,-1/3,-1/3,1/3], [1,-1/3,1,-1/3,-1/3,1,-1/3,-1/3,1,-1/3,-1/3,1,-1/3,-1/3,-1/3], [1,1,-1/3,-1/3,-1/3,1,1,1,-1/3,-1/3,-1/3,-1/3,-1/3,-1/3,-1/3], [1,-1/3,-1/3,-1/3,1/3,1,-1/3,-1/3,-1/3,-1/3,1/3,-1/3,1/3,-1/3,1/3], [1,1,1,1,1,-1/3,-1/3,-1/3,-1/3,-1/3,-1/3,-1/3,-1/3,-1/3,-1/3], [1,-1/3,-1/3,1,-1/3,-1/3,1/9,1/9,1/9,-1/3,1/9,1/9,1/9,-1/3,1/9], [1,-1/3,1,-1/3,-1/3,-1/3,-1/3,1/3,-1/3,-1/3,1/3,-1/3,-1/3,1/3,1/3], [1,-1/3,-1/3,-1/3,1/3,-1/3,1/3,0,1/3,-1/3,0,0,0,1/3,-1/3], [1,1,-1/3,-1/3,-1/3,-1/3,-1/3,-1/3,-1/3,-1/3,-1/3,1/3,1/3,1/3,1/3]]): FI := Matrix([ [1/64,3/64,3/64,3/64,3/32,3/64,3/64,3/32,3/64,9/64,3/32,3/16,3/32], [3/64,-3/64,-3/64,9/64,-3/32,-3/64,9/64,-3/32,9/64,-9/64,-3/32,-3/16,9/32], [3/64,-3/64,9/64,-3/64,-3/32,9/64,-3/64,-3/32,9/64,-9/64,9/32,-3/16,-3/32], [3/64,9/64,-3/64,-3/64,-3/32,-3/64,-3/64,-3/32,9/64,27/64,-3/32,-3/16,-3/32], [3/32,-3/32,-3/32,-3/32,3/16,-3/32,-3/32,3/16,9/32,-9/32,-3/16,3/8,-3/16], [3/64,9/64,-3/64,-3/64,-3/32,9/64,9/64,9/32,-3/64,-9/64,-3/32,-3/16,-3/32], [3/64,-3/64,9/64,-3/64,-3/32,-3/64,9/64,-3/32,-3/64,3/64,-3/32,3/16,-3/32], [3/32,-3/32,-3/32,-3/32,3/16,-3/32,9/32,-3/16,-3/32,3/32,3/16,0,-3/16], [3/64,-3/64,-3/64,9/64,-3/32,9/64,-3/64,-3/32,-3/64,3/64,-3/32,3/16,-3/32], [3/64,9/64,9/64,9/64,9/32,-3/64,-3/64,-3/32,-3/64,-9/64,-3/32,-3/16,-3/32], [3/32,-3/32,-3/32,9/32,-3/16,-3/32,-3/32,3/16,-3/32,3/32,3/16,0,-3/16], [3/32,-3/32,-3/32,-3/32,3/16,9/32,-3/32,-3/16,-3/32,3/32,-3/16,0,3/16], [3/32,-3/32,9/32,-3/32,-3/16,-3/32,-3/32,3/16,-3/32,3/32,-3/16,0,3/16], [3/32,9/32,-3/32,-3/32,-3/16,-3/32,-3/32,-3/16,-3/32,-9/32,3/16,3/8,3/16], [3/32,-3/32,-3/32,-3/32,3/16,-3/32,-3/32,3/16,-3/32,3/32,3/16,-3/8,3/16]]): # List of polynomial parametrizations P0 := [ a0*b0*c0*d0*e0+3*a0*b1*c1*d0*e1+3*a1*b0*c1*d1*e0+3*a1*b1*c0*d1*e1+6*a1*b1*c1*d1*e1, 3*a0*b0*c1*d0*e1+3*a0*b1*c0*d0*e0+6*a0*b1*c1*d0*e1+3*a1*b0*c0*d1*e1+6*a1*b0*c1*d1*e1+6*a1*b1*c0*d1*e1+9*a1*b1*c1*d1*e0+12*a1*b1*c1*d1*e1, 3*a0*b0*c0*d0*e1+3*a0*b1*c1*d0*e0+6*a0*b1*c1*d0*e1+9*a1*b0*c1*d1*e1+3*a1*b1*c0*d1*e0+6*a1*b1*c0*d1*e1+6*a1*b1*c1*d1*e0+12*a1*b1*c1*d1*e1, 3*a0*b0*c1*d0*e0+3*a0*b1*c0*d0*e1+6*a0*b1*c1*d0*e1+3*a1*b0*c0*d1*e0+6*a1*b0*c1*d1*e0+6*a1*b1*c0*d1*e1+21*a1*b1*c1*d1*e1, 6*a0*b0*c1*d0*e1+6*a0*b1*c0*d0*e1+6*a0*b1*c1*d0*e0+6*a0*b1*c1*d0*e1+6*a1*b0*c0*d1*e1+12*a1*b0*c1*d1*e1+6*a1*b1*c0*d1*e0+6*a1*b1*c0*d1*e1+12*a1*b1*c1*d1*e0+30*a1*b1*c1*d1*e1, 3*a0*b0*c0*d1*e0+9*a0*b1*c1*d1*e1+3*a1*b0*c1*d0*e0+6*a1*b0*c1*d1*e0+3*a1*b1*c0*d0*e1+6*a1*b1*c0*d1*e1+6*a1*b1*c1*d0*e1+12*a1*b1*c1*d1*e1, 3*a0*b0*c1*d1*e1+3*a0*b1*c0*d1*e0+6*a0*b1*c1*d1*e1+3*a1*b0*c0*d0*e1+6*a1*b0*c1*d1*e1+6*a1*b1*c0*d1*e1+3*a1*b1*c1*d0*e0+6*a1*b1*c1*d0*e1+6*a1*b1*c1*d1*e0+6*a1*b1*c1*d1*e1, 6*a0*b0*c1*d1*e1+6*a0*b1*c0*d1*e0+12*a0*b1*c1*d1*e1+6*a1*b0*c0*d1*e1+6*a1*b0*c1*d0*e1+6*a1*b0*c1*d1*e1+6*a1*b1*c0*d0*e1+6*a1*b1*c0*d1*e1+6*a1*b1*c1*d0*e0+6*a1*b1*c1*d0*e1+12*a1*b1*c1*d1*e0+18*a1*b1*c1*d1*e1, 3*a0*b0*c0*d1*e1+3*a0*b1*c1*d1*e0+6*a0*b1*c1*d1*e1+3*a1*b0*c1*d0*e1+6*a1*b0*c1*d1*e1+3*a1*b1*c0*d0*e0+6*a1*b1*c0*d1*e1+6*a1*b1*c1*d0*e1+6*a1*b1*c1*d1*e0+6*a1*b1*c1*d1*e1, 3*a0*b0*c1*d1*e0+3*a0*b1*c0*d1*e1+6*a0*b1*c1*d1*e1+3*a1*b0*c0*d0*e0+6*a1*b0*c1*d1*e0+6*a1*b1*c0*d1*e1+9*a1*b1*c1*d0*e1+12*a1*b1*c1*d1*e1, 6*a0*b0*c1*d1*e1+6*a0*b1*c0*d1*e1+6*a0*b1*c1*d1*e0+6*a0*b1*c1*d1*e1+6*a1*b0*c0*d1*e1+6*a1*b0*c1*d0*e1+6*a1*b0*c1*d1*e1+6*a1*b1*c0*d0*e0+6*a1*b1*c0*d1*e1+12*a1*b1*c1*d0*e1+12*a1*b1*c1*d1*e0+18*a1*b1*c1*d1*e1, 6*a0*b0*c0*d1*e1+6*a0*b1*c1*d1*e0+12*a0*b1*c1*d1*e1+6*a1*b0*c1*d0*e1+12*a1*b0*c1*d1*e1+6*a1*b1*c0*d0*e1+6*a1*b1*c0*d1*e0+6*a1*b1*c0*d1*e1+6*a1*b1*c1*d0*e0+6*a1*b1*c1*d0*e1+6*a1*b1*c1*d1*e0+18*a1*b1*c1*d1*e1, 6*a0*b0*c1*d1*e1+6*a0*b1*c0*d1*e1+6*a0*b1*c1*d1*e0+6*a0*b1*c1*d1*e1+6*a1*b0*c0*d0*e1+12*a1*b0*c1*d1*e1+6*a1*b1*c0*d1*e0+6*a1*b1*c0*d1*e1+6*a1*b1*c1*d0*e0+12*a1*b1*c1*d0*e1+6*a1*b1*c1*d1*e0+18*a1*b1*c1*d1*e1, 6*a0*b0*c1*d1*e0+6*a0*b1*c0*d1*e1+12*a0*b1*c1*d1*e1+6*a1*b0*c0*d1*e0+6*a1*b0*c1*d0*e0+6*a1*b0*c1*d1*e0+6*a1*b1*c0*d0*e1+6*a1*b1*c0*d1*e1+12*a1*b1*c1*d0*e1+30*a1*b1*c1*d1*e1, 6*a0*b0*c1*d1*e1+6*a0*b1*c0*d1*e1+6*a0*b1*c1*d1*e0+6*a0*b1*c1*d1*e1+6*a1*b0*c0*d1*e1+6*a1*b0*c1*d0*e1+6*a1*b0*c1*d1*e1+6*a1*b1*c0*d0*e1+6*a1*b1*c0*d1*e0+6*a1*b1*c1*d0*e0+6*a1*b1*c1*d0*e1+6*a1*b1*c1*d1*e0+24*a1*b1*c1*d1*e1 ]: # Substitutions based on the model P := P0: P := subs(a0 = 1-3*a1, P): P := subs(b0 = 1-3*b1, P): P := subs(c0 = 1-3*c1, P): P := subs(d0 = 1-3*d1, P): P := subs(e0 = 1-3*e1, 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([ q7*q12-q8*q13, q4*q12-q5*q13, q8*q11-q6*q12, q7*q11-q6*q13, q5*q11-q3*q12, q4*q11-q3*q13, q2*q9-q1*q10, q5*q7-q4*q8, q5*q6-q3*q8, q4*q6-q3*q7, q9*q12^2-q10*q11*q13, q7*q10*q11-q8*q9*q12, q4*q10*q11-q5*q9*q12, q2*q7*q11-q1*q8*q12, q2*q4*q11-q1*q5*q12, q5*q8*q10-q2*q12^2, q5*q7*q10-q2*q12*q13, q4*q7*q10-q2*q13^2, q5*q6*q10-q2*q11*q12, q3*q6*q10-q2*q11^2, q8^2*q9-q6*q7*q10, q5*q8*q9-q1*q12^2, q5*q8*q9-q2*q11*q13, q5*q8*q9-q4*q6*q10, q5*q7*q9-q1*q12*q13, q4*q7*q9-q1*q13^2, q5*q6*q9-q1*q11*q12, q4*q6*q9-q1*q11*q13, q3*q6*q9-q1*q11^2, q5^2*q9-q3*q4*q10, q2*q6*q7-q1*q8^2, q2*q4*q6-q1*q5*q8, q2*q3*q4-q1*q5^2]): # 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: