Introduce EConcatMarked "<>+>" as operator.

* src/ltlast/binop.cc, src/ltlast/binop.hh: Introduce
EConcatMarked ("<>+>").
* src/ltlvisit/basicreduce.cc, src/ltlvisit/consterm.cc,
src/ltlvisit/lunabbrev.cc, src/ltlvisit/nenoform.cc,
src/ltlvisit/reduce.cc, src/ltlvisit/simpfg.cc,
src/ltlvisit/syntimpl.cc, src/ltlvisit/tostring.cc,
src/tgbaalgos/ltl2taa.cc, src/tgbaalgos/eltl2tgba_lacim.cc,
src/tgbaalgos/ltl2tgba_lacim.cc, src/tgba/formula2bdd.cc,
src/tgba/formula2bdd.cc: Deal with it if possible or ignore
it.
This commit is contained in:
Alexandre Duret-Lutz 2010-02-24 16:15:17 +01:00
parent 66317db45c
commit 171ca678b8
14 changed files with 34 additions and 2 deletions

View file

@ -123,6 +123,8 @@ namespace spot
return "M"; return "M";
case EConcat: case EConcat:
return "EConcat"; return "EConcat";
case EConcatMarked:
return "EConcatMarked";
case UConcat: case UConcat:
return "UConcat"; return "UConcat";
} }
@ -256,6 +258,7 @@ namespace spot
} }
break; break;
case EConcat: case EConcat:
case EConcatMarked:
// - 0 <>-> Exp = 0 // - 0 <>-> Exp = 0
// - 1 <>-> Exp = Exp // - 1 <>-> Exp = Exp
// - #e <>-> Exp = 0 // - #e <>-> Exp = 0

View file

@ -55,6 +55,7 @@ namespace spot
W, //< weak until W, //< weak until
M, //< strong release (dual of weak until) M, //< strong release (dual of weak until)
EConcat, // Existential Concatenation EConcat, // Existential Concatenation
EConcatMarked, // Existential Concatenation, Marked
UConcat // Universal Concatenation UConcat // Universal Concatenation
}; };

View file

@ -263,6 +263,7 @@ namespace spot
case binop::Implies: case binop::Implies:
case binop::EConcat: case binop::EConcat:
case binop::UConcat: case binop::UConcat:
case binop::EConcatMarked:
result_ = binop::instance(bo->op(), result_ = binop::instance(bo->op(),
basic_reduce(f1), basic_reduce(f1),
basic_reduce(f2)); basic_reduce(f2));

View file

@ -64,6 +64,7 @@ namespace spot
case binop::R: case binop::R:
case binop::EConcat: case binop::EConcat:
case binop::UConcat: case binop::UConcat:
case binop::EConcatMarked:
assert(!"unsupported operator"); assert(!"unsupported operator");
break; break;
} }

View file

@ -89,6 +89,7 @@ namespace spot
case binop::M: case binop::M:
case binop::UConcat: case binop::UConcat:
case binop::EConcat: case binop::EConcat:
case binop::EConcatMarked:
result_ = binop::instance(op, f1, f2); result_ = binop::instance(op, f1, f2);
return; return;
} }

View file

@ -186,6 +186,13 @@ namespace spot
binop::UConcat : binop::EConcat, binop::UConcat : binop::EConcat,
recurse_(f1, false), recurse(f2)); recurse_(f1, false), recurse(f2));
return; return;
case binop::EConcatMarked:
/* !(a <>-> b) == a[]-> !b */
result_ = binop::instance(negated_ ?
binop::UConcat :
binop::EConcatMarked,
recurse_(f1, false), recurse(f2));
return;
} }
/* Unreachable code. */ /* Unreachable code. */
assert(0); assert(0);

View file

@ -158,6 +158,7 @@ namespace spot
return; return;
case binop::UConcat: case binop::UConcat:
case binop::EConcat: case binop::EConcat:
case binop::EConcatMarked:
return; return;
} }
/* Unreachable code. */ /* Unreachable code. */
@ -318,7 +319,8 @@ namespace spot
case binop::Implies: case binop::Implies:
case binop::UConcat: case binop::UConcat:
case binop::EConcat: case binop::EConcat:
break; case binop::EConcatMarked:
return;
case binop::U: case binop::U:
/* a < b => a U b = b */ /* a < b => a U b = b */

View file

@ -53,6 +53,7 @@ namespace spot
case binop::Equiv: case binop::Equiv:
case binop::UConcat: case binop::UConcat:
case binop::EConcat: case binop::EConcat:
case binop::EConcatMarked:
result_ = binop::instance(op, f1, f2); result_ = binop::instance(op, f1, f2);
return; return;
/* true U f2 == F(f2) */ /* true U f2 == F(f2) */

View file

@ -128,6 +128,7 @@ namespace spot
case binop::Implies: case binop::Implies:
case binop::UConcat: case binop::UConcat:
case binop::EConcat: case binop::EConcat:
case binop::EConcatMarked:
return; return;
case binop::U: case binop::U:
case binop::W: case binop::W:
@ -363,6 +364,7 @@ namespace spot
case binop::Implies: case binop::Implies:
case binop::UConcat: case binop::UConcat:
case binop::EConcat: case binop::EConcat:
case binop::EConcatMarked:
return; return;
case binop::U: case binop::U:
/* (a < c) && (c < d) => a U b < c U d */ /* (a < c) && (c < d) => a U b < c U d */

View file

@ -110,6 +110,7 @@ namespace spot
{ {
case binop::UConcat: case binop::UConcat:
case binop::EConcat: case binop::EConcat:
case binop::EConcatMarked:
os_ << "{ "; os_ << "{ ";
top_level_ = true; top_level_ = true;
bo->first()->accept(*this); bo->first()->accept(*this);
@ -150,6 +151,9 @@ namespace spot
case binop::EConcat: case binop::EConcat:
os_ << " }<>-> "; os_ << " }<>-> ";
break; break;
case binop::EConcatMarked:
os_ << " }<>+> ";
break;
} }
bo->second()->accept(*this); bo->second()->accept(*this);
@ -342,6 +346,11 @@ namespace spot
os_ << " <>-> "; os_ << " <>-> ";
bo->second()->accept(*this); bo->second()->accept(*this);
break; break;
case binop::EConcatMarked:
bo->first()->accept(*this);
os_ << " <>+> ";
bo->second()->accept(*this);
break;
/* W and M are not supported by Spin */ /* W and M are not supported by Spin */
case binop::W: case binop::W:
bo->first()->accept(*this); bo->first()->accept(*this);

View file

@ -114,6 +114,7 @@ namespace spot
case binop::M: case binop::M:
case binop::UConcat: case binop::UConcat:
case binop::EConcat: case binop::EConcat:
case binop::EConcatMarked:
assert(!"unsupported operator"); assert(!"unsupported operator");
} }
/* Unreachable code. */ /* Unreachable code. */

View file

@ -131,6 +131,7 @@ namespace spot
case binop::M: case binop::M:
case binop::UConcat: case binop::UConcat:
case binop::EConcat: case binop::EConcat:
case binop::EConcatMarked:
assert(!"unsupported operator"); assert(!"unsupported operator");
} }
/* Unreachable code. */ /* Unreachable code. */

View file

@ -249,6 +249,7 @@ namespace spot
assert(0); // TBD assert(0); // TBD
case binop::UConcat: case binop::UConcat:
case binop::EConcat: case binop::EConcat:
case binop::EConcatMarked:
assert(!"unsupported operator"); assert(!"unsupported operator");
} }
/* Unreachable code. */ /* Unreachable code. */

View file

@ -222,6 +222,7 @@ namespace spot
} }
case binop::UConcat: case binop::UConcat:
case binop::EConcat: case binop::EConcat:
case binop::EConcatMarked:
assert(!"unsupported operator"); assert(!"unsupported operator");
break; break;
} }