translate: add support for -x exprop
This helped confirming a behavior observed in #298. * spot/twaalgos/translate.cc, spot/twaalgos/translate.hh: Add support for -x exprop. * bin/spot-x.cc, NEWS: Document it. * tests/core/ltl2tgba2.test: Test it.
This commit is contained in:
parent
71f1928052
commit
142460628c
5 changed files with 44 additions and 5 deletions
18
NEWS
18
NEWS
|
|
@ -135,11 +135,21 @@ New in spot 2.9.5.dev (not yet released)
|
||||||
automaton, but we should not waste too much space and time trying
|
automaton, but we should not waste too much space and time trying
|
||||||
that.
|
that.
|
||||||
|
|
||||||
spot::translator additionally honor the following new variable:
|
spot::translator additionally honor the following new variables:
|
||||||
|
|
||||||
tls-max-states Maximum number of states of automata involved in
|
tls-max-states Maximum number of states of automata involved in
|
||||||
automata-based implication checks for formula
|
automata-based implication checks for formula
|
||||||
simplifications. Defaults to 64.
|
simplifications. Defaults to 64.
|
||||||
|
exprop When set, this causes the core LTL translation to
|
||||||
|
explicitly iterate over all possible valuations of
|
||||||
|
atomic propositions when considering the successors
|
||||||
|
of a BDD-encoded state, instead of discovering
|
||||||
|
possible successors by rewriting the BDD as a sum of
|
||||||
|
product. This is enabled by default for --high,
|
||||||
|
and disabled by default otherwise. When unambiguous
|
||||||
|
automata are required, this option forced and
|
||||||
|
cannot be disabled. (This feature is not new, but
|
||||||
|
was not tunable before.)
|
||||||
|
|
||||||
- tgba_powerset() now takes an extra optional argument to specify a
|
- tgba_powerset() now takes an extra optional argument to specify a
|
||||||
list of accepting sinks states if some are known. Doing so can
|
list of accepting sinks states if some are known. Doing so can
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,12 @@ default) to disable.") },
|
||||||
the transitions that enter accepting SCCs, and not only on the transitions \
|
the transitions that enter accepting SCCs, and not only on the transitions \
|
||||||
inside accepting SCCs. This option defaults to 0, and is only used when \
|
inside accepting SCCs. This option defaults to 0, and is only used when \
|
||||||
comp-susp=1.") },
|
comp-susp=1.") },
|
||||||
|
{ DOC("exprop", "When set, this causes the core LTL translation to \
|
||||||
|
explicitly iterate over all possible valuations of atomic propositions when \
|
||||||
|
considering the successors of a BDD-encoded state, instead of discovering \
|
||||||
|
possible successors by rewriting the BDD as a sum of product. This is enabled \
|
||||||
|
by default for --high, and disabled by default otherwise. When unambiguous \
|
||||||
|
automata are required, this option forced and cannot be disabled.") },
|
||||||
{ DOC("skel-simul", "Default to 1. Set to 0 to disable simulation \
|
{ DOC("skel-simul", "Default to 1. Set to 0 to disable simulation \
|
||||||
on the skeleton automaton during compositional suspension. Only used when \
|
on the skeleton automaton during compositional suspension. Only used when \
|
||||||
comp-susp=1.") },
|
comp-susp=1.") },
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,7 @@ namespace spot
|
||||||
relabel_bool_ = 4;
|
relabel_bool_ = 4;
|
||||||
tls_impl_ = -1;
|
tls_impl_ = -1;
|
||||||
ltl_split_ = true;
|
ltl_split_ = true;
|
||||||
|
exprop_ = -1;
|
||||||
|
|
||||||
opt_ = opt;
|
opt_ = opt;
|
||||||
if (!opt)
|
if (!opt)
|
||||||
|
|
@ -62,6 +63,7 @@ namespace spot
|
||||||
ltl_split_ = opt->get("ltl-split", 1);
|
ltl_split_ = opt->get("ltl-split", 1);
|
||||||
int tls_max_states = opt->get("tls-max-states", 64);
|
int tls_max_states = opt->get("tls-max-states", 64);
|
||||||
tls_max_states_ = std::max(0, tls_max_states);
|
tls_max_states_ = std::max(0, tls_max_states);
|
||||||
|
exprop_ = opt->get("exprop", -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void translator::build_simplifier(const bdd_dict_ptr& dict)
|
void translator::build_simplifier(const bdd_dict_ptr& dict)
|
||||||
|
|
@ -396,7 +398,9 @@ namespace spot
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bool exprop = unambiguous || level_ == postprocessor::High;
|
bool exprop = unambiguous
|
||||||
|
|| (level_ == postprocessor::High && exprop_ != 0)
|
||||||
|
|| exprop_ > 0;
|
||||||
aut = ltl_to_tgba_fm(r, simpl_->get_dict(), exprop,
|
aut = ltl_to_tgba_fm(r, simpl_->get_dict(), exprop,
|
||||||
true, false, false, nullptr, nullptr,
|
true, false, false, nullptr, nullptr,
|
||||||
unambiguous);
|
unambiguous);
|
||||||
|
|
|
||||||
|
|
@ -155,6 +155,7 @@ namespace spot
|
||||||
bool gf_guarantee_set_ = false;
|
bool gf_guarantee_set_ = false;
|
||||||
bool ltl_split_;
|
bool ltl_split_;
|
||||||
unsigned tls_max_states_ = 0;
|
unsigned tls_max_states_ = 0;
|
||||||
|
int exprop_;
|
||||||
const option_map* opt_;
|
const option_map* opt_;
|
||||||
};
|
};
|
||||||
/// @}
|
/// @}
|
||||||
|
|
|
||||||
|
|
@ -485,3 +485,21 @@ f='(!(G({(a)} |=> {(b)[*12]})))'
|
||||||
test 14,1 = `ltl2tgba -B --stats=%s,%d "$f"`
|
test 14,1 = `ltl2tgba -B --stats=%s,%d "$f"`
|
||||||
f='(!(G({(a)} |=> {(b)[*13]})))'
|
f='(!(G({(a)} |=> {(b)[*13]})))'
|
||||||
test 15,0 = `ltl2tgba -B --stats=%s,%d "$f"`
|
test 15,0 = `ltl2tgba -B --stats=%s,%d "$f"`
|
||||||
|
|
||||||
|
# Related to Issue #298. The difference between the translation of
|
||||||
|
# this formula with --med and --high is just a different ordering of
|
||||||
|
# the states caused by the use of exprop.
|
||||||
|
opts="-x scc-filter=0,tls-impl=0,gf-guarantee=0,wdba-minimize=0"
|
||||||
|
f='G(p0 -> F(p1 & !p2 & X(!p2 U p3)))'
|
||||||
|
ltl2tgba $opts --med "$f" >med.hoa
|
||||||
|
ltl2tgba $opts,exprop=0 "$f" > high.hoa
|
||||||
|
diff med.hoa high.hoa
|
||||||
|
ltl2tgba $opts "$f" > high.hoa
|
||||||
|
test $(wc -l < med.hoa) = $(wc -l < high.hoa)
|
||||||
|
cmp med.hoa high.hoa && exit 1
|
||||||
|
autfilt --stats=%F:%s,%e med.hoa high.hoa >out
|
||||||
|
cat >exp <<EOF
|
||||||
|
med.hoa:4,14
|
||||||
|
high.hoa:4,14
|
||||||
|
EOF
|
||||||
|
diff exp out
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue