//This is the ideal Fourier invariants. ring rQ = 0,(q1,q2,q3,q4,q5,q6),dp; ideal Invariants = q5^2-q4*q6, q3*q5-q2*q6, q3*q4-q2*q5, q2*q4-q1*q6, q2^3-q1*q3^2; // This is the inverse of the Fourier transform. matrix ptoq[7][6] = 1/64,9/64,3/32,9/64,9/32,21/64, 9/64,9/64,-9/32,45/64,9/32,-63/64, 9/64,9/64,-9/32,9/64,-27/32,45/64, 9/32,-27/32,9/16,9/32,-9/16,9/32, 3/64,27/64,9/32,-9/64,-9/32,-21/64, 9/32,9/32,-9/16,-27/32,9/16,9/32, 3/32,-9/32,3/16,-9/32,9/16,-9/32; // This is the ring of probability distributions. ring rP = 0,(p1,p2,p3,p4,p5,p6,p7),dp; //This is the Fourier transform. matrix qtop[6][7] = 1,1,1,1,1,1,1, 1,1/9,1/9,-1/3,1,1/9,-1/3, 1,-1/3,-1/3,1/3,1,-1/3,1/3, 1,5/9,1/9,1/9,-1/3,-1/3,-1/3, 1,1/9,-1/3,-1/9,-1/3,1/9,1/3, 1,-1/3,5/21,1/21,-1/3,1/21,-1/7; 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,(b0,b1,e0,e1),dp; ideal P = b0^2*e0^4+3*b0^2*e1^4+6*b0*b1*e0^3*e1+6*b0*b1*e0*e1^3+12*b0*b1*e1^4+3*b1^2*e0^4+6*b1^2*e0^3*e1+6*b1^2*e0*e1^3+21*b1^2*e1^4, 9*b0^2*e0^3*e1+9*b0^2*e0*e1^3+18*b0^2*e1^4+72*b0*b1*e0^2*e1^2+72*b0*b1*e0*e1^3+72*b0*b1*e1^4+27*b1^2*e0^3*e1+72*b1^2*e0^2*e1^2+99*b1^2*e0*e1^3+126*b1^2*e1^4, 18*b0^2*e0^2*e1^2+18*b0^2*e1^4+18*b0*b1*e0^3*e1+36*b0*b1*e0^2*e1^2+90*b0*b1*e0*e1^3+72*b0*b1*e1^4+18*b1^2*e0^3*e1+90*b1^2*e0^2*e1^2+90*b1^2*e0*e1^3+126*b1^2*e1^4, 18*b0^2*e0^2*e1^2+36*b0^2*e0*e1^3+18*b0^2*e1^4+72*b0*b1*e0^2*e1^2+288*b0*b1*e0*e1^3+72*b0*b1*e1^4+126*b1^2*e0^2*e1^2+396*b1^2*e0*e1^3+126*b1^2*e1^4, 3*b0^2*e0^3*e1+3*b0^2*e0*e1^3+6*b0^2*e1^4+6*b0*b1*e0^4+12*b0*b1*e0^3*e1+12*b0*b1*e0*e1^3+42*b0*b1*e1^4+6*b1^2*e0^4+21*b1^2*e0^3*e1+21*b1^2*e0*e1^3+60*b1^2*e1^4, 18*b0^2*e0^2*e1^2+36*b0^2*e0*e1^3+18*b0^2*e1^4+36*b0*b1*e0^3*e1+108*b0*b1*e0^2*e1^2+108*b0*b1*e0*e1^3+180*b0*b1*e1^4+36*b1^2*e0^3*e1+162*b1^2*e0^2*e1^2+216*b1^2*e0*e1^3+234*b1^2*e1^4, 24*b0^2*e0*e1^3+36*b0*b1*e0^2*e1^2+72*b0*b1*e0*e1^3+36*b0*b1*e1^4+36*b1^2*e0^2*e1^2+144*b1^2*e0*e1^3+36*b1^2*e1^4; // 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(1,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; }