W3C home > Mailing lists > Public > public-rif-wg@w3.org > February 2010

Re: [PRD] Rule instances, refraction and Modify [Was: Re: Fwd: Clips behavior]

From: Gary Hallmark <gary.hallmark@oracle.com>
Date: Tue, 02 Feb 2010 10:53:37 -0800
Message-ID: <4B6874B1.3070704@oracle.com>
To: Christian De Sainte Marie <csma@fr.ibm.com>
CC: public-rif-wg@w3.org, public-rif-wg-request@w3.org
?y and ?z are bound in every disjunct in which they occur, and they do 
not occur elsewhere, hence I believe the rule is safe. It would be odd 
that such as simple transformation could change the safeness status. If 
that were true, would that not be a bug in the safeness defn?

Christian De Sainte Marie wrote:
>
> Gary,
>
> Gary wrote on 02/02/2010 17:27:26:
> >
> > > The transformation that you propose does not work, since ?y will
> > > always be bound to 1 and ?z to B, whether the instance matched foo(1)
> > > or bar(B) (and, thus, the two different instances will always have 
> the
> > > same bindings for all their universal variables).
> >
> > I don't understand. Surely if the only fact is foo(1), then ?y is bound
> > to 1 and ?z is unbound. Similarly, if the only fact is bar(B), then ?y
> > is unbound and ?z is bound to B...
>
> Unfortunately, that rule
>
> > > Rule: FORALL ?x, ?y, ?z, IF test(?x) AND ( ?y=1 AND foo(?y) OR ?
> > > z=B AND bar(?z) ) THEN...
>
> is unsafe (since ?y and ?z are not bound in every disjunct).
>
> The rule:
>
> FORALL ?x, ?y, ?z, IF test(?x) AND ?y=1 AND ?z=B AND (foo(?y) OR bar(?z))
>
> is safe, but the binding of the universal variables does not 
> discriminate the two instances :-(
>
> And I see no easy way to explain that ?y is not bound if the instance 
> matches bar(?z); I mean, not easier than introducing the notion of 
> matched facts, of something similar.
>
> If we do not want to add the dummy (disjunct counter) variable, we can 
> explicitely "annotate" each rule instance with the disjunct it matches 
> in the disjunctive normal form (as defined for the purpose of checking 
> safeness); if the rule is not disjunctive, the disjunct if the 
> condition itself.
>
> And two instances are equal only if they bind the universal variables 
> to the same values, and if they matched the same disjunct.
>
> That would mimick the way it actually works in most engines (if not 
> all): that is, disjunctive rules are really handled as one rule per 
> disjunct, with all the same action part...
>
> Actually, I would prefer that: it requires a change in the definition 
> of rule instance (esp. rule instances equality), but it is simpler 
> (more intuitive) than adding the notion of matched facts, and it is 
> less artificial than adding a fake universal variable just for 
> differentiating the disjuncts...
>
> What do you think?
>
> Cheers,
>
> Christian
>
> IBM
> 9 rue de Verdun
> 94253 - Gentilly cedex - FRANCE
> Tel. +33 1 49 08 35 00
> Fax +33 1 49 08 35 10
>
>
> Sauf indication contraire ci-dessus:/ Unless stated otherwise above:
> Compagnie IBM France
> Siege Social : 17 avenue de l'Europe, 92275 Bois-Colombes Cedex
> RCS Nanterre 552 118 465
> Forme Sociale : S.A.S.
> Capital Social : 611.451.766,20 
> SIREN/SIRET : 552 118 465 03644
>
Received on Tuesday, 2 February 2010 18:56:08 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 2 February 2010 18:56:09 GMT