W3C home > Mailing lists > Public > public-cwm-talk@w3.org > January to March 2010

Re: scope of _:existentials in N3Logic?

From: Tim Berners-Lee <timbl@w3.org>
Date: Thu, 25 Feb 2010 14:22:42 -0500
Cc: jos.deroo@agfa.com, connolly@w3.org, public-cwm-talk@w3.org, public-cwm-talk-request@w3.org
Message-Id: <6ACF2739-9AF5-4C15-9882-D3B68588FA88@w3.org>
To: Jakub Kotowski <jakubkotowski@gmx.net>
Jakub,

When adding new facts to the same graph, as you suggest,
the same blank node is used:


$ echo ':bob :likes _:s1. {:bob :likes ?X} => {:fred :likes ?X}.' | cwm --think --quiet
     @prefix : <#> .
    
     @forAll :X.
         @forSome :_g0 .    
    :bob     :likes :_g0 .    
    :fred     :likes :_g0 .
    {
        :bob     :likes :X .      
        }     <http://www.w3.org/2000/10/swap/log#implies> {:fred     :likes :X .
        } .
    

Tim


On 2010-02 -25, at 04:59, Jakub Kotowski wrote:

> Jos and Dan,
> 
> So it means that rule bodies match graphs and rule heads create
> different graphs...? Why is it so? Rule heads could well "create"
> triples in the same graph that matched the body and then the blank-node
> wouldn't and shouldn't have to be renamed.
> 
> I am wondering what happens if a rule body variable binds to a
> blank-node and rule head creates a new triple with this binding.
> 
> For example:
> 
> :bob :likes _:somebody_1.
> {bob likes ?X} => {fred likes ?X}
> 
> is the blank node in the new fred likes ... triple different from
> _:somebody_1 too?
> 
> Regards,
> Jakub
> 
> 
> jos.deroo@agfa.com schrieb:
>> It took us 10 years to realize that the scope of blank nodes is the
>> graph in which they occur :-)
>> The answer we get from euler is the same as you got from cwm:
>> 
>> eye --nope varscope1.n3 --pass
>> #Processed by $Id: euler.yap 3310 2010-02-24 21:31:52Z josd $
>> 
>> @prefix : <evarscope1#>.
>> @prefix var: <http://localhost/var#>.
>> @prefix e: <http://eulersharp.sourceforge.net/2003/03swap/log-rules#>.
>> @prefix r: <http://www.w3.org/2000/10/swap/reason#>.
>> @prefix n3: <http://www.w3.org/2004/06/rei#>.
>> 
>> :bob :likes _:somebody_1.
>> :fred :likes _:somebody_1.
>> :alice :likes :trina.
>> :trina :likes _:sk0.
>> 
>> 
>> Kind regards,
>> 
>> Jos De Roo | Agfa HealthCare
>> Senior Researcher | HE/Advanced Clinical Applications Research
>> T  +32 3444 7618
>> http://www.agfa.com/w3c/jdroo/
>> 
>> Quadrat NV, Kortrijksesteenweg 157, 9830 Sint-Martens-Latem, Belgium
>> http://www.agfa.com/healthcare
>> 
>> 
>> *Dan Connolly <connolly@w3.org>*
>> Sent by: public-cwm-talk-request@w3.org
>> 
>> 02/23/2010 11:16 PM
>> 
>> 	
>> To
>> 	public-cwm-talk@w3.org
>> cc
>> 	
>> Subject
>> 	scope of _:existentials in N3Logic?
>> 
>> 
>> 	
>> 
>> 
>> 
>> 
>> 
>> 
>> I'm re-implementing N3Logic in scala... in particular, parsing
>> N3 syntax into Coherent formulas. I'm trying to figure
>> out how existential variables work in N3, and I'm surprised about
>> something.
>> 
>> Consider:
>> 
>> There's somebody that Bob likes and Fred likes.
>> And everybody that Alice likes also likes this somebody.
>> Also, Alice likes Trina.
>> 
>> Does Trina like this somebody?
>> 
>> Of course Trina does, but when I try to write the problem
>> down in N3, cwm doesn't handle it as I'd expect. cwm concludes
>> that Trina likes something, but not that Trina likes
>> the same somebody that Bob and Fred like.
>> 
>> $ cat ...varscope1.n3
>> @prefix : <evarscope1#>.
>> @keywords is, of, a.
>> 
>> bob likes _:somebody.
>> fred likes _:somebody.
>> { alice likes ?X } => { ?X likes _:somebody }.
>> alice likes trina.
>> 
>> $ cwm.py ...varscope1.n3 --think
>> #Processed by Id: cwm.py,v 1.197 2007/12/13 15:38:39 syosi Exp
>>       #    using base
>> file:///home/connolly/projects/rdfsem/src/test/resources/varscope1.n3
>> 
>> #  Notation3 generation by
>> #       notation3.py,v 1.200 2007/12/11 21:18:08 syosi Exp
>> 
>> #   Base was:
>> file:///home/connolly/projects/rdfsem/src/test/resources/varscope1.n3
>>    @prefix : <evarscope1#> .
>>   @prefix va: <#> .
>> 
>>    @forAll va:X.
>>        @forSome va:_g0 .
>> 
>>   :alice     :likes :trina .
>> 
>>   :bob     :likes va:_g0 .
>> 
>>   :fred     :likes va:_g0 .
>> 
>>   :trina     :likes  [
>>        ] .
>>   {
>>       :alice     :likes va:X .
>> 
>>       }     <http://www.w3.org/2000/10/swap/log#implies>
>> {va:X     :likes  [
>>            ] .
>>       } .
>> 
>> #ENDS
>> 
>> The surprise is bad news, but the good news is that cwm's
>> way of reading this formula does fit inside coherent logic,
>> which makes my coding goal straightforward...
>> 
>> -- 
>> Dan Connolly, W3C http://www.w3.org/People/Connolly/
>> gpg D3C2 887B 0F92 6005 C541  0875 0F91 96DE 6E52 C29E
>> 
>> 
>> 
>> 
> 
> 
> 
Received on Thursday, 25 February 2010 19:22:46 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Thursday, 25 February 2010 19:22:54 GMT