//This is the ideal Fourier invariants. ring rQ = 0,(q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11),dp; ideal Invariants = q10^2-q9*q11, q8*q10-q7*q11, q4*q10-q3*q11, q8*q9-q7*q10, q4*q9-q3*q10, q8^2-q6*q11, q7*q8-q6*q10, q4*q8-q2*q11, q7^2-q6*q9, q3*q7-q2*q9, q4*q6-q2*q8, q3*q6-q2*q7, q5^2-q2*q10, q5^2-q3*q8, q5^2-q4*q7, q4^2-q1*q11, q3*q4-q1*q10, q2*q4-q1*q8, q3^2-q1*q9, q2*q3-q1*q7, q2^2-q1*q6; // This is the inverse of the Fourier transform. matrix ptoq[11][11] = 1/64,3/32,3/32,3/32,3/8,1/64,3/32,3/32,1/64,3/32,1/64, 1/16,3/8,0,0,0,1/16,0,0,-1/16,-3/8,-1/16, 1/16,0,3/8,0,0,-1/16,0,-3/8,1/16,0,-1/16, 1/16,0,0,3/8,0,-1/16,-3/8,0,-1/16,0,1/16, 3/64,9/32,-3/32,-3/32,-3/8,3/64,-3/32,-3/32,3/64,9/32,3/64, 3/16,0,0,-3/8,0,-3/16,3/8,0,-3/16,0,3/16, 3/16,0,-3/8,0,0,-3/16,0,3/8,3/16,0,-3/16, 3/64,-3/32,9/32,-3/32,-3/8,3/64,-3/32,9/32,3/64,-3/32,3/64, 3/16,-3/8,0,0,0,3/16,0,0,-3/16,3/8,-3/16, 3/64,-3/32,-3/32,9/32,-3/8,3/64,9/32,-3/32,3/64,-3/32,3/64, 3/32,-3/16,-3/16,-3/16,3/4,3/32,-3/16,-3/16,3/32,-3/16,3/32; // This is the ring of probability distributions. ring rP = 0,(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11),dp; //This is the Fourier transform. matrix qtop[11][11] = 1,1,1,1,1,1,1,1,1,1,1, 1,1,0,0,1,0,0,-1/3,-1/3,-1/3,-1/3, 1,0,1,0,-1/3,0,-1/3,1,0,-1/3,-1/3, 1,0,0,1,-1/3,-1/3,0,-1/3,0,1,-1/3, 1,0,0,0,-1/3,0,0,-1/3,0,-1/3,1/3, 1,1,-1,-1,1,-1,-1,1,1,1,1, 1,0,0,-1,-1/3,1/3,0,-1/3,0,1,-1/3, 1,0,-1,0,-1/3,0,1/3,1,0,-1/3,-1/3, 1,-1,1,-1,1,-1,1,1,-1,1,1, 1,-1,0,0,1,0,0,-1/3,1/3,-1/3,-1/3, 1,-1,-1,1,1,1,-1,1,-1,1,1; ideal Fourier = qtop*transpose(maxideal(1)); // This is the list of polynomial invariants. map F = rQ, Fourier; ideal PInvariants = F(Invariants); // This is the polynomial parametrization. ring r = 0,(d0,d1,d2,d3),dp; ideal P = d0^4+d1^4+d2^4+d3^4, 4*d0^3*d1+4*d0*d1^3+4*d2^3*d3+4*d2*d3^3, 4*d0^3*d2+4*d0*d2^3+4*d1^3*d3+4*d1*d3^3, 4*d0^3*d3+4*d0*d3^3+4*d1^3*d2+4*d1*d2^3, 6*d0^2*d1^2+6*d2^2*d3^2, 12*d0^2*d1*d2+12*d0*d1^2*d3+12*d0*d2^2*d3+12*d1*d2*d3^2, 12*d0^2*d1*d3+12*d0*d1^2*d2+12*d0*d2*d3^2+12*d1*d2^2*d3, 6*d0^2*d2^2+6*d1^2*d3^2, 12*d0^2*d2*d3+12*d0*d1*d2^2+12*d0*d1*d3^2+12*d1^2*d2*d3, 6*d0^2*d3^2+6*d1^2*d2^2, 24*d0*d1*d2*d3; // This checks that the polynomial parametrization // lies on the probability simplex. // It requires suma.sing. Most likely, you should // change the directory where you saved this file. // If you do have this file, you should uncomment // the following two lines. // < "/home/lgp/singular/suma.sing"; // Suma(Substitute(3,P)); // This checks that the PInvariants vanish at // the polynomial parametrization. map Evaluate = rP, P; // The following command takes a lot of space and time to // finish for larger models. // ideal Z = Evaluate(PInvariants); setring rP; ideal Z; int i; for (i=1; i<= size(PInvariants); i++) { i; Z = PInvariants[i]; setring r; Evaluate(Z); setring rP; }