genltl
#+EMAIL spot@lrde.epita.fr
This tool generates LTL formulas according to scalable patterns. These pattern are usually taken from the literature (see the man page for references). Sometimes the same pattern is given different names in different papers, so we alias different option names to the same pattern.
--and-f=RANGE, --gh-e=RANGE F(p1)&F(p2)&...&F(pn) --and-fg=RANGE FG(p1)&FG(p2)&...&FG(pn) --and-gf=RANGE, --ccj-phi=RANGE, --gh-c2=RANGE GF(p1)&GF(p2)&...&GF(pn) --ccj-alpha=RANGE F(p1&F(p2&F(p3&...F(pn)))) & F(q1&F(q2&F(q3&...F(qn)))) --ccj-beta=RANGE F(p&X(p&X(p&...X(p)))) & F(q&X(q&X(q&...X(q)))) --ccj-beta-prime=RANGE F(p&(Xp)&(XXp)&...(X...X(p))) & F(q&(Xq)&(XXq)&...(X...X(q))) --gh-q=RANGE (F(p1)|G(p2))&(F(p2)|G(p3))&... &(F(pn)|G(p{n+1})) --gh-r=RANGE (GF(p1)|FG(p2))&(GF(p2)|FG(p3))&... &(GF(pn)|FG(p{n+1})) --go-theta=RANGE !((GF(p1)&GF(p2)&...&GF(pn)) -> G(q->F(r))) --or-fg=RANGE, --ccj-xi=RANGE FG(p1)|FG(p2)|...|FG(pn) --or-g=RANGE, --gh-s=RANGE G(p1)|G(p2)|...|G(pn) --or-gf=RANGE, --gh-c1=RANGE GF(p1)|GF(p2)|...|GF(pn) --r-left=RANGE (((p1 R p2) R p3) ... R pn) --r-right=RANGE (p1 R (p2 R (... R pn))) --rv-counter=RANGE n-bit counter --rv-counter-carry=RANGE n-bit counter w/ carry --rv-counter-carry-linear=RANGE n-bit counter w/ carry (linear size) --rv-counter-linear=RANGE n-bit counter (linear size) --u-left=RANGE, --gh-u=RANGE (((p1 U p2) U p3) ... U pn) --u-right=RANGE, --gh-u2=RANGE, --go-phi=RANGE (p1 U (p2 U (... U pn)))
An example is probably all it takes to understand how this tool works:
genltl --and-gf=1..5 --u-left=1..5
GFp1 GFp1 & GFp2 GFp1 & GFp2 & GFp3 GFp1 & GFp2 & GFp3 & GFp4 GFp1 & GFp2 & GFp3 & GFp4 & GFp5 p1 p1 U p2 (p1 U p2) U p3 ((p1 U p2) U p3) U p4 (((p1 U p2) U p3) U p4) U p5
genltl
supports the common option for output of LTL formulas, so you
may output these pattern for various tools.
For instance here is the same formulas, but formatted in a way that is suitable for being included in a LaTeX table.
genltl --and-gf=1..5 --u-left=1..5 --latex --format='%F & %L & $%f$ \\'
and-gf & 1 & $\G \F p_{1}$ \\ and-gf & 2 & $\G \F p_{1} \land \G \F p_{2}$ \\ and-gf & 3 & $\G \F p_{1} \land \G \F p_{2} \land \G \F p_{3}$ \\ and-gf & 4 & $\G \F p_{1} \land \G \F p_{2} \land \G \F p_{3} \land \G \F p_{4}$ \\ and-gf & 5 & $\G \F p_{1} \land \G \F p_{2} \land \G \F p_{3} \land \G \F p_{4} \land \G \F p_{5}$ \\ u-left & 1 & $p_{1}$ \\ u-left & 2 & $p_{1} \U p_{2}$ \\ u-left & 3 & $(p_{1} \U p_{2}) \U p_{3}$ \\ u-left & 4 & $((p_{1} \U p_{2}) \U p_{3}) \U p_{4}$ \\ u-left & 5 & $(((p_{1} \U p_{2}) \U p_{3}) \U p_{4}) \U p_{5}$ \\
Note that for the --lbt
syntax, each formula is relabeled using
p0
, p1
, … before it is output, when the pattern (like
--ccj-alpha
) use different names. Compare:
genltl --ccj-alpha=3
F(q1 & F(q2 & Fq3)) & F(p1 & F(p2 & Fp3))
with
genltl --ccj-alpha=3 --lbt
& F & p0 F & p1 F p2 F & p3 F & p4 F p5
This is because most tools using lbt
's syntax require atomic
propositions to have the form pNN
.