fix eventual/universal properties for ->/<->/xor
* spot/tl/formula.cc: Correctly set eventual and universal properties for ->, <->, and xor. This wasn't really relevant before, but there are now situation where those are not rewritten. * tests/core/kind.test: Adjust expected output. * tests/core/ltl2tgba2.test: New test case, reported by Florian Renkin. * NEWS: Mention the bug.
This commit is contained in:
parent
b6c4145599
commit
244e3a9731
4 changed files with 24 additions and 12 deletions
3
NEWS
3
NEWS
|
|
@ -2,6 +2,9 @@ New in spot 2.9.6.dev (not yet released)
|
|||
|
||||
Nothing yet.
|
||||
|
||||
- Some formulas using ->, <->, or xor were not properly detected as
|
||||
purely universal or pure eventualities.
|
||||
|
||||
New in spot 2.9.6 (2021-01-18)
|
||||
|
||||
Build:
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// -*- coding: utf-8 -*-
|
||||
// Copyright (C) 2015-2019 Laboratoire de Recherche et Développement
|
||||
// de l'Epita (LRDE).
|
||||
// Copyright (C) 2015-2019, 2021 Laboratoire de Recherche et
|
||||
// Développement de l'Epita (LRDE).
|
||||
//
|
||||
// This file is part of Spot, a model checking library.
|
||||
//
|
||||
|
|
@ -1283,8 +1283,8 @@ namespace spot
|
|||
case op::Xor:
|
||||
case op::Equiv:
|
||||
props = children[0]->props & children[1]->props;
|
||||
is_.eventual = false;
|
||||
is_.universal = false;
|
||||
// Preserve suspendable property
|
||||
is_.eventual = is_.universal = is_.eventual && is_.universal;
|
||||
is_.sere_formula = is_.boolean;
|
||||
is_.sugar_free_boolean = false;
|
||||
is_.in_nenoform = false;
|
||||
|
|
@ -1310,8 +1310,10 @@ namespace spot
|
|||
break;
|
||||
case op::Implies:
|
||||
props = children[0]->props & children[1]->props;
|
||||
is_.eventual = false;
|
||||
is_.universal = false;
|
||||
is_.eventual =
|
||||
children[0]->is_universal() && children[1]->is_eventual();
|
||||
is_.universal =
|
||||
children[0]->is_eventual() && children[1]->is_universal();
|
||||
is_.sere_formula = (children[0]->is_boolean()
|
||||
&& children[1]->is_sere_formula());
|
||||
is_.sugar_free_boolean = false;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#! /bin/sh
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (C) 2010-2012, 2015, 2017, 2019 Laboratoire de Recherche
|
||||
# et Développement de l'Epita (LRDE).
|
||||
# Copyright (C) 2010-2012, 2015, 2017, 2019, 2021 Laboratoire de
|
||||
# Recherche et Développement de l'Epita (LRDE).
|
||||
#
|
||||
# This file is part of Spot, a model checking library.
|
||||
#
|
||||
|
|
@ -47,8 +47,8 @@ a U (b U (c U d)),&!xfLPgopra
|
|||
a W (b W (c W d)),&!xfLPsopra
|
||||
a M (b M (c M d)),&!xfLPgopra
|
||||
Fa -> Fb,xLPopra
|
||||
Ga -> Fb,xLPgopra
|
||||
Fa -> Gb,xLPsopra
|
||||
Ga -> Fb,xLPegopra
|
||||
Fa -> Gb,xLPusopra
|
||||
(Ga|Fc) -> Fb,xLPopra
|
||||
(Ga|Fa) -> Gb,xLPopra
|
||||
{a;c*;b}|->!Xb,&fPsopra
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (C) 2009-2020 Laboratoire de Recherche et Développement de
|
||||
# Copyright (C) 2009-2021 Laboratoire de Recherche et Développement de
|
||||
# l'Epita (LRDE).
|
||||
# Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
|
||||
# département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||
|
|
@ -469,4 +469,11 @@ test "4,1" = `ltl2tgba -D -x wdba-minimize=2 "$f" --stats=%s,%d`
|
|||
test "4,0" = `ltl2tgba -D -x wdba-minimize=0 "$f" --stats=%s,%d`
|
||||
test "4,1" = `ltl2tgba -D --med "$f" --stats=%s,%d`
|
||||
|
||||
:
|
||||
# This used to fail because ltl-split would not detect
|
||||
# the (GFa <-> (GFb & GFc & GFd & GFe & GFf & GFg & GFh)) part
|
||||
# as suspendable.
|
||||
f='G((a -> X((!a U b) | G!a)) & (a -> X(G!a | (!a U c))) & (a -> X(G!a
|
||||
| (!a U d))) & (a -> X(G!a | (!a U e))) & (a -> X(G!a | (!a U f))) &
|
||||
(a -> X(G!a | (!a U g))) & (a -> X(G!a | (!a U h)))) & (GFa <-> (GFb &
|
||||
GFc & GFd & GFe & GFf & GFg & GFh))'
|
||||
test 128 = `ltl2tgba -G -D "$f" --stats=%s`
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue