Experiments of Datalog using DLV

Guohui Xiao

  1. Download DLV from http://www.dlvsystem.com/dlv/. Just use the version “static, no ODBC support”. Rename it to “dlv” or “dlv.exe” according to your platform.

  2. As an example, suppose that we have a Datalog file graph.dlv representing a graph

    
        e(1,2).
        e(2,3).
        e(1,4).
    
    and another Datalog file reach.dlv for computing the reachability of the graph
    
        reach(X, Y) :- e(X, Y).
        reach(X, Y) :- reach(X, Z), e(Z, Y).
    
    Then we can compute the model of the Datalog program:
    $ dlv graph.dlv reach.dlv
    DLV [build BEN+ODBC/Dec 17 2012   gcc 4.2.1 (Apple Inc. build 5666) (dot 3)]
    
    {e(1,2), e(1,4), e(2,3), reach(1,2), reach(1,3), reach(1,4), reach(2,3)}
    
    If we are only interested in the predicate `reach`, we can add a filter to the output.
    $ dlv graph.dlv reach.dlv -filter=reach
    DLV [build BEN+ODBC/Dec 17 2012   gcc 4.2.1 (Apple Inc. build 5666) (dot 3)]
    
    {reach(1,2), reach(1,3), reach(1,4), reach(2,3)}
    

    For more information, read the manual of DLV up to the Section "Definite Rules". Note that in this exercise, we do not use disjunctions or negations.

  3. Solve Exercise 3.1 using the following facts:
    
        eb(1,2).
        eb(1,3).
        eb(2,4).
    
        ew(2,1).
        ew(2,5).
        ew(5,6).
    
  4. Solve Exercise 3.2 using the following facts:
    
        flight(1, 2, a1).
        flight(2, 3, a1).
        flight(3, 4, a1).
        flight(4, 2, a1).
    
        flight(4, 5, a2).
        flight(5, 6, a2).
        flight(6, 1, a2).
    
        flight(6, 7, a3).
        flight(7, 8, a3).
        flight(8, 1, a3).
    
  5. Solve Exercise 3.5 using the following facts:
    
        e(1,2).
        e(2,3).
        e(4,5).
        e(5,5).
        e(5,6).
        e(6,4).