#ifndef __InequalitySplitting__
#define __InequalitySplitting__
#include "Forwards.hpp"
#include "Lib/Stack.hpp"
#include "Kernel/Inference.hpp"
namespace Shell {
using namespace Lib;
using namespace Kernel;
class InequalitySplitting
{
public:
InequalitySplitting(const Options& opt);
void perform(Problem& prb);
bool perform(UnitList*& units);
private:
Clause* trySplitClause(Clause* cl);
Literal* splitLiteral(Literal* lit, UnitInputType inpType, Clause*& premise);
Literal* makeNameLiteral(unsigned predNum, TermList arg, bool polarity, TermStack vars);
bool isSplittable(Literal* lit);
bool isSplittableEqualitySide(TermList t);
Stack<Clause*> _predDefs;
unsigned _splittingTreshold;
bool _appify; };
};
#endif