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:
parent
0ab8dc06c4
commit
413eab1d32
5 changed files with 31 additions and 23 deletions
|
|
@ -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)))});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue