- From: Sandro Hawke <sandro@w3.org>
- Date: Thu, 23 Apr 2009 12:36:42 -0400
- To: Jos de Bruijn <debruijn@inf.unibz.it>
- cc: kifer@cs.sunysb.edu, public-rif-wg@w3.org
> Sandro Hawke wrote:
> >>> Oh, hmmm. Now I realize I'm confused and worried about using rif:iri
> >>> (or rif:local) with builtins.
> >>>
> >>> Does:
> >>> ex:foo = 1
> >>> ential:
> >>> external(numeric-equal(ex:foo, 1))
> >>> ?
> >> Yes. ex:foo is indistinguishable from 1 after you equated them.
> >
> > Okay, that's what I would have expected.
> >
> > But that means that before I equate them, the truth value of that
> > external predicate formula is 'unspecified'.... (It can't be 'false' or
>
> Yes (in those interpretations in which ex:foo does not denote a number).
>
> > the logic would be non-monotonic.) Similarly,
> > external(pred:isInteger(eg:bar)) is 'unspecified' until/unless eg:bar
> > ends up equated with some data value, or we otherwise learn a lot more
> > about it.
>
> No. in every interpretation, the truth value of pred:isInteger(eg:bar)
> is known, because it is known in that particular interpretation whether
> eg:bar denotes an integer. However, since eg:bar does not denote an
> integer in every interpretation, pred:isInteger(eg:bar) if not entailed.
Hmmmm. Okay. (I think I understand.)
> > So that means list-contains/member will be 'unspecified' a lot of the
> > time as well; in practice, it will never be false when there are
> > 'objects' in the list. For example:
> >
> > member(eg:foo, list(eg:foo eg:bar))
> >
> > is be true, but:
> >
> > member(eg:baz, list(eg:foo eg:bar))
> >
> > is 'unspecified' unless eg:foo, eg:bar, and eg:baz are all equated to
> > data values --- and in practice, if you're using them as frame/objects,
> > you would never equate them to data values. (You could also get a false
> > via a combination to OWL, from which you could learn they were pairwise
> > distinct.)
>
> Same as above. The truth value is specified in every particular
> interpretation.
... and since it's not the same in every interpretation, it's not
entailed. I think I'm getting that. So...
positive-entailment
PREMISE: (empty)
CONCLUSION: member(eg:foo, list(eg:foo eg:bar))
negative-entailment
PREMISE: (empty)
CONCLUSION: member(eg:baz, list(eg:foo eg:bar))
positive-entailment
PREMISE: eg:baz = eg:bar
CONCLUSION: member(eg:baz, list(eg:foo eg:bar))
Agreed?
> > All the list operations that compare items have a form of this behavior.
> > For instance:
> >
> > index-of(list(eg:foo eg:bar), eg:foo)
> >
> > is 'unspecified', unless we can determine, somehow, whether
> > eg:foo=eg:bar.
> >
> > I guess this unfortunate behavior is inescapable given our no-CWA,
> > no-UNA style of Core.
> >
> > The effect is that it basically doesn't work to think of 'objects' as
> > items in lists in Core or BLD. (Does this problem go away in PRD?)
> >
> > The two options I can think of:
> >
> > 1. Forbid 'objects' in lists; make lists just be lists of data
> > values. Given this, we could even define a mapping to a lexical
> > space for lists, making them be another datatype. (Hey, we could
> > generalize that, and make it another Rec-track document like
> > rdf:text. Hey, why are you hitting me? :-)
> >
> > 2. Just understand that they don't really work for 'objects', even
> > though the machinery is there.
> >
> > I suspect option (2) is better, because it allows lists to grow more
> > useful in other dialects -- possibly PRD, and certainly a
> > logic-programming dialect with CWA/UNA.
>
> As I said, the truth value is going to be specified in every
> interpretation, so I believe we do not have a problem.
Okay, so then I think we have these two tests:
positive-entailment
PREMISE: eg:bar = 1
eg:foo = 2
CONCLUSION: index-of(list(eg:foo eg:bar), eg:foo) = list(1)
positive-entailment
PREMISE: eg:bar = eg:foo
CONCLUSION: index-of(list(eg:foo eg:bar), eg:foo) = list(1 1)
But what if the premise is empty? I'm thinking that none of these
entailments would hold... (so these would be valid tests)....
negative-entailment
PREMISE:
CONCLUSION: index-of(list(eg:foo eg:bar), eg:foo) = list(1 1)
negative-entailment
PREMISE:
CONCLUSION: index-of(list(eg:foo eg:bar), eg:foo) = list(1)
negative-entailment
PREMISE:
CONCLUSION: index-of(list(eg:foo eg:bar), eg:foo) = list()
Is that right??
-- Sandro
Received on Thursday, 23 April 2009 16:36:53 UTC