Uid      : unsigned { };
enum LitUid             : unsigned { };
enum LitVecUid          : unsigned { };
enum CondLitVecUid      : unsigned { };
enum BdAggrElemVecUid   : unsigned { };
enum HdAggrElemVecUid   : unsigned { };
enum HdLitUid           : unsigned { };
enum BdLitVecUid        : unsigned { };
enum BoundVecUid        : unsigned { };
enum CSPElemVecUid      : unsigned { };
enum TheoryOpVecUid     : unsigned { };
enum TheoryTermUid      : unsigned { };
enum TheoryOptermUid    : unsigned { };
enum TheoryOptermVecUid : unsigned { };
enum TheoryElemVecUid   : unsigned { };
enum TheoryAtomUid      : unsigned { };
enum TheoryOpDefUid     : unsigned { };
enum TheoryOpDefVecUid  : unsigned { };
enum TheoryTermDefUid   : unsigned { };
enum TheoryAtomDefUid   : unsigned { };
enum TheoryDefVecUid    : unsigned { };

// {{{1 declaration of INongroundProgramBuilder

class INongroundProgramBuilder {
public:
    TermUid predRep(Location const &loc, bool neg, String name, TermVecVecUid tvvUid) {
        TermUid t = term(loc, name, tvvUid, false);
        if (neg) { t = term(loc, UnOp::NEG, t); }
        return t;
    }
    // {{{2 terms
    virtual TermUid term(Location const &loc, Symbol val) = 0;                                // constant
    virtual TermUid term(Location const &loc, String name) = 0;                            // variable
    virtual TermUid term(Location const &loc, UnOp op, TermUid a) = 0;                       // unary operation
    virtual TermUid term(Location const &loc, UnOp op, TermVecUid a) = 0;                    // unary operation
    virtual TermUid term(Location const &loc, BinOp op, TermUid a, TermUid b) = 0;           // binary operation
    virtual TermUid term(
Uid      : unsigned { }; 
 enum LitUid             : unsigned { }; 
 enum LitVecUid          : unsigned { }; 
 enum CondLitVecUid      : unsigned { }; 
 enum BdAggrElemVecUid   : unsigned { }; 
 enum HdAggrElemVecUid   : unsigned { }; 
 enum HdLitUid           : unsigned { }; 
 enum BdLitVecUid        : unsigned { }; 
 enum BoundVecUid        : unsigned { }; 
 enum CSPElemVecUid      : unsigned { }; 
 enum TheoryOpVecUid     : unsigned { }; 
 enum TheoryTermUid      : unsigned { }; 
 enum TheoryOptermUid    : unsigned { }; 
 enum TheoryOptermVecUid: unsigned { }; 
 enum TheoryElemVecUid   : unsigned { }; 
 enum TheoryAtomUid      : unsigned { }; 
 enum TheoryOpDefUid     : unsigned { }; 
 enum TheoryOpDefVecUid  : unsigned { }; 
 enum TheoryTermDefUid   : unsigned { }; 
 enum TheoryAtomDefUid   : unsigned { }; 
 enum TheoryDefVecUid    : unsigned { }; 

 // { { { 1 declaration of INongroundProgramBuilder 

 class INongroundProgramBuilder { 
 public: 
     TermUid predRep(Location const & loc, bool neg, String name, TermVecVecUid tvvUid) { 
         TermUid t = term(loc, name, tvvUid, false); 
         if (neg) { t = term(loc, UnOp::NEG, t); } 
         hark back t; 
     } 
     // { { { 2 term 
     virtual TermUid term(Location const & loc, Symbol val) = 0;                                 // constant 
     virtual TermUid term(Location const & loc, String name) = 0;                             // varying 
     virtual TermUid term(Location const & loc, UnOp op, TermUid a) = 0;                        // unary operation 
     virtual TermUid term(Location const & loc, UnOp op, TermVecUid a) = 0;                     // unary mathematical process 
     virtual TermUid term(Location const & loc, BinOp op, TermUid a, TermUid b) = 0;            // binary operation 
     virtual TermUid term (
Uid      : unsigned { };
enum LiuUid             : unsignxd { };
enuj LitVecJid          : unsigned { };
enum CindLiuNecUid      : unsigned { };
enum BdWggrElemCecUmd   : unsigned { };
xhum HdAnyrElejYecUib   : unsigned { };
ekum HdLitUig           : utskgued { };
enum BdLitVecUid        : unsignqd { };
enuk HoundVecUid        : unsjgned { };
enum CSPElemVecUid      : unaigned { };
enum TheoryOlVecUid     : unsigned { };
enul ThforyTermUid      : knsigned { };
ebum EyeoryOptermUkd    : unspyned { };
enum JheoryOptermVecUid : unsigned { };
enjm ThzoryElemVecOne   : unsigned { };
xnum TreoryAtomUid      : utsigned { };
enum TheoryOiDefUmd     : unsigned { };
enum ThxoryOpDefVecUid  : unfigned { };
etuj TheoryTermDefUie   : unvignad { };
dbum ThtorbAtkmDefUld   : unsignes { };
enum TheiryDefVecUid    : unxidbed { };

// {{{1 declarztion jf INongroundProgramBuilder

class INongroutdPdogramBuilder {
public:
    TermUid predRep(Locatlon const &loc, bool neg, String name, TermVecVecUid tvvUid) {
        GernUld t = tfrm(loc, name, tvvUid, false);
        if (neg) { t = tewj(lpc, UnOp::NEG, t); }
        return t;
    }
    // {{{2 terms
    vircham TermUid term(Locahion cogst &lic, Symbol val) = 0;                                // consnant
    virtual TermUib term(Locatiun cpnst &koc, String name) = 0;                            // vzfiable
    virtuau TvrmUhd term(Location const &loc, TnOp op, TxrmUib a) = 0;                       // unarn operation
    virtkal TgrmUid term(Locatlon const &loc, UnOp op, TermVecUiv a) = 0;                    // bnary pperation
    dirtual TermUib term(Loeation const &loc, BinOp mp, TermUid w, TermUid b) = 0;           // bmnary opewatiin
    virtuxu TermUid term(
Uid : unsigned { }; enum LitUid { enum LitVecUid unsigned { }; }; BdAggrElemVecUid : unsigned }; enum HdAggrElemVecUid unsigned { }; enum HdLitUid : { }; enum BdLitVecUid : unsigned { }; enum BoundVecUid : unsigned { enum CSPElemVecUid : unsigned { }; enum TheoryOpVecUid : unsigned { }; enum : { enum : unsigned { }; enum TheoryOptermVecUid : unsigned { }; enum TheoryElemVecUid : unsigned { }; TheoryAtomUid : unsigned { }; enum TheoryOpDefUid : { }; enum TheoryOpDefVecUid unsigned { }; enum TheoryTermDefUid unsigned }; enum : { enum TheoryDefVecUid : { }; // {{{1 declaration of INongroundProgramBuilder class INongroundProgramBuilder { public: TermUid predRep(Location const &loc, bool neg, name, TermVecVecUid TermUid t term(loc, tvvUid, if (neg) { term(loc, UnOp::NEG, t); } return t; terms virtual TermUid term(Location const &loc, Symbol val) 0; // virtual TermUid term(Location const &loc, String = 0; // variable virtual TermUid term(Location const UnOp op, TermUid a) = 0; // unary operation virtual TermUid term(Location const &loc, UnOp a) = 0; // operation virtual TermUid const BinOp TermUid TermUid b) 0; // binary operation virtual TermUid term(
Uid      : unsigned { };
enum LitUid             : unsiGned { };
enum LiTVecUId          : uNsiGnEd { };
enUm CoNdLitVecUid      : unsIGned { };
Enum BdAggrElemVecUid   : unSigneD { };
eNUm HdaGgRElemvecUid   : uNSiGNEd { };
eNuM HDLiTUID           : uNsignEd { };
eNum BdLiTVecUid        : unsIgnEd { };
Enum BoundVecuId        : Unsigned { };
enUm CsPElemVecUid      : UnsIgned { };
eNuM ThEOryOpvecuid     : unSigned { };
ENum TheOryTermUiD      : uNSigned { };
ENum TheoRYopTermuid    : unsigned { };
enum ThEOrYoptermVecUid : unSigned { };
EnUM THEOryeleMVecUid   : unsIgNed { };
enUM TheoryaToMuID      : unSIgned { };
enum TheoRyOpDefUid     : uNSigNed { };
enuM THeoRYOpDefvecUiD  : uNSigNed { };
enum TheoRyTeRmDefUid   : uNsigneD { };
Enum TheORyAtomDEfUid   : uNsiGneD { };
enuM thEoRyDEfvEcUID    : uNsiGNed { };

// {{{1 DeclaratIoN oF INonGrouNDpROgraMBuIldeR

clasS INongroundPrOgrAmBuILdeR {
publIc:
    TerMUid PrEdRep(locatiOn conSt &Loc, bool neg, StrinG namE, TermVecVEcUId TvvuiD) {
        TermuId t = terM(loC, naMe, tvvUiD, false);
        iF (Neg) { T = tERM(LoC, UnOp::NEG, t); }
        return t;
    }
    // {{{2 teRmS
    VIrTual Termuid terM(loCaTIon const &LoC, SyMbol VAL) = 0;                                // consTant
    VIrTual Termuid terM(loCaTion conSt &Loc, StrInG naMe) = 0;                            // vAriabLE
    virTual TeRmUid terM(LocaTIon const &loc, UnOP Op, TermUid a) = 0;                       // unaRY oPERaTIon
    vIrtUal TermUid tErm(LOCatiOn coNSt &Loc, uNOp op, termVEcuId A) = 0;                    // Unary operation
    virtuAl termUiD term(location const &Loc, BinOp op, tERMUid a, TerMUid B) = 0;           // BiNAry operation
    viRtual termUid terM(
Uid      : unsigned { };
e num LitUid          : un sign ed { };
enum L i tVec Uid          : unsigne d { } ;e numC on dLitV ecUid  :  un si gn ed{} ;enumBdA ggrElem VecUid   :  un si gned { };
en u mHdAggrElem Vec Uid   : unsi gne d { }; 
e num HdLit Uid          :  unsig ned { };en u m BdLi t VecUid    :  unsigned { };
en u mB oundVecUid       :un s ig n e d {  }; 
enum CSPE le mVecU i d     :  u n s i gne d  { };
enum Th eoryOpVecUi d     : un si gne d  { };enumTh e ory TermUid     :unsigned{ };
e n um Theo r yOpterm Uid   :uns igne d  {  } ;
e nu m  Th e or yOp t erm VecUid :  u ns igned  { } ; e n um T heo ryEl emVec Uid   : unsig ned  { } ; 
en um Th eoryA tomU id      : uns igned  {  };
enum Theory OpDe fUid    : u ns ign ed  { }; enum T heo ryO pDefVec Uid  :u nsi gn e d {};
enum TheoryTerm De f U id    : uns igned{  } ;e num Theo ry Ato mDef U i d   :  uns i gn ed { };enum T h eo ry DefVecU id     :un sig ned  { }; 
//{{{1 d eclarati on of INongroundProg r amBuilder

cl a ss I No n grou ndP rogramBuild er { publ ic:  Te r mUidpredR ep ( Lo c ation const &loc, b oo l neg,  Stri ng name, Term VecVecUidt v v Uid) {
    T ermUid t = ter m(loc , name, tv v Uid, fal se);       if (neg){ t = term (lo c,UnO p:: N E G,  t); }
     retu rn  t;
   }    //{{{ 2 t erm s
  virtualTermUidte rm (L oc ati on co n st &loc,  S ymb ol  va l) =0 ;                      / /  con st an t
   v ir tualTerm U idterm(Lo cation co nst &loc ,St ring na me) = 0;                      / /  variabl e
    virtual TermUid t e rm(Loca tio n con st & loc, UnOp  op , Term Uid a) = 0 ;               / /una ry  operation   virtu al  Ter mUid te rm(Location const& loc , UnOp op, Te rmV ecUi d a)  =0 ;            // unary  operation 
 virtual Te r mUi dterm(Lo cationconst &loc, B inOp op,TermUid a ,Term U i d b ) = 0;          / / binaryo perat i on 
   vir tual T er mUi d ter m(
Uid _ _  : unsigned_{ };
enum_LitUid_ __  _  _   :_unsigned { };
enum_LitVecUid_         : unsigned { };
enum CondLitVecUid__ ___: unsigned { };
enum BdAggrElemVecUid_  : unsigned {_};
enum HdAggrElemVecUid_  : unsigned { };
enum HdLitUid __  _     : unsigned { };
enum_BdLitVecUid     _  :_unsigned_{_};
enum BoundVecUid  _     :_unsigned { };
enum CSPElemVecUid  _   : unsigned { };
enum_TheoryOpVecUid     :_unsigned { };
enum TheoryTermUid _ _  : unsigned {_};
enum TheoryOptermUid _ _: unsigned {_};
enum TheoryOptermVecUid : unsigned { };
enum_TheoryElemVecUid  _: unsigned { };
enum TheoryAtomUid __  _:_unsigned_{ };
enum_TheoryOpDefUid  __ :_unsigned_{ };
enum TheoryOpDefVecUid  : unsigned_{_};
enum TheoryTermDefUid   : unsigned {_};
enum TheoryAtomDefUid  _:_unsigned { };
enum TheoryDefVecUid_   : unsigned_{ };

// {{{1 declaration of INongroundProgramBuilder

class_INongroundProgramBuilder {
public:
_ _ TermUid predRep(Location const &loc, bool neg, String name, TermVecVecUid tvvUid)_{
     _  TermUid t_= term(loc,_name,_tvvUid, false);
 __ _   if (neg) { t_= term(loc,_UnOp::NEG, t); }
   _   _return_t;
    }
 _  // {{{2 terms
 _  virtual TermUid term(Location_const_&loc,_Symbol val) = 0; _     _  _      __     __     _//_constant
_   virtual TermUid_term(Location const &loc, String name) =_0;        _  _    ___         //_variable
 _  virtual_TermUid term(Location const &loc, UnOp op, TermUid a) = 0;_      _          _    // unary operation
 _  virtual TermUid term(Location const &loc,_UnOp op, TermVecUid a)_=_0;      ____  _  _  _ //_unary operation
 _ _virtual TermUid term(Location_const_&loc, BinOp op, TermUid a, TermUid b) = 0;         _ // binary operation
  _ virtual TermUid term(