<!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>
      <journal-title-group>
        <journal-title>I. Mackey); su@ucsb.edu (J. Su)</journal-title>
      </journal-title-group>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>A Rule-Based Constraint Language for Event Streams</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Isaac Mackey</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Jianwen Su</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Dept. of Computer Science, University of California</institution>
          ,
          <addr-line>Santa Barbara</addr-line>
          ,
          <country country="US">USA</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2022</year>
      </pub-date>
      <volume>000</volume>
      <fpage>0</fpage>
      <lpage>0001</lpage>
      <abstract>
        <p>Software systems and the availability of data collecting devices lead to large amounts of data in the form of event streams. The ability to query, analyze, reason about, and monitor event streams is in high demand. In this work, we formalize a model of events and event streams in workflow systems, and a constraint language by extending Datalog with timestamp variables and gap constraints (inequalities with constant ofsets) over a time domain. We illustrate an application of our language by expressing rules with time constraints and data dependencies for workflow systems, where event streams from workflow enactments are monitored in real-time to ensure compliance with policies, regulations, and business rules.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;temporal constraints</kwd>
        <kwd>monitoring</kwd>
        <kwd>events</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        (which uses window operators for expressing intervals, instead of time variables that can be
used in multiple (in)equalities), and “temporal” Datalog [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] (which does not allow inequalities
over time variables). Streamlog [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] is another Datalog extension for event stream processing,
but its purpose is to reduce blocking queries, so it does not allow rules whose head variables
match timestamps before the timestamps for body variables. In comparison a key omission in
our language is the ability to generate new tuples (as our current focus is event monitoring).
      </p>
      <p>In Sec. 2 we formalize a model of events and event streams, and present the constraint
language. In Sec. 3, we describe the monitoring and early detection problems and present relevant
results. Finally, we discuss generalizations of these results and further applications in Sec. 4.</p>
    </sec>
    <sec id="sec-2">
      <title>2. A Rule-Based Constraint Language</title>
      <p>
        In this section, we present a language for writing constraints on events in workflow enactments.
The language is a variant of Datalog with two notable distinctions: the use of (i) timestamp
variables, and (ii) multiple atoms in a rule head. Furthermore, we adopt rules as constraints
rather than for deriving facts, which means the satisfaction of constraints by enactments is the
primary concern, rather than the deduction of new facts. This makes our language a natural
extension of tuple- and equality-generating dependencies [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. We define below the key notions
of the language, including “events,” “enactments,” and “rules.”
      </p>
      <p>We assume the existence of six countably infinite, pairwise disjoint sets of: activity names A,
attributes C, discrete and ordered timestamps T, (data) values D, variables V, and (workflow)
enactment identifiers , or simply ids, I. Without loss of generality, we use the natural numbers N
as timestamps.</p>
      <p>Activities are atomic units of work in a workflow, each with a name and data attributes.
The execution of an activity produces an “event” at a timestamp at which the activity’s data
attributes obtain values.</p>
      <p>Definition: An activity (c1, ..., c) has a name  ∈ A and an enumeration of  (⩾ 0) distinct
attributes c1, ..., c from C. An event of (c1, ..., c) is a tuple =(, , ,  ) where  ∈ T is a
timestamp,  ∈ I an id, and  : {c1, ..., c} → D a mapping to data values.</p>
      <p>A partial enactment of a workflow system is a set of events such that (i) all events share the
same enactment id, (ii) there is exactly one special START event (that marks its beginning) and at
most one END event (that marks its completion), (iii) the timestamp of START is less than that of
all other events, and (iv) the timestamp of END, if it is present, is greater than that of all other
events. An enactment is a partial enactment that contains an END event.</p>
      <p>A (partial) enactment can be stored as a relational database, e.g., the database in Fig. 1 for an
enactment with id  1. For example, the first row of the Request table indicates a Request event
for  1 from user Alice with account 3 at time 2.</p>
      <p>
        To express constraints on enactments, we use a language introduced in [
        <xref ref-type="bibr" rid="ref14 ref7">7, 14</xref>
        ] and extended
with data in [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], presented below. An event atom is an expression “(1, ..., )@” where
(c1, ..., c) is an activity and 1, ..., ,  are variables in V;  is called the timestamp variable.
A gap atom is an expression “±    ” where ,  are timestamp variables,  (the gap) is a
timestamp in T, and  ∈ {&lt;, ⩽, ⩾, &gt;, =} is an (in)equality predicate. Without loss of generality,
we use natural numbers as timestamps, with the associated +/− operations and ordering.
      </p>
      <p>Start
ID
 1
ts
1</p>
      <p>ID
 1
 1</p>
      <p>Request
user account ts ID
Alice a3 2  1
Alice a4 6</p>
      <p>Payment
ID user account ts
 1 Alice a3 8
 1 Alice a4 9</p>
      <p>Approval
user
Alice
Definition: A rule is an expression “ →  ” where  (the body) and  (the head) are sets of
event and gap atoms such that each variable in a gap atom in  occurs in an event atom in 
and each variable in a gap atom in  occurs in an event atom in  ∪  .</p>
      <p>Example 1. Consider an IaaS provider that ofers high-performance cloud computing rentals.
The service is managed by a workflow with activities like Request and Payment, which carry
attributes like user and account. Fig. 1 shows a partial enactment of the workflow. Consider that
the IaaS provider checks enactments against business rules; these rules may measure service
availability, quality, etc. The provider has the following rule:</p>
      <p>This rule 1 indicates that a payment for a rental must be completed within 7 days of the
request by the same user and account. Observe that the timestamp  of the Request event and
the timestamp  of the Payment event are constrained to give an upper bound (or “deadline”)
for the payment.</p>
      <p>A second rule 2 requires the presence of Reserve and Payment events (with a matching user
and account) given certain Request and Approval events:
In 2, the timestamp variable  in the body constrains another timestamp variable  in the body,
restricting which pairs of events trigger 2. Also,  and  in the body both constrain ,  in the
head.</p>
      <p>Rule satisfaction is defined for enactments using variable assignments: an assignment is a
mapping from V to D ∪ T: timestamp variables are mapped to T and all other variables to
D. An assignment is complete if it is a total mapping for the variables in an atom (or set of
atoms). An enactment  satisfies an event atom (1, ..., )@ under a complete assignment
 if ( (), , ,  (1), ...,  ()) is an event in  and  is the id of  . Let :  (¯, ¯) →  (¯, ¯)
be a rule with distinct variables ¯, ¯, ¯. An enactment  satisfies  if  satisfies the formula
∀¯¯(  (¯, ¯) → ∃¯ (¯, ¯)) in first-order logic; a violation of  is an assignment  such that 
satisfies  with  and there is no assignment  that extends  such that  satisfies  with  .</p>
    </sec>
    <sec id="sec-3">
      <title>3. Monitoring and Early Detection</title>
      <p>
        In this section, we describe an application of rules for monitoring enactments studied in our
recent work [
        <xref ref-type="bibr" rid="ref14 ref15 ref8">15, 14, 8</xref>
        ]. We define the monitoring problem and then present two results:
one concerning the subclass of dataless, simple rules and another concerning early violation
detection for the general class of rules.
      </p>
      <p>The rule satisfaction problem is to test if specified rules are satisfied by a (complete) enactment.
Often, however, it is possible to know a rule violation is inevitable before the enactment is
complete if the violation is present in all of its possible futures. Consider 1 in Ex. 1, a Request
event at time  is a violation if no Payment event is observed by time  + 7. Then, a violation
can be reported before the enactment completes once time  + 8 is observed. It is advantageous
to monitor the inevitability of violations as the partial enactment is updated. To formulate the
monitoring problem, each partial enactment is treated as a relational database, and a “batch”
holds the set of incoming events.</p>
      <p>Definition: A batch for a partial enactment  is a finite set ∆ of events such that (i) all events
in ∆ have the same timestamp, greater than all timestamps in  , (ii) the id of each event in ∆ is
the id of  , (iii) if ∆ has START,  is the empty set, and (vi) if  has END, ∆ is the empty set.</p>
      <p>Given a partial enactment  and a batch ∆ , the (online) monitoring problem is to decide if
every enactment containing the union  ∪ ∆ violates a (set of) specified rule(s).</p>
      <p>
        In [
        <xref ref-type="bibr" rid="ref14 ref15">15, 14</xref>
        ] we study this problem for events carrying no data. A rule is dataless if all of its
event atoms have no data attributes, i.e., each event atom has the form @. We develop a
translation into linear temporal logic (LTL) for subclasses of dataless, “simple” rules. Recall that
the body or head is a conjunctive formula. These can be represented as an undirected graph.
Let  be a rule body or rule head. The graph of  is an undirected graph  = (, ) such that
 is the set of timestamp variables in  and  is the set of pairs (, ) such that  contains a
gap atom using both  and . We say  is acyclic if  is acyclic. A rule is simple if the body
and head are both acyclic and they share at most one variable.
      </p>
      <p>
        In [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ], we show that the monitoring problem can be solved for dataless, simple rules by
translating rules into LTL formulas, then constructing finite state machines from LTL formulas
on finite traces using existing techniques [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]. Then, detecting violations is reduced to applying
a state transition function at each timestamp and checking the reachability of an accepting
state. We use the temporal operators next and future in future-time LTL [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ], as well as past
and yesterday [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ]. It was stated:
Theorem 2. [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] Let  be a simple, dataless rule. An LTL formula   can be efectively
constructed such that for all enactments  ,
      </p>
      <p>satisfies  if  satisfies the LTL formula  .</p>
      <p>
        We also studied the monitoring problem for the general class of rules, including enactments
with data. Consider 2 in Example 1, events Request and Approval at times  and , resp., with
 ⩽  ⩽ +7. There may be a violation at the earlier of +3 and +7 if the corresponding head
event doesn’t arrive. Calculating the earliest time a violation becomes inevitable is the early
detection problem. Notably, detecting violations early is much desired as it may, for example,
allow the workflow system to reclaim resources from erring enactments. In [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], we present
an algorithm for early detection. The core technical development is to calculate for each rule
body assignment (a potential violation), the latest time it can be extended (the “deadline”) w.r.t.
partially evaluated head gap atoms. The deadline informs the monitoring algorithm when to
report violations and can result in violations detected significantly earlier than the enactment’s
END event. In the following theorem, we assert that our algorithm reports violations at the
earliest possible time, i.e., when processing a batch update that makes a violation inevitable.
Theorem 3. [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] Let  be a rule,  a partial enactment, and ∆ a batch for  . It can be efectively
determined if some enactment containing  satisfies  but no enactments containing  ∪∆
satisfy .
      </p>
      <p>
        The algorithm in [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] processes multiple enactments and reports every variable assignment
corresponding to a violation. While the current implementation uses relational algebra to handle
event data and imperative subroutines to calculate deadlines, it appears that the algorithm can
be mostly expressed in Datalog, which could provide an alternative means of evaluation.
      </p>
    </sec>
    <sec id="sec-4">
      <title>4. Conclusions</title>
      <p>Complex temporal constraints occur in many application domains (IoT, cyber-physical systems,
etc.). For IoT devices, memory and network limitations demand space-eficient algorithms for
stream processing and tolerance of out-of-order events. In cyber-physical systems, violations
must be anticipated as early as possible so that the system can maintain a safe state; this requires
studying early detection for constraints that mix time, space, and other resources. Finally, it is
desirable to have rules that check for the absence of events, generate facts, and allow summaries
and aggregates, alongside rules that express constraints.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>A.</given-names>
            <surname>Margara</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E. D.</given-names>
            <surname>Valle</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Artikis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Tatbul</surname>
          </string-name>
          , H. Parzyjegla (Eds.), International Conference on Distributed and
          <string-name>
            <surname>Event-Based</surname>
            <given-names>Systems</given-names>
          </string-name>
          , ACM, ACM,
          <year>2021</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>J.</given-names>
            <surname>Xie</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Yang</surname>
          </string-name>
          ,
          <article-title>A survey of join processing in data streams</article-title>
          ,
          <source>in: Data Streams</source>
          , Springer,
          <year>2007</year>
          , pp.
          <fpage>209</fpage>
          -
          <lpage>236</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>A.</given-names>
            <surname>Gupta</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I. S.</given-names>
            <surname>Mumick</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V. S.</given-names>
            <surname>Subrahmanian</surname>
          </string-name>
          ,
          <article-title>Maintaining views incrementally</article-title>
          ,
          <source>in: Proc. ACM Conference on Management of Data (SIGMOD)</source>
          ,
          <year>1993</year>
          , pp.
          <fpage>157</fpage>
          -
          <lpage>166</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>D.</given-names>
            <surname>Anicic</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Fodor</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Rudolph</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Stühmer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Stojanovic</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Studer</surname>
          </string-name>
          ,
          <article-title>A rule-based language for complex event processing and reasoning</article-title>
          ,
          <source>in: International Conference on Web Reasoning and Rule Systems</source>
          , Springer,
          <year>2010</year>
          , pp.
          <fpage>42</fpage>
          -
          <lpage>57</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>M.</given-names>
            <surname>Gebser</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Grote</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Kaminski</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Obermeier</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Sabuncu</surname>
          </string-name>
          , T. Schaub,
          <article-title>Stream reasoning with answer set programming: Preliminary report</article-title>
          ,
          <source>in: Thirteenth International Conference on the Principles of Knowledge Representation and Reasoning</source>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>I. S.</given-names>
            <surname>Bajwa</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. G.</given-names>
            <surname>Lee</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Bordbar</surname>
          </string-name>
          ,
          <article-title>Sbvr business rules generation from natural language specification</article-title>
          , in: 2011 AAAI Spring Symposium Series, Citeseer,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>I.</given-names>
            <surname>Mackey</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Su</surname>
          </string-name>
          ,
          <article-title>Mapping business rules to ltl formulas</article-title>
          ,
          <source>in: ICSOC</source>
          <year>2019</year>
          ,
          <year>2019</year>
          , pp.
          <fpage>563</fpage>
          -
          <lpage>565</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <surname>I. Mackey</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Chimni</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Su</surname>
          </string-name>
          ,
          <article-title>Early detection of temporal constraint violations</article-title>
          ,
          <source>in: 29th International Symposium on Temporal Representation and Reasoning (TIME)</source>
          , to appear,
          <year>2022</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>S.</given-names>
            <surname>Abiteboul</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Hull</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Vianu</surname>
          </string-name>
          , Foundations of Databases, Addison-Wesley,
          <year>1995</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>P.</given-names>
            <surname>Alvaro</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W. R.</given-names>
            <surname>Marczak</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Conway</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. M.</given-names>
            <surname>Hellerstein</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Maier</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Sears</surname>
          </string-name>
          ,
          <article-title>Dedalus: Datalog in time and space</article-title>
          ,
          <source>in: International Datalog 2.0 Workshop</source>
          , Springer,
          <year>2010</year>
          , pp.
          <fpage>262</fpage>
          -
          <lpage>281</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>H.</given-names>
            <surname>Beck</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Dao-Tran</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Eiter</surname>
          </string-name>
          ,
          <article-title>Lars: A logic-based framework for analytic reasoning over streams</article-title>
          ,
          <source>Artificial Intelligence</source>
          <volume>261</volume>
          (
          <year>2018</year>
          )
          <fpage>16</fpage>
          -
          <lpage>70</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>A.</given-names>
            <surname>Ronca</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Kaminski</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B. C.</given-names>
            <surname>Grau</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Motik</surname>
          </string-name>
          ,
          <string-name>
            <surname>I. Horrocks</surname>
          </string-name>
          ,
          <article-title>Stream reasoning in temporal datalog</article-title>
          ,
          <source>in: Proceedings of the AAAI Conference on Artificial Intelligence</source>
          , volume
          <volume>32</volume>
          ,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>C.</given-names>
            <surname>Zaniolo</surname>
          </string-name>
          ,
          <article-title>Logical foundations of continuous query languages for data streams</article-title>
          ,
          <source>in: International Datalog 2.0 Workshop</source>
          , Springer,
          <year>2012</year>
          , pp.
          <fpage>177</fpage>
          -
          <lpage>189</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>I.</given-names>
            <surname>Mackey</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Su</surname>
          </string-name>
          ,
          <article-title>Mapping singly-linked, acyclic rules to linear temporal logic formulas</article-title>
          , in submission,
          <year>2022</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>I.</given-names>
            <surname>Mackey</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Su</surname>
          </string-name>
          ,
          <article-title>Mapping business rules to ltl formulas</article-title>
          ,
          <source>in: ICSOC</source>
          <year>2019</year>
          ,
          <year>2019</year>
          , pp.
          <fpage>563</fpage>
          -
          <lpage>565</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <surname>G. De Giacomo</surname>
            ,
            <given-names>M. Y.</given-names>
          </string-name>
          <string-name>
            <surname>Vardi</surname>
          </string-name>
          ,
          <article-title>Linear temporal logic and linear dynamic logic on finite traces</article-title>
          ,
          <source>in: IJCAI'13 Proceedings of the Twenty-Third international joint conference on Artificial Intelligence, Association for Computing Machinery</source>
          ,
          <year>2013</year>
          , pp.
          <fpage>854</fpage>
          -
          <lpage>860</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>A.</given-names>
            <surname>Pnueli</surname>
          </string-name>
          ,
          <article-title>The temporal logic of programs</article-title>
          , in: FoCS,
          <year>1977</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>O.</given-names>
            <surname>Lichtenstein</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Pnueli</surname>
          </string-name>
          ,
          <string-name>
            <surname>L. Zuck,</surname>
          </string-name>
          <article-title>The glory of the past</article-title>
          ,
          <source>in: Workshop on Logic of Programs</source>
          , Springer,
          <year>1985</year>
          , pp.
          <fpage>196</fpage>
          -
          <lpage>218</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>