- From: Axel Polleres <axel.polleres@deri.org>
- Date: Fri, 01 Jun 2007 22:36:32 +0200
- To: "Public-Rif-Wg (E-mail)" <public-rif-wg@w3.org>
Here some strawman thoughts for the issues around external vs logical
functions:
In the current RIF, there is not way to disambiguate between external
and logical functions.
Here, we have to consider several issues:
a) external functions
b) external predicates and binding patterns
c) what is the "input" to an external function/predicates
c) is probably a phase 2 issue.
ad a) we currently do not distinguish between logical and external
functions. external functions are distinct since they fix the
interpretation for a function term to a particular element of the domain.
The strawaman proposal here is to distinguish between
op and exop in UNITERMS
ie.
subclass Uniterm
property op: Const
| property exop: Const
In the concrete syntax, I would replace:
Uniterm ::= Const '(' TERM* ')'
with
Uniterm ::= '&'? Const '(' TERM* ')'
where '&' denotes an external function/predicate.
So, I am not sure whether or how such a disjunction (op | expo) would
be expressible in asn07. Anyway, let's assume we have fixed a), now for
ad b):
In many rule languages, e.g. Prolog, dlvhex, (I think also) FLORA,
there are not only external function terms but also external predicates.
These define possible binding patterns, ie. which parameters are input
and output values of the respective predicate,That is, certain 'input'
terms appearing in an external predicate term, have to be either ground
or have to appear positively elsewehere in the condition, e.g.
e.g. let us assume we have a predicate &Add(X,Y,Z).
allowing the following binding patterns:
&Add(+X,+Y,Z).
&Add(X,+Y,+Z).
&Add(+X,Y,+Z).
ie. at least 2 of the parameters have to be bound.
We need to clarify whether we want to support and enable exchange of
such binding patterns. One possiblity is that for external
predicates, one doesn't only declare a boolean sort in RIF core, ie.
for instance
:- signature &Add xs:long * xs:long * xs:long
but along with this also a set of allowed binding patterns, e.g.
:- bindingPattern &Add fbb,bfb,bbf,bbb
add c)
Yet other languages might have more powerful external
functions/predicates which take the *interpretation* of a predicate as
input, ie. you handle not only individuals and comnstants, but might
want to hand over the whole *extension* of a predicate, one such
language are HEX-predicate, by Eiter et al. [1]. Such external functions
predicates can e.g. emulate aggregates like count/min/max, e.g.
an external function:
&count(answer)
returning the number of tuples in the predicate answer which are true.
I think though, such general external predicates are rather a phase 2
issue/requirement than phase one
best,
axel
[1] A Uniform Integration of Higher-Order Reasoning and External
Evaluations in Answer Set Programming
Thomas Eiter, Giovambattista Ianni, Roman Schindlauer, Hans Tompits
Proceedings of the 19th International Joint Conference on Artificial
Intelligence (IJCAI-05), pages 90-96. Professional Book Center, 2005.
http://www.kr.tuwien.ac.at/staff/eiter/et-archive/ijcai05-hex_asp.pdf
--
Dr. Axel Polleres
email: axel@polleres.net url: http://www.polleres.net/
Received on Friday, 1 June 2007 20:36:48 UTC