Skip to content
Difflog: Synthesizing Datalog Programs using Numerical Relaxation
Scala Makefile Python Other
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


What is this repository for?

This repository contains the implementation of the Difflog differentiable Datalog system. This includes an evaluator for Difflog programs and a system to learn classical Datalog programs from input-output data.

This forms the code and benchmark data for our IJCAI 2019 paper titled "Synthesizing Datalog Programs Using Numerical Relaxation."

How to compile, build, and run Difflog?

  1. Install sbt. We recommend a version >= 1.1.1.

  2. Run the command sbt compile.

  3. To use Difflog to synthesize Datalog programs, invoke sbt and issue the following commands at the ensuing prompt:

    [info] ...
    sbt> run alps src/test/resources/ALPS/data/path.d src/test/resources/ALPS/templates/ HybridAnnealingLearner NaiveEvaluator L2Scorer 0.01 1000

    The system will momentarily print logging information and the final synthesized program and associated metrics.

  4. In general, the synthesis command is of the form:

    run alps data.d learnerName evaluatorName scorerName targetLoss numIters

    For the learner, evaluator, scorer, target loss and number of iterations, we recommend the values HybridAnnealingLearner, NaiveEvaluator, L2Scorer, 0.01 and 1000 respectively.

    Several data.d and files can be found in the src/test/resources/ALPS directory. The user is encouraged to create new benchmarks patterned on these files.

You can’t perform that action at this time.