Partial Implementation

of the Algorithm of Quantifier Elimination

by Cylindric Trigonometric Decomposition

for Trigonometric Polynomials

We want to solve:

Problem: Given a quantifier formula  in r variables, with f free variables, containing trigonometric polynomials, compute a quantifier free formula  in f variables equivalent to .

For formulas containing algebraic polynomials, there are many methods to attack the quantifier elimination problems. Implementations of some of these methods are also available:

We have chosen to adapt to the trigonometric case the method of George Collins, cylindrical algebraic decomposition.

Basically, this method decomposes first the space, cylindrically, into cells on which the polynomials that occur in the initial formula have constant sign. For each cell, a sample point is also provided. Once this phase is completed, an evaluation process takes place. The formula is evaluated at each sample point, after which, the evaluation process is carried iteratively, using the quantifiers, until the f-dimensional cells on which the formula is true are isolated.

We have adapted this method to the trigonometric case; a description of the algorithm, together with the background theory, can be found in RISC technical report 99-07. For experimental purposes, we have produced a partial implementation in C, built up on the package saclib.
 

Programs

 We publish here the executable program tpolqe (trigonometric polynomials - quantifier elimination). For the moment, there are versions for Linux and Irix.


  Release 1-02


  Release 1-01

 
Usage

Here is a sample of a run:



> tpolqe.linux
Input variables ( for example : (x,y,z) ): (x,y)
Input angle variables: ()
Number of free variables (between 0 and 2):
  1
Enter a prenex formula now:
(Ay)
[ (y^2 + x^2 - 2) > (0) ].

The input formula is equivalent to:
  [
   (x^2 - 2) > 0 /\
   (x + 1) < 0
  ]
  \/
  [
   (x^2 - 2) > 0 /\
   (x) > 0
  ]
 
>


(Ez)
[
  [
   (y^2+x y +x + 1)*sin(z)*cos(z) + (-1) = (0)
    \/
   (x^2+1)*cos(z) = (0)
  ]
  /\
  [(x-2)*sin(z)+(3) < (0)]
]. Remarks

Output

The program outputs: Remark  The program is able to perform its task for small inputs only: Collins' algorithm is doubly exponential in the number of variables, so the computation is very slow.

Although the program has been tested on a quite extensive set of examples, we expect that there are still some errors and bugs. If you find any, please submit a report to the address:

ppau@risc.uni-linz.ac.at