- From: Christian De Sainte Marie <csma@fr.ibm.com>
- Date: Tue, 2 Jun 2009 11:23:39 +0200
- To: Gary Hallmark <gary.hallmark@oracle.com>
- Cc: RIF <public-rif-wg@w3.org>
- Message-ID: <OF73E9F44A.4EB71775-ONC12575C9.002CE540-C12575C9.00339A64@fr.ibm.com>
********* NOTICE **********
My new email address at IBM is: csma@fr.ibm.com
My ILOG email address will not be forwarded after June 8
*****************************
Hi Gary,
Thanx for the fast feedback.
Gary Hallmark <gary.hallmark@oracle.com> wrote on 02/06/2009 09:31:07:
>
> Just to spot check the accuracy, I tried to apply the PRD safeness to
> http://www.w3.org/2005/rules/wiki/Core_NonSafeness
Good point. I should have checked that before.
I checked and it works, essentially; except for a few bugs in the
definitions...
To wit, the unsafe rule in the example is:
FORALL y, z, IF y=z AND z>0 THEN p(y)
Computing bindable variables for the atomic formulas, following [1]:
- a1 is y=z: UBV(a1) = {}, CBV(a1) = {y, z}, with BCOND(y, a1)={{z}},
BCOND(z, a1)={{y}}
- a2 is z>0; UBV(a2)=CBV(a2)={}
[1] http://www.w3.org/2005/rules/wiki/PRD#def-bindable-var_atom
Computing bindable variables for the condition formula, following [2]:
- c is AND(a1, a2): UBV(c)={}, CBV(c)={y,z}, with BCOND(y,c)={{z}},
BCOND(z,c)={{y}}
[2] http://www.w3.org/2005/rules/wiki/PRD#def-bindable-var_formula
Conputing bindable variables for the rule, following [3]:
- r is FORALL y, z, IF y=z AND z>0 THEN p(y); we try the second case,
since {y,z} is in UBC(c) U CBV(c). Therefore, we check that we can remove
all the quantified variables from the bindability conditions (of the
conditionally bindable variables), that is, we execute reduceBCOND({y,z},
{y,z}, {c}). And we find out:
1. that BCOND(y, c) reduces to {{y}}, and thus that we are in the third
case, and the rule is unsafe;
2. that the specification of reduceBCOND is buggy, since after reducing
BCOND(y, c) to {{y}}, it will loop forever trying to reduce
BCOND(z,c)=[{{y}} (since it replaces y by y...)
3. that the definition of a safe rule [4] (and, thus, of a well-formed
group) is buggy as well, since UBV(r) is always empty for a closed rule...
[3] http://www.w3.org/2005/rules/wiki/PRD#def-bindable-var_rule
[4] http://www.w3.org/2005/rules/wiki/PRD#def-safe-rule
I will correct the bugs raised in 2. and 3. But 1. seems to indicate that
the definitions are essentially correct. I also checked Core_NonSafeness_2
(it works without hitting the bug in reduceBCOND, because it goes directly
in the third bucket for a forall), Core_Safeness (it works, except for the
wrong definition as raised in 3, of course; that is, the rule is not
unsafe according to the operational definition, but it is not safe either,
according to definition [4] :-).
Core_Safeness_2 raises a bug in the specification of UBV for a
conjunction: the variables that are UBV in one of the conjunct are
correctly removed from the CBV of the conjunction, but I forgot to update
UBV with the CBV that depends only on such... I'll correct that.
Core_Safeness_3 hits the same bug.
> I ran up against this:
>
> *Definition (Safe condition formula).* A RIF-PRD condition formula is
> /*safe*/ if and only if it does not contain any unsafe sub-formula (and
> if it is not unsafe itself).
I used safe/unsafe for formulas only. But UBV means safe variables (and
CBV conditionally safe). I thought that using names that referred
explicitly to binding was a good idea: maybe it is not.
> The only mention of "unsafe" is in the context of an Exists formula.
...and in the context of a Forall formula.
> Surely some condition formulas without Exists are also unsafe.
No, as far as I understand: a formula is safe if you can guarantee that
all the variables can be bound (without constraint resolution) when
evaluating the formula. If a formula contains no variable, it is always
safe; if it contains free variables, you cannot decide whether it is safe
or not (at least in the context of RIF: if a variable is free in a
formula, that means that the formula is a component of another formula,
and, thus, that the free variable might be bound somewhere else).
So a condition formula without an Exists cannot be unsafe; but a rule with
that condition can be (because it is closed under forall).
> It's not
> very clear when you define safeness as the absence of unsafeness or vice
> versa.
Yes, as I said, the wording and presentation can certainly be improved.
Currently, unsafeness is defined operationally, and safeness is defined as
the absence of unsafeness. The difficulty is that, really, there is safe,
unsafe, and maybe safe; at least as long as a formula has free
variables...
Cheers,
Christian
Sauf indication contraire ci-dessus:/ Unless stated otherwise above:
Compagnie IBM France
Siège Social : Tour Descartes, 2, avenue Gambetta, La Défense 5, 92400
Courbevoie
RCS Nanterre 552 118 465
Forme Sociale : S.A.S.
Capital Social : 609.751.783,30 ?
SIREN/SIRET : 552 118 465 02430
Received on Tuesday, 2 June 2009 09:49:09 UTC