Commit graph

12 commits

Author SHA1 Message Date
Alexandre Duret-Lutz
e2f70e72b8 Fix translation of !{r}.
We need a marked version of !{r} to perform breakpoint unroling.

* src/ltlast/unop.cc, src/ltlast/unop.hh: Declare a NegClosureMarked
operator.
* src/ltlvisit/mark.hh, src/ltlvisit/mark.cc,
src/tgbaalgos/ltl2tgba_fm.cc: Adjust to deal with NegClosureMarked
and NegClosure as apropriate.
* src/ltlvisit/simplify.cc, src/ltlvisit/tostring.cc,
src/ltlvisit/tunabbrev.cc, src/tgbaalgos/eltl2tgba_lacim.cc,
src/tgbaalgos/ltl2taa.cc, src/tgbaalgos/ltl2tgba_lacim.cc,
src/tgba/formula2bdd.cc: Deal with NegClosureMarked in the same way as
we deal with NegClosure.
* src/tgbatest/ltl2tgba.test: More tests.
* src/ltltest/kind.test: Adjust.
* doc/tl/tl.tex: Mention the marked negated closure.
2012-05-12 12:21:41 +02:00
Alexandre Duret-Lutz
54fd973a90 Fix computation of syntactic classes for Implies.
* src/ltlast/binop.cc (binop::binop): Fix computation
of syntactic guarantee and syntactic obligation for the Implies
operator.  Reported by Étienne Renault.
* src/ltltest/kind.test: Add more tests.
2012-04-28 09:34:45 +02:00
Alexandre Duret-Lutz
cd9369c186 Fix universal and eventual rules for M and W.
* src/ltlast/binop.cc: a M b is eventual if both a and b are
eventual, or if b == 1.  a W b is universal if both a and b
are universal or if b == 0.
* src/ltltest/kind.test: New test case.
2012-04-28 09:34:43 +02:00
Alexandre Duret-Lutz
503bdb5bbf Adjust kind.test Adjust after the change of 2011-05-23.
* src/ltltest/kind.test: More pure eventualities and purely
universal properties are detected.
2012-04-28 09:30:37 +02:00
Alexandre Duret-Lutz
8ecf57e832 Generalize computation of is.eventual and is.universal.
* src/ltlast/binop.cc (binop::binop): Generalize detection
of pure eventualities and purely universal formulae.  E.g.
`f U g' is a pure eventuality if g is a pure eventuality
(regardless of f) or if g is 1.
* src/ltlast/unop.cc (unop::unop): Compute is.eventual
and is.universal for Not.
* src/ltltest/kind.test: Adjust.
2012-04-28 09:30:37 +02:00
Alexandre Duret-Lutz
fb386209aa Track finite formulae.
I.e., SERE without star, or LTL formula using only X and Boolean
operators.

* src/ltlast/formula.hh, src/ltlast/formula.cc: Add a bit for
tracking finite formulas.
* src/ltlast/atomic_prop.cc, src/ltlast/automatop.cc,
src/ltlast/bunop.cc, src/ltlast/constant.cc, src/ltlast/formula.cc:
Adjust.
* src/ltlast/unop.cc, src/ltlast/binop.cc: Adjust and use that
bit to refine the computation of some LTL classes.
* src/ltltest/kind.test: New tests.
2012-04-28 09:30:37 +02:00
Alexandre Duret-Lutz
df760a4597 Track syntactic classes.
These are safety, guarantee, obligation, persistence, and recurrence.

* src/ltlast/formula.hh, src/ltlast/formula.cc: Declare a bit for
each of these classes.
* src/ltlast/atomic_prop.cc, src/ltlast/constant.cc,
src/ltlast/automatop.cc, src/ltlast/binop.cc, src/ltlast/bunop.cc,
src/ltlast/unop.cc: Update these bits.
* src/ltltest/kind.test: Update tests and add more.
2012-04-28 09:30:36 +02:00
Alexandre Duret-Lutz
2669df1c96 Combine Boolean formulae in Fusion arguments.
* src/ltlast/multop.cc (multop::instance): Implement
the rewriting.   "a🅱️c[*]:d:e" becomes "{{a&&b}&c[*]}:{d&&e}".
* src/ltlast/multop.hh: Document it.
* src/ltltest/equals.test, src/ltltest/kind.test: Add test cases.
2012-04-28 09:30:36 +02:00
Alexandre Duret-Lutz
a2da5184b5 Add trivial identities for &&, <>->, []-> and Boolean arguments.
* src/ltlast/binop.cc (EConcat, UConcat): Rewrite "{b}<>-> f"
as "b && f", and rewrite "{b}[]->f" as "b->f".
* src/ltlast/binop.hh (binop::instance): Document trivial
identities for <>-> and []->.
* src/ltlast/multop.cc (multop::instance): Rewrite "b1 & b2"
as "b1 && b2" when b1 and b2 are Boolean.
(multop::multop): Always disable is.boolean for AndNLM.
* src/ltlast/multop.hh: Document the rewriting.
* src/ltltest/equals.cc: Show the two formulas if the exit_code
is 1, to help debugging.
* src/ltltest/equals.test: Add more tests.
* src/ltltest/kind.test: Adjust tests.
2012-04-28 09:30:36 +02:00
Alexandre Duret-Lutz
459921ef60 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.
2012-04-28 09:30:36 +02:00
Alexandre Duret-Lutz
546260e7a0 Maintain basic LTL properties using a bitfield inside formula objects.
This bitfield is easily updated as the formulae are constructed.
Doing so avoids many AST recursions to compute these properties
individually.  This patch removes the eventual_universal_visitor,
as well as the kind_of() function.

* src/ltlast/formula.hh (is_boolean, is_sugar_free_boolean,
is_in_nenoform, is_X_free, is_sugar_free_ltl,
is_ltl_formula, is_eltl_formula, is_psl_formula, is_eventual,
is_universal, is_marked): New methods to query formula
properties in constant time.
(get_props, ltl_prop): A method and structure for
implementation as a field bit in an unsigned, for fast
computation.
(print_formula_props): New function.
* src/ltlast/formula.cc (print_formula_props): Implement it.
* src/ltlast/atomic_prop.cc, src/ltlast/binop.cc,
src/ltlast/bunop.cc, src/ltlast/constant.cc, src/ltlast/multop.cc,
src/ltlast/unop.cc, src/ltlast/automatop.cc: Compute the
properties as instances are constructed.
* src/ltlparse/ltlparse.yy: Update to use is_boolean() instead
of kind_of().
* src/ltltest/kind.cc: Update to use print_formula_props().
* src/ltltest/kind.test: Adjust to test eventual and universal
properties.
* src/ltlvisit/kind.cc, src/ltlvisit/kind.hh: Delete these files.
* src/ltlvisit/Makefile.am: Remove kind.hh and kind.cc.
* src/ltlvisit/reduce.cc (recurse_eu, eventual_universal_visitor):
Remove, no longer needed.
(reduce_visitor, is_eventual, is_universal): Adjust to
use formula::is_eventual(), and formula::is_universal().
* src/ltlvisit/reduce.hh (is_eventual, is_universal): Declare as
deprecated.
2012-04-28 09:30:36 +02:00
Alexandre Duret-Lutz
437128b55b Add functions to compute the kind of a formula (LTL, PSL, Boolean...)
* src/ltlvisit/kind.hh, src/ltlvisit/kind.cc: New files.
* src/ltlvisit/Makefile.am: Add them.
* src/ltltest/kind.test, src/ltltest/kind.cc: New files.
* src/ltltest/Makefile.am: Add them.
2012-04-28 09:30:35 +02:00