ASPeRiX
The program
ASPeRiX is an implementation of the stable model semantics for normal logic programs.
The main specifity of our system is to realize a forward chaining of first
order rules that are grounded on the fly. So, unlike others available ASP
systems, ASPeRiX does not need a pregrounding processing.
Language
ASPeRiX 0.2 is able to deal directly with any normal logic
program containing rules with variables, function symbols and lists.
The only syntactic restriction is the
safety of rules, ie:
all variables occurring in the rule
must also occur in its positive body (cf below for details).
- Rule
- head., head :- body., or :- body. where head is a predicate atom and body a list of literals separated by commas.
A rule is safe if each variable that appears in the rule appears also in a predicate atom or on the left side of an assignment atom of the positive body of the rule.
- Literal
- a where a is an atom or not a where a is a predicate atom.
- Atom
- a predicate atom, a relational atom or an assignment atom.
- Predicate atom
- a predicate symbol (symbolic constant), optionally followed by a parenthesized list of terms. Additionally,
a rule head can be a predicate symbol followed by a parenthesized list of range terms.
- Relational atom
- comparison between two arithmetic expressions or two symbolic constants. Operators are ==, !=, <, <=, >, >=.
Equality and inequality operators can also be used for functional terms. Relational atoms can only occur in the positive body of a rule
- Assignment atom
- variable = term. Assignment atoms can only occur in the positive body of a rule
- Term
- a symbolic constant, a numeric constant, an arithmetic expression, a functional term or a variable
- Symbolic Constant
- a string of letters, digits and underscores starting with a lower case letter, or a sequence of characters enclosed within double quotes
- Numeric constant
- an integer in [-k .. k] interval. Maximum integer constant is given by -N option (1024 by default)
- Functional term
- a functor (symbolic constant) followed by a parenthesized list of terms. Maximum nesting level is given by -F option (16 by default)
- Variable
- a string of letters, digits and underscores starting with an upper case letter
- Range term
- has form t1 .. t2 where t1 and t2 are numeric constants or variables
- Arithmetic expression
- built with numeric constants, variables, binary operators +, -, * , / and mod, unary operator abs, and parenthesis. An arithmetic expression must be grounded when evaluated.
Directives
- show / hide
- these directives allow to hide some predicates when printing answer sets of a program.
By default, all predicates are shown and a predicate named p with arity k
can be hidden by #hide p/k..
The directive #hide. without arguments hides all predicates,
and the #show p/k. directive can then be used to tell what atoms have to be printed.
Usage
Answer set(s) of a program
prog is computed as follows :
$ asperix n prog
where
n is the (maximum) number of answer sets to be computed (zero indicates all). If
n is missing, only one answer set is computed.
Option
-N k fixes the interval of integer constant accepted as
[-k..k]
Option
-F k fixes
k as the maximum nesting level accepted for functional terms
Examples
- Birds flying or not
- a stratified program birds.aspx
- Towers of hanoi
- an example with lists issued from DLV-complex home page.
hanoi.aspx is the original DLV-complex program adapted for ASPeRiX (disjunctions and short notation for lists removed).
hanoiBIS.aspx is an improvement of the preceding.
- Generic system for computing recursive arithmetic function
- an example with arithmetic and functions generic.aspx
Download
The current implementation is a prototype version numbered 0.2.5
ASPeRiX0.2 source package.
(ASPeRiX is distributed under the
GNU Public Licence
and is implemented by
Christopher Béatrix
and
Claire Lefèvre
and
Pascal Nicolas)
Version history
- ASPeRiX 0.2.5 (september, 2013)
- lists and built-in predicates on lists added, true negation (-p) added
- ASPeRiX 0.2.4 (april, 2010)
- bug fixes
- ASPeRiX 0.2.3 (november, 2009)
- special version with 2 operators on lists : @ (member) and !@ (not member)
- ASPeRiX 0.2.2 (june, 2009)
- bug fix (thanks to Alessandro Dal Palu' who reported it)
- ASPeRiX 0.2.1 (june, 2009)
- bug fixes
- ASPeRiX 0.2 (april, 2009)
- functional terms added, arithmetic expressions accepted anywhere in a rule
- ASPeRiX 0.1 (june, 2008)
- first prototype version