ACTION-296,Propose strawman for resolving this new issue (builtins vs logic functions)

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