relabel_bse: rework to simplify more patterns

Rework the way we compute and use cut-points to catch more patterns we
can rewrite.  Also Use BDDs to check if a Boolean sub-expression is
false or true.   Fixes issue #540.

* spot/tl/relabel.hh: Update documentation
* spot/tl/relabel.cc (relabel_bse): Rework.
* tests/core/ltlfilt.test: Add more test cases.
* tests/python/_mealy.ipynb: Update.
* NEWS: Mention the change.
This commit is contained in:
Alexandre Duret-Lutz 2023-09-13 11:31:49 +02:00
parent cbb981ffd5
commit 7149521f48
5 changed files with 305 additions and 159 deletions

View file

@ -53,13 +53,13 @@ namespace spot
/// proposition for each maximal Boolean subexpression encountered,
/// even if they overlap (i.e., share common atomic
/// propositions). For instance `(a & b & c) U (c & d & e)` will be
/// simply be relabeled as `p0 U p1`. This kind of renaming to not
/// preserves the
/// simply be relabeled as `p0 U p1`. This kind of renaming does not
/// preserve the satisfiability of the input formula.
///
/// The relabel_bse() version will make sure that the replaced
/// subexpressions do not share atomic propositions. For instance
/// `(a & b & c) U (c & d & e)` will be simply be relabeled as
/// `(p0 & p1) U (p1 & p2)`, were `p1` replaces `c` and the rest
/// `(a & b & c) U (!c & d & e)` will be simply be relabeled as
/// `(p0 & p1) U (!p1 & p2)`, were `p1` replaces `c` and the rest
/// is obvious.
///
/// @{