Go home now Header Background Image
Submission Procedure
share: |
Follow us
Volume 9 / Issue 11 / Abstract

available in:   PDF (155 kB) PS (163 kB)
Similar Docs BibTeX   Write a comment
Links into Future

Monitoring Temporal Logic Specifications Combined with Time Series Constraints

Doron Drusinsky
(Naval Postgraduate School and Time-Rover, Inc. California, USA

Man-Tak Shing
(Naval Postgraduate School California, USA

Abstract: Run-time monitoring of temporal properties and assertions is used for testing and as a component of execution-based model checking techniques. Traditional run-time monitoring however, is limited to observing sequences of pure Boolean propositions. This paper describes tools for observing temporal properties over time series; namely, sequences of propositions with constraints on data value changes over time. Using such Temporal Logic with time Series (TLS), it is possible to monitor important properties such as stability, monotonicity, temporal average and sum values, and temporal min/max values. The specification and monitoring of linear time temporal logic with real-time and time series constraints are supported by the Temporal Rover and the DBRover, which are in-process and remote run-time monitoring tools. The novel TLS extension described in this paper is based on practical experience and feedback provided by NASA engineers after using the DBRover to verify flight code. The paper also presents a novel hybrid approach to verify timing properties in rapid system prototyping that combines the traditional schedulability analysis of the design and the monitoring of timing constraint satisfaction during prototype execution based on a time-series temporal logic. The effectiveness of the approach is demonstrated with a prototype of the fish farm control system software.

Keywords: Temporal Logic, Run-time Execution Monitoring, Rapid Prototyping, Execution-based Model Checking, Real-time Systems

Categories: D.2.1, D.2.4, D.2.5, D.2.6, D.3.1, F.3.1

1 Introduction

Temporal Logic is a special branch of modal logic that investigates the notion of time and order. In [Pnueli 77], Pnueli suggested using Linear-Time Propositional Temporal Logic (LTL) for reasoning about concurrent programs. Since then, several researchers have used LTL to state and prove correctness of concurrent programs, protocols, and hardware (e.g., [Hailpern and Owicki 83], [Manna and Pnueli 81]).

Linear-Time Temporal Logic (LTL) is an extension of propositional logic where, in addition to the propositional logic operators, there are four future-time operators and four dual past time operators: always in the future (always in the past), eventually, or sometime in the future (sometime in the past), until (since), and next cycle (previous cycle).

Page 1261

Metric Temporal Logic (MTL) was suggested by Chang, Pnueli, and Manna as a vehicle for the verification of real time systems [Chang et al. 94]. MTL extends LTL by supporting the specification of relative time and real time constraints. All four LTL future time operators (Always, Eventually, Until, Next) can be constrained by relative time and real time constraints specifying the duration of the temporal operator. For example, {x>0} Until <5 {y>0} means x>0 must be true until a future time, at most 5 real-time units in the future, where y>0 must hold. This paper describes additional extension to LTL and MTL suitable for the specification of time-series constraints.

Run time Execution Monitoring (REM) is a class of methods of tracking temporal requirements for an underlying application. First applications of REM were verification oriented where REM methods were used to track whether an executing system conforms to formal specification requirements. REM is also useful as a component of execution-based model checkers such as the Java Path Finder [Havelund and Pressburger 00]. Recent adaptations of REM methods enable run time monitoring for non-verification purposes such as temporal business rule checking and temporal security rule checking [Drusinsky and Fobes 03]. Unlike previously published methods [Sistla and Wolfson 95], the newer methods are on-line; namely, temporal rules are evaluated without storing an ever growing and potentially unbounded history trace. The Temporal Rover and DBRover tools described in the next section perform on-line REM using executable alternating finite automata. The technique enables on-line monitoring complex Kansas State Specification Pattern assertions at a rate of 6000 to 60,000 cycles per second on a 1GHz CPU [Drusinsky 03], and is capable of monitoring past-time and future-time temporal logic augmented with real-time constraints, time-series constraints, and special counting operators described in [Drusinsky 00]. High-speed on-line REM enables demanding applications such as formal specification based exception handling [Drusinsky 01].

REM is particularly useful in assisting real-time system engineers to evaluate the feasibility of temporal requirements with time-series constraints that must be satisfied over a period of time. When working in tandem with rapid prototyping, REM can be used to debug the requirements and identify errors early in the design process. The hybrid approach described in Section 4 is supported by an environment made up of the Software Engineering Automation Tools (SEATools) [Luqi et al. 01] and the DBRover System. The effectiveness of the approach is demonstrated with a prototype of the fish farm control system software.

2 Run Time Monitoring Tools: The Temporal Rover and DBRover

The Temporal Rover [Drusinsky 00] is a code generator whose input is a Java, C, C++, or HDL source code program, where LTL/MTL assertions are embedded as source code comments. The Temporal Rover parser converts this program file into a new file, which is identical to the original file except for the assertions that are now implemented in source code. The following example contains an embedded MTL assertion for a Traffic Light Controller (TLC) written using the Temporal Rover syntax asserting that for 10 seconds, whenever light is red, camera should be on:

Page 1262

void tlc(int Color_Main, boolean CameraOn) { 
  ... /* Traffic Light Controller functionality */ 
  /* TRBegin 
   TRClock{C1=getTimeInMillis()} // get time from OS 
   TRAssert{ Always({Color_Main == RED} Implies 
               Eventually_C1<10000_{CameraOn == 1}) 
           } => 
      // Customizable user actions 
  TREnd */ 
} /* end of tlc */ 

The Temporal Rover generates code that replaces the embedded LTL/MTL assertion with real C, C++, Java, or HDL code, which executes in-process, i.e., as part of the underlying application. The DBRover is a software environment for specifying temporal constraints and remotely monitoring the temporal behavior of the target application. The DBRover consists of a GUI for editing temporal assertions, an MTL simulator, and an MTL execution engine. The DBRover builds and executes temporal rules for a target program or application. In run-time, the DBRover listens for messages from the target application, which are transmitted via HTTP, sockets, or serial communication, and evaluates corresponding temporal assertions. Hence, in the traffic light controller example above, the DBRover will listen for messages pertaining to the run-time values of the CameraOn Boolean propositions, as well as the run-time value of the Color_Main variable. The DBRover then evaluates the corresponding MTL assertion for that cycle. Monitoring is performed on-line, namely, the DBRover operates in tandem with the target program, and re-evaluates assertions every cycle. The DBRover uses an underlying algorithm that does not store a history trace of the data it receives; it can therefore monitor very long and potentially never ending executions of target applications.

The DBRover was used successfully to verify flight code for NASA's Deep Impact project [Drusinsky and Watney 02]. Nevertheless, feedback provided by NASA engineers showed that certain requirements require the ability to specify time-series constraints. The next section describes an extension to LTL and MTL designed for this purpose. The Temporal Rover and DBRover were extended to support this new capability.

3 Improving LTL and MTL: adding Time Series Constraints (TLS)

While LTL and MTL assert about sequences of pure Boolean propositions, it is often required to assert about sequences of propositions over time series, i.e., series of data values with constraints on the change of those values over time. For example, consider a requirement R, stating that for one hour as of eventA, the value of variable x should be 10% stable. Such a requirement combines MTL with propositions based on temporal instances of a variable x. The need for such time series assertions typically involves the validation of statistical and algebraic artifacts such as stability, monotonicity, averaging and expectancy, sum and product values, and min/max values.

Page 1263

Like LTL, TLS assertions are non-deterministic and might have multiple overlapping instances active simultaneously. For example, in requirement R above, the values of a same variable named x are referred to and compared with one another in multiple points in time, for a plurality of eventA's, i.e., for a plurality of initial x values. One of many possible scenarios is where eventA occurs first when x =100, and then occurs again 30 minutes later when x =110; hence, in the overlapping 30 minutes time-segment, x values must range between 99 and 110 (Figure 1). Clearly, the number and timing of eventA occurrences is unknown in advance, and the simple 1-hour end condition is, in general, non-deterministic, rendering the task of monitoring all possible scenarios non-trivial.

Figure 1: TLS Assertion for Requirement R

TLS enables the specification of requirements in which propositions include temporal instances of variables. Consider the following automotive cruise control code with an embedded stability assertion requiring speed to be 5% stable while cruise is set and not changed (uses the Temporal Rover's source code comments-based syntax):

void cruise(boolean cruiseSet, boolean cruiseChange,
       boolean cruiseOff, boolean cruiseIncr, int speed){
  ... /* Cruise Controller functionality */
  /* TRBegin
      TRAssert{Always ({cruiseSet}Implies 
                {speed*0.95<speed' && speed'<speed*1.05} 
                Until $speed$ {cruiseChange || cruiseOff}
               ) }=> {...} // user actions
  TREnd */
} /* end of tlc */

In this example speed is a temporal data variable, which is associated with the Until temporal operator. This association implies that every time the Until operator begins its evaluation, possibly in multiple instances (due to non-determinism), the speed value is sampled and preserved in the speed variable of this instance of the Until operator; this value is referred to as the pivot value for this Until operator instance.

Page 1264

Future speed values used by this particular evaluation of the Until statement are referred to using the prime notation, i.e., as speed', and are called primed values. Hence, if speed is 100Kmh when cruiseSet is true, then the pivot value for speed is 100, while every subsequent speed value is referred to as speed' and must be within 5% of the (pivot) speed.

Note how speed is declared using the $speed$ notation to be a temporal data variable associated with the Until operator. This declaration indicates to the Temporal Rover that it should be sampling a pivot value from the environment in the first cycle of the Until operators lifecycle, and to refer to all subsequent samples of speed as speed'.

Similarly, the following example consists of a monotonicity requirement for the cruise control system, where speed is monotonically increasing while Cruise Increase (cruiseIncr) command is active:

      TRAssert {Always({cruiseIncr}Implies 
                  {(speed<=speed') && (speed=speed')>=0} 
                  Until $speed$ {!cruiseIncr}
                )}=>  {...} // user actions

In this example the temporal data variable speed is sampled upon the cruiseIncr event, and is compared to the current value (speed') every cycle. The latest speed value is then saved as the pivot for next cycle's comparison.

Page 1265

The following example consists of a temporal averaging and min/max requirement for the cruise control system, requiring that while cruise is set and unchanged, the difference between average speed and minimum speed is always less than 1% of speed.

      TRAssert {Always ({cruiseSet}Implies 
                  {(n++ >=0)&& ((sum+=speed') >= 0) &&
                   ((average=sum/n) >=0) &&
                   ((min=(speed'<min?speed':min) >=0) &&
                   (average-min < speed'/100)
                  {cruiseChange || cruiseOff}
                )}=> {...} // user actions

In this example the only data value that is sampled from the environment (the cruise method/function) is speed. All other pivots (i.e., for min, n, average, and sum) are initialized upon the construction of the Until object. Likewise, the only prime value that is sampled from the environment is speed', whereas all other primed variables are assigned as specified in the assignment statements (e.g. as average'=sum'/n'). The Temporal Rover makes this distinction when is recognizes an assignment in the declaration statement, such as sum=0 above.

4 Verifying Timing Properties in Rapid System Prototyping

Real-time systems are those whose correct behavior depends not only on the logical result of the computation but also on the time at which the result is produced. Traditionally, these temporal requirements are expressed as hard and soft timing constraints. It is imperative for real-time systems to meet all deadlines in hard timing constraints but acceptable to miss the deadlines of the soft timing constraints occasionally [Liu 00]. There are currently two complementary approaches to evaluating the correctness of real-time systems: static analysis of its behavior according to a set of metrics (e.g. schedulability analysis to establish the feasibility of the timing constraints) and run-time monitoring of real-time systems to study its behavior according to a set of metrics (e.g. release jitter, frequency and degree of tardiness, etc.). While the static analytic approach plays a very important role in helping system designers set time budgets and allocate resources in their designs, they are only effective if correct timing constraints can be determined during the requirements analysis phase. Feasible requirements for large dynamic systems are difficult to formulate, understand, and meet without extensive prototyping. Moreover, traditional analytical techniques are not effective in evaluating time-series temporal behaviors. These requirements are best evaluated through a hybrid approach that combines the static schedulability analysis of the design and the run-time monitoring of the prototype execution based on TLS. The approach is supported by an environment made up of the Software Engineering Automation Tools (SEATools) and the DBRover.

Figure 2: The SEATools Environment

SEATools is based on the Prototyping System Description Language (PSDL) [Luqi et al. 88] [Luqi 93], which is a high-level language designed specifically to support the conceptual modeling of real-time embedded systems. Real-time requirements in the system development are modeled as PSDL specifications, which are dataflow graphs augmented with non-procedural timing and control constraints (Figure 3). PSDL allows the specification of both input and output guards to provide conditional execution of an operator and conditional output of data.

Page 1266

Guards can include conditions on timers that measure duration of system states, and can allow operators to execute only when fresh data has been written to an input stream. Each time critical operator has a maximum execution time (MET) constraint, representing the maximum time the operator may need to complete execution after it is fired, given access to all required resources. In addition, each periodic operator has a period and a deadline (FW). The period is the interval between triggering times for the operator and the deadline is the maximum duration from the triggering of the operator to the completion of its operation. Each sporadic operator has a maximum response time (MRT) and a minimum calling period (MCP). The minimum calling period is the smallest interval allowed between two successive triggering of a sporadic operator. The maximum response time is the maximum duration allowed from the triggering of the sporadic operator to the completion of its operation. An operator can be implemented in either a target programming language or PSDL. An operator with an implementation in the target programming language is called an atomic operator. An operator that is decomposed into a PSDL implementation is called a composite operator. For example, the monitor_environment operator in Figure 3 may be modeled as the graph shown in Figure 4.

Figure 3: PSDL specification

Figure 4: Decomposition of the monitor_environment operator

Page 1267

PSDL's declarative timing and control constraints help de-couple the behavioral aspects of a system from its timing properties to allow independent analysis of these two aspects, and organize timing constraints in a hierarchical fashion, to allow independent consideration of smaller subsets of timing constraints.

5 The Fish Farm Control System (FFCS)

In this section, we shall illustrate the hybrid approach with a fish farm control system prototype. The FFCS will control the fish food dispenser and water quality in a fish tank. The tank has a mechanical feeder that drops pellets of fish food from a feeder tube suspended above the tank. The feeder can be turned on and off by the computer. The tank also has a water inlet pipe and a drain pipe with valves controlled by the computer, and sensors that measure the water level (millimeters above the bottom), the oxygen level in the water (parts per million), and the ammonia level in the water (parts per million). The FFCS must deliver fish food at scheduled feeding times, repeated every day. The times when each feeding starts and stops are displayed on the console of the FFCS and can be adjusted from the keyboard. The FFCS must keep the oxygen level at least 8 parts-per-million (ppm), and the ammonia level at most 9 ppm. Fish will die if left in an environment with low oxygen or high ammonia for 1 minute or more. The fish tank is 1 meter wide, 2 meters long, and 1 meter deep (1mm level = 2 liters volume). The FFCS must keep the water level between 60 and 90 cm at all time. The fill/drain valves allow a maximum flow of 0.5 liters per second when valve is fully open. The fresh water coming in the inlet valve contains 30 ppm of oxygen and contains no ammonia. The fish in the tank consumes oxygen at a rate of 0.1 ml/sec and generates ammonia at a rate of 0.0015 ml/sec while resting and at a rate of 0.003 ml/sec while they are eating. The FFCS should minimize water flow subject to the above constraints. In addition, we add another requirement that "when water level is below 88 cm for at least three minutes, the drain valve settings should be limited to be at most 10% of the maximum setting" to illustration the expressive power of the temporal logic.

Figure 5 shows the PSDL model for the FFCS. In the interest of brevity, we shall only discuss the water quality control portion of the prototype in this paper, which is made up of six atomic operators: monitor_h2o, monitor_o2, monitor_nh3, control_water_flow, adjust_inlet and adjust_drain, with the associated control and timing constraints shown in Table 1.

Page 1268

Figure 5: The PSDL model for the Fish Farm Control System

Operator Control
monitor_h2o - Period = 2000
ms FW = 200 ms
MET = 80 ms
monitor_o2 - Period = 2000 ms
FW = 200 ms
MET = 80
monitor_nh3 - Period = 2000 ms
FW = 200 ms
MET = 80
control_water_flow - Period = 1000 ms
FW = 200 ms
MET = 100 m
Adjust_inlet Triggered by SOME
MCP = 2000 ms
MRT = 2500 ms
MET = 80 ms
adjust_drain Triggered by SOME
MCP = 2000 ms
MRT = 2500 ms
MET = 80 ms

Table 1: The control and timing constraints of the water quality control operators

Page 1269

Central to the design is the control_water_flow operator, which controls the inlet and drain water flow based on the following decision table.

< 65 cm 65 cm, 85 cm > 85 cm
(O2) &
- O2 < 8
ppm or
NH3 > 9
O2 8
ppm and
NH3 9
O2 < 8
ppm or
NH3 > 9
O2 8
ppm or
NH3 9
Inlet Valve Setting open open close open close
Drain Valve Setting close close close open open

Table 2: Decision table for the control water flow logic

To find out if the prototype meets all the requirements using the DBRover System, we formally specify the following temporal rules using TLS:

Rule 1: The water level must be between 60 and 90 cm at all time, formally written as:
              Always {h2o >= 60 && h2o <=90}.

Rule 2: The oxygen level cannot be less than 8 ppm for more than 60 seconds, formally written as:
formally written as:
              Always {o2<8} Implies Eventually <=60 {o2>=8}.

Rule 3: The ammonia level cannot be more than 9 ppm for more than 60 seconds, formally written as:
formally written as:
              Always {nh3>9} Implies Eventually <=60 {nh3<=9}.

Rule 4: If water level has been below 88 cm for 180 seconds, then the change of the drain valve setting must be less than or equal to 10% of the maximum setting (100) per second, formally written as:

      Always( Always >=180 {h2o<=88} Implies 
        Eventually $dv, ffcs_timer$
        { ffcs_timer'==ffcs_timer ||
          abs(dv' - dv)/(ffcs_timer'-ffcs_timer) <= 10}.

We also add four operators (check_h2o_level, check_o2_level, check_nh3_level, check_drain_setting) to the PDSL model (Figure 6). These operators, when triggered respectively by new data values in the h20, o2, nh3 and drain_setting streams, will send the updated values to the DBRover for temporal property verification during prototype execution (Figure 7). The control and timing constraints of these operators are shown in Table 3.

Page 1270

Figure 6: The enhanced PSDL model with additional operators to invoke the DBRover runtime monitor

Figure 7: Architecture of the integrated SEATools / DBRover Runtime Monitor System

Page 1271

Operator Control Constraints Timing Constraints
check_h2o_level Triggered by SOME h2o MCP = 1000 ms
MRT = 1500 ms
MET = 80 ms
check_o2_level Triggered by SOME o2 MCP = 1000 ms
MRT = 1500 ms
MET = 80 ms
check_nh3_level Triggered by SOME
MCP = 1000 ms
MRT = 1500 ms
MET = 80 ms
check_drain_setting Triggered by SOME
h2o, drain_setting
MCP = 2000 ms
MRT = 2500 ms
MET = 80 ms

Table 3: The control and timing of the new operators

Figure 8 shows a snapshot of the Temporal Rule Monitor panel of the DBRover system, showing the status of Rule 2 during prototype execution. Each line in the panel represents a new evaluation of the rule, where the top most line represents the latest evaluation. The output from the Temporal Rule Monitor indicated that Rule 2 was invoked by the check_o2_level operator of the FFCS prototype once every 2 seconds (as expected). The timing and logic of the control_water_flow operator (Tables 1 and 2) has caused the oxygen level in the fishpond to fall below 8 ppm roughly once every 10 seconds, but only for a brief duration of at most 2 seconds each time. Output for the other 3 rules (not shown) indicated that the water level, ammonia level and drain valve setting always stayed within the desired limits.

Although the current design satisfied Rule 2, it caused the inlet valve to be turned on (for a duration of 2 seconds) once every 10 seconds, which is bad for the long-term health of the mechanical valve. One way to avoid frequent switching of the valve is by setting the frequency of the control_water_flow operator to longer periods. Through the use of SEATools, we were able to go through the cycle of changing the timing constraints of the operators, translating the PSDL specification into Ada code, compiling the Ada code and executing the prototype in less than 5 minutes. Figure 9 shows a snapshot of the status of Rule 2 when the period of the control_water_flow operator was set to 30 seconds. The new period has caused the oxygen level in the fishpond to fall below 8 ppm roughly once every 2.5 minutes, and for a duration that varied from 3 seconds to 37 seconds. This caused the inlet valve to be turned on (for a duration of 30 seconds) roughly once every 2.5 minutes.

Page 1272

Figure 8: The Temporal Rule Monitor Panel

Figure 9: The status of Rule 2 when the control_water_flow operator fires once every 30 seconds

Page 1273

To illustrate the ability for the DBRover Monitor to catch permanent rule violations, we regenerated the executable prototype with the period of the control_water_flow operator set to 60 seconds. Figure 10 showed a snap shot of the status of Rule 2 after executing the prototype for 14 minutes and 17 seconds. The Temporal Rule Monitor detected that the oxygen level fell below 8ppm for more than 1 minute (from 5:07:43 through 5:08:46) and declared a permanent violation (the Done message) of Rule 2 at 5:08:46.

Figure 10: Output of the Temporal Rule Monitor showing the permanent violation of Rule 2

6 Conclusion

While temporal logic specifications and monitoring have been successfully used for the verification of complex reactive systems such as NASA's Deep Impact flight code [Drusinsky and Watney 02], it was found that requirements with time-series constraints such as stability constraints, monotonicity constraints, average-value and expected-value constraints, and sum and product constraints, are all difficult to express in LTL. We have shown an extension of LTL and MTL, named TLS, capable of capturing such requirements. TLS specifications are supported by the Temporal Rover V8.0 and by its remote monitoring counterpart, the DBRover V2.0. The DBRover also includes a graphical simulator for TLS enabling the simulation and debugging of temporal requirements before deploying them on the monitor.

We also show that run-time monitoring, in tandem with rapid prototyping, can be used in verifying temporal properties in the very early stage of the design process. This approach helps identify errors earlier in the design process and also helps debug the requirements themselves. Code generation support by SEATools and Temporal Rover is vital for such approach to be practical. The executable prototype consists 3968 lines of source code, 2048 of which are Ada and C codes generated by the SEATools and the DBRover. The use of socket communication provides a very simple interface between the SEATools runtime environment and the DBRover System. We only need to create one atomic operator in the PSDL model for each temporal rule. The Ada implementation of each of these atomic operators consists of a one-line procedure call to invoke the corresponding C routine implementing the temporal rule. The mapping between the Ada and C code is very straightforward and can be automatically generated easily.

Page 1274

Although the use of socket communication introduces additional time delay between the detection of events during the prototype execution and the checking of the affected temporal properties by the DBRover, it has negligible effect on the accuracy of the verification result because DBRover allows user to specify time based on the client's clock. All events detected during prototype execution are stamped with the local clock before sending to the DBRover for verification.


Work done by the first author was supported in part by Naval Postgraduate School Research Initiation Program. Work done by the second author was supported in part by the U.S. Army Research Office under grant number 40473-MA-SP and the U.S. Navy SPAWAR Command under grant number N0003903WRHF02D.


[Chang et al. 94] Chang, E., Pnueli, A., Manna, Z.: "Compositional Verification of Real-Time Systems"; Proc. 9th IEEE Symp. on Logic in Computer Science (1994), 458-465.

[Drusinsky 00] Drusinsky, D.: "The Temporal Rover and ATG Rover"; Proc. Spin2000 Workshop, Springer LNCS, 1885 (2000), 323-329.

[Drusinsky 01] Drusinsky, D.: "Formal Specs Can Handle Exceptions"; CMP Embedded Developers Journal (Nov. 2001), 10-14.

[Drusinsky 03] Drusinsky, D.: "On-line Efficient Monitoring of Metric Temporal Logic Specifications using Alternating Automata"; manuscript (2003), submitted for publication.

[Drusinsky and Fobes 03] Drusinsky, D., Fobes, J.: "Real-time, On-line, Low Impact, Temporal Pattern Matching"; Proc. 7th World Multiconference on Systemics, Cybernetics and Informatics, Orlando FL (2003), accepted for publication.

[Drusinsky and Watney 02] Drusinsky, D., Watney, G.: "Applying Run-Time Monitoring to the Deep-Impact Fault Protection Engine"; Proc. 27th IEEE/NASA ICECCS workshop (2002).

[Hailpern and Owicki 83] Hailpern, B., Owicki, S.: "Modular Verification of Communication Protocols"; IEEE Trans of comm., 31, 1 (1983). 56-68.

[Havelund and Pressburger 00] Havelund, K., Pressburger, T.: "Model Checking Java Programs Using Java PathFinder"; International Journal on Software Tools for Technology Transfer (STTT), 2, 4 (2000), 366-381.

[Liu 00] Liu, J.: "Real-Time Systems"; Prentice Hall, 2000.

[Luqi 93] Luqi: "Real-Time Constraints in a Rapid Prototyping Language"; Journal of Computer Languages, 18 (1993), 77-103.

[Luqi et al. 88] Luqi, Berzins, V., Yeh, R.: "A Prototyping Language for Real-Time Software"; IEEE Trans. on Software Eng., 14, 10 (1988), 1409-1423.

[Luqi et al. 01] Luqi, Berzins, V., Ge, J., Shing, M., Auguston, M., Bryant, B., Kin, B.: "DCAPS-architecture for distributed computer aided prototyping system"; Proc. 12th International Workshop on Rapid System Prototyping (2001), 103-108.

Page 1275

[Manna and Pnueli 81] Manna, Z., Pnueli, A.: "Verification of Concurrent Programs: Temporal Proof Principles"; Proc. Workshop on Logics of Programs, Springer LNCS, 131 (1981), 200-252.

[Pnueli 77] Pnueli, A.: "The Temporal Logic of Programs"; Proc.18th IEEE Symp. on Foundations of Computer Science (1977), 46-57.

[Sistla and Wolfson 95] Sistla, A., Wolfson, O.: "Temporal Conditions and Integrity Constraints in Active Database Systems"; Proc. ACM-SIGMOD 1995 International Conference on Management of Data, San Jose, CA (May 1995).

Page 1276