  void computeKernelLatticeBasis(const vector<Degree>& degrees,
				 BigIdeal& basis,
				 const string& originalFilename) {
    string filename = "__4ti2.tmp";

    deleteFile(filename + ".lat");
    deleteFile(filename + ".mat");
    deleteFile(filename);

    writeDegrees(degrees, filename);
    string cmd = "zbasis -parb --quiet " + filename + " > /dev/null";
    system(cmd.c_str());
    readLatticeBasis(filename + ".lat", basis);

    deleteFile(filename + ".lat");

    cmd = "mv -f " + filename + " " + originalFilename + ".mat";
    system(cmd.c_str());
  }


  void computeGrobnerBasis(const BigIdeal& latticeBasis,
			   BigIdeal& grobnerBasis,
			   const string& outputFilename) {
    string filename = "__4ti2.tmp";

    deleteFile(filename + ".gro");
    deleteFile(filename + ".lat");
    deleteFile(filename);
    
    writeLatticeBasis(filename + ".lat", latticeBasis);
    string cmd = "groebner -parb --quiet " + filename + " > /dev/null";
    system(cmd.c_str());
    readGrobnerBasis(filename + ".gro", grobnerBasis);

    deleteFile(outputFilename);

    cmd = "mv -f " + filename + ".gro " + outputFilename;
    system(cmd.c_str());

    deleteFile(filename + ".lat");
  }
