<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Symbolic Verification of ECA Rules</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Xiaoqing Jin</string-name>
          <email>jinx@cs.ucr.edu</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Yousra Lembachar</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Gianfranco Ciardo</string-name>
          <email>ciardo@cs.ucr.edu</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Department of Computer Science and Engineering, University of California</institution>
          ,
          <addr-line>Riverside</addr-line>
          ,
          <country country="US">USA</country>
        </aff>
      </contrib-group>
      <fpage>41</fpage>
      <lpage>60</lpage>
      <abstract>
        <p>Event-condition-action (ECA) rules specify a decision making process and are widely used in reactive systems and active database systems. Applying formal verification techniques to guarantee properties of the designed ECA rules is essential to help the error-prone procedure of collecting and translating expert knowledge. The nondeterministic and concurrent semantics of ECA rule execution enhance expressiveness but hinder analysis and verification. We then propose an approach to analyze the dynamic behavior of a set of ECA rules, by first translating them into an extended Petri net, then studying two fundamental correctness properties: termination and confluence . Our experimental results show that the symbolic algorithms we present greatly improve scalability.</p>
      </abstract>
      <kwd-group>
        <kwd>ECA rules</kwd>
        <kwd>termination</kwd>
        <kwd>confluence</kwd>
        <kwd>verification</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Event-condition-action (ECA) [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] rules are expressive enough to describe
complex events and reactions. Thus, this event-driven formalism is widely used to
specify complex systems [
        <xref ref-type="bibr" rid="ref1 ref3">1, 3</xref>
        ], e.g., for industrial-scale management, and to
improve efficiency when coupled with technologies such as embedded systems and
sensor networks. Analogously, active DBMSs enhance security and semantic
integrity of traditional DBMSs using ECA rules; these are now found in most
enterprise DBMSs and academic prototypes thanks to the SQL3 standard [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ].
ECA rules are used to specify a system’s response to events, and are written in
the format “on the occurrence of a set of events, if certain conditions hold,
perform these actions.” However, for systems with many components and complex
behavior, it may be difficult to correctly specify these rules.
      </p>
      <p>
        Termination, guaranteeing that the system does not remain “busy” internally
forever without responding to external events, and confluence , ensuring that any
possible interleaving of a set of triggered rules yields the same final result, are
fundamental correctness properties. While termination has been studied extensively
and many algorithms have been proposed to verify it, confluence is particularly
challenging due to a potentially large number of rule interleavings [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
      </p>
      <p>
        Researchers began studying these properties for active databases in the early
90’s [
        <xref ref-type="bibr" rid="ref11 ref14 ref2 ref4">2, 4, 11, 14</xref>
        ], by transforming ECA rules into some form of graph and
applying various static analysis techniques on it to verify properties. These approaches
based on a static methodology worked well to detect redundancy, inconsistency,
incompleteness, and circularity. However, since static approaches may not
explore the whole state space, they could easily miss some errors. Also, they could
find scenarios that did not actually result in errors due to the found error states
may not be reachable. Moreover, they had poor support to provide concrete
counterexamples and analyze ECA rules with priorities. [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] looked for cycles in the
rule-triggering graph to disprove termination, but the cycle-triggering conditions
may be unsatisfiable. [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] improved this work with an activation graph describing
when rules are activated; while its analysis detects termination where previous
work failed, it may still report false positives when rules have priorities. [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]
proposed an algebraic approach emphasizing the condition portion of rules, but did
not consider priorities. Other researchers [
        <xref ref-type="bibr" rid="ref11 ref14">11, 14</xref>
        ] chose to translate ECA rules
into a Petri Net (PN), whose nondeterministic interleaving execution semantics
naturally model unforeseen interactions between rule executions. However, as
the analysis of the set of ECA rules was through structural PN techniques based
on the incidence matrix of the net, false positives were again possible.
      </p>
      <p>
        To overcome these limitations, dynamic analysis approaches using model
checking tools such as SMV [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] and SPIN [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] have been proposed to verify
termination. While closer to our work, these approaches require manually
transforming ECA rules into an input script, assume a priori bounds for all
variables, provide no support for priorities, and require the initial system state to
be known; our approach does not have these limitations. [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] analyzes both
termination and confluence by transforming ECA rules into Datalog rules through
a “transformation diagram”; this supports rule priority and execution
semantics, but requires the graph to be commutative and restricts event composition.
However, most of these works show limited results, and none of them properly
addresses confluence; we present detailed experimental results for both
termination and confluence. UML Statecharts [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] provide visual diagrams to describe
the dynamic behavior of reactive systems and can be used to verify these
properties. However, event dispatching and execution semantics are not as flexible as
for PNs [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ].
      </p>
      <p>
        Our approach transforms a set of ECA rules into a PN, then dynamically
verifies termination and confluence and, if errors are found, provides concrete
counterexamples to help debugging. It uses our tool SmArT, which supports PNs
with priorities to easily model ECA rules with priorities. Moreover, a single
PN can naturally describe both the ECA rules as well as their nondeterministic
concurrent environment and, while our MDD-based symbolic model-checking
algorithms [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] require a nfiite state space, they do not require to know a priori the
variable bounds (i.e., the maximum number of tokens each place may contain).
Finally, our framework is not restricted to termination and confluence, but can
be easily extended to verify a broader set of properties.
      </p>
      <p>The rest of the paper is organized as follows: Sect. 2 recalls Petri nets; Sect.
3 introduces our syntax for ECA rules; Sect. 4 describes the transformation
of ECA rules into a Petri net; Sect. 5 presents algorithms for termination and
confluence; Sect. 6 shows experimental results; Sect. 7 concludes.</p>
    </sec>
    <sec id="sec-2">
      <title>Petri Nets</title>
      <p>
        As an intermediate step in our approach, we translate a set of ECA rules into a
self-modifying Petri net [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] (PN) with priorities and inhibitor arcs, described
by a tuple (P, T , π, D− , D+, D◦ , xinit), where:
– P is a finite set of places, drawn as circles, and T is a finite set of transitions,
drawn as rectangles, satisfying P ∩ T = ∅ and P ∪ T 6 = ∅ .
– π : T → N assigns a priority to each transition.
– D− : P ×T × NP → N, D+ : P ×T × NP → N, and D◦ : P ×T × NP → N∪{∞} are
the marking-dependent cardinalities of the input, output, and inhibitor arcs.
– xinit ∈ NP is the initial marking, the number of tokens initially in each place.
Transition t has concession in marking m ∈ NP if, for each p ∈ P , the input arc
cardinality is satisfied, i.e., mp ≥ D− (p, t, m), and the inhibitor arc cardinality
is not, i.e., mp &lt; D◦ (p, t, m). If t has concession in m and no other transition
t0 with priority π (t0) &gt; π (t) has concession, then t is enabled in m and can fire
and lead to marking m0, where mp0 = mp − D− (p, t, m) + D+(p, t, m), for all
places p (arc cardinalities are evaluated in the current marking m to determine
the enabling of t and the new marking m0). In our figures, tk(p) indicates the
number of tokens in p for the current marking, a thick input arc from p to t
signifies a cardinality tk(p), i.e., a reset arc, and we omit arc cardinalities 1,
input or output arcs with cardinality 0, and inhibitor arcs with cardinality ∞ .
      </p>
      <p>The PN defines a discrete-state model (Spot, Sinit, A, {N t : t ∈ A} ). The
potential state space is Spot = NP (in practice we assume that the reachable set
of markings is finite or, equivalently, that there is a finite bound on the number of
tokens in each place, but we do not require to know this bound a priori). Sinit ⊆
Spot is the set of initial states, { xinit} in our case (assuming an arbitrary finite
initial set of markings is not a problem). The set of (asynchronous) model events
is A = T . The next-state function for transition t is Nt, such that Nt(m) =
{ m0} , where m0 is as denfied above if transition t is enabled in marking m, and
Nt(m) = ∅ otherwise. Thus, the next-state function for a particular PN transition
is deterministic, although the overall behavior remains nondeterministic due to
the choice of which transition should fire when multiple transitions are enabled.
3</p>
    </sec>
    <sec id="sec-3">
      <title>ECA syntax and semantics</title>
      <p>
        ECA rules have the format “ on events if condition do actions.” If the events
are activated and the boolean condition is satisfied, the rule is triggered and its
actions will be performed. In active DBMSs, events are normally produced by
explicit database operations such as insert and delete [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] while, in reactive
systems, they are produced by sensors monitoring environment variables [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], e.g.,
temperature. Many current ECA languages can model the environment and
distinguish between environmental and local variables [
        <xref ref-type="bibr" rid="ref11 ref14 ref15 ref2 ref4 ref6">2, 4, 6, 11, 14, 15</xref>
        ]. Thus,
we designed a language to address these issues, able to handle more general cases
and allow different semantics for environmental and local variables (Fig. 1).
env_vars := environmental env_var
read-only bounded natural
loc_vars := local loc_var
read-and-write bounded natural
f actor := loc_var | env_var | ( exp ) | number
term := f actor | term ∗ term | term / term
exp := exp − exp | exp + exp | term
      </p>
      <p>=
rel_op := ≥ | ≤ |
assignment := env_var into loc_var [, assignment]
“ /” is integer division
“ number” is a constant ∈ N
ext_ev_decl := external ext_ev [ activated when env_var rel_op number ]
[ read (assignment) ]
int_ev_decl := internal int_ev
ext_evs := ext_ev | (ext_evs or ext_evs) | (ext_evs and ext_evs)
int_evs := int_ev | (int_evs or int_evs) | (int_evs and int_evs)
condition := (condition or condition) | (condition and condition) |</p>
      <p>not condition | exp rel_op exp
action := increase (loc_var, exp) | decrease (loc_var, exp) |</p>
      <p>set (loc_var, exp) | activate (int_ev)
actions := action | (actions seq actions) | (actions par actions)
ext_rule := on ext_evs [if condition] do actions
int_rule := on int_evs [if condition] do actions [with priority number]
system := [env_vars]+[loc_vars]∗ [ext_ev_decl]+[int_ev_decl]∗
[ext_rule]+[int_rule]∗</p>
      <p>Environmental variables are used to represent environment states that can
only be measured by sensors but not directly modified by the system. For
instance, if we want to increase the temperature in a room, the system may choose
to turn on a heater, eventually achieving the desired effect, but it cannot directly
change the value of the temperature variable. Thus, environmental variables
capture the nondeterminism introduced by the environment, beyond the control of
the system. Instead, local variables can be both read and written by the system.
These may be associated with an actuator, a record value, or an intermediate
value describing part of the system state; we provide operations to set (absolute
change) their value to an expression, or increase or decrease (relative change) it
by an expression; these expressions may depend on environmental variables.</p>
      <p>Events can be combinations of atomic events activated by environmental or
internal changes. We classify them using the keywords external and internal.
An external event can be activated when the value of an environmental variable
crosses a threshold; at that time, it may take a snapshot of some environmental
variables and read them into local variables to record their current values. Only
the action of an ECA rule can instead activate internal events. Internal events
are useful to express internal changes or required actions within the system.
These two types of events cannot be mixed within a single ECA rule. Thus,
rules are external or internal, respectively. Then, we say that a state is stable if
only external events can occur in it, unstable if actions of external or internal
rules are being performed (including the activation of internal events, which
may then trigger internal rules). The system is initially stable and, after some
external events trigger one or more external rules, it transitions to unstable
states where internal events may be activated, triggering further internal rules.
When all actions complete, the system is again in a stable state, waiting for
environmental changes that will eventually trigger external events.</p>
      <p>The condition portion of an ECA rule is a boolean expression on the value
of environmental and local variables; it can be omitted if it is the constant true.</p>
      <p>The last portion of a rule specifies which actions must be performed, and in
which order. Most actions are operations on local variables which do not directly
affect environmental variables, but may cause some changes that will conceivably
be reflected in their future values. Thus, all environmental variables are
readonly from the perspective of an action. Actions can also activate internal events.
Moreover, to handle complex action operations, the execution semantics can
be specified as any partial order described by a series-parallel graph; this is
obtained through an appropriate nesting of seq operators, to force a sequential
execution, and par operators, to allow an arbitrary concurrency. The keyword
with priority enforces a priority for internal rules. If no priority is specified,
the default priority of an internal rule is 1, the same as that of external rules.</p>
      <p>
        We now discuss the choices of execution semantics for our language, to
support the modeling of reactive systems. The first choice is how to couple the
checking of events and conditions for our ECA rules. There are (at least) two
options: immediate and deferred. The event-condition checking is immediate if
the corresponding condition is immediately evaluated when the events occur,
it is deferred if the condition is evaluated at the end of a cycle with a
predefined frequency. One critical requirement for the design of reactive systems is
that the system should respond to external events from the environment [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]
as soon as possible. Thus, we choose immediate event-condition checking: when
events occur, the corresponding condition is immediately evaluated to determine
whether to trigger the rule. We stress that deferred checking can still be modeled
using immediate checking, for example by adding an extra variable for the
system clock and changing priorities related to rule evaluation to synchronize rule
evaluations. However, the drawback of deferred checking is that the design must
tolerate false ECA rule triggering or non-triggering scenarios. Since there is a
time gap between event activation and condition evaluation, the environmental
conditions that trigger an event might change during this period of time, causing
rules supposed to be triggered at the time of event activation to fail because the
“current ” condition evaluation are now inconsistent.
      </p>
      <p>Another important choice is how to handle and model the concurrent and
nondeterministic nature of reactive systems. We introduce the concept of batch
for external events, similar to the concept of transaction in DBMSs. Formally,
the boundary of a batch of external events is defined as the end of the execution
of all triggered rules. Then, the system starts to receive external events and
immediately evaluates the corresponding conditions. The occurrence of an external
event closes a batch if it triggers one or more ECA rules; otherwise, the event is
added to the current batch. Once the batch closes and the rules to be triggered
have been determined, the events in the current batch are cleaned-up, to prevent
multiple (and erroneous) triggerings of rules. For example, consider ECA rules
ra: “ on a do · · · ” and rac: “ on (a and c) do · · · ”, and assume that the
system finishes processing the last batch of events and is ready to receive external
events for the next batch. If external events occur in the sequence “ c, a, . . .”,
event c alone cannot trigger any rule so it begins, but does not complete, the
current batch. Then, event a triggers both rule ra and rac, and thus, closes the
current batch. Both rules are triggered and will be executed concurrently. This
example shows how, when the system is in a stable state, the occurrence of a
single external event may trigger one or more ECA rules, since there is no
“contention” within a batch on “using” an external event: rule ra and rac share event
a and both rules are triggered and executed. If instead the sequence of events
is “ a, c, . . .”, event a by itself constitutes a batch, as it triggers rule ra. This
event is then discarded by the clean-up so, after executing ra and any internal
rule (recursively) triggered by it, the system returns to a stable state and the
subsequent events “ c, . . .” begin the next batch. Under this semantic, all external
events in one batch are processed concurrently. Thus, unless there is a
termination error, the system will process all triggered rules, including those triggered
by the activation of internal events during the current batch, before considering
new external events. This batch definition provides maximum nondeterminism
on event order, which is useful to discover design errors in a set of ECA rules.</p>
      <p>We also stress that, in our semantics, the system is frozen during rule
execution and does not respond to external events. Thus, rule execution is
instantaneous, while in reality it obviously requires some time. However, from a
verification perspective, environmental changes and external event occurrences
are nondeterministic and asynchronous, thus our semantic allows the verification
process to explore all possible combinations without missing errors due to the
order in which events occur and environmental variables change.
3.1</p>
      <sec id="sec-3-1">
        <title>Running example</title>
        <p>We now illustrate the expressiveness of our ECA rules on a running example:
a light control subsystem in a smart home for senior housing. Fig. 2 lists the
requirements in plain English (R1 to R5). Using motion and pressure sensors,
the system attempts to reduce energy consumption by turning off the lights
in unoccupied rooms or if the occupant is asleep. Passive sensors emit signals
when an environmental variable value crosses a significant threshold. The motion
sensor measure is expressed by the boolean environmental variable Mtn. The
system also provides automatic adjustment for indoor light intensity based on an
outdoor light sensor, whose measure is expressed by the environmental variable
ExtLgt ∈ { 0, ..., 10} . A pressure sensor detects whether the person is asleep and
is expressed by the boolean environmental variable Slp.
environmental Mtn, ExtLgt, Slp</p>
        <p>local lMtn, lExtLgt, lSlp, lgtsTmr, intLgts
external SecElp read (Mtn into lMtn, ExtLgt into lExtLgt, Slp into lSlp)
MtnOn activated when Mtn = 1
MtnOff activated when Mtn = 0
ExtLgtLow activated when ExtLgt ≤ 5</p>
        <p>LgtsOff, LgtsOn, ChkExtLgt, ChkMtn, ChkSlp
internal
(R1) When the room is unoccupied for 6 minutes, turn off lights if they are on.
r1 on MtnOff if (intLgts &gt; 0 and lgtsTmr = 0) do set (lgtsTmr, 1)
on SecElp if (lgtsTmr ≥ 1 and lMtn = 0)
r2 do increase (lgtsTmr, 1)</p>
        <p>on SecElp if (lgtsTmr = 360 and lMtn = 0)
r3 do ( set (lgtsTmr, 0) par activate (LgtsOff ) )</p>
        <p>on LgtsOff do ( set (intLgts, 0) par activate (ChkExtLgt) )
r4
(R2) When lights are off, if external light intensity is below 5, turn on lights.</p>
        <p>on ChkExtLgt if (intLgts = 0 and lExtLgt ≤ 5)
r5 do activate (LgtsOn)
(R3) When lights are on, if the room is empty or a person is asleep, turn off lights.
r6 on LgtsOn do ( set (intLgts, 6) seq activate (ChkMtn) )</p>
        <p>on ChkMtn if (lSlp = 1 or (lMtn = 0 and intLgts ≥ 1) )
r7 do activate (LgtsOff )
(R4) If the external light intensity drops below 5, check if the person is asleep
and set the lights intensity to 6. If the person is asleep, turn off the lights.
r8 on ExtLgtLow do ( set (intLgts, 6) par activate (ChkSlp) )
r9 on ChkSlp if (lSlp = 1) do set (intLgts, 0)
(R5) If the room is occupied, set the lights intensity to 4.</p>
        <p>r10 on MtnOn do ( set (intLgts, 4) par set (lgtsTmr, 0) )</p>
        <p>MtnOn, MtnOff , and ExtLgtLow are external events activated by the
environmental variables discussed above. MtnOn and MtnOff occur when Mtn changes
from 0 to 1 or from 1 to 0, respectively. ExtLgtLow occurs when ExtLgt drops
below 6. External event SecElp models the system clock, occurs every second,
and takes a snapshot of the environmental variables into local variables lMtn,
lExtLgt, and lSlp, respectively. Additional local variables lgtsTmr and intLgts
are used. Variable lgtsTmr is a timer for R1, to convert the continuous
condition “the room is unoccupied for 6 minutes” into 360 discretized SecElps events.
Rule r1 initializes lgtsTmr to 1 whenever the motion sensor detects no motion
and the lights are on. The timer then increases as second elapses, provided that
no motion is detected (rule r2). If the timer reaches 360, internal event LgtsOff
is activated to turn off the lights and to reset lgtsTmr to 0 (rule r3). Variable
intLgts acts as an actuator control to adjust the internal light intensity.</p>
        <p>Our ECA rules contain internal events to model internal system actions or
checks not observable from the outside. LgtsOff , activated by rule r3 or r7, turns
the lights off and activates another check on outdoor light intensity through
internal event ChkExtLgt (rule r4). ChkExtLgt activates LgtsOn if lExtLgt ≤ 5</p>
        <p>EnvMotOn
0 if(tk(MtnOn)=0)</p>
        <p>MtnOn
(rule r5). ChkSlp is activated by rule r8 to check whether a person is asleep. If
true, the event triggers an action that turns the lights off (rule r9). Internal event
ChkMtn, activated by rule r6, activates LgtsOff if the room is unoccupied and
all lights are on, or if the room is occupied but the occupant is asleep (rule r7).
4</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Transforming a set of ECA rules into a PN</title>
      <p>We now explain the procedure to transform a set of ECA rules into a PN. First,
we put each ECA rule into a regular form where both events and condition are
disjunctions of conjunctions of events and relational expressions, respectively.
All rules in Fig. 2 are in this form. While this transformation may in principle
cause the expressions for events and conditions to grow exponentially large, each
ECA rule usually contains a small number of events and conditions, hence this
is not a problem in practice. Based on the immediate event-condition checking
assumption, a rule is triggered iff “ trigger ≡ events ∧ condition” holds.</p>
      <p>Next, we map variables and events into places, and use PN transitions to
model event testing, condition evaluation, and action execution. Any change
of variable values is achieved through input and output arcs with appropriate
cardinalities. Additional control places and transitions allow the PN behavior to
be organized into “phases”, as shown next. ECA rules r1 through r10 of Fig. 2 are
transformed into the PN of Fig. 3 (dotted transitions and places are duplicated
and arcs labeled “ if (cond)” are present only if cond holds).
4.1</p>
      <sec id="sec-4-1">
        <title>Occurring phase</title>
        <p>This phase models the occurrence of external events, due to environment changes
over which the system has no control. The PN firing semantics perfectly matches
the nondeterministic asynchronous nature of these changes. For example, in
Fig. 3, transitions EnvMotOn and EnvMotOff can add or remove the token
in place Mtn, to nondeterministically model the presence or absence of people in
the room (the inhibitor arc from place Mtn back to transition EnvMotOn ensures
that at most one token resides in Mtn). Firing these environmental transitions
might nondeterministically enable the corresponding external events. Here, firing
EnvMotOn generates the external event MtnOn by placing a token in the place
of the same name, while firing EnvMotOff generates event MtnOff , consistent
with the change in Mtn. To ensure that environmental transitions only fire if
the system is in a stable state (when no rule is being processed) we assign the
lowest priority, 0, to these transitions. As the system does not directly affect
environmental variables, rule execution does not modify them. However, we can
take snapshots of these variables by copying the current number of tokens into
their corresponding local variables using marking-dependent arcs. For example,
transition EnvSecElp has an output arc to generate event SecElp, and arcs
connected to local variables to perform the snapshots, e.g., all tokens in lMtn are
removed by a reset arc (an input arc that removes all tokens from its place),
while the output arc with cardinality tk(Mtn) copies the value of Mtn into lMtn.
4.2</p>
      </sec>
      <sec id="sec-4-2">
        <title>Triggering phase</title>
        <p>This phase starts when trigger ≡ events ∧ condition holds for at least one
external ECA rule. If, for rule rk, events and condition consist of nd and nc disjuncts,
respectively, we define nd · nc test transitions rkTsti,j with priority P + 2, where
i and j are the index of a conjunct in events and one in condition, while P ≥ 1 is
the highest priority used for internal rules (in our example, all internal rules have
default priority P = 1). Then, to trigger rule rk, only one of these transitions,
e.g., r7Tst1,1 or r7Tst1,2, needs to be fired (we omit i and j if nd = nc = 1). Firing
a test transition means that the corresponding events and conditions are satisfied
and results in placing a token in each of the triggered places rkTrg1, . . . , rkTrgN ,
to indicate that Rule rk is triggered, where N is the number of outermost
parallel actions (recall that par and seq model parallel and sequential actions).
Thus, N = 1 if rk contains only one action, or an outermost sequential series of
actions. Inhibitor arcs from rkTrg1 to test transitions rkT sti,j ensure that, even
if multiple conjuncts are satisfied, only one test transition rfies. The firing of
test transitions does not “consume” external events, thus we use double-headed
arrows between them. This allows one batch to trigger multiple rules,
conceptually “at the same time.” After all enabled test transitions for external rules
have fired, place Ready contains one token, indicating that the current batch of
external events can be cleared: transition CleanUp, with priority P + 1, fires and
removes all tokens from external and internal event places using reset arcs, since
all the rules that can be triggered have been marked. This ends the triggering
phase and closes the current batch of events.
4.3</p>
      </sec>
      <sec id="sec-4-3">
        <title>Performing phase</title>
        <p>This phase executes all actions of external rules marked in the previous phase. It
may further result in triggering and executing internal rules. Transitions in this
phase correspond to the actions of rules with priority in [1, P ], the same as that of
the corresponding rule. An action activates an internal event by adding a token to
its place. This token is consumed as soon as a test transition of any internal rule
related to this event fires. This is different from the way external rules “use”
external events. Internal events not consumed in this phase are cleared when
transition CleanUp fires in the next batch. When all enabled transitions of the
performing phase have fired, the system is in a stable state where environmental
changes (transitions with priority 0) can again happen and the next batch starts.
4.4</p>
      </sec>
      <sec id="sec-4-4">
        <title>ECA rules to PN translation</title>
        <p>
          The algorithm in Fig. 4 takes external and internal ECA rules Rext, Rint, with
priorities in [1, P ], environmental and local variables Venv, Vloc, and external
and internal events Eext, Eint, and generates a PN. After normalizing the rules
and setting P to the highest priority among the rule priorities in Rint, it maps
environmental variables Venv, local variables Vloc, external events Eext, and
internal events Eint, into the corresponding places (Lines 5, 6, and 8). Then, it
creates phase control place Ready, transition CleanUp, and reset arcs for CleanUp
(Lines 4-5). We use arcs with marking-dependent cardinalities to model
expressions. For example, together with inhibitor arcs, these arcs ensure that each
variable v ∈ Venv remains in its range [vmin, vmax] (Lines 8-10). These arcs also
model the activated when portion of external events (Line 17), rule
conditions (Line 33), and assignments of environmental variables to local variables
(Lines 19-20 and lines 14-15). The algorithm models external events and
environmental changes (Lines 11-24); it connects environmental transitions such as
tvInc and tvDec to their corresponding external event places, if any, with an arc
TransformECAintoPN (Rext, Rint, Venv, Vloc, Eext, Eint)
1 normalize Rext and Rint into regular form and set P to the highest rule priority
2 create a place Ready • to control “phases” of the net
3 create transition CleanUp with priority P +1 and Ready − [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ]→ CleanUp
4 for each event e ∈ Eext ∪ Eint do
5 create place pe and pe − [tk(pe) ]→ CleanUp
6 create place pv, for each variable v ∈ Vloc
7 for each variable v ∈ Venv with range [vmin, vmax] do
8 create place pv and transitions tvInc and tvDec with priority 0
9 create tvDec − [if(tk(pv) &gt; vmin)1 else 0 ]→ pv
10 create tvInc − [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ]→ pv and pv − [vmax◦ ]− tvInc
11 for each event e ∈ Eext activated when v op val, for op ∈ {≥ | =} do
12 create tvInc − [if(tk(pv) op val)1 else 0 ]→ pe
13 if e reads v ∈ Venv into v0 ∈ Vloc then
14 create pv0 − [if(tk(pv) op val)tk(pv0 ) else 0 ]→ tvInc
15 create tvInc − [if(tk(pv) op val)tk(pv) else 0 ]→ pv0
16 for each event e ∈ Eext activated when v op val, for op ∈ {≤ | =} do
17 create tvDec − [if(tk(pv) op val)1 else 0 ]→ pe
18 if e reads v ∈ Venv into v0 ∈ Vloc then
19 create pv0 − [if(tk(pv) op val)tk(pv0 ) else 0 ]→ tvDec
20 create tvDec − [if(tk(pv) op val)tk(pv) else 0 ]→ pv0
21 for each event e ∈ Eext without an activated when portion do
22 create te and te − [if(tk(pe) = 0)1 else 0 ]→ pe
23 if e reads v ∈ Venv into v0 ∈ Vloc then
24 create pv0 − [tk(pv0 ) ]→ te and te − [tk(pv) ]→ pv0
25 for each rule rk ∈ Rext ∪ Rint with nd event disjuncts, nc condition disjuncts,
actions A, and priority p ∈ [1, P ] do
26 create trans. rkTsti,j,i ∈ [1, nd], j ∈ [1, nc],w/priority P + 2 if rk ∈ Rext, else p
27 for each event e in disjunct i do
28 create pe − [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ]→ rkTsti,j
29 create rkTsti,j − [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ]→ pe, if e ∈ Eext
30 for each conjunct v ≤ val or v = val in disjunct j do
31 create pv − [val + 1◦ ]− rkTsti,j
32 for each conjunct v ≥ val or v = val in disjunct j do
33 create pv − [val ]→ rkTsti,j and rkTsti,j − [val ]→ pv
34 if actions A is “( A1 par A2)” then na = 2 else na = 1, A1 = A
35 for each l ∈ [1, na] do
36 create places rkTrgl and transitions rkActl with priority p
37 create rkTrgl − [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ]→ rkActl and rkTsti,j − [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ]→ rkTrgl
38 SeqSubGraph(Al, “ rkAcll” , l, p)
39 for each rk ∈ Rext, i ∈ [1, nd], j ∈ [1, nc] do
40 create rkTsti,j − [if(tk(Ready) = 0)1 else 0 ]→ Ready and rkTrg1 − [1◦ ]− rkTsti,j
Fig. 4. Transforming ECA rules into a PN: a − [k ]→ b means “an arc from a to b with
cardinality k; a − [k◦ ]− b means “an inhibitor arc from a to b with cardinality k.
whose cardinality evaluates to 1 if the corresponding condition becomes true
upon the firing of the transition and the event place does not contain a token
already, 0 otherwise (e.g., the arcs from EnvExtLigDec to ExtLgtLow).
        </p>
        <p>
          Next, rules are considered (Lines 25-40). A rule with nd event disjuncts and
nc condition disjuncts generates nd · nc testing transitions. To model the
parallelsequential action graph of a rule, we use mutually recursive procedures (Fig. 5
and Fig. 6). Procedure SeqSubGraph first tests all atomic actions, such as “set”,
ParSubGraph(Pars, Pre, p) • Pars: parallel actions, Pre: prefix
1 for each l ∈ { 1, 2} do • according to the syntax Pars2 has two components
2 create place PreActlTrglSeql and transition PreActl w/priority p
3 create Pre − [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ]→ PreActl and PreActl − [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ]→ PreActlTrglSeql
4 SeqSubGraph(Parsl, “ PreActlTrglSeql” , l, p);
“increase”, “decrease”, and “activate.” Then, it recursively calls ParSubGraph
at Line 10 if it encounters parallel actions. Otherwise, it calls itself to unwind
another layer of sequential actions at Line 12 and Line 15 for the two portions
of the sequence. Procedure ParSubGraph creates control places and transitions
for the two branches of a parallel action and calls SeqSubGraph at Line 4.
5
        </p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Verifying properties</title>
      <p>
        The first step towards verifying correctness properties is to define Sinit, the set
of initial states, corresponding to all the possible initial combinations of system
variables (e.g., ExtLgt can initially have any value in [
        <xref ref-type="bibr" rid="ref10">0, 10</xref>
        ]). One could consider
all these possible values by enumerating all legal stable states corresponding
to possible initial combinations of the environmental variables, then start the
analysis from each of these states, one at a time. However, in addition to requiring
the user to explicitly provide the set of initial states, this approach may require
enormous runtime, also because many computations are repeated in different
runs. Our approach instead computes the initial states symbolically, thanks to
the nondeterministic semantics of Petri nets, so that the analysis is performed
once starting from a single, but very large, set Sinit.
      </p>
      <p>To this end, we add an initialization phase that puts a nondeterministically
chosen legal number of tokens in each place corresponding to an environmental
variable. This phase is described by a subnet consisting of a transition InitEnd
InitEnd
4</p>
      <p>Init</p>
      <p>InitExtLgt 4</p>
      <p>InitSlp 4
InitMtn
4
10
with priority P + 3, a place Init with one initial token, and an initializing
transition with priority P +3 for every environmental variable, to initialize the number
of tokens in the corresponding place. Fig. 7 shows this subnet for our running
example. We initialize the Petri net by assigning the minimum number of
tokens to every environmental variable place and leaving all other places empty,
then we let the initializing transitions nondeterministically add a token at a
time, possibly up to the maximum legal number of tokens in each
corresponding place. When InitEnd fires, it disables the initializing transitions, freezes the
nondeterministic choices, and starts the system’s normal execution.</p>
      <p>This builds the set of initial states, ensuring that the PN will explore all
possible initial states, and avoids the overhead of manually starting the PN from
one legal initial marking at a time. Even though the overall state space might
be larger (it equals the union of all the state spaces that would be built starting
from each individual marking), this is normally not the case, and, anyway, having
to perform just one state space generation is obviously enormously better.</p>
      <p>
        After the initialization step, we proceed with verifying termination and
confluence using our tool SmArT, which provides symbolic reachability analysis and
CTL model checking with counterexample generation [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ].
Reactive systems constantly respond to external events. However, if the system
has a livelock, a finite number of external events can trigger an infinite number
of rule executions (i.e, activate a cycle of internal events), causing the system to
remain “busy” internally, a fatal design error. When generating the state space,
all legal batches of events are considered, due to the PN execution semantics,
again avoiding the need for an explicit enumeration, this time, of event batches.
      </p>
      <p>A set G of ECA rules satisfies termination if no infinite sequence of
internal events can be triggered in any possible execution of G. This can
be expressed in CTL as ¬ EF(EG(unstable)), stating that there is no cycle
of unstable states reachable from an initial, thus stable, state.</p>
      <p>
        Both traditional breadth-first-search (BFS) and saturation-based [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ]
algorithms are suitable to compute the EG operator. Fig. 8 uses saturation, which
tends to perform much better in both time and memory consumption when
analyzing large asynchronous systems. We encode transitions related to external
• provide error trace
• p unprimed
• p[i] is the node pointed edge i of node p
bool Term(mdd Sinit, mdd2 Nint)
1 mdd Srch ← StateSpaceGen(Sinit, Next ∪ N int);
2 mdd Sunst ← Intersection(Srch, ExtractUnprimed(Nint));
3 mdd Sp ← EF(EG(Sunst));
4 if Sp 6= ∅ then return false
5 else return true;
mdd ExtractUnprimed(mdd2 p)
1 if p = 1 then return 1;
2 if CacheLookUp(EXTRACTUNPRIMED, p, r) return r;
3 foreach i ∈ V p.v do
4 mdd ri ← 0;
5 if p[i] 6= 0 then
6 foreach j ∈ V p.v s.t. p[i][j] 6= 0 do
7 ri ← Union(ri, ExtractUnprimed(p[i][j]))
8 mdd r ← UniqueTableInsert({ ri : i ∈ V p.v} );
9 CacheInsert(EXTRACTUNPRIMED, p, r);
10 return r;
events and environmental variable changes into Next. Thus, the internal
transitions are Nint = N \Next. After generating the state space Srch using constrained
saturation [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ], we build the set of states Sunst by symbolically intersecting Srch
with the unprimed, or “from”, states extracted from Nint. Then, we use the CTL
operators EG and EF to identify any nonterminating path (i.e., cycle).
Confluence is another desirable property to ensure consistency in systems
exhibiting highly concurrent behavior.
      </p>
      <p>A set G of ECA rules satisfying termination also satisfies confluence if,
for any legal batch b of external events and starting from any particular
stable state s, the system eventually reaches a unique stable state.</p>
      <p>
        We stress that what constitutes a legal batch b of events depends on state s,
since the condition portion of one or more rules might affect whether b (or
a subset of b) can trigger a rule (thus close a batch). Given a legal batch b
occurring in stable state s, the system satisfies confluence if it progresses from s
by traversing some (nondeterministically chosen) sequence of unstable states,
eventually reaching a stable state uniquely determined by b and s. Checking
confluence is therefore expensive [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], as it requires verifying the combinations
of all stable states reachable from Sinit with all legal batches of external events
when the system is in that stable state. A straightforward approach enumerates
all legal batches of events for each stable state, runs the model, and checks that
the set of reachable stable states has cardinality one. We instead only check
that, from each reachable unstable state, exactly one stable state is reachable;
this avoids enumerating all legal batches of events for each stable state. Since
bool ConfExplicit(mdd Sst, mdd Sunst, mdd2 Nint)
1 foreach i ∈ S unst
2 mdd Si ← StateSpaceGen(i, Nint);
3 if Cardinality(Intersection(Si, Sst)) &gt; 1 then return false; • provide error trace
4 return true;
bool ConfExplicitImproved(mdd Sst, mdd Sunst, mdd2 Nint, mdd2 N )
1 mdd Sfrontier ← Intersection(RelProd(Sst, N ), Sunst);
2 while Sfrontier 6= ∅ do • if Sfrontier is empty, it explores all Sunst
3 pick i ∈ S frontier;
4 mdd Si ← StateSpaceGen(i, Nint);
5 if Cardinality(Intersection(Si, Sst)) &gt; 1 then return false; • provide error trace
6 else Sfrontier ← S frontier \ Intersection(Si, Sunst); • exclude all unstable
states reached by i
7 return true;
bool CheckConf (mdd2 p)
1 if p = 1 then return true
2 if CacheLookUp(CHECKCONF , p, r) return r;
3 foreach i ∈ V p.v, s.t. exist j, j0 ∈ V p.v, j 6= j0, p[i][j] 6= 0, p[i[j0] 6= 0 do
4 foreach j, j0 ∈ V p.v, j 6= j0 s.t. p[i][j] 6= 0, p[i[j0] 6= 0 do
5 if p[i][j] = p[i][j0] return false; • Confluence does not hold
6 mdd fj ← ExtractUnprimed(p[i][j]); • Result will be cached
7 mdd fj0 ← ExtractUnprimed(p[i][j0]); • No duplicate computation
8 if Intersection(fi, fj0 ) 6= 0 then return false;
9 foreach i, j ∈ V p.v s.t. p[i][j] 6= 0 do
10 if CheckConf (p[i][j]) = false return false;
11 CacheInsert(CHECKCONF , p, true);
12 return true;
nondeterministic execution in performing phase is the main reason to violate
confluence and the system is in unstable states in our definition, checking the
evolution starting from unstable states will fulfill the purpose.
      </p>
      <p>
        The brute force algorithm ConfExplicit in Fig. 9 enumerates unstable states
and generates reachable states only from unstable states using constrained
saturation [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ]. Then, it counts the stable states in the obtained set. We observe
that, starting from an unstable stable u, the system may traverse a large set
of unstable states before reaching a stable state. If unstable state u is
reachable, so are the unstable states reachable from it. Thus, the improved version
ConfExplicitImproved first picks an unstable state i and, after generating the
states reachable from i and verifying that they include only one stable state, it
excludes all visited unstable states (Line 6). Furthermore, it starts only from
states i in the frontier, i.e., unstable states reachable in one step from stable
      </p>
      <p>Termination (time: sec, memory: MB)
Model
PN t
PN c
PN 1
PN 2
PN 3</p>
      <p>PN 4
Model
PN c
PN 1
PN 2
PN 3
PN 4</p>
      <p>|S rch|
9.665
9.497
states (all other unstable reachable states are by definition reachable from this
frontier). However, we stress that these, as most symbolic algorithms, are
heuristics, thus they are not guaranteed to work better than the simpler approaches.</p>
      <p>
        Next, we introduce a fully symbolic algorithm to check confluence in Fig. 10.
It first generates the transition transitive closure (TC) set from Nint using
constrained saturation [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ], where the “from”’ states of the closure are in Sunst
(Line 1). The resulting set encodes the reachability relation from any reachable
unstable state without going through any stable state. Then, it filters this
relation to obtain the relation from reachable unstable states to stable states by
constraining the “to” states to set Sst. Thus, checking conuflence reduces to
verifying whether there exist two different pairs (i, j) and (i, j0) in the relation:
Procedure CheckConf implements this check symbolically. While computing TC
is a an expensive operation [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ], this approach avoids separate searches from
distinct unstable states, thus is particularly appropriate when Sunst is huge.
6
      </p>
    </sec>
    <sec id="sec-6">
      <title>Experimental results</title>
      <p>Table 1 reports results for a set of models run on an Intel Xeon 2.53GHz
workstation with 36GB RAM under Linux. For each model, it shows the state space
size (|S rch| ), the peak memory (Mp), and the final memory ( Mf ). For
termination, it shows the time used to verify the property (Tt) and to find the shortest
... lgtsTmr = 1 r6Act1
r6Trg1= 1
lgtsTmr = 1
LgtsOn=1
r6Tst
lgtsTmr = 1
r6Trg1Seq1= 1
intLgts = 6
lgtsTmr = 1
ChkMtn = 1
intLgts = 6
...
...
...
counterexample (Tc). For confluence, it reports the best runtime between our
two explicit algorithms (Tbe) and for our symbolic algorithm (Ts). Memory
consumption accounts for both decision diagrams and operation caches.</p>
      <p>
        Net PN t is the model corresponding to our running example, and fails the
termination check. Even though the state space is not very large,
counterexample generation is computationally expensive [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ] and consumes most of the
runtime. The shortest counterexample generated by SmArT has a long tail
consisting of 1885 states and leads to the 10-state cycle of Fig. 11 (only the
nonempty places are listed for each state, and edges are labeled with the
corresponding PN transition). Analyzing the trace, we can clearly see (in bold) that,
when lights are about to be turned off due to the timeout, lMtn = 0, and
the external light is low, ExtLgt ≤ 5, the infinite sequence of internal events
(LgtsOff , ChkExtLgt, LgtsOn, ChkMtn)ω prevents the system from terminating.
Thus, rules r4, r5, r6, and r7 need to be investigated to fix the error. Among
the possible modifications, we choose to replace rule r5 with r50 : on ChkExtLgt
if ((intLgts= 0 and lExtLgt ≤ 5) and lMtn= 1) do activate (LgtsOn), resulting
in the addition of an input arc from lMtn to r5Tst. The new corrected model is
called PN c in Table 1, and SmArT verifies it holds the termination property.
      </p>
      <p>We then run SmArT on PN c to verify confluence, and found 72,644 bad states.
Fig. 12 shows one of these unstable states, s0, reaching two stables states, s1
and s2. External event ExtLgtLow closes the batch in s0 and triggers rule r8,
which sets intLgt to 6 and activates internal event ChkSlp, which in turn sets
intLgt to 0 (we omit intermediate unstable states from s0 to s1 and to s2).
We correct rules r8 and r9, replacing them with r0 : on ExtLgtLow if lSlp=0
8
do set (intLgt, 6) and r90: on ExtLgtLow if lSlp=1 do set (intLgt, 0); resulting
in model PN fc. Checking this new model against for confluence, we find that
the number of bad states decreases from 72,644 to 24,420. After investigation,
we determine that the remaining problem is related to rules r2 and r3. After
changing rule r1 to on SecElp if ((lgtsTmr ≥ 1 and lgtsTmr ≤ 359) and lMtn
= 0) do increase (lgtsTmr, 1), the model passes the check. This demonstrates
the effectiveness of counterexamples to help a designer debug a set of ECA rules.</p>
      <p>
        We then turn our attention to larger models, which extend our original model
by introducing four additional rules and increasing variable ranges. In PN 1 and
PN 2, the external light variable ExtLgt ranges in [
        <xref ref-type="bibr" rid="ref20">0, 20</xref>
        ] instead of [
        <xref ref-type="bibr" rid="ref10">0, 10</xref>
        ]; for
PN 4, it ranges in [0, 50]. PN 2 also extends the range of the light timer variable
lgtTmr to [0, 720]; PN 3 to [0, 3600]. We observe that, when verifying termination
or conuflence, the time and memory consumption tends to increase as the model
grows; also, our symbolic algorithm scales much better than the best explicit
approach when verifying conuflence. For the relatively small state space of PN t,
enumeration is effective, since computing TC is quite computationally expensive.
However, as the state space grows, enumerating the unstable states consumes
excessive resources. We also observe that the supposedly improved explicit
confluence algorithm sometimes makes things worse. The reason may lie in the fact
that a random selection of a state from the frontier has different statistical
properties than for the original explicit approach, and also in the fact that operation
caches save many intermediate results. However, both explicit algorithms run
out of memory on PN 3 and PN 4. Comparing the results for PN 3 and PN 4, we
also observe that larger state spaces might require less resources. With symbolic
encodings, this might happen because the corresponding MDD is more regular
than the one for a smaller state space.
7
      </p>
    </sec>
    <sec id="sec-7">
      <title>Conclusion</title>
      <p>Verifying termination and confluence of ECA rule bases for reactive systems
is challenging due to their highly concurrent and nondeterministic nature. We
proposed an approach to verify these properties using a self-modifying PN with
inhibitor arcs and priorities. Our approach is general enough to give precise
answers to questions about other properties, certainly those that can be
expressed in CTL. As an application, we showed how a light control system can
be captured by our approach, and we verified termination and conuflence for
this model using SmArT. In the future, we would like to improve our approach
in the following ways. The confluence algorithm must perform constrained state
space generation starting from each unstable state, which is not efficient if Sunst
is large. In that case, a simulation-based falsification approach might be more
suitable, using intelligent heuristic sampling and searching strategies. However,
this approach is sound only if the entire set Sunst is explored. Another direction
to extend our work is the inclusion of abstraction techniques to reduce the size
of the state space.</p>
      <sec id="sec-7-1">
        <title>Acknowledgement</title>
        <p>Work supported in part by UC-MEXUS under grant Verification of active rule
bases using timed Petri nets and by the National Science Foundation under grant
CCF-1018057.</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>D. J.</given-names>
            <surname>Abadi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Carney</surname>
          </string-name>
          ,
          <string-name>
            <given-names>U.</given-names>
            <surname>Çetintemel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Cherniack</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Convey</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Lee</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Stonebraker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Tatbul</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Zdonik</surname>
          </string-name>
          .
          <article-title>Aurora: a new model and architecture for data stream management</article-title>
          .
          <source>The VLDB Journal</source>
          ,
          <volume>12</volume>
          (
          <issue>2</issue>
          ):
          <fpage>120</fpage>
          -
          <lpage>139</lpage>
          ,
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>A.</given-names>
            <surname>Aiken</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Widom</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J. M.</given-names>
            <surname>Hellerstein</surname>
          </string-name>
          .
          <article-title>Behavior of database production rules: termination, confluence, and observable determinism</article-title>
          .
          <source>Proc. ACM SIGMOD</source>
          , pp.
          <fpage>59</fpage>
          -
          <lpage>68</lpage>
          . ACM Press,
          <year>1992</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>J. C.</given-names>
            <surname>Augusto</surname>
          </string-name>
          and
          <string-name>
            <given-names>C. D.</given-names>
            <surname>Nugent</surname>
          </string-name>
          .
          <article-title>A new architecture for smart homes based on ADB and temporal reasoning. Toward a Human-Friendly Assistive Environment</article-title>
          , vol.
          <volume>14</volume>
          , pp.
          <fpage>106</fpage>
          -
          <lpage>113</lpage>
          ,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>E.</given-names>
            <surname>Baralis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Ceri</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Paraboschi</surname>
          </string-name>
          .
          <article-title>Improved rule analysis by means of triggering and activation graphs</article-title>
          .
          <source>Rules in Database Systems, LNCS 985</source>
          , pp.
          <fpage>163</fpage>
          -
          <lpage>181</lpage>
          .
          <year>1995</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>E.</given-names>
            <surname>Baralis</surname>
          </string-name>
          and
          <string-name>
            <given-names>J.</given-names>
            <surname>Widom</surname>
          </string-name>
          .
          <article-title>An algebraic approach to static analysis of active database rules</article-title>
          .
          <source>ACM TODS</source>
          ,
          <volume>25</volume>
          (
          <issue>3</issue>
          ):
          <fpage>269</fpage>
          -
          <lpage>332</lpage>
          , Sept.
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6. E.
          <string-name>
            <surname>-H. Choi</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          <string-name>
            <surname>Tsuchiya</surname>
            , and
            <given-names>T.</given-names>
          </string-name>
          <string-name>
            <surname>Kikuno</surname>
          </string-name>
          .
          <article-title>Model checking active database rules under various rule processing strategies</article-title>
          .
          <source>IPSJ Digital Courier</source>
          ,
          <volume>2</volume>
          :
          <fpage>826</fpage>
          -
          <lpage>839</lpage>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>G.</given-names>
            <surname>Ciardo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R. L.</given-names>
            <surname>Jones</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. S.</given-names>
            <surname>Miner</surname>
          </string-name>
          , and
          <string-name>
            <given-names>R.</given-names>
            <surname>Siminiceanu</surname>
          </string-name>
          .
          <article-title>Logical and stochastic modeling with SMART</article-title>
          .
          <source>Proc. Modelling Techniques and Tools for Computer Performance Evaluation, LNCS 2794</source>
          , pp.
          <fpage>78</fpage>
          -
          <lpage>97</lpage>
          .
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>S.</given-names>
            <surname>Comai</surname>
          </string-name>
          and
          <string-name>
            <given-names>L.</given-names>
            <surname>Tanca</surname>
          </string-name>
          .
          <article-title>Termination and confluence by rule prioritization</article-title>
          .
          <source>IEEE TKDE</source>
          ,
          <volume>15</volume>
          :
          <fpage>257</fpage>
          -
          <lpage>270</lpage>
          ,
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>K. G.</given-names>
            <surname>Kulkarni</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N. M.</given-names>
            <surname>Mattos</surname>
          </string-name>
          , and
          <string-name>
            <given-names>R.</given-names>
            <surname>Cochrane</surname>
          </string-name>
          .
          <article-title>Active database features in SQL3</article-title>
          .
          <source>Active Rules in Database Systems</source>
          , pp.
          <fpage>197</fpage>
          -
          <lpage>219</lpage>
          . Springer, New York,
          <year>1999</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <given-names>E. A.</given-names>
            <surname>Lee</surname>
          </string-name>
          .
          <article-title>Computing foundations and practice for cyber-physical systems: A preliminary report</article-title>
          .
          <source>Technical Report UCB/EECS-2007-72</source>
          , UC Berkeley, May
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <given-names>X.</given-names>
            <surname>Li</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. M.</given-names>
            <surname>Marín</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S. V.</given-names>
            <surname>Chapa</surname>
          </string-name>
          .
          <article-title>A structural model of ECA rules in active database</article-title>
          .
          <source>Proc. Second Mexican International Conference on Artificial Intelligence: Advances in Artificial Intelligence</source>
          , pp.
          <fpage>486</fpage>
          -
          <lpage>493</lpage>
          . Springer,
          <year>2002</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>D. McCarthy</surname>
            and
            <given-names>U.</given-names>
          </string-name>
          <string-name>
            <surname>Dayal</surname>
          </string-name>
          .
          <article-title>The architecture of an active database management system</article-title>
          .
          <source>ACM SIGMOD Record</source>
          ,
          <volume>18</volume>
          (
          <issue>2</issue>
          ):
          <fpage>215</fpage>
          -
          <lpage>224</lpage>
          ,
          <year>1989</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <given-names>T.</given-names>
            <surname>Murata</surname>
          </string-name>
          .
          <article-title>Petri nets: properties, analysis and applications</article-title>
          .
          <source>Proc. of the IEEE</source>
          ,
          <volume>77</volume>
          (
          <issue>4</issue>
          ):
          <fpage>541</fpage>
          -
          <lpage>579</lpage>
          , Apr.
          <year>1989</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <given-names>D.</given-names>
            <surname>Nazareth</surname>
          </string-name>
          .
          <article-title>Investigating the applicability of Petri nets for rule-based system verification</article-title>
          .
          <source>IEEE TKDE</source>
          ,
          <volume>5</volume>
          (
          <issue>3</issue>
          ):
          <fpage>402</fpage>
          -
          <lpage>415</lpage>
          ,
          <year>1993</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15. I.
          <article-title>Ray and I. Ray. Detecting termination of active database rules using symbolic model checking</article-title>
          .
          <source>Proc. East European Conference on Advances in Databases and Information Systems</source>
          , pp.
          <fpage>266</fpage>
          -
          <lpage>279</lpage>
          . Springer,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <given-names>R.</given-names>
            <surname>Valk</surname>
          </string-name>
          .
          <article-title>Generalizations of Petri nets</article-title>
          .
          <source>Mathematical foundations of computer science, LNCS 118</source>
          , pp.
          <fpage>140</fpage>
          -
          <lpage>155</lpage>
          .
          <year>1981</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <given-names>D.</given-names>
            <surname>Varró</surname>
          </string-name>
          .
          <article-title>A formal semantics of UML statecharts by model transition systems</article-title>
          .
          <source>Proc. Int. Conf. on Graph Transformation</source>
          , pp.
          <fpage>378</fpage>
          -
          <lpage>392</lpage>
          . Springer,
          <year>2002</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <given-names>Y.</given-names>
            <surname>Zhao</surname>
          </string-name>
          and
          <string-name>
            <given-names>G.</given-names>
            <surname>Ciardo</surname>
          </string-name>
          .
          <article-title>Symbolic CTL model checking of asynchronous systems using constrained saturation</article-title>
          .
          <source>Proc. ATVA, LNCS 5799</source>
          , pp.
          <fpage>368</fpage>
          -
          <lpage>381</lpage>
          .
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <given-names>Y.</given-names>
            <surname>Zhao</surname>
          </string-name>
          and
          <string-name>
            <given-names>G.</given-names>
            <surname>Ciardo</surname>
          </string-name>
          .
          <article-title>Symbolic computation of strongly connected components and fair cycles using saturation</article-title>
          .
          <source>ISSE</source>
          ,
          <volume>7</volume>
          (
          <issue>2</issue>
          ):
          <fpage>141</fpage>
          -
          <lpage>150</lpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <given-names>Y.</given-names>
            <surname>Zhao</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Xiaoqing</surname>
          </string-name>
          , and
          <string-name>
            <given-names>G.</given-names>
            <surname>Ciardo</surname>
          </string-name>
          .
          <article-title>A symbolic algorithm for shortest EG witness generation</article-title>
          .
          <source>Proc. TASE</source>
          , pp.
          <fpage>68</fpage>
          -
          <lpage>75</lpage>
          . IEEE Comp. Soc. Press,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>