- From: Pierre-Antoine Champin <pierre-antoine@w3.org>
- Date: Wed, 16 Jun 2021 21:33:10 +0200
- To: public-n3-dev@w3.org
- Message-ID: <d4108d10-9498-50ce-359a-1db9fddb58dd@w3.org>
And here's another example, which helped me put the finger on why I was
not sure about that solution!
Example 7:
:a :b :c.
{ ?x :leadsTo ?y } => { ?x => ?y }.
{ _:y :b :c } :leadsTo { :d :e :f }.
is equivalent to (using old-style explicit quantifiers)
:a :b :c.
{ ?x :leadsTo ?y } => { ?x => ?y }.
@forSome v:y { v:y :b :c } :leadsTo { :d :e :f }.
This would then produce
@forSome v:y { v:y :b :c } => { :d :e :f }.
which can not be serialized exactly without explicit quantification
(it can be approximated with a witness).
And this would therefore /not/ produce :d :e :f, which might be
surprising...
(interestingly, the current version of EYE, does /not/ produce :d :e :f
with this example,
while CWM does. EYE does if I replace _:y with ?y)
---
I am not claiming that this is a problem, but it can be considered
counter-intuitive at least...
But maybe this is too much of a corner case to be a real problem...
pa
On 16/06/2021 12:32, Pierre-Antoine Champin wrote:
>
> Fiddling with yet another example that came to my mind:
>
> Example 6:
>
> _:u a :Unicorn.
> _:e a :UnicornEater.
> { ?x a :Unicorn } => { { [] a :UnicornEater } => { ?x :is
> :threatened } }.
>
> is equivalent to (using old-style explicit quantifiers)
>
> @forSome v:u, v:e.
> v:u a :Unicorn.
> v:e a :UnicornEater.
> { ?x a :Unicorn } => { { @forSome v:e2. v:e2 a :UnicornEater } => {
> ?x :is :threatened } }.
>
> I would expect it to produce (1)
>
> { @forSome v:e2. v:e2 a :UnicornEater } => { v:u :is :threatened }.
> # with v:u still quantified by the top @forSome
>
> which in turn would produce (2)
>
> v:u :is :threatened. # with v:u still quantified by the top @forSome
>
> Note that the rule produced at (1) can not be expressed with the
> implicit quantification scheme that I am proposing (nor is it with the
> /current/ implicit quantification scheme, by the way). More precisely,
> v:u is existentially quantified outside the formula that contains it,
> despite the fact that this formula is the object of log:implies.
>
> So in that case, we would still need to skolemize v:u (generate a
> witness) in order to express that rule.
>
> pa
>
> On 16/06/2021 09:26, Pierre-Antoine Champin wrote:
>> Hi all,
>>
>> here's a crazy idea. I am not even sure I like it myself, but I
>> wanted to ear others' opinion about it.
>>
>> During our last call, William made a point, with which I agree
>> (assuming I understood it correctly). To sum it up: people use blank
>> node in data more as "local" identifiers than as proper existential
>> variables. This pleads for quantifying blank nodes at the top level.
>>
>> On the other hand, as we also pointed out during the call, blank
>> nodes as used in rule bodies (and rule heads, I believe) need to be
>> quantified locally.
>>
>> Hence my crazy idea: why not make the scope of blank node determined
>> by the log:implies (=>) predicate?
>>
>> More precisely:
>>
>> * a formula that is the subject or object of log:implies defines a
>> new scope for blank nodes
>>
>> * any other formula inherits the scope of its immediate parent
>>
>> * blank nodes in the top level scope are quantified *before*
>> universals (which is consistent with viewing them as "local constants")
>>
>> Below is a long (apologies) list of examples.
>>
>> WDYT?
>>
>> pa
>>
>>
>> Examples 1:
>>
>> :alice :belives { [] a :Unicorn }.
>> [] a :Person.
>>
>> is equivalent to (using old-style explicit quantifiers)
>>
>> @forSome v:u, v:p.
>> :alice :belives { v:u a :Unicorn }.
>> v:p a :Person.
>>
>> ----
>>
>> Example 2:
>>
>> { [] a :Unicorn } => { :world a :MagicalPlace }.
>>
>> is equivalent to (using old-style explicit quantifiers)
>>
>> { @forSome v:u. v:u a :Unicorn } => { :world a :MagicalPlace }.
>>
>> (i.e. no change with today's interpretation)
>>
>> ----
>>
>> Example 3:
>>
>> { ?x a :Person } => { ?x :mother [] }.
>>
>> is equivalent to (using old-style explicit quantifiers)
>>
>> { ?x a :Person } => { @forSome v:m. ?x :mother v:m }.
>>
>> (i.e. no change with today's interpretation)
>>
>> ----
>>
>> Example 4:
>>
>> :alice :belives { [] a :Unicorn }.
>> { ?x :believes { [] a :Unicorn } } => { ?x a :GulliblePerson }.
>>
>> is equivalent to (using old-style explicit quantifiers)
>>
>> @forSome v:u1.
>> :alice :believes { v:u1 a :Unicorn }.
>> { @forSome v:u2. ?x :believs { v:u2 a :Unicorn } } => { ?x a
>> :GulliblePerson }.
>>
>> which, unless I am mistaken, is also equivalent to
>>
>> @forSome v:u1.
>> :alice :believes { v:u1 a :Unicorn }.
>> { ?x :believs { ?u2 a :Unicorn } } => { ?x a :GulliblePerson }.
>>
>> I would expect this to produce.
>>
>> :alice a :GulliblePerson.
>>
>> ----
>>
>> Example 5:
>>
>> :alice :belives { [] a :Unicorn }.
>> { ?x :believes { ?y a :Unicorn } } => { ?x :wishesToRide ?y }.
>>
>> is equivalent to (using old-style explicit quantifiers)
>>
>> @forSome v:u1.
>> :alice :believes { v:u1 a :Unicorn }.
>> { ?x :believes { ?y a :Unicorn } } => { ?x :wishesToRide ?y }.
>>
>> I would have no problem with this producing
>>
>> :alice :wishesToRide v:u1. # where v:u1 is still quantified by
>> the top @forSome
>>
>>
Received on Wednesday, 16 June 2021 19:33:34 UTC