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.
This commit is contained in:
parent
c0085a8f30
commit
67f4e8b5ce
15 changed files with 367 additions and 166 deletions
|
|
@ -132,13 +132,8 @@ syntax(char* prog)
|
|||
<< std::endl
|
||||
|
||||
<< "Options for Couvreur's FM algorithm (-f):" << std::endl
|
||||
<< " -fr1 use -r1 (see below) at each step of FM" << std::endl
|
||||
<< " -fr2 use -r2 (see below) at each step of FM" << std::endl
|
||||
<< " -fr3 use -r3 (see below) at each step of FM" << std::endl
|
||||
<< " -fr4 use -r4 (see below) at each step of FM" << std::endl
|
||||
<< " -fr5 use -r5 (see below) at each step of FM" << std::endl
|
||||
<< " -fr6 use -r6 (see below) at each step of FM" << std::endl
|
||||
<< " -fr7 use -r7 (see below) at each step of FM" << std::endl
|
||||
<< " -fr reduce formula at each step of FM" << std::endl
|
||||
<< " as specified with the -r{1..7} options" << std::endl
|
||||
<< " -L fair-loop approximation (implies -f)" << std::endl
|
||||
<< " -p branching postponement (implies -f)" << std::endl
|
||||
<< " -U[PROPS] consider atomic properties of the formula as "
|
||||
|
|
@ -291,7 +286,7 @@ main(int argc, char** argv)
|
|||
enum { TransitionLabeled, StateLabeled } labeling_opt = TransitionLabeled;
|
||||
enum { TransFM, TransLaCIM, TransLaCIM_ELTL, TransLaCIM_ELTL_ops, TransTAA }
|
||||
translation = TransFM;
|
||||
int fm_red = spot::ltl::Reduce_None;
|
||||
bool fm_red = false;
|
||||
bool fm_exprop_opt = false;
|
||||
bool fm_symb_merge_opt = true;
|
||||
bool file_opt = false;
|
||||
|
|
@ -305,8 +300,9 @@ main(int argc, char** argv)
|
|||
bool accepting_run_replay = false;
|
||||
bool from_file = false;
|
||||
bool read_neverclaim = false;
|
||||
int redopt = spot::ltl::Reduce_None;
|
||||
bool scc_filter = false;
|
||||
bool simpltl = false;
|
||||
spot::ltl::ltl_simplifier_options redopt(false, false, false, false, false);
|
||||
bool scc_filter_all = false;
|
||||
bool symbolic_scc_pruning = false;
|
||||
bool display_reduce_form = false;
|
||||
|
|
@ -422,42 +418,10 @@ main(int argc, char** argv)
|
|||
{
|
||||
translation = TransFM;
|
||||
}
|
||||
else if (!strcmp(argv[formula_index], "-fr1"))
|
||||
else if (!strcmp(argv[formula_index], "-fr"))
|
||||
{
|
||||
fm_red = true;
|
||||
translation = TransFM;
|
||||
fm_red |= spot::ltl::Reduce_Basics;
|
||||
}
|
||||
else if (!strcmp(argv[formula_index], "-fr2"))
|
||||
{
|
||||
translation = TransFM;
|
||||
fm_red |= spot::ltl::Reduce_Eventuality_And_Universality;
|
||||
}
|
||||
else if (!strcmp(argv[formula_index], "-fr3"))
|
||||
{
|
||||
translation = TransFM;
|
||||
fm_red |= spot::ltl::Reduce_Syntactic_Implications;
|
||||
}
|
||||
else if (!strcmp(argv[formula_index], "-fr4"))
|
||||
{
|
||||
translation = TransFM;
|
||||
fm_red |= spot::ltl::Reduce_Basics
|
||||
| spot::ltl::Reduce_Eventuality_And_Universality
|
||||
| spot::ltl::Reduce_Syntactic_Implications;
|
||||
}
|
||||
else if (!strcmp(argv[formula_index], "-fr5"))
|
||||
{
|
||||
translation = TransFM;
|
||||
fm_red |= spot::ltl::Reduce_Containment_Checks;
|
||||
}
|
||||
else if (!strcmp(argv[formula_index], "-fr6"))
|
||||
{
|
||||
translation = TransFM;
|
||||
fm_red |= spot::ltl::Reduce_Containment_Checks_Stronger;
|
||||
}
|
||||
else if (!strcmp(argv[formula_index], "-fr7"))
|
||||
{
|
||||
translation = TransFM;
|
||||
fm_red |= spot::ltl::Reduce_All;
|
||||
}
|
||||
else if (!strcmp(argv[formula_index], "-F"))
|
||||
{
|
||||
|
|
@ -578,33 +542,45 @@ main(int argc, char** argv)
|
|||
}
|
||||
else if (!strcmp(argv[formula_index], "-r1"))
|
||||
{
|
||||
redopt |= spot::ltl::Reduce_Basics;
|
||||
simpltl = true;
|
||||
redopt.reduce_basics = true;
|
||||
}
|
||||
else if (!strcmp(argv[formula_index], "-r2"))
|
||||
{
|
||||
redopt |= spot::ltl::Reduce_Eventuality_And_Universality;
|
||||
simpltl = true;
|
||||
redopt.event_univ = true;
|
||||
}
|
||||
else if (!strcmp(argv[formula_index], "-r3"))
|
||||
{
|
||||
redopt |= spot::ltl::Reduce_Syntactic_Implications;
|
||||
simpltl = true;
|
||||
redopt.synt_impl = true;
|
||||
}
|
||||
else if (!strcmp(argv[formula_index], "-r4"))
|
||||
{
|
||||
redopt |= spot::ltl::Reduce_Basics
|
||||
| spot::ltl::Reduce_Eventuality_And_Universality
|
||||
| spot::ltl::Reduce_Syntactic_Implications;
|
||||
simpltl = true;
|
||||
redopt.reduce_basics = true;
|
||||
redopt.event_univ = true;
|
||||
redopt.synt_impl = true;
|
||||
}
|
||||
else if (!strcmp(argv[formula_index], "-r5"))
|
||||
{
|
||||
redopt |= spot::ltl::Reduce_Containment_Checks;
|
||||
simpltl = true;
|
||||
redopt.containment_checks = true;
|
||||
}
|
||||
else if (!strcmp(argv[formula_index], "-r6"))
|
||||
{
|
||||
redopt |= spot::ltl::Reduce_Containment_Checks_Stronger;
|
||||
simpltl = true;
|
||||
redopt.containment_checks = true;
|
||||
redopt.containment_checks_stronger = true;
|
||||
}
|
||||
else if (!strcmp(argv[formula_index], "-r7"))
|
||||
{
|
||||
redopt |= spot::ltl::Reduce_All;
|
||||
simpltl = true;
|
||||
redopt.reduce_basics = true;
|
||||
redopt.event_univ = true;
|
||||
redopt.synt_impl = true;
|
||||
redopt.containment_checks = true;
|
||||
redopt.containment_checks_stronger = true;
|
||||
}
|
||||
else if (!strcmp(argv[formula_index], "-R"))
|
||||
{
|
||||
|
|
@ -794,6 +770,7 @@ main(int argc, char** argv)
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (f || from_file)
|
||||
{
|
||||
const spot::tgba_bdd_concrete* concrete = 0;
|
||||
|
|
@ -835,10 +812,14 @@ main(int argc, char** argv)
|
|||
}
|
||||
else
|
||||
{
|
||||
if (redopt != spot::ltl::Reduce_None)
|
||||
spot::ltl::ltl_simplifier* simp = 0;
|
||||
if (simpltl)
|
||||
simp = new spot::ltl::ltl_simplifier(redopt);
|
||||
|
||||
if (simp)
|
||||
{
|
||||
tm.start("reducing formula");
|
||||
spot::ltl::formula* t = spot::ltl::reduce(f, redopt);
|
||||
spot::ltl::formula* t = simp->simplify(f);
|
||||
f->destroy();
|
||||
tm.stop("reducing formula");
|
||||
f = t;
|
||||
|
|
@ -855,7 +836,7 @@ main(int argc, char** argv)
|
|||
post_branching,
|
||||
fair_loop_approx,
|
||||
unobservables,
|
||||
fm_red);
|
||||
fm_red ? simp : 0);
|
||||
break;
|
||||
case TransTAA:
|
||||
a = spot::ltl_to_taa(f, dict, containment);
|
||||
|
|
@ -870,6 +851,8 @@ main(int argc, char** argv)
|
|||
}
|
||||
tm.stop("translating formula");
|
||||
to_free = a;
|
||||
|
||||
delete simp;
|
||||
}
|
||||
|
||||
if (opt_monitor && !scc_filter)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (C) 2008, 2009, 2010 Laboratoire de Recherche et
|
||||
// Copyright (C) 2008, 2009, 2010, 2011 Laboratoire de Recherche et
|
||||
// Développement de l'Epita (LRDE).
|
||||
// Copyright (C) 2004, 2005 Laboratoire d'Informatique de Paris
|
||||
// 6 (LIP6), département Systèmes Répartis Coopératifs (SRC),
|
||||
|
|
@ -36,7 +36,7 @@
|
|||
#include "ltlvisit/randomltl.hh"
|
||||
#include "ltlvisit/tostring.hh"
|
||||
#include "ltlvisit/length.hh"
|
||||
#include "ltlvisit/reduce.hh"
|
||||
#include "ltlvisit/simplify.hh"
|
||||
#include "tgbaalgos/randomgraph.hh"
|
||||
#include "tgbaalgos/save.hh"
|
||||
#include "tgbaalgos/stats.hh"
|
||||
|
|
@ -488,7 +488,9 @@ print_ar_stats(ar_stats_type& ar_stats, const std::string s)
|
|||
}
|
||||
|
||||
spot::ltl::formula*
|
||||
generate_formula(const spot::ltl::random_ltl& rl, int opt_f, int opt_s,
|
||||
generate_formula(const spot::ltl::random_ltl& rl,
|
||||
spot::ltl::ltl_simplifier& simp,
|
||||
int opt_f, int opt_s,
|
||||
int opt_l = 0, bool opt_u = false)
|
||||
{
|
||||
static std::set<std::string> unique;
|
||||
|
|
@ -504,7 +506,7 @@ generate_formula(const spot::ltl::random_ltl& rl, int opt_f, int opt_s,
|
|||
f = rl.generate(opt_f);
|
||||
if (opt_l)
|
||||
{
|
||||
spot::ltl::formula* g = reduce(f);
|
||||
spot::ltl::formula* g = simp.simplify(f);
|
||||
f->destroy();
|
||||
if (spot::ltl::length(g) < opt_l)
|
||||
{
|
||||
|
|
@ -586,6 +588,9 @@ main(int argc, char** argv)
|
|||
spot::ltl::atomic_prop_set* ap = new spot::ltl::atomic_prop_set;
|
||||
spot::bdd_dict* dict = new spot::bdd_dict();
|
||||
|
||||
spot::ltl::ltl_simplifier_options simpopt(true, true, true, true, true);
|
||||
spot::ltl::ltl_simplifier simp(simpopt);
|
||||
|
||||
if (argc <= 1)
|
||||
syntax(argv[0]);
|
||||
|
||||
|
|
@ -848,7 +853,8 @@ main(int argc, char** argv)
|
|||
{
|
||||
if (opt_F)
|
||||
{
|
||||
spot::ltl::formula* f = generate_formula(rl, opt_f, opt_ec_seed,
|
||||
spot::ltl::formula* f = generate_formula(rl, simp,
|
||||
opt_f, opt_ec_seed,
|
||||
opt_l, opt_u);
|
||||
if (!f)
|
||||
exit(1);
|
||||
|
|
|
|||
179
src/tgbatest/reductgba.cc
Normal file
179
src/tgbatest/reductgba.cc
Normal file
|
|
@ -0,0 +1,179 @@
|
|||
// Copyright (C) 2008, 2009, 2011 Laboratoire de Recherche et Développement
|
||||
// de l'Epita (LRDE).
|
||||
// Copyright (C) 2003, 2004, 2006 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.
|
||||
|
||||
#include <cstdlib>
|
||||
|
||||
#include "tgbaalgos/ltl2tgba_fm.hh"
|
||||
#include "tgbaalgos/reductgba_sim.hh"
|
||||
#include "tgba/tgbareduc.hh"
|
||||
|
||||
#include "ltlast/allnodes.hh"
|
||||
#include "ltlparse/public.hh"
|
||||
#include "tgbaalgos/ltl2tgba_lacim.hh"
|
||||
#include "tgbaalgos/ltl2tgba_fm.hh"
|
||||
#include "tgba/bddprint.hh"
|
||||
#include "tgbaalgos/dotty.hh"
|
||||
#include "tgbaalgos/lbtt.hh"
|
||||
#include "tgba/tgbatba.hh"
|
||||
#include "tgbaalgos/magic.hh"
|
||||
#include "tgbaalgos/gtec/gtec.hh"
|
||||
#include "tgbaalgos/gtec/ce.hh"
|
||||
#include "tgbaparse/public.hh"
|
||||
#include "tgbaalgos/dupexp.hh"
|
||||
#include "tgbaalgos/neverclaim.hh"
|
||||
#include "tgbaalgos/sccfilter.hh"
|
||||
|
||||
#include "misc/escape.hh"
|
||||
|
||||
void
|
||||
syntax(char* prog)
|
||||
{
|
||||
#ifdef REDUCCMP
|
||||
std::cerr << prog << " option file" << std::endl;
|
||||
#else
|
||||
std::cerr << prog << " option formula" << std::endl;
|
||||
#endif
|
||||
exit(2);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char** argv)
|
||||
{
|
||||
if (argc < 3)
|
||||
syntax(argv[0]);
|
||||
|
||||
int o = spot::Reduce_None;
|
||||
switch (atoi(argv[1]))
|
||||
{
|
||||
case 0:
|
||||
o = spot::Reduce_Scc;
|
||||
break;
|
||||
case 1:
|
||||
o = spot::Reduce_quotient_Dir_Sim;
|
||||
break;
|
||||
case 2:
|
||||
o = spot::Reduce_transition_Dir_Sim;
|
||||
break;
|
||||
case 3:
|
||||
o = spot::Reduce_quotient_Del_Sim;
|
||||
break;
|
||||
case 4:
|
||||
o = spot::Reduce_transition_Del_Sim;
|
||||
break;
|
||||
case 5:
|
||||
o = spot::Reduce_quotient_Dir_Sim |
|
||||
spot::Reduce_transition_Dir_Sim |
|
||||
spot::Reduce_Scc;
|
||||
break;
|
||||
case 6:
|
||||
o = spot::Reduce_quotient_Del_Sim |
|
||||
spot::Reduce_transition_Del_Sim |
|
||||
spot::Reduce_Scc;
|
||||
break;
|
||||
case 7:
|
||||
// No Reduction
|
||||
break;
|
||||
default:
|
||||
return 2;
|
||||
}
|
||||
|
||||
int exit_code = 0;
|
||||
spot::direct_simulation_relation* rel_dir = 0;
|
||||
spot::delayed_simulation_relation* rel_del = 0;
|
||||
spot::tgba* automata = 0;
|
||||
spot::tgba_reduc* automatareduc = 0;
|
||||
|
||||
spot::ltl::environment& env(spot::ltl::default_environment::instance());
|
||||
spot::bdd_dict* dict = new spot::bdd_dict();
|
||||
|
||||
#ifdef REDUCCMP
|
||||
spot::tgba_parse_error_list pel;
|
||||
automata = spot::tgba_parse(argv[2], pel, dict, env, env, false);
|
||||
if (spot::format_tgba_parse_errors(std::cerr, argv[2], pel))
|
||||
return 2;
|
||||
#else
|
||||
spot::ltl::parse_error_list p1;
|
||||
spot::ltl::formula* f = spot::ltl::parse(argv[2], p1, env);
|
||||
if (spot::ltl::format_parse_errors(std::cerr, argv[2], p1))
|
||||
return 2;
|
||||
automata = spot::ltl_to_tgba_fm(f, dict,
|
||||
false, true,
|
||||
false, true);
|
||||
#endif
|
||||
|
||||
spot::dotty_reachable(std::cout, automata);
|
||||
automatareduc = new spot::tgba_reduc(automata);
|
||||
|
||||
if (o & spot::Reduce_quotient_Dir_Sim)
|
||||
{
|
||||
rel_dir = spot::get_direct_relation_simulation(automatareduc, std::cout);
|
||||
automatareduc->quotient_state(rel_dir);
|
||||
}
|
||||
else if (o & spot::Reduce_quotient_Del_Sim)
|
||||
{
|
||||
std::cout << "get delayed" << std::endl;
|
||||
rel_del = spot::get_delayed_relation_simulation(automatareduc, std::cout);
|
||||
std::cout << "quotient state" << std::endl;
|
||||
automatareduc->quotient_state(rel_del);
|
||||
std::cout << "end" << std::endl;
|
||||
}
|
||||
|
||||
if (rel_dir != 0)
|
||||
{
|
||||
automatareduc->display_rel_sim(rel_dir, std::cout);
|
||||
spot::free_relation_simulation(rel_dir);
|
||||
}
|
||||
|
||||
if (rel_del != 0)
|
||||
{
|
||||
automatareduc->display_rel_sim(rel_del, std::cout);
|
||||
spot::free_relation_simulation(rel_del);
|
||||
}
|
||||
|
||||
spot::tgba* res = automatareduc;
|
||||
|
||||
if (o & spot::Reduce_Scc)
|
||||
{
|
||||
res = spot::scc_filter(automatareduc);
|
||||
delete automatareduc;
|
||||
}
|
||||
|
||||
spot::dotty_reachable(std::cout, res);
|
||||
|
||||
delete res;
|
||||
delete automata;
|
||||
#ifndef REDUCCMP
|
||||
if (f != 0)
|
||||
f->destroy();
|
||||
#endif
|
||||
|
||||
assert(spot::ltl::atomic_prop::instance_count() == 0);
|
||||
assert(spot::ltl::unop::instance_count() == 0);
|
||||
assert(spot::ltl::binop::instance_count() == 0);
|
||||
assert(spot::ltl::multop::instance_count() == 0);
|
||||
|
||||
if (dict != 0)
|
||||
delete dict;
|
||||
|
||||
return exit_code;
|
||||
}
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (C) 2009, 2010, 2012 Laboratoire de Recherche et
|
||||
# Copyright (C) 2009, 2010, 2011, 2012 Laboratoire de Recherche et
|
||||
# Développement de l'Epita (LRDE).
|
||||
# Copyright (C) 2003, 2004, 2005, 2006, 2007 Laboratoire
|
||||
# d'Informatique de Paris 6 (LIP6), département Systèmes Répartis
|
||||
|
|
@ -139,7 +139,7 @@ Algorithm
|
|||
{
|
||||
Name = "Spot (Couvreur -- FM), reduction of formula in FM"
|
||||
Path = "${LBTT_TRANSLATE}"
|
||||
Parameters = "--spot '../ltl2tgba -fr4 -F -f -t'"
|
||||
Parameters = "--spot '../ltl2tgba -fr -r4 -F -f -t'"
|
||||
Enabled = no
|
||||
}
|
||||
|
||||
|
|
@ -147,7 +147,7 @@ Algorithm
|
|||
{
|
||||
Name = "Spot (Couvreur -- FM) reduction7 of formula in FM"
|
||||
Path = "${LBTT_TRANSLATE}"
|
||||
Parameters = "--spot '../ltl2tgba -fr7 -F -f -t'"
|
||||
Parameters = "--spot '../ltl2tgba -fr -r7 -F -f -t'"
|
||||
Enabled = no
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue