clingo 5.0.0
 - complete the C-interface
 - adjust reify to the new format
 - maybe additional functions/functionality to work with theory atoms
   - functions to output aspif rules
   - reify theory atoms (but not the rest of the program)
 - warnings about atoms not occurring in program should not talk about literals but atoms
   (p :- not q.)

planned for 4.5.*
 - --lparse-rewrite should produce gringo 4 aligned output
 - address _ in negated literals
 - add xor-constraints
 - add sort-constraint
  - order(B,A) :- (A, B) = #sort{ X : p(X) }.
  - order(A,B) :- ((_,A), (_,B)) = #sort{ K,X : p(X), key(X,K) }.
 - profiling
 - for 4.5.0 I added a priority queue for grounding 
   take a second look at this and possible port the complete rules to this
 - sorting via conditional literals became less efficient with the latest implementation in some cases 
 - projection is disabled in non-monotone constructs for now
   it could be enabled again if equivalences are used for affected atoms
 - auto detection of libraries
 - test complete API for ptyhon and lua in clingo-tests

postponed
  last error reported in first file
  csp-rewrite + output format
  shifting of disjunctions
  reified output
  improve warnings
    too many warnings are attached to -Wundefined-term
    change the options a bit
  language/API extensions in view of preferences
    lits: Model -> [(Atom, Bool)]
    turn terms into atoms
      x :- #assert(Atom, Sign), (Atom, Sign) = @luaCall().
    or
      x :- Atom, Atom = @luaCall().
  provide python/lua language bindings
  cleanup of gringo's domains using clasp's top-level assignment
  simplify one elementary head aggregates as in gringo-3
  how to handle projection in negative literals (_ or *)

*enlarge test suites*

constraints
  integrate constraint variables tighter into the gringo language
  any term can contain csp variables
  terms containing csp variables are called csp terms (except function symbols)
  only relations (and the second argument of disjoint constraint elements) can "handle" csp variables
  in all other places csp terms must be replaced by auxiliary variables (positional non-csp terms should be skipped)
  examples:
    p(f($X+3)) -> p(f(Aux)), Aux = $X+3
  problem:
    f($X+3) < g($Y+1)
    could be handled but is it really worth the effort?
    alternatively just replace the csp terms in function terms with auxiliary variables
      f($X+3) < g($Y+1) -> f(#A) < f(#B), #A = #X+3, #B = $Y + 1
    probably the second variant is the way to go (even if it is unsafe in the example)
  as a side effect relation literals with multiple relations would become available for normal terms too
    1 < X < 10 -> yay!
  translation of nested terms
    translate binary terms
    ...

incremental programs
  atm indexes have to be cleared and recreated afterwards 
    it might be a good idea to optimize this and reuse indices later on
	for now just clear them to not have them dangling around

output
  add a method to get a negated literal to save a few auxiliary symbols here and there
  add more test for disjunctions

missing features in view of the ASP standard
  queries

bullcrap
  enqueue: expr(X,Z,Val):-expr(X,Y,Val_1)?,sing_term(Y,Z,Val_2)?,Val=(Val_1+Val_2),#X0=(Val_1+Val_2),#X0=Val.
  handle assignments in a more clever way...

optimizations
  it would be nice to block grounding of rules if one index is empty
    (maybe even delaying the filling of indices if one index is empty)
  indices could be specialized to handle ground literals more efficiently
    there could be one domain for all zero-ary predicates 
  the current data structure allows for detecting ground progams
    do not implement a -g options again but automatically switch from grounding to direct output
  *very low priority*
    domains
      using a value as representation is wasteful
      uses one unordered_map to much
    predicate indices
      using a valvec as key is wasteful
      uses one unordered_map too much
    on large instances both optimizations should safe a lot of memory

building cppunit
  ./configure --enable-static CXX=clang++ CC=clang CXXFLAGS="-std=c++11 -stdlib=libc++" --disable-doxygen --enable-static --disable-shared --prefix=...
  make install
