simulation: fix merging transiant SCCs

This fixes #452, and also fix a bug related to transiant SCCs
incorrectly merged in cosimulation: the source of the edges was
updated without fixing the chaining of the edges.

* spot/twaalgos/simulation.cc: Fix all the above.
* tests/python/simstate.py: Add test case from issue #452.
* tests/core/det.test, tests/core/ltlsynt.test,
tests/core/satmin.test: Lower expected sizes.
* tests/python/decompose.ipynb: Adjust for changed order.
This commit is contained in:
Alexandre Duret-Lutz 2021-04-19 23:38:50 +02:00
parent cfa3417449
commit fca6513604
6 changed files with 203 additions and 142 deletions

View file

@ -1,6 +1,6 @@
#!/bin/sh
# -*- coding: utf-8 -*-
# Copyright (C) 2013-2020 Laboratoire de Recherche et Développement de
# Copyright (C) 2013-2021 Laboratoire de Recherche et Développement de
# l'Epita (LRDE).
#
# This file is part of Spot, a model checking library.
@ -42,7 +42,7 @@ cat >formulas <<'EOF'
1,9,X(a R ((!b & F!c) M X!a))
1,2,XG!a R Fb
1,4,GFc | (a & Fb)
1,6,X(a R (Fb R F!b))
1,4,X(a R (Fb R F!b))
1,1,G(Xa M Fa)
1,3,X(Gb | GFa)
1,9,X(Gc | XG((b & Ga) | (!b & F!a)))

View file

@ -1,6 +1,6 @@
#! /bin/sh
# -*- coding: utf-8 -*-
# Copyright (C) 2017, 2019, 2020 Laboratoire de Recherche et
# Copyright (C) 2017, 2019-2021 Laboratoire de Recherche et
# Développement de l'Epita (LRDE).
#
# This file is part of Spot, a model checking library.
@ -376,6 +376,6 @@ diff out exp
f='Fp0 U XX((p0 & F!p1) | (!p0 & Gp1))'
ltlsynt --verbose --algo=ps --outs=p1 --ins=p0 -f "$f" 2>err
grep 'DPA has 14 states' err
grep 'DPA has 13 states' err
ltlsynt --verbose -x wdba-minimize=1 --algo=ps --outs=p1 --ins=p0 -f "$f" 2>err
grep 'DPA has 12 states' err

View file

@ -1,7 +1,7 @@
#!/bin/sh
# -*- coding: utf-8 -*-
# Copyright (C) 2013, 2017, 2018, 2019 Laboratoire de Recherche et Développement
# de l'Epita (LRDE).
# Copyright (C) 2013, 2017-2019, 2021 Laboratoire de Recherche et
# Développement de l'Epita (LRDE).
#
# This file is part of Spot, a model checking library.
#
@ -1300,8 +1300,8 @@ cat >expected <<'EOF'
"!((G(F(p0))) | ((p1) & (F(p2))))","15",5
"!((G(F(p0))) | ((p1) & (F(p2))))","16",5
"!((G(F(p0))) | ((p1) & (F(p2))))","17",5
"X((p0) R ((F(p1)) R (F(!(p1)))))","1",6
"X((p0) R ((F(p1)) R (F(!(p1)))))","2",6
"X((p0) R ((F(p1)) R (F(!(p1)))))","1",4
"X((p0) R ((F(p1)) R (F(!(p1)))))","2",4
"X((p0) R ((F(p1)) R (F(!(p1)))))","3",4
"X((p0) R ((F(p1)) R (F(!(p1)))))","4",4
"X((p0) R ((F(p1)) R (F(!(p1)))))","6",4