- From: Tim Berners-Lee <timbl@w3.org>
- Date: Fri, 26 Feb 2010 10:00:45 -0500
- To: Dan Connolly <connolly@w3.org>
- Cc: public-cwm-talk@w3.org
That example is confusingly written, because _:somebody means something different in the different contexts. a _:foo always is a local bnode within the graph. Your example is equivalent to $ cat varscope1b.n3 @prefix : <evarscope1#>. @keywords is, of, a. bob likes _:somebody. fred likes _:somebody. { alice likes ?X } => { ?X likes _:whoever }. alice likes trina. $ cwm varscope1b.n3 --think --quiet @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 [ ] . } . $ If the effect you were aiming for was to refer in the rule to the same variable, then you have to explicitly quantify it in the outermost graph: $ cat varscope1a.n3 @prefix : <evarscope1#>. @keywords is, of, a. @forSome somebody. bob likes somebody. fred likes somebody. { alice likes ?X } => { ?X likes somebody }. alice likes trina. $ cwm varscope1a.n3 --think --quiet @prefix : <evarscope1#> . @prefix va: <#> . @forAll va:X. @forSome :somebody . :alice :likes :trina . :bob :likes :somebody . :fred :likes :somebody . :trina :likes :somebody . { :alice :likes va:X . } <http://www.w3.org/2000/10/swap/log#implies> {va:X :likes :somebody . } . $ In this case, the rule does bind to the same person. Tim On 2010-02 -23, at 17:16, Dan Connolly wrote: > 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 Friday, 26 February 2010 15:00:47 UTC