Table of Contents


ltldo - run LTL/PSL formulas through other tools


ltldo [OPTION...] [COMMANDFMT...]


Run LTL/PSL formulas through another program, performing conversion of input and output as required.

Input options:

-f, --formula=STRING

process the formula STRING

-F, --file=FILENAME[/COL]

process each line of FILENAME as a formula; if COL is a positive integer, assume a CSV file and read column COL; use a negative COL to drop the first line of the CSV file


read all formulas using LBT’s prefix syntax


parenthesized blocks that cannot be parsed as subformulas are considered as atomic properties


negate each formula

Specifying translators to call:


list availabled shorthands to use in COMMANDFMT


always relabel atomic propositions before calling any translator

-t, --translator=COMMANDFMT

register one translator to call

-T, --timeout=NUMBER

kill translators after NUMBER seconds

COMMANDFMT should specify input and output arguments using the following character sequences:


a single %


the formula as a (quoted) string in Spot, Spin, LBT, or Wring’s syntax


the formula as a file in Spot, Spin, LBT, or Wring’s syntax


the automaton output in HOA, never claim, LBTT, or ltl2dstar’s format

If either %l, %L, or %T are used, any input formula that does not use LBT-style atomic propositions (i.e. p0, p1, ...) will be relabeled automatically. Likewise if %s or %S are used with atomic proposition that compatible with Spin’s syntax. You can force this relabeling to always occur with option --relabel. The sequences %f,%s,%l,%w,%F,%S,%L,%W can optionally be "infixed" by a bracketed sequence of operators to unabbreviate before outputting the formula. For instance %[MW]f will rewrite operators M and W before outputting it. Furthermore, if COMMANDFMT has the form "{NAME}CMD", then only CMD will be passed to the shell, and NAME will be used to name the tool in the output.

Parsing of automata:


If false, properties listed in HOA files are ignored, unless they can be easily verified. If true (the default) any supported property is trusted.

Error handling:


how to deal with tools returning with non-zero exit codes or automata that ltldo cannot parse (default: abort)


consider timeouts as errors

Output selection:


for each formula select the greatest automaton given by all translators, using FORMAT for ordering (default is %s,%e)

-n, --max-count=NUM

output at most NUM automata


for each formula select the smallest automaton given by all translators, using FORMAT for ordering (default is %s,%e)

Output format:

-8, --utf8

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


test for the additional property PROP and output the result in the HOA format (implies -H). PROP may be some prefix of ’all’ (default), ’unambiguous’, ’stutter-invariant’, ’stutter-sensitive-example’, ’semi-determinism’, or ’strength’.

-d, --dot[=1|a|A|b|B|c|C(COLOR)|e|E|f(FONT)|h|i(ID)|k|K|n|N|o|r|R|s|t|

GraphViz’s format. Add letters for (1) force numbered states, (a) show acceptance condition (default), (A) hide acceptance condition, (b) acceptance sets as bullets, (B) bullets except for Büchi/co-Büchi automata, (c) force circular nodes, (C) color nodes with COLOR, (d) show origins when known, (e) force elliptic nodes, (E) force rEctangular nodes, (f(FONT)) use FONT, (g) hide edge labels, (h) horizontal layout, (i) or (i(GRAPHID)) add IDs, (k) use state labels when possible, (K) use transition labels (default), (n) show name, (N) hide 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, (u) hide true states, (v) vertical layout, (y) split universal edges by color, (+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, (b) create an alias basis if >=2 AP are used, (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’s format (add =t to force transition-based acceptance even on Büchi automata)


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, --format=FORMAT

output statistics about the automaton

Any FORMAT string may use the following interpreted sequences:


a single %


serial number of the formula translated


the part of the line before the formula if it comes from a column extracted from a CSV file


the part of the line after the formula if it comes from a column extracted from a CSV file


number of acceptance sets

%c, %[LETTERS]c

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


1 if the output is deterministic, 0 otherwise

%e, %[LETTER]e

number of edges (add one LETTER to select (r) reachable [default], (u) unreachable, (a) all).


name of the input file


formula translated

%g, %[LETTERS]g

acceptance condition (in HOA syntax); add brackets to print an acceptance name instead and LETTERS to tweak the format: (0) no parameters, (a) accentuated, (b) abbreviated, (d) style used in dot output, (g) no generalized parameter, (l) recognize Street-like and Rabin-like, (m) no main parameter, (p) no parity parameter, (o) name unknown acceptance as ’other’, (s) shorthand for ’lo0’.


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


location in the input file


serial number of the output automaton (0-based)


name of the automaton


number of nondeterministic states in output


1 if the output is complete, 0 otherwise


wall-clock time elapsed in seconds (excluding parsing)


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, %[LETTER]s

number of states (add one LETTER to select (r) reachable [default], (u) unreachable, (a) all).


tool used for translation

%t, %[LETTER]t

number of transitions (add one LETTER to select (r) reachable [default], (u) unreachable, (a) all).

%u, %[e]u

number of states (or [e]dges) with universal branching

%u, %[LETTER]u

1 if the automaton contains some universal branching (or a number of [s]tates or [e]dges with universal branching)


one word accepted by the output automaton

%x, %[LETTERS]x

number of atomic propositions declared in the automaton; add LETTERS to list atomic propositions with (n) no quoting, (s) occasional double-quotes with C-style escape, (d) double-quotes with C-style escape, (c) double-quotes with CSV-style escape, (p) between parentheses, any extra non-alphanumeric character will be used to separate propositions

Miscellaneous options:


print this help


print program version

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


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


Copyright © 2024 by the Spot authors, see the AUTHORS File for details. License GPLv3+: GNU GPL version 3 or later.
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.


randltl(1), genltl(1), ltlfilt(1), ltl2tgba(1), ltldo(1)