A framework for the integration of Logic Programming in external systems for generic applications, conceived in order to help developers at designing and implementing complex reasoning tasks by means of logic-based solvers on different platforms.
Note that DLV, DLV2 and Solver.Planning.Domains can also be used on Android.
The framework has been designed to be easily extensible and adaptable to different solvers and platforms. Solvers can be invoked in different ways: via REST API as for Solver.Planning.Domains, native binary execution as for most of the "desktop solvers", library invocation as in the Android solvers, or any other way that can be implemented using the OOP paradigm.
The general architecture of EmbASP is depicted in the following figure: it is intended as an abstract framework to be implemented in some object-oriented programming language.
In addition, this architecture can be specialized for different platforms, logic languages and solvers.
The figure also reports general dependencies among the main modules.
The framework architecture has been designed by means of four modules:
In the following, we denote with "solver" a logic-based system that is meant to be used by external application with the help of EmbASP.
Base module defines the basic components of the Framework.
Handler component mediates the communication between the Framework and the user that can provide it with the input program(s) via the component
InputProgram, along with any desired solver's option(s) via the component
Service component is meant for managing the chosen solver executions.
Two different execution modes can be made available: synchronous or asynchronous.
While in the synchronous mode any call to the execution of the solver is blocking (i.e., the caller waits until the reasoning task is completed), in asynchronous mode the call is non-blocking: a
Callback component notifies the caller once the reasoning task is completed.
The result of the execution (i.e., the output of the logic system) is handled by the
Output component, in both modes.
Platforms module is meant for containing what is platform-dependent; in particular, the
Service components from the
Base module that should be adapted according to the platform at hand, since they take care of practically launching solvers.
DesktopHandler manages the
DesktopService for the execution of the solver on a Desktop platform, and, in a similay way, the
AndroidHandler manages the
AndroidService on an Android platform.
Languages module defines specific facilities for each supported logic language.
Mapper component is conceived as an utility for managing input and output via objects, if the programming language at hand permits it.
The sub-module ASP comprises components such as
ASPInputProgram that adapts
InputProgram to the ASP case, while
AnswerSets, composed of a set of
AnswerSet, represents the
Output for ASP.
ASPMapper allow the management of ASP input facts and answer sets via objects.
The Datalog sub-module resembles the ASP sub-module very closely:
DatalogInputProgram is the Datalog equivalent of
MinimalModels is the equivalent of
MinimalModel is the equivalent of
DatalogMapper is the equivalent of
Similarly, the sub-module PDDL includes
Specialization module defines what is system-dependent; in particular, the
OptionDescriptor components from the
Base module should be adapted in order to effectively interact with the solver at hand.
In particular, this module contains specific extensions for the different solvers of the
SPDDesktopService) and the
There are also the extensions of the
AnswerSets for ASP language (
ClingoAnswerSets) of the
Plan for PDDL language (
SPDPlan), and of the
MinimalModels for the Datalog language (
For a complete documentation regarding EmbASP, visit our page on readthedocs.org.
It provides a detailed description about EmbASP implementations and some examples of EmbASP usage.
The framework is released under The MIT License (MIT).
The framework library for DLV on Android embeds the DLV system itself, which is free for academic and non-commercial educational use, as well as for use by non-profit organizations. For further information about DLV, please refer to the DLVSystem Ltd. home page.
DLVfit is a health and fitness app that monitors the user activity during the day and suggests some workout plans that depend on her age, weight, gender and goals. The app periodically stores some information about the user activities (running, walking, etc.) and infers the current amount of calories burned so far. When the user asks for a workout plan, DLVfit proposes a set of exercises that would allow the user to reach her daily goal, taking into account also to her preferences. The suggested workout plans are computed in the background by DLV via EmbASP.
The ASP program used within DLVfit can be found in the repository. Basically, the program guesses for possible fitness exercises to do in order to burn the remaing calories. Each answer set represent a possible workout plan, in which is ensured that the user's requirements about the calories to burn and the time to spend in the workout are respected. Moreover, also user's preferences are taken into account by means of weak constraints.
You can download the latest version of DLVfit here.
The app should work on most devices equipped with Android 4.x/5.x.
The list of compatible devices include (but it is not limited to):
GuessAndCheckers is a native mobile application that works as an helper for users that play "live" games of the (Italian) checkers (i.e., by means of physical board and pieces). The app, that runs on Android, can help a player at any time: by means of the device camera a picture of the board is taken, and the information about the current status of the game is properly inferred thanks to OpenCV, an open source computer vision and machine learning software; an ASP-based artificial intelligence module then suggests the move.
Thanks to EmbASP and the use of ASP, GuessAndCheckers features a fully-declarative approach that made easy to develop and improve several different strategies, also experimenting with many combinations thereof.
The source code of this application along with the Android Application Package (APK) are available online.
You can download the latest version of GuessAndCheckers here.
DLVEdu is an educational Android App for children, that integrates well-established mobile technologies, such as voice or drawn text recognition, with the modeling capabilities of ASP. In particular, it is able to guide the child throughout the learning tasks, by proposing a series of educational games, and developing a personalized educational path. The games are divided into four macro-areas: Logic, Numeric-Mathematical, Memory, and Verbal Language. The usage of ASP allows the application to adapt to the game experiences fulfilled by the user, her formative gap, and the obtained improvements.
The application continuously profiles the user by recording mistakes and successes, and dynamically builds and updates a customized educational path along the different games. The application features a "Parent Area", that allows parents to monitor child's achievements and to express some preferences, such as explicit filters of some games or educational areas.
Connect4 is an application that allows a user to play the popular Connect Four game (also known as Four-in-a-Row) against an ASP-based artificial player.
The Connect Four game is played by two opponents on a vertical 7*6 rectangular board. At each turn, the players fill the board by dropping 1 disk into one of the column so that it falls from the top to the lowest unoccupied position in the column. The winner is the first player who gets four of her disks in a line, connected either horizontally, vertically, or diagonally.
Different AIs have been implemented, ranging from the most powerful one implementing advanced techniques for the perfect play to the simplest one relying on some classical heuristic strategies. By using EmbASP, two different versions of the same app have been built: one for Android, making use of DLV, and one for Java-enabled desktop platforms, making use of clingo.