#include "dimension.h"
#include "printer.h"
#include "parser.h"
#include "gfanapplication.h"
#include "division.h"

class DoesIdealContainApplication : public GFanApplication
{
  FieldOption theFieldOption;
public:
  const char *helpText()
  {
    return "This program takes a Groebner basis of an ideal I and a set of polynomials on its input and tests if the polynomial set is contained in I by applying the division algorithm for each element. The output is 1 for true and 0 for false.\n";
  }
  DoesIdealContainApplication()
  {
    registerOptions();
  }
  char *name()
  {
    return "_doesidealcontain";
  }
  int main()
  {
    FileParser P(Stdin);
    PolynomialSet a=P.parsePolynomialSet();
    PolynomialSet b=P.parsePolynomialSet();

    bool c=true;
    for(PolynomialSet::const_iterator i=b.begin();i!=b.end();i++)
      {
	if(!division(*i,a,LexicographicTermOrder()).isZero())
	  {
	    AsciiPrinter(Stderr).printPolynomial(*i);
	    c=false;
	    break;
	  }
      }
    AsciiPrinter(Stdout).printInteger(c);

    return 0;
  }
};

static DoesIdealContainApplication theApplication;
