formula: rename the constants for consistency
False/True are problematic in Python, and I don't like that the enum is op::False but the constructor formula::ff(). So let's just use ff and tt everywhere, and also eword instead of EmptyWord. * src/ltlast/formula.hh (False, True, EmptyWord, AP, is_false, is_true): Rename to... (ff, tt, eword, ap, is_ff, is_tt): ... these. * iface/ltsmin/ltsmin.cc, src/ltlast/formula.cc, src/ltlvisit/apcollect.cc, src/ltlvisit/dot.cc, src/ltlvisit/mark.cc, src/ltlvisit/mutation.cc, src/ltlvisit/print.cc, src/ltlvisit/relabel.cc, src/ltlvisit/simpfg.cc, src/ltlvisit/simplify.cc, src/ltlvisit/snf.cc, src/ltlvisit/unabbrev.cc, src/twa/acc.cc, src/twa/acc.hh, src/twa/formula2bdd.cc, src/twaalgos/gtec/gtec.cc, src/twaalgos/hoa.cc, src/twaalgos/ltl2taa.cc, src/twaalgos/ltl2tgba_fm.cc, src/twaalgos/neverclaim.cc, src/twaalgos/product.cc, src/twaalgos/remfin.cc, src/twaalgos/safety.cc, src/tests/parseerr.test, src/tests/utf8.test, wrap/python/spot.py: Adjust.
This commit is contained in:
parent
fad05632a2
commit
8b4ec5ded0
27 changed files with 211 additions and 211 deletions
|
|
@ -647,12 +647,12 @@ namespace spot
|
||||||
// appropriately. ALIVE_PROP is the bdd that should be ANDed
|
// appropriately. ALIVE_PROP is the bdd that should be ANDed
|
||||||
// to all transitions leaving a live state, while DEAD_PROP should
|
// to all transitions leaving a live state, while DEAD_PROP should
|
||||||
// be ANDed to all transitions leaving a dead state.
|
// be ANDed to all transitions leaving a dead state.
|
||||||
if (dead.is_false())
|
if (dead.is_ff())
|
||||||
{
|
{
|
||||||
alive_prop = bddtrue;
|
alive_prop = bddtrue;
|
||||||
dead_prop = bddfalse;
|
dead_prop = bddfalse;
|
||||||
}
|
}
|
||||||
else if (dead.is_true())
|
else if (dead.is_tt())
|
||||||
{
|
{
|
||||||
alive_prop = bddtrue;
|
alive_prop = bddtrue;
|
||||||
dead_prop = bddtrue;
|
dead_prop = bddtrue;
|
||||||
|
|
|
||||||
|
|
@ -138,7 +138,7 @@ namespace spot
|
||||||
void
|
void
|
||||||
fnode::destroy_aux() const
|
fnode::destroy_aux() const
|
||||||
{
|
{
|
||||||
if (SPOT_UNLIKELY(is(op::AP)))
|
if (SPOT_UNLIKELY(is(op::ap)))
|
||||||
{
|
{
|
||||||
auto i = m.ap2name.find(id());
|
auto i = m.ap2name.find(id());
|
||||||
auto n = m.name2ap.erase(i->second);
|
auto n = m.name2ap.erase(i->second);
|
||||||
|
|
@ -165,10 +165,10 @@ namespace spot
|
||||||
case op::x: \
|
case op::x: \
|
||||||
return #x; \
|
return #x; \
|
||||||
break
|
break
|
||||||
C(False);
|
C(ff);
|
||||||
C(True);
|
C(tt);
|
||||||
C(EmptyWord);
|
C(eword);
|
||||||
C(AP);
|
C(ap);
|
||||||
C(Not);
|
C(Not);
|
||||||
C(X);
|
C(X);
|
||||||
C(F);
|
C(F);
|
||||||
|
|
@ -618,7 +618,7 @@ namespace spot
|
||||||
// - 0[*min..max] = 0 if min > 0
|
// - 0[*min..max] = 0 if min > 0
|
||||||
// - b[:*0..max] = 1
|
// - b[:*0..max] = 1
|
||||||
// - b[:*min..max] = 0 if min > 0
|
// - b[:*min..max] = 0 if min > 0
|
||||||
if (child->is_false()
|
if (child->is_ff()
|
||||||
|| (o == op::FStar && child->is_boolean()))
|
|| (o == op::FStar && child->is_boolean()))
|
||||||
{
|
{
|
||||||
if (min == 0)
|
if (min == 0)
|
||||||
|
|
@ -709,7 +709,7 @@ namespace spot
|
||||||
|
|
||||||
// F(0) = G(0) = 0
|
// F(0) = G(0) = 0
|
||||||
// F(1) = G(1) = 1
|
// F(1) = G(1) = 1
|
||||||
if (f->is_false() || f->is_true())
|
if (f->is_ff() || f->is_tt())
|
||||||
return f;
|
return f;
|
||||||
|
|
||||||
assert(!f->is_eword());
|
assert(!f->is_eword());
|
||||||
|
|
@ -719,10 +719,10 @@ namespace spot
|
||||||
case op::Not:
|
case op::Not:
|
||||||
{
|
{
|
||||||
// !1 = 0
|
// !1 = 0
|
||||||
if (f->is_true())
|
if (f->is_tt())
|
||||||
return ff();
|
return ff();
|
||||||
// !0 = 1
|
// !0 = 1
|
||||||
if (f->is_false())
|
if (f->is_ff())
|
||||||
return tt();
|
return tt();
|
||||||
// ![*0] = 1[+]
|
// ![*0] = 1[+]
|
||||||
if (f->is_eword())
|
if (f->is_eword())
|
||||||
|
|
@ -754,7 +754,7 @@ namespace spot
|
||||||
}
|
}
|
||||||
case op::X:
|
case op::X:
|
||||||
// X(1) = 1, X(0) = 0
|
// X(1) = 1, X(0) = 0
|
||||||
if (f->is_true() || f->is_false())
|
if (f->is_tt() || f->is_ff())
|
||||||
return f;
|
return f;
|
||||||
assert(!f->is_eword());
|
assert(!f->is_eword());
|
||||||
break;
|
break;
|
||||||
|
|
@ -771,10 +771,10 @@ namespace spot
|
||||||
case op::NegClosure:
|
case op::NegClosure:
|
||||||
case op::NegClosureMarked:
|
case op::NegClosureMarked:
|
||||||
// {1} = 0
|
// {1} = 0
|
||||||
if (f->is_true())
|
if (f->is_tt())
|
||||||
return ff();
|
return ff();
|
||||||
// {0} = 1, {[*0]} = 1
|
// {0} = 1, {[*0]} = 1
|
||||||
if (f->is_false() || f->is_eword())
|
if (f->is_ff() || f->is_eword())
|
||||||
return tt();
|
return tt();
|
||||||
// {b} = !b
|
// {b} = !b
|
||||||
if (f->is_boolean())
|
if (f->is_boolean())
|
||||||
|
|
@ -806,9 +806,9 @@ namespace spot
|
||||||
}
|
}
|
||||||
// - (1 ^ Exp) = !Exp
|
// - (1 ^ Exp) = !Exp
|
||||||
// - (0 ^ Exp) = Exp
|
// - (0 ^ Exp) = Exp
|
||||||
if (first->is_true())
|
if (first->is_tt())
|
||||||
return unop(op::Not, second);
|
return unop(op::Not, second);
|
||||||
if (first->is_false())
|
if (first->is_ff())
|
||||||
return second;
|
return second;
|
||||||
if (first == second)
|
if (first == second)
|
||||||
{
|
{
|
||||||
|
|
@ -830,9 +830,9 @@ namespace spot
|
||||||
// - (0 <=> Exp) = !Exp
|
// - (0 <=> Exp) = !Exp
|
||||||
// - (1 <=> Exp) = Exp
|
// - (1 <=> Exp) = Exp
|
||||||
// - (Exp <=> Exp) = 1
|
// - (Exp <=> Exp) = 1
|
||||||
if (first->is_false())
|
if (first->is_ff())
|
||||||
return unop(op::Not, second);
|
return unop(op::Not, second);
|
||||||
if (first->is_true())
|
if (first->is_tt())
|
||||||
return second;
|
return second;
|
||||||
if (first == second)
|
if (first == second)
|
||||||
{
|
{
|
||||||
|
|
@ -850,19 +850,19 @@ namespace spot
|
||||||
// - (Exp => 1) = 1
|
// - (Exp => 1) = 1
|
||||||
// - (Exp => 0) = !Exp
|
// - (Exp => 0) = !Exp
|
||||||
// - (Exp => Exp) = 1
|
// - (Exp => Exp) = 1
|
||||||
if (first->is_true())
|
if (first->is_tt())
|
||||||
return second;
|
return second;
|
||||||
if (first->is_false())
|
if (first->is_ff())
|
||||||
{
|
{
|
||||||
second->destroy();
|
second->destroy();
|
||||||
return tt();
|
return tt();
|
||||||
}
|
}
|
||||||
if (second->is_true())
|
if (second->is_tt())
|
||||||
{
|
{
|
||||||
first->destroy();
|
first->destroy();
|
||||||
return second;
|
return second;
|
||||||
}
|
}
|
||||||
if (second->is_false())
|
if (second->is_ff())
|
||||||
return unop(op::Not, first);
|
return unop(op::Not, first);
|
||||||
if (first == second)
|
if (first == second)
|
||||||
{
|
{
|
||||||
|
|
@ -876,9 +876,9 @@ namespace spot
|
||||||
// - (Exp U 0) = 0
|
// - (Exp U 0) = 0
|
||||||
// - (0 U Exp) = Exp
|
// - (0 U Exp) = Exp
|
||||||
// - (Exp U Exp) = Exp
|
// - (Exp U Exp) = Exp
|
||||||
if (second->is_true()
|
if (second->is_tt()
|
||||||
|| second->is_false()
|
|| second->is_ff()
|
||||||
|| first->is_false()
|
|| first->is_ff()
|
||||||
|| first == second)
|
|| first == second)
|
||||||
{
|
{
|
||||||
first->destroy();
|
first->destroy();
|
||||||
|
|
@ -890,14 +890,14 @@ namespace spot
|
||||||
// - (0 W Exp) = Exp
|
// - (0 W Exp) = Exp
|
||||||
// - (1 W Exp) = 1
|
// - (1 W Exp) = 1
|
||||||
// - (Exp W Exp) = Exp
|
// - (Exp W Exp) = Exp
|
||||||
if (second->is_true()
|
if (second->is_tt()
|
||||||
|| first->is_false()
|
|| first->is_ff()
|
||||||
|| first == second)
|
|| first == second)
|
||||||
{
|
{
|
||||||
first->destroy();
|
first->destroy();
|
||||||
return second;
|
return second;
|
||||||
}
|
}
|
||||||
if (first->is_true())
|
if (first->is_tt())
|
||||||
{
|
{
|
||||||
second->destroy();
|
second->destroy();
|
||||||
return first;
|
return first;
|
||||||
|
|
@ -908,9 +908,9 @@ namespace spot
|
||||||
// - (Exp R 0) = 0
|
// - (Exp R 0) = 0
|
||||||
// - (1 R Exp) = Exp
|
// - (1 R Exp) = Exp
|
||||||
// - (Exp R Exp) = Exp
|
// - (Exp R Exp) = Exp
|
||||||
if (second->is_true()
|
if (second->is_tt()
|
||||||
|| second->is_false()
|
|| second->is_ff()
|
||||||
|| first->is_true()
|
|| first->is_tt()
|
||||||
|| first == second)
|
|| first == second)
|
||||||
{
|
{
|
||||||
first->destroy();
|
first->destroy();
|
||||||
|
|
@ -922,14 +922,14 @@ namespace spot
|
||||||
// - (1 M Exp) = Exp
|
// - (1 M Exp) = Exp
|
||||||
// - (0 M Exp) = 0
|
// - (0 M Exp) = 0
|
||||||
// - (Exp M Exp) = Exp
|
// - (Exp M Exp) = Exp
|
||||||
if (second->is_false()
|
if (second->is_ff()
|
||||||
|| first->is_true()
|
|| first->is_tt()
|
||||||
|| first == second)
|
|| first == second)
|
||||||
{
|
{
|
||||||
first->destroy();
|
first->destroy();
|
||||||
return second;
|
return second;
|
||||||
}
|
}
|
||||||
if (first->is_false())
|
if (first->is_ff())
|
||||||
{
|
{
|
||||||
second->destroy();
|
second->destroy();
|
||||||
return first;
|
return first;
|
||||||
|
|
@ -942,15 +942,15 @@ namespace spot
|
||||||
// - [*0] <>-> Exp = 0
|
// - [*0] <>-> Exp = 0
|
||||||
// - Exp <>-> 0 = 0
|
// - Exp <>-> 0 = 0
|
||||||
// - boolExp <>-> Exp = boolExp & Exp
|
// - boolExp <>-> Exp = boolExp & Exp
|
||||||
if (first->is_true())
|
if (first->is_tt())
|
||||||
return second;
|
return second;
|
||||||
if (first->is_false()
|
if (first->is_ff()
|
||||||
|| first->is_eword())
|
|| first->is_eword())
|
||||||
{
|
{
|
||||||
second->destroy();
|
second->destroy();
|
||||||
return ff();
|
return ff();
|
||||||
}
|
}
|
||||||
if (second->is_false())
|
if (second->is_ff())
|
||||||
{
|
{
|
||||||
first->destroy();
|
first->destroy();
|
||||||
return second;
|
return second;
|
||||||
|
|
@ -964,15 +964,15 @@ namespace spot
|
||||||
// - [*0] []-> Exp = 1
|
// - [*0] []-> Exp = 1
|
||||||
// - Exp []-> 1 = 1
|
// - Exp []-> 1 = 1
|
||||||
// - boolExp []-> Exp = !boolExp | Exp
|
// - boolExp []-> Exp = !boolExp | Exp
|
||||||
if (first->is_true())
|
if (first->is_tt())
|
||||||
return second;
|
return second;
|
||||||
if (first->is_false()
|
if (first->is_ff()
|
||||||
|| first->is_eword())
|
|| first->is_eword())
|
||||||
{
|
{
|
||||||
second->destroy();
|
second->destroy();
|
||||||
return tt();
|
return tt();
|
||||||
}
|
}
|
||||||
if (second->is_true())
|
if (second->is_tt())
|
||||||
{
|
{
|
||||||
first->destroy();
|
first->destroy();
|
||||||
return second;
|
return second;
|
||||||
|
|
@ -1000,13 +1000,13 @@ namespace spot
|
||||||
m.ap2name.emplace(next_id_, name);
|
m.ap2name.emplace(next_id_, name);
|
||||||
// next_id_ is incremented by setup_props(), called by the
|
// next_id_ is incremented by setup_props(), called by the
|
||||||
// constructor of fnode
|
// constructor of fnode
|
||||||
return ires.first->second = new fnode(op::AP, {});
|
return ires.first->second = new fnode(op::ap, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string&
|
const std::string&
|
||||||
fnode::ap_name() const
|
fnode::ap_name() const
|
||||||
{
|
{
|
||||||
if (op_ != op::AP)
|
if (op_ != op::ap)
|
||||||
throw std::runtime_error("ap_name() called on non-AP formula");
|
throw std::runtime_error("ap_name() called on non-AP formula");
|
||||||
auto i = m.ap2name.find(id());
|
auto i = m.ap2name.find(id());
|
||||||
assert(i != m.ap2name.end());
|
assert(i != m.ap2name.end());
|
||||||
|
|
@ -1014,9 +1014,9 @@ namespace spot
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t fnode::next_id_ = 0U;
|
size_t fnode::next_id_ = 0U;
|
||||||
const fnode* fnode::ff_ = new fnode(op::False, {});
|
const fnode* fnode::ff_ = new fnode(op::ff, {});
|
||||||
const fnode* fnode::tt_ = new fnode(op::True, {});
|
const fnode* fnode::tt_ = new fnode(op::tt, {});
|
||||||
const fnode* fnode::ew_ = new fnode(op::EmptyWord, {});
|
const fnode* fnode::ew_ = new fnode(op::eword, {});
|
||||||
const fnode* fnode::one_star_ = nullptr; // Only built when necessary.
|
const fnode* fnode::one_star_ = nullptr; // Only built when necessary.
|
||||||
|
|
||||||
void fnode::setup_props(op o)
|
void fnode::setup_props(op o)
|
||||||
|
|
@ -1032,8 +1032,8 @@ namespace spot
|
||||||
|
|
||||||
switch (op_)
|
switch (op_)
|
||||||
{
|
{
|
||||||
case op::False:
|
case op::ff:
|
||||||
case op::True:
|
case op::tt:
|
||||||
is_.boolean = true;
|
is_.boolean = true;
|
||||||
is_.sugar_free_boolean = true;
|
is_.sugar_free_boolean = true;
|
||||||
is_.in_nenoform = true;
|
is_.in_nenoform = true;
|
||||||
|
|
@ -1055,7 +1055,7 @@ namespace spot
|
||||||
is_.lbt_atomic_props = true;
|
is_.lbt_atomic_props = true;
|
||||||
is_.spin_atomic_props = true;
|
is_.spin_atomic_props = true;
|
||||||
break;
|
break;
|
||||||
case op::EmptyWord:
|
case op::eword:
|
||||||
is_.boolean = false;
|
is_.boolean = false;
|
||||||
is_.sugar_free_boolean = false;
|
is_.sugar_free_boolean = false;
|
||||||
is_.in_nenoform = true;
|
is_.in_nenoform = true;
|
||||||
|
|
@ -1077,7 +1077,7 @@ namespace spot
|
||||||
is_.lbt_atomic_props = true;
|
is_.lbt_atomic_props = true;
|
||||||
is_.spin_atomic_props = true;
|
is_.spin_atomic_props = true;
|
||||||
break;
|
break;
|
||||||
case op::AP:
|
case op::ap:
|
||||||
is_.boolean = true;
|
is_.boolean = true;
|
||||||
is_.sugar_free_boolean = true;
|
is_.sugar_free_boolean = true;
|
||||||
is_.in_nenoform = true;
|
is_.in_nenoform = true;
|
||||||
|
|
@ -1119,7 +1119,7 @@ namespace spot
|
||||||
is_.not_marked = true;
|
is_.not_marked = true;
|
||||||
is_.eventual = children[0]->is_universal();
|
is_.eventual = children[0]->is_universal();
|
||||||
is_.universal = children[0]->is_eventual();
|
is_.universal = children[0]->is_eventual();
|
||||||
is_.in_nenoform = (children[0]->is(op::AP));
|
is_.in_nenoform = (children[0]->is(op::ap));
|
||||||
is_.sere_formula = is_.boolean;
|
is_.sere_formula = is_.boolean;
|
||||||
|
|
||||||
is_.syntactic_safety = children[0]->is_syntactic_guarantee();
|
is_.syntactic_safety = children[0]->is_syntactic_guarantee();
|
||||||
|
|
@ -1336,7 +1336,7 @@ namespace spot
|
||||||
is_.not_marked = true;
|
is_.not_marked = true;
|
||||||
// f U g is universal if g is eventual, or if f == 1.
|
// f U g is universal if g is eventual, or if f == 1.
|
||||||
is_.eventual = children[1]->is_eventual();
|
is_.eventual = children[1]->is_eventual();
|
||||||
is_.eventual |= children[0]->is_true();
|
is_.eventual |= children[0]->is_tt();
|
||||||
is_.boolean = false;
|
is_.boolean = false;
|
||||||
is_.sere_formula = false;
|
is_.sere_formula = false;
|
||||||
is_.finite = false;
|
is_.finite = false;
|
||||||
|
|
@ -1357,7 +1357,7 @@ namespace spot
|
||||||
props = children[0]->props & children[1]->props;
|
props = children[0]->props & children[1]->props;
|
||||||
is_.not_marked = true;
|
is_.not_marked = true;
|
||||||
// f W g is universal if f and g are, or if g == 0.
|
// f W g is universal if f and g are, or if g == 0.
|
||||||
is_.universal |= children[1]->is_false();
|
is_.universal |= children[1]->is_ff();
|
||||||
is_.boolean = false;
|
is_.boolean = false;
|
||||||
is_.sere_formula = false;
|
is_.sere_formula = false;
|
||||||
is_.finite = false;
|
is_.finite = false;
|
||||||
|
|
@ -1380,7 +1380,7 @@ namespace spot
|
||||||
is_.not_marked = true;
|
is_.not_marked = true;
|
||||||
// g R f is universal if f is universal, or if g == 0.
|
// g R f is universal if f is universal, or if g == 0.
|
||||||
is_.universal = children[1]->is_universal();
|
is_.universal = children[1]->is_universal();
|
||||||
is_.universal |= children[0]->is_false();
|
is_.universal |= children[0]->is_ff();
|
||||||
is_.boolean = false;
|
is_.boolean = false;
|
||||||
is_.sere_formula = false;
|
is_.sere_formula = false;
|
||||||
is_.finite = false;
|
is_.finite = false;
|
||||||
|
|
@ -1402,7 +1402,7 @@ namespace spot
|
||||||
props = children[0]->props & children[1]->props;
|
props = children[0]->props & children[1]->props;
|
||||||
is_.not_marked = true;
|
is_.not_marked = true;
|
||||||
// g M f is eventual if both g and f are eventual, or if f == 1.
|
// g M f is eventual if both g and f are eventual, or if f == 1.
|
||||||
is_.eventual |= children[1]->is_true();
|
is_.eventual |= children[1]->is_tt();
|
||||||
is_.boolean = false;
|
is_.boolean = false;
|
||||||
is_.sere_formula = false;
|
is_.sere_formula = false;
|
||||||
is_.finite = false;
|
is_.finite = false;
|
||||||
|
|
@ -1585,7 +1585,7 @@ namespace spot
|
||||||
if (m != unbounded())
|
if (m != unbounded())
|
||||||
os << +m;
|
os << +m;
|
||||||
}
|
}
|
||||||
if (op_ == op::AP)
|
if (op_ == op::ap)
|
||||||
os << " \"" << ap_name() << '"';
|
os << " \"" << ap_name() << '"';
|
||||||
if (auto s = size())
|
if (auto s = size())
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -41,10 +41,10 @@ namespace spot
|
||||||
{
|
{
|
||||||
enum class op: uint8_t
|
enum class op: uint8_t
|
||||||
{
|
{
|
||||||
False,
|
ff,
|
||||||
True,
|
tt,
|
||||||
EmptyWord,
|
eword,
|
||||||
AP,
|
ap,
|
||||||
// unary operators
|
// unary operators
|
||||||
Not,
|
Not,
|
||||||
X,
|
X,
|
||||||
|
|
@ -210,9 +210,9 @@ namespace spot
|
||||||
return ff_;
|
return ff_;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_false() const
|
bool is_ff() const
|
||||||
{
|
{
|
||||||
return op_ == op::False;
|
return op_ == op::ff;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const fnode* tt()
|
static const fnode* tt()
|
||||||
|
|
@ -220,9 +220,9 @@ namespace spot
|
||||||
return tt_;
|
return tt_;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_true() const
|
bool is_tt() const
|
||||||
{
|
{
|
||||||
return op_ == op::True;
|
return op_ == op::tt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const fnode* eword()
|
static const fnode* eword()
|
||||||
|
|
@ -232,12 +232,12 @@ namespace spot
|
||||||
|
|
||||||
bool is_eword() const
|
bool is_eword() const
|
||||||
{
|
{
|
||||||
return op_ == op::EmptyWord;
|
return op_ == op::eword;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_constant() const
|
bool is_constant() const
|
||||||
{
|
{
|
||||||
return op_ == op::False || op_ == op::True || op_ == op::EmptyWord;
|
return op_ == op::ff || op_ == op::tt || op_ == op::eword;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_Kleene_star() const
|
bool is_Kleene_star() const
|
||||||
|
|
@ -579,7 +579,7 @@ namespace spot
|
||||||
{
|
{
|
||||||
if (f->is(op::Not))
|
if (f->is(op::Not))
|
||||||
f = f->nth(0);
|
f = f->nth(0);
|
||||||
if (f->is(op::AP))
|
if (f->is(op::ap))
|
||||||
return f;
|
return f;
|
||||||
return nullptr;
|
return nullptr;
|
||||||
};
|
};
|
||||||
|
|
@ -1088,9 +1088,9 @@ namespace spot
|
||||||
return formula(fnode::ff());
|
return formula(fnode::ff());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_false() const
|
bool is_ff() const
|
||||||
{
|
{
|
||||||
return ptr_->is_false();
|
return ptr_->is_ff();
|
||||||
}
|
}
|
||||||
|
|
||||||
static formula tt()
|
static formula tt()
|
||||||
|
|
@ -1098,9 +1098,9 @@ namespace spot
|
||||||
return formula(fnode::tt());
|
return formula(fnode::tt());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_true() const
|
bool is_tt() const
|
||||||
{
|
{
|
||||||
return ptr_->is_true();
|
return ptr_->is_tt();
|
||||||
}
|
}
|
||||||
|
|
||||||
static formula eword()
|
static formula eword()
|
||||||
|
|
@ -1130,7 +1130,7 @@ namespace spot
|
||||||
|
|
||||||
bool is_literal()
|
bool is_literal()
|
||||||
{
|
{
|
||||||
return (is(op::AP) ||
|
return (is(op::ap) ||
|
||||||
// If f is in nenoform, Not can only occur in front of
|
// If f is in nenoform, Not can only occur in front of
|
||||||
// an atomic proposition. So this way we do not have
|
// an atomic proposition. So this way we do not have
|
||||||
// to check the type of the child.
|
// to check the type of the child.
|
||||||
|
|
@ -1194,10 +1194,10 @@ namespace spot
|
||||||
{
|
{
|
||||||
switch (op o = kind())
|
switch (op o = kind())
|
||||||
{
|
{
|
||||||
case op::False:
|
case op::ff:
|
||||||
case op::True:
|
case op::tt:
|
||||||
case op::EmptyWord:
|
case op::eword:
|
||||||
case op::AP:
|
case op::ap:
|
||||||
return *this;
|
return *this;
|
||||||
case op::Not:
|
case op::Not:
|
||||||
case op::X:
|
case op::X:
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ namespace spot
|
||||||
s = new atomic_prop_set;
|
s = new atomic_prop_set;
|
||||||
f.traverse([&](const formula& f)
|
f.traverse([&](const formula& f)
|
||||||
{
|
{
|
||||||
if (f.is(op::AP))
|
if (f.is(op::ap))
|
||||||
s->insert(f);
|
s->insert(f);
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -60,9 +60,9 @@ namespace spot
|
||||||
return src;
|
return src;
|
||||||
|
|
||||||
op o = f.kind();
|
op o = f.kind();
|
||||||
std::string str = (o == op::AP) ? f.ap_name() : f.kindstr();
|
std::string str = (o == op::ap) ? f.ap_name() : f.kindstr();
|
||||||
|
|
||||||
if (o == op::AP || f.is_constant())
|
if (o == op::ap || f.is_constant())
|
||||||
*sinks_ << " " << src << " [label=\""
|
*sinks_ << " " << src << " [label=\""
|
||||||
<< str << "\", shape=box];\n";
|
<< str << "\", shape=box];\n";
|
||||||
else
|
else
|
||||||
|
|
@ -71,10 +71,10 @@ namespace spot
|
||||||
int childnum = 0;
|
int childnum = 0;
|
||||||
switch (o)
|
switch (o)
|
||||||
{
|
{
|
||||||
case op::False:
|
case op::ff:
|
||||||
case op::True:
|
case op::tt:
|
||||||
case op::EmptyWord:
|
case op::eword:
|
||||||
case op::AP:
|
case op::ap:
|
||||||
case op::Not:
|
case op::Not:
|
||||||
case op::X:
|
case op::X:
|
||||||
case op::F:
|
case op::F:
|
||||||
|
|
|
||||||
|
|
@ -37,10 +37,10 @@ namespace spot
|
||||||
ltl::formula res;
|
ltl::formula res;
|
||||||
switch (f.kind())
|
switch (f.kind())
|
||||||
{
|
{
|
||||||
case op::False:
|
case op::ff:
|
||||||
case op::True:
|
case op::tt:
|
||||||
case op::EmptyWord:
|
case op::eword:
|
||||||
case op::AP:
|
case op::ap:
|
||||||
case op::Not:
|
case op::Not:
|
||||||
case op::X:
|
case op::X:
|
||||||
case op::F:
|
case op::F:
|
||||||
|
|
@ -103,10 +103,10 @@ namespace spot
|
||||||
ltl::formula res;
|
ltl::formula res;
|
||||||
switch (f.kind())
|
switch (f.kind())
|
||||||
{
|
{
|
||||||
case op::False:
|
case op::ff:
|
||||||
case op::True:
|
case op::tt:
|
||||||
case op::EmptyWord:
|
case op::eword:
|
||||||
case op::AP:
|
case op::ap:
|
||||||
case op::Not:
|
case op::Not:
|
||||||
case op::X:
|
case op::X:
|
||||||
case op::F:
|
case op::F:
|
||||||
|
|
|
||||||
|
|
@ -67,11 +67,11 @@ namespace spot
|
||||||
|
|
||||||
switch (f.kind())
|
switch (f.kind())
|
||||||
{
|
{
|
||||||
case op::False:
|
case op::ff:
|
||||||
case op::True:
|
case op::tt:
|
||||||
case op::EmptyWord:
|
case op::eword:
|
||||||
return f;
|
return f;
|
||||||
case op::AP:
|
case op::ap:
|
||||||
if (opts_ & Mut_Ap2Const)
|
if (opts_ & Mut_Ap2Const)
|
||||||
{
|
{
|
||||||
if (mutation_counter_-- == 0)
|
if (mutation_counter_-- == 0)
|
||||||
|
|
|
||||||
|
|
@ -423,16 +423,16 @@ namespace spot
|
||||||
op o = f.kind();
|
op o = f.kind();
|
||||||
switch (o)
|
switch (o)
|
||||||
{
|
{
|
||||||
case op::False:
|
case op::ff:
|
||||||
emit(KFalse);
|
emit(KFalse);
|
||||||
break;
|
break;
|
||||||
case op::True:
|
case op::tt:
|
||||||
emit(KTrue);
|
emit(KTrue);
|
||||||
break;
|
break;
|
||||||
case op::EmptyWord:
|
case op::eword:
|
||||||
emit(KEmptyWord);
|
emit(KEmptyWord);
|
||||||
break;
|
break;
|
||||||
case op::AP:
|
case op::ap:
|
||||||
{
|
{
|
||||||
const std::string& str = f.ap_name();
|
const std::string& str = f.ap_name();
|
||||||
if (!is_bare_word(str.c_str()))
|
if (!is_bare_word(str.c_str()))
|
||||||
|
|
@ -483,7 +483,7 @@ namespace spot
|
||||||
case op::Not:
|
case op::Not:
|
||||||
{
|
{
|
||||||
formula c = f[0];
|
formula c = f[0];
|
||||||
if (c.is(op::AP))
|
if (c.is(op::ap))
|
||||||
{
|
{
|
||||||
// If we negate a single letter in UTF-8, use a
|
// If we negate a single letter in UTF-8, use a
|
||||||
// combining overline.
|
// combining overline.
|
||||||
|
|
@ -585,7 +585,7 @@ namespace spot
|
||||||
formula right = f[1];
|
formula right = f[1];
|
||||||
unsigned last = left.size() - 1;
|
unsigned last = left.size() - 1;
|
||||||
bool onelast = false;
|
bool onelast = false;
|
||||||
if (left.is(op::Concat) && left[last].is_true())
|
if (left.is(op::Concat) && left[last].is_tt())
|
||||||
{
|
{
|
||||||
visit(left.all_but(last));
|
visit(left.all_but(last));
|
||||||
onelast = true;
|
onelast = true;
|
||||||
|
|
@ -609,7 +609,7 @@ namespace spot
|
||||||
}
|
}
|
||||||
else if (o == op::EConcat)
|
else if (o == op::EConcat)
|
||||||
{
|
{
|
||||||
if (f[1].is(op::True))
|
if (f[1].is_tt())
|
||||||
{
|
{
|
||||||
os_ << '!';
|
os_ << '!';
|
||||||
// No recursion on right.
|
// No recursion on right.
|
||||||
|
|
@ -743,7 +743,7 @@ namespace spot
|
||||||
unsigned default_max = formula::unbounded();
|
unsigned default_max = formula::unbounded();
|
||||||
|
|
||||||
// Abbreviate "1[*]" as "[*]".
|
// Abbreviate "1[*]" as "[*]".
|
||||||
if (!c.is(op::True) || o != op::Star)
|
if (!c.is_tt() || o != op::Star)
|
||||||
{
|
{
|
||||||
if (o == op::Star)
|
if (o == op::Star)
|
||||||
{
|
{
|
||||||
|
|
@ -1042,13 +1042,13 @@ namespace spot
|
||||||
op o = f.kind();
|
op o = f.kind();
|
||||||
switch (o)
|
switch (o)
|
||||||
{
|
{
|
||||||
case op::False:
|
case op::ff:
|
||||||
os_ << 'f';
|
os_ << 'f';
|
||||||
break;
|
break;
|
||||||
case op::True:
|
case op::tt:
|
||||||
os_ << 't';
|
os_ << 't';
|
||||||
break;
|
break;
|
||||||
case op::AP:
|
case op::ap:
|
||||||
{
|
{
|
||||||
const std::string& str = f.ap_name();
|
const std::string& str = f.ap_name();
|
||||||
if (!is_pnum(str.c_str()))
|
if (!is_pnum(str.c_str()))
|
||||||
|
|
@ -1100,7 +1100,7 @@ namespace spot
|
||||||
os_ << "& ";
|
os_ << "& ";
|
||||||
first_ = true;
|
first_ = true;
|
||||||
break;
|
break;
|
||||||
case op::EmptyWord:
|
case op::eword:
|
||||||
case op::Closure:
|
case op::Closure:
|
||||||
case op::NegClosure:
|
case op::NegClosure:
|
||||||
case op::NegClosureMarked:
|
case op::NegClosureMarked:
|
||||||
|
|
|
||||||
|
|
@ -121,7 +121,7 @@ namespace spot
|
||||||
formula
|
formula
|
||||||
visit(formula f)
|
visit(formula f)
|
||||||
{
|
{
|
||||||
if (f.is(op::AP))
|
if (f.is(op::ap))
|
||||||
return rename(f);
|
return rename(f);
|
||||||
else
|
else
|
||||||
return f.map([this](formula f)
|
return f.map([this](formula f)
|
||||||
|
|
@ -420,7 +420,7 @@ namespace spot
|
||||||
formula
|
formula
|
||||||
visit(formula f)
|
visit(formula f)
|
||||||
{
|
{
|
||||||
if (f.is(op::AP) || (c.find(f) != c.end()))
|
if (f.is(op::ap) || (c.find(f) != c.end()))
|
||||||
return rename(f);
|
return rename(f);
|
||||||
|
|
||||||
unsigned sz = f.size();
|
unsigned sz = f.size();
|
||||||
|
|
|
||||||
|
|
@ -29,16 +29,16 @@ namespace spot
|
||||||
formula simplify_f_g(formula p)
|
formula simplify_f_g(formula p)
|
||||||
{
|
{
|
||||||
// 1 U p = Fp
|
// 1 U p = Fp
|
||||||
if (p.is(op::U) && p[0].is_true())
|
if (p.is(op::U) && p[0].is_tt())
|
||||||
return formula::F(p[1]);
|
return formula::F(p[1]);
|
||||||
// 0 R p = Gp
|
// 0 R p = Gp
|
||||||
if (p.is(op::R) && p[0].is_false())
|
if (p.is(op::R) && p[0].is_ff())
|
||||||
return formula::G(p[1]);
|
return formula::G(p[1]);
|
||||||
// p W 0 = Gp
|
// p W 0 = Gp
|
||||||
if (p.is(op::W) && p[1].is_false())
|
if (p.is(op::W) && p[1].is_ff())
|
||||||
return formula::G(p[0]);
|
return formula::G(p[0]);
|
||||||
// p M 1 = Fp
|
// p M 1 = Fp
|
||||||
if (p.is(op::M) && p[1].is_true())
|
if (p.is(op::M) && p[1].is_tt())
|
||||||
return formula::F(p[0]);
|
return formula::F(p[0]);
|
||||||
return p.map(simplify_f_g);
|
return p.map(simplify_f_g);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -100,13 +100,13 @@ namespace spot
|
||||||
|
|
||||||
switch (f.kind())
|
switch (f.kind())
|
||||||
{
|
{
|
||||||
case op::True:
|
case op::tt:
|
||||||
result = bddtrue;
|
result = bddtrue;
|
||||||
break;
|
break;
|
||||||
case op::False:
|
case op::ff:
|
||||||
result = bddfalse;
|
result = bddfalse;
|
||||||
break;
|
break;
|
||||||
case op::AP:
|
case op::ap:
|
||||||
result = bdd_ithvar(dict->register_proposition(f, this));
|
result = bdd_ithvar(dict->register_proposition(f, this));
|
||||||
break;
|
break;
|
||||||
case op::Not:
|
case op::Not:
|
||||||
|
|
@ -385,15 +385,15 @@ namespace spot
|
||||||
|
|
||||||
switch (op o = f.kind())
|
switch (op o = f.kind())
|
||||||
{
|
{
|
||||||
case op::False:
|
case op::ff:
|
||||||
case op::True:
|
case op::tt:
|
||||||
// Negation of constants is taken care of in the
|
// Negation of constants is taken care of in the
|
||||||
// constructor of unop::Not, so these cases should be
|
// constructor of unop::Not, so these cases should be
|
||||||
// caught by nenoform_recursively().
|
// caught by nenoform_recursively().
|
||||||
assert(!negated);
|
assert(!negated);
|
||||||
result = f;
|
result = f;
|
||||||
break;
|
break;
|
||||||
case op::AP:
|
case op::ap:
|
||||||
result = negated ? formula::Not(f) : f;
|
result = negated ? formula::Not(f) : f;
|
||||||
break;
|
break;
|
||||||
case op::X:
|
case op::X:
|
||||||
|
|
@ -526,7 +526,7 @@ namespace spot
|
||||||
rec(f1, false), rec(f2, negated));
|
rec(f1, false), rec(f2, negated));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case op::EmptyWord:
|
case op::eword:
|
||||||
case op::Not:
|
case op::Not:
|
||||||
SPOT_UNREACHABLE();
|
SPOT_UNREACHABLE();
|
||||||
}
|
}
|
||||||
|
|
@ -849,10 +849,10 @@ namespace spot
|
||||||
|
|
||||||
switch (op o = f.kind())
|
switch (op o = f.kind())
|
||||||
{
|
{
|
||||||
case op::False:
|
case op::ff:
|
||||||
case op::True:
|
case op::tt:
|
||||||
case op::EmptyWord:
|
case op::eword:
|
||||||
case op::AP:
|
case op::ap:
|
||||||
case op::Not:
|
case op::Not:
|
||||||
case op::FStar:
|
case op::FStar:
|
||||||
return f;
|
return f;
|
||||||
|
|
@ -1772,16 +1772,16 @@ namespace spot
|
||||||
trace << "bo: trying basic reductions" << std::endl;
|
trace << "bo: trying basic reductions" << std::endl;
|
||||||
// Rewrite U,R,W,M as F or G when possible.
|
// Rewrite U,R,W,M as F or G when possible.
|
||||||
// true U b == F(b)
|
// true U b == F(b)
|
||||||
if (bo.is(op::U) && a.is(op::True))
|
if (bo.is(op::U) && a.is_tt())
|
||||||
return recurse(formula::F(b));
|
return recurse(formula::F(b));
|
||||||
// false R b == G(b)
|
// false R b == G(b)
|
||||||
if (bo.is(op::R) && a.is(op::False))
|
if (bo.is(op::R) && a.is_ff())
|
||||||
return recurse(formula::G(b));
|
return recurse(formula::G(b));
|
||||||
// a W false == G(a)
|
// a W false == G(a)
|
||||||
if (bo.is(op::W) && b.is(op::False))
|
if (bo.is(op::W) && b.is_ff())
|
||||||
return recurse(formula::G(a));
|
return recurse(formula::G(a));
|
||||||
// a M true == F(a)
|
// a M true == F(a)
|
||||||
if (bo.is(op::M) && b.is(op::True))
|
if (bo.is(op::M) && b.is_tt())
|
||||||
return recurse(formula::F(a));
|
return recurse(formula::F(a));
|
||||||
|
|
||||||
if (bo.is(op::W, op::M) || bo.is(op::U, op::R))
|
if (bo.is(op::W, op::M) || bo.is(op::U, op::R))
|
||||||
|
|
@ -3292,9 +3292,9 @@ namespace spot
|
||||||
|
|
||||||
if (f == g)
|
if (f == g)
|
||||||
return true;
|
return true;
|
||||||
if (g.is(op::True) || f.is(op::False))
|
if (g.is_tt() || f.is_ff())
|
||||||
return true;
|
return true;
|
||||||
if (g.is(op::False) || f.is(op::True))
|
if (g.is_ff() || f.is_tt())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Often we compare a literal (an atomic_prop or its negation)
|
// Often we compare a literal (an atomic_prop or its negation)
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ namespace spot
|
||||||
formula out;
|
formula out;
|
||||||
switch (f.kind())
|
switch (f.kind())
|
||||||
{
|
{
|
||||||
case op::EmptyWord:
|
case op::eword:
|
||||||
out = formula::ff();
|
out = formula::ff();
|
||||||
break;
|
break;
|
||||||
case op::Star:
|
case op::Star:
|
||||||
|
|
@ -95,9 +95,9 @@ namespace spot
|
||||||
out = formula::OrRat(v);
|
out = formula::OrRat(v);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case op::False:
|
case op::ff:
|
||||||
case op::True:
|
case op::tt:
|
||||||
case op::AP:
|
case op::ap:
|
||||||
case op::Not:
|
case op::Not:
|
||||||
case op::X:
|
case op::X:
|
||||||
case op::F:
|
case op::F:
|
||||||
|
|
|
||||||
|
|
@ -92,10 +92,10 @@ namespace spot
|
||||||
|
|
||||||
switch (out.kind())
|
switch (out.kind())
|
||||||
{
|
{
|
||||||
case op::False:
|
case op::ff:
|
||||||
case op::True:
|
case op::tt:
|
||||||
case op::EmptyWord:
|
case op::eword:
|
||||||
case op::AP:
|
case op::ap:
|
||||||
case op::Not:
|
case op::Not:
|
||||||
case op::X:
|
case op::X:
|
||||||
case op::Closure:
|
case op::Closure:
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@ a & (, a & 0
|
||||||
EOF
|
EOF
|
||||||
run 0 ../equals -E recover.txt
|
run 0 ../equals -E recover.txt
|
||||||
|
|
||||||
check 'a - b' 'AP(@3 #0 "a")' '>>> a - b
|
check 'a - b' 'ap(@3 #0 "a")' '>>> a - b
|
||||||
^
|
^
|
||||||
syntax error, unexpected $undefined
|
syntax error, unexpected $undefined
|
||||||
|
|
||||||
|
|
@ -105,7 +105,7 @@ syntax error, unexpected $undefined
|
||||||
ignoring trailing garbage
|
ignoring trailing garbage
|
||||||
'
|
'
|
||||||
|
|
||||||
check '{a[*9999999999]}' 'Closure(@5 #0 [Star(@4 #0 0.. [AP(@3 #0 "a")])])' \
|
check '{a[*9999999999]}' 'Closure(@5 #0 [Star(@4 #0 0.. [ap(@3 #0 "a")])])' \
|
||||||
'>>> {a[*9999999999]}
|
'>>> {a[*9999999999]}
|
||||||
^^^^^^^^^^
|
^^^^^^^^^^
|
||||||
value too large ignored
|
value too large ignored
|
||||||
|
|
|
||||||
|
|
@ -26,12 +26,12 @@ set -e
|
||||||
|
|
||||||
# ----
|
# ----
|
||||||
run 0 ../ltl2text '□◯a' >out
|
run 0 ../ltl2text '□◯a' >out
|
||||||
echo 'G(@5 #0 [X(@4 #0 [AP(@3 #0 "a")])])' > exp
|
echo 'G(@5 #0 [X(@4 #0 [ap(@3 #0 "a")])])' > exp
|
||||||
cmp out exp
|
cmp out exp
|
||||||
|
|
||||||
# ----
|
# ----
|
||||||
run 0 ../ltl2text '□◯"αβγ"' >out
|
run 0 ../ltl2text '□◯"αβγ"' >out
|
||||||
echo 'G(@5 #0 [X(@4 #0 [AP(@3 #0 "αβγ")])])' > exp
|
echo 'G(@5 #0 [X(@4 #0 [ap(@3 #0 "αβγ")])])' > exp
|
||||||
cmp out exp
|
cmp out exp
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -411,9 +411,9 @@ namespace spot
|
||||||
|
|
||||||
int acc_cond::is_rabin() const
|
int acc_cond::is_rabin() const
|
||||||
{
|
{
|
||||||
if (code_.is_false())
|
if (code_.is_ff())
|
||||||
return num_ == 0 ? 0 : -1;
|
return num_ == 0 ? 0 : -1;
|
||||||
if ((num_ & 1) || code_.is_true())
|
if ((num_ & 1) || code_.is_tt())
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (is_rs(code_, acc_op::Or, acc_op::And, all_sets()))
|
if (is_rs(code_, acc_op::Or, acc_op::And, all_sets()))
|
||||||
|
|
@ -424,9 +424,9 @@ namespace spot
|
||||||
|
|
||||||
int acc_cond::is_streett() const
|
int acc_cond::is_streett() const
|
||||||
{
|
{
|
||||||
if (code_.is_true())
|
if (code_.is_tt())
|
||||||
return num_ == 0 ? 0 : -1;
|
return num_ == 0 ? 0 : -1;
|
||||||
if ((num_ & 1) || code_.is_false())
|
if ((num_ & 1) || code_.is_ff())
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (is_rs(code_, acc_op::And, acc_op::Or, all_sets()))
|
if (is_rs(code_, acc_op::And, acc_op::Or, all_sets()))
|
||||||
|
|
@ -444,7 +444,7 @@ namespace spot
|
||||||
pairs.resize(num_);
|
pairs.resize(num_);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (code_.is_true()
|
if (code_.is_tt()
|
||||||
|| code_.back().op != acc_op::Or)
|
|| code_.back().op != acc_op::Or)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
@ -670,7 +670,7 @@ namespace spot
|
||||||
if (sets == 0)
|
if (sets == 0)
|
||||||
{
|
{
|
||||||
max = true;
|
max = true;
|
||||||
odd = is_true();
|
odd = is_tt();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
acc_cond::mark_t u_inf;
|
acc_cond::mark_t u_inf;
|
||||||
|
|
@ -1107,7 +1107,7 @@ namespace spot
|
||||||
|
|
||||||
acc_cond::acc_code acc_cond::acc_code::complement() const
|
acc_cond::acc_code acc_cond::acc_code::complement() const
|
||||||
{
|
{
|
||||||
if (is_true())
|
if (is_tt())
|
||||||
return acc_cond::acc_code::f();
|
return acc_cond::acc_code::f();
|
||||||
return complement_rec(&back());
|
return complement_rec(&back());
|
||||||
}
|
}
|
||||||
|
|
@ -1169,7 +1169,7 @@ namespace spot
|
||||||
acc_cond::acc_code
|
acc_cond::acc_code
|
||||||
acc_cond::acc_code::strip(acc_cond::mark_t rem, bool missing) const
|
acc_cond::acc_code::strip(acc_cond::mark_t rem, bool missing) const
|
||||||
{
|
{
|
||||||
if (is_true() || is_false())
|
if (is_tt() || is_ff())
|
||||||
return *this;
|
return *this;
|
||||||
return strip_rec(&back(), rem, missing);
|
return strip_rec(&back(), rem, missing);
|
||||||
}
|
}
|
||||||
|
|
@ -1177,7 +1177,7 @@ namespace spot
|
||||||
acc_cond::mark_t
|
acc_cond::mark_t
|
||||||
acc_cond::acc_code::used_sets() const
|
acc_cond::acc_code::used_sets() const
|
||||||
{
|
{
|
||||||
if (is_true() || is_false())
|
if (is_tt() || is_ff())
|
||||||
return 0U;
|
return 0U;
|
||||||
acc_cond::mark_t used_in_cond = 0U;
|
acc_cond::mark_t used_in_cond = 0U;
|
||||||
auto pos = &back();
|
auto pos = &back();
|
||||||
|
|
@ -1205,7 +1205,7 @@ namespace spot
|
||||||
std::pair<acc_cond::mark_t, acc_cond::mark_t>
|
std::pair<acc_cond::mark_t, acc_cond::mark_t>
|
||||||
acc_cond::acc_code::used_inf_fin_sets() const
|
acc_cond::acc_code::used_inf_fin_sets() const
|
||||||
{
|
{
|
||||||
if (is_true() || is_false())
|
if (is_tt() || is_ff())
|
||||||
return {0U, 0U};
|
return {0U, 0U};
|
||||||
|
|
||||||
acc_cond::mark_t used_fin = 0U;
|
acc_cond::mark_t used_fin = 0U;
|
||||||
|
|
|
||||||
|
|
@ -395,14 +395,14 @@ namespace spot
|
||||||
return !(*this == other);
|
return !(*this == other);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_true() const
|
bool is_tt() const
|
||||||
{
|
{
|
||||||
unsigned s = size();
|
unsigned s = size();
|
||||||
return s == 0
|
return s == 0
|
||||||
|| ((*this)[s - 1].op == acc_op::Inf && (*this)[s - 2].mark == 0U);
|
|| ((*this)[s - 1].op == acc_op::Inf && (*this)[s - 2].mark == 0U);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_false() const
|
bool is_ff() const
|
||||||
{
|
{
|
||||||
unsigned s = size();
|
unsigned s = size();
|
||||||
return s > 1
|
return s > 1
|
||||||
|
|
@ -561,12 +561,12 @@ namespace spot
|
||||||
|
|
||||||
void append_and(acc_code&& r)
|
void append_and(acc_code&& r)
|
||||||
{
|
{
|
||||||
if (is_true() || r.is_false())
|
if (is_tt() || r.is_ff())
|
||||||
{
|
{
|
||||||
*this = std::move(r);
|
*this = std::move(r);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (is_false() || r.is_true())
|
if (is_ff() || r.is_tt())
|
||||||
return;
|
return;
|
||||||
unsigned s = size() - 1;
|
unsigned s = size() - 1;
|
||||||
unsigned rs = r.size() - 1;
|
unsigned rs = r.size() - 1;
|
||||||
|
|
@ -652,12 +652,12 @@ namespace spot
|
||||||
|
|
||||||
void append_and(const acc_code& r)
|
void append_and(const acc_code& r)
|
||||||
{
|
{
|
||||||
if (is_true() || r.is_false())
|
if (is_tt() || r.is_ff())
|
||||||
{
|
{
|
||||||
*this = r;
|
*this = r;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (is_false() || r.is_true())
|
if (is_ff() || r.is_tt())
|
||||||
return;
|
return;
|
||||||
unsigned s = size() - 1;
|
unsigned s = size() - 1;
|
||||||
unsigned rs = r.size() - 1;
|
unsigned rs = r.size() - 1;
|
||||||
|
|
@ -742,9 +742,9 @@ namespace spot
|
||||||
|
|
||||||
void append_or(acc_code&& r)
|
void append_or(acc_code&& r)
|
||||||
{
|
{
|
||||||
if (is_true() || r.is_false())
|
if (is_tt() || r.is_ff())
|
||||||
return;
|
return;
|
||||||
if (is_false() || r.is_true())
|
if (is_ff() || r.is_tt())
|
||||||
{
|
{
|
||||||
*this = std::move(r);
|
*this = std::move(r);
|
||||||
return;
|
return;
|
||||||
|
|
@ -894,14 +894,14 @@ namespace spot
|
||||||
return uses_fin_acceptance_;
|
return uses_fin_acceptance_;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_true() const
|
bool is_tt() const
|
||||||
{
|
{
|
||||||
return code_.is_true();
|
return code_.is_tt();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_false() const
|
bool is_ff() const
|
||||||
{
|
{
|
||||||
return code_.is_false();
|
return code_.is_ff();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_buchi() const
|
bool is_buchi() const
|
||||||
|
|
|
||||||
|
|
@ -72,11 +72,11 @@ namespace spot
|
||||||
};
|
};
|
||||||
switch (f.kind())
|
switch (f.kind())
|
||||||
{
|
{
|
||||||
case op::False:
|
case op::ff:
|
||||||
return bddfalse;
|
return bddfalse;
|
||||||
case op::True:
|
case op::tt:
|
||||||
return bddtrue;
|
return bddtrue;
|
||||||
case op::EmptyWord:
|
case op::eword:
|
||||||
case op::Star:
|
case op::Star:
|
||||||
case op::FStar:
|
case op::FStar:
|
||||||
case op::F:
|
case op::F:
|
||||||
|
|
@ -98,7 +98,7 @@ namespace spot
|
||||||
case op::OrRat:
|
case op::OrRat:
|
||||||
case op::AndRat:
|
case op::AndRat:
|
||||||
SPOT_UNIMPLEMENTED();
|
SPOT_UNIMPLEMENTED();
|
||||||
case op::AP:
|
case op::ap:
|
||||||
return bdd_ithvar(d->register_proposition(f, owner));
|
return bdd_ithvar(d->register_proposition(f, owner));
|
||||||
case op::Not:
|
case op::Not:
|
||||||
return bdd_not(recurse(f[0]));
|
return bdd_not(recurse(f[0]));
|
||||||
|
|
|
||||||
|
|
@ -133,7 +133,7 @@ namespace spot
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
auto acc = ecs_->aut->acc();
|
auto acc = ecs_->aut->acc();
|
||||||
if (acc.get_acceptance().is_false())
|
if (acc.get_acceptance().is_ff())
|
||||||
return nullptr;
|
return nullptr;
|
||||||
if (acc.uses_fin_acceptance())
|
if (acc.uses_fin_acceptance())
|
||||||
throw std::runtime_error
|
throw std::runtime_error
|
||||||
|
|
@ -395,7 +395,7 @@ namespace spot
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
auto acc = ecs_->aut->acc();
|
auto acc = ecs_->aut->acc();
|
||||||
if (acc.get_acceptance().is_false())
|
if (acc.get_acceptance().is_ff())
|
||||||
return nullptr;
|
return nullptr;
|
||||||
if (acc.uses_fin_acceptance())
|
if (acc.uses_fin_acceptance())
|
||||||
throw std::runtime_error
|
throw std::runtime_error
|
||||||
|
|
|
||||||
|
|
@ -299,7 +299,7 @@ namespace spot
|
||||||
acc_cond::acc_code acc_c = aut->acc().get_acceptance();
|
acc_cond::acc_code acc_c = aut->acc().get_acceptance();
|
||||||
if (aut->acc().is_generalized_buchi())
|
if (aut->acc().is_generalized_buchi())
|
||||||
{
|
{
|
||||||
if (aut->acc().is_true())
|
if (aut->acc().is_tt())
|
||||||
os << "acc-name: all";
|
os << "acc-name: all";
|
||||||
else if (aut->acc().is_buchi())
|
else if (aut->acc().is_buchi())
|
||||||
os << "acc-name: Buchi";
|
os << "acc-name: Buchi";
|
||||||
|
|
@ -309,7 +309,7 @@ namespace spot
|
||||||
}
|
}
|
||||||
else if (aut->acc().is_generalized_co_buchi())
|
else if (aut->acc().is_generalized_co_buchi())
|
||||||
{
|
{
|
||||||
if (aut->acc().is_false())
|
if (aut->acc().is_ff())
|
||||||
os << "acc-name: none";
|
os << "acc-name: none";
|
||||||
else if (aut->acc().is_co_buchi())
|
else if (aut->acc().is_co_buchi())
|
||||||
os << "acc-name: co-Buchi";
|
os << "acc-name: co-Buchi";
|
||||||
|
|
|
||||||
|
|
@ -60,9 +60,9 @@ namespace spot
|
||||||
init_ = f;
|
init_ = f;
|
||||||
switch (f.kind())
|
switch (f.kind())
|
||||||
{
|
{
|
||||||
case op::False:
|
case op::ff:
|
||||||
return;
|
return;
|
||||||
case op::True:
|
case op::tt:
|
||||||
{
|
{
|
||||||
std::vector<formula> empty;
|
std::vector<formula> empty;
|
||||||
res_->create_transition(init_, empty);
|
res_->create_transition(init_, empty);
|
||||||
|
|
@ -70,9 +70,9 @@ namespace spot
|
||||||
succ_.push_back(ss);
|
succ_.push_back(ss);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case op::EmptyWord:
|
case op::eword:
|
||||||
SPOT_UNIMPLEMENTED();
|
SPOT_UNIMPLEMENTED();
|
||||||
case op::AP:
|
case op::ap:
|
||||||
{
|
{
|
||||||
if (negated_)
|
if (negated_)
|
||||||
f = formula::Not(f);
|
f = formula::Not(f);
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@ namespace spot
|
||||||
else if (sub.is(op::W))
|
else if (sub.is(op::W))
|
||||||
{
|
{
|
||||||
// f W 0 = Gf
|
// f W 0 = Gf
|
||||||
if (sub[1].is_false())
|
if (sub[1].is_ff())
|
||||||
implied_subformulae(sub[0], rec, true);
|
implied_subformulae(sub[0], rec, true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -90,7 +90,7 @@ namespace spot
|
||||||
// in 'f R g' and 'f M g' always evaluate 'g'.
|
// in 'f R g' and 'f M g' always evaluate 'g'.
|
||||||
formula b = sub;
|
formula b = sub;
|
||||||
sub = b[1];
|
sub = b[1];
|
||||||
if (b[0].is_false())
|
if (b[0].is_ff())
|
||||||
{
|
{
|
||||||
assert(b.is(op::R)); // because 0 M g = 0
|
assert(b.is(op::R)); // because 0 M g = 0
|
||||||
// 0 R f = Gf
|
// 0 R f = Gf
|
||||||
|
|
@ -539,7 +539,7 @@ namespace spot
|
||||||
|
|
||||||
bdd now_to_concat()
|
bdd now_to_concat()
|
||||||
{
|
{
|
||||||
if (to_concat_ && !to_concat_.is(op::EmptyWord))
|
if (to_concat_ && !to_concat_.is(op::eword))
|
||||||
return recurse(to_concat_);
|
return recurse(to_concat_);
|
||||||
return bddfalse;
|
return bddfalse;
|
||||||
}
|
}
|
||||||
|
|
@ -557,14 +557,14 @@ namespace spot
|
||||||
bdd label = bdd_exist(cube, dict_.next_set);
|
bdd label = bdd_exist(cube, dict_.next_set);
|
||||||
bdd dest_bdd = bdd_existcomp(cube, dict_.next_set);
|
bdd dest_bdd = bdd_existcomp(cube, dict_.next_set);
|
||||||
formula dest = dict_.conj_bdd_to_sere(dest_bdd);
|
formula dest = dict_.conj_bdd_to_sere(dest_bdd);
|
||||||
if (dest.is(op::EmptyWord))
|
if (dest.is(op::eword))
|
||||||
{
|
{
|
||||||
out |= label & next_to_concat();
|
out |= label & next_to_concat();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
formula dest2 = formula::Concat({dest, to_concat_});
|
formula dest2 = formula::Concat({dest, to_concat_});
|
||||||
if (!dest2.is(op::False))
|
if (!dest2.is_ff())
|
||||||
out |=
|
out |=
|
||||||
label & bdd_ithvar(dict_.register_next_variable(dest2));
|
label & bdd_ithvar(dict_.register_next_variable(dest2));
|
||||||
}
|
}
|
||||||
|
|
@ -576,13 +576,13 @@ namespace spot
|
||||||
{
|
{
|
||||||
switch (op o = f.kind())
|
switch (op o = f.kind())
|
||||||
{
|
{
|
||||||
case op::False:
|
case op::ff:
|
||||||
return bddfalse;
|
return bddfalse;
|
||||||
case op::True:
|
case op::tt:
|
||||||
return next_to_concat();
|
return next_to_concat();
|
||||||
case op::EmptyWord:
|
case op::eword:
|
||||||
return now_to_concat();
|
return now_to_concat();
|
||||||
case op::AP:
|
case op::ap:
|
||||||
return (bdd_ithvar(dict_.register_proposition(f))
|
return (bdd_ithvar(dict_.register_proposition(f))
|
||||||
& next_to_concat());
|
& next_to_concat());
|
||||||
case op::F:
|
case op::F:
|
||||||
|
|
@ -661,7 +661,7 @@ namespace spot
|
||||||
bdd label = bdd_exist(cube, dict_.next_set);
|
bdd label = bdd_exist(cube, dict_.next_set);
|
||||||
bdd dest_bdd = bdd_existcomp(cube, dict_.next_set);
|
bdd dest_bdd = bdd_existcomp(cube, dict_.next_set);
|
||||||
formula dest = dict_.conj_bdd_to_sere(dest_bdd);
|
formula dest = dict_.conj_bdd_to_sere(dest_bdd);
|
||||||
if (dest.is(op::EmptyWord))
|
if (dest.is(op::eword))
|
||||||
{
|
{
|
||||||
res |= label &
|
res |= label &
|
||||||
bdd_ithvar(dict_.register_next_variable(f));
|
bdd_ithvar(dict_.register_next_variable(f));
|
||||||
|
|
@ -669,7 +669,7 @@ namespace spot
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
formula dest2 = formula::Concat({dest, f});
|
formula dest2 = formula::Concat({dest, f});
|
||||||
if (!dest2.is(op::False))
|
if (!dest2.is_ff())
|
||||||
res |= label & bdd_ithvar
|
res |= label & bdd_ithvar
|
||||||
(dict_.register_next_variable(dest2));
|
(dict_.register_next_variable(dest2));
|
||||||
}
|
}
|
||||||
|
|
@ -711,10 +711,10 @@ namespace spot
|
||||||
|
|
||||||
// If the destination is not 0 or [*0], it means it
|
// If the destination is not 0 or [*0], it means it
|
||||||
// can have successors. Fusion the tail.
|
// can have successors. Fusion the tail.
|
||||||
if (!dest.is(op::False, op::EmptyWord))
|
if (!dest.is(op::ff, op::eword))
|
||||||
{
|
{
|
||||||
formula dest2 = formula::Fusion({dest, f});
|
formula dest2 = formula::Fusion({dest, f});
|
||||||
if (!dest2.is(op::False))
|
if (!dest2.is_ff())
|
||||||
res |= label &
|
res |= label &
|
||||||
bdd_ithvar(dict_.register_next_variable(dest2));
|
bdd_ithvar(dict_.register_next_variable(dest2));
|
||||||
}
|
}
|
||||||
|
|
@ -858,12 +858,12 @@ namespace spot
|
||||||
// If the destination is not 0 or [*0], it means it
|
// If the destination is not 0 or [*0], it means it
|
||||||
// can have successors. Fusion the tail and append
|
// can have successors. Fusion the tail and append
|
||||||
// anything to concatenate.
|
// anything to concatenate.
|
||||||
if (!dest.is(op::False, op::EmptyWord))
|
if (!dest.is(op::ff, op::eword))
|
||||||
{
|
{
|
||||||
formula dest2 = formula::Fusion({dest, tail});
|
formula dest2 = formula::Fusion({dest, tail});
|
||||||
if (to_concat_)
|
if (to_concat_)
|
||||||
dest2 = formula::Concat({dest2, to_concat_});
|
dest2 = formula::Concat({dest2, to_concat_});
|
||||||
if (!dest2.is(op::False))
|
if (!dest2.is_ff())
|
||||||
res |= label
|
res |= label
|
||||||
& bdd_ithvar(dict_.register_next_variable(dest2));
|
& bdd_ithvar(dict_.register_next_variable(dest2));
|
||||||
}
|
}
|
||||||
|
|
@ -1117,13 +1117,13 @@ namespace spot
|
||||||
{
|
{
|
||||||
switch (op o = node.kind())
|
switch (op o = node.kind())
|
||||||
{
|
{
|
||||||
case op::False:
|
case op::ff:
|
||||||
return bddfalse;
|
return bddfalse;
|
||||||
case op::True:
|
case op::tt:
|
||||||
return bddtrue;
|
return bddtrue;
|
||||||
case op::EmptyWord:
|
case op::eword:
|
||||||
SPOT_UNIMPLEMENTED();
|
SPOT_UNIMPLEMENTED();
|
||||||
case op::AP:
|
case op::ap:
|
||||||
return bdd_ithvar(dict_.register_proposition(node));
|
return bdd_ithvar(dict_.register_proposition(node));
|
||||||
case op::F:
|
case op::F:
|
||||||
{
|
{
|
||||||
|
|
@ -1248,7 +1248,7 @@ namespace spot
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
formula dest2 = formula::unop(o, dest);
|
formula dest2 = formula::unop(o, dest);
|
||||||
if (dest2.is_false())
|
if (dest2.is_ff())
|
||||||
continue;
|
continue;
|
||||||
res |=
|
res |=
|
||||||
label & bdd_ithvar(dict_.register_next_variable(dest2));
|
label & bdd_ithvar(dict_.register_next_variable(dest2));
|
||||||
|
|
@ -1290,7 +1290,7 @@ namespace spot
|
||||||
if (!dest.accepts_eword())
|
if (!dest.accepts_eword())
|
||||||
{
|
{
|
||||||
formula dest2 = formula::unop(o, dest);
|
formula dest2 = formula::unop(o, dest);
|
||||||
if (dest2.is_false())
|
if (dest2.is_ff())
|
||||||
continue;
|
continue;
|
||||||
res |= label
|
res |= label
|
||||||
& bdd_ithvar(dict_.register_next_variable(dest2));
|
& bdd_ithvar(dict_.register_next_variable(dest2));
|
||||||
|
|
@ -1333,7 +1333,7 @@ namespace spot
|
||||||
// r(f1 W f2) = r(f2) + r(f1) if recurring
|
// r(f1 W f2) = r(f2) + r(f1) if recurring
|
||||||
//
|
//
|
||||||
// also f1 W 0 = G(f1), so we can enable recurring on f1
|
// also f1 W 0 = G(f1), so we can enable recurring on f1
|
||||||
bdd f1 = recurse(node[0], node[1].is_false());
|
bdd f1 = recurse(node[0], node[1].is_ff());
|
||||||
bdd f2 = recurse(node[1]);
|
bdd f2 = recurse(node[1]);
|
||||||
if (!recurring_)
|
if (!recurring_)
|
||||||
f1 &= bdd_ithvar(dict_.register_next_variable(node));
|
f1 &= bdd_ithvar(dict_.register_next_variable(node));
|
||||||
|
|
@ -1346,7 +1346,7 @@ namespace spot
|
||||||
// r(f2) is in factor, so we can propagate the recurring_ flag.
|
// r(f2) is in factor, so we can propagate the recurring_ flag.
|
||||||
// if f1=false, we can also turn it on (0 R f = Gf).
|
// if f1=false, we can also turn it on (0 R f = Gf).
|
||||||
bdd res = recurse(node[1],
|
bdd res = recurse(node[1],
|
||||||
recurring_ || node[0].is_false());
|
recurring_ || node[0].is_ff());
|
||||||
// r(f1 R f2) = r(f2)(r(f1) + X(f1 R f2)) if not recurring
|
// r(f1 R f2) = r(f2)(r(f1) + X(f1 R f2)) if not recurring
|
||||||
// r(f1 R f2) = r(f2) if recurring
|
// r(f1 R f2) = r(f2) if recurring
|
||||||
if (recurring_ && !dict_.unambiguous)
|
if (recurring_ && !dict_.unambiguous)
|
||||||
|
|
@ -1419,7 +1419,7 @@ namespace spot
|
||||||
|
|
||||||
formula dest2 = formula::binop(o, dest, node[1]);
|
formula dest2 = formula::binop(o, dest, node[1]);
|
||||||
bool unamb = dict_.unambiguous;
|
bool unamb = dict_.unambiguous;
|
||||||
if (!dest2.is(op::False))
|
if (!dest2.is_ff())
|
||||||
{
|
{
|
||||||
// If the rhs is Boolean, the
|
// If the rhs is Boolean, the
|
||||||
// unambiguous code will produce a more
|
// unambiguous code will produce a more
|
||||||
|
|
@ -1456,14 +1456,14 @@ namespace spot
|
||||||
bdd dest_bdd = bdd_existcomp(cube, dict_.next_set);
|
bdd dest_bdd = bdd_existcomp(cube, dict_.next_set);
|
||||||
formula dest = dict_.conj_bdd_to_sere(dest_bdd);
|
formula dest = dict_.conj_bdd_to_sere(dest_bdd);
|
||||||
|
|
||||||
if (dest.is(op::EmptyWord))
|
if (dest.is(op::eword))
|
||||||
{
|
{
|
||||||
res |= label & f2;
|
res |= label & f2;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
formula dest2 = formula::binop(o, dest, node[1]);
|
formula dest2 = formula::binop(o, dest, node[1]);
|
||||||
if (!dest2.is(op::False))
|
if (!dest2.is_ff())
|
||||||
res |= label &
|
res |= label &
|
||||||
bdd_ithvar(dict_.register_next_variable(dest2));
|
bdd_ithvar(dict_.register_next_variable(dest2));
|
||||||
if (dest.accepts_eword())
|
if (dest.accepts_eword())
|
||||||
|
|
@ -2080,7 +2080,7 @@ namespace spot
|
||||||
{
|
{
|
||||||
dest = simplifier->simplify(dest);
|
dest = simplifier->simplify(dest);
|
||||||
// Ignore the arc if the destination reduces to false.
|
// Ignore the arc if the destination reduces to false.
|
||||||
if (dest.is_false())
|
if (dest.is_ff())
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2131,11 +2131,11 @@ namespace spot
|
||||||
// f ----> 1
|
// f ----> 1
|
||||||
//
|
//
|
||||||
// because there is no point in looping on f if we can go to 1.
|
// because there is no point in looping on f if we can go to 1.
|
||||||
if (dests.front().dest.is_true())
|
if (dests.front().dest.is_tt())
|
||||||
{
|
{
|
||||||
dest_map::iterator i = dests.begin();
|
dest_map::iterator i = dests.begin();
|
||||||
bdd c = bddfalse;
|
bdd c = bddfalse;
|
||||||
while (i != dests.end() && i->dest.is_true())
|
while (i != dests.end() && i->dest.is_tt())
|
||||||
c |= i++->cond;
|
c |= i++->cond;
|
||||||
for (; i != dests.end(); ++i)
|
for (; i != dests.end(); ++i)
|
||||||
i->cond -= c;
|
i->cond -= c;
|
||||||
|
|
@ -2158,7 +2158,7 @@ namespace spot
|
||||||
// When translating LTL for an event-based logic
|
// When translating LTL for an event-based logic
|
||||||
// with unobservable events, the 1 state should
|
// with unobservable events, the 1 state should
|
||||||
// accept all events, even unobservable events.
|
// accept all events, even unobservable events.
|
||||||
if (unobs && t.dest.is_true() && now.is_true())
|
if (unobs && t.dest.is_tt() && now.is_tt())
|
||||||
t.cond = all_events;
|
t.cond = all_events;
|
||||||
|
|
||||||
// Will this be a new state?
|
// Will this be a new state?
|
||||||
|
|
|
||||||
|
|
@ -205,7 +205,7 @@ namespace spot
|
||||||
print_never_claim(std::ostream& os, const const_twa_ptr& g,
|
print_never_claim(std::ostream& os, const const_twa_ptr& g,
|
||||||
const char* options)
|
const char* options)
|
||||||
{
|
{
|
||||||
if (!(g->acc().is_buchi() || g->acc().is_true()))
|
if (!(g->acc().is_buchi() || g->acc().is_tt()))
|
||||||
throw std::runtime_error
|
throw std::runtime_error
|
||||||
("Never claim output only supports Büchi acceptance");
|
("Never claim output only supports Büchi acceptance");
|
||||||
never_claim_output d(os, options);
|
never_claim_output d(os, options);
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@ namespace spot
|
||||||
};
|
};
|
||||||
|
|
||||||
res->set_init_state(new_state(left_state, right_state));
|
res->set_init_state(new_state(left_state, right_state));
|
||||||
if (right_acc.is_false())
|
if (right_acc.is_ff())
|
||||||
// Do not bother doing any work if the resulting acceptance is
|
// Do not bother doing any work if the resulting acceptance is
|
||||||
// false.
|
// false.
|
||||||
return res;
|
return res;
|
||||||
|
|
|
||||||
|
|
@ -311,7 +311,7 @@ namespace spot
|
||||||
|
|
||||||
auto code = aut->get_acceptance();
|
auto code = aut->get_acceptance();
|
||||||
|
|
||||||
if (code.is_true())
|
if (code.is_tt())
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
acc_cond::mark_t inf_pairs = 0U;
|
acc_cond::mark_t inf_pairs = 0U;
|
||||||
|
|
@ -586,7 +586,7 @@ namespace spot
|
||||||
auto c = acc.inf(m);
|
auto c = acc.inf(m);
|
||||||
for (unsigned i = 0; i < sz; ++i)
|
for (unsigned i = 0; i < sz; ++i)
|
||||||
{
|
{
|
||||||
if (!code[i].is_true())
|
if (!code[i].is_tt())
|
||||||
continue;
|
continue;
|
||||||
add[i] = m;
|
add[i] = m;
|
||||||
code[i].append_and(c);
|
code[i].append_and(c);
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@ namespace spot
|
||||||
|
|
||||||
bool is_safety_mwdba(const const_twa_graph_ptr& aut)
|
bool is_safety_mwdba(const const_twa_graph_ptr& aut)
|
||||||
{
|
{
|
||||||
if (!(aut->acc().is_buchi() || aut->acc().is_true()))
|
if (!(aut->acc().is_buchi() || aut->acc().is_tt()))
|
||||||
throw std::runtime_error
|
throw std::runtime_error
|
||||||
("is_safety_mwdba() should be called on a Buchi automaton");
|
("is_safety_mwdba() should be called on a Buchi automaton");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -124,7 +124,7 @@ def _formula_traverse(self, func):
|
||||||
|
|
||||||
def _formula_map(self, func):
|
def _formula_map(self, func):
|
||||||
k = self.kind()
|
k = self.kind()
|
||||||
if k in (FalseVal, TrueVal, EmptyWord, AP):
|
if k in (ff, tt, eword, ap):
|
||||||
return self;
|
return self;
|
||||||
if k in (Not, X, F, G, Closure, NegClosure, NegClosureMarked):
|
if k in (Not, X, F, G, Closure, NegClosure, NegClosureMarked):
|
||||||
return formula.unop(k, func(self[0]))
|
return formula.unop(k, func(self[0]))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue