#===================================================================== # # Maple input for the Example Set used in Section 8.2 of the paper: # Truth Table Invariant Cylindrical Algebraic Decomposition # R. Bradford, J.H. Davenport, M.England, S. McCallum and D. Wilson # #===================================================================== # GenerateInput(n, alg) is a function to provide input for running CAD commands in Maple. # - n should be an integer between 1 and 29 and references the problem number. # - alg should be a string, either "CAD" or "TTICAD". # "CAD" provides input suitable for building sign-invariant CADs using either: # - Projection and Lifting implemented in the ProjectionCAD Package (FullCAD in Table 2); # - Regular Chains implemented in the RegularChains Library of Maple (Maple in Table 2). # "TTICAD" provides input for building truth table invariant CAD by Projection and Lifting implemented in Projection CAD Package (TTICAD in Table 2). GenerateInput := proc(n::integer, algorithm::string) local L, vars, pols, Polys: L := [ #1: Intersection A (IntA) [[[[x^2-(1/2)*(y^2)-(1/2)*z^2,x*z+z*y-2*x,z^2-y],[]]],[z,y,x]], #2: Intersection B (IntB) [[[[x^2-(1/2)*(y^2)-(1/2)*z^2,x*z+z*y-2*x,z^2-y],[]]],[z,x,y]], #3: Random A (RanA) [[[[4*x^2+x*y^2-z+(1/4),2*x+y^2*z+(1/2),x^2*z-(1/2)*x-y^2],[]]],[z,y,x]], #4: Random B (RanB) [[[[4*x^2+x*y^2-z+(1/4),2*x+y^2*z+(1/2),x^2*z-(1/2)*x-y^2],[]]],[x,y,z]], #5: Intersection \dagger A (Int\daggerA) [[[x*z+z*y-2*x,[]],[z^2-y,[2*x^2-y^2-z^2]]],[z,y,x]], #6: Intersection \dagger B (Int\daggerB) [[[x*z+z*y-2*x,[]],[z^2-y,[2*x^2-y^2-z^2]]],[z,x,y]], #7: Random \dagger A (Ran\daggerA) [[[16*x^2+4*x*y^2-4*z+1,[]],[4*x+2*y^2*z+1,[2*x^2*z-x-2*y^2]]],[z,y,x]], #8: Random \dagger B (Ran\daggerB) [[[16*x^2+4*x*y^2-4*z+1,[]],[4*x+2*y^2*z+1,[2*x^2*z-x-2*y^2]]],[z,x,y]], #9: Ellipse \dagger A (Ell\daggerA) [[[x^2+y^2-1,[]],[b^2*x^2-2*b^2*x*c+b^2*c^2+a^2*y^2-a^2*b^2,[-a,a-1,-b,b-1,-c,c-1]]],[y,x,c,b,a]], #10: Ellipse \dagger B (Ell\daggerB) [[[x^2+y^2-1,[]],[b^2*x^2-2*b^2*x*c+b^2*c^2+a^2*y^2-a^2*b^2,[-a,a-1,-b,b-1,-c,c-1]]],[x,y,c,b,a]], #11: Solotareff \dagger A (Solo\daggerA) [[[3*x^2-2*x-a,[-(x^3-x^2-a*x-2*b+a-2),-(4*a-1),4*a-7,-(x+1),x]],[3*y^2-2*y-a,[-(y^3-y^2-a*y-a+2),-(4*b+3),4*b-3,-y,y-1]]],[y,x,b,a]], #12: Solotareff \dagger B (Solo\daggerB) [[[3*x^2-2*x-a,[-(x^3-x^2-a*x-2*b+a-2),-(4*a-1),4*a-7,-(x+1),x]],[3*y^2-2*y-a,[-(y^3-y^2-a*y-a+2),-(4*b+3),4*b-3,-y,y-1]]],[y,x,a,b]], #13: Collision \dagger A (Coll\daggerA) [[[x^2-2*x*t+t^2+4*y^2-80*y+396,[-t]],[x^2-2*x*a*t+5*a^2*t^2+4*y^2-8*y*a*t-4,[-a]]],[y,x,t,a]], #14: Collision \dagger B (Coll\daggerB) [[[x^2-2*x*t+t^2+4*y^2-80*y+396,[-t]],[x^2-2*x*a*t+5*a^2*t^2+4*y^2-8*y*a*t-4,[-a]]],[t,x,y,a]], #15: Kahan A (Ex33A) [[[8*y^3*x+8*y*x^3+20*y^3+84*y*x^2+288*y*x+324*y,[-225*x^2-324*x+63*y^2-4*x^4-52*x^3+12*y^2*x+4*y^4]],[2*y,[2*x+9]],[8*y,[8*x^2+56*x+8*y^2+96]],[y,[x^2+7*x+y^2+12]],[8*y^3*x+8*y*x^3+20*y^3+84*y*x^2+288*y*x+324*y,[-4*x^4-52*x^3-252*x^2+12*y^2*x-540*x+36*y^2+4*y^4-432,4*x^4+52*x^3+225*x^2-12*y^2*x+324*x-63*y^2-4*y^4]],[2*y,[-2*x-6,2*x]],[8*y,[-8*x^2-56*x-8*y^2-96,2*x^2+8*x+2*y^2]]],[y,x]], #16: Kahan B (Ex33B) [[[8*y^3*x+8*y*x^3+20*y^3+84*y*x^2+288*y*x+324*y,[-225*x^2-324*x+63*y^2-4*x^4-52*x^3+12*y^2*x+4*y^4]],[2*y,[2*x+9]],[8*y,[8*x^2+56*x+8*y^2+96]],[y,[x^2+7*x+y^2+12]],[8*y^3*x+8*y*x^3+20*y^3+84*y*x^2+288*y*x+324*y,[-4*x^4-52*x^3-252*x^2+12*y^2*x-540*x+36*y^2+4*y^4-432,4*x^4+52*x^3+225*x^2-12*y^2*x+324*x-63*y^2-4*y^4]],[2*y,[-2*x-6,2*x]],[8*y,[-8*x^2-56*x-8*y^2-96,2*x^2+8*x+2*y^2]]],[x,y]], #17: ArcSin A (AsinA) [[[-2*x*y,[y^2-x^2+1]],[16*y^3*x-16*y*x^3+8*y*x,[1-4*x^2+4*y^2+4*x^4-24*x^2*y^2+4*y^4]],[y,[1-x]],[y,[x+1]]],[y,x]], #18: ArcSin B (AsinB) [[[-2*x*y,[y^2-x^2+1]],[16*y^3*x-16*y*x^3+8*y*x,[1-4*x^2+4*y^2+4*x^4-24*x^2*y^2+4*y^4]],[y,[1-x]],[y,[x+1]]],[x,y]], #19: Example Phi (JSC) A (Ex\PhiA) [[[x^2+y^2-1,[4*x*y-1]],[x^2-8*x+16+y^2-2*y,[4*x*y-4*x-16*y+15]]],[y,x]], #20: Example Phi (JSC) B (Ex\PhiB) [[[x^2+y^2-1,[4*x*y-1]],[x^2-8*x+16+y^2-2*y,[4*x*y-4*x-16*y+15]]],[x,y]], #21: Example Psi(JSC) A (Ex\PsiA) [[[x^2+y^2-1,[x*y-1/4]],[[],[(x-4)^2+(y-1)^2-1,(x-4)*(y-1)-1/4]]],[y,x]], #22: Example Psi(JSC) B (Ex\PsiB) [[[x^2+y^2-1,[x*y-1/4]],[[],[(x-4)^2+(y-1)^2-1,(x-4)*(y-1)-1/4]]],[x,y]], #23: 3D Example A (Ex25A) [[[x^2+y^2+z^2-1,[4*x*y*z-1]],[x^2-8*x+y^2-2*y+z^2-4*z+20,[4*y*x*z-8*y*x-4*x*z+8*x-16*y*z+32*y+16*z-33]]],[z,y,x]], #24: 3D Example B (Ex25B) [[[x^2+y^2+z^2-1,[4*x*y*z-1]],[x^2-8*x+y^2-2*y+z^2-4*z+20,[4*y*x*z-8*y*x-4*x*z+8*x-16*y*z+32*y+16*z-33]]],[z,x,y]], #25: JSC Random Example 1 (Rand1) [[[-55*x-94*y+87*z-56,[ -62*y+97*z-73]],[[],[-4*x-83*y-10*z+62,-75-10*x^2-7*x*y-40*x*z+42*y*z-50*z^2]]],[x,y,z]], #26: JSC Random Example 2 (Rand2) [[[-81*x-6*y-51*z-29,[-14*x-48*y+97*z-12]],[[],[83*x-24*y-8*z+47,60+46*y-31*x^2-91*x*y+98*x*z+2*y^2]]],[x,y,z]], #27: JSC Random Example 3 (Rand3) [[[-77*x+38*y+42*z+8,[-6*x+23*y+76]],[[],[-11*x+79*y+49*z-40,-51-4*y+29*z-44*x*y+65*x*z+56*y^2]]],[x,y,z]], #28: JSC Random Example 4 (Rand4) [[[27*x-95*y+84*z+48,[14*x+64*y-88*z+18]],[[],[56*x+96*y+77*z+54,-94+90*x^2+85*x*y-72*x*z-2*y^2+32*z^2]]],[x,y,z]], #29: JSC Random Example 5 (Rand5) [[[5*x-5*y-43*z+51,[-45*x+30*y+21*z-12]],[[],[82*x+23*y+63*z-67,48-90*y-14*z-75*x*y+77*x*z+38*y^2]]],[x,y,z]] ]: if n<=0 or n>nops(L) then error("First input, example number, is out of range"): else pols := L[n][1]: vars := L[n][2]: fi: if algorithm="CAD" then Polys := []: for L in pols do if type(L[1], list) then Polys := [op(Polys), op(L[1])]: else Polys := [op(Polys), L[1]]: fi: Polys := [op(Polys), op(L[2])]: od: return( Polys, vars ): elif algorithm="TTICAD" then return( pols, vars ): else error("Second input, algorithm type, should be \"CAD\" or \"TTICAD\".") fi: end proc: