Use 'const formula*' instead of 'formula*' everywhere.

The distinction makes no sense since Spot 0.5, where we switched from
mutable furmulae to immutable formulae.  The difference between
const_visitor and visitor made no sense either.  They have been merged
into one: visitor.

* iface/dve2/dve2check.cc, iface/gspn/ltlgspn.cc,
src/eltlparse/eltlparse.yy, src/eltlparse/public.hh,
src/evtgbatest/ltl2evtgba.cc, src/kripkeparse/kripkeparse.yy,
src/ltlast/atomic_prop.cc, src/ltlast/atomic_prop.hh,
src/ltlast/automatop.cc, src/ltlast/automatop.hh, src/ltlast/binop.cc,
src/ltlast/binop.hh, src/ltlast/bunop.cc, src/ltlast/bunop.hh,
src/ltlast/constant.cc, src/ltlast/constant.hh, src/ltlast/formula.cc,
src/ltlast/formula.hh, src/ltlast/formula_tree.cc,
src/ltlast/formula_tree.hh, src/ltlast/multop.cc,
src/ltlast/multop.hh, src/ltlast/predecl.hh, src/ltlast/refformula.cc,
src/ltlast/refformula.hh, src/ltlast/unop.cc, src/ltlast/unop.hh,
src/ltlast/visitor.hh, src/ltlenv/declenv.cc, src/ltlenv/declenv.hh,
src/ltlenv/defaultenv.cc, src/ltlenv/defaultenv.hh,
src/ltlenv/environment.hh, src/ltlparse/ltlfile.cc,
src/ltlparse/ltlfile.hh, src/ltlparse/ltlparse.yy,
src/ltlparse/public.hh, src/ltltest/consterm.cc,
src/ltltest/equals.cc, src/ltltest/genltl.cc, src/ltltest/kind.cc,
src/ltltest/length.cc, src/ltltest/randltl.cc, src/ltltest/readltl.cc,
src/ltltest/reduc.cc, src/ltltest/syntimpl.cc,
src/ltltest/tostring.cc, src/ltlvisit/apcollect.cc,
src/ltlvisit/apcollect.hh, src/ltlvisit/clone.cc,
src/ltlvisit/clone.hh, src/ltlvisit/contain.cc,
src/ltlvisit/contain.hh, src/ltlvisit/dotty.cc,
src/ltlvisit/length.cc, src/ltlvisit/lunabbrev.cc,
src/ltlvisit/lunabbrev.hh, src/ltlvisit/mark.cc, src/ltlvisit/mark.hh,
src/ltlvisit/nenoform.cc, src/ltlvisit/nenoform.hh,
src/ltlvisit/postfix.cc, src/ltlvisit/postfix.hh,
src/ltlvisit/randomltl.cc, src/ltlvisit/randomltl.hh,
src/ltlvisit/reduce.cc, src/ltlvisit/reduce.hh,
src/ltlvisit/simpfg.cc, src/ltlvisit/simpfg.hh,
src/ltlvisit/simplify.cc, src/ltlvisit/simplify.hh,
src/ltlvisit/snf.cc, src/ltlvisit/snf.hh, src/ltlvisit/tostring.cc,
src/ltlvisit/tunabbrev.cc, src/ltlvisit/tunabbrev.hh,
src/ltlvisit/wmunabbrev.cc, src/ltlvisit/wmunabbrev.hh,
src/neverparse/neverclaimparse.yy, src/sabatest/sabacomplementtgba.cc,
src/tgba/bdddict.cc, src/tgba/formula2bdd.cc, src/tgba/taatgba.cc,
src/tgba/taatgba.hh, src/tgbaalgos/eltl2tgba_lacim.cc,
src/tgbaalgos/ltl2taa.cc, src/tgbaalgos/ltl2tgba_fm.cc,
src/tgbaalgos/ltl2tgba_lacim.cc, src/tgbaalgos/minimize.cc,
src/tgbaalgos/randomgraph.cc, src/tgbaparse/tgbaparse.yy,
src/tgbatest/complementation.cc, src/tgbatest/ltl2tgba.cc,
src/tgbatest/ltlprod.cc, src/tgbatest/mixprod.cc,
src/tgbatest/randtgba.cc: Massive adjustment!
* src/tgbatest/reductgba.cc: Delete.
This commit is contained in:
Alexandre Duret-Lutz 2012-05-01 23:38:55 +02:00
parent 0f0ada825a
commit bf62d439c9
98 changed files with 1318 additions and 1535 deletions

View file

@ -190,7 +190,7 @@ namespace spot
return os;
}
formula*
const formula*
var_to_formula(int var) const
{
vf_map::const_iterator isi = next_formula_map.find(var);
@ -216,7 +216,7 @@ namespace spot
return res;
}
formula*
const formula*
conj_bdd_to_formula(bdd b, multop::type op = multop::And) const
{
if (b == bddfalse)
@ -225,7 +225,7 @@ namespace spot
while (b != bddtrue)
{
int var = bdd_var(b);
formula* res = var_to_formula(var);
const formula* res = var_to_formula(var);
bdd high = bdd_high(b);
if (high == bddfalse)
{
@ -243,13 +243,13 @@ namespace spot
return multop::instance(op, v);
}
formula*
const formula*
conj_bdd_to_sere(bdd b) const
{
return conj_bdd_to_formula(b, multop::AndRat);
}
formula*
const formula*
bdd_to_formula(bdd f)
{
if (f == bddfalse)
@ -265,7 +265,7 @@ namespace spot
return multop::instance(multop::Or, v);
}
formula*
const formula*
bdd_to_sere(bdd f)
{
if (f == bddfalse)
@ -297,7 +297,7 @@ namespace spot
}
else
{
formula* ac = var_to_formula(var);
const formula* ac = var_to_formula(var);
if (!a->has_acceptance_condition(ac))
a->declare_acceptance_condition(ac->clone());
@ -369,14 +369,14 @@ namespace spot
using postfix_visitor::doit;
virtual void
doit(unop* node)
doit(const unop* node)
{
if (node->op() == unop::F)
res_ &= bdd_ithvar(dict_.register_a_variable(node->child()));
}
virtual void
doit(binop* node)
doit(const binop* node)
{
if (node->op() == binop::U)
res_ &= bdd_ithvar(dict_.register_a_variable(node->second()));
@ -388,15 +388,15 @@ namespace spot
};
bdd translate_ratexp(const formula* f, translate_dict& dict,
formula* to_concat = 0);
const formula* to_concat = 0);
// Rewrite rule for rational operators.
class ratexp_trad_visitor: public const_visitor
class ratexp_trad_visitor: public visitor
{
public:
// negated should only be set for constants or atomic properties
ratexp_trad_visitor(translate_dict& dict,
formula* to_concat = 0)
const formula* to_concat = 0)
: dict_(dict), to_concat_(to_concat)
{
}
@ -451,15 +451,15 @@ namespace spot
{
bdd label = bdd_exist(cube, dict_.next_set);
bdd dest_bdd = bdd_existcomp(cube, dict_.next_set);
formula* dest = dict_.conj_bdd_to_sere(dest_bdd);
const formula* dest = dict_.conj_bdd_to_sere(dest_bdd);
if (dest == constant::empty_word_instance())
{
out |= label & next_to_concat();
}
else
{
formula* dest2 = multop::instance(multop::Concat, dest,
to_concat_->clone());
const formula* dest2 = multop::instance(multop::Concat, dest,
to_concat_->clone());
if (dest2 != constant::false_instance())
{
int x = dict_.register_next_variable(dest2);
@ -528,7 +528,7 @@ namespace spot
void
visit(const bunop* bo)
{
formula* f;
const formula* f;
unsigned min = bo->min();
unsigned max = bo->max();
@ -578,8 +578,7 @@ namespace spot
{
bdd label = bdd_exist(cube, dict_.next_set);
bdd dest_bdd = bdd_existcomp(cube, dict_.next_set);
formula* dest = dict_.conj_bdd_to_sere(dest_bdd);
formula* dest2;
const formula* dest = dict_.conj_bdd_to_sere(dest_bdd);
int x;
if (dest == constant::empty_word_instance())
{
@ -588,8 +587,9 @@ namespace spot
}
else
{
dest2 = multop::instance(multop::Concat, dest,
f->clone());
const formula*
dest2 = multop::instance(multop::Concat, dest,
f->clone());
if (dest2 != constant::false_instance())
{
x = dict_.register_next_variable(dest2);
@ -644,7 +644,7 @@ namespace spot
{
delete non_final;
// (a* & b*);c = (a*|b*);c
formula* f = multop::instance(multop::OrRat, final);
const formula* f = multop::instance(multop::OrRat, final);
res_ = recurse_and_concat(f);
f->destroy();
break;
@ -656,17 +656,22 @@ namespace spot
// (F_1 & ... & F_n & N_1 & ... & N_m)
// = (F_1 | ... | F_n);[*] && (N_1 & ... & N_m)
// | (F_1 | ... | F_n) && (N_1 & ... & N_m);[*]
formula* f = multop::instance(multop::OrRat, final);
formula* n = multop::instance(multop::AndNLM, non_final);
formula* t = bunop::instance(bunop::Star,
constant::true_instance());
formula* ft = multop::instance(multop::Concat,
f->clone(), t->clone());
formula* nt = multop::instance(multop::Concat,
n->clone(), t);
formula* ftn = multop::instance(multop::AndRat, ft, n);
formula* fnt = multop::instance(multop::AndRat, f, nt);
formula* all = multop::instance(multop::OrRat, ftn, fnt);
const formula* f =
multop::instance(multop::OrRat, final);
const formula* n =
multop::instance(multop::AndNLM, non_final);
const formula* t =
bunop::instance(bunop::Star, constant::true_instance());
const formula* ft =
multop::instance(multop::Concat, f->clone(), t->clone());
const formula* nt =
multop::instance(multop::Concat, n->clone(), t);
const formula* ftn =
multop::instance(multop::AndRat, ft, n);
const formula* fnt =
multop::instance(multop::AndRat, f, nt);
const formula* all =
multop::instance(multop::OrRat, ftn, fnt);
res_ = recurse_and_concat(all);
all->destroy();
break;
@ -680,7 +685,7 @@ namespace spot
// N_1 && (N_2;[*]) && ... && (N_n;[*])
// | (N_1;[*]) && N_2 && ... && (N_n;[*])
// | (N_1;[*]) && (N_2;[*]) && ... && N_n
formula* star =
const formula* star =
bunop::instance(bunop::Star, constant::true_instance());
multop::vec* disj = new multop::vec;
for (unsigned n = 0; n < s; ++n)
@ -688,7 +693,7 @@ namespace spot
multop::vec* conj = new multop::vec;
for (unsigned m = 0; m < s; ++m)
{
formula* f = node->nth(m)->clone();
const formula* f = node->nth(m)->clone();
if (n != m)
f = multop::instance(multop::Concat,
f, star->clone());
@ -697,7 +702,7 @@ namespace spot
disj->push_back(multop::instance(multop::AndRat, conj));
}
star->destroy();
formula* all = multop::instance(multop::OrRat, disj);
const formula* all = multop::instance(multop::OrRat, disj);
res_ = recurse_and_concat(all);
all->destroy();
break;
@ -757,7 +762,7 @@ namespace spot
bdd res = recurse(node->nth(0));
// the tail
formula* tail = node->all_but(0);
const formula* tail = node->all_but(0);
bdd tail_bdd;
bool tail_computed = false;
@ -770,7 +775,7 @@ namespace spot
{
bdd label = bdd_exist(cube, dict_.next_set);
bdd dest_bdd = bdd_existcomp(cube, dict_.next_set);
formula* dest = dict_.conj_bdd_to_sere(dest_bdd);
const formula* dest = dict_.conj_bdd_to_sere(dest_bdd);
if (dest->accepts_eword())
{
@ -790,11 +795,11 @@ namespace spot
// If the destination is not a constant, it
// means it can have successors. Fusion the
// tail and append anything to concatenate.
formula* dest2 = multop::instance(multop::Fusion, dest,
tail->clone());
const formula* dest2 =
multop::instance(multop::Fusion, dest, tail->clone());
if (to_concat_)
dest2 = multop::instance(multop::Concat, dest2,
to_concat_->clone());
to_concat_->clone());
if (dest2 != constant::false_instance())
{
int x = dict_.register_next_variable(dest2);
@ -814,7 +819,7 @@ namespace spot
}
bdd
recurse(const formula* f, formula* to_concat = 0)
recurse(const formula* f, const formula* to_concat = 0)
{
return translate_ratexp(f, dict_, to_concat);
}
@ -829,12 +834,12 @@ namespace spot
private:
translate_dict& dict_;
bdd res_;
formula* to_concat_;
const formula* to_concat_;
};
bdd
translate_ratexp(const formula* f, translate_dict& dict,
formula* to_concat)
const formula* to_concat)
{
// static unsigned indent = 0;
// for (unsigned i = indent; i > 0; --i)
@ -1049,7 +1054,7 @@ namespace spot
// The rewrite rules used here are adapted from Jean-Michel
// Couvreur's FM paper, augmented to support rational operators.
class ltl_trad_visitor: public const_visitor
class ltl_trad_visitor: public visitor
{
public:
ltl_trad_visitor(translate_dict& dict, bool mark_all = false,
@ -1200,8 +1205,7 @@ namespace spot
}
else
{
formula* dest2 =
unop::instance(op, const_cast<formula*>(dest));
const formula* dest2 = unop::instance(op, dest);
if (dest2 == constant::false_instance())
continue;
int x = dict_.register_next_variable(dest2);
@ -1241,7 +1245,7 @@ namespace spot
bdd label = bdd_satoneset(all_props, var_set, bddtrue);
all_props -= label;
formula* dest =
const formula* dest =
dict_.bdd_to_sere(bdd_exist(f1 & label, dict_.var_set));
// !{ Exp } is false if Exp accepts the empty word.
@ -1369,7 +1373,7 @@ namespace spot
bdd label = bdd_satoneset(all_props, var_set, bddtrue);
all_props -= label;
formula* dest =
const formula* dest =
dict_.bdd_to_sere(bdd_exist(f1 & label,
dict_.var_set));
@ -1394,7 +1398,7 @@ namespace spot
{
bdd label = bdd_exist(cube, dict_.next_set);
bdd dest_bdd = bdd_existcomp(cube, dict_.next_set);
formula* dest = dict_.conj_bdd_to_sere(dest_bdd);
const formula* dest = dict_.conj_bdd_to_sere(dest_bdd);
if (dest == constant::empty_word_instance())
{
@ -1402,8 +1406,8 @@ namespace spot
}
else
{
formula* dest2 = binop::instance(op, dest,
node->second()->clone());
const formula* dest2 =
binop::instance(op, dest, node->second()->clone());
if (dest2 != constant::false_instance())
{
int x = dict_.register_next_variable(dest2);
@ -1443,8 +1447,8 @@ namespace spot
{
bdd label = bdd_exist(cube, dict_.next_set);
bdd dest_bdd = bdd_existcomp(cube, dict_.next_set);
formula* dest = dict_.conj_bdd_to_sere(dest_bdd);
formula* dest2 =
const formula* dest = dict_.conj_bdd_to_sere(dest_bdd);
const formula* dest2 =
binop::instance(op, dest, node->second()->clone());
bdd udest =
@ -1563,7 +1567,7 @@ namespace spot
// Check whether a formula has a R, W, or G operator at its
// top-level (preceding logical operators do not count).
class ltl_possible_fair_loop_visitor: public const_visitor
class ltl_possible_fair_loop_visitor: public visitor
{
public:
ltl_possible_fair_loop_visitor()
@ -1737,13 +1741,13 @@ namespace spot
{
bdd label = bdd_exist(cube, d_.next_set);
bdd dest_bdd = bdd_existcomp(cube, d_.next_set);
formula* dest =
const formula* dest =
d_.conj_bdd_to_formula(dest_bdd);
// Handle a Miyano-Hayashi style unrolling for
// rational operators. Marked nodes correspond to
// subformulae in the Miyano-Hayashi set.
formula* tmp = d_.mt.simplify_mark(dest);
const formula* tmp = d_.mt.simplify_mark(dest);
dest->destroy();
dest = tmp;
@ -1759,7 +1763,7 @@ namespace spot
// We have no marked operators, but still
// have other rational operator to check.
// Start a new marked cycle.
formula* dest2 = d_.mt.mark_concat_ops(dest);
const formula* dest2 = d_.mt.mark_concat_ops(dest);
dest->destroy();
dest = dest2;
}
@ -1864,7 +1868,7 @@ namespace spot
bool fair_loop_approx, const atomic_prop_set* unobs,
ltl_simplifier* simplifier)
{
formula* f2;
const formula* f2;
ltl_simplifier* s = simplifier;
// Simplify the formula, if requested.
@ -1942,7 +1946,7 @@ namespace spot
// This is in case the initial state is equivalent to true...
if (symb_merge)
f2 = const_cast<formula*>(fc.canonize(f2));
f2 = fc.canonize(f2);
formulae_to_translate.insert(f2);
a->set_init_state(f2);
@ -2043,7 +2047,7 @@ namespace spot
// Simplify the formula, if requested.
if (simplifier)
{
formula* tmp = simplifier->simplify(dest);
const formula* tmp = simplifier->simplify(dest);
dest->destroy();
dest = tmp;
// Ignore the arc if the destination reduces to false.
@ -2072,9 +2076,7 @@ namespace spot
succs[label] = dest;
else
si->second =
multop::instance(multop::Or,
const_cast<formula*>(si->second),
const_cast<formula*>(dest));
multop::instance(multop::Or, si->second, dest);
}
}
if (branching_postponement)