Parallel Execution of Temporal Logic Programs Using Dataflow Computation Kang Zhang Mehmet A. Orgun Department of Computing , Macquarie University Sydney , NSW 2109 , Australia -LSB- ABSTRACT -RSB- The paper presents a data?driven execution model , CHEM , for a temporal logic programing language , Chronolog . An intermediate virtual machine is proposed , which is granulated at clause argument level to exploit argument parallelism through unification . Context?parallelism , inherent in temporal logic programs , is exploited through dynamic tagging approach typically used in dataflow computers . The model is process?based and supports AND ? , OR?parallelism in the highly distributed dataflow environment . Implementation techniques used to support these forms of parallelism are described . 1 . INTRODUCTION Temporal logic -LSB- Gol87 -RSB- has been successfully used as a formalism in concurrent program specification and verification , modelling temporal databases and reasoning about time . More recently , several researchers have suggested that temporal logic can be directly used to extend the basis of logic programming . For instance , Tokio -LSB- AFM86 -RSB- is a temporal logic language , based on interval logic ; Templog -LSB- AM89 -RSB- and Chronolog -LSB- Wad88 , OW92 -RSB- are based on linear?time temporal logics ; and Temporal Prolog -LSB- Gab87 -RSB- is based on linear and branching time temporal logics . However , there is little work done on implementing temporal logic languages . Some of the early suggested implementations are based on translation into standard logic programs -LSB- Wad88 -RSB- or by meta?interpretation -LSB- KAFT86 -RSB- . These implementation techniques can form the basis of a quick prototype system , but such an implementation can not exploit parallelism inherent in logic programs and the context?parallelism offered by tem - poral logic programs . In temporal logic programming , computations at different moments in time , i.e. in different contexts , can be performed in parallel . Communication between computations at different moments in time is controlled by time?dependencies that result from the use of temporal operators . Context?parallelism is therefore an inherent property of temporal logic programming . It can be more effectively exploited by a dataflow implementation using tagging scheme as implemented in dynamic dataflow computers -LSB- GKW85 -RSB- . This parallelism is in addition to AND/OR ? parallelism existing in standard logic programs -LSB- Con87 -RSB- . When alternative clauses in a procedure are evaluated simultaneously , OR?parallelism is achieved -LSB- Zha93 -RSB- . OR?parallelism can also be exploited at a higher level in terms of the search tree , which represents the execution of the program . The unification of more than one clause head with a given goal is considered as separate branches of the search tree . Multiple such branches , each including the clause involved and its continuation , can be executed in parallel . AND?parallelism is exploited when more than one goal in a clause body are evaluated in parallel . Each goal in a body may include multiple OR branches . Most parallel execution models of logic programs are control?flow based : there is a centralised control and the sequence of instructions is handled by a program counter . Since control?flow approach requires the execution sequence to be predefined , it is difficult to implement context?parallelism of temporal logic programs , which is dynamic in nature -LRB- it is in fact run?time generated -RRB- . However , dataflow computation offers an ideal solution to the context?parallelism . The computations in a dataflow machine are data?driven , i.e. an operation is executed as soon as all of its input operands are available . The result of an operation is sent to one or more other operations as their operands . Such computations can be visualised as two?dimensional graphs which show the data dependencies among sub?computations . A sub?computation may also be represented as a graph for lower level parallel execution . When multiple graphs , or graph nodes , of the same function are labelled with different tags , they can be executed in parallel . This is usually realised in tagged token dataflow machines -LSB- GKW85 -RSB- . This paper describes a parallel execution model for the temporal logic programming language Chronolog -LSB- OW92 -RSB- , using the tagged token data?driven principle to exploit context?parallelism as well as other forms of parallelism . The model is called CHEM , for CHronolog Execution Model . We first briefly introduce the language Chronolog and its underlying operational model . We then present the design of a Chronolog virtual machine and the Chronolog parallel execution model , based on dataflow computation , followed by an outline of the implementation techniques used . We finally draw the conclusion and mention the future work . 2 . TEMPORAL PROGRAMMING IN CHRONO - LOG Chronolog is based on the assumption that many problems involve implicit or explicit temporal dependencies , and also many problems can be conveniently viewed as manipulating multiple infinite streams of objects . Chronolog is a conservative extension of Prolog , so it also features powerful pattern matching and a non ? deterministic control strategy . In spite of its simplicity , the expressive power of the language coincides with that of Templog -LSB- OW92 , Bau92 -RSB- . Chronolog is based on a temporal logic with unbounded future with the set of natural numbers as the collection of moments in time . It offers two temporal operators , namely , first and next . The temporal operator first refers to the initial moment in time , and next the next moment in time . Chronolog is in particular suitable for applications involving the notion of dynamic change , such as modelling non?terminating computations , artificial intelligence applications and temporal deductive databases -LSB- OW92 , Rol87 -RSB- . Chronolog programs look like standard logic programs with the only difference being that program clauses contain applications of temporal operators to atomic formulas . For example , consider the following temporal logic program that specifies the fib predicate to generate the sequence f = < 0 , 1 , 1 , 2 , 3 , 5 , ... > of Fibonacci numbers , where f0 = 0 , f1 = 1 and fi +2 = fi +1 + fi for all i > = 0 : first fib -LRB- 0 -RRB- . first next fib -LRB- 1 -RRB- . next next fib -LRB- Z -RRB- < ? next fib -LRB- X -RRB- , fib -LRB- Y -RRB- , Z is X+Y . Here first fib -LRB- 0 -RRB- , first next fib -LRB- 1 -RRB- , next next fib -LRB- Z -RRB- etc. are called temporal atoms . In the program , the first two program clauses define the first two Fibonacci numbers as 0 and 1 ; the last clause defines the current Fibonacci number as the sum of the previous two . Goals can be either open?ended or fixed?time . Fixed ? time goals have an application of first followed by a number of applications of next . The goal < ? first next fib -LRB- N -RRB- is an example of a fixed?time goal . The answer to the goal is a substitution instance with N replaced by 1 -LRB- implied by the second clause , which is the only clause that matches the goal -RRB- . Open?ended goals such as < ? fib -LRB- N -RRB- are not fixed to any particular moment in time and the goal in fact stands for an infinite series of independent fixed?time goals of the form < ? first next -LRB- n -RRB- fib -LRB- N -RRB- for n > = 0 . We write next -LRB- n -RRB- for n successive applications of next . Therefore , in principle , any number of fixed ? time goals can be executed in parallel . The answers obtained from independent computations are regarded as the answers to the original goal . In this way we can start a non?terminating computation to generate the sequence of Fibonacci numbers and at the same time exploit context?parallelism . 3 . AN OPERATIONAL MODEL The operational model of the temporal language Chronolog is based on the proof procedure called TiSLD?resolution -LSB- OW93 -RSB- , which is applied to a set of canonical -LRB- fixed?time -RRB- program clauses and goal clauses . The canonical instances of a formula A are obtained by applying the temporal operator first followed by a number of next 's to the formula in all possible ways : first A , first next A , first next next A and so on . The correctness of TiSLD?resolution is based on the idea that the value of a given formula can be expressed in terms of the values of its canonical instances . Note that sub?goals obtained from an open ? ended goal are always canonical . Given a Chronolog program P and a goal G , a computation of G from P can be described as follows : If G is open?ended , independent computations for sub?goals are spawned off ; otherwise there is only one computation . At each computation , there is a conjunction of temporal atoms to be proved . A temporal atom A from the goal -LRB- the left?most one -RRB- is selected and matched against program clauses by temporal?matching and unification . Temporal?matching involves the matching of temporal operators in the selected temporal atom A and a canonical instance of a program clause , starting from the top ? most clause . Then A is unified with the head of the temporally?matching program clause . A new goal is produced by replacing the selected temporal atom in the goal by the body of the matching canonical instance and then the substitution -LRB- i.e. the variable bindings -RRB- obtained from unification is applied to the new goal . In case there are more than one matching clause , we adapt a standard backtracking mechanism in the operational model . Implementations of Chronolog rely on the underlying resolution?type proof procedure for correctness -LSB- OW93 -RSB- . For efficiency , we must combine features of logic programming implementations -LRB- unification , backtracking -RRB- with features of dataflow implementations -LRB- associative memory , tagging -RRB- such as those of Lucid implementations -LSB- FW86 -RSB- . The proposed execution model is in particular amenable to parallel implementations on multi?processor architectures . 4 . CHRONOLOG VIRTUAL MACHINE The execution model of Chronolog is built on an intermediate virtual machine , namely Chronolog virtual machine -LRB- CVM -RRB- . CVM is represented by a set of instructions , called virtual machine instructions , or operators in dataflow terminology . A Chronolog program can be compiled into the CVM by constructing a number of dataflow graphs . Each graph is responsible for a clause execution . The nodes in a graph are dataflow operators . All the nodes whose operands are available can be executed simultaneously . Most of the nodes correspond to clause argument operations -LRB- particularly through unification -RRB- , so that the parallelism exploited within a graph may be called argument parallelism . Some nodes do not involve any particular operation , but simply make procedure calls . A node as such may be called a macro node which refers to one or more graphs representing the called procedure . A virtual instruction contains an operation code -LRB- opcode -RRB- , representing a type of primitive operation ; four input and output ports among which at least one should be used as an input arc -LRB- or operand -RRB- and one as an output . When more than three input or ouput arcs are required for an instruction , mutiple copies of the instruction can be cascaded . The constraint that an instruction node may have a maximum of four arcs for input and output is advantageous in simplifying hardware implementation , e.g. restricting the instruction packets to a fixed length . Apart from these four operands , each instruction has a special operand , known as an instruction trigger , for sequential control purposes . An instruction trigger can be any type of data . It is used to activate the evaluation of one or more clauses whose canonical instances match the temporal operator of a given goal , and to disable the execution of those clauses which do not temporally match the goal . An instruction trigger is also useful in the situation where the goals in a clause have to be evaluated sequentially even though they are entirely independent from each other . An obvious example is when a logical test predicate is included , the goals following the predicate can proceed for execution only after the logical test succeeds . Such a sequential execution can not be realized by the normal dataflow principle unless an additional operand is used in each of the following goals so that it can be triggered by the successful test . All the instruction nodes whose operands and instruction triggers are available can be executed simultaneously . Each node , after execution , may put a new result token on its output arcs , and thus fire the following nodes . If the execution fails , a ? fail ? signal for the associated graph is immediately generated and reported to the code area where instructions are stored so that no more instruction nodes of the same graph are allowed for execution . Only when the graph is activated again may the ? fail ? signal be disabled . Some instruction operands may be pre?occupied by certain terms so that they become ever?ready operands . The compiler is responsible for producing these operands , based on the information of the source program . Figure 1 illustrates an example of dataflow graphs , compiled from the fib program given in Section 2 . All the three clauses defined in fib have exclusive relationships with regards to time?tags , in other words , no more than one clause can unify with any goal which has a time?tag , i.e. is not open?ended . The whole procedure fib is also known as determinate procedure due to this exclusiveness , A switch instruction is used to index the three clauses . It switches on 0 , 1 and T +2 according to T ' from the goal . When the goal is switched to the first two clauses , the single argument is unifiable with the time tag T ' . If the goal is open?ended , T ' is represented as a variable so that all the three output ports of the switch instruction are open . Therefore , all the clauses are triggered for execution . switch01T +2 unify collect unify create create decrement1 fib fib + fib T ' arg_input arg_output 1 T +2 decrement2 Figure 1 Dataflow graph for the fib program A collect instruction produces the first available input as its output if the instruction trigger is a constant . It collects all the inputs into a stream if the instruction trigger is a variable . A unify instruction performs the unification algorithm and generates two outputs : an instance on the left output and an environment on the right . The instance output represents a common instance of the two input operands . The environment output delivers a the binding environment -LRB- BE -RRB- result from the unification , i.e. pairs of variables and their binding instances . If the unification fails , so does the instruction ; otherwise , the instruction sends the common instance to the instance output and BE to the environment output . In the example graph in Figure 1 , the environment output is unused . When the goal is switched to the third clause , two new variables are generated , by two create instructions , and sent to two recursive calls to fib respectively . The two calls are made at different contexts , synchronized by the new time tags , produced by decrement1 and decrement2 instructions . A decrementN instruction always takes an integer input , typically a time tag , and produces an integer output which is the difference of the input integer subtracted from N . There is also an incrementN instruction which receives an integer and produces an integer output that is the sum of the input integer and N. Apart from the instructions appeared in the example , there are other instructions which implement the operations in the standard logic programming . For example , a decompose instruction deals with lists by decomposing them into heads and tail lists . A construct instruction does the opposite . It receives a non?list term and list and construct a new list using the non?list term as the head and the input list as the tail . There are some other instructions which handle BEs . For more detailed descriptions of the virtual instructions serving the standard logic programming , we refer the reader to Zhang and Thomas -LSB- ZT91a -RSB- . 5 . PARALLEL EXECUTION CHEM is a process model for the parallel implementation of logic programs based on dataflow computation . One or more clauses in a procedure are represented , as shown in Section 4 , as a dataflow graph , whose execution is supported by the Chronolog virtual machine . The graph nodes , corresponding to virtual machine instructions , are responsible for clause argument operations , and can be executed once their operands are available so that argument parallelism is exploitable within individual graphs . A form of parallelism offered by temporal logic programming is known as context?parallelism : moments in time can be viewed as contexts and computations at different contexts can be performed in parallel . Communication between contexts is controlled by time?dependencies which result from the use of temporal -LRB- context?switching -RRB- operators in dataflow graphs as shown in Figure 1 . At the high level , a dataflow graph may be thought of as an OR process , which may include several exclusive clauses . The execution of a Chronolog program amounts to constructing and searching the AND/OR tree of this program . For a given goal and a program , there exists a unique AND/OR tree which represents the complete search space of the goal . The initial goal is assigned to an AND process , which becomes the root of the AND/OR tree . For each group of clauses , if there exists a clause whose context matches the context of the goal of an AND process and whose head is also unifiable with the goal , one OR process is spawned , thus the corresponding graph is activated to carry out the unification and reduction of the matching clause . When head unification succeeds in an OR process , the reduction proceeds to the clause body by spawning one AND process for each body literal and then reducing them either sequentially or concurrently depending on the run?time data dependencies between the body literals . All the graphs -LRB- represented as groups of clauses -RRB- that include a matching context with a given goal 's context and are unifiable with the goal are activated and thus multiple OR processes are spawned simultaneously , therefore OR?parallelism is achieved . Variable bindings of an OR process are arranged to be entirely independent from its parent AND process so that OR?parallelism can be efficiently implemented on a highly distributed multiprocessor system -LRB- see Section 6.2 -RRB- . When an AND process succeeds , it merges the argument variable bindings received from its child OR processes . The AND process then sends the variable bindings to its sibling AND processes which share the corresponding variables . A successful OR process merges the results received from its child AND processes , and sends them to the parent process . The model is by default running in OR?parallel . But the programs containing side?effect predicates are to be run sequentially because parallel evaluation of such programs may produce undesired results . Sequential execution is also appropriate to prevent the system overflow when the amount of parallelism exploited becomes overwhelming . 6 . IMPLEMENTATION 6.1 . Main data areas CHEM manages five data areas as described below : 1 -RRB- The code area statically stores compiled Chronolog programs , which are represented as individual dataflow graphs . 2 -RRB- Structured terms created during unification and constant terms are stored in the structure area . This area is known as a heap in conventional imple - mentations of the WAM -LSB- War83 -RSB- . But it is organized in CHEM in a way different from that in a conventional heap . There is no reference from one structured term -LRB- i.e. list or structure -RRB- to another . Reading a structured term is simply a retrieval of the whole term without the need to dereference . Destructive writing to a structured term is not allowed . Instead , whenever a term is to be updated , it is recreated to include the updated structure elements . 3 -RRB- Binding environments -LRB- BEs -RRB- record all the variable bindings produced during unification . Each BE is a self?contained entity that has no references to any other BEs . 4 -RRB- The target area contains choice?points and procedure call information . The latter includes argument returning pointers and argument registers for passing argument values between procedures . Choicepoints and argument returning pointers are represented as target addresses for the destined graph nodes , to which argument values or result values are sent . 5 -RRB- The warehouse area stores intermediate results which may be reused during the entire computation . The function of the warehouse and its implementation are described in Section 6.3 . 6.2 . Variable representation A variable in CHEM can be bound to any term . A variable that has its first appearance in the clause head but not in a structured term is called a global variable , and is treated as a communication channel along which the incoming argument terms are transferred . A variable that appears only once in the clause body is called a dummy variable , or simply dummy , represented by a dummy symbol . All other variables are called local variables . A local variable is identified uniquely by its variable symbol which is explicitly generated during execution and is associated with the clause of its origin . A variable occurring in a structured term in the head may function as either a global variable or a local variable , depending upon the type of the corresponding argument of the caller process . As a result of unification , a global variable may carry local variables which were local to the caller process before the procedure call was made . These definitions provide guidance for the compiler to generate dataflow graphs . The CVM actually operates only on local variables . A main issue in implementing OR?parallelism is how to reduce the accessing time of variable bindings when multiple bindings of a single variable are kept in different branches of the search tree . Conventional ap - proaches use a centralized auxiliary structure to model the search tree and store variable bindings -LSB- CH83 , War87 -RSB- . To access a variable which was bound early in a process and high on the search tree , a number of accessing stages are needed in the dereference operation . In the CHEM implementation , when a variable V is bound to a term T -LRB- T may be a non?variable term or another variable -RRB- during unification , a variable ? instance pair is produced and denoted as V/T . One or more variable?instance pairs construct a binding environment -LRB- BE -RRB- , represented as -LCB- V1/T1 , V2/T2 , ... -RCB- . A binding environment is created only when one or more such variables are bound . Dereferencing a variable V is simply to find its corresponding pair V/T , and then to read T . When a dummy is bound to a term , it is simply replaced by the term , and there is no effect on the binding environment . The binding environment that is newly generated by a unification operation is called a temporary binding environment -LRB- TBE -RRB- . An existing binding environment which is active throughout the evaluation of a process is called a current binding environment -LRB- CBE -RRB- . A CBE is created , incremented and updated by applying TBEs . Therefore , BEs in CHEM are implemented to be independent from each other and variable binding instances are always stored in individual BEs where variable appear . This arrangement reduces the cost of dereference operation considerably because a single BE needs to be accessed for a variable binding . The BE independence is achieved by eagerly instantiating variables whenever they are due to be transferred from the current process to a child or sibling process -LSB- ZT91b -RSB- . CHEM supports both sequential and parallel execution modes . When a procedure is in sequential execution mode , it may have one current binding environment , which needs a backup copy in case of backtracking so that previous bindings can be restored . A backup version of the binding environment is called backup binding environment -LRB- BBE -RRB- . If the procedure is operated in OR?parallel mode , a binding environment may be allocated to each clause of the procedure in order to store its own version of variable bindings . No backup binding environment is needed for OR?parallel execution . The main problem in implementing AND?parallelism is that a binding conflict may occur when two or more parallel executed body literals share a common variable . A practical approach to avoiding binding conflicts is to analyze the data dependencies between body literals , and to allow only these independent ones to run in parallel . The parallelism exploited in this manner is called Restricted AND?parallelism -LSB- DeG84 -RSB- . The binding scheme described above imposes the instantiation operations on all the body literals , dependent AND?parallelism can not be supported without loosing the benefits of high distributability and low variable accessing cost . Restricted AND?parallelism is , however , readily incorporated in CHEM : the instantiation results produced by the binding scheme are used to test the run?time dependencies between body literals in order to executed them simultaneously . The use of dataflow graph notation and its computation mechanism -LSB- DK82 -RSB- is most natural in exploiting parallelism where there is no data dependency . 6.3 . Warehouse It is desirable to be able to reuse the previous computations and to avoid repeated and unnecessary evaluations of a temporal atom which needs to be reduced several times in different contexts . CHEM uses an associative memory , known as warehouse , to store the results of the previous computations -LSB- FW86 -RSB- , and as a means for communication between independent computations under context?parallelism -LRB- Figure 2 -RRB- . Consider the example of the fib program , and we want to prove the goal < ? first next -LRB- 5 -RRB- fib -LRB- N -RRB- . If both of the atoms first next -LRB- 3 -RRB- fib -LRB- 2 -RRB- and first next -LRB- 4 -RRB- fib -LRB- 3 -RRB- are computed earlier and stored in the warehouse , the answer to the above goal can be obtained using these results and evaluating the third program clause . By doing this , unnecessary computations are avoided . Ta Tb Tc Warehouse collect arg_input arg_output Figure 2 Context?parallelism supported by warehouse In general , a goal at time T can be evaluated by reducing simultaneously a number of goals in the same form as the original goal but with different time?tags Ti -LRB- < T -RRB- . The original goal is solved when all the subsequent goals , which are reduced in parallel with the goal , are solved . These subsequent goals are also solved in the same fashion as the original goal . This style of execution is , in fact , demand?driven , where a demand is sent , in the opposite direction of the data being sent , from the consumer of the data to the producer . The warehouse maintains computed temporal atoms and provides temporal?matching to given temporal goals . An ideal warehouse management scheme should not only store all the distinct temporal atoms which have been computed , but also be able to dispatch the stored computation in a time much shorter than when they are recomputed . This obviously requires a large associative memory and also slows down the matching process . An efficient space?saving garbage collection scheme is , therefore , required . We adopt a heuristic approach , called retirement plan , proposed by Faustini and Wadge for the dataflow language Lucid -LSB- FW86 -RSB- . In the retirement plan , a computed temporal atom is stored in the warehouse with a global retirement age . The warehouse is swept periodically to discard those temporal atoms that have reached their retirement age . It is in general not an easy task to predict which stored atoms will be needed later and for how long . However , there is no harm in discarding a temporal atom that might be needed later , because it can be recomputed from the program at the expense of repeated computations , should a need arise . Faustini and Wadge adopted a retirement age scheme in which the age of a data item stored in the warehouse is the number of garbage?collecting sweeps it has survived since it was last used . The age of a data item is initially 0 . Every time there is a demand for its value , its age is reset to 0 . It is claimed that , with some improvements , the retirement age scheme has proved to be extremely successful for Lucid programs . In CHEM , an improved version of the retirement age scheme is used . In the improved version , the results of computations from system?defined predicates and facts are never stored in the warehouse , and the age of a temporal atom is weighted inversely with the cost of its computation . It is in some cases cheaper to compute low?cost temporal atoms than to store them in the warehouse and cause extra overhead and increased memory size . However , it is still too early to report on the performance of this scheme and more benchmark programs need to be run under CHEM for extensive analysis . 7 . CONCLUSION A data?driven execution model for Chronolog has been presented , which supports argument parallelism through parallel processing of multiple procedure arguments . A new variable binding scheme is used to allow OR?parallelism to be exploited in the distributed dataflow environment . The support of Restricted AND?parallelism can also be incorporated in CHEM by taking advantage of dataflow graph annotation . Context?parallelism can be exploited when a goal is evaluated by executing multiple copies of the goal at different moments in time . This form of parallelism is implemented cost?effectively by using a warehouse to store previous computations for reuse . The dynamic tagging scheme used in the conventional tagged token dataflow machines is naturally suited to the warehouse implementation . It is , therefore , found that dataflow computation lends the CHEM model a flexible capability for support of parallelism at various levels . The basic execution model supporting all forms of parallelism but context?parallelism has been implemented in Occam2 on a transputer system -LSB- Zha92 -RSB- . The performance reported in Zhang -LSB- Zha92 -RSB- is encouraging in that a small scale multiprocessor machine can achieve reasonable speedups running a set of benchmark programs with limited parallelism . The model has also been evaluated for its performance on a simulated static dataflow machine -LSB- ZT91a -RSB- . We are currently working on the tagging scheme to support context?parallelism . We will then simulate a tagged token dynamic dataflow machine , such as the Manchester Dataflow Machine -LSB- GKW85 -RSB- , to run our model in order to evaluate how much more speedup the context ? parallelism can offer . Our long term plan is to implement the model on a real multiprocessor system with a large number of processing elements , such as the Connection Machine CM ? 5 . REFERENCES -LSB- AM89 -RSB- M. Abadi and Z. Manna , Temporal logic programming . J. Symbolic Computation , 8 , 1989 , 277 ? 295 . -LSB- AFM86 -RSB- T. Aoyagi , M. Fujita , and T. Moto?oka , Temporal logic programming language Tokio . Proc . Logic Programming ' 85 , Springer ? Verlag , 1986 , 138 ? 147 . -LSB- Bau92 -RSB- M. Baudinet , A Simple Proof of the Completeness of Temporal Logic Programming . In L. Farinas del cerro and M. Penttonen -LRB- eds -RRB- , Intensional Logics for Programming , Oxford University Press , 1992 , 51 ? 83 . -LSB- CH83 -RSB- A. Ciepielewski and S. Haridi , A formal model for OR?parallel execution of logic programs . Proc . Information Processing 83 , 1983 , 299 ? 305 . -LSB- Con87 -RSB- J.S. Conery , Parallel execution of logic programs . Kluwer Academic Publishers , 1987 . -LSB- DK82 -RSB- A.L. Davis and R.M. Keller , Data Flow Program Graphs , IEEE Computer , Feb. 1982 , 26 ? 41 . -LSB- DeG84 -RSB- D. DeGroot , A technique for compiling execution graph expressions for Restricted AND?Parallelism in logic programs . Proc . 1st Int . Conf . on Supercomputing , Athens , Jun. 1987 , 1074 ? 1093 . -LSB- FW86 -RSB- A. A. Faustini and W. W. Wadge , An eductive interpreter for pLucid . Technical Report TR ? 006 ? 86 , Department of Computer Science , Arizona State University , 1986 . -LSB- Gab87 -RSB- D. M. Gabbay , Modal and temporal logic programming . In A. Galton -LRB- ed . -RRB- , Temporal Logics and Their Applications , Academic Press , 1987 , 197 ? 237 . -LSB- Gol87 -RSB- R. Goldblatt , Logics of Time and Computation . CSLI ? Center for the Study of Language and Information , Stanford University , 1987 . -LSB- GKW85 -RSB- J. Gurd , C.C. Kirkham and I. Watson , The Manchester Prototype Dataflow Computer , CACM , 28 -LRB- 1 -RRB- , Jan. 1985 , 34 ? 52 . -LSB- KAFT86 -RSB- S. Kono , T. Aoyagi , M. Fujita , and H. Tanaka , Implementation of temporal logic programming language Tokio . Proc . Logic Programming ' 85 , Springer?Verlag , 1986 , 138 ? 147 . -LSB- OW92 -RSB- M. A. Orgun and W. W. Wadge , Theory and practice of temporal logic programming . In L. F. del Cerro and M. Penttonen -LRB- eds -RRB- , Intensional Logics for Programming , Oxford University Press , 1992 , 23 ? 50 . -LSB- OW93 -RSB- M. A. Orgun and W. W. Wadge , Chronolog admits a complete proof procedure . Proc . 6th Int . Sym . on Lucid and Intensional Programming , Quebec City , Canada , 1993 , 120 ? 135 . -LSB- Rol87 -RSB- D. Rolston , Toward a tense?logic?based mitigation of the frame problem . In F.M. Brown -LRB- ed . -RRB- , Proc . 1987 Workshop on Frame Problem in AI , Lawrence , Kansas , 1987 . -LSB- Wad88 -RSB- W. W. Wadge , Tense logic programming : a respectable alternative . Proc . 1988 Int . Symp . on Lucid and Intensional Program - ming , Sidney , B.C. , April 7 ? 8 1988 , 26 ? 32 . -LSB- War83 -RSB- D.H.D. Warren , An abstract Prolog instruction set , Technical Note 309 , AI Centre , SRI International , Aug. 1983 . -LSB- War87 -RSB- D.H.D. Warren , The SRI Model for OR?Parallel execution of Prolog ? abstract design and implementation issues , Proc . 1987 Symp . on Logic Programming , 1987 , 92 ? 102 . -LSB- ZT91a -RSB- K. Zhang and R. Thomas , DIALOG ? A dataflow model for parallel execution of logic programs . Future Generation Computer Systems , 6 , 1991 , 373 ? 388 . -LSB- ZT91b -RSB- K. Zhang and R. Thomas , A non?shared binding scheme for parallel Prolog implementation . Proc . Int . Joint Conf . on Artificial Intelligence , Sydney , 1991 , 877 ? 882 . -LSB- Zha92 -RSB- K. Zhang , An experiment with a logic program execution model on the transputer . Int . J. High Speed Computing , 4 -LRB- 3 -RRB- , 1992 , 233 ? 249 . -LSB- Zha93 -RSB- K. Zhang , Exploiting OR?parallelism in logic programs : a review . Future Generation Computer Systems , 9 , 1993 , 259 ? 280 .

O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O B I O O O O O O O O O O O O O B O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O B O O O O O O O O B O O O O O O O O O B O O O O O O O O O O O O O B B I O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B B I O O O O B O O O O O B I O O B B I O O O O O O O O O O O O O O B I O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B B I O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O

chronolog
parallelism
temporal logic programs
virtual machine