ltlfilt: add a --save-part-file option

* bin/ltlfilt.cc: Add support for --save-part-file.
* NEWS, doc/org/ltlfilt.org: Mention it.
* tests/core/ltlfilt.test: Test it.
This commit is contained in:
Alexandre Duret-Lutz 2025-02-14 14:27:48 +01:00
parent b1b06ef7bd
commit 00456e5211
4 changed files with 91 additions and 7 deletions

View file

@ -301,14 +301,18 @@ ltldo ltl3ba -f '"proc@loc1" U "proc@loc2"' --spin
This case also relabels the formula before calling =ltl3ba=, and it
then renames all the atomic propositions in the output.
An example showing how to use the =--from-ltlf= option is on [[file:tut12.org][a
separate page]].
* I/O-partitioned formulas
A special relabeling mode related to LTL synthesis is =--relabel=io=.
In LTL synthesis (see [[file:ltlsynt.org][=ltlsynt=]]), atomic propositions are partitioned
in two sets: the /input/ propositions represent choices from the
environment, while /output/ proposition represent choices by the
environment, while /output/ propositions represent choices by the
controller to be synthesized. For instance
=G(req -> Fack) & G(go -> Fgrant)=
represents could be a specification where =req= and =go= are inputs,
could be a specification where =req= and =go= are inputs,
while =ack= and =grant= are outputs. Tool such as =ltlsynt= need
to be told using options such as =--ins= or =--outs= which atomic
propositions are input or output. Often these atomic propositions
@ -331,8 +335,24 @@ when these two options are missing the convention is that anything
starting with =i= is an input, and anything starting with =o= is an
output.
An example showing how to use the =--from-ltlf= option is on [[file:tut12.org][a
separate page]].
=ltlfilt= can also be instructed to create a partition file (usually
named =*.part=) that can be used by synthesis tools.
#+BEGIN_SRC sh
ltlfilt -f 'G(req -> Fack) & G(go -> Fgrant)' --relabel=io \
--ins=req,go --save-part=out.part
#+END_SRC
#+RESULTS:
: G(i1 -> Fo0) & G(i0 -> Fo1)
In addition to the relabeling, this also created a file =out.part=
containing the following:
#+BEGIN_SRC sh :exports results
cat out.part
#+END_SRC
#+RESULTS:
: .inputs i0 i1
: .outputs o0 o1
* Filtering