Track SERE formulas.
* src/ltlast/atomic_prop.cc, src/ltlast/automatop.cc, src/ltlast/binop.cc, src/ltlast/bunop.cc, src/ltlast/constant.cc, src/ltlast/formula.cc, src/ltlast/formula.hh, src/ltlast/multop.cc, src/ltlast/unop.cc: Add a bit is.sere_formula to track SEREs, and fix tracking of PSL formulae. * src/ltltest/kind.test: Adjust.
This commit is contained in:
parent
fdd73d5123
commit
459921ef60
10 changed files with 50 additions and 18 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2009, 2010 Laboratoire de Recherche et Développement
|
// Copyright (C) 2009, 2010, 2011 Laboratoire de Recherche et Développement
|
||||||
// de l'Epita (LRDE).
|
// de l'Epita (LRDE).
|
||||||
// Copyright (C) 2003, 2004, 2005 Laboratoire d'Informatique de
|
// Copyright (C) 2003, 2004, 2005 Laboratoire d'Informatique de
|
||||||
// Paris 6 (LIP6), département Systèmes Répartis Coopératifs (SRC),
|
// Paris 6 (LIP6), département Systèmes Répartis Coopératifs (SRC),
|
||||||
|
|
@ -42,6 +42,7 @@ namespace spot
|
||||||
is.ltl_formula = true;
|
is.ltl_formula = true;
|
||||||
is.eltl_formula = true;
|
is.eltl_formula = true;
|
||||||
is.psl_formula = true;
|
is.psl_formula = true;
|
||||||
|
is.sere_formula = true;
|
||||||
is.eventual = false;
|
is.eventual = false;
|
||||||
is.universal = false;
|
is.universal = false;
|
||||||
is.not_marked = true;
|
is.not_marked = true;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright (C) 2008, 2009, 2010 Laboratoire de Recherche et Developpement
|
// Copyright (C) 2008, 2009, 2010, 2011 Laboratoire de Recherche et
|
||||||
// de l'Epita (LRDE)
|
// Developpement de l'Epita (LRDE)
|
||||||
//
|
//
|
||||||
// This file is part of Spot, a model checking library.
|
// This file is part of Spot, a model checking library.
|
||||||
//
|
//
|
||||||
|
|
@ -38,6 +38,7 @@ namespace spot
|
||||||
is.ltl_formula = false;
|
is.ltl_formula = false;
|
||||||
is.eltl_formula = true;
|
is.eltl_formula = true;
|
||||||
is.psl_formula = false;
|
is.psl_formula = false;
|
||||||
|
is.sere_formula = false;
|
||||||
is.eventual = false;
|
is.eventual = false;
|
||||||
is.universal = false;
|
is.universal = false;
|
||||||
is.not_marked = true;
|
is.not_marked = true;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2009, 2010 Laboratoire de Recherche et Développement
|
// Copyright (C) 2009, 2010, 2011 Laboratoire de Recherche et Développement
|
||||||
// de l'Epita (LRDE).
|
// de l'Epita (LRDE).
|
||||||
// Copyright (C) 2003, 2005 Laboratoire d'Informatique de Paris
|
// Copyright (C) 2003, 2005 Laboratoire d'Informatique de Paris
|
||||||
// 6 (LIP6), département Systèmes Répartis Coopératifs (SRC),
|
// 6 (LIP6), département Systèmes Répartis Coopératifs (SRC),
|
||||||
|
|
@ -54,6 +54,7 @@ namespace spot
|
||||||
case Xor:
|
case Xor:
|
||||||
case Implies:
|
case Implies:
|
||||||
case Equiv:
|
case Equiv:
|
||||||
|
is.sere_formula = is.boolean;
|
||||||
is.sugar_free_boolean = false;
|
is.sugar_free_boolean = false;
|
||||||
is.in_nenoform = false;
|
is.in_nenoform = false;
|
||||||
is.accepting_eword = false;
|
is.accepting_eword = false;
|
||||||
|
|
@ -66,7 +67,11 @@ namespace spot
|
||||||
is.ltl_formula = false;
|
is.ltl_formula = false;
|
||||||
is.boolean = false;
|
is.boolean = false;
|
||||||
is.eltl_formula = false;
|
is.eltl_formula = false;
|
||||||
|
is.sere_formula = false;
|
||||||
is.accepting_eword = false;
|
is.accepting_eword = false;
|
||||||
|
is.psl_formula = true;
|
||||||
|
assert(first->is_sere_formula());
|
||||||
|
assert(second->is_psl_formula());
|
||||||
break;
|
break;
|
||||||
case U:
|
case U:
|
||||||
// 1 U a = Fa
|
// 1 U a = Fa
|
||||||
|
|
@ -74,6 +79,7 @@ namespace spot
|
||||||
is.eventual = 1;
|
is.eventual = 1;
|
||||||
is.boolean = false;
|
is.boolean = false;
|
||||||
is.eltl_formula = false;
|
is.eltl_formula = false;
|
||||||
|
is.sere_formula = false;
|
||||||
is.accepting_eword = false;
|
is.accepting_eword = false;
|
||||||
break;
|
break;
|
||||||
case W:
|
case W:
|
||||||
|
|
@ -82,6 +88,7 @@ namespace spot
|
||||||
is.universal = 1;
|
is.universal = 1;
|
||||||
is.boolean = false;
|
is.boolean = false;
|
||||||
is.eltl_formula = false;
|
is.eltl_formula = false;
|
||||||
|
is.sere_formula = false;
|
||||||
is.accepting_eword = false;
|
is.accepting_eword = false;
|
||||||
break;
|
break;
|
||||||
case R:
|
case R:
|
||||||
|
|
@ -90,6 +97,7 @@ namespace spot
|
||||||
is.universal = 1;
|
is.universal = 1;
|
||||||
is.boolean = false;
|
is.boolean = false;
|
||||||
is.eltl_formula = false;
|
is.eltl_formula = false;
|
||||||
|
is.sere_formula = false;
|
||||||
is.accepting_eword = false;
|
is.accepting_eword = false;
|
||||||
break;
|
break;
|
||||||
case M:
|
case M:
|
||||||
|
|
@ -98,6 +106,7 @@ namespace spot
|
||||||
is.eventual = 1;
|
is.eventual = 1;
|
||||||
is.boolean = false;
|
is.boolean = false;
|
||||||
is.eltl_formula = false;
|
is.eltl_formula = false;
|
||||||
|
is.sere_formula = false;
|
||||||
is.accepting_eword = false;
|
is.accepting_eword = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -35,9 +35,11 @@ namespace spot
|
||||||
{
|
{
|
||||||
props = child->get_props();
|
props = child->get_props();
|
||||||
|
|
||||||
|
assert(is.sere_formula);
|
||||||
is.boolean = false;
|
is.boolean = false;
|
||||||
is.ltl_formula = false;
|
is.ltl_formula = false;
|
||||||
is.eltl_formula = false;
|
is.eltl_formula = false;
|
||||||
|
is.psl_formula = false;
|
||||||
is.eventual = false;
|
is.eventual = false;
|
||||||
is.universal = false;
|
is.universal = false;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2009, 2010 Laboratoire de Recherche et D<>veloppement
|
// Copyright (C) 2009, 2010, 2011 Laboratoire de Recherche et D<>veloppement
|
||||||
// de l'Epita (LRDE).
|
// de l'Epita (LRDE).
|
||||||
// Copyright (C) 2003, 2005 Laboratoire d'Informatique de Paris
|
// Copyright (C) 2003, 2005 Laboratoire d'Informatique de Paris
|
||||||
// 6 (LIP6), d<>partement Syst<73>mes R<>partis Coop<6F>ratifs (SRC),
|
// 6 (LIP6), d<>partement Syst<73>mes R<>partis Coop<6F>ratifs (SRC),
|
||||||
|
|
@ -48,6 +48,7 @@ namespace spot
|
||||||
is.ltl_formula = true;
|
is.ltl_formula = true;
|
||||||
is.eltl_formula = true;
|
is.eltl_formula = true;
|
||||||
is.psl_formula = true;
|
is.psl_formula = true;
|
||||||
|
is.sere_formula = true;
|
||||||
is.eventual = true;
|
is.eventual = true;
|
||||||
is.universal = true;
|
is.universal = true;
|
||||||
is.not_marked = true;
|
is.not_marked = true;
|
||||||
|
|
@ -61,7 +62,8 @@ namespace spot
|
||||||
is.sugar_free_ltl = true;
|
is.sugar_free_ltl = true;
|
||||||
is.ltl_formula = false;
|
is.ltl_formula = false;
|
||||||
is.eltl_formula = false;
|
is.eltl_formula = false;
|
||||||
is.psl_formula = true;
|
is.psl_formula = false;
|
||||||
|
is.sere_formula = true;
|
||||||
is.eventual = false;
|
is.eventual = false;
|
||||||
is.universal = false;
|
is.universal = false;
|
||||||
is.not_marked = true;
|
is.not_marked = true;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2009, 2010 Laboratoire de Recherche et Développement
|
// Copyright (C) 2009, 2010, 2011 Laboratoire de Recherche et Développement
|
||||||
// de l'Epita (LRDE).
|
// de l'Epita (LRDE).
|
||||||
// Copyright (C) 2003, 2005 Laboratoire d'Informatique de Paris 6 (LIP6),
|
// Copyright (C) 2003, 2005 Laboratoire d'Informatique de Paris 6 (LIP6),
|
||||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||||
|
|
@ -83,6 +83,7 @@ namespace spot
|
||||||
proprint(is_ltl_formula, "L", "LTL formula");
|
proprint(is_ltl_formula, "L", "LTL formula");
|
||||||
proprint(is_eltl_formula, "E", "ELTL formula");
|
proprint(is_eltl_formula, "E", "ELTL formula");
|
||||||
proprint(is_psl_formula, "P", "PSL formula");
|
proprint(is_psl_formula, "P", "PSL formula");
|
||||||
|
proprint(is_sere_formula, "S", "SERE formula");
|
||||||
proprint(is_eventual, "e", "pure eventuality");
|
proprint(is_eventual, "e", "pure eventuality");
|
||||||
proprint(is_universal, "u", "purely universal");
|
proprint(is_universal, "u", "purely universal");
|
||||||
proprint(is_marked, "+", "marked");
|
proprint(is_marked, "+", "marked");
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright (C) 2008, 2009, 2010 Laboratoire de Recherche et D<>veloppement
|
// Copyright (C) 2008, 2009, 2010, 2011 Laboratoire de Recherche et
|
||||||
// de l'Epita (LRDE).
|
// Développement de l'Epita (LRDE).
|
||||||
// Copyright (C) 2003, 2004, 2005 Laboratoire d'Informatique de
|
// Copyright (C) 2003, 2004, 2005 Laboratoire d'Informatique de
|
||||||
//
|
//
|
||||||
// This file is part of Spot, a model checking library.
|
// This file is part of Spot, a model checking library.
|
||||||
|
|
@ -170,6 +170,12 @@ namespace spot
|
||||||
return is.psl_formula;
|
return is.psl_formula;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Whether the formula use only SERE operators.
|
||||||
|
bool is_sere_formula() const
|
||||||
|
{
|
||||||
|
return is.sere_formula;
|
||||||
|
}
|
||||||
|
|
||||||
/// \brief Whether the formula is purely eventual.
|
/// \brief Whether the formula is purely eventual.
|
||||||
///
|
///
|
||||||
/// Pure eventuality formulae are defined in
|
/// Pure eventuality formulae are defined in
|
||||||
|
|
@ -279,6 +285,7 @@ namespace spot
|
||||||
bool ltl_formula:1; // Only LTL operators.
|
bool ltl_formula:1; // Only LTL operators.
|
||||||
bool eltl_formula:1; // Only ELTL operators.
|
bool eltl_formula:1; // Only ELTL operators.
|
||||||
bool psl_formula:1; // Only PSL operators.
|
bool psl_formula:1; // Only PSL operators.
|
||||||
|
bool sere_formula:1; // Only SERE operators.
|
||||||
bool eventual:1; // Purely eventual formula.
|
bool eventual:1; // Purely eventual formula.
|
||||||
bool universal:1; // Purely universal formula.
|
bool universal:1; // Purely universal formula.
|
||||||
bool not_marked:1; // No occurrence of EConcatMarked.
|
bool not_marked:1; // No occurrence of EConcatMarked.
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2009, 2010 Laboratoire de Recherche et D<>veloppement
|
// Copyright (C) 2009, 2010, 2011 Laboratoire de Recherche et D<>veloppement
|
||||||
// de l'Epita (LRDE).
|
// de l'Epita (LRDE).
|
||||||
// Copyright (C) 2003, 2004, 2005 Laboratoire d'Informatique de
|
// Copyright (C) 2003, 2004, 2005 Laboratoire d'Informatique de
|
||||||
// Paris 6 (LIP6), département Systèmes Répartis Coopératifs (SRC),
|
// Paris 6 (LIP6), département Systèmes Répartis Coopératifs (SRC),
|
||||||
|
|
@ -39,6 +39,8 @@ namespace spot
|
||||||
unsigned s = v->size();
|
unsigned s = v->size();
|
||||||
assert(s > 1);
|
assert(s > 1);
|
||||||
|
|
||||||
|
props = (*v)[0]->get_props();
|
||||||
|
|
||||||
switch (op)
|
switch (op)
|
||||||
{
|
{
|
||||||
case Concat:
|
case Concat:
|
||||||
|
|
@ -46,6 +48,7 @@ namespace spot
|
||||||
is.boolean = false;
|
is.boolean = false;
|
||||||
is.ltl_formula = false;
|
is.ltl_formula = false;
|
||||||
is.eltl_formula = false;
|
is.eltl_formula = false;
|
||||||
|
is.psl_formula = false;
|
||||||
is.eventual = false;
|
is.eventual = false;
|
||||||
is.universal = false;
|
is.universal = false;
|
||||||
// fall through
|
// fall through
|
||||||
|
|
@ -55,14 +58,12 @@ namespace spot
|
||||||
// Boolean flag, because applied to atomic propositions a&b
|
// Boolean flag, because applied to atomic propositions a&b
|
||||||
// has the same effect as a&&b.
|
// has the same effect as a&&b.
|
||||||
case And:
|
case And:
|
||||||
props = (*v)[0]->get_props();
|
|
||||||
for (unsigned i = 1; i < s; ++i)
|
for (unsigned i = 1; i < s; ++i)
|
||||||
props &= (*v)[i]->get_props();
|
props &= (*v)[i]->get_props();
|
||||||
break;
|
break;
|
||||||
case Or:
|
case Or:
|
||||||
{
|
{
|
||||||
bool ew = (*v)[0]->accepts_eword();
|
bool ew = (*v)[0]->accepts_eword();
|
||||||
props = (*v)[0]->get_props();
|
|
||||||
for (unsigned i = 1; i < s; ++i)
|
for (unsigned i = 1; i < s; ++i)
|
||||||
{
|
{
|
||||||
ew |= (*v)[i]->accepts_eword();
|
ew |= (*v)[i]->accepts_eword();
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2009, 2010 Laboratoire de Recherche et Développement
|
// Copyright (C) 2009, 2010, 2011 Laboratoire de Recherche et Développement
|
||||||
// de l'Epita (LRDE).
|
// de l'Epita (LRDE).
|
||||||
// Copyright (C) 2003, 2005 Laboratoire d'Informatique de Paris
|
// Copyright (C) 2003, 2005 Laboratoire d'Informatique de Paris
|
||||||
// 6 (LIP6), département Systèmes Répartis Coopératifs (SRC),
|
// 6 (LIP6), département Systèmes Répartis Coopératifs (SRC),
|
||||||
|
|
@ -40,17 +40,20 @@ namespace spot
|
||||||
{
|
{
|
||||||
case Not:
|
case Not:
|
||||||
is.in_nenoform = (child->kind() == AtomicProp);
|
is.in_nenoform = (child->kind() == AtomicProp);
|
||||||
|
is.sere_formula = is.boolean;
|
||||||
is.accepting_eword = false;
|
is.accepting_eword = false;
|
||||||
break;
|
break;
|
||||||
case X:
|
case X:
|
||||||
is.boolean = false;
|
is.boolean = false;
|
||||||
is.X_free = false;
|
is.X_free = false;
|
||||||
is.eltl_formula = false;
|
is.eltl_formula = false;
|
||||||
|
is.sere_formula = false;
|
||||||
is.accepting_eword = false;
|
is.accepting_eword = false;
|
||||||
break;
|
break;
|
||||||
case F:
|
case F:
|
||||||
is.boolean = false;
|
is.boolean = false;
|
||||||
is.eltl_formula = false;
|
is.eltl_formula = false;
|
||||||
|
is.sere_formula = false;
|
||||||
is.sugar_free_ltl = false;
|
is.sugar_free_ltl = false;
|
||||||
is.eventual = true;
|
is.eventual = true;
|
||||||
is.accepting_eword = false;
|
is.accepting_eword = false;
|
||||||
|
|
@ -58,6 +61,7 @@ namespace spot
|
||||||
case G:
|
case G:
|
||||||
is.boolean = false;
|
is.boolean = false;
|
||||||
is.eltl_formula = false;
|
is.eltl_formula = false;
|
||||||
|
is.sere_formula = false;
|
||||||
is.sugar_free_ltl = false;
|
is.sugar_free_ltl = false;
|
||||||
is.universal = true;
|
is.universal = true;
|
||||||
is.accepting_eword = false;
|
is.accepting_eword = false;
|
||||||
|
|
@ -66,6 +70,7 @@ namespace spot
|
||||||
is.boolean = false;
|
is.boolean = false;
|
||||||
is.ltl_formula = false;
|
is.ltl_formula = false;
|
||||||
is.psl_formula = false;
|
is.psl_formula = false;
|
||||||
|
is.sere_formula = false;
|
||||||
is.accepting_eword = false;
|
is.accepting_eword = false;
|
||||||
break;
|
break;
|
||||||
case NegClosure:
|
case NegClosure:
|
||||||
|
|
@ -75,7 +80,10 @@ namespace spot
|
||||||
is.boolean = false;
|
is.boolean = false;
|
||||||
is.ltl_formula = false;
|
is.ltl_formula = false;
|
||||||
is.eltl_formula = false;
|
is.eltl_formula = false;
|
||||||
|
is.psl_formula = true;
|
||||||
|
is.sere_formula = false;
|
||||||
is.accepting_eword = false;
|
is.accepting_eword = false;
|
||||||
|
assert(child->is_sere_formula());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Copyright (C) 2010 Laboratoire de Recherche et Developement to
|
# Copyright (C) 2010, 2011 Laboratoire de Recherche et Developement to
|
||||||
# l'Epita (LRDE).
|
# l'Epita (LRDE).
|
||||||
#
|
#
|
||||||
# This file is part of Spot, a model checking library.
|
# This file is part of Spot, a model checking library.
|
||||||
|
|
@ -33,10 +33,10 @@ check()
|
||||||
test "$word" = "$2"
|
test "$word" = "$2"
|
||||||
}
|
}
|
||||||
|
|
||||||
check 'a' 'B&!xfLEP'
|
check 'a' 'B&!xfLEPS'
|
||||||
check 'a<->b' 'BxfLEP'
|
check 'a<->b' 'BxfLEPS'
|
||||||
check '!a' 'B&!xfLEP'
|
check '!a' 'B&!xfLEPS'
|
||||||
check '!(a|b)' 'B&xfLEP'
|
check '!(a|b)' 'B&xfLEPS'
|
||||||
check 'F(a)' '&!xLPe'
|
check 'F(a)' '&!xLPe'
|
||||||
check 'G(a)' '&!xLPu'
|
check 'G(a)' '&!xLPu'
|
||||||
check 'a U b' '&!xfLP'
|
check 'a U b' '&!xfLP'
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue