AUTFILT(1)

NAME
autfilt - filter, convert, and transform omega-automata

SYNOPSIS
autfilt [OPTION...] [FILENAME[/COL]...]

DESCRIPTION

Convert, transform, and filter omega-automata.

  Input:

-F, --file=FILENAME
    process the automaton in FILENAME

--trust-hoa=BOOL
    If False, properties listed in HOA files are ignored, unless they can be easily verified. If True (the default) any supported property is trusted.

  Output automaton type:

-B, --ba
    Büchi Automaton (with state-based acceptance)

-C, --complete
    output a complete automaton

-G, --generic
    any acceptance is allowed (default)

-M, --monitor
    Monitor (accepts all finite prefixes of the given property)

-S, --state-based-acceptance, --sbacc
    define the acceptance using states

--tgba
    Transition-based Generalized Büchi Automaton

  Output format:

-8, --utf8
    enable UTF-8 characters in output (ignored with --lbtt or --spin)

-c, --count
    print only a count of matched automata

--check[=PROP]
    test for the additional property PROP and output the result in the HOA format (implies -H). PROP may be any prefix of 'all' (default), 'unambiguous', 'stutter-invariant', or 'strength'.

-d, --dot[=1|a|b|B|c|C(COLOR)|e|f(FONT)|h|k|n|N|o|r|R|s|t|v|+INT|<INT|#]
    GraphViz's format. Add letters for (1) force numbered states, (a) acceptance display, (b) acceptance sets as bullets, (B) bullets except for Büchi/co-Büchi automata, (c) force circular nodes, (C) color nodes with COLOR, (e) force elliptic nodes, (f(FONT)) use FONT, (h) horizontal layout, (k) use state labels when possible, (n) with name, (N) without name, (o) ordered transitions, (r) rainbow colors for acceptance sets, (R) color acceptance sets by Inf/Fin, (s) with SCCs, (t) force transition-based acceptance, (v) vertical layout, (+INT) add INT to all set numbers, (<INT) display at most INT states, (#) show internal edge numbers

-H, --hoaf[=1.1|i|k|l|m|s|t|v]
    Output the automaton in HOA format (default). Add letters to select (1.1) version 1.1 of the format, (i) use implicit labels for complete deterministic automata, (s) prefer state-based acceptance when possible [default], (t) force transition-based acceptance, (m) mix state and transition-based acceptance, (k) use state labels when possible, (l) single-line output, (v) verbose properties

--lbtt[=t]
    LBTT's format (add =t to force transition-based acceptance even on Büchi automata)

-n, --max-count=NUM
    output at most NUM automata

--name=FORMAT
    set the name of the output automaton

-o, --output=FORMAT
    send output to a file named FORMAT instead of standard output. The first automaton sent to a file truncates it unless FORMAT starts with '>>'.

-q, --quiet
    suppress all normal output

-s, --spin[=6|c]
    Spin neverclaim (implies --ba). Add letters to select (6) Spin's 6.2.4 style, (c) comments on states

--stats=FORMAT
    output statistics about the automaton

Any FORMAT string may use the following interpreted sequences (capitals for input, minuscules for output):

%%  a single %

%<  the part of the line before the automaton if it comes from a column extracted from a CSV file

%>  the part of the line after the automaton if it comes from a column extracted from a CSV file

%A, %a
    number of acceptance sets

%C, %c, %[LETTERS]C, %[LETTERS]c
    number of SCCs; you may filter the SCCs to count using the following LETTERS, possibly concatenated: (a) accepting, (r) rejecting, (v) trivial, (t) terminal, (w) weak, (iw) inherently weak. Use uppercase letters to negate them.

%D, %d
    1 if the automaton is deterministic, 0 otherwise

%E, %e
    number of edges

%F  name of the input file

%G, %g
    acceptance condition (in HOA syntax)

%H, %h
    the automaton in HOA format on a single line (use %[opt]H or %[opt]h to specify additional options as in --hoa=opt)

%L  location in the input file

%M, %m
    name of the automaton

%N, %n
    number of nondeterministic states

%P, %p
    1 if the automaton is complete, 0 otherwise

%r  wall-clock time elapsed in seconds (excluding parsing)

%R, %[LETTERS]R
    CPU time (excluding parsing), in seconds; Add LETTERS to restrict to(u) user time, (s) system time, (p) parent process, or (c) children processes.

%S, %s
    number of states

%T, %t
    number of transitions

%W, %w
    one word accepted by the automaton

  Filtering options:

--acc-sccs=RANGE, --accepting-sccs=RANGE
    keep automata whose number of non-trivial accepting SCCs is in RANGE

--acc-sets=RANGE
    keep automata whose number of acceptance sets is in RANGE

--accept-word=WORD
    keep automata that accept WORD

--ap=RANGE
    match automata with a number of (declared) atomic propositions in RANGE

--are-isomorphic=FILENAME
    keep automata that are isomorphic to the automaton in FILENAME

--edges=RANGE
    keep automata whose number of edges is in RANGE

--equivalent-to=FILENAME
    keep automata thare are equivalent (language-wise) to the automaton in FILENAME

--included-in=FILENAME keep automata whose languages are included in that
    of the automaton from FILENAME

--inherently-weak-sccs=RANGE
    keep automata whose number of accepting inherently-weak SCCs is in RANGE. An accepting SCC is inherently weak if it does not have a rejecting cycle.

--intersect=FILENAME
    keep automata whose languages have an non-empty intersection with the automaton from FILENAME

--is-complete
    keep complete automata

--is-deterministic
    keep deterministic automata

--is-empty
    keep automata with an empty language

--is-inherently-weak
    keep only inherently weak automata

--is-stutter-invariant keep automata representing stutter-invariant
    properties

--is-terminal
    keep only terminal automata

--is-unambiguous
    keep only unambiguous automata

--is-weak
    keep only weak automata

--nondet-states=RANGE
    keep automata whose number of nondeterministic states is in RANGE

--rej-sccs=RANGE, --rejecting-sccs=RANGE
    keep automata whose number of non-trivial rejecting SCCs is in RANGE

--reject-word=WORD
    keep automata that reject WORD

--sccs=RANGE
    keep automata whose number of SCCs is in RANGE

--states=RANGE
    keep automata whose number of states is in RANGE

--terminal-sccs=RANGE
    keep automata whose number of accepting terminal SCCs is in RANGE. Terminal SCCs are weak and complete.

--triv-sccs=RANGE, --trivial-sccs=RANGE
    keep automata whose number of trivial SCCs is in RANGE

--unused-ap=RANGE
    match automata with a number of declared, but unused atomic propositions in RANGE

--used-ap=RANGE
    match automata with a number of used atomic propositions in RANGE

-u, --unique
    do not output the same automaton twice (same in the sense that they are isomorphic)

-v, --invert-match
    select non-matching automata

--weak-sccs=RANGE
    keep automata whose number of accepting weak SCCs is in RANGE. In a weak SCC, all transitions belong to the same acceptance sets.

RANGE may have one of the following forms: 'INT', 'INT..INT', '..INT', or 'INT..'

WORD is lasso-shaped and written as 'BF;BF;...;BF;cycle{BF;...;BF}' where BF are arbitrary Boolean formulas. The 'cycle{...}' part is mandatory, but the prefix can be omitted.

  Transformations:

--cleanup-acceptance
    remove unused acceptance sets from the automaton

--cnf-acceptance
    put the acceptance condition in Conjunctive Normal Form

--complement
    complement each automaton (currently support only deterministic automata)

--complement-acceptance
    complement the acceptance condition (without touching the automaton)

--decompose-strength=t|w|s
    extract the (t) terminal, (w) weak, or (s) strong part of an automaton (letters may be combined to combine more strengths in the output)

--destut
    allow less stuttering

--dnf-acceptance
    put the acceptance condition in Disjunctive Normal Form

--exclusive-ap=AP,AP,...
    if any of those APs occur in the automaton, restrict all edges to ensure two of them may not be true at the same time. Use this option multiple times to declare independent groups of exclusive propositions.

--generalized-rabin[=unique-inf|share-inf], --gra[=unique-inf|share-inf]
    rewrite the acceptance condition as generalized Rabin; the default "unique-inf" option uses the generalized Rabin definition from the HOA format; the "share-inf" option allows clauses to share Inf sets, therefore reducing the number of sets

--generalized-streett[=unique-fin|share-fin], --gsa[=unique-fin|share-fin]
    rewrite the acceptance condition as generalized Streett; the "share-fin" option allows clauses to share Fin sets, therefore reducing the number of sets; the default "unique-fin" does not

--instut[=1|2]
    allow more stuttering (two possible algorithms)

--keep-states=NUM[,NUM...]
    only keep specified states. The first state will be the new initial state. Implies --remove-unreachable-states.

--mask-acc=NUM[,NUM...]
    remove all transitions in specified acceptance sets

--merge-transitions
    merge transitions with same destination and acceptance

--product=FILENAME, --product-and=FILENAME
    build the product with the automaton in FILENAME to intersect languages

--product-or=FILENAME
    build the product with the automaton in FILENAME to sum languages

--randomize[=s|t]
    randomize states and transitions (specify 's' or 't' to randomize only states or transitions)

--remove-ap=AP[=0|=1][,AP...]
    remove atomic propositions either by existential quantification, or by assigning them 0 or 1

--remove-dead-states
    remove states that are unreachable, or that cannot belong to an infinite path

--remove-fin
    rewrite the automaton without using Fin acceptance

--remove-unreachable-states
    remove states that are unreachable from the initial state

--remove-unused-ap
    remove declared atomic propositions that are not used

--sat-minimize[=options]
    minimize the automaton using a SAT solver (only works for deterministic automata)

--separate-sets
    if both Inf(x) and Fin(x) appear in the acceptance condition, replace Fin(x) by a new Fin(y) and adjust the automaton

--simplify-exclusive-ap
    if --exclusive-ap is used, assume those AP groups are actually exclusive in the system to simplify the expression of transition labels (implies --merge-transitions)

--strip-acceptance
    remove the acceptance condition and all acceptance sets

  Decorations (for -d and -H1.1 output):

--highlight-nondet[=NUM]
    highlight nondeterministic states and edges with color NUM

--highlight-nondet-edges[=NUM]
    highlight nondeterministic edges with color NUM

--highlight-nondet-states[=NUM]
    highlight nondeterministic states with color NUM

--highlight-word=[NUM,]WORD
    highlight one run matching WORD using color NUM

  Simplification goal:

-a, --any
    no preference, do not bother making it small or deterministic

-D, --deterministic
    prefer deterministic automata (combine with --generic to be sure to obtain a deterministic automaton)

--small
    prefer small automata

  Simplification level:

--high
    all available optimizations (slow)

--low
    minimal optimizations (fast)

--medium
    moderate optimizations

If any option among --small, --deterministic, or --any is given, then the simplification level defaults to --high unless specified otherwise. If any option among --low, --medium, or --high is given, then the simplification goal defaults to --small unless specified otherwise. If none of those options are specified, then autfilt acts as is --any --low were given: these actually disable the simplification routines.

  Miscellaneous options:

--seed=INT
    seed for the random number generator (0)

-x, --extra-options=OPTS
    fine-tuning options (see spot-x (7))

--help
    print this help

--version
    print program version

Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.

  Exit status:

0   if some automata were output

1   if no automata were output (no match)

2   if any error has been reported

BIBLIOGRAPHY
The following papers are related to some of the transformations implemented in autfilt.

•   Etienne Renault, Alexandre Duret-Lutz, Fabrice Kordon, and Denis Poitrenaud: Strength-based decomposition of the property Büchi automaton for faster model checking. Proceedings of TACAS'13. LNCS 7795. The --strength-decompose option implements the definitions given in the above paper.

•   František Blahoudek, Alexandre Duret-Lutz, Vojtčech Rujbr, and Jan Strejček: On refinement of Büchi automata for explicit model checking. Proceedings of SPIN'15. LNCS 9232. That paper gives the motivation for options --exclusive-ap and --simplify-exclusive-ap.

•   Thibaud Michaud and Alexandre Duret-Lutz: Practical stutter-invariance checks for ω-regular languages. Proceedings of SPIN'15. LNCS 9232. Describes the algorithms used by the --destut and --instut options. These options correpond respectively to cl() and sl() in the paper.

•   Souheib Baarir and Alexandre Duret-Lutz: SAT-based minimization of deterministic ω-automata. Proceedings of LPAR'15 (a.k.a LPAR-20). LNCS 9450. Describes the --sat-minimize option.

REPORTING BUGS
Report bugs to <spot@lrde.epita.fr>.

COPYRIGHT
Copyright © 2016 Laboratoire de Recherche et Développement de l'Epita. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.

SEE ALSO
spot-x(7) dstar2tgba(1)