is_unambiguous: fix false negatives again

Reported by Simon Jantsch and David Müller.

* spot/twaalgos/isunamb.cc (is_unambiguous): Rewrite wihtout assuming
that the product of two accepting SCCs is accepting,  Also use
the result of is_accepting_scc()/is_rejectng_scc() when available.
* spot/twaalgos/sccinfo.cc, spot/twaalgos/sccinfo.hh: Make it
possible to check the acceptance of a unique SCC.
* tests/core/unambig.test: Add more test cases.
This commit is contained in:
Alexandre Duret-Lutz 2018-04-15 13:51:39 +02:00
parent befdb03c9a
commit 2fe67769d7
4 changed files with 107 additions and 32 deletions

View file

@ -285,6 +285,7 @@ EOF
run 1 autfilt -q --is-unambiguous smaller.hoa
# These automata come from Simon Jantsch and David Müller.
# They exposed bugs in the optimized version of our unambiguous check.
cat >sjdb.hoa <<EOF
HOA: v1
name: "G(!a | !b) & (Ga | G(b | XGb))"
@ -332,6 +333,51 @@ State: 3
State: 4 {0}
[!0&1] 4
--END--
HOA: v1
States: 3
Start: 0
AP: 2 "p0" "p1"
acc-name: Buchi
Acceptance: 1 Inf(0)
properties: trans-labels explicit-labels trans-acc
--BODY--
State: 0 "((G (! (p0))) R ((! (p1)) | (G (! (p0)))))"
[!0] 1 {0}
[0&!1] 0 {0}
[!0&!1] 2
State: 1 "(G (! (p0)))"
[!0] 1 {0}
State: 2 "((G (! (p0))) R ((! (p1)) | (G (! (p0))))) & (F (p0))"
[0&!1] 0 {0}
[!0&!1] 2
--END--
EOF
test 2 = `autfilt -c --is-unambiguous sjdb.hoa`
test 3 = `autfilt -c --is-unambiguous sjdb.hoa`
# This automaton requires emptiness of SCC with Fin-acceptance.
cat >ambig.hoa<<EOF
HOA: v1
States: 5
Start: 4
AP: 2 "p0" "p1"
Acceptance: 4 Fin(0) & Fin(1)
--BODY--
State: 0
[0] 0 {0}
[!0] 1
State: 1
[1] 1 {1}
[!1] 0
State: 2
[0] 2 {0}
[!0] 3
State: 3
[1] 3 {1}
[!1] 2
State: 4
[0] 0
[0] 2
--END--
EOF
test 0 = `autfilt -c --is-unambiguous ambig.hoa`