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.
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).
- 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.
- a where a is an atom or not a where a is a predicate 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
- 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)
- 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.
- 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.
Answer set(s) of a program prog
is computed as follows :
$ asperix n prog
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
as the maximum nesting level accepted for functional terms
- 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
The current implementation is a prototype version numbered 0.2.5
(ASPeRiX is distributed under the GNU Public Licence
and is implemented by Christopher Béatrix
and Claire Lefèvre
and Pascal Nicolas
- 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