Both should fire when there is no message.

This said, the two are not equivalent.
The negation of
Message( sent == true, status != INITIALIZED )
is:
Message( sent == false || status == INITIALIZED )
That is, by deMorgan's laws, you need to negate
the operators AND flip the and/or connectives.

In case something still seems weird, could you
please specify the drools version you're using,
as well as which facts you are inserting exactly?

Thanks
Davide


On 05/29/2014 09:33 PM, rogerL wrote:
Are the two following statements not equivalent?

    forall($msg:Message()
            Message(this==$msg, sent==true, status!=State._INITIALIZED)
    )


    not( Message(sent==false, status==State._INITIALIZED) )

My understanding is that they both ensure that there are no Message objects
in WM with property 'sent' set to false and property 'status' set to
State._INITIALIZED.

In my situation, the 'forall' approach is working as expected, the 'not'
approach fires once (when there are no Message objects in WM) and never
again.

Appreciate if anyone could shed light on this.



--
View this message in context: http://drools.46999.n3.nabble.com/Not-and-forall-operator-behaviour-tp4029761.html
Sent from the Drools: User forum mailing list archive at Nabble.com.
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users