* src/tgba/tgbaexplicit.cc (tgba_explicit::get_acceptance_condition):
Do not treat true and false specially. Otherwise it breaks translation of F(false). * src/tgbatest/explprod.test, src/tgbatest/tripprod.test: Do not use true as acceptance condition. * src/tgbaalgos/ltl2tgba_fm.cc (ltl_trad_visitor): Use Acc[b] as acceptance condition for Fb, not Acc[Fb]. After this change, degeneralized automata are 40% smaller
This commit is contained in:
parent
440029c1b5
commit
1d72cdc86e
5 changed files with 19 additions and 22 deletions
11
ChangeLog
11
ChangeLog
|
|
@ -1,6 +1,15 @@
|
||||||
2004-01-29 Alexandre Duret-Lutz <adl@src.lip6.fr>
|
2004-01-29 Alexandre Duret-Lutz <adl@src.lip6.fr>
|
||||||
|
|
||||||
After this changes, degeneralized automata are 40% smaller
|
* src/tgba/tgbaexplicit.cc (tgba_explicit::get_acceptance_condition):
|
||||||
|
Do not treat true and false specially. Otherwise it breaks
|
||||||
|
translation of F(false).
|
||||||
|
* src/tgbatest/explprod.test, src/tgbatest/tripprod.test: Do not
|
||||||
|
use true as acceptance condition.
|
||||||
|
|
||||||
|
* src/tgbaalgos/ltl2tgba_fm.cc (ltl_trad_visitor): Use Acc[b] as
|
||||||
|
acceptance condition for Fb, not Acc[Fb].
|
||||||
|
|
||||||
|
After this change, degeneralized automata are 40% smaller
|
||||||
in LBTT's statistics.
|
in LBTT's statistics.
|
||||||
|
|
||||||
* src/tgba/tgbatba.cc (state_tba_proxy): Store an iterator,
|
* src/tgba/tgbatba.cc (state_tba_proxy): Store an iterator,
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2003 Laboratoire d'Informatique de Paris 6 (LIP6),
|
// 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.
|
// et Marie Curie.
|
||||||
//
|
//
|
||||||
|
|
@ -260,19 +260,6 @@ namespace spot
|
||||||
bdd
|
bdd
|
||||||
tgba_explicit::get_acceptance_condition(const ltl::formula* f)
|
tgba_explicit::get_acceptance_condition(const ltl::formula* f)
|
||||||
{
|
{
|
||||||
const ltl::constant* c = dynamic_cast<const ltl::constant*>(f);
|
|
||||||
if (c)
|
|
||||||
{
|
|
||||||
switch (c->val())
|
|
||||||
{
|
|
||||||
case ltl::constant::True:
|
|
||||||
return bddtrue;
|
|
||||||
case ltl::constant::False:
|
|
||||||
return bddfalse;
|
|
||||||
}
|
|
||||||
/* Unreachable code. */
|
|
||||||
assert(0);
|
|
||||||
}
|
|
||||||
bdd_dict::fv_map::iterator i = dict_->acc_map.find(f);
|
bdd_dict::fv_map::iterator i = dict_->acc_map.find(f);
|
||||||
assert(has_acceptance_condition(f));
|
assert(has_acceptance_condition(f));
|
||||||
/* If this second assert fails and the first doesn't,
|
/* If this second assert fails and the first doesn't,
|
||||||
|
|
|
||||||
|
|
@ -312,8 +312,9 @@ namespace spot
|
||||||
case unop::F:
|
case unop::F:
|
||||||
{
|
{
|
||||||
// r(Fy) = r(y) + a(y)r(XFy)
|
// r(Fy) = r(y) + a(y)r(XFy)
|
||||||
bdd y = recurse(node->child());
|
const formula* child = node->child();
|
||||||
int a = dict_.register_a_variable(node);
|
bdd y = recurse(child);
|
||||||
|
int a = dict_.register_a_variable(child);
|
||||||
int x = dict_.register_next_variable(node);
|
int x = dict_.register_next_variable(node);
|
||||||
res_ = y | (bdd_ithvar(a) & bdd_ithvar(x));
|
res_ = y | (bdd_ithvar(a) & bdd_ithvar(x));
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -27,10 +27,10 @@ set -e
|
||||||
|
|
||||||
cat >input1 <<EOF
|
cat >input1 <<EOF
|
||||||
acc = p1;
|
acc = p1;
|
||||||
s1, s3, "a", true;
|
s1, s3, "a", p1;
|
||||||
s1, s2, "b", p1;
|
s1, s2, "b", p1;
|
||||||
s2, s1, "!a", true;
|
s2, s1, "!a", p1;
|
||||||
s2, s3, "c", true;
|
s2, s3, "c", p1;
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat >input2 <<EOF
|
cat >input2 <<EOF
|
||||||
|
|
|
||||||
|
|
@ -27,9 +27,9 @@ set -e
|
||||||
|
|
||||||
cat >input1 <<EOF
|
cat >input1 <<EOF
|
||||||
acc = p1;
|
acc = p1;
|
||||||
s1, s3, "a", true;
|
s1, s3, "a", p1;
|
||||||
s1, s2, "b", p1;
|
s1, s2, "b", p1;
|
||||||
s2, s1, "!a", true;
|
s2, s1, "!a", p1;
|
||||||
s2, s3, "c",;
|
s2, s3, "c",;
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue