translate: add support for -x tls-impl=N
This is long overdue, and we probably want to use tls-impl=1 in ltlsynt. * spot/twaalgos/translate.cc, spot/twaalgos/translate.hh: Add support for tls-impl=N. * tests/core/ltl2tgba.test: Test it. * bin/spot-x.cc, NEWS: Document it.
This commit is contained in:
parent
9b18729721
commit
689aa7fdc0
5 changed files with 52 additions and 3 deletions
4
NEWS
4
NEWS
|
|
@ -36,6 +36,10 @@ New in spot 2.4.1.dev (not yet released)
|
||||||
|
|
||||||
- ltldo learned to limit the number of automata it outputs using -n.
|
- ltldo learned to limit the number of automata it outputs using -n.
|
||||||
|
|
||||||
|
- The new -x tls-impl=N option allows to fine-tune the
|
||||||
|
implication-based simplification rules of ltl2tgba. See the
|
||||||
|
spot-x man-page for details.
|
||||||
|
|
||||||
Library:
|
Library:
|
||||||
|
|
||||||
- Rename three methods of spot::scc_info. New names are clearer. The
|
- Rename three methods of spot::scc_info. New names are clearer. The
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,13 @@ value) is a shorthand for KEY=1, while !KEY is a shorthand for KEY=0.";
|
||||||
|
|
||||||
static const argp_option options[] =
|
static const argp_option options[] =
|
||||||
{
|
{
|
||||||
|
{ nullptr, 0, nullptr, 0, "Temporal logic simplification options:", 0 },
|
||||||
|
{ DOC("tls-impl",
|
||||||
|
"Control usage of implication-based rewriting. \
|
||||||
|
(0) disables it, (1) enables rules based on syntactic implications, \
|
||||||
|
(2) additionally allows automata-based implication checks, (3) enables \
|
||||||
|
more rules based on automata-based implication checks. The default value \
|
||||||
|
depends on the --low/--medium/--high settings.") },
|
||||||
{ nullptr, 0, nullptr, 0, "Translation options:", 0 },
|
{ nullptr, 0, nullptr, 0, "Translation options:", 0 },
|
||||||
{ DOC("comp-susp", "Set to 1 to enable compositional suspension, \
|
{ DOC("comp-susp", "Set to 1 to enable compositional suspension, \
|
||||||
as described in our SPIN'13 paper (see Bibliography below). Set to 2, \
|
as described in our SPIN'13 paper (see Bibliography below). Set to 2, \
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ namespace spot
|
||||||
void translator::setup_opt(const option_map* opt)
|
void translator::setup_opt(const option_map* opt)
|
||||||
{
|
{
|
||||||
comp_susp_ = early_susp_ = skel_wdba_ = skel_simul_ = 0;
|
comp_susp_ = early_susp_ = skel_wdba_ = skel_simul_ = 0;
|
||||||
relabel_bool_ = -1;
|
relabel_bool_ = tls_impl_ = -1;
|
||||||
|
|
||||||
if (!opt)
|
if (!opt)
|
||||||
return;
|
return;
|
||||||
|
|
@ -43,6 +43,7 @@ namespace spot
|
||||||
skel_wdba_ = opt->get("skel-wdba", -1);
|
skel_wdba_ = opt->get("skel-wdba", -1);
|
||||||
skel_simul_ = opt->get("skel-simul", 1);
|
skel_simul_ = opt->get("skel-simul", 1);
|
||||||
}
|
}
|
||||||
|
tls_impl_ = opt->get("tls-impl", -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void translator::build_simplifier(const bdd_dict_ptr& dict)
|
void translator::build_simplifier(const bdd_dict_ptr& dict)
|
||||||
|
|
@ -61,6 +62,34 @@ namespace spot
|
||||||
options.reduce_basics = true;
|
options.reduce_basics = true;
|
||||||
options.event_univ = true;
|
options.event_univ = true;
|
||||||
}
|
}
|
||||||
|
// User-supplied fine-tuning?
|
||||||
|
if (tls_impl_ >= 0)
|
||||||
|
switch (tls_impl_)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
options.synt_impl = false;
|
||||||
|
options.containment_checks = false;
|
||||||
|
options.containment_checks_stronger = false;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
options.synt_impl = true;
|
||||||
|
options.containment_checks = false;
|
||||||
|
options.containment_checks_stronger = false;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
options.synt_impl = true;
|
||||||
|
options.containment_checks = true;
|
||||||
|
options.containment_checks_stronger = false;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
options.synt_impl = true;
|
||||||
|
options.containment_checks = true;
|
||||||
|
options.containment_checks_stronger = true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw std::runtime_error
|
||||||
|
("tls-impl should take a value between 0 and 3");
|
||||||
|
}
|
||||||
simpl_owned_ = simpl_ = new tl_simplifier(options, dict);
|
simpl_owned_ = simpl_ = new tl_simplifier(options, dict);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -74,15 +74,15 @@ namespace spot
|
||||||
translator(const bdd_dict_ptr& dict, const option_map* opt = nullptr)
|
translator(const bdd_dict_ptr& dict, const option_map* opt = nullptr)
|
||||||
: postprocessor(opt)
|
: postprocessor(opt)
|
||||||
{
|
{
|
||||||
build_simplifier(dict);
|
|
||||||
setup_opt(opt);
|
setup_opt(opt);
|
||||||
|
build_simplifier(dict);
|
||||||
}
|
}
|
||||||
|
|
||||||
translator(const option_map* opt = nullptr)
|
translator(const option_map* opt = nullptr)
|
||||||
: postprocessor(opt)
|
: postprocessor(opt)
|
||||||
{
|
{
|
||||||
build_simplifier(make_bdd_dict());
|
|
||||||
setup_opt(opt);
|
setup_opt(opt);
|
||||||
|
build_simplifier(make_bdd_dict());
|
||||||
}
|
}
|
||||||
|
|
||||||
~translator()
|
~translator()
|
||||||
|
|
@ -147,6 +147,7 @@ namespace spot
|
||||||
int skel_wdba_;
|
int skel_wdba_;
|
||||||
int skel_simul_;
|
int skel_simul_;
|
||||||
int relabel_bool_;
|
int relabel_bool_;
|
||||||
|
int tls_impl_;
|
||||||
};
|
};
|
||||||
/// @}
|
/// @}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -270,3 +270,11 @@ test 3 = `ltl2tgba -f 'G(Fa & Fb) U a' --stats=%s`
|
||||||
# report inconsistent "universal" property.
|
# report inconsistent "universal" property.
|
||||||
ltl2tgba --low 'X(((1) U (p1)) | (((p1) | (F(p0))) U ((0) R ((p2) M (p1)))))'>o
|
ltl2tgba --low 'X(((1) U (p1)) | (((p1) | (F(p0))) U ((0) R ((p2) M (p1)))))'>o
|
||||||
grep deterministic o
|
grep deterministic o
|
||||||
|
|
||||||
|
# test tls-impl=N
|
||||||
|
f='(Fp0 W p0) & G((Gp0 W Xp0) M !Gp1)'
|
||||||
|
ltl2tgba -f "$f" --low -x tls-impl=4 --stats=%s && exit 1
|
||||||
|
test 4 = `ltl2tgba -f "$f" --low -x tls-impl=0 --stats=%s`
|
||||||
|
test 3 = `ltl2tgba -f "$f" --low -x tls-impl=1 --stats=%s`
|
||||||
|
test 2 = `ltl2tgba -f "$f" --low -x tls-impl=2 --stats=%s`
|
||||||
|
test 2 = `ltl2tgba -f "$f" --low -x tls-impl=3 --stats=%s`
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue