LPS execution happens in discretely timestamped cycles. There are three steps that occur in each cycle:
The database is updated destructively according to a domain-specific causal theory specified in the given LPS program. An executed action or externally observed event can either initiate a fluent, terminate a fluent or update a fluent.
Theorectically speaking, LPS cycles can go on infinitely without stopping. However, for practicality, there are several halting conditions of a LPS program:
The maximum number of cycles allowed for the execution of a LPS program can be set using the maxTime/1 definition. By default, the maximum number of cycles allowed is 20 if no definition for maxTime/1 is given. For example to set the maximum timestamp to 12:
maxTime(12).To specifically request for the program to be halted, the term lpsHalt/0 can be used. Upon execution of the lpsHalt/0, the interpreter will finish the current cycle and stop execution. To write a rule that says if an event operationComplete was observed, the program halts:
operationComplete(T1, T2) -> lpsHalt.