scc_map: fix computation of ap_set_of, and (indirectly) aprec_set_of
Reported by Étienne Renault. * src/tgbaalgos/scc.cc (build_map): Update root_.frond().supp for all transitions leaving the top state, not only those causing a merge. * src/tgbaalgos/scc.hh (ap_set_of): Clarify documentation. * src/tgbatest/kv.test: Add a test case.
This commit is contained in:
parent
561b852106
commit
08175025c9
3 changed files with 28 additions and 9 deletions
|
|
@ -1,5 +1,6 @@
|
||||||
// Copyright (C) 2008, 2009, 2011 Laboratoire de Recherche et
|
// -*- coding: utf-8 -*-
|
||||||
// Developpement de l'Epita.
|
// Copyright (C) 2008, 2009, 2011, 2012 Laboratoire de Recherche et
|
||||||
|
// Développement de l'Epita.
|
||||||
//
|
//
|
||||||
// This file is part of Spot, a model checking library.
|
// This file is part of Spot, a model checking library.
|
||||||
//
|
//
|
||||||
|
|
@ -212,6 +213,7 @@ namespace spot
|
||||||
++self_loops_;
|
++self_loops_;
|
||||||
bdd acc = succ->current_acceptance_conditions();
|
bdd acc = succ->current_acceptance_conditions();
|
||||||
bdd cond = succ->current_condition();
|
bdd cond = succ->current_condition();
|
||||||
|
root_.front().supp &= bdd_support(cond);
|
||||||
// ... and point the iterator to the next successor, for
|
// ... and point the iterator to the next successor, for
|
||||||
// the next iteration.
|
// the next iteration.
|
||||||
succ->next();
|
succ->next();
|
||||||
|
|
@ -268,7 +270,7 @@ namespace spot
|
||||||
succ_type succs;
|
succ_type succs;
|
||||||
cond_set conds;
|
cond_set conds;
|
||||||
conds.insert(cond);
|
conds.insert(cond);
|
||||||
bdd supp = bdd_support(cond);
|
bdd supp = bddtrue;
|
||||||
bdd all = aut_->all_acceptance_conditions();
|
bdd all = aut_->all_acceptance_conditions();
|
||||||
bdd useful = conv.as_full_product(acc);
|
bdd useful = conv.as_full_product(acc);
|
||||||
while (threshold > root_.front().index)
|
while (threshold > root_.front().index)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
// Copyright (C) 2008, 2009, 2010, 2011 Laboratoire de Recherche et
|
// -*- coding: utf-8 -*-
|
||||||
// Developpement de l'Epita.
|
// Copyright (C) 2008, 2009, 2010, 2011, 2012 Laboratoire de Recherche
|
||||||
|
// et Développement de l'Epita.
|
||||||
//
|
//
|
||||||
// This file is part of Spot, a model checking library.
|
// This file is part of Spot, a model checking library.
|
||||||
//
|
//
|
||||||
|
|
@ -122,10 +123,14 @@ namespace spot
|
||||||
/// \pre This should only be called once build_map() has run.
|
/// \pre This should only be called once build_map() has run.
|
||||||
const cond_set& cond_set_of(unsigned n) const;
|
const cond_set& cond_set_of(unsigned n) const;
|
||||||
|
|
||||||
/// \brief Return the set of atomic properties occurring in an SCC.
|
/// \brief Return the set of atomic properties occurring on the
|
||||||
|
/// transitions leaving states from SCC \a n.
|
||||||
|
///
|
||||||
|
/// The transitions considered are all transitions inside SCC
|
||||||
|
/// \a n, as well as the transitions leaving SCC \a n.
|
||||||
///
|
///
|
||||||
/// \return a BDD that is a conjuction of all atomic properties
|
/// \return a BDD that is a conjuction of all atomic properties
|
||||||
/// occurring on the transitions in the SCC n.
|
/// occurring on the transitions leaving the states of SCC \a n.
|
||||||
///
|
///
|
||||||
/// \pre This should only be called once build_map() has run.
|
/// \pre This should only be called once build_map() has run.
|
||||||
bdd ap_set_of(unsigned n) const;
|
bdd ap_set_of(unsigned n) const;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Copyright (C) 2009, 2010, 2011 Laboratoire de Recherche et
|
# -*- coding: utf-8 -*-
|
||||||
# Development de l'EPITA.
|
# Copyright (C) 2009, 2010, 2011, 2012 Laboratoire de Recherche et
|
||||||
|
# Développement de l'EPITA.
|
||||||
#
|
#
|
||||||
# This file is part of Spot, a model checking library.
|
# This file is part of Spot, a model checking library.
|
||||||
#
|
#
|
||||||
|
|
@ -40,3 +41,14 @@ check '((Xp2)U(X(1)))&(p1 R(p2 R p0))'
|
||||||
|
|
||||||
# Make sure escaped variables print OK.
|
# Make sure escaped variables print OK.
|
||||||
check '"G1"U"GG" && "FF"'
|
check '"G1"U"GG" && "FF"'
|
||||||
|
|
||||||
|
|
||||||
|
# Make sure we count 4 atomic propositions in
|
||||||
|
# G("P_1.p2" <-> (F"P_1.p3" & ("P_0.p3" | (X"P_1.CS" U "P_1.p2")))) U G"P_1.p2"
|
||||||
|
# even after iterated simulation
|
||||||
|
# Report from Etienne Renault.
|
||||||
|
|
||||||
|
../ltl2tgba -KV -R3 -RIS >out \
|
||||||
|
'G("P_1.p2" <-> (F"P_1.p3" & ("P_0.p3" | (X"P_1.CS" U "P_1.p2")))) U G"P_1.p2"'
|
||||||
|
x=`sed -n '/APre/{s/.*APrec=\[\([^]]*\)\].*/\1/p;q}' out | tr ' ' '\n' | wc -l`
|
||||||
|
test "$x" = 4
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue