Commit 67f4e8b5 authored by Alexandre Duret-Lutz's avatar Alexandre Duret-Lutz
Browse files

Deprecate reduce() in favor of ltl_simplifier.

* src/ltlvisit/reduce.hh: Mark the file as obsolete.
(reduce): Declare this function as obsolete.
* src/ltlvisit/reduce.cc: Define SKIP_DEPRECATED_WARNING
so we can include reduce.hh.
* src/sanity/includes.test: Also use SKIP_DEPRECATED_WARNING
when compiling headers.
* iface/dve2/dve2check.cc,
src/ltltest/equals.cc, src/ltltest/randltl.cc,
src/ltltest/reduc.cc, src/tgbaalgos/ltl2tgba_fm.hh,
src/tgbaalgos/ltl2tgba_fm.cc, src/tgbatest/randtgba.cc,
wrap/python/ajax/spot.in, wrap/python/spot.i: Adjust
to use ltl_simplifier.
* src/tgbatest/ltl2tgba.cc: Adjust to use ltl_simplifier,
and replace -fr1...-fr7 options by a single -fr option.
* src/tgbatest/spotlbtt.test: Adjust -fr flags accordingly.
* src/tgbatest/reductgba.cc: Do not include reduce.hh.
parent c0085a8f
...@@ -23,7 +23,6 @@ ...@@ -23,7 +23,6 @@
#include "ltlenv/defaultenv.hh" #include "ltlenv/defaultenv.hh"
#include "ltlast/allnodes.hh" #include "ltlast/allnodes.hh"
#include "ltlparse/public.hh" #include "ltlparse/public.hh"
#include "ltlvisit/reduce.hh"
#include "tgbaalgos/ltl2tgba_fm.hh" #include "tgbaalgos/ltl2tgba_fm.hh"
#include "tgbaalgos/sccfilter.hh" #include "tgbaalgos/sccfilter.hh"
#include "tgbaalgos/minimize.hh" #include "tgbaalgos/minimize.hh"
...@@ -221,7 +220,9 @@ main(int argc, char **argv) ...@@ -221,7 +220,9 @@ main(int argc, char **argv)
tm.start("reducing formula"); tm.start("reducing formula");
{ {
spot::ltl::formula* r = spot::ltl::reduce(f); spot::ltl::ltl_simplifier_options opt(true, true, true, true, true);
spot::ltl::ltl_simplifier simp(opt);
spot::ltl::formula* r = simp.simplify(f);
f->destroy(); f->destroy();
f = r; f = r;
} }
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
#include "ltlvisit/nenoform.hh" #include "ltlvisit/nenoform.hh"
#include "ltlvisit/contain.hh" #include "ltlvisit/contain.hh"
#include "ltlast/allnodes.hh" #include "ltlast/allnodes.hh"
#include "ltlvisit/reduce.hh" #include "ltlvisit/simplify.hh"
#include "ltlvisit/tostring.hh" #include "ltlvisit/tostring.hh"
void void
...@@ -94,26 +94,38 @@ main(int argc, char** argv) ...@@ -94,26 +94,38 @@ main(int argc, char** argv)
std::cout << std::endl; std::cout << std::endl;
#endif #endif
#ifdef REDUC #ifdef REDUC
spot::ltl::formula* tmp; {
tmp = f1; spot::ltl::ltl_simplifier_options opt(true, true, true, false, false);
f1 = spot::ltl::reduce(f1); spot::ltl::ltl_simplifier simp(opt);
tmp->destroy(); spot::ltl::formula* tmp;
tmp = f1;
f1 = simp.simplify(f1);
tmp->destroy();
}
spot::ltl::dump(std::cout, f1); spot::ltl::dump(std::cout, f1);
std::cout << std::endl; std::cout << std::endl;
#endif #endif
#ifdef REDUC_TAU #ifdef REDUC_TAU
spot::ltl::formula* tmp; {
tmp = f1; spot::ltl::ltl_simplifier_options opt(false, false, false, true, false);
f1 = spot::ltl::reduce_tau03(f1, false); spot::ltl::ltl_simplifier simp(opt);
tmp->destroy(); spot::ltl::formula* tmp;
tmp = f1;
f1 = simp.simplify(f1);
tmp->destroy();
}
spot::ltl::dump(std::cout, f1); spot::ltl::dump(std::cout, f1);
std::cout << std::endl; std::cout << std::endl;
#endif #endif
#ifdef REDUC_TAUSTR #ifdef REDUC_TAUSTR
spot::ltl::formula* tmp; {
tmp = f1; spot::ltl::ltl_simplifier_options opt(false, false, false, true, true);
f1 = spot::ltl::reduce_tau03(f1, true); spot::ltl::ltl_simplifier simp(opt);
tmp->destroy(); spot::ltl::formula* tmp;
tmp = f1;
f1 = simp.simplify(f1);
tmp->destroy();
}
spot::ltl::dump(std::cout, f1); spot::ltl::dump(std::cout, f1);
std::cout << std::endl; std::cout << std::endl;
#endif #endif
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
#include "ltlvisit/randomltl.hh" #include "ltlvisit/randomltl.hh"
#include "ltlvisit/tostring.hh" #include "ltlvisit/tostring.hh"
#include "ltlvisit/length.hh" #include "ltlvisit/length.hh"
#include "ltlvisit/reduce.hh" #include "ltlvisit/simplify.hh"
#include "ltlenv/defaultenv.hh" #include "ltlenv/defaultenv.hh"
#include "misc/random.hh" #include "misc/random.hh"
...@@ -97,6 +97,8 @@ main(int argc, char** argv) ...@@ -97,6 +97,8 @@ main(int argc, char** argv)
char* opt_pB = 0; char* opt_pB = 0;
int opt_r = 0; int opt_r = 0;
bool opt_u = false; bool opt_u = false;
spot::ltl::ltl_simplifier_options simpopt(true, true, true, true, true);
spot::ltl::ltl_simplifier simp(simpopt);
spot::ltl::environment& env(spot::ltl::default_environment::instance()); spot::ltl::environment& env(spot::ltl::default_environment::instance());
spot::ltl::atomic_prop_set* ap = new spot::ltl::atomic_prop_set; spot::ltl::atomic_prop_set* ap = new spot::ltl::atomic_prop_set;
...@@ -308,7 +310,7 @@ main(int argc, char** argv) ...@@ -308,7 +310,7 @@ main(int argc, char** argv)
f = rf->generate(opt_f); f = rf->generate(opt_f);
if (opt_r) if (opt_r)
{ {
spot::ltl::formula* g = reduce(f); spot::ltl::formula* g = simp.simplify(f);
f->destroy(); f->destroy();
if (spot::ltl::length(g) < opt_r) if (spot::ltl::length(g) < opt_r)
{ {
......
// Copyright (C) 2008, 2009, 2010 Laboratoire de Recherche et Dveloppement // Copyright (C) 2008, 2009, 2010, 2011 Laboratoire de Recherche et
// de l'Epita (LRDE). // Dveloppement de l'Epita (LRDE).
// Copyright (C) 2004, 2006, 2007 Laboratoire d'Informatique de Paris // Copyright (C) 2004, 2006, 2007 Laboratoire d'Informatique de Paris
// 6 (LIP6), dpartement Systmes Rpartis Coopratifs (SRC), // 6 (LIP6), dpartement Systmes Rpartis Coopratifs (SRC),
// Universit Pierre et Marie Curie. // Universit Pierre et Marie Curie.
...@@ -28,14 +28,10 @@ ...@@ -28,14 +28,10 @@
#include <string> #include <string>
#include <cstring> #include <cstring>
#include "ltlparse/public.hh" #include "ltlparse/public.hh"
#include "ltlvisit/lunabbrev.hh"
#include "ltlvisit/tunabbrev.hh"
#include "ltlvisit/dump.hh" #include "ltlvisit/dump.hh"
#include "ltlvisit/nenoform.hh"
#include "ltlvisit/tostring.hh" #include "ltlvisit/tostring.hh"
#include "ltlvisit/reduce.hh" #include "ltlvisit/simplify.hh"
#include "ltlvisit/length.hh" #include "ltlvisit/length.hh"
#include "ltlvisit/contain.hh"
#include "ltlast/allnodes.hh" #include "ltlast/allnodes.hh"
void void
...@@ -52,6 +48,7 @@ main(int argc, char** argv) ...@@ -52,6 +48,7 @@ main(int argc, char** argv)
bool hidereduc = false; bool hidereduc = false;
unsigned long sum_before = 0; unsigned long sum_before = 0;
unsigned long sum_after = 0; unsigned long sum_after = 0;
spot::ltl::ltl_simplifier_options o(false, false, false, false, false);
if (argc < 3) if (argc < 3)
syntax(argv[0]); syntax(argv[0]);
...@@ -70,69 +67,81 @@ main(int argc, char** argv) ...@@ -70,69 +67,81 @@ main(int argc, char** argv)
--argc; --argc;
} }
int o = spot::ltl::Reduce_None;
switch (atoi(argv[1])) switch (atoi(argv[1]))
{ {
case 0: case 0:
o = spot::ltl::Reduce_Basics; o.reduce_basics = true;
break; break;
case 1: case 1:
o = spot::ltl::Reduce_Syntactic_Implications; o.synt_impl = true;
break; break;
case 2: case 2:
o = spot::ltl::Reduce_Eventuality_And_Universality; o.event_univ = true;
break; break;
case 3: case 3:
o = spot::ltl::Reduce_Basics o.reduce_basics = true;
| spot::ltl::Reduce_Syntactic_Implications o.synt_impl = true;
| spot::ltl::Reduce_Eventuality_And_Universality; o.event_univ = true;
break; break;
case 4: case 4:
o = spot::ltl::Reduce_Basics | spot::ltl::Reduce_Syntactic_Implications; o.reduce_basics = true;
o.synt_impl = true;
break; break;
case 5: case 5:
o = (spot::ltl::Reduce_Basics o.reduce_basics = true;
| spot::ltl::Reduce_Eventuality_And_Universality); o.event_univ = true;
break; break;
case 6: case 6:
o = (spot::ltl::Reduce_Syntactic_Implications o.synt_impl = true;
| spot::ltl::Reduce_Eventuality_And_Universality); o.event_univ = true;
break; break;
case 7: case 7:
o = spot::ltl::Reduce_Containment_Checks; o.containment_checks = true;
break; break;
case 8: case 8:
o = spot::ltl::Reduce_Containment_Checks_Stronger; o.containment_checks = true;
o.containment_checks_stronger = true;
break; break;
case 9: case 9:
o = spot::ltl::Reduce_All; o.reduce_basics = true;
o.synt_impl = true;
o.event_univ = true;
o.containment_checks = true;
o.containment_checks_stronger = true;
break; break;
case 10: case 10:
o = (spot::ltl::Reduce_Basics o.reduce_basics = true;
| spot::ltl::Reduce_Containment_Checks_Stronger); o.containment_checks = true;
o.containment_checks_stronger = true;
break; break;
case 11: case 11:
o = (spot::ltl::Reduce_Syntactic_Implications o.synt_impl = true;
| spot::ltl::Reduce_Containment_Checks_Stronger); o.containment_checks = true;
o.containment_checks_stronger = true;
break; break;
case 12: case 12:
o = (spot::ltl::Reduce_Basics o.reduce_basics = true;
| spot::ltl::Reduce_Syntactic_Implications o.synt_impl = true;
| spot::ltl::Reduce_Containment_Checks_Stronger); o.containment_checks = true;
o.containment_checks_stronger = true;
break; break;
case 13: case 13:
o = (spot::ltl::Reduce_Eventuality_And_Universality o.event_univ = true;
| spot::ltl::Reduce_Containment_Checks_Stronger); o.containment_checks = true;
o.containment_checks_stronger = true;
break; break;
case 14: case 14:
o = (spot::ltl::Reduce_Basics o.reduce_basics = true;
| spot::ltl::Reduce_Eventuality_And_Universality o.event_univ = true;
| spot::ltl::Reduce_Containment_Checks_Stronger); o.containment_checks = true;
o.containment_checks_stronger = true;
break; break;
default: default:
return 2; return 2;
} }
spot::ltl::ltl_simplifier* simp = new spot::ltl::ltl_simplifier(o);
spot::ltl::formula* f1 = 0; spot::ltl::formula* f1 = 0;
spot::ltl::formula* f2 = 0; spot::ltl::formula* f2 = 0;
...@@ -191,25 +200,17 @@ main(int argc, char** argv) ...@@ -191,25 +200,17 @@ main(int argc, char** argv)
{ {
spot::ltl::formula* ftmp1; spot::ltl::formula* ftmp1;
spot::ltl::formula* ftmp2;
ftmp1 = f1; ftmp1 = f1;
f1 = unabbreviate_logic(f1); f1 = simp->negative_normal_form(f1, false, true);
ftmp2 = f1;
f1 = negative_normal_form(f1);
ftmp1->destroy(); ftmp1->destroy();
ftmp2->destroy();
int length_f1_before = spot::ltl::length(f1); int length_f1_before = spot::ltl::length(f1);
std::string f1s_before = spot::ltl::to_string(f1); std::string f1s_before = spot::ltl::to_string(f1);
ftmp1 = f1; ftmp1 = f1;
f1 = spot::ltl::reduce(f1, o); f1 = simp->simplify(f1);
ftmp2 = f1;
f1 = spot::ltl::unabbreviate_logic(f1);
ftmp1->destroy(); ftmp1->destroy();
ftmp2->destroy();
int length_f1_after = spot::ltl::length(f1); int length_f1_after = spot::ltl::length(f1);
std::string f1s_after = spot::ltl::to_string(f1); std::string f1s_after = spot::ltl::to_string(f1);
...@@ -218,13 +219,7 @@ main(int argc, char** argv) ...@@ -218,13 +219,7 @@ main(int argc, char** argv)
if (f2) if (f2)
{ {
ftmp1 = f2; ftmp1 = f2;
f2 = unabbreviate_logic(f2); f2 = simp->negative_normal_form(f2, false, true);
ftmp2 = f2;
f2 = negative_normal_form(f2);
ftmp1->destroy();
ftmp2->destroy();
ftmp1 = f2;
f2 = unabbreviate_logic(f2);
ftmp1->destroy(); ftmp1->destroy();
f2s = spot::ltl::to_string(f2); f2s = spot::ltl::to_string(f2);
} }
...@@ -278,6 +273,8 @@ main(int argc, char** argv) ...@@ -278,6 +273,8 @@ main(int argc, char** argv)
} }
end: end:
delete simp;
if (fin) if (fin)
{ {
float before = sum_before; float before = sum_before;
......
...@@ -21,9 +21,10 @@ ...@@ -21,9 +21,10 @@
// Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA // Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
// 02111-1307, USA. // 02111-1307, USA.
#include "reduce.hh"
#include <cassert> #include <cassert>
#include "simplify.hh" #include "simplify.hh"
#define SKIP_DEPRECATED_WARNING
#include "reduce.hh"
namespace spot namespace spot
{ {
......
...@@ -27,6 +27,13 @@ ...@@ -27,6 +27,13 @@
#include "ltlast/formula.hh" #include "ltlast/formula.hh"
#include "ltlast/visitor.hh" #include "ltlast/visitor.hh"
#if __GNUC__
#ifndef SKIP_DEPRECATED_WARNING
#warning This file and its functions are deprecated. \
The functionality moved to ltlvisit/simplify.hh
#endif
#endif
namespace spot namespace spot
{ {
namespace ltl namespace ltl
...@@ -60,7 +67,14 @@ namespace spot ...@@ -60,7 +67,14 @@ namespace spot
/// \param opt a conjonction of spot::ltl::reduce_options specifying /// \param opt a conjonction of spot::ltl::reduce_options specifying
/// which optimizations to apply. /// which optimizations to apply.
/// \return the reduced formula /// \return the reduced formula
///
/// \deprecated Use spot::ltl::ltl_simplifier instead.
#if __GNUC__
formula*
reduce(const formula* f, int opt = Reduce_All) __attribute__ ((deprecated));
#else
formula* reduce(const formula* f, int opt = Reduce_All); formula* reduce(const formula* f, int opt = Reduce_All);
#endif
/// @} /// @}
/// \brief Check whether a formula is a pure eventuality. /// \brief Check whether a formula is a pure eventuality.
......
...@@ -30,7 +30,7 @@ for file in `find "$INCDIR" \( -name "${1-*}.hh" \ ...@@ -30,7 +30,7 @@ for file in `find "$INCDIR" \( -name "${1-*}.hh" \
#include <$file> #include <$file>
#include <$file> #include <$file>
EOF EOF
if $CXX $CPPFLAGS $CXXFLAGS -c incltest.cc; then if $CXX $CPPFLAGS -DSKIP_DEPRECATED_WARNING $CXXFLAGS -c incltest.cc; then
echo "PASS: $file" echo "PASS: $file"
else else
echo "FAIL: $file" echo "FAIL: $file"
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include "misc/minato.hh" #include "misc/minato.hh"
#include "ltlast/visitor.hh" #include "ltlast/visitor.hh"
#include "ltlast/allnodes.hh" #include "ltlast/allnodes.hh"
#include "ltlvisit/lunabbrev.hh"
#include "ltlvisit/nenoform.hh" #include "ltlvisit/nenoform.hh"
#include "ltlvisit/tostring.hh" #include "ltlvisit/tostring.hh"
#include "ltlvisit/postfix.hh" #include "ltlvisit/postfix.hh"
...@@ -1588,22 +1587,25 @@ namespace spot ...@@ -1588,22 +1587,25 @@ namespace spot
ltl_to_tgba_fm(const formula* f, bdd_dict* dict, ltl_to_tgba_fm(const formula* f, bdd_dict* dict,
bool exprop, bool symb_merge, bool branching_postponement, bool exprop, bool symb_merge, bool branching_postponement,
bool fair_loop_approx, const atomic_prop_set* unobs, bool fair_loop_approx, const atomic_prop_set* unobs,
int reduce_ltl) ltl_simplifier* simplifier)
{ {
// Normalize the formula. We want all the negations on formula* f2;
// the atomic propositions. We also suppress logic
// abbreviations such as <=>, =>, or XOR, since they
// would involve negations at the BDD level.
formula* f1 = unabbreviate_logic(f);
formula* f2 = negative_normal_form(f1);
f1->destroy();
// Simplify the formula, if requested. // Simplify the formula, if requested.
if (reduce_ltl) if (simplifier)
{ {
formula* tmp = reduce(f2, reduce_ltl); // This will normalize the formula regardless of the
f2->destroy(); // configuration of the simplifier.
f2 = tmp; f2 = simplifier->simplify(f);
}
else
{
// Otherwise, at least normalize the formula. We want all the
// negations on the atomic propositions. We also suppress
// logic abbreviations such as <=>, =>, or XOR, since they
// would involve negations at the BDD level.
ltl_simplifier s;
f2 = s.negative_normal_form(f, false, true);
} }
typedef std::set<const formula*, formula_ptr_less_than> set_type; typedef std::set<const formula*, formula_ptr_less_than> set_type;
...@@ -1611,7 +1613,7 @@ namespace spot ...@@ -1611,7 +1613,7 @@ namespace spot
translate_dict d(dict); translate_dict d(dict);
// Compute the set of all promises that can possibly occurre // Compute the set of all promises that can possibly occur
// inside the formula. // inside the formula.
bdd all_promises = bddtrue; bdd all_promises = bddtrue;
if (fair_loop_approx || unobs) if (fair_loop_approx || unobs)
...@@ -1761,9 +1763,9 @@ namespace spot ...@@ -1761,9 +1763,9 @@ namespace spot
const formula* dest = d.conj_bdd_to_formula(dest_bdd); const formula* dest = d.conj_bdd_to_formula(dest_bdd);
// Simplify the formula, if requested. // Simplify the formula, if requested.
if (reduce_ltl) if (simplifier)
{ {
formula* tmp = reduce(dest, reduce_ltl); formula* tmp = simplifier->simplify(dest);
dest->destroy(); dest->destroy();
dest = tmp; dest = tmp;
// Ignore the arc if the destination reduces to false. // Ignore the arc if the destination reduces to false.
......
// Copyright (C) 2010 Laboratoire de Recherche et Développement de // Copyright (C) 2010, 2011, 2012 Laboratoire de Recherche et
// l'Epita (LRDE). // Développement de l'Epita (LRDE).
// Copyright (C) 2003, 2004, 2005, 2006 Laboratoire d'Informatique de // Copyright (C) 2003, 2004, 2005, 2006 Laboratoire d'Informatique de
// Paris 6 (LIP6), département Systèmes Répartis Coopératifs (SRC), // Paris 6 (LIP6), département Systèmes Répartis Coopératifs (SRC),
// Université Pierre et Marie Curie. // Université Pierre et Marie Curie.
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
#include "ltlast/formula.hh" #include "ltlast/formula.hh"
#include "tgba/tgbaexplicit.hh" #include "tgba/tgbaexplicit.hh"
#include "ltlvisit/apcollect.hh" #include "ltlvisit/apcollect.hh"
#include "ltlvisit/reduce.hh" #include "ltlvisit/simplify.hh"
namespace spot namespace spot
{ {
...@@ -99,10 +99,10 @@ namespace spot ...@@ -99,10 +99,10 @@ namespace spot
/// formula are observable events, and \c unobs can be filled with /// formula are observable events, and \c unobs can be filled with
/// additional unobservable events. /// additional unobservable events.
/// ///
/// \param reduce_ltl If this parameter is set, the LTL formulae representing /// \param simpl If this parameter is set, the LTL formulae representing
/// each state of the automaton will be simplified using spot::ltl::reduce() /// each state of the automaton will be simplified
/// before computing the successor. \a reduce_ltl should specify the type /// before computing the successor. \a simpl should be configured
/// of reduction to apply as documented for spot::ltl::reduce(). /// for the type of reduction you want, see spot::ltl::ltl_simplifier.
/// This idea is taken from the following paper. /// This idea is taken from the following paper.
/// \verbatim /// \verbatim
/// @InProceedings{ thirioux.02.fmics, /// @InProceedings{ thirioux.02.fmics,
...@@ -128,7 +128,7 @@ namespace spot ...@@ -128,7 +128,7 @@ namespace spot
bool branching_postponement = false, bool branching_postponement = false,
bool fair_loop_approx = false, bool fair_loop_approx = false,
const ltl::atomic_prop_set* unobs = 0, const ltl::atomic_prop_set* unobs = 0,
int reduce_ltl = ltl::Reduce_None); ltl::ltl_simplifier* simplifier = 0);
} }
#endif // SPOT_TGBAALGOS_LTL2TGBA_FM_HH #endif // SPOT_TGBAALGOS_LTL2TGBA_FM_HH
...@@ -132,13 +132,8 @@ syntax(char* prog) ...@@ -132,13 +132,8 @@ syntax(char* prog)
<< std::endl << std::endl