Background
Büchi automata are used to represent temporal logic formulas. Büchi automata are different
from normal finite-state machines: for normal finite-state machines, acceptance is defined
as reaching an accept (or final) state. For Büchi automata, acceptance is defined as
finding a cycle that includes an accept state; it must be possible to reach the accept
state infinitely often.
As with the model checker SPIN, for example, Lurch uses Büchi automata representing the negation of the desired property. So for the examples on this page, the property given is violated by an execution in which the machine gets stuck in a cycle that includes an accept state. Note that Lurch, since it's an approximate search with a depth limit, can't tell for sure if we're really stuck in an accept cycle. So the "hash collisions" parameter is used as a sort of cycle-detection threshold: if we've seen the same global state n times, where n is the hash collision limit, it's assumed that we're stuck in that cycle and we'd see that state an infinite number of times if the search continued on to infinite depth (this is Lurch's very informal, randomized notion of fairness).
Lurch handles temporal logic properties the same way the model checker SPIN does. In fact the underlying program used to translate properties is "ltl2ba", which was written for SPIN. And the example properties on this page come from SPIN's online documentation (spinroot.com/spin/Doc/fm2003-spin-tutorial.pdf). To use ltl2ba with Lurch, download the source from spinroot.com/spin/Src/ltl2ba.tar.gz. (Note: I had to modify the ltl2ba files to compile them locally, so I've included the version that worked for me in the Lurch download.) Then compile ltl2ba and run the executable with the script ba2lu.awk, included with the Lurch download:
As with the model checker SPIN, for example, Lurch uses Büchi automata representing the negation of the desired property. So for the examples on this page, the property given is violated by an execution in which the machine gets stuck in a cycle that includes an accept state. Note that Lurch, since it's an approximate search with a depth limit, can't tell for sure if we're really stuck in an accept cycle. So the "hash collisions" parameter is used as a sort of cycle-detection threshold: if we've seen the same global state n times, where n is the hash collision limit, it's assumed that we're stuck in that cycle and we'd see that state an infinite number of times if the search continued on to infinite depth (this is Lurch's very informal, randomized notion of fairness).
Lurch handles temporal logic properties the same way the model checker SPIN does. In fact the underlying program used to translate properties is "ltl2ba", which was written for SPIN. And the example properties on this page come from SPIN's online documentation (spinroot.com/spin/Doc/fm2003-spin-tutorial.pdf). To use ltl2ba with Lurch, download the source from spinroot.com/spin/Src/ltl2ba.tar.gz. (Note: I had to modify the ltl2ba files to compile them locally, so I've included the version that worked for me in the Lurch download.) Then compile ltl2ba and run the executable with the script ba2lu.awk, included with the Lurch download:
ltl2ba -d -f '[]p' | gawk -f 'ba2lu.awk'The output is a little bit criptic. Here's what you get from the above command:
n: init. (p); -; init. =init #define pLines beginning with n: are the Büchi automaton, which is to be copied directly into the input model. If the Büchi automaton ends with =init, this means the initial state needs to be an accept state, so an equals sign should be added to every init in the Büchi automaton. Finally, any #define lines needed to be filled out with macro definitions and copied to the beginning of the input model.