Commit b708ab77 authored by Alexandre Duret-Lutz's avatar Alexandre Duret-Lutz

genltl: add formulas from three papers

Fixes #166.

* bin/genltl.cc: Add option --dac-patterns, --eh-patterns,
--sb-patterns.
* NEWS, bin/man/genltl.x, doc/org/genltl.org: Document them.
* bench/ltl2tgba/formulae.ltl: Delete.
* bench/ltl2tgba/known: Use genltl instead.
* bench/ltl2tgba/Makefile.am, bench/ltl2tgba/README: Update.
* tests/core/ltl2tgba2.test: New test case, using genltl.
* tests/Makefile.am: Add it.
parent fd5d5998
......@@ -34,6 +34,12 @@ New in spot 2.0a (not yet released)
'b U (a & b)' instead. The operators that can be listed between
brackets are the same as those of ltlfilt --unabbreviate option.
* genltl has three new options: --dac-patterns=1..45,
--eh-patterns=1..12, and --sb-patterns=1..27. Unlike other options
these do not output scalable patterns, but simply a list of formulas
appearing in these three papers: Dwyer et al (FMSP'98), Etessami &
Holzmann (Concur'00) Somenzi & Bloem (CAV'00).
Library:
* The print_hoa() function will now output version 1.1 of the HOA
......
......@@ -19,7 +19,6 @@
EXTRA_DIST = \
big \
formulae.ltl \
known \
small \
tools \
......
......@@ -46,7 +46,7 @@ this benchmark.
Three scripts that run ltlcross on, respectively:
100 small formulae (size 10, 4 propositions) and their negations
100 big formulae (size 12..15, 8 propositions) and their negations
92 known formulae (from formulae.ltl) and their negations
92 known formulae (produced by genltl, see below) and their negations
Each script generates 3 files:
xxxx.log: the log of ltlcross' execution, updated as the script goes
......@@ -57,10 +57,9 @@ this benchmark.
you kill a script before it terminates only the xxxx.log file will
have been overwritten.
* formulae.ltl
A list of LTL formulae used by the `known' check. They come
from three sources:
The known LTL formulas are generated by genltl, and come from the following
three papers:
@InProceedings{ dwyer.98.fmsp,
author = {Matthew B. Dwyer and George S. Avrunin and James C.
......@@ -105,7 +104,7 @@ this benchmark.
}
In the known benchmark, we use both positive and negated versions
of these formulae.
of these formulae, yielding 178 unique formulas.
* sym.py
......
[](!p0)
<>p1 -> (!p0 U p1)
[](p2 -> [](!p0))
[]((p2 & !p1 & <>p1) -> (!p0 U p1))
[](p2 & !p1 -> (!p0 U (p1 | []!p0)))
<>(p0)
!p1 U ((p0 & !p1) | []!p1)
[](!p2) | <>(p2 & <>p0)
[](p2 & !p1 -> (!p1 U ((p0 & !p1) | []!p1)))
[](p2 & !p1 -> (!p1 U (p0 & !p1)))
<>p1 -> ((!p0 & !p1) U (p1 | ((p0 & !p1) U (p1 | ((!p0 & !p1) U (p1 | ((p0 & !p1) U (p1 | (!p0 U p1)))))))))
[]((p2 & <>p1) -> ((!p0 & !p1) U (p1 | ((p0 & !p1) U (p1 | ((!p0 & !p1) U (p1 | ((p0 & !p1) U (p1 | (!p0 U p1))))))))))
[](p2 -> ((!p0 & !p1) U (p1 | ((p0 & !p1) U (p1 | ((!p0 & !p1) U (p1 | ((p0 & !p1) U (p1 | (!p0 U (p1 | []!p0)) | []p0)))))))))
[](p0)
<>p1 -> (p0 U p1)
[](p2 -> [](p0))
[]((p2 & !p1 & <>p1) -> (p0 U p1))
[](p2 & !p1 -> (p0 U (p1 | [] p0)))
!p0 U (p3 | []!p0)
<>p1 -> (!p0 U (p3 | p1))
[]!p2 | <>(p2 & (!p0 U (p3 | []!p0)))
[]((p2 & !p1 & <>p1) -> (!p0 U (p3 | p1)))
[](p2 & !p1 -> (!p0 U ((p3 | p1) | []!p0)))
[](p0 -> <>p3)
<>p1 -> (p0 -> (!p1 U (p3 & !p1))) U p1
[](p2 -> [](p0 -> <>p3))
[]((p2 & !p1 & <>p1) -> (p0 -> (!p1 U (p3 & !p1))) U p1)
[](p2 & !p1 -> ((p0 -> (!p1 U (p3 & !p1))) U (p1 | [](p0 -> (!p1 U (p3 & !p1))))))
<>p0 -> (!p0 U (p3 & !p0 & X(!p0 U p4)))
<>p1 -> (!p0 U (p1 | (p3 & !p0 & X(!p0 U p4))))
([]!p2) | (!p2 U (p2 & <>p0 -> (!p0 U (p3 & !p0 & X(!p0 U p4)))))
[]((p2 & <>p1) -> (!p0 U (p1 | (p3 & !p0 & X(!p0 U p4)))))
[](p2 -> (<>p0 -> (!p0 U (p1 | (p3 & !p0 & X(!p0 U p4))))))
(<>(p3 & X<>p4)) -> ((!p3) U p0)
<>p1 -> ((!(p3 & (!p1) & X(!p1 U (p4 & !p1)))) U (p1 | p0))
([]!p2) | ((!p2) U (p2 & ((<>(p3 & X<>p4)) -> ((!p3) U p0))))
[]((p2 & <>p1) -> ((!(p3 & (!p1) & X(!p1 U (p4 & !p1)))) U (p1 | p0)))
[](p2 -> (!(p3 & (!p1) & X(!p1 U (p4 & !p1))) U (p1 | p0) | [](!(p3 & X<>p4))))
[] (p3 & X<> p4 -> X(<>(p4 & <> p0)))
<>p1 -> (p3 & X(!p1 U p4) -> X(!p1 U (p4 & <> p0))) U p1
[] (p2 -> [] (p3 & X<> p4 -> X(!p4 U (p4 & <> p0))))
[] ((p2 & <>p1) -> (p3 & X(!p1 U p4) -> X(!p1 U (p4 & <> p0))) U p1)
[] (p2 -> (p3 & X(!p1 U p4) -> X(!p1 U (p4 & <> p0))) U (p1 | [] (p3 & X(!p1 U p4) -> X(!p1 U (p4 & <> p0)))))
[] (p0 -> <>(p3 & X<>p4))
<>p1 -> (p0 -> (!p1 U (p3 & !p1 & X(!p1 U p4)))) U p1
[] (p2 -> [] (p0 -> (p3 & X<> p4)))
[] ((p2 & <>p1) -> (p0 -> (!p1 U (p3 & !p1 & X(!p1 U p4)))) U p1)
[] (p2 -> (p0 -> (!p1 U (p3 & !p1 & X(!p1 U p4)))) U (p1 | [] (p0 -> (p3 & X<> p4))))
[] (p0 -> <>(p3 & !p5 & X(!p5 U p4)))
<>p1 -> (p0 -> (!p1 U (p3 & !p1 & !p5 & X((!p1 & !p5) U p4)))) U p1
[] (p2 -> [] (p0 -> (p3 & !p5 & X(!p5 U p4))))
[] ((p2 & <>p1) -> (p0 -> (!p1 U (p3 & !p1 & !p5 & X((!p1 & !p5) U p4)))) U p1)
[] (p2 -> (p0 -> (!p1 U (p3 & !p1 & !p5 & X((!p1 & !p5) U p4)))) U (p1 | [] (p0 -> (p3 & !p5 & X(!p5 U p4)))))
!p0 U ((p0 U ((!p0 U ((p0 U ([]!p0 | []p0)) | []!p0)) | []!p0)) | []!p0)
<>p2 -> (!p2 U (p2 & (!p0 U ((p0 U ((!p0 U ((p0 U ([]!p0 | []p0)) | []!p0)) | []!p0)) | []!p0))))
p0 U p1
p0 U (p1 U p2)
!p0 R (!p1 R !p2)
(1 U (0 R !p0)) | (0 R (1 U p1))
(1 U p0) U (0 R p1)
(0 R p0) U p1
(1 U p0) & (1 U (1 U p0)) & (0 R !p0) & (0 R (0 R !p0))
(0 R (1 U p0)) & (1 U (0 R !p1))
((0 R (1 U p0)) & (1 U (0 R !p1))) | ((0 R (1 U p1)) & (1 U (0 R !p0)))
p0 R (p0 | p1)
(Xp0 U Xp1) | X(!p0 R !p1)
(Xp0 U p1) | X(!p0 R (!p0 | !p1))
(0 R (!p0 | (1 U p1))) & ((Xp0 U p1) | X(!p0 R (!p0 | !p1)))
(0 R (!p0 | (1 U p1))) & ((Xp0 U Xp1) | X(!p0 R !p1))
0 R (!p0 | (1 U p1))
1 U (p0 & X(!p1 U !p2))
(1 U (0 R !p0)) & (0 R (1 U !p1))
0 R ((1 U p0) & (1 U p1))
(1 U p0) & (1 U !p0)
(Xp1 & p2) R X(((p3 U p0) R p2) U (p3 R p2))
((0 R (p1 | (0 R (1 U p0)))) & (0 R (p2 | (0 R (1 U !p0))))) | (0 R p1) | (0 R p2)
((0 R (p1 | (1 U (0 R p0)))) & (0 R (p2 | (1 U (0 R !p0))))) | (0 R p1) | (0 R p2)
(0 R (p1 | X(0 R p0))) & (0 R (p2 | X(0 R !p0)))
0 R (p1 | (Xp0 & X!p0))
p0 | (p1 U p0)
p0 U (p1 & (0 R p2))
p0 U (p1 & X(p2 U p3))
p0 U (p1 & X(p2 & (1 U (p3 & X(1 U (p4 & X(1 U (p5 & X(1 U p6)))))))))
1 U (p0 & X(0 R p1))
1 U (p0 & X(p1 & X(1 U p2)))
1 U (p0 & X(p1 U p2))
(1 U (0 R p0)) | (1 U (0 R p1))
0 R (!p0 | (p1 U p2))
1 U (p0 & X(1 U (p1 & X(1 U (p2 & X(1 U p3))))))
(0 R (1 U p0)) & (0 R (1 U p1)) & (0 R (1 U p2)) & (0 R (1 U p3)) & (0 R (1 U p4))
(p0 U (p1 U p2)) | (p1 U (p2 U p0)) | (p2 U (p0 U p1))
0 R (!p0 | (p1 U ((0 R p2) | (0 R p3))))
#!/bin/sh
# -*- shell-script -*-
# Copyright (C) 2012, 2013 Laboratoire de Recherche et Developpement de
# l'Epita (LRDE)
# Copyright (C) 2012, 2013, 2016 Laboratoire de Recherche et
# Developpement de l'Epita (LRDE)
#
# This file is part of Spot, a model checking library.
#
......@@ -20,6 +20,6 @@
. ./defs
$LTLCROSS "$@" --csv=known.csv --json=known.json \
< "$srcdir/formulae.ltl" 2>&1 |
$GENLTL --dac-patterns --eh-patterns --sb-patterns |
$LTLCROSS "$@" --csv=known.csv --json=known.json 2>&1 |
tee known.log
This diff is collapsed.
......@@ -27,5 +27,19 @@ Proceedings of CAV'01. LNCS 2102.
rv
K. Rozier and M. Vardi: LTL Satisfiability Checking.
Proceedings of Spin'07. LNCS 4595.
.TP
dac
M. B. Dwyer and G. S. Avrunin and J. C. Corbett: Property
Specification Patterns for Finite-state Verification.
Proceedings of FMSP'98.
.TP
eh
K. Etessami and G. J. Holzmann: Optimizing Büchi Automata.
Proceedings of Concur'00. LNCS 1877.
.TP
sb
F. Somenzi and R. Bloem: Efficient Büchi Automata for LTL Formulae.
Proceedings of CAV'00. LNCS 1855.
[SEE ALSO]
.BR randltl (1)
......@@ -3,11 +3,13 @@
#+SETUPFILE: setup.org
#+HTML_LINK_UP: tools.html
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.
This tool outputs LTL formulas that either comes from named lists of
formulas, or from scalable patterns.
These patterns are usually taken from the literature (see the
[[./man/genltl.1.html][=genltl=]](1) 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.
#+BEGIN_SRC sh :results verbatim :exports results
genltl --help | sed -n '/Pattern selection:/,/^$/p' | sed '1d;$d'
......@@ -24,8 +26,11 @@ genltl --help | sed -n '/Pattern selection:/,/^$/p' | sed '1d;$d'
--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}))
--dac-patterns[=RANGE] Dwyer et al. [FMSP'98] Spec. Patterns for LTL
(range should be included in 1..45)
--eh-patterns[=RANGE] Etessami and Holzmann [Concur'00] patterns (range
should be included in 1..12)
--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)))
......@@ -41,6 +46,8 @@ genltl --help | sed -n '/Pattern selection:/,/^$/p' | sed '1d;$d'
--rv-counter-carry-linear=RANGE
n-bit counter w/ carry (linear size)
--rv-counter-linear=RANGE n-bit counter (linear size)
--sb-patterns[=RANGE] Somenzi and Bloem [CAV'00] patterns (range should
be included in 1..27)
--u-left=RANGE, --gh-u=RANGE
(((p1 U p2) U p3) ... U pn)
--u-right=RANGE, --gh-u2=RANGE, --go-phi=RANGE
......@@ -111,5 +118,130 @@ genltl --ccj-alpha=3 --lbt
This is because most tools using =lbt='s syntax require atomic
propositions to have the form =pNN=.
Three options provide lists of unrelated LTL formulas, taken from the
literature (see the [[./man/genltl.1.html][=genltl=]](1) man page for references):
=--dac-patterns=, =--eh-patterns=, and =--sb-patterns=. With these
options, the range is used to select a subset of the list of formulas.
Without range, all formulas are used. Here is the complete list:
#+BEGIN_SRC sh :results verbatim :exports both
genltl --dac --eh --sb --format=%F,%L,%f
#+END_SRC
#+RESULTS:
#+begin_example
dac-patterns,1,G!p0
dac-patterns,2,Fp0 -> (!p1 U p0)
dac-patterns,3,G(p0 -> G!p1)
dac-patterns,4,G((p0 & !p1 & Fp1) -> (!p2 U p1))
dac-patterns,5,G((p0 & !p1) -> (!p2 W p1))
dac-patterns,6,Fp0
dac-patterns,7,!p0 W (!p0 & p1)
dac-patterns,8,G!p0 | F(p0 & Fp1)
dac-patterns,9,G((p0 & !p1) -> (!p1 W (!p1 & p2)))
dac-patterns,10,G((p0 & !p1) -> (!p1 U (!p1 & p2)))
dac-patterns,11,!p0 W (p0 W (!p0 W (p0 W G!p0)))
dac-patterns,12,Fp0 -> ((!p0 & !p1) U (p0 | ((!p0 & p1) U (p0 | ((!p0 & !p1) U (p0 | ((!p0 & p1) U (p0 | (!p1 U p0)))))))))
dac-patterns,13,Fp0 -> (!p0 U (p0 & (!p1 W (p1 W (!p1 W (p1 W G!p1))))))
dac-patterns,14,G((p0 & Fp1) -> ((!p1 & !p2) U (p1 | ((!p1 & p2) U (p1 | ((!p1 & !p2) U (p1 | ((!p1 & p2) U (p1 | (!p2 U p1))))))))))
dac-patterns,15,G(p0 -> ((!p1 & !p2) U (p2 | ((p1 & !p2) U (p2 | ((!p1 & !p2) U (p2 | ((p1 & !p2) U (p2 | (!p1 W p2) | Gp1)))))))))
dac-patterns,16,Gp0
dac-patterns,17,Fp0 -> (p1 U p0)
dac-patterns,18,G(p0 -> Gp1)
dac-patterns,19,G((p0 & !p1 & Fp1) -> (p2 U p1))
dac-patterns,20,G((p0 & !p1) -> (p2 W p1))
dac-patterns,21,!p0 W p1
dac-patterns,22,Fp0 -> (!p1 U (p0 | p2))
dac-patterns,23,G!p0 | F(p0 & (!p1 W p2))
dac-patterns,24,G((p0 & !p1 & Fp1) -> (!p2 U (p1 | p3)))
dac-patterns,25,G((p0 & !p1) -> (!p2 W (p1 | p3)))
dac-patterns,26,G(p0 -> Fp1)
dac-patterns,27,Fp0 -> ((p1 -> (!p0 U (!p0 & p2))) U p0)
dac-patterns,28,G(p0 -> G(p1 -> Fp2))
dac-patterns,29,G((p0 & !p1 & Fp1) -> ((p2 -> (!p1 U (!p1 & p3))) U p1))
dac-patterns,30,G((p0 & !p1) -> ((p2 -> (!p1 U (!p1 & p3))) W p1))
dac-patterns,31,Fp0 -> (!p0 U (!p0 & p1 & X(!p0 U p2)))
dac-patterns,32,Fp0 -> (!p1 U (p0 | (!p1 & p2 & X(!p1 U p3))))
dac-patterns,33,G!p0 | (!p0 U ((p0 & Fp1) -> (!p1 U (!p1 & p2 & X(!p1 U p3)))))
dac-patterns,34,G((p0 & Fp1) -> (!p2 U (p1 | (!p2 & p3 & X(!p2 U p4)))))
dac-patterns,35,G(p0 -> (Fp1 -> (!p1 U (p2 | (!p1 & p3 & X(!p1 U p4))))))
dac-patterns,36,F(p0 & XFp1) -> (!p0 U p2)
dac-patterns,37,Fp0 -> (!(!p0 & p1 & X(!p0 U (!p0 & p2))) U (p0 | p3))
dac-patterns,38,G!p0 | (!p0 U (p0 & (F(p1 & XFp2) -> (!p1 U p3))))
dac-patterns,39,G((p0 & Fp1) -> (!(!p1 & p2 & X(!p1 U (!p1 & p3))) U (p1 | p4)))
dac-patterns,40,G(p0 -> ((!(!p1 & p2 & X(!p1 U (!p1 & p3))) U (p1 | p4)) | G!(p2 & XFp3)))
dac-patterns,41,G((p0 & XFp1) -> XF(p1 & Fp2))
dac-patterns,42,Fp0 -> (((p1 & X(!p0 U p2)) -> X(!p0 U (p2 & Fp3))) U p0)
dac-patterns,43,G(p0 -> G((p1 & XFp2) -> X(!p2 U (p2 & Fp3))))
dac-patterns,44,G((p0 & Fp1) -> (((p2 & X(!p1 U p3)) -> X(!p1 U (p3 & Fp4))) U p1))
dac-patterns,45,G(p0 -> (((p1 & X(!p2 U p3)) -> X(!p2 U (p3 & Fp4))) U (p2 | G((p1 & X(!p2 U p3)) -> X(!p2 U (p3 & Fp4))))))
dac-patterns,46,G(p0 -> F(p1 & XFp2))
dac-patterns,47,Fp0 -> ((p1 -> (!p0 U (!p0 & p2 & X(!p0 U p3)))) U p0)
dac-patterns,48,G(p0 -> G(p1 -> (p2 & XFp3)))
dac-patterns,49,G((p0 & Fp1) -> ((p2 -> (!p1 U (!p1 & p3 & X(!p1 U p4)))) U p1))
dac-patterns,50,G(p0 -> ((p1 -> (!p2 U (!p2 & p3 & X(!p2 U p4)))) U (p2 | G(p1 -> (p3 & XFp4)))))
dac-patterns,51,G(p0 -> F(p1 & !p2 & X(!p2 U p3)))
dac-patterns,52,Fp0 -> ((p1 -> (!p0 U (!p0 & p2 & !p3 & X((!p0 & !p3) U p4)))) U p0)
dac-patterns,53,G(p0 -> G(p1 -> (p2 & !p3 & X(!p3 U p4))))
dac-patterns,54,G((p0 & Fp1) -> ((p2 -> (!p1 U (!p1 & p3 & !p4 & X((!p1 & !p4) U p5)))) U p1))
dac-patterns,55,G(p0 -> ((p1 -> (!p2 U (!p2 & p3 & !p4 & X((!p2 & !p4) U p5)))) U (p2 | G(p1 -> (p3 & !p4 & X(!p4 U p5))))))
eh-patterns,1,p0 U (p1 & Gp2)
eh-patterns,2,p0 U (p1 & X(p2 U p3))
eh-patterns,3,p0 U (p1 & X(p2 & F(p3 & XF(p4 & XF(p5 & XFp6)))))
eh-patterns,4,F(p0 & XGp1)
eh-patterns,5,F(p0 & X(p1 & XFp2))
eh-patterns,6,F(p0 & X(p1 U p2))
eh-patterns,7,FGp0 | GFp1
eh-patterns,8,G(p0 -> (p1 U p2))
eh-patterns,9,G(p0 & XF(p1 & XF(p2 & XFp3)))
eh-patterns,10,GFp0 & GFp1 & GFp2 & GFp3 & GFp4
eh-patterns,11,(p0 U (p1 U p2)) | (p1 U (p2 U p0)) | (p2 U (p0 U p1))
eh-patterns,12,G(p0 -> (p1 U (Gp2 | Gp3)))
sb-patterns,1,p0 U p1
sb-patterns,2,p0 U (p1 U p2)
sb-patterns,3,!(p0 U (p1 U p2))
sb-patterns,4,GFp0 -> GFp1
sb-patterns,5,Fp0 U Gp1
sb-patterns,6,Gp0 U p1
sb-patterns,7,!(Fp0 <-> Fp1)
sb-patterns,8,!(GFp0 -> GFp1)
sb-patterns,9,!(GFp0 <-> GFp1)
sb-patterns,10,p0 R (p0 | p1)
sb-patterns,11,(Xp0 U Xp1) | !X(p0 U p1)
sb-patterns,12,(Xp0 U p1) | !X(p0 U (p0 & p1))
sb-patterns,13,G(p0 -> Fp1) & ((Xp0 U p1) | !X(p0 U (p0 & p1)))
sb-patterns,14,G(p0 -> Fp1) & ((Xp0 U Xp1) | !X(p0 U p1))
sb-patterns,15,G(p0 -> Fp1)
sb-patterns,16,!G(p0 -> X(p1 R p2))
sb-patterns,17,!(FGp0 | FGp1)
sb-patterns,18,G(Fp0 & Fp1)
sb-patterns,19,Fp0 & F!p0
sb-patterns,20,(p0 & Xp1) R X(((p2 U p3) R p0) U (p2 R p0))
sb-patterns,21,Gp2 | (G(p0 | GFp1) & G(p2 | GF!p1)) | Gp0
sb-patterns,22,Gp0 | Gp2 | (G(p0 | FGp1) & G(p2 | FG!p1))
sb-patterns,23,!(Gp2 | (G(p0 | GFp1) & G(p2 | GF!p1)) | Gp0)
sb-patterns,24,!(Gp0 | Gp2 | (G(p0 | FGp1) & G(p2 | FG!p1)))
sb-patterns,25,G(p0 | XGp1) & G(p2 | XG!p1)
sb-patterns,26,G(p0 | (Xp1 & X!p1))
sb-patterns,27,p0 | (p1 U p0)
#+end_example
Note that ~--sb-patterns=2 --sb-patterns=4 --sb-patterns=21..22~ also
have their complement formula listed as ~--sb-patterns=3
--sb-patterns=8 --sb-patterns=23..24~. So if you build the set of
formula output by =genltl --sb-patterns= plus its negation, it will
contain only 46 formulas, not 54.
#+BEGIN_SRC sh :results verbatim :exports both
genltl --sb | ltlfilt --uniq --count
(genltl --sb; genltl --sb | ltlfilt --negate) | ltlfilt --uniq --count
#+END_SRC
#+RESULTS:
: 27
: 46
# LocalWords: genltl num toc LTL scalable SRC sed gh pn fg FG gf qn
# LocalWords: ccj Xp XXp Xq XXq rv GFp lbt
# LocalWords: ccj Xp XXp Xq XXq rv GFp lbt utf SETUPFILE html dac
# LocalWords: Dwyer et al FMSP Etessami Holzmann sb Somenzi Bloem
# LocalWords: CAV LaTeX Fq Fp pNN Gp XFp XF XGp FGp XG ltlfilt uniq
......@@ -216,6 +216,7 @@ TESTS_twa = \
core/sim2.test \
core/sim3.test \
core/ltl2tgba.test \
core/ltl2tgba2.test \
core/ltl2neverclaim.test \
core/ltl2neverclaim-lbtt.test \
core/ltlprod.test \
......
#!/bin/sh
# -*- coding: utf-8 -*-
# Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016
# Laboratoire de Recherche et Développement de l'Epita (LRDE).
# Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
# département Systèmes Répartis Coopératifs (SRC), Université Pierre
# et Marie Curie.
#
# This file is part of Spot, a model checking library.
#
# Spot is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# Spot is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
# License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. ./defs
# If the size of automata produced by ltl2tgba on the formulas we
# commonly use as benchmark, we want to notice it.
set -e
genltl --dac-patterns --eh-patterns --sb-patterns --format=%F,%L,%f >pos
(cat pos; ltlfilt --negate pos/3 --format='!%<,%f') | ltlfilt -u -F-/3 >formulas
ltl2tgba -Fformulas/3 --stats='%<,%f, %s,%t' |
ltl2tgba -D -F-/3 --stats='%<,%f,%>, %s,%t' |
ltl2tgba -B -F-/3 --stats='%<,%f,%>, %s,%t' |
ltl2tgba -BD -F-/3 --stats='%<,%>, %s,%t' > output
cat >expected <<EOF
dac-patterns,1, 1,1, 1,1, 1,1, 1,1
dac-patterns,2, 3,10, 3,10, 3,10, 3,10
dac-patterns,3, 2,5, 2,5, 2,5, 2,5
dac-patterns,4, 3,20, 3,20, 3,20, 3,20
dac-patterns,5, 2,13, 2,13, 2,13, 2,13
dac-patterns,6, 2,4, 2,4, 2,4, 2,4
dac-patterns,7, 2,6, 2,6, 2,6, 2,6
dac-patterns,8, 3,12, 3,12, 3,12, 3,12
dac-patterns,9, 2,12, 2,12, 2,12, 2,12
dac-patterns,10, 2,12, 2,12, 2,12, 2,12
dac-patterns,11, 5,9, 5,9, 5,9, 5,9
dac-patterns,12, 7,26, 7,26, 7,26, 7,26
dac-patterns,13, 6,22, 6,22, 6,22, 6,22
dac-patterns,14, 7,52, 7,52, 7,52, 7,52
dac-patterns,15, 6,46, 6,46, 6,46, 6,46
dac-patterns,16, 1,1, 1,1, 1,1, 1,1
dac-patterns,17, 3,10, 3,10, 3,10, 3,10
dac-patterns,18, 2,5, 2,5, 2,5, 2,5
dac-patterns,19, 3,20, 3,20, 3,20, 3,20
dac-patterns,20, 2,13, 2,13, 2,13, 2,13
dac-patterns,21, 2,7, 2,7, 2,7, 2,7
dac-patterns,22, 3,20, 3,20, 3,20, 3,20
dac-patterns,23, 5,40, 5,40, 5,40, 5,40
dac-patterns,24, 3,40, 3,40, 3,40, 3,40
dac-patterns,25, 2,29, 2,29, 2,29, 2,29
dac-patterns,26, 2,8, 2,8, 2,8, 2,8
dac-patterns,27, 3,20, 3,20, 3,20, 3,20
dac-patterns,28, 3,24, 3,24, 3,24, 3,24
dac-patterns,29, 3,40, 3,40, 3,40, 3,40
dac-patterns,30, 3,40, 3,40, 3,40, 3,40
dac-patterns,31, 3,18, 3,18, 3,18, 3,18
dac-patterns,32, 4,56, 4,56, 4,56, 4,56
dac-patterns,33, 4,48, 4,48, 4,48, 4,48
dac-patterns,34, 4,112, 4,112, 4,112, 4,112
dac-patterns,35, 3,78, 3,78, 3,78, 3,78
dac-patterns,36, 3,20, 3,20, 3,20, 3,20
dac-patterns,37, 4,56, 4,56, 4,56, 4,56
dac-patterns,38, 4,56, 4,56, 4,56, 4,56
dac-patterns,39, 4,112, 4,112, 4,112, 4,112
dac-patterns,40, 3,88, 3,88, 3,88, 3,88
dac-patterns,41, 6,54, 6,54, 7,56, 7,56
dac-patterns,42, 6,96, 6,96, 6,96, 6,96
dac-patterns,43, 5,80, 5,80, 5,80, 5,80
dac-patterns,44, 10,300, 10,300, 13,372, 13,372
dac-patterns,45, 10,296, 10,296, 9,280, 9,280
dac-patterns,46, 4,41, 4,41, 5,50, 5,50
dac-patterns,47, 4,52, 4,52, 4,52, 4,52
dac-patterns,48, 3,38, 3,38, 4,50, 4,50
dac-patterns,49, 4,104, 4,104, 4,104, 4,104
dac-patterns,50, 6,164, 6,164, 7,188, 7,188
dac-patterns,51, 4,65, 4,65, 5,78, 5,78
dac-patterns,52, 4,104, 4,104, 4,104, 4,104
dac-patterns,53, 3,62, 3,62, 4,78, 4,78
dac-patterns,54, 4,208, 4,208, 4,208, 4,208
dac-patterns,55, 6,292, 6,292, 7,324, 7,324
eh-patterns,1, 2,10, 2,10, 2,10, 2,10
eh-patterns,2, 3,44, 4,55, 3,44, 4,55
eh-patterns,3, 7,832, 8,912, 7,832, 8,912
eh-patterns,4, 2,8, 2,8, 2,8, 2,8
eh-patterns,5, 4,32, 4,32, 4,32, 4,32
eh-patterns,6, 3,24, 3,24, 3,24, 3,24
eh-patterns,7, 3,14, 3,14, 4,18, 4,18
eh-patterns,8, 2,13, 2,13, 2,13, 2,13
eh-patterns,9, 5,58, 5,58, 8,80, 8,80
eh-patterns,10, 1,32, 1,32, 6,192, 6,192
eh-patterns,11, 2,15, 2,15, 2,15, 2,15
eh-patterns,12, 4,60, 4,60, 4,60, 4,60
sb-patterns,1, 2,7, 2,7, 2,7, 2,7
sb-patterns,2, 3,21, 3,21, 3,21, 3,21
sb-patterns,3, 3,16, 3,16, 3,16, 3,16
sb-patterns,4, 3,14, 3,14, 4,18, 4,18
sb-patterns,5, 3,13, 3,13, 3,13, 3,13
sb-patterns,6, 4,11, 4,11, 4,11, 4,11
sb-patterns,7, 3,7, 3,7, 3,7, 3,7
sb-patterns,8, 2,7, 2,7, 3,9, 3,9
sb-patterns,9, 3,10, 3,10, 5,14, 5,14
sb-patterns,10, 2,7, 2,7, 2,7, 2,7
sb-patterns,11, 1,1, 1,1, 1,1, 1,1
sb-patterns,12, 1,1, 1,1, 1,1, 1,1
sb-patterns,13, 2,8, 2,8, 2,8, 2,8
sb-patterns,14, 2,8, 2,8, 2,8, 2,8
sb-patterns,16, 3,24, 3,24, 3,24, 3,24
sb-patterns,17, 1,4, 1,4, 3,12, 3,12
sb-patterns,18, 1,4, 1,4, 3,12, 3,12
sb-patterns,19, 4,8, 4,8, 4,8, 4,8
sb-patterns,20, 5,28, 5,28, 5,28, 5,28
sb-patterns,21, 4,32, 4,32, 6,48, 6,48
sb-patterns,22, 3,7, 3,7, 3,7, 3,7
sb-patterns,23, 6,58, 6,58, 6,58, 6,58
sb-patterns,24, 4,16, 4,16, 4,16, 4,16
sb-patterns,25, 3,10, 3,10, 3,10, 3,10
sb-patterns,26, 1,1, 1,1, 1,1, 1,1
sb-patterns,27, 2,7, 2,7, 2,7, 2,7
!dac-patterns,1, 2,4, 2,4, 2,4, 2,4
!dac-patterns,2, 3,10, 3,10, 3,10, 3,10
!dac-patterns,3, 3,12, 3,12, 3,12, 3,12
!dac-patterns,4, 4,32, 4,32, 4,32, 4,32
!dac-patterns,5, 3,24, 3,24, 3,24, 3,24
!dac-patterns,6, 1,1, 1,1, 1,1, 1,1
!dac-patterns,7, 2,7, 2,7, 2,7, 2,7
!dac-patterns,8, 2,5, 2,5, 2,5, 2,5
!dac-patterns,9, 3,24, 3,24, 3,24, 3,24
!dac-patterns,10, 3,23, 3,23, 3,23, 3,23
!dac-patterns,11, 6,12, 6,12, 6,12, 6,12
!dac-patterns,12, 7,18, 7,18, 7,18, 7,18
!dac-patterns,13, 7,28, 7,28, 7,28, 7,28
!dac-patterns,14, 8,64, 8,64, 8,64, 8,64
!dac-patterns,15, 7,56, 7,56, 7,56, 7,56
!dac-patterns,16, 2,4, 2,4, 2,4, 2,4
!dac-patterns,17, 3,10, 3,10, 3,10, 3,10
!dac-patterns,18, 3,12, 3,12, 3,12, 3,12
!dac-patterns,19, 4,32, 4,32, 4,32, 4,32
!dac-patterns,20, 3,24, 3,24, 3,24, 3,24
!dac-patterns,21, 2,6, 2,6, 2,6, 2,6
!dac-patterns,22, 3,18, 3,18, 3,18, 3,18
!dac-patterns,23, 3,16, 3,16, 3,16, 3,16
!dac-patterns,24, 4,64, 4,64, 4,64, 4,64
!dac-patterns,25, 3,48, 3,48, 3,48, 3,48
!dac-patterns,26, 2,7, 2,7, 2,7, 2,7
!dac-patterns,27, 3,20, 3,20, 3,20, 3,20
!dac-patterns,28, 3,23, 3,23, 3,23, 3,23
!dac-patterns,29, 4,64, 4,64, 4,64, 4,64
!dac-patterns,30, 4,54, 4,54, 4,54, 4,54
!dac-patterns,31, 3,20, 3,20, 3,20, 3,20
!dac-patterns,32, 4,44, 4,44, 4,44, 4,44
!dac-patterns,33, 4,48, 4,48, 4,48, 4,48
!dac-patterns,34, 5,160, 5,160, 5,160, 5,160
!dac-patterns,35, 4,128, 4,128, 4,128, 4,128
!dac-patterns,36, 3,20, 3,20, 3,20, 3,20
!dac-patterns,37, 4,44, 4,44, 4,44, 4,44
!dac-patterns,38, 4,52, 4,52, 4,52, 4,52
!dac-patterns,39, 5,160, 5,160, 5,160, 5,160
!dac-patterns,40, 4,128, 4,128, 4,128, 4,128
!dac-patterns,41, 3,20, 3,20, 3,20, 3,20
!dac-patterns,42, 4,34, 5,50, 4,34, 5,50
!dac-patterns,43, 4,60, 4,60, 4,60, 4,60
!dac-patterns,44, 5,100, 5,100, 5,100, 5,100
!dac-patterns,45, 4,84, 4,84, 4,84, 4,84
!dac-patterns,46, 3,24, 3,24, 3,24, 3,24
!dac-patterns,47, 4,52, 4,52, 4,52, 4,52
!dac-patterns,48, 4,62, 4,62, 4,62, 4,62
!dac-patterns,49, 5,160, 5,160, 5,160, 5,160
!dac-patterns,50, 8,224, 8,224, 9,252, 9,252
!dac-patterns,51, 3,48, 3,48, 3,48, 3,48
!dac-patterns,52, 4,104, 4,104, 4,104, 4,104
!dac-patterns,53, 4,118, 4,118, 4,118, 4,118
!dac-patterns,54, 5,320, 5,320, 5,320, 5,320
!dac-patterns,55, 11,540, 11,540, 13,610, 13,610
!eh-patterns,1, 4,32, 4,32, 4,32, 4,32
!eh-patterns,2, 4,48, 4,48, 4,48, 4,48
!eh-patterns,3, 8,960, 8,960, 8,960, 8,960
!eh-patterns,4, 2,8, 2,8, 3,12, 3,12
!eh-patterns,5, 3,20, 3,20, 3,20, 3,20
!eh-patterns,6, 2,12, 2,12, 2,12, 2,12
!eh-patterns,7, 2,7, 2,7, 3,9, 3,9
!eh-patterns,8, 3,21, 3,21, 3,21, 3,21
!eh-patterns,9, 5,80, 5,80, 5,80, 5,80
!eh-patterns,10, 6,192, 6,192, 6,192, 6,192
!eh-patterns,11, 2,9, 2,9, 2,9, 2,9
!eh-patterns,12, 6,103, 6,103, 8,135, 8,135
!sb-patterns,1, 2,6, 2,6, 2,6, 2,6
!sb-patterns,5, 2,7, 2,7, 3,12, 3,12
!sb-patterns,6, 3,11, 4,14, 3,11, 4,14
!sb-patterns,7, 4,16, 4,16, 4,16, 4,16
!sb-patterns,9, 4,19, 4,19, 6,27, 6,27
!sb-patterns,10, 2,6, 2,6, 2,6, 2,6
!sb-patterns,11, 1,0, 1,0, 1,0, 1,0
!sb-patterns,12, 1,0, 1,0, 1,0, 1,0
!sb-patterns,13, 2,7, 2,7, 2,7, 2,7
!sb-patterns,14, 2,7, 2,7, 2,7, 2,7
!sb-patterns,16, 2,12, 2,12, 2,12, 2,12
!sb-patterns,17, 3,12, 3,12, 3,12, 3,12
!sb-patterns,18, 3,12, 3,12, 3,12, 3,12
!sb-patterns,19, 3,4, 3,4, 3,4, 3,4
!sb-patterns,20, 4,37, 5,37, 4,37, 5,37
!sb-patterns,25, 4,32, 4,32, 4,32, 4,32
!sb-patterns,26, 2,4, 2,4, 2,4, 2,4
!sb-patterns,27, 2,6, 2,6, 2,6, 2,6
EOF
diff output expected
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment