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:
parent
0f0ada825a
commit
bf62d439c9
98 changed files with 1318 additions and 1535 deletions
|
|
@ -1,5 +1,8 @@
|
|||
// -*- coding: utf-8 -*-
|
||||
// Copyright (C) 2012 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), Université Pierre
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
// et Marie Curie.
|
||||
//
|
||||
// This file is part of Spot, a model checking library.
|
||||
|
|
@ -40,7 +43,7 @@ namespace spot
|
|||
{
|
||||
}
|
||||
|
||||
virtual void doit(spot::ltl::atomic_prop* ap)
|
||||
virtual void doit(const spot::ltl::atomic_prop* ap)
|
||||
{
|
||||
sap->insert(ap);
|
||||
}
|
||||
|
|
@ -56,7 +59,7 @@ namespace spot
|
|||
if (!s)
|
||||
s = new atomic_prop_set;
|
||||
atomic_prop_collector v(s);
|
||||
const_cast<formula*>(f)->accept(v);
|
||||
f->accept(v);
|
||||
return s;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
// -*- coding: utf-8 -*-
|
||||
// Copyright (C) 2012 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), Université Pierre
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
// et Marie Curie.
|
||||
//
|
||||
// This file is part of Spot, a model checking library.
|
||||
|
|
@ -33,7 +36,8 @@ namespace spot
|
|||
/// @{
|
||||
|
||||
/// Set of atomic propositions.
|
||||
typedef std::set<atomic_prop*, formula_ptr_less_than> atomic_prop_set;
|
||||
typedef std::set<const atomic_prop*,
|
||||
formula_ptr_less_than> atomic_prop_set;
|
||||
|
||||
/// \brief Return the set of atomic propositions occurring in a formula.
|
||||
///
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (C) 2009, 2010 Laboratoire de Recherche et Développement
|
||||
// Copyright (C) 2009, 2010, 2012 Laboratoire de Recherche et Développement
|
||||
// de l'Epita (LRDE).
|
||||
// Copyright (C) 2003 Laboratoire d'Informatique de Paris 6 (LIP6),
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
|
|
@ -36,46 +36,46 @@ namespace spot
|
|||
{
|
||||
}
|
||||
|
||||
formula*
|
||||
const formula*
|
||||
clone_visitor::result() const
|
||||
{
|
||||
return result_;
|
||||
}
|
||||
|
||||
void
|
||||
clone_visitor::visit(atomic_prop* ap)
|
||||
clone_visitor::visit(const atomic_prop* ap)
|
||||
{
|
||||
result_ = ap->clone();
|
||||
}
|
||||
|
||||
void
|
||||
clone_visitor::visit(constant* c)
|
||||
clone_visitor::visit(const constant* c)
|
||||
{
|
||||
result_ = c->clone();
|
||||
}
|
||||
|
||||
void
|
||||
clone_visitor::visit(bunop* bo)
|
||||
clone_visitor::visit(const bunop* bo)
|
||||
{
|
||||
result_ = bunop::instance(bo->op(), recurse(bo->child()),
|
||||
bo->min(), bo->max());
|
||||
}
|
||||
|
||||
void
|
||||
clone_visitor::visit(unop* uo)
|
||||
clone_visitor::visit(const unop* uo)
|
||||
{
|
||||
result_ = unop::instance(uo->op(), recurse(uo->child()));
|
||||
}
|
||||
|
||||
void
|
||||
clone_visitor::visit(binop* bo)
|
||||
clone_visitor::visit(const binop* bo)
|
||||
{
|
||||
result_ = binop::instance(bo->op(),
|
||||
recurse(bo->first()), recurse(bo->second()));
|
||||
}
|
||||
|
||||
void
|
||||
clone_visitor::visit(automatop* ao)
|
||||
clone_visitor::visit(const automatop* ao)
|
||||
{
|
||||
automatop::vec* res = new automatop::vec;
|
||||
for (unsigned i = 0; i < ao->size(); ++i)
|
||||
|
|
@ -84,7 +84,7 @@ namespace spot
|
|||
}
|
||||
|
||||
void
|
||||
clone_visitor::visit(multop* mo)
|
||||
clone_visitor::visit(const multop* mo)
|
||||
{
|
||||
multop::vec* res = new multop::vec;
|
||||
unsigned mos = mo->size();
|
||||
|
|
@ -93,17 +93,16 @@ namespace spot
|
|||
result_ = multop::instance(mo->op(), res);
|
||||
}
|
||||
|
||||
formula*
|
||||
clone_visitor::recurse(formula* f)
|
||||
const formula*
|
||||
clone_visitor::recurse(const formula* f)
|
||||
{
|
||||
return f->clone();
|
||||
}
|
||||
|
||||
formula*
|
||||
const formula*
|
||||
clone(const formula* f)
|
||||
{
|
||||
formula* res = const_cast<formula*>(f)->clone();
|
||||
return res;
|
||||
return f->clone();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
// Copyright (C) 2009, 2010 Laboratoire de Recherche et Développement
|
||||
// de l'Epita (LRDE).
|
||||
// -*- coding: utf-8 -*-
|
||||
// Copyright (C) 2009, 2010, 2012 Laboratoire de Recherche et
|
||||
// Développement de l'Epita (LRDE).
|
||||
// Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
// et Marie Curie.
|
||||
//
|
||||
// This file is part of Spot, a model checking library.
|
||||
|
|
@ -44,32 +45,32 @@ namespace spot
|
|||
clone_visitor();
|
||||
virtual ~clone_visitor();
|
||||
|
||||
formula* result() const;
|
||||
const formula* result() const;
|
||||
|
||||
void visit(atomic_prop* ap);
|
||||
void visit(unop* uo);
|
||||
void visit(binop* bo);
|
||||
void visit(automatop* mo);
|
||||
void visit(multop* mo);
|
||||
void visit(constant* c);
|
||||
void visit(bunop* c);
|
||||
void visit(const atomic_prop* ap);
|
||||
void visit(const unop* uo);
|
||||
void visit(const binop* bo);
|
||||
void visit(const automatop* mo);
|
||||
void visit(const multop* mo);
|
||||
void visit(const constant* c);
|
||||
void visit(const bunop* c);
|
||||
|
||||
virtual formula* recurse(formula* f);
|
||||
virtual const formula* recurse(const formula* f);
|
||||
|
||||
protected:
|
||||
formula* result_;
|
||||
const formula* result_;
|
||||
};
|
||||
|
||||
#if __GNUC__
|
||||
/// \brief Clone a formula.
|
||||
/// \ingroup ltl_essential
|
||||
/// \deprecated Use f->clone() instead.
|
||||
formula* clone(const formula* f) __attribute__ ((deprecated));
|
||||
const formula* clone(const formula* f) __attribute__ ((deprecated));
|
||||
#else
|
||||
/// \brief Clone a formula.
|
||||
/// \ingroup ltl_essential
|
||||
/// \deprecated Use f->clone() instead.
|
||||
formula* clone(const formula* f);
|
||||
const formula* clone(const formula* f);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
// Copyright (C) 2009, 2010, 2011 Laboratoire de Recherche et Développement
|
||||
// de l'Epita (LRDE).
|
||||
// -*- coding: utf-8 -*-
|
||||
// Copyright (C) 2009, 2010, 2011, 2012 Laboratoire de Recherche et
|
||||
// Développement de l'Epita (LRDE).
|
||||
// Copyright (C) 2006, 2007 Laboratoire d'Informatique de Paris 6 (LIP6),
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
// et Marie Curie.
|
||||
//
|
||||
// This file is part of Spot, a model checking library.
|
||||
|
|
@ -87,7 +88,8 @@ namespace spot
|
|||
|
||||
// Check whether L(l) is a subset of L(g).
|
||||
bool
|
||||
language_containment_checker::contained(const formula* l, const formula* g)
|
||||
language_containment_checker::contained(const formula* l,
|
||||
const formula* g)
|
||||
{
|
||||
if (l == g)
|
||||
return true;
|
||||
|
|
@ -153,7 +155,7 @@ namespace spot
|
|||
}
|
||||
|
||||
|
||||
formula*
|
||||
const formula*
|
||||
reduce_tau03(const formula* f, bool stronger)
|
||||
{
|
||||
if (!f->is_psl_formula())
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (C) 2011 Laboratoire de Recherche et Developpement de
|
||||
// Copyright (C) 2011, 2012 Laboratoire de Recherche et Developpement de
|
||||
// l'Epita (LRDE).
|
||||
// Copyright (C) 2006 Laboratoire d'Informatique de Paris 6 (LIP6),
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
|
|
@ -88,10 +88,10 @@ namespace spot
|
|||
/// title = {On Translating Linear Temporal Logic into Alternating and
|
||||
/// Nondeterministic Automata},
|
||||
/// institution = {Helsinki University of Technology, Laboratory for
|
||||
/// Theoretical Computer Science},
|
||||
/// Theoretical Computer Science},
|
||||
/// address = {Espoo, Finland},
|
||||
/// month = dec,
|
||||
/// number = {A83},
|
||||
/// number = {A83},
|
||||
/// pages = {132},
|
||||
/// type = {Research Report},
|
||||
/// year = {2003},
|
||||
|
|
@ -106,10 +106,11 @@ namespace spot
|
|||
///
|
||||
/// \deprecated Use spot::ltl::ltl_simplifier instead.
|
||||
#if __GNUC__
|
||||
formula* reduce_tau03(const formula* f,
|
||||
bool stronger = true) __attribute__ ((deprecated));
|
||||
const formula* reduce_tau03(const formula* f,
|
||||
bool stronger = true)
|
||||
__attribute__ ((deprecated));
|
||||
#else
|
||||
formula* reduce_tau03(const formula* f, bool stronger = true);
|
||||
const formula* reduce_tau03(const formula* f, bool stronger = true);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ namespace spot
|
|||
{
|
||||
namespace
|
||||
{
|
||||
class dotty_visitor: public const_visitor
|
||||
class dotty_visitor: public visitor
|
||||
{
|
||||
public:
|
||||
typedef Sgi::hash_map<const formula*, int, ptr_hash<formula> > map;
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ namespace spot
|
|||
}
|
||||
|
||||
virtual void
|
||||
visit(multop* mo)
|
||||
visit(const multop* mo)
|
||||
{
|
||||
unsigned s = mo->size();
|
||||
for (unsigned i = 0; i < s; ++i)
|
||||
|
|
@ -58,7 +58,7 @@ namespace spot
|
|||
}
|
||||
|
||||
virtual void
|
||||
doit_default(formula*)
|
||||
doit_default(const formula*)
|
||||
{
|
||||
++result_;
|
||||
}
|
||||
|
|
@ -71,7 +71,7 @@ namespace spot
|
|||
{
|
||||
|
||||
virtual void
|
||||
visit(unop* uo)
|
||||
visit(const unop* uo)
|
||||
{
|
||||
++result_;
|
||||
// Boolean formula have length one.
|
||||
|
|
@ -80,7 +80,7 @@ namespace spot
|
|||
}
|
||||
|
||||
virtual void
|
||||
visit(multop* mo)
|
||||
visit(const multop* mo)
|
||||
{
|
||||
// Boolean formula have length one.
|
||||
if (mo->is_boolean())
|
||||
|
|
@ -104,7 +104,7 @@ namespace spot
|
|||
length(const formula* f)
|
||||
{
|
||||
length_visitor v;
|
||||
const_cast<formula*>(f)->accept(v);
|
||||
f->accept(v);
|
||||
return v.result();
|
||||
}
|
||||
|
||||
|
|
@ -112,7 +112,7 @@ namespace spot
|
|||
length_boolone(const formula* f)
|
||||
{
|
||||
length_boolone_visitor v;
|
||||
const_cast<formula*>(f)->accept(v);
|
||||
f->accept(v);
|
||||
return v.result();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
// Copyright (C) 2009, 2010 Laboratoire de Recherche et Développement
|
||||
// de l'Epita (LRDE).
|
||||
// -*- coding: utf-8 -*-
|
||||
// Copyright (C) 2009, 2010, 2012 Laboratoire de Recherche et
|
||||
// Développement de l'Epita (LRDE).
|
||||
// Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
|
||||
// d�partement Syst�mes R�partis Coop�ratifs (SRC), Universit� Pierre
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
// et Marie Curie.
|
||||
//
|
||||
// This file is part of Spot, a model checking library.
|
||||
|
|
@ -39,10 +40,10 @@ namespace spot
|
|||
}
|
||||
|
||||
void
|
||||
unabbreviate_logic_visitor::visit(binop* bo)
|
||||
unabbreviate_logic_visitor::visit(const binop* bo)
|
||||
{
|
||||
formula* f1 = recurse(bo->first());
|
||||
formula* f2 = recurse(bo->second());
|
||||
const formula* f1 = recurse(bo->first());
|
||||
const formula* f2 = recurse(bo->second());
|
||||
|
||||
binop::type op = bo->op();
|
||||
switch (op)
|
||||
|
|
@ -50,11 +51,12 @@ namespace spot
|
|||
/* f1 ^ f2 == (f1 & !f2) | (f2 & !f1) */
|
||||
case binop::Xor:
|
||||
{
|
||||
formula* a = multop::instance(multop::And, f1->clone(),
|
||||
unop::instance(unop::Not,
|
||||
f2->clone()));
|
||||
formula* b = multop::instance(multop::And, f2,
|
||||
unop::instance(unop::Not, f1));
|
||||
const formula* a =
|
||||
multop::instance(multop::And, f1->clone(),
|
||||
unop::instance(unop::Not, f2->clone()));
|
||||
const formula* b =
|
||||
multop::instance(multop::And, f2,
|
||||
unop::instance(unop::Not, f1));
|
||||
result_ = multop::instance(multop::Or, a, b);
|
||||
return;
|
||||
}
|
||||
|
|
@ -66,8 +68,8 @@ namespace spot
|
|||
/* f1 <=> f2 == (f1 & f2) | (!f1 & !f2) */
|
||||
case binop::Equiv:
|
||||
{
|
||||
formula* f1c = f1->clone();
|
||||
formula* f2c = f2->clone();
|
||||
const formula* f1c = f1->clone();
|
||||
const formula* f2c = f2->clone();
|
||||
|
||||
result_ =
|
||||
multop::instance(multop::Or,
|
||||
|
|
@ -97,19 +99,19 @@ namespace spot
|
|||
assert(0);
|
||||
}
|
||||
|
||||
formula*
|
||||
unabbreviate_logic_visitor::recurse(formula* f)
|
||||
const formula*
|
||||
unabbreviate_logic_visitor::recurse(const formula* f)
|
||||
{
|
||||
return unabbreviate_logic(f);
|
||||
}
|
||||
|
||||
formula*
|
||||
const formula*
|
||||
unabbreviate_logic(const formula* f)
|
||||
{
|
||||
if (f->is_sugar_free_boolean())
|
||||
return f->clone();
|
||||
unabbreviate_logic_visitor v;
|
||||
const_cast<formula*>(f)->accept(v);
|
||||
f->accept(v);
|
||||
return v.result();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
// -*- coding: utf-8 -*-
|
||||
// Copyright (C) 2012 Laboratoire de Recherche et Développement
|
||||
// de l'Epita (LRDE).
|
||||
// Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
// et Marie Curie.
|
||||
//
|
||||
// This file is part of Spot, a model checking library.
|
||||
|
|
@ -48,9 +51,9 @@ namespace spot
|
|||
virtual ~unabbreviate_logic_visitor();
|
||||
|
||||
using super::visit;
|
||||
void visit(binop* bo);
|
||||
void visit(const binop* bo);
|
||||
|
||||
virtual formula* recurse(formula* f);
|
||||
virtual const formula* recurse(const formula* f);
|
||||
};
|
||||
|
||||
/// \brief Clone and rewrite a formula to remove most of the abbreviated
|
||||
|
|
@ -60,7 +63,7 @@ namespace spot
|
|||
/// This will rewrite binary operators such as binop::Implies,
|
||||
/// binop::Equals, and binop::Xor, using only unop::Not, multop::Or,
|
||||
/// and multop::And.
|
||||
formula* unabbreviate_logic(const formula* f);
|
||||
const formula* unabbreviate_logic(const formula* f);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ namespace spot
|
|||
{
|
||||
class simplify_mark_visitor : public visitor
|
||||
{
|
||||
formula* result_;
|
||||
const formula* result_;
|
||||
mark_tools* tools_;
|
||||
|
||||
public:
|
||||
|
|
@ -46,44 +46,44 @@ namespace spot
|
|||
{
|
||||
}
|
||||
|
||||
formula*
|
||||
const formula*
|
||||
result()
|
||||
{
|
||||
return result_;
|
||||
}
|
||||
|
||||
void
|
||||
visit(atomic_prop* ao)
|
||||
visit(const atomic_prop* ao)
|
||||
{
|
||||
result_ = ao->clone();
|
||||
}
|
||||
|
||||
void
|
||||
visit(constant* c)
|
||||
visit(const constant* c)
|
||||
{
|
||||
result_ = c->clone();
|
||||
}
|
||||
|
||||
void
|
||||
visit(bunop* bo)
|
||||
visit(const bunop* bo)
|
||||
{
|
||||
result_ = bo->clone();
|
||||
}
|
||||
|
||||
void
|
||||
visit(unop* uo)
|
||||
visit(const unop* uo)
|
||||
{
|
||||
result_ = uo->clone();
|
||||
}
|
||||
|
||||
void
|
||||
visit(automatop* ao)
|
||||
visit(const automatop* ao)
|
||||
{
|
||||
result_ = ao->clone();
|
||||
}
|
||||
|
||||
void
|
||||
visit(multop* mo)
|
||||
visit(const multop* mo)
|
||||
{
|
||||
unsigned mos = mo->size();
|
||||
multop::vec* res = new multop::vec;
|
||||
|
|
@ -101,12 +101,13 @@ namespace spot
|
|||
break;
|
||||
case multop::And:
|
||||
{
|
||||
typedef std::set<std::pair<formula*, formula*> > pset;
|
||||
typedef std::set<std::pair<const formula*,
|
||||
const formula*> > pset;
|
||||
pset Epairs, EMpairs;
|
||||
|
||||
for (unsigned i = 0; i < mos; ++i)
|
||||
{
|
||||
formula* f = mo->nth(i);
|
||||
const formula* f = mo->nth(i);
|
||||
|
||||
if (f->kind() != formula::BinOp)
|
||||
{
|
||||
|
|
@ -114,7 +115,7 @@ namespace spot
|
|||
}
|
||||
else
|
||||
{
|
||||
binop* bo = static_cast<binop*>(f);
|
||||
const binop* bo = static_cast<const binop*>(f);
|
||||
switch (bo->op())
|
||||
{
|
||||
case binop::Xor:
|
||||
|
|
@ -157,13 +158,13 @@ namespace spot
|
|||
}
|
||||
|
||||
void
|
||||
visit(binop* bo)
|
||||
visit(const binop* bo)
|
||||
{
|
||||
result_ = bo->clone();
|
||||
}
|
||||
|
||||
formula*
|
||||
recurse(formula* f)
|
||||
const formula*
|
||||
recurse(const formula* f)
|
||||
{
|
||||
return tools_->simplify_mark(f);
|
||||
}
|
||||
|
|
@ -172,7 +173,7 @@ namespace spot
|
|||
|
||||
class mark_visitor : public visitor
|
||||
{
|
||||
formula* result_;
|
||||
const formula* result_;
|
||||
mark_tools* tools_;
|
||||
|
||||
public:
|
||||
|
|
@ -184,44 +185,44 @@ namespace spot
|
|||
{
|
||||
}
|
||||
|
||||
formula*
|
||||
const formula*
|
||||
result()
|
||||
{
|
||||
return result_;
|
||||
}
|
||||
|
||||
void
|
||||
visit(atomic_prop* ap)
|
||||
visit(const atomic_prop* ap)
|
||||
{
|
||||
result_ = ap->clone();
|
||||
}
|
||||
|
||||
void
|
||||
visit(constant* c)
|
||||
visit(const constant* c)
|
||||
{
|
||||
result_ = c->clone();
|
||||
}
|
||||
|
||||
void
|
||||
visit(bunop* bo)
|
||||
visit(const bunop* bo)
|
||||
{
|
||||
result_ = bo->clone();
|
||||
}
|
||||
|
||||
void
|
||||
visit(unop* uo)
|
||||
visit(const unop* uo)
|
||||
{
|
||||
result_ = uo->clone();
|
||||
}
|
||||
|
||||
void
|
||||
visit(automatop* ao)
|
||||
visit(const automatop* ao)
|
||||
{
|
||||
result_ = ao->clone();
|
||||
}
|
||||
|
||||
void
|
||||
visit(multop* mo)
|
||||
visit(const multop* mo)
|
||||
{
|
||||
multop::vec* res = new multop::vec;
|
||||
unsigned mos = mo->size();
|
||||
|
|
@ -231,7 +232,7 @@ namespace spot
|
|||
}
|
||||
|
||||
void
|
||||
visit(binop* bo)
|
||||
visit(const binop* bo)
|
||||
{
|
||||
switch (bo->op())
|
||||
{
|
||||
|
|
@ -249,8 +250,8 @@ namespace spot
|
|||
case binop::EConcatMarked:
|
||||
case binop::EConcat:
|
||||
{
|
||||
formula* f1 = bo->first()->clone();
|
||||
formula* f2 = recurse(bo->second());
|
||||
const formula* f1 = bo->first()->clone();
|
||||
const formula* f2 = recurse(bo->second());
|
||||
result_ = binop::instance(binop::EConcatMarked, f1, f2);
|
||||
return;
|
||||
}
|
||||
|
|
@ -259,8 +260,8 @@ namespace spot
|
|||
assert(0);
|
||||
}
|
||||
|
||||
formula*
|
||||
recurse(formula* f)
|
||||
const formula*
|
||||
recurse(const formula* f)
|
||||
{
|
||||
return tools_->mark_concat_ops(f);
|
||||
}
|
||||
|
|
@ -301,21 +302,21 @@ namespace spot
|
|||
}
|
||||
}
|
||||
|
||||
formula*
|
||||
const formula*
|
||||
mark_tools::mark_concat_ops(const formula* f)
|
||||
{
|
||||
f2f_map::iterator i = markops_.find(f);
|
||||
if (i != markops_.end())
|
||||
return i->second->clone();
|
||||
|
||||
const_cast<formula*>(f)->accept(*markvisitor_);
|
||||
f->accept(*markvisitor_);
|
||||
|
||||
formula* r = down_cast<mark_visitor*>(markvisitor_)->result();
|
||||
const formula* r = down_cast<mark_visitor*>(markvisitor_)->result();
|
||||
markops_[f->clone()] = r->clone();
|
||||
return r;
|
||||
}
|
||||
|
||||
formula*
|
||||
const formula*
|
||||
mark_tools::simplify_mark(const formula* f)
|
||||
{
|
||||
if (!f->is_marked())
|
||||
|
|
@ -325,9 +326,10 @@ namespace spot
|
|||
if (i != simpmark_.end())
|
||||
return i->second->clone();
|
||||
|
||||
const_cast<formula*>(f)->accept(*simpvisitor_);
|
||||
f->accept(*simpvisitor_);
|
||||
|
||||
formula* r = down_cast<simplify_mark_visitor*>(simpvisitor_)->result();
|
||||
const formula* r =
|
||||
down_cast<simplify_mark_visitor*>(simpvisitor_)->result();
|
||||
simpmark_[f->clone()] = r->clone();
|
||||
return r;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
// Copyright (C) 2010, 2011 Laboratoire de Recherche et Développement
|
||||
// de l'Epita (LRDE).
|
||||
// Copyright (C) 2010, 2011, 2012 Laboratoire de Recherche et
|
||||
// Développement de l'Epita (LRDE).
|
||||
//
|
||||
// This file is part of Spot, a model checking library.
|
||||
//
|
||||
|
|
@ -36,9 +36,9 @@ namespace spot
|
|||
/// \ingroup ltl_rewriting
|
||||
///
|
||||
/// \param f The formula to rewrite.
|
||||
formula* mark_concat_ops(const formula* f);
|
||||
const formula* mark_concat_ops(const formula* f);
|
||||
|
||||
formula* simplify_mark(const formula* f);
|
||||
const formula* simplify_mark(const formula* f);
|
||||
|
||||
mark_tools();
|
||||
~mark_tools();
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
// Copyright (C) 2009, 2010, 2011 Laboratoire de Recherche et Développement
|
||||
// de l'Epita (LRDE).
|
||||
// -*- coding: utf-8 -*-
|
||||
// Copyright (C) 2009, 2010, 2011, 2012 Laboratoire de Recherche et
|
||||
// Développement de l'Epita (LRDE).
|
||||
// Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
// et Marie Curie.
|
||||
//
|
||||
// This file is part of Spot, a model checking library.
|
||||
|
|
@ -27,7 +28,7 @@ namespace spot
|
|||
{
|
||||
namespace ltl
|
||||
{
|
||||
formula*
|
||||
const formula*
|
||||
negative_normal_form(const formula* f, bool negated)
|
||||
{
|
||||
if (!negated && f->is_in_nenoform())
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
// Copyright (C) 2011 Laboratoire de Recherche et Développement de
|
||||
// -*- coding: utf-8 -*-
|
||||
// Copyright (C) 2011, 2012 Laboratoire de Recherche et Développement de
|
||||
// l'Epita (LRDE).
|
||||
// Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
// et Marie Curie.
|
||||
//
|
||||
// This file is part of Spot, a model checking library.
|
||||
|
|
@ -45,8 +46,8 @@ namespace spot
|
|||
/// or spot::ltl::unabbreviate_ltl first. (Calling these functions
|
||||
/// after spot::ltl::negative_normal_form would likely produce a
|
||||
/// formula which is not in negative normal form.)
|
||||
|
||||
formula* negative_normal_form(const formula* f, bool negated = false);
|
||||
const formula*
|
||||
negative_normal_form(const formula* f, bool negated = false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
// Copyright (C) 2009, 2010, 2011 Laboratoire de Recherche et
|
||||
// -*- coding: utf-8 -*-
|
||||
// Copyright (C) 2009, 2010, 2011, 2012 Laboratoire de Recherche et
|
||||
// Développement de l'Epita (LRDE).
|
||||
// Copyright (C) 2003 Laboratoire d'Informatique de Paris 6 (LIP6),
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
|
|
@ -37,20 +38,20 @@ namespace spot
|
|||
}
|
||||
|
||||
void
|
||||
postfix_visitor::visit(atomic_prop* ap)
|
||||
postfix_visitor::visit(const atomic_prop* ap)
|
||||
{
|
||||
doit(ap);
|
||||
}
|
||||
|
||||
void
|
||||
postfix_visitor::visit(unop* uo)
|
||||
postfix_visitor::visit(const unop* uo)
|
||||
{
|
||||
uo->child()->accept(*this);
|
||||
doit(uo);
|
||||
}
|
||||
|
||||
void
|
||||
postfix_visitor::visit(binop* bo)
|
||||
postfix_visitor::visit(const binop* bo)
|
||||
{
|
||||
bo->first()->accept(*this);
|
||||
bo->second()->accept(*this);
|
||||
|
|
@ -58,7 +59,7 @@ namespace spot
|
|||
}
|
||||
|
||||
void
|
||||
postfix_visitor::visit(automatop* ao)
|
||||
postfix_visitor::visit(const automatop* ao)
|
||||
{
|
||||
unsigned s = ao->size();
|
||||
for (unsigned i = 0; i < s; ++i)
|
||||
|
|
@ -67,7 +68,7 @@ namespace spot
|
|||
}
|
||||
|
||||
void
|
||||
postfix_visitor::visit(multop* mo)
|
||||
postfix_visitor::visit(const multop* mo)
|
||||
{
|
||||
unsigned s = mo->size();
|
||||
for (unsigned i = 0; i < s; ++i)
|
||||
|
|
@ -76,62 +77,62 @@ namespace spot
|
|||
}
|
||||
|
||||
void
|
||||
postfix_visitor::visit(bunop* so)
|
||||
postfix_visitor::visit(const bunop* so)
|
||||
{
|
||||
so->child()->accept(*this);
|
||||
doit(so);
|
||||
}
|
||||
|
||||
void
|
||||
postfix_visitor::visit(constant* c)
|
||||
postfix_visitor::visit(const constant* c)
|
||||
{
|
||||
doit(c);
|
||||
}
|
||||
|
||||
void
|
||||
postfix_visitor::doit(atomic_prop* ap)
|
||||
postfix_visitor::doit(const atomic_prop* ap)
|
||||
{
|
||||
doit_default(ap);
|
||||
}
|
||||
|
||||
void
|
||||
postfix_visitor::doit(unop* uo)
|
||||
postfix_visitor::doit(const unop* uo)
|
||||
{
|
||||
doit_default(uo);
|
||||
}
|
||||
|
||||
void
|
||||
postfix_visitor::doit(binop* bo)
|
||||
postfix_visitor::doit(const binop* bo)
|
||||
{
|
||||
doit_default(bo);
|
||||
}
|
||||
|
||||
void
|
||||
postfix_visitor::doit(multop* mo)
|
||||
postfix_visitor::doit(const multop* mo)
|
||||
{
|
||||
doit_default(mo);
|
||||
}
|
||||
|
||||
void
|
||||
postfix_visitor::doit(automatop* ao)
|
||||
postfix_visitor::doit(const automatop* ao)
|
||||
{
|
||||
doit_default(ao);
|
||||
}
|
||||
|
||||
void
|
||||
postfix_visitor::doit(bunop* so)
|
||||
postfix_visitor::doit(const bunop* so)
|
||||
{
|
||||
doit_default(so);
|
||||
}
|
||||
|
||||
void
|
||||
postfix_visitor::doit(constant* c)
|
||||
postfix_visitor::doit(const constant* c)
|
||||
{
|
||||
doit_default(c);
|
||||
}
|
||||
|
||||
void
|
||||
postfix_visitor::doit_default(formula* f)
|
||||
postfix_visitor::doit_default(const formula* f)
|
||||
{
|
||||
(void)f;
|
||||
// Dummy implementation that does nothing.
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (C) 2009, 2010 Laboratoire de Recherche et Développement
|
||||
// Copyright (C) 2009, 2010, 2012 Laboratoire de Recherche et Développement
|
||||
// de l'Epita (LRDE).
|
||||
// Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
|
|
@ -43,22 +43,22 @@ namespace spot
|
|||
postfix_visitor();
|
||||
virtual ~postfix_visitor();
|
||||
|
||||
void visit(atomic_prop* ap);
|
||||
void visit(unop* uo);
|
||||
void visit(binop* bo);
|
||||
void visit(multop* mo);
|
||||
void visit(automatop* c);
|
||||
void visit(constant* c);
|
||||
void visit(bunop* c);
|
||||
void visit(const atomic_prop* ap);
|
||||
void visit(const unop* uo);
|
||||
void visit(const binop* bo);
|
||||
void visit(const multop* mo);
|
||||
void visit(const automatop* c);
|
||||
void visit(const constant* c);
|
||||
void visit(const bunop* c);
|
||||
|
||||
virtual void doit(atomic_prop* ap);
|
||||
virtual void doit(unop* uo);
|
||||
virtual void doit(binop* bo);
|
||||
virtual void doit(multop* mo);
|
||||
virtual void doit(automatop* mo);
|
||||
virtual void doit(constant* c);
|
||||
virtual void doit(bunop* c);
|
||||
virtual void doit_default(formula* f);
|
||||
virtual void doit(const atomic_prop* ap);
|
||||
virtual void doit(const unop* uo);
|
||||
virtual void doit(const binop* bo);
|
||||
virtual void doit(const multop* mo);
|
||||
virtual void doit(const automatop* mo);
|
||||
virtual void doit(const constant* c);
|
||||
virtual void doit(const bunop* c);
|
||||
virtual void doit_default(const formula* f);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
// -*- coding: utf-8 -*-
|
||||
// Copyright (C) 2008, 2009, 2010, 2011, 2012 Laboratoire de Recherche
|
||||
// et Développement de l'Epita (LRDE).
|
||||
// et Développement de l'Epita (LRDE).
|
||||
// Copyright (C) 2005 Laboratoire d'Informatique de Paris 6
|
||||
// (LIP6), département Systèmes Répartis Coopératifs (SRC), Université
|
||||
// (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.
|
||||
|
|
@ -35,7 +36,7 @@ namespace spot
|
|||
{
|
||||
namespace
|
||||
{
|
||||
static formula*
|
||||
static const formula*
|
||||
ap_builder(const random_formula* rl, int n)
|
||||
{
|
||||
assert(n == 1);
|
||||
|
|
@ -45,7 +46,7 @@ namespace spot
|
|||
return (*i)->clone();
|
||||
}
|
||||
|
||||
static formula*
|
||||
static const formula*
|
||||
true_builder(const random_formula*, int n)
|
||||
{
|
||||
assert(n == 1);
|
||||
|
|
@ -53,7 +54,7 @@ namespace spot
|
|||
return constant::true_instance();
|
||||
}
|
||||
|
||||
static formula*
|
||||
static const formula*
|
||||
boolform_builder(const random_formula* rl, int n)
|
||||
{
|
||||
assert(n >= 1);
|
||||
|
|
@ -61,7 +62,7 @@ namespace spot
|
|||
return rs->rb.generate(n);
|
||||
}
|
||||
|
||||
static formula*
|
||||
static const formula*
|
||||
false_builder(const random_formula*, int n)
|
||||
{
|
||||
assert(n == 1);
|
||||
|
|
@ -69,7 +70,7 @@ namespace spot
|
|||
return constant::false_instance();
|
||||
}
|
||||
|
||||
static formula*
|
||||
static const formula*
|
||||
eword_builder(const random_formula*, int n)
|
||||
{
|
||||
assert(n == 1);
|
||||
|
|
@ -78,14 +79,14 @@ namespace spot
|
|||
}
|
||||
|
||||
template <unop::type Op>
|
||||
static formula*
|
||||
static const formula*
|
||||
unop_builder(const random_formula* rl, int n)
|
||||
{
|
||||
assert(n >= 2);
|
||||
return unop::instance(Op, rl->generate(n - 1));
|
||||
}
|
||||
|
||||
static formula*
|
||||
static const formula*
|
||||
closure_builder(const random_formula* rl, int n)
|
||||
{
|
||||
assert(n >= 2);
|
||||
|
|
@ -94,7 +95,7 @@ namespace spot
|
|||
}
|
||||
|
||||
template <binop::type Op>
|
||||
static formula*
|
||||
static const formula*
|
||||
binop_builder(const random_formula* rl, int n)
|
||||
{
|
||||
assert(n >= 3);
|
||||
|
|
@ -104,7 +105,7 @@ namespace spot
|
|||
}
|
||||
|
||||
template <binop::type Op>
|
||||
static formula*
|
||||
static const formula*
|
||||
binop_SERELTL_builder(const random_formula* rl, int n)
|
||||
{
|
||||
assert(n >= 3);
|
||||
|
|
@ -115,7 +116,7 @@ namespace spot
|
|||
}
|
||||
|
||||
template <bunop::type Op>
|
||||
static formula*
|
||||
static const formula*
|
||||
bunop_unbounded_builder(const random_formula* rl, int n)
|
||||
{
|
||||
assert(n >= 2);
|
||||
|
|
@ -123,7 +124,7 @@ namespace spot
|
|||
}
|
||||
|
||||
template <bunop::type Op>
|
||||
static formula*
|
||||
static const formula*
|
||||
bunop_bounded_builder(const random_formula* rl, int n)
|
||||
{
|
||||
assert(n >= 2);
|
||||
|
|
@ -133,7 +134,7 @@ namespace spot
|
|||
}
|
||||
|
||||
template <bunop::type Op>
|
||||
static formula*
|
||||
static const formula*
|
||||
bunop_bool_bounded_builder(const random_formula* rl, int n)
|
||||
{
|
||||
assert(n >= 2);
|
||||
|
|
@ -145,7 +146,7 @@ namespace spot
|
|||
|
||||
|
||||
template <multop::type Op>
|
||||
static formula*
|
||||
static const formula*
|
||||
multop_builder(const random_formula* rl, int n)
|
||||
{
|
||||
assert(n >= 3);
|
||||
|
|
@ -197,7 +198,7 @@ namespace spot
|
|||
assert(total_2_and_more_ != 0.0);
|
||||
}
|
||||
|
||||
formula*
|
||||
const formula*
|
||||
random_formula::generate(int n) const
|
||||
{
|
||||
assert(n > 0);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
// Copyright (C) 2010, 2011 Laboratoire de Recherche et Développement de
|
||||
// l'Epita (LRDE).
|
||||
// -*- coding: utf-8 -*-
|
||||
// Copyright (C) 2010, 2011, 2012 Laboratoire de Recherche et
|
||||
// Développement de l'Epita (LRDE).
|
||||
// Copyright (C) 2005 Laboratoire d'Informatique de Paris 6 (LIP6),
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
// et Marie Curie.
|
||||
//
|
||||
// This file is part of Spot, a model checking library.
|
||||
|
|
@ -61,7 +62,7 @@ namespace spot
|
|||
/// n, because some simple simplifications are performed by the
|
||||
/// AST. (For instance the formula <code>a | a</code> is
|
||||
/// automatically reduced to <code>a</code> by spot::ltl::multop.)
|
||||
formula* generate(int n) const;
|
||||
const formula* generate(int n) const;
|
||||
|
||||
/// \brief Print the priorities of each operator, constants,
|
||||
/// and atomic propositions.
|
||||
|
|
@ -84,7 +85,7 @@ namespace spot
|
|||
const char* name;
|
||||
int min_n;
|
||||
double proba;
|
||||
typedef formula* (*builder)(const random_formula* rl, int n);
|
||||
typedef const formula* (*builder)(const random_formula* rl, int n);
|
||||
builder build;
|
||||
void setup(const char* name, int min_n, builder build);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
// Copyright (C) 2008, 2009, 2010, 2011 Laboratoire de Recherche et
|
||||
// Développement de l'Epita (LRDE).
|
||||
// Copyright (C) 2008, 2009, 2010, 2011, 2012 Laboratoire de Recherche
|
||||
// et Développement de l'Epita (LRDE).
|
||||
// Copyright (C) 2004, 2006, 2007 Laboratoire d'Informatique de
|
||||
// Paris 6 (LIP6), département Systèmes Répartis Coopératifs (SRC),
|
||||
// Université Pierre et Marie Curie.
|
||||
|
|
@ -30,7 +30,7 @@ namespace spot
|
|||
{
|
||||
namespace ltl
|
||||
{
|
||||
formula*
|
||||
const formula*
|
||||
reduce(const formula* f, int opt)
|
||||
{
|
||||
ltl_simplifier_options o;
|
||||
|
|
@ -40,7 +40,7 @@ namespace spot
|
|||
o.containment_checks = opt & Reduce_Containment_Checks;
|
||||
o.containment_checks_stronger = opt & Reduce_Containment_Checks_Stronger;
|
||||
ltl_simplifier simplifier(o);
|
||||
return const_cast<formula*>(simplifier.simplify(f));
|
||||
return simplifier.simplify(f);
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
// Copyright (C) 2010, 2011 Laboratoire de Recherche et Developpement
|
||||
// de l'Epita (LRDE).
|
||||
// -*- coding: utf-8 -*-
|
||||
// Copyright (C) 2010, 2011, 2012 Laboratoire de Recherche et
|
||||
// Développement de l'Epita (LRDE).
|
||||
// Copyright (C) 2004, 2006 Laboratoire d'Informatique de Paris 6
|
||||
// (LIP6), département Systèmes Répartis Coopératifs (SRC), Université
|
||||
// (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.
|
||||
|
|
@ -70,10 +71,10 @@ namespace spot
|
|||
///
|
||||
/// \deprecated Use spot::ltl::ltl_simplifier instead.
|
||||
#if __GNUC__
|
||||
formula*
|
||||
const formula*
|
||||
reduce(const formula* f, int opt = Reduce_All) __attribute__ ((deprecated));
|
||||
#else
|
||||
formula* reduce(const formula* f, int opt = Reduce_All);
|
||||
const formula* reduce(const formula* f, int opt = Reduce_All);
|
||||
#endif
|
||||
/// @}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
// Copyright (C) 2010 Laboratoire de Recherche et Développement de
|
||||
// -*- coding: utf-8 -*-
|
||||
// Copyright (C) 2010, 2012 Laboratoire de Recherche et Développement de
|
||||
// l'Epita (LRDE).
|
||||
// Copyright (C) 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
// et Marie Curie.
|
||||
//
|
||||
// This file is part of Spot, a model checking library.
|
||||
|
|
@ -40,10 +41,10 @@ namespace spot
|
|||
}
|
||||
|
||||
void
|
||||
simplify_f_g_visitor::visit(binop* bo)
|
||||
simplify_f_g_visitor::visit(const binop* bo)
|
||||
{
|
||||
formula* f1 = recurse(bo->first());
|
||||
formula* f2 = recurse(bo->second());
|
||||
const formula* f1 = recurse(bo->first());
|
||||
const formula* f2 = recurse(bo->second());
|
||||
binop::type op = bo->op();
|
||||
|
||||
switch (op)
|
||||
|
|
@ -89,19 +90,19 @@ namespace spot
|
|||
assert(0);
|
||||
}
|
||||
|
||||
formula*
|
||||
simplify_f_g_visitor::recurse(formula* f)
|
||||
const formula*
|
||||
simplify_f_g_visitor::recurse(const formula* f)
|
||||
{
|
||||
return simplify_f_g(f);
|
||||
}
|
||||
|
||||
formula*
|
||||
const formula*
|
||||
simplify_f_g(const formula* f)
|
||||
{
|
||||
if (f->is_boolean())
|
||||
return f->clone();
|
||||
simplify_f_g_visitor v;
|
||||
const_cast<formula*>(f)->accept(v);
|
||||
f->accept(v);
|
||||
return v.result();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
// Copyright (C) 2010 Laboratoire de Recherche et Développement de
|
||||
// l'Epita (LRDE).
|
||||
// -*- coding: utf-8 -*-
|
||||
// Copyright (C) 2010, 2012 Laboratoire de Recherche et Développement
|
||||
// de l'Epita (LRDE).
|
||||
// Copyright (C) 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
// et Marie Curie.
|
||||
//
|
||||
// This file is part of Spot, a model checking library.
|
||||
|
|
@ -49,9 +50,9 @@ namespace spot
|
|||
virtual ~simplify_f_g_visitor();
|
||||
|
||||
using super::visit;
|
||||
void visit(binop* bo);
|
||||
void visit(const binop* bo);
|
||||
|
||||
virtual formula* recurse(formula* f);
|
||||
virtual const formula* recurse(const formula* f);
|
||||
};
|
||||
|
||||
/// \brief Replace <code>true U f</code> and <code>false R g</code> by
|
||||
|
|
@ -65,7 +66,7 @@ namespace spot
|
|||
/// - a W false = G a
|
||||
///
|
||||
/// \ingroup ltl_rewriting
|
||||
formula* simplify_f_g(const formula* f);
|
||||
const formula* simplify_f_g(const formula* f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -77,7 +77,7 @@ namespace spot
|
|||
|
||||
/// Simplify the formula \a f (using options supplied to the
|
||||
/// constructor).
|
||||
formula* simplify(const formula* f);
|
||||
const formula* simplify(const formula* f);
|
||||
|
||||
/// Build the negative normal form of formula \a f.
|
||||
/// All negations of the formula are pushed in front of the
|
||||
|
|
@ -87,7 +87,8 @@ namespace spot
|
|||
/// \param f The formula to normalize.
|
||||
/// \param negated If \c true, return the negative normal form of
|
||||
/// \c !f
|
||||
formula* negative_normal_form(const formula* f, bool negated = false);
|
||||
const formula*
|
||||
negative_normal_form(const formula* f, bool negated = false);
|
||||
|
||||
/// \brief Syntactic implication.
|
||||
///
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ namespace spot
|
|||
// E°
|
||||
class snf_visitor: public visitor
|
||||
{
|
||||
formula* result_;
|
||||
const formula* result_;
|
||||
snf_cache* cache_;
|
||||
public:
|
||||
|
||||
|
|
@ -41,27 +41,27 @@ namespace spot
|
|||
{
|
||||
}
|
||||
|
||||
formula*
|
||||
const formula*
|
||||
result() const
|
||||
{
|
||||
return result_;
|
||||
}
|
||||
|
||||
void
|
||||
visit(atomic_prop*)
|
||||
visit(const atomic_prop*)
|
||||
{
|
||||
assert(!"unexpected operator");
|
||||
}
|
||||
|
||||
void
|
||||
visit(constant* c)
|
||||
visit(const constant* c)
|
||||
{
|
||||
assert(c == constant::empty_word_instance());
|
||||
result_ = constant::false_instance();
|
||||
}
|
||||
|
||||
void
|
||||
visit(bunop* bo)
|
||||
visit(const bunop* bo)
|
||||
{
|
||||
bunop::type op = bo->op();
|
||||
switch (op)
|
||||
|
|
@ -75,25 +75,25 @@ namespace spot
|
|||
}
|
||||
|
||||
void
|
||||
visit(unop*)
|
||||
visit(const unop*)
|
||||
{
|
||||
assert(!"unexpected operator");
|
||||
}
|
||||
|
||||
void
|
||||
visit(binop*)
|
||||
visit(const binop*)
|
||||
{
|
||||
assert(!"unexpected operator");
|
||||
}
|
||||
|
||||
void
|
||||
visit(automatop*)
|
||||
visit(const automatop*)
|
||||
{
|
||||
assert(!"unexpected operator");
|
||||
}
|
||||
|
||||
void
|
||||
visit(multop* mo)
|
||||
visit(const multop* mo)
|
||||
{
|
||||
multop::type op = mo->op();
|
||||
switch (op)
|
||||
|
|
@ -134,14 +134,14 @@ namespace spot
|
|||
break;
|
||||
case multop::AndRat:
|
||||
// FIXME: Can we deal with AndRat in a better way
|
||||
// when it accepts [*0].
|
||||
// when it accepts [*0]?
|
||||
result_ = mo->clone();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
formula*
|
||||
recurse(formula* f)
|
||||
const formula*
|
||||
recurse(const formula* f)
|
||||
{
|
||||
if (!f->accepts_eword())
|
||||
return f->clone();
|
||||
|
|
@ -164,11 +164,11 @@ namespace spot
|
|||
}
|
||||
|
||||
|
||||
formula*
|
||||
const formula*
|
||||
star_normal_form(const formula* sere, snf_cache* cache)
|
||||
{
|
||||
snf_visitor v(cache);
|
||||
return v.recurse(const_cast<formula*>(sere));
|
||||
return v.recurse(sere);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,8 +52,8 @@ namespace spot
|
|||
///
|
||||
/// \param sere the SERE to rewrite
|
||||
/// \param cache an optional cache
|
||||
formula* star_normal_form(const formula* sere,
|
||||
snf_cache* cache = 0);
|
||||
const formula* star_normal_form(const formula* sere,
|
||||
snf_cache* cache = 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -183,11 +183,11 @@ namespace spot
|
|||
|
||||
// If the formula has the form (!b)[*], return b.
|
||||
static
|
||||
formula*
|
||||
const formula*
|
||||
strip_star_not(const formula* f)
|
||||
{
|
||||
if (bunop* s = is_Star(f))
|
||||
if (unop* n = is_Not(s->child()))
|
||||
if (const bunop* s = is_Star(f))
|
||||
if (const unop* n = is_Not(s->child()))
|
||||
return n->child();
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -195,11 +195,11 @@ namespace spot
|
|||
// If the formula as position i in multop mo has the form
|
||||
// (!b)[*];b with b being a Boolean formula, return b.
|
||||
static
|
||||
formula*
|
||||
const formula*
|
||||
match_goto(const multop *mo, unsigned i)
|
||||
{
|
||||
assert(i + 1 < mo->size());
|
||||
formula* b = strip_star_not(mo->nth(i));
|
||||
const formula* b = strip_star_not(mo->nth(i));
|
||||
if (!b || !b->is_boolean())
|
||||
return 0;
|
||||
if (mo->nth(i + 1) == b)
|
||||
|
|
@ -207,7 +207,7 @@ namespace spot
|
|||
return 0;
|
||||
}
|
||||
|
||||
class to_string_visitor: public const_visitor
|
||||
class to_string_visitor: public visitor
|
||||
{
|
||||
public:
|
||||
to_string_visitor(std::ostream& os,
|
||||
|
|
@ -301,13 +301,13 @@ namespace spot
|
|||
in_ratexp_ = true;
|
||||
top_level_ = true;
|
||||
{
|
||||
multop* m = is_multop(bo->first(), multop::Concat);
|
||||
const multop* m = is_multop(bo->first(), multop::Concat);
|
||||
if (m)
|
||||
{
|
||||
unsigned s = m->size();
|
||||
if (m->nth(s - 1) == constant::true_instance())
|
||||
{
|
||||
formula* tmp = m->all_but(s - 1);
|
||||
const formula* tmp = m->all_but(s - 1);
|
||||
tmp->accept(*this);
|
||||
tmp->destroy();
|
||||
onelast = true;
|
||||
|
|
@ -409,11 +409,11 @@ namespace spot
|
|||
switch (op)
|
||||
{
|
||||
case bunop::Star:
|
||||
if (multop* mo = is_Concat(c))
|
||||
if (const multop* mo = is_Concat(c))
|
||||
{
|
||||
unsigned s = mo->size();
|
||||
if (s == 2)
|
||||
if (formula* b = match_goto(mo, 0))
|
||||
if (const formula* b = match_goto(mo, 0))
|
||||
{
|
||||
c = b;
|
||||
sugar = Goto;
|
||||
|
|
@ -602,7 +602,7 @@ namespace spot
|
|||
if (i + 1 < max)
|
||||
{
|
||||
// Try to match (!b)[*];b
|
||||
formula* b = match_goto(mo, i);
|
||||
const formula* b = match_goto(mo, i);
|
||||
if (b)
|
||||
{
|
||||
emit_bunop_child(b);
|
||||
|
|
@ -622,10 +622,10 @@ namespace spot
|
|||
continue;
|
||||
}
|
||||
// Try to match ((!b)[*];b)[*i..j];(!b)[*]
|
||||
if (bunop* s = is_Star(mo->nth(i)))
|
||||
if (formula* b2 = strip_star_not(mo->nth(i + 1)))
|
||||
if (multop* sc = is_Concat(s->child()))
|
||||
if (formula* b1 = match_goto(sc, 0))
|
||||
if (const bunop* s = is_Star(mo->nth(i)))
|
||||
if (const formula* b2 = strip_star_not(mo->nth(i + 1)))
|
||||
if (const multop* sc = is_Concat(s->child()))
|
||||
if (const formula* b1 = match_goto(sc, 0))
|
||||
if (b1 == b2)
|
||||
{
|
||||
emit_bunop_child(b1);
|
||||
|
|
@ -754,7 +754,7 @@ namespace spot
|
|||
to_spin_string(const formula* f, std::ostream& os, bool full_parent)
|
||||
{
|
||||
// Remove xor, ->, and <-> first.
|
||||
formula* fu = unabbreviate_logic(f);
|
||||
const formula* fu = unabbreviate_logic(f);
|
||||
// Also remove W and M.
|
||||
f = unabbreviate_wm(fu);
|
||||
fu->destroy();
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (C) 2009, 2010 Laboratoire de Recherche et Développement
|
||||
// Copyright (C) 2009, 2010, 2012 Laboratoire de Recherche et Développement
|
||||
// de l'Epita (LRDE).
|
||||
// Copyright (C) 2003 Laboratoire d'Informatique de Paris 6 (LIP6),
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
|
|
@ -37,7 +37,7 @@ namespace spot
|
|||
}
|
||||
|
||||
void
|
||||
unabbreviate_ltl_visitor::visit(unop* uo)
|
||||
unabbreviate_ltl_visitor::visit(const unop* uo)
|
||||
{
|
||||
switch (uo->op())
|
||||
{
|
||||
|
|
@ -61,19 +61,19 @@ namespace spot
|
|||
}
|
||||
}
|
||||
|
||||
formula*
|
||||
unabbreviate_ltl_visitor::recurse(formula* f)
|
||||
const formula*
|
||||
unabbreviate_ltl_visitor::recurse(const formula* f)
|
||||
{
|
||||
return unabbreviate_ltl(f);
|
||||
}
|
||||
|
||||
formula*
|
||||
const formula*
|
||||
unabbreviate_ltl(const formula* f)
|
||||
{
|
||||
if (f->is_sugar_free_boolean() && f->is_sugar_free_ltl())
|
||||
return f->clone();
|
||||
unabbreviate_ltl_visitor v;
|
||||
const_cast<formula*>(f)->accept(v);
|
||||
f->accept(v);
|
||||
return v.result();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
// Copyright (C) 2011 Laboratoire de Recherche et Développement de
|
||||
// -*- coding: utf-8 -*-
|
||||
// Copyright (C) 2011, 2012 Laboratoire de Recherche et Développement de
|
||||
// l'Epita (LRDE).
|
||||
// Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
// et Marie Curie.
|
||||
//
|
||||
// This file is part of Spot, a model checking library.
|
||||
|
|
@ -53,9 +54,9 @@ namespace spot
|
|||
virtual ~unabbreviate_ltl_visitor();
|
||||
|
||||
using super::visit;
|
||||
void visit(unop* uo);
|
||||
void visit(const unop* uo);
|
||||
|
||||
formula* recurse(formula* f);
|
||||
const formula* recurse(const formula* f);
|
||||
};
|
||||
|
||||
/// \brief Clone and rewrite a formula to remove most of the
|
||||
|
|
@ -66,7 +67,7 @@ namespace spot
|
|||
///
|
||||
/// This will also rewrite unary operators such as unop::F,
|
||||
/// and unop::G, using only binop::U, and binop::R.
|
||||
formula* unabbreviate_ltl(const formula* f);
|
||||
const formula* unabbreviate_ltl(const formula* f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -44,10 +44,10 @@ namespace spot
|
|||
}
|
||||
|
||||
using super::visit;
|
||||
void visit(binop* bo)
|
||||
void visit(const binop* bo)
|
||||
{
|
||||
formula* f1 = recurse(bo->first());
|
||||
formula* f2 = recurse(bo->second());
|
||||
const formula* f1 = recurse(bo->first());
|
||||
const formula* f2 = recurse(bo->second());
|
||||
binop::type op = bo->op();
|
||||
switch (op)
|
||||
{
|
||||
|
|
@ -76,7 +76,7 @@ namespace spot
|
|||
}
|
||||
}
|
||||
|
||||
virtual formula* recurse(formula* f)
|
||||
virtual const formula* recurse(const formula* f)
|
||||
{
|
||||
if (f->is_boolean())
|
||||
return f->clone();
|
||||
|
|
@ -86,11 +86,11 @@ namespace spot
|
|||
};
|
||||
}
|
||||
|
||||
formula*
|
||||
const formula*
|
||||
unabbreviate_wm(const formula* f)
|
||||
{
|
||||
unabbreviate_wm_visitor v;
|
||||
return v.recurse(const_cast<formula*>(f));
|
||||
return v.recurse(f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ namespace spot
|
|||
/// and <code>a M b</code> is replaced by <code>b U (b & a)</code>.
|
||||
///
|
||||
/// \ingroup ltl_rewriting
|
||||
formula* unabbreviate_wm(const formula* f);
|
||||
const formula* unabbreviate_wm(const formula* f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue