dualize: should not call cleanup_acceptance_here

Based on a report by Emmanuel Filiot, who was surprized that dualizing
Büchi did not always produce co-Büchi.

* spot/twaalgos/dualize.cc: Remove the call to
cleanup_acceptance_here.
* spot/twaalgos/dualize.hh: Improve documentation.
* NEWS: Mention the possible backward incompatible change.
* tests/core/dualize.test, tests/python/dualize.py,
tests/python/pdegen.py: Adjust test cases.
* spot/twaalgos/complement.cc (complement): Call
cleanup_acceptance_here when dualize() returns a smaller automaton.
* THANKS: Add Emmanuel.
This commit is contained in:
Alexandre Duret-Lutz 2024-03-06 17:53:23 +01:00
parent 60f046a574
commit 1b81ecb80c
8 changed files with 67 additions and 23 deletions

View file

@ -49,8 +49,7 @@ HOA: v1
States: 2
Start: 0
AP: 2 "a" "b"
acc-name: all
Acceptance: 0 t
Acceptance: 3 (Fin(0)|Fin(1)) | Inf(2)
properties: trans-labels explicit-labels trans-acc complete
properties: deterministic
--BODY--
@ -114,8 +113,7 @@ HOA: v1
States: 9
Start: 8
AP: 2 "p0" "p1"
acc-name: co-Buchi
Acceptance: 1 Fin(0)
Acceptance: 2 Fin(0) & Fin(1)
properties: trans-labels explicit-labels state-acc univ-branch
--BODY--
State: 0
@ -148,8 +146,7 @@ HOA: v1
States: 9
Start: 8
AP: 2 "p0" "p1"
acc-name: co-Buchi
Acceptance: 1 Fin(0)
Acceptance: 2 Fin(0) & Fin(1)
properties: trans-labels explicit-labels state-acc univ-branch
Alias: @a 0&!1
Alias: @b !0&!1

View file

@ -191,8 +191,8 @@ tc.assertEqual(h, """HOA: v1
States: 2
Start: 1
AP: 2 "a" "b"
acc-name: all
Acceptance: 0 t
acc-name: co-Buchi
Acceptance: 1 Fin(0)
properties: trans-labels explicit-labels state-acc deterministic
--BODY--
State: 0
@ -227,8 +227,7 @@ tc.assertEqual(h, """HOA: v1
States: 2
Start: 1
AP: 2 "a" "b"
acc-name: all
Acceptance: 0 t
Acceptance: 2 Fin(0) & Fin(1)
properties: trans-labels explicit-labels state-acc deterministic
--BODY--
State: 0

View file

@ -115,6 +115,8 @@ tc.assertEqual(dd.num_states(), 1)
tc.assertEqual(str(dd.get_acceptance()), 'Inf(1) & Fin(0)')
e = spot.dualize(b)
spot.cleanup_acceptance_here(e)
tc.assertEqual(str(e.get_acceptance()), 'Fin(0)|Fin(1)')
de = spot.partial_degeneralize(e, [0, 1])
tc.assertTrue(de.equivalent_to(e))
tc.assertEqual(de.num_states(), 4)