W3C home > Mailing lists > Public > public-rif-wg@w3.org > June 2008

Re: AW: ISSUE-66 (Semantics of actions): Operational semantics of actions as covered by PRD? [PRD ]

From: Christian de Sainte Marie <csma@ilog.fr>
Date: Fri, 27 Jun 2008 17:28:06 +0200
Message-ID: <48650706.2000008@ilog.fr>
To: Adrian Paschke <adrian.paschke@biotec.tu-dresden.de>
CC: "'Rule Interchange Format Working Group WG'" <public-rif-wg@w3.org>

Adrian Paschke wrote:
> A set theoretic definition on the state and the state which follows from the action.

Unfortunately, that does not work for all actions (e.g. Execute).

> (I would prefer a writing "w \ {f}" instead of "w-f" to denote the set difference)

I changed that (still have to check elsewhere in the text).

> Then semantics of modify could be given in terms of the semantics of retract and assert which are combined in an atomic (complex) action


> The current definition of the semantics of Execute is not clear.

As suggested by Gary, I added an example. Does it make it any clearer?

> Shouldn't we say
> ∀ w ⊆ P(W), w + EXECUTE(f) →RIF-PRD w = Eval(f, w);
> That is the evaluation should preserve the original set of ground instances, i.e. without side effects.

That would require an "Update" action, to make effective any change in w 
that results as side-effects from the execution of f. As I explained 
elsewhere, I think that we can do without the Update action since all 
the side effects will be known from the (external) specification of f, 
and that adding an update operation after an execute can thus be left to 
the responsibility of the implementations that need one.

> ∀ w ⊆ P(W), w + EXECUTE(f) →RIF-PRD w' = w  ∪ Eval(f, w);

That would restrict the side-effects on w to be assert only. What would 
be the rationale?

> Another question (from the my eMail about syntax) is about the use of External instead of Execute (maybe distinguished by an attribute). A typical example is e.g. a println built-in which can be used in the body of a rule (External?) or the head of a rule (Execute?).

No change to my reply: for different purposes, we use different 
constructs. External is used to denote the value returned by the 
execution of an externally specified function; Execute is used to denote 
the side effects of the execution of an externally specified function.

A consequence is that it will usually be considered bad partice that 
External calls have side-effects (since they are not accounted for in 
the semantics).


Received on Friday, 27 June 2008 15:27:43 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 6 January 2015 21:47:51 UTC