ltlf: ensure alive holds initially

Reported by Shufang Zhu.

* spot/tl/ltlf.cc, spot/tl/ltlf.hh: Fix the transltion
and update the comments.
* tests/core/ltlfilt.test: Adjust test cases.
* NEWS: Mention the fix.
* THANKS: Add Shufang Zhu.
This commit is contained in:
Alexandre Duret-Lutz 2016-12-09 21:37:15 +01:00
parent 0ab8dc06c4
commit 413eab1d32
5 changed files with 31 additions and 23 deletions

View file

@ -37,6 +37,10 @@ namespace spot
// the IJCAI'13 paper by De Giacomo & Vardi has a typo.
// t(a U b) should be equal to t(a) U t(b & alive).
// This typo is fixed in the Memocode'14 paper by Dutta & Vardi.
//
// (However beware that the translation given in the
// Memocode'14 paper forgets to ensure that alive holds
// initially, as required in the IJCAI'13 paper.)
case op::U:
return formula::U(t(f[0]), formula::And({alive, t(f[1])}));
case op::R:
@ -60,7 +64,7 @@ namespace spot
auto al = ((*alive == '!')
? formula::Not(formula::ap(alive + 1))
: formula::ap(alive));
return formula::And({from_ltlf_aux(f, al),
return formula::And({from_ltlf_aux(f, al), al,
formula::U(al, formula::G(formula::Not(al)))});
}
}

View file

@ -35,7 +35,7 @@ namespace spot
/// finite word. The formula is rewritten to ensure that the
/// eventualities occur during the "alive" portion. For instance
/// <code>a U b</code> becomes
/// <code>(a U (b & alive))&(alive U G!alive)</code>.
/// <code>alive&(a U (b & alive))&(alive U G!alive)</code>.
///
/// The \a alive argument can be used to change the name of the
/// atomic property used to introduce. Additionally if \a alive is