- From: Axel Polleres <axel.polleres@deri.org>
- Date: Wed, 11 Feb 2009 00:48:11 +0000
- To: "Public-Rif-Wg (E-mail)" <public-rif-wg@w3.org>
was: ACTION-703: Investigate implementations that will reject infinite rulesets Part 1: - I contacted implementers of Answer set programming engines. Although only the dlv [1] implementers got back to me, and I only tried out some unrestricted example with smodels/lparse [2], I summarize that this confirmed so far my impression that the general notion of safety we have at the moment which allows infinite ground programs would NOT be accepted by ASP engines without further restrictions. These systems need normally a stornger definition of safety, i.e. that each variable in the rule head is bound in a non-external body atom (not talking about discjunctions in bodies here). Part 2: There exist more sophisticated notions of safety such as e.g. strong saftey [3] which I will shortly sketch in the following. Other works which introduce classes of programs with infinite domains that can be dealt with in Answer set programming include [4,5] Now for strong safety, citing p.95 of [3]: "Informally, a rule is strongly safe, if its external atoms receive their input from a lower stratum of the program. This way, even if they occur in a cycle, their output cannot grow infinitely, since the size of their input is fixed "before entering" the cycle." External predicates are here somewhat like our built-in predicates, where each external predicate has input and output parameters, which we can model by binding patterns. That is, each external predicate has, without loss of generality the form f(Y, X), such that Y, X are vectors of parameters where Y are the inputs and X are the outputs of the predicate, i.e. there exists a binding pattern which guarantees that f has a finite extension if the values of Y are bound to fixed values. To ease the pain for you on going through the formal definitions in [3], I'll try to paraphrase it for our needs. I only consider rules without disjunction in the rule body here and do not consider external functions but only predicates, i.e. a rule set is a set of rules h(...) :- b1(...), ..., bk(...), f1(Y1, X1 ), ... fn(Yn, Xn ). where h(...) is the head, b1(...),...., bk(...) are ordinary predicates and f1(Y1, X1 ), ... fn(Yn, Xn ) are external predicates. ======================================================================== We first build a dependency relation R between all head and body atoms (ordinay or external) occurring in a ruleset P as follows: * if h occurs in head of a rule r and b in the body of r then add (h,b). * if b occurs in the body of a rule r and h in the head of r' such that b and h unify, then add (b,h) * if b is either an external predicate with x in its output variables X or an ordinary predicate with variable x, and b' is an external predicate with x in its input variables such that b,b' appear in the same rule body, then add (b',b). We say a depends on b if (a,b) is in R. We say a transitively depends on b, if (a,b) is in the transitive closure R* of R. We say a strictly depends on b if (a,b) in R* but not vice versa. We are now ready to define strong safety: Let r be a rule in P with external predicates f1(Y1, X1 ), ... fn(Yn, Xn ) in Body(r) Let further E be the set of all variables in the union of all variables in Yi, i.e. the union of all "input variables". Moreover, let S be the set of atoms b in Body(r), i.e. body atoms, such that Head(r) depends strictly on b. Let V be the set of all variables that occur in the ordinary atoms in S plus all variables in the output list of the external atoms in S . Then, r is strongly safe, iff r is safe in the traditional sense, i.e. all head variables appear in the body and additionally E is a subset of V. ======================================================================== Thas is just a simplified transcript of the definition in [3] which leaves out that rules there can also be negated with default negation, there could be more than one head predicate, and that actually predicates are allowed as "inputs" in the language used there. As you can verify: a(1) a(x) :- a(y), x = y +1. is not strongly safe following this definition, whereas. b(1). a(x) :- b(y), x = y +1. is. 1. http://www.dlvsystem.com 2. http://www.tcs.hut.fi/Software/smodels/ 3. Roman Schindlauer. Answer-Set Programming for the Semantic Web. PhD thesis, Vienna University of Technology, Austria, December 2006. http://www.kr.tuwien.ac.at/staff/former_staff/roman/papers/thesis.pdf 4. Mantas Šimkus and Thomas Eiter. FDNC: Decidable Non-monotonic Disjunctive Logic Programs with Function Symbols. LPAR 2007. http://www.springerlink.com/content/y75377w6mp3p1595/ 5. F. Calimeri, S. Cozza, G. Ianni, N. Leone. "Computable Functions in ASP: Theory and Implementation". Proceedings of the 24th International Conference on Logic Programming -- ICLP'08, LNCS Vol. 5366, December 9--13, 2008, Udine, Italy. pp. 407--424. -- Dr. Axel Polleres Digital Enterprise Research Institute, National University of Ireland, Galway email: axel.polleres@deri.org url: http://www.polleres.net/
Received on Wednesday, 11 February 2009 00:48:58 UTC