- From: William Van Woensel <william.vanwoensel@gmail.com>
- Date: Tue, 22 Jun 2021 15:22:07 -0300
- To: Pierre-Antoine Champin <pierre-antoine.champin@ercim.eu>, Jos De Roo <josderoo@gmail.com>, Dörthe Arndt <doerthe.arndt@ugent.be>
- Cc: Pierre-Antoine Champin <pierre-antoine@w3.org>, "public-n3-dev@w3.org" <public-n3-dev@w3.org>
- Message-ID: <eb7822e6-3cde-00d5-44fb-02860afb401f@gmail.com>
On 2021-06-22 12:50 p.m., Pierre-Antoine Champin wrote: > (1) is not absolutely correct, although it "works" for simple cases > (complex cases being: if you have rules inside rules...) Can you give an example of where this does not work? > (2) As I pointed out at the end of our last call, the question of > static vs. dynamic scoping is orthogonal to the question of where we > put the implicit quantifiers. Let's rephrase by saying that "the > purpose is to place implicit quantifiers in a way that hopefully makes > it easier to cleanly implement dynamic scoping". > Do you mean static scoping here? .. >> >> William >> >> >> On 2021-06-21 8:25 p.m., Jos De Roo wrote: >>> You are right Doerthe and sorry for my failing recollection :-( >>> >>> Anyhow, as per my action of today's meeting I looked into the >>> consequences >>> of static (lexical) scoping of bnodes and changed eye accordingly >>> at https://github.com/josd/eye/releases/tag/v21.0621.2307 >>> <https://github.com/josd/eye/releases/tag/v21.0621.2307>: >>> 1/ >>> https://github.com/josd/eye/blob/master/reasoning/bnodes/example7.n3 >>> <https://github.com/josd/eye/blob/master/reasoning/bnodes/example7.n3> >>> now >>> produces >>> https://github.com/josd/eye/blob/master/reasoning/bnodes/example7-pass-all.n3 >>> <https://github.com/josd/eye/blob/master/reasoning/bnodes/example7-pass-all.n3> >>> and so ':d :e :f' is no longer produced. >>> 2/ all the other tests at >>> https://github.com/josd/eye/tree/master/reasoning >>> <https://github.com/josd/eye/tree/master/reasoning> >>> are still working fine as before. >>> >>> Jos >>> >>> -- https://josd.github.io/ <http://josd.github.io/> >>> >>> >>> On Mon, Jun 21, 2021 at 5:52 PM Dörthe Arndt <doerthe.arndt@ugent.be >>> <mailto:doerthe.arndt@ugent.be>> wrote: >>> >>> Hi Pierre Antoine, >>> >>> I am still reading the comments and thinking about my own >>> opinion here, but I can say that your proposal has been >>> implemented some time ago in EYE (I even have an implementation >>> of my grammar for this case and I formalized it that way). So, >>> if you want to „play“ with your idea, I think an EYE version >>> from around 2017 should do what you it (but please double check >>> with Jos). >>> >>> Hear you in a few minutes. >>> Dörthe >>> >>> > Am 16.06.2021 um 09:26 schrieb Pierre-Antoine Champin >>> <pierre-antoine@w3.org <mailto:pierre-antoine@w3.org>>: >>> > >>> > 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 >>> > >>> > >>> > <OpenPGP_0x9D1EDAEEEF98D438.asc> >>>
Received on Tuesday, 22 June 2021 18:23:39 UTC