December 17th, 2012

Remove restriction on the maximum number of variables per rule or constraint (used to be 60). Rules and constraint may now contain arbitrarily many variables.

Add support for lists: as in Prolog we support [term_1,...,term_n] and [Head|Tail] notations. Add new built-ins for handling lists (#append/3, #flatten/2, #length/2, #member/2, #reverse/2, #delnth/3, #getnth/3, #insLast/3, #insnth/4, #head/2, #tail/2, #last/2, #subList/2).

Add option -maxlist that specifies the maximal length of lists.

Add new built-ins #rand/1 and #rand/3 for the generation of a pseudo-random integer, and new built-in #int/3.

Magic sets are also applied on ground and propositional queries now.

Add option -print-magic for printing the magic-set-rewritten program.

Rename option -maxfuncnesting to -maxnesting.

Correctly handle situations when having both aggregates and function symbols.

Bug fixes with magic sets (concerning built-ins, function symbols and corner-cases such as empty IDB).

A few minor bug fixes.
December 21st, 2011

Add full support for dynamic magic sets. Right now this optimization is the default for programs with partially or fully bound queries under brave or cautious reasoning, which do not contain negation, constraints, and aggregates. It is currently not applicable on programs containing aggregates, and is known to be correct only on super-coherent programs.

Accordingly, when evaluating ground queries no longer print a witnessing answer set by default. This can be enabled again using the new command-line option --witness.

Make aggregates more robust, for example when a guard is bound with a non-integer value or a non-variable appears among the free variables.

Change the implementation of functional terms to make them first order citizens of the language. Fully support functions inside of built-in predicates.

Add a new builtin #absdiff that calculates the absolute value of the difference of two numbers.

Implement a new termination checker improving the recognition of finite domain programs, widening the class of programs with functions that is automatically detected.

Allow for negated builtins.

Address several user reported bugs related to internal optimizations in the grounding, aggregates, functions and the combination thereof.

Assorted documentation improvements.

x86-64 Linux/FreeBSD version now available.

October 14th, 2010

Add support for functional symbols, converting arithmetic built-ins to become functions now so that, with the exception of #int they “return” a deterministic value and require all but the last argument to be bound. Among others this allows omitting the definition of #maxint in many cases. (Function symbols generally start with a lower case letter, unlike variables which start with an upper case letter.) Introduce new built-ins #mod, #prec, - and / along the way.

In case of programs with arithmetic predicates or functional terms, a finite domain check (enabled by default) is performed in order to verify if termination is guaranteed. New command-line options -nofinitecheck and -finitecheck have been added in order to control the use of this check.

Allow for computing the well-founded model. This is triggered by the command-line option --well-founded, short -wf.

Add support for range facts for truely negative literals.

Ground aggregates are now supported in input and their output matches what we have been using in papers.

Significantly improve the speed of the grounding by means of an on-demand indexing strategy. In the process of this, the grounding has seen a number of internal cleanups and simplifications.

Make the dynamic body reordering a bit more predictable in corner cases and improve the accuracy of the heuristics (by reassessing them during recursion).

Fix a memory leak and associated crashes on export in the ODBC code.

As far as aggregates go, lift some unnecessary checks around safety for built-ins within aggregates, and fix a bug or two for more complicated scenarios.

To avoid confusion for users and undesirable effects, DLV now detects and warns about cases where a free variable in one aggregate appears in some other aggregate.

Ensure overflow of built-in arithmetics (addition, multiplication) is detected and handled properly.

DLV no longer prints the empty model when invoked without input.

Various code and documentation cleanups (including the online manual where -nofacts and how to write comments are now covered and the output of the -help option), simplifications, and refactoring. Increase code robustness.

Plug a (small) memory hole or two.
October 11th, 2007

Introduce named constants that can be set like #const X = 12.

Improved handling of ranges such as f(X..Y); no longer print range facts as IDB, but properly handle as EDB.

Assorted bug fixes for assignment aggregates, aggregates over the empty set or undefined predicates, and rules with several aggregates.

Add indices to the grounding, including support for aggregates and recursive predicates, which significantly benefits performance in many cases. Avoid the generation of duplicate rules in some initial optimizations. Identify cyclic dependencies between aggregates and bail out in that case. Fix two corner cases, including an issue with backjumping as related to aggregates. Tweak performance, among others by not computing some house keeping data (selectivities) for negative literals.

Fix a crash which could occur for programs with more than 2^15 predicate names.

Make error messages and warnings more consistent. Improve the error message for cases where #maxint is less than the maximum integer occurring in input and when encountering a free variable in #sum, #times, #min or #max which is not an integer. Properly exit with an error code when the grounding fails.

Many improvements to the ODBC interface, including better interoperability, increased stability, better support for larger data sizes and a revamped #export infrastructure.

Several internal cleanups and infrastructure changes in the direction of functional builtins. Increase portability as verified by tests with a wider range of compilers. Make the diagnosis frontend (nearly) reentrant. Handle more error conditions (in user input) gracefully without exiting immediately.

Improved online documentation, especially regarding aggregates, and document non-ground queries.

July 14th, 2006

Support iODBC in addition to unixODBC and offer ODBC support for GNU/Linux, MacOS, and MinGW targets.

Issue warnings when #import and/or #exports statements are used, yet the build does not contain the ODBC interface.

Implement a new version of the backjumping algorithm used in the grounding. This includes improved handling of aggregates. Handle bound literals more efficiently during grounding.

Speed up subsumption checking.

Handle strings of unlimited length throughout all of DLV.

Normalized auxiliary predicate names, which is useful when feeding the output of instantiation back to DLV or other solvers, for example. Revamp handling of internal predicates on the way.

Add a new heuristic criterion based on the degree of support of non-HCF atoms (cf. the LPNMR’05 paper by Faber and Ricca).

Avoid model checks if the program is known to be head cycle free and the GUS computation is active, as all model checks will succeed in this case.

Fix bugs in the propagation of #max aggregates, which could cause some answer sets not being found. Also improve handling of #min aggregates.

More than the usual quota of internal cleanups.

January 12rd, 2006

Add backjumping to the instantiator. This significantly speeds up the generation of ground programs in several relevant examples, and is basically performance neutral in the worst case.

Tune the handling of aggregates with respect to dynamic body reordering in the instantiator, such that aggregates boiling down to variable assignments are considered before other aggregates.

Extend #import to handle predicates that are used as IDB as well.

Check the safety of non-ground queries, and issue an error in case.

Also accept the empty string (“”) as a constant now.

For the planning frontend, apply the mutual exclusion stratifiablity check only if the program is unstratified.

Address several minor memory leaks when parsing aggregates and in the grounding. Fix a minor issue with model generation related to #min and #max aggregates.

Address some corner case in the model checker.

Simplify several internals in the grounding and slightly speed up subsumption checking.

Make GCC 3.4 the default compiler we are using, up from GCC 2.95.

Replace the original, Cygwin-based Windows port by one based on MinGW; only the single DLV binary is needed now!

Finally, also the manual has seen several fixes and refinements since our previous release!

As you can see from the list of changes above, many of these stem from the use of DLV for real-world applications. Overall, this release comprises 50+ changesets!

February 23rd, 2005

Support = in addition to == to denote built-in equality; deprecate the == form.

Major restructuring in the ODBC interface code, including the following user-visible changes: Improve the implementation of #export, and add support for more than one #export statement in one program. Change the format of the #import command, including type and conversion specifiers.

Improve the manual with sections on PostgreSQL and the ODBC interfaces in general. Address some typesetting issues and one issue wrt. set versus multiset in the section on aggregates. Minor tweaks to the command-line help as well.

Add options -ORb[-] and -ORp[-] which allow to selectively enable/disable the basic and projection rewritings. Previously, only the projection rewriting was disabled by -OR-, now also the basic rewriting.

Address some corner-case where sets in aggregates were not dealt with properly and improve checks for variables in aggregates in general. Fix a bug in the propagation of truth values in #min/#max aggregates.

Avoid some unnecessary propagations in the Model Generator.

Adress a minor issue wrt. the costs for weak constraints. Properly diagnose rules, constraints,… with more variables than the grounding can handle.

Adjustments in the heuristics on the sizes of tables (predicates) which guide the grounding.

May 23rd, 2004

dlv -v now prints the version, and dlv without any options provides usage info instead of assuming empty input.

When only computing the grounding (with -instantiate), DLV version information is now always emitted as a comment, plus we made some further changes to make -instantiate output valid input for both DLV and Lparse.

Command-line options -filter= and -pfilter= now also accept comma separated lists of predicate names.

Several improvements in the online manual, especially concerning aggregates; remove all remaining traces of obsolete command-line options -FB and -FC.

Properly detect and diagnose the (incorrect) use of true negation for terms. Detect and diagnose all misuses of true negation for atoms at once, instead of just the first occurrence.

Improve the new model checking optimizations introduced with the previous release to increase performance (selectively perform model checks also forwards, combine partial checks forwards and backwards, avoid checks forwards for HCF programs). Fix a correctness issue. Remove command-line options -OPb; introduce -OPf- to control partial model checks.

Improve the dynamic body reordering of the integrated grounded module, fix handling of #succ(X,X), +(X,X,Y), *(X,X,Y) and similiar duplicate occurrences of some variable in builtins, slightly improve the storage of input data, and avoid duplicate work in some corner case.

Add support for non-ground queries.

Add support for subsumption testing and elimination, enabled by a new command-line option -OS.

Lots of bug fixes and refinements in the DLVK frontend, including

  • proper handling of cyclic dependencies among executability conditions,
  • section actions, fluents,always, initially, and goal can now appear in any order in the input,
  • new support for levelled action costs,
  • fix handling of <= and ==,
  • fix a bug for #min over an empty set,
  • improve handling of duplicate aggregates functions,
  • detect and warn about total -f, and generally improve the error messages in the parser.

Handle weak constraints with weight zero.

Many fixes and improvements wrt. aggregates.

Improve statistics output, and continue work to make DLV useful as a module.

Significant work on the ODBC interface (which is not part of the public releases yet).

May 16th, 2003

Significant performance improvements for model checking (especially on hard instances of SigmaP2 problems).

Language enhancements:

  • Support for aggregates (#count, #min, #max, #sum, #times), including detailed documentation.
  • Facts of the form f(X..Y) where X and Y are (variables bound to) integers are now supported.

Various changes and improvements in DLVK , including support for FORBIDDEN ... AFTER ..., quoted strings as identifiers, more efficient translations, and new options -planminactions and -planmaxactions. Also we now just warn (instead of refusing to proceed) if the background knowledge is unstratified. In any case, though, it still has to have a unique answer set!

Various changes in statistics (option -stats), including the addition of “structural size“, improved support of statistics when using option -instantiate, and new statistics “Partial Model Check time” and “Total Model Check time” where “Model Checker time” now is the sum of these two.

Assorted fixes related to option -wctrace, memory usage, and subset-minimal diagnosis a la Reiter.

Remove command-line options -OMb and -OMb-, the former of which has been default for years and is now hard-wired. Rename options -FB and -FC to -brave and -cautious, respectively, still supporting the old variants for backwards compatibility.

Add a new option -satlike which, when used with -instantiate, allows for using DLV as external instantiator more easily and efficiently.

April 12th, 2002

A bug-fix release with a hugely improved DLVK frontend.

Several memory leaks have been fixed. The parser is now a bit more strict, but a query doesn’t need to be followed by a newline any longer. Several fixes and improvements wrt. weak constraints; options -costbound and -wctrace are now mutually exclusive. Improved statistics output, and statistics are provided in more (corner) cases.

Lots of enhancements and fixes to DLVK , including new support for planning with costs, extended syntax for inertial, new forbidden macro, new options -FPsoundcheck and -FPcompletecheck, and much more! The output has been slightly changed. Specifying a goal is now mandatory.

June 11th, 2001

Significant improvements of heuristics employed by the Model Generator. Specifically, we now weigh the cost of both taking a literal true and taking it false, and we reduced the cost of computing heuristics in many relevant cases. (See our forthcoming IJCAI and LPNMR papers for details.) Note that, while this brings nice speedups in general, there are, as usual with heuristics, specific cases which may experience some slowdown.

Adopt a stronger pruning operator on head-cycle free programs. This coincides with the well-founded operator on disjunction-free programs, but keeps the linear-time efficiency of Fitting’s operator on acyclic programs.

Planning Frontend: Add proper checks whether the planning domain in input is proper (Pun intended). A new command-line option -planlength=<N> allows setting the maximum plan length.

Minor bug-fixes in the grounder (option -OG1) and Model Generator (linear-time operators). Better frontend interfaces, which will allow for an easier integration and maintainance of (further) frontends. Small performance tweaks in the Model Generator and Checker.

Significant performance gains in the grounder due to the use of advanced data structures (similar to those used in database systems) and algorithmic improvements.

Weak Constraints. New command-line option -costbound allows to print those answer sets with cost lower than a specified value.

Completely remove the distinction between EDB and IDB predicates. Both f(X) :- g(X). f(1). and f(1). f(X) :- g(X). are now correct inputs for DLV.

Command-line option -stats revamped; among others it includes the number of choice-points and the number of answer sets printed. And last but not least, the command-line option -n=<N> now works correctly with the planning frontend when security checks are performed.

October 15, 2000

Language and Functionality A new language feature, namely weak constraints (with weights, layers, or both; see BLR97b for details), has been added, together with a new command-line option -costbound=<n> to perform optimization tasks. New command-line option -instantiate that prints the grounded version of the input program. New command-line option -det that prints the deterministic consequences of the input program, which is a superset of the well-founded semantics approximating the intersection of all answer sets. Use lexicographic comparison when dealing with string literals and constant symbols (instead of a fixed, but arbitrary ordering). Model Checker The model checking strategy has been improved and the SAT checker SATZ has been integrated into the system. These measures led to a tremendous performance improvement (up to 2 orders of magntude) in internal tests. Error Messages and Bugfixes Several error messages have been improved, a small memory leak has been plugged, some minor bugs that would only trigger under rare circumstances have been fixed. A few minor improvements and fixes in the K planning frontend.

April 5, 2000

Frontends New planning frontend for the language K, which is a logic-based planning language well-suited for representing incomplete knowledge. Include the existing inheritance frontend directly into the dlv kernel, also making various improvements. Grounding Lots of changes to data structures and algorithms bring a significant speed-up for applications with huge amount of data. Parsing It is now possible to specify facts for IDB predicates. In other words, input like f(X) :- g(X). f(1). works just fine now. With the next release we plan also support the symmetric case: f(1). f(X) :- g(X).thus completely removing the distinction between EDB and IDB. #maxint can be set from the datalog input by means of the new #maxint=127. construct. Improve a couple of error messages. The parser is stricter in several instances now, but does not abort upon the first error any longer. Change the name from dlv to DLV officially.

November 24, 1999

Significant speed-up of the Model Checker for hard problems (up to a factor of 25 on overall execution time for some examples). Significant improvement of various internal data structures; much better performance when parsing and grounding large input; support for programs of unlimited size. Reduced memory consumption. New command-line option “--” that makes dlv operate as a filter. The SQL Frontend is now invoked by means of the new command-line option -FS. Improved error handling and various minor fixes.

October 16, 1999

Add a special grounding pass for propositional input. Beef up heuristics used by the Model Generator. Most incredible speedup of the dependency graph handler (which is used all over the system). Lots of tweaks to the Model Checker, plus we don’t invoke the full Checker for trivial problems any more. Change data structures to significantly reduce memory consumption on hard problems; this is also somewhat faster. In addition, fix two huge memory leaks. Optimize input preprocessing and fix treatment of some corner-cases. Fix a bug in the Grounding which could (in theory) have led to the loss of models. The timers are now more acurate and fine-grained, but must be run on a completely unloaded machine.

What does this mean in practice? One of the instances of prime implicants in our internal benchmarks suite, for example, went from 10.272s to 0.980s on a Pentium II/400 running FreeBSD. ;-)

June 08, 1999

Add heuristics to the Model Generator, which results in quite some speedup on hard instances; this can be disabled by -OH-. Two examples illustrate the progress we have recently made:

April 06 1999 May 28 1999 June 08 1999
Blocksworld P4 > 1000s 194s 39s
Hamilton Path (25 nodes, 60 arcs) > 1000s 716s 12.7s

Improve error handling in the parser. Use egcs 1.1.2 instead of egcs 1.1 on all platforms except alpha-dec-osf4.0; upgrade i386-unknown-freebsd2.2.7 to i386-unknown-freebsdelf3.1; add a i386-pc-solaris2.7 port.

May 28, 1999

Improved “propagation of deterministic consequences”, which prunes the search space significantly bringing relevant performance gains. Apply relational database techniques which reduce the size of the ground instantiation; this can be disabled by -OR-. By default, input facts are now included in the output as well; new options -facts and -nofacts control this feature. Allow for “;” and “|” as alternate notions for disjunction; the keywords “non” and “not” are now case-sensitive. Significantly increase the maximal number of predicates and constants; remove obsolete options -OCi and -pipe; bugfix, where in some cases a “,” was omitted when printing models.

Apr 06 1999

Numerous performance improvements, mostly in the model generator: new “must-be-true” truthvalue made explicit; more efficient backtracking; enhanced propagation code; additional propagations because of “must-be-true”; improved program preprocessing. Bugfix concerning the model checker and generator interaction; in the Reiter subset minimal diagnosis frontend, additional checks on the theory’s validity are performed; better statistics. Finally, we do no longer provide a binary for i386-linux-elf-gnulibc1.

Feb 10 1999

Linear time operators for deterministic inferences for rules and constraints and other major improvements in the Model Generator; linear time operators also for the well-founded computation; more efficient storage of interpretations which also significantly reduces memory consumption; possibly true literals instead of conjunctions in the Model Generator; improved Grounding in the presence of negative literals; command-line option -OV* has been obsoleted; new option -OMb-; significant improvements of the Model Checker; for rather hard instances, the model generator of dlv itself is now invoked to solve the co-NP complete problem of model checking. Altogether, we are happy to report the following improvements over those results presented in our KR’98 paper (run on the same machine, of course):

KR’98 now
Prime implicants (47 variables, 202 clauses) 1628.5s 0.3s
Strategic Companies (71 companies, 213 products) 2348.8s 45.4s

Nov 21 1998

Correctly handle hypotheses in heads in the Reiter’s diagnosis frontend; .obs and .hyp files no longer set the -FD mode automatically; various major bugfixes in the diagnosis frontend; improvements in the model checker.

Nov 09 1998

Allow [0,0] as range for integers; various fixes in the diagnosis frontend.

Oct 15 1998

Support for filtering (a.k.a. projections); highly improved model checker; employ a Fitting-style operator by default; bugfix speeding up certain disjunctive programs tremendously; more intuitive and less misleading output; sparc-sun-solaris2.6 instead of sparc-sun-solaris2.5.1; and of course many small bugfixes.

Sep 11 1998

New i386-unknown-freebsd2.2.7 and i386-linux-elf-gnulibc2 ports; first version built with egcs 1.1 instead of egcs 1.0.3a; removed various kludges needed for gcc 2.7.2; new option -OM- to disable Model Checking; option -silent now causes omission of all empty lines in output; synchronized command-line help and manual; added support for anonymous variables.

Sep 05 1998

Official release of full-fledged manual. (Note that we plan to continually update and improve this; only major changes will be mentioned in this version history.)

Aug 14 1998

New i386-linux-elf-gnulibc1 port; queries are treated more efficiently (datalog, brave and cautious frontends); support for 3=2+1 form of integer arithmetics; -O0 really turns off all optimisations now; various bugfixes concerning constraints and “undefined” atoms; small updates concerning the usage message; various code clean-ups.

Aug 06 1998

New built-ins #int/1 and #succ/2 plus +/3 and */3; alternate option -n=all equivalent to -n=0; support queries in the datalog frontend (i.e., without brave or cautious reasoning); correctly process negative literals in queries; various changes with regard to constraints (no error message if a constraint is always violated, bug fixes,…); removed option -gderes and made -silent more so.

Jul 10 1998

Massive reduction in the amount of memory required (especially on alpha-dec-osf4.0); full support for logical built-ins <,<=, >=, >,==, <> resp. !=(modulo safety requirements); new command-line option -N and predefined constant #maxint.

May 18 1998 New version built with egcs 1.0.3a instead of gcc 2.7.2. Various minor (and not so minor) efficiency enhancements; finer user control over grounding optimizations; support for constraints in theory and further sanity checks in the diagnosis frontend; revamped command-line help; full support for integer constants; cosmetic changes.

May 12 1998

Pre-announcement: We plan to release a new version within 10 days.

Jan 07 1998

Enhanced command-line help (try -help); minor bug-fix (undefined literals in constraints).

Dec 23 1997

New alpha-dec-osf4.0 port; minor bug-fixes.

Dec 01 1997

Full support for Reiter’s diagnosis.

Previous versions

…did not carry a real version identification.