#ifndef _HLCL_
#define _HLCL_ 
#include "array.h"
#include "clause.h"
#include "memory.h"
#include "state.h"
#include "term.h"
#include "trail.h"
#include "twfo.h"
typedef struct HLCL_HELP {
  SCLSTATE sclstate;
  TWFO twfo;
  MEMORY memory;
  ARRAY tautoterms;
  SUBST triviallyInstantiate;
  ARRAY active;
  unsigned maxsize;
  unsigned untilNext;
} HLCL_NODE,*HLCLSTATE;
HLCLSTATE hlcl_Create(SCLSTATE, TWFO);
void hlcl_Delete(MEMORY, HLCLSTATE);
ARRAY hlcl_CreateTautoTerms(SCLSTATE, TWFO);
void hlcl_Print(SCLSTATE, HLCLSTATE);
void hlcl_PrintTautoTerms(SCLSTATE, HLCLSTATE);
void hlcl_PrintStat(HLCLSTATE);
void hlcl_PrintScores(HLCLSTATE);
unsigned hlcl_ActiveAtoms(HLCLSTATE);
TERM hlcl_NextTrailLiteral(SCLSTATE, HLCLSTATE, TRAIL, TWFO);
void hlcl_UpdateBacktrack(SCLSTATE, HLCLSTATE, TRAIL, TWFO, unsigned);
void hlcl_UpdateRestart(SCLSTATE, HLCLSTATE, TRAIL, TWFO);
void hlcl_UpdateReduction(SCLSTATE, HLCLSTATE, TRAIL, TWFO);
BOOL hlcl_PerformReduction(SCLSTATE, HLCLSTATE);
void hlcl_UpdateNewResolution(SCLSTATE, HLCLSTATE, TERM, CLAUSE, SUBST, ARRAY);
void hlcl_UpdateLearnedClause(SCLSTATE, HLCLSTATE, TRAIL, CLAUSE, SUBST);
BOOL hlcl_ExtendActiveLiterals(SCLSTATE, HLCLSTATE, TRAIL, BOOL*);
BOOL hlcl_PerformSATTest(SCLSTATE, HLCLSTATE);
BOOL hlcl_PerformSATAbstraction(SCLSTATE, HLCLSTATE);
BOOL hlcl_IsApplicable(SCLSTATE);
#endif
