- From: Wolfgang Laun <wolfgang.laun@gmail.com>
- Date: Sun, 6 Sep 2009 17:50:44 +0200
- To: Chris Welty <cawelty@gmail.com>, csma@fr.ibm.com
- Cc: public-rif-comments@w3.org
- Message-ID: <17de7ee80909060850t4bdc0227nafbf1156bd5ed6d0@mail.gmail.com>
Dear Chris, thanks for your patience while answering my questions. Below, inline, are the few comment I feel I have to make to your explanations. On 8/28/09, Chris Welty <cawelty@gmail.com> wrote: > > Wolfgang Laun wrote: > > > How can one express the "no-loop" feature for upholding > > refraction in spite of an update of a contributing fact in the rule's action > > part?) > > Although this feature appears in several rule engines, we could not find a clear > common semantic description (in terms of our model). Some systems interpret > no-loop to mean that a rule may only fire once, others that at most 1 instance > of a rule may be active at a time, others that a rule instance's actions may not > directly re-instantiate the same rule, etc. > Jess and Drools appear to agree on the semantics of no-loop. I find that, when needed, it is difficult to mimic, e.g., by introducing artificial facts. The alternative semantics you cite: It would be interesting to explore whether the second and the third definitions aren't just (verbally) different definitions of the same thing. > > More specifically, in reference to the "running example", there are several > > points that appear unusual when compared with some existing real-world > > systems. > > > > - Rules that require binding of facts to variables to be used in the > > action part have to be represented by "Forall ?var such that ...", where the > > natural domain of the ?var, i.e., all facts of some class, is defined by a > > term (?var # class) of the following condition. Forall is also used where a > > condition's term will match at most once. While this is (FOP-)technically > > correct, it seems to make the addition of a "forall" pattern where the range > > is defined by a condition impossible? (Cf. "forall" in Jess or Drools.) > > In PRD, the "such that ..." is syntactic sugar. I.e., Forall ?var such that > <cond1> if <cond2> then ... is equivalent to Forall ?var If And(<cond1> <cond2>) > then ... This gives compatibility with BLD. A forall pattern in Drools such as > If forall(Bus(color=="red")) then ... (as I understand the semantics) would be > translated to PRD as If Not(Exists ?bus And(?bus#Bus Not(?bus[color->"red"]))) > then ... Finally, note that the Jess forall CE is somewhat different from > Drools but can also be translated to PRD. > Apparently we agree that "Forall ?var such that..." is different from Jess' or Drools' forall CE. - My point is that RIF-PRD's introduction of forall in a place where it is implied by systems like Jess or Drools is apt to confuse. (But see (x), below.) > > - Similarly, Exists must apparently be used to introduce variables to be > > bound to facts, for matching arbitrary values. Again, the "exists" (as in > > Jess or Drools) appears to be barred (but this can still be expressed using > > double negation). > > No, the meaning of Exists in PRD and typical PR languages should be quite close. > E.g. the Drools rule If exists(Bus(color=="red")) then ... can be translated to > PRD as If Exists ?bus And(?bus#Bus ?bus[color->"red"]) then ... > Well, all right. (x) I guess it would help readers if there were a clarifying statement such as that RIF-PRD is representing both FOP quantifiers *explicitly*, and in a uniform way, close to the usual FOP notation. Practitioners with Jess or Drools are constantly having troubles with relating FOP expressions to either language's constructs. (That's why there is now http://www.jessrules.com/jess/docs/PropPred.pdf.) > > It is surprising that the notation does not include any (explicit) > > definition of fact classes. While much of the structure is implied by the > > terms in the rules (e.g., ?customer[ex1:status->",,,"]) there seems to be no > > way to express class hierarchies, let alone projections (such as Java's > > interfaces). > > Frames support the notion of subclass (##). E.g. if we are given that > Bus##Vehicle and Car##Vehicle then a rule such as Forall ?v If ?v#Vehicle Then > ... will match all Cars and Buses. Quite so, but given a set of such rules: how do you make sure that Forall ?v If ?v#Vehicle will catch all Buses, Cars, Trucks, etc.? How are these relations x##Vehicle established in the first place? --- You are aware that the document isn't an easy read. Some sort of tutorial (as there is, for instance, for W3C XML Schema), showing the relation between PRD and existing RBS for the basic constructs would be great. Kind regards Wolfgang Laun
Received on Sunday, 6 September 2009 15:51:33 UTC