"ground" lists

> Jos de Bruijn wrote:
> 
> >>>> [*] By the way, is this rule set in RIF Core? During the f2f discussion
> >>>> on "grounded lists" in the core I found it hard to follow on the phone
> >>>> what people were meaning by grounded lists.
> >>> No. We were talking about ground lists, and ground=no variables.
> >> My confusion was whether we meant the resulting lists are ground i.e.
> >> are we just ruling out prolog lists with unbound variables in them or
> >> blocking all "runtime" construction of lists. You are saying the later
> >> which was my impression also.
> >>
> >> In that case Lists are completely useless in Core.
> >>
> >> Am I allowed to have a DTB builtin for constructing lists? I remember
> >> this being discussed at the f2f but couldn't follow the argument against
> >> it.
> > 
> > Yes, you can use the builtins. Because of this the lists are not useless
> > and, also, your system is not guaranteed to terminate.
> 
> So why the restriction to ground lists? Could we not just define safety 
> over List terms analogously to externals?
> 
> As far as I can see I can translate any usage of List with variables to 
> an equivalent using externals:
> 
>     ... List(?x ?y) ...
> 
> =>
> 
>     And( ... ?Z ...,
>        ?Z = func:insert-before(func:insert-before(List(), 0, ?y), 0, ?x))
> 
> The syntactic restriction to ground List elements doesn't seem to be 
> serving any purpose.

During the meeting, I understood "ground lists" to mean lists that store
Consts, not unbound Vars.  That is, we decided they should not be like
Prolog's weird (but fun) lists.  (In Prolog terminology, a ground list
is one that doesn't have any unbound variables in it; outside of prolog,
that's just 'a list', since XPath, Perl, Java, etc, never have unbound
variables in lists.)

Beyond that, there's the question about whether the cons operator
("List") should be a part of the syntax of the language, or just a
builtin.  If it's a part of the syntax of the language, should it be
defined as:

  LIST ::= 'List(' TERM* ')' | 'List(' TERM+ '|' TERM ')'

or something like:

  LIST ::= 'List(' Const* ')' | 'List(' Const+ '|' TERM ')'

I don't know if anyone really wanted the second form here.  As you point
out, it doesn't really buy you anything, since you can still do what you
want with builtins.  So I hope no one is seriously considering it.  I'm
not sure where in the state of flux the various documents are now to
know which view they reflect.

If this is going to be confusing, I wouldn't be opposed to having lists
be purely a DTB and SWC matter; I don't see Core/BLD/PRD needing to say
anything about them.  (That said, I'd need some help getting the math
right in their definition in DTB, if we went that route.)

     -- Sandro

Received on Friday, 1 May 2009 15:33:46 UTC