* src/tgbatest/ltl2tgba.cc: Add some option for the reduction of
automata. * src/tgbatest/spotlbtt.test, src/tgbatest/Makefile.am: Add some test for reduction of automata. * src/tgbaalgos/reductgba_sim_del.cc, src/tgbaalgos/reductgba_sim.cc, src/tgbaalgos/reductgba_sim.hh: Compute some simulation relation to reduce a tgba. * src/tgba/tgbareduc.cc, src/tgba/tgbareduc.hh: A implementation of tgba for the reduction. * src/tgbaalgos/Makefile.am, src/tgba/Makefile.am: Add the reduction of automata. * src/ltlvisit/syntimpl.cc, src/ltlvisit/basereduc.cc: Lot of mistake are corrected. * src/ltlvisit/syntimpl.hh, src/ltlvisit/reducform.cc, src/ltlvisit/reducform.hh, src/ltltest/reduc.cc: Adjust. * src/ltltest/equals.cc, src/ltltest/reduccmp.test, src/ltltest/Makefile.am: Add a test for reduction.
This commit is contained in:
parent
383f7e170a
commit
8d3606ff07
20 changed files with 3155 additions and 133 deletions
|
|
@ -35,6 +35,7 @@ check_PROGRAMS = \
|
|||
lunabbrev \
|
||||
nenoform \
|
||||
reduc \
|
||||
reduccmp \
|
||||
syntimpl \
|
||||
tostring \
|
||||
tunabbrev \
|
||||
|
|
@ -49,6 +50,8 @@ lunabbrev_CPPFLAGS = $(AM_CPPFLAGS) -DLUNABBREV
|
|||
nenoform_SOURCES = equals.cc
|
||||
nenoform_CPPFLAGS = $(AM_CPPFLAGS) -DNENOFORM
|
||||
reduc_SOURCES = reduc.cc
|
||||
reduccmp_SOURCES = equals.cc
|
||||
reduccmp_CPPFLAGS = $(AM_CPPFLAGS) -DREDUC
|
||||
syntimpl_SOURCES = syntimpl.cc
|
||||
tostring_SOURCES = tostring.cc
|
||||
tunabbrev_SOURCES = equals.cc
|
||||
|
|
@ -70,6 +73,7 @@ TESTS = \
|
|||
nenoform.test \
|
||||
tunenoform.test \
|
||||
syntimpl.test \
|
||||
reduc.test
|
||||
reduc.test \
|
||||
reduccmp.test
|
||||
|
||||
CLEANFILES = stdout expect parse.dot result.data
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (C) 2003 Laboratoire d'Informatique de Paris 6 (LIP6),
|
||||
// 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.
|
||||
//
|
||||
|
|
@ -28,6 +28,8 @@
|
|||
#include "ltlvisit/nenoform.hh"
|
||||
#include "ltlvisit/destroy.hh"
|
||||
#include "ltlast/allnodes.hh"
|
||||
#include "ltlvisit/reducform.hh"
|
||||
#include "ltlvisit/tostring.hh"
|
||||
|
||||
void
|
||||
syntax(char* prog)
|
||||
|
|
@ -42,7 +44,6 @@ main(int argc, char** argv)
|
|||
if (argc != 3)
|
||||
syntax(argv[0]);
|
||||
|
||||
|
||||
spot::ltl::parse_error_list p1;
|
||||
spot::ltl::formula* f1 = spot::ltl::parse(argv[1], p1);
|
||||
|
||||
|
|
@ -79,6 +80,16 @@ main(int argc, char** argv)
|
|||
spot::ltl::dump(std::cout, f1);
|
||||
std::cout << std::endl;
|
||||
#endif
|
||||
#ifdef REDUC
|
||||
spot::ltl::formula* tmp;
|
||||
tmp = f1;
|
||||
f1 = spot::ltl::reduce(f1);
|
||||
//std::string f2s = spot::ltl::to_string(f2);
|
||||
//std::string f1s = spot::ltl::to_string(f1);
|
||||
spot::ltl::destroy(tmp);
|
||||
spot::ltl::dump(std::cout, f1);
|
||||
//std::cout << f1s << " // " << f2s << std::endl;
|
||||
#endif
|
||||
|
||||
int exit_code = f1 != f2;
|
||||
|
||||
|
|
|
|||
|
|
@ -133,12 +133,12 @@ main(int argc, char** argv)
|
|||
f2s = spot::ltl::to_string(f2);
|
||||
}
|
||||
|
||||
if (red && !f2)
|
||||
{
|
||||
if ((red | !red) && !f2)
|
||||
{
|
||||
std::cout << length_f1_before << " " << length_f1_after
|
||||
<< " '" << f1s_before << "' reduce to '" << f1s_after << "'"
|
||||
<< std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
if (f2)
|
||||
{
|
||||
|
|
@ -179,5 +179,6 @@ main(int argc, char** argv)
|
|||
assert(spot::ltl::binop::instance_count() == 0);
|
||||
assert(spot::ltl::multop::instance_count() == 0);
|
||||
|
||||
return exit_code;
|
||||
//return exit_code;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
74
src/ltltest/reduccmp.test
Executable file
74
src/ltltest/reduccmp.test
Executable file
|
|
@ -0,0 +1,74 @@
|
|||
#! /bin/sh
|
||||
# Copyright (C) 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 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.
|
||||
|
||||
|
||||
# Check for the equals visitor
|
||||
|
||||
. ./defs || exit 1
|
||||
|
||||
# Basics reduction
|
||||
run 0 ./reduccmp 'X(true)' 'true'
|
||||
run 0 ./reduccmp 'X(false)' 'false'
|
||||
run 0 ./reduccmp 'F(true)' 'true'
|
||||
run 0 ./reduccmp 'F(false)' 'false'
|
||||
run 0 ./reduccmp 'G(true)' 'true'
|
||||
run 0 ./reduccmp 'G(false)' 'false'
|
||||
|
||||
run 0 ./reduccmp 'XGF(f)' 'GF(f)'
|
||||
run 0 ./reduccmp 'FX(a)' 'XF(a)'
|
||||
run 0 ./reduccmp 'G(a R b)' 'G(b)'
|
||||
run 0 ./reduccmp 'GX(a)' 'XG(a)'
|
||||
|
||||
run 0 ./reduccmp 'X(a) U X(b)' 'X(a U b)'
|
||||
run 0 ./reduccmp 'X(a) R X(b)' 'X(a R b)'
|
||||
|
||||
run 0 ./reduccmp 'Xa & Xb' 'X(a & b)'
|
||||
run 0 ./reduccmp '(a U b) & (c U b)' '(a & c) U b'
|
||||
run 0 ./reduccmp '(a R b) & (a R c)' 'a R (b & c)'
|
||||
run 0 ./reduccmp 'Xa | Xb' 'X(a | b)'
|
||||
run 0 ./reduccmp '(a U b) | (a U c)' 'a U (b | c)'
|
||||
run 0 ./reduccmp '(a R b) | (c R b)' '(a | c) R b'
|
||||
|
||||
run 0 ./reduccmp 'X(a & GFb)' 'Xa & GFb'
|
||||
run 0 ./reduccmp 'X(a | GFb)' 'Xa | GFb'
|
||||
run 0 ./reduccmp 'F(a & GFb)' 'Fa & GFb'
|
||||
run 0 ./reduccmp 'G(a | GFb)' 'Ga | GFb'
|
||||
|
||||
run 0 ./reduccmp 'X(a & GFb & c)' 'X(a & c) & GFb'
|
||||
run 0 ./reduccmp 'X(a | GFb | c)' 'X(a | c) | GFb'
|
||||
run 0 ./reduccmp 'F(a & GFb & c)' 'F(a & c) & GFb'
|
||||
run 0 ./reduccmp 'G(a | GFb | c)' 'G(a | c) | GFb'
|
||||
|
||||
# Eventuality and universality class reduction
|
||||
run 0 ./reduccmp 'FFa' 'Fa'
|
||||
run 0 ./reduccmp 'FGFa' 'GFa'
|
||||
run 0 ./reduccmp 'b U Fa' 'Fa'
|
||||
run 0 ./reduccmp 'b U GFa' 'GFa'
|
||||
run 0 ./reduccmp 'Ga' 'Ga'
|
||||
run 0 ./reduccmp 'GFGa' 'FGa'
|
||||
run 0 ./reduccmp 'b R Ga' 'Ga'
|
||||
run 0 ./reduccmp 'b R FGa' 'FGa'
|
||||
|
||||
# Syntactic reduction
|
||||
run 0 ./reduccmp 'a & (b U a)' 'a'
|
||||
run 0 ./reduccmp 'a | (b U a)' '(b U a)'
|
||||
run 0 ./reduccmp 'a U (b U a)' '(b U a)'
|
||||
Loading…
Add table
Add a link
Reference in a new issue