Skip to content
  • Alexandre Duret-Lutz's avatar
    Fix interpretation of {e[*]} and !{e[*]}. · cb7bdf8c
    Alexandre Duret-Lutz authored
    This follows from a discussion with Ernesto Posse.
    
    The semantics for the {...} operator we use in Spot comes from the
    cl(...) operator defined by Dax et al. (ATVA'09).  This is slightly
    different from the the way the PSL spec interprets a SERE used in the
    context of a temporal formula (appendix B.3.1.1.2, item 7).
    
    cl({a;b}[*]) would match any infinite word that starts with a;b, while
    in PSL {a;b}[*] would match any infinite word that alternates a and b.
    
    Spot documents that {SERE} in a temporal formula is interpreted like
    cl(SERE) however it failed to ignore the empty prefix of SERE.  So
    {{a;b}[*]} would match anything, because the empty word is a prefix of
    any word, and is also accepted by {a;b}[*].  Some trivial identities
    and basic rewritings were also wrongly considering these empty
    prefixes as well.
    
    This patch therefore fixes the translation and syntactic
    simplification rules, to really ignore these empty prefixes.
    
    In some future version it should probably be wise to rename this {...}
    operator as cl(...), and use {...} for the semantics given in appendix
    B.3.1.1.2 (item 7) of the PSL specs.
    
    * src/ltlast/unop.cc: Fix trivial identities.  We have
    {[*0]} = 0 and !{[*0]} = 1.
    * src/ltlvisit/simplify.cc: Fix basic rewriting rules.
    {e[*]} = {e} and !{e[*]} = !{e}.
    * doc/tl/tl.tex: Adjust documentation.
    * doc/tl/tl.bib (dax.09.atva): New entry.
    * src/tgbaalgos/ltl2tgba_fm.cc: Do not accept any
    infinite word for {e[*]} just because the empty
    prefix is matched by e[*].
    * src/tgbatest/ltl2tgba.test: Add a test case.
    * NEWS: Mention it.
    * THANKS: Add Ernesto.
    cb7bdf8c