* src/tgba/tgbasafracomplement.cc (tgba_safra_complement::tgba_safra_complement) (tgba_safra_complement::succ_iter): Correct the declaration and use of multiple acceptance conditions. (state_complement::to_string): Output the L set, not U. The previous code caused different states to share the same names, causing issues with the text-based output (state with identical names get merged). * src/tgba/tgbasafracomplement.hh (tgba_safra_complement::acceptance_cond_vec_): Adjust type to store BDDs. * src/tgbatest/complementation.cc: Implement a new "-b" option to output automata in Spot's syntax. * src/tgbatest/complementation.test: Add a test-case supplied by Martin Dieguez Lodeiro. * THANKS: Add Martin.
66 lines
1.8 KiB
Bash
Executable file
66 lines
1.8 KiB
Bash
Executable file
#!/bin/sh
|
|
# Copyright (C) 2009, 2011 Laboratoire de Recherche et Développement
|
|
# de l'Epita (LRDE).
|
|
#
|
|
# 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 2 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 Spot; see the file COPYING. If not, write to the Free
|
|
# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
# 02111-1307, USA.
|
|
|
|
. ./defs
|
|
|
|
set -e
|
|
|
|
while read f; do
|
|
run 0 ../complement -f "$f"
|
|
run 0 ../complement -S -f "$f"
|
|
done <<EOF
|
|
GFa
|
|
FGa
|
|
<>p1->(p0Up1)
|
|
[](p0-><>p3)
|
|
a U b
|
|
EOF
|
|
|
|
while read f; do
|
|
run 0 ../complement -S -f "$f"
|
|
done <<EOF
|
|
GFa&&FGa
|
|
[] ((p2 && ! p1) -> (p0 U (p1 || [] p0)))
|
|
[] (p2 -> ((! p0 && ! p1) U (p1 || ((p0 && ! p1) U (p1 || ((! p0 && ! p1) \
|
|
U (p1 || ((p0 && ! p1) U ((p1 || (! p0 U (p1 || [] ! p0))) || [] p0)))))))))
|
|
EOF
|
|
|
|
|
|
|
|
# The following test-case was supplied by Martin Dieguez Lodeiro to
|
|
# demonstrate a bug in our Safra implementation.
|
|
cat >x.tgba <<EOF
|
|
acc = "1";
|
|
"1", "1", "1",;
|
|
"1", "2", "p",;
|
|
"2", "3", "p", "1";
|
|
"2", "2", "1",;
|
|
"3", "3", "p", "1";
|
|
"3", "2", "1",;
|
|
EOF
|
|
# x.tgba accepts some run
|
|
run 0 ../ltl2tgba -X -e x.tgba
|
|
# so does its complement
|
|
run 0 ../complement -b -S -a x.tgba > nx.tgba
|
|
run 0 ../ltl2tgba -X -e nx.tgba
|
|
# however the intersection of both should not
|
|
# accept any run.
|
|
run 0 ../ltl2tgba -X -E -Pnx.tgba x.tgba
|