ltlsynt: fix a few issues with --csv
Some columns were superfluous, other had inconsistent names, and some times where not tracked. * spot/twaalgos/synthesis.cc: Improve tracking of times and verbose messages. * bin/ltlsynt.cc (print_csv): Adjust CSV columns. * tests/core/ltlsynt.test, tests/core/ltlsynt2.test, tests/core/ltlsynt-pgame.test: Adjust expected CSV and verbose messages. * doc/org/ltlsynt.org: Give some example.
This commit is contained in:
parent
a22a05b8ec
commit
b729aa3f30
7 changed files with 175 additions and 54 deletions
4
NEWS
4
NEWS
|
|
@ -9,7 +9,9 @@ New in spot 2.12.0.dev (not yet released)
|
||||||
processed formulas as the first column of the CSV file. A new
|
processed formulas as the first column of the CSV file. A new
|
||||||
option --csv-without-formula=FILENAME can be used to save
|
option --csv-without-formula=FILENAME can be used to save
|
||||||
everything but the formula column (as it can be very large, and
|
everything but the formula column (as it can be very large, and
|
||||||
can be found from the source filename).
|
can be found from the source filename). Several column names have
|
||||||
|
also been renamed for consistency, so any script reading these
|
||||||
|
file might require some adjustment.
|
||||||
|
|
||||||
- ltlsynt learned a --part-file option, to specify the partition of
|
- ltlsynt learned a --part-file option, to specify the partition of
|
||||||
input/output proposition from a *.part file, as used in several
|
input/output proposition from a *.part file, as used in several
|
||||||
|
|
|
||||||
|
|
@ -349,8 +349,8 @@ namespace
|
||||||
{
|
{
|
||||||
auto& vs = gi->verbose_stream;
|
auto& vs = gi->verbose_stream;
|
||||||
auto& bv = gi->bv;
|
auto& bv = gi->bv;
|
||||||
if (not bv)
|
if (!bv)
|
||||||
error(2, 0, "no information available for csv (please send bug report)");
|
error(2, 0, "no information available for csv (please report bug)");
|
||||||
if (vs)
|
if (vs)
|
||||||
*vs << "writing CSV to " << opt_csv << '\n';
|
*vs << "writing CSV to " << opt_csv << '\n';
|
||||||
|
|
||||||
|
|
@ -377,10 +377,11 @@ namespace
|
||||||
out << ",\"aig_time\"";
|
out << ",\"aig_time\"";
|
||||||
out << ",\"realizable\""; //-1: Unknown, 0: Unreal, 1: Real
|
out << ",\"realizable\""; //-1: Unknown, 0: Unreal, 1: Real
|
||||||
}
|
}
|
||||||
out << ",\"dpa_num_states\",\"dpa_num_states_env\""
|
out << ",\"game_states\",\"game_states_env\"";
|
||||||
<< ",\"strat_num_states\",\"strat_num_edges\"";
|
if (!opt_real)
|
||||||
|
out << ",\"strat_states\",\"strat_edges\"";
|
||||||
if (opt_print_aiger)
|
if (opt_print_aiger)
|
||||||
out << ",\"nb latches\",\"nb gates\"";
|
out << ",\"aig_latches\",\"aig_gates\"";
|
||||||
out << '\n';
|
out << '\n';
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
|
@ -418,15 +419,13 @@ namespace
|
||||||
out << ',' << bv->realizable;
|
out << ',' << bv->realizable;
|
||||||
}
|
}
|
||||||
out << ',' << bv->nb_states_arena
|
out << ',' << bv->nb_states_arena
|
||||||
<< ',' << bv->nb_states_arena_env
|
<< ',' << bv->nb_states_arena_env;
|
||||||
<< ',' << bv->nb_strat_states
|
if (!opt_real)
|
||||||
<< ',' << bv->nb_strat_edges;
|
out << ',' << bv->nb_strat_states
|
||||||
|
<< ',' << bv->nb_strat_edges;
|
||||||
if (opt_print_aiger)
|
if (opt_print_aiger)
|
||||||
{
|
|
||||||
out << ',' << bv->nb_latches
|
out << ',' << bv->nb_latches
|
||||||
<< ',' << bv->nb_gates;
|
<< ',' << bv->nb_gates;
|
||||||
}
|
|
||||||
out << '\n';
|
out << '\n';
|
||||||
outf.close(opt_csv);
|
outf.close(opt_csv);
|
||||||
}
|
}
|
||||||
|
|
@ -608,8 +607,6 @@ namespace
|
||||||
safe_tot_time();
|
safe_tot_time();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (gi->bv)
|
|
||||||
gi->bv->realizable = true;
|
|
||||||
// Create the (partial) strategy
|
// Create the (partial) strategy
|
||||||
// only if we need it
|
// only if we need it
|
||||||
if (!opt_real)
|
if (!opt_real)
|
||||||
|
|
@ -654,6 +651,8 @@ namespace
|
||||||
"(please send bug report)");
|
"(please send bug report)");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (gi->bv)
|
||||||
|
gi->bv->realizable = true;
|
||||||
|
|
||||||
// If we only wanted to print the game we are done
|
// If we only wanted to print the game we are done
|
||||||
if (want_game())
|
if (want_game())
|
||||||
|
|
|
||||||
|
|
@ -268,6 +268,8 @@ be tried by separating them using commas. For instance
|
||||||
|
|
||||||
* Other useful options
|
* Other useful options
|
||||||
|
|
||||||
|
** Printing games
|
||||||
|
|
||||||
You can also ask =ltlsynt= to print to obtained parity game into
|
You can also ask =ltlsynt= to print to obtained parity game into
|
||||||
[[https://github.com/tcsprojects/pgsolver][PGSolver]] format, with the flag =--print-pg=, or in the HOA format,
|
[[https://github.com/tcsprojects/pgsolver][PGSolver]] format, with the flag =--print-pg=, or in the HOA format,
|
||||||
using =--print-game-hoa=. These flags deactivate the resolution of the
|
using =--print-game-hoa=. These flags deactivate the resolution of the
|
||||||
|
|
@ -284,8 +286,102 @@ ltlsynt -f '(i1 & i2) <-> F(o1 & X(!o1))' --print-game-hoa --dot
|
||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
[[file:ltlsyntexgame.svg]]
|
[[file:ltlsyntexgame.svg]]
|
||||||
|
|
||||||
|
** Saving statistics
|
||||||
|
|
||||||
For benchmarking purpose, the =--csv= option can be used to record
|
For benchmarking purpose, the =--csv= option can be used to record
|
||||||
intermediate statistics about the resolution.
|
intermediate statistics about the resolution. The =--csv= option will
|
||||||
|
also save the formula into the CSV file, which can therefore become
|
||||||
|
very large. The variant =--csv-without-formula= is usually enough.
|
||||||
|
|
||||||
|
For instance the following command tests the realizability of the 23
|
||||||
|
demonstration specifications from [[http://www.ist.tugraz.at/staff/jobstmann/lily/][Lily 1.0.2]] while saving some
|
||||||
|
statistics in =bench.csv=. (If you compare our results with theirs,
|
||||||
|
keep in mind that Lily uses Moore's semantics, while =ltlsynt= uses
|
||||||
|
Mealy's semantics.)
|
||||||
|
|
||||||
|
#+BEGIN_SRC sh :results verbatim :exports code :epilogue true
|
||||||
|
genltl --lily-patterns |
|
||||||
|
ltlsynt --algo=acd --realizability --csv-without-formula=bench.csv
|
||||||
|
#+END_SRC
|
||||||
|
#+RESULTS:
|
||||||
|
#+begin_example
|
||||||
|
UNREALIZABLE
|
||||||
|
UNREALIZABLE
|
||||||
|
REALIZABLE
|
||||||
|
REALIZABLE
|
||||||
|
REALIZABLE
|
||||||
|
REALIZABLE
|
||||||
|
REALIZABLE
|
||||||
|
REALIZABLE
|
||||||
|
REALIZABLE
|
||||||
|
REALIZABLE
|
||||||
|
UNREALIZABLE
|
||||||
|
REALIZABLE
|
||||||
|
REALIZABLE
|
||||||
|
REALIZABLE
|
||||||
|
REALIZABLE
|
||||||
|
REALIZABLE
|
||||||
|
REALIZABLE
|
||||||
|
REALIZABLE
|
||||||
|
REALIZABLE
|
||||||
|
REALIZABLE
|
||||||
|
REALIZABLE
|
||||||
|
REALIZABLE
|
||||||
|
REALIZABLE
|
||||||
|
#+end_example
|
||||||
|
|
||||||
|
After execution, =bench.csv= contains a table like the following:
|
||||||
|
|
||||||
|
#+BEGIN_SRC sh :results output raw :exports results
|
||||||
|
sed 's/"//g
|
||||||
|
s/|/\\vert{}/g
|
||||||
|
s/--/@@html:--@@/g
|
||||||
|
1a\
|
||||||
|
|-|
|
||||||
|
s/^/| /
|
||||||
|
s/$/ |/
|
||||||
|
s/,/|/g
|
||||||
|
' bench.csv
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
#+RESULTS:
|
||||||
|
| source | algo | tot_time | trans_time | split_time | todpa_time | solve_time | realizable | game_states | game_states_env |
|
||||||
|
|--------+------+-------------+-------------+-------------+-------------+-------------+------------+-------------+-----------------|
|
||||||
|
| -:1 | acd | 0.000472663 | 0.00019603 | 2.0339e-05 | 2.0388e-05 | 1.4617e-05 | 0 | 3 | 2 |
|
||||||
|
| -:2 | acd | 0.00028595 | 0.000188466 | 1.4417e-05 | 2.0027e-05 | 5.861e-06 | 0 | 13 | 7 |
|
||||||
|
| -:3 | acd | 0.000741622 | 0.000591889 | 4.7229e-05 | 1.9516e-05 | 1.8014e-05 | 1 | 26 | 12 |
|
||||||
|
| -:4 | acd | 0.000917794 | 0.000725371 | 7.2026e-05 | 3.0328e-05 | 2.0349e-05 | 1 | 33 | 15 |
|
||||||
|
| -:5 | acd | 0.000878991 | 0.000612978 | 0.000102604 | 3.4155e-05 | 2.7913e-05 | 1 | 47 | 20 |
|
||||||
|
| -:6 | acd | 0.00100199 | 0.000761539 | 8.0191e-05 | 2.9817e-05 | 2.9075e-05 | 1 | 55 | 24 |
|
||||||
|
| -:7 | acd | 0.000587721 | 0.000425814 | 4.6268e-05 | 1.6261e-05 | 1.4106e-05 | 1 | 26 | 11 |
|
||||||
|
| -:8 | acd | 1.4046e-05 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
|
||||||
|
| -:9 | acd | 0.000519242 | 0.000400918 | 2.2322e-05 | 2.9446e-05 | 1.3886e-05 | 1 | 16 | 6 |
|
||||||
|
| -:10 | acd | 6.0835e-05 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
|
||||||
|
| -:11 | acd | 5.5245e-05 | 1.8335e-05 | 5.249e-06 | 4.007e-06 | 4.549e-06 | 0 | 3 | 2 |
|
||||||
|
| -:12 | acd | 1.6411e-05 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
|
||||||
|
| -:13 | acd | 0.000192153 | 0.000134825 | 1.06e-05 | 8.506e-06 | 5.33e-06 | 1 | 5 | 2 |
|
||||||
|
| -:14 | acd | 0.000291931 | 0.000209857 | 1.0881e-05 | 1.4076e-05 | 6.182e-06 | 1 | 4 | 2 |
|
||||||
|
| -:15 | acd | 0.000690605 | 0.000480759 | 9.4349e-05 | 3.2541e-05 | 1.8675e-05 | 1 | 30 | 9 |
|
||||||
|
| -:16 | acd | 0.00232829 | 0.00173036 | 0.000348709 | 9.2966e-05 | 6.1276e-05 | 1 | 103 | 29 |
|
||||||
|
| -:17 | acd | 0.000554708 | 0.00038608 | 2.4887e-05 | 2.9205e-05 | 1.1902e-05 | 1 | 6 | 3 |
|
||||||
|
| -:18 | acd | 0.00114041 | 0.00088879 | 3.3784e-05 | 3.4585e-05 | 1.1602e-05 | 1 | 8 | 4 |
|
||||||
|
| -:19 | acd | 0.000761799 | 0.000517278 | 4.3132e-05 | 5.1968e-05 | 2.127e-05 | 1 | 11 | 4 |
|
||||||
|
| -:20 | acd | 0.0169891 | 0.0133503 | 0.00172203 | 0.00113707 | 0.000412299 | 1 | 1002 | 311 |
|
||||||
|
| -:21 | acd | 0.118002 | 0.115604 | 0.00165549 | 0.000149402 | 0.00024346 | 1 | 371 | 75 |
|
||||||
|
| -:22 | acd | 0.00316832 | 0.00240598 | 0.000305407 | 0.000103245 | 0.00010582 | 1 | 86 | 30 |
|
||||||
|
| -:23 | acd | 0.000824969 | 0.000632956 | 3.2161e-05 | 2.9766e-05 | 2.0299e-05 | 1 | 17 | 7 |
|
||||||
|
|
||||||
|
A source of the form =-:N= designates the Nth line of the standard
|
||||||
|
input, as =ltlsynt= was reading from that. The various =*_time*=
|
||||||
|
columns refers to different steps in the processing pipeline. Note
|
||||||
|
that various bits and minor operations are not timed, so =tot_time=
|
||||||
|
(the total time) should be larger than the sum of times used for
|
||||||
|
translation, splitting, conversion to DPA, and game solving. Some of
|
||||||
|
these intermediate processing time are listed as =0= above because
|
||||||
|
(e.g., for input 8, 10, 12) because the specifications can be found to
|
||||||
|
be realizable trivially without building any game.
|
||||||
|
|
||||||
|
** Verifying the output
|
||||||
|
|
||||||
The =--verify= option requests that the produced strategy or aiger
|
The =--verify= option requests that the produced strategy or aiger
|
||||||
circuit are compatible with the specification. This is done by
|
circuit are compatible with the specification. This is done by
|
||||||
|
|
|
||||||
|
|
@ -2215,17 +2215,6 @@ namespace spot
|
||||||
(twa_graph_ptr strat)
|
(twa_graph_ptr strat)
|
||||||
{
|
{
|
||||||
dict->unregister_all_my_variables(&tmp);
|
dict->unregister_all_my_variables(&tmp);
|
||||||
if (vs)
|
|
||||||
{
|
|
||||||
*vs << "direct strategy was found.\n";
|
|
||||||
if (want_strategy)
|
|
||||||
{
|
|
||||||
*vs << "direct strat has " << strat->num_states()
|
|
||||||
<< " states, " << strat->num_edges()
|
|
||||||
<< " edges and " << strat->num_sets() << " colors\n";
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (strat)
|
if (strat)
|
||||||
{
|
{
|
||||||
strat->merge_edges();
|
strat->merge_edges();
|
||||||
|
|
@ -2238,6 +2227,13 @@ namespace spot
|
||||||
|
|
||||||
set_synthesis_outputs(strat, outputs);
|
set_synthesis_outputs(strat, outputs);
|
||||||
}
|
}
|
||||||
|
if (vs)
|
||||||
|
{
|
||||||
|
*vs << "direct strategy was found.\n";
|
||||||
|
if (strat && want_strategy)
|
||||||
|
*vs << "direct strategy has " << strat->num_states()
|
||||||
|
<< " states and " << strat->num_edges() << " edges\n";
|
||||||
|
}
|
||||||
return mealy_like{
|
return mealy_like{
|
||||||
mealy_like::realizability_code::REALIZABLE_REGULAR,
|
mealy_like::realizability_code::REALIZABLE_REGULAR,
|
||||||
strat,
|
strat,
|
||||||
|
|
@ -2383,15 +2379,19 @@ namespace spot
|
||||||
auto res = trans.run(f_left);
|
auto res = trans.run(f_left);
|
||||||
|
|
||||||
if (!is_deterministic(res))
|
if (!is_deterministic(res))
|
||||||
return ret_sol_maybe();
|
{
|
||||||
|
if (bv)
|
||||||
|
{
|
||||||
|
auto delta = sw.stop();
|
||||||
|
bv->trans_time += delta;
|
||||||
|
if (vs)
|
||||||
|
*vs << "translating formula done in " << delta
|
||||||
|
<< " seconds...\n... but it gave a "
|
||||||
|
<< "non-deterministic automaton (rejected)\n";
|
||||||
|
}
|
||||||
|
return ret_sol_maybe();
|
||||||
|
}
|
||||||
|
|
||||||
if (bv)
|
|
||||||
{
|
|
||||||
auto delta = sw.stop();
|
|
||||||
bv->trans_time += delta;
|
|
||||||
if (vs)
|
|
||||||
*vs << "translating formula done in " << delta << " seconds\n";
|
|
||||||
}
|
|
||||||
res->prop_complete(trival::maybe());
|
res->prop_complete(trival::maybe());
|
||||||
|
|
||||||
bdd output_bdd = bddtrue;
|
bdd output_bdd = bddtrue;
|
||||||
|
|
@ -2442,12 +2442,23 @@ namespace spot
|
||||||
res->prop_terminal(trival::maybe());
|
res->prop_terminal(trival::maybe());
|
||||||
res->set_named_prop<bdd>("synthesis-outputs", new bdd(output_bdd));
|
res->set_named_prop<bdd>("synthesis-outputs", new bdd(output_bdd));
|
||||||
|
|
||||||
|
if (bv)
|
||||||
|
{
|
||||||
|
auto delta = sw.stop();
|
||||||
|
bv->trans_time += delta;
|
||||||
|
if (vs)
|
||||||
|
*vs << "translating formula done in " << delta << " seconds\n";
|
||||||
|
}
|
||||||
return ret_sol_exists(res);
|
return ret_sol_exists(res);
|
||||||
}
|
}
|
||||||
else if (f_other.is_tt())
|
else if (f_other.is_tt())
|
||||||
{
|
{
|
||||||
if (!want_strategy)
|
if (!want_strategy)
|
||||||
return ret_sol_exists(nullptr);
|
return ret_sol_exists(nullptr);
|
||||||
|
stopwatch sw;
|
||||||
|
if (bv)
|
||||||
|
sw.start();
|
||||||
|
|
||||||
auto res = make_twa_graph(dict);
|
auto res = make_twa_graph(dict);
|
||||||
res->prop_weak(true);
|
res->prop_weak(true);
|
||||||
|
|
||||||
|
|
@ -2463,6 +2474,13 @@ namespace spot
|
||||||
bdd g_bdd = formula_to_bdd(f_g, dict, res);
|
bdd g_bdd = formula_to_bdd(f_g, dict, res);
|
||||||
res->new_state();
|
res->new_state();
|
||||||
res->new_edge(0, 0, g_bdd);
|
res->new_edge(0, 0, g_bdd);
|
||||||
|
if (bv)
|
||||||
|
{
|
||||||
|
auto delta = sw.stop();
|
||||||
|
bv->trans_time += delta;
|
||||||
|
if (vs)
|
||||||
|
*vs << "translating formula done in " << delta << " seconds\n";
|
||||||
|
}
|
||||||
return ret_sol_exists(res);
|
return ret_sol_exists(res);
|
||||||
}
|
}
|
||||||
return ret_sol_maybe();
|
return ret_sol_maybe();
|
||||||
|
|
|
||||||
|
|
@ -143,12 +143,11 @@ test 4 = `wc -l < out.csv`
|
||||||
|
|
||||||
ltlsynt --from-pgame starve.ehoa \
|
ltlsynt --from-pgame starve.ehoa \
|
||||||
--from-pgame UnderapproxDemo2.ehoa \
|
--from-pgame UnderapproxDemo2.ehoa \
|
||||||
--from-pgame aut7.hoa --csv=out.csv >result || :
|
--from-pgame aut7.hoa --csv-without-formula=out.csv >result || :
|
||||||
test 4 = `wc -l < out.csv`
|
test 4 = `wc -l < out.csv`
|
||||||
cut -d, -f 9,10,11,12,13 <out.csv >right
|
cut -d, -f 9,10,11,12,13 <out.csv >right
|
||||||
end='"strat_num_states","strat_num_edges"'
|
|
||||||
cat >expect <<EOF
|
cat >expect <<EOF
|
||||||
"realizable","dpa_num_states","dpa_num_states_env",$end
|
"realizable","game_states","game_states_env","strat_states","strat_edges"
|
||||||
1,4,2,1,2
|
1,4,2,1,2
|
||||||
0,9,4,0,0
|
0,9,4,0,0
|
||||||
0,10,5,0,0
|
0,10,5,0,0
|
||||||
|
|
|
||||||
|
|
@ -211,7 +211,7 @@ there are 1 subformulas
|
||||||
trying to create strategy directly for GFa <-> GFb
|
trying to create strategy directly for GFa <-> GFb
|
||||||
translating formula done in X seconds
|
translating formula done in X seconds
|
||||||
direct strategy was found.
|
direct strategy was found.
|
||||||
direct strat has 1 states, 2 edges and 0 colors
|
direct strategy has 1 states and 1 edges
|
||||||
simplification took X seconds
|
simplification took X seconds
|
||||||
EOF
|
EOF
|
||||||
ltlsynt --ins=a --outs=b -f 'GFa <-> GFb' --verbose --algo=ps 2> out
|
ltlsynt --ins=a --outs=b -f 'GFa <-> GFb' --verbose --algo=ps 2> out
|
||||||
|
|
@ -660,7 +660,7 @@ there are 1 subformulas
|
||||||
trying to create strategy directly for GFa <-> GFb
|
trying to create strategy directly for GFa <-> GFb
|
||||||
translating formula done in X seconds
|
translating formula done in X seconds
|
||||||
direct strategy was found.
|
direct strategy was found.
|
||||||
direct strat has 1 states, 2 edges and 0 colors
|
direct strategy has 1 states and 1 edges
|
||||||
simplification took X seconds
|
simplification took X seconds
|
||||||
EOF
|
EOF
|
||||||
ltlsynt -f '(GFa <-> GFb) && (G(c <-> d))' --outs=b,c --verbose 2> out
|
ltlsynt -f '(GFa <-> GFb) && (G(c <-> d))' --outs=b,c --verbose 2> out
|
||||||
|
|
@ -676,7 +676,7 @@ do
|
||||||
trying to create strategy directly for $f
|
trying to create strategy directly for $f
|
||||||
translating formula done in X seconds
|
translating formula done in X seconds
|
||||||
direct strategy was found.
|
direct strategy was found.
|
||||||
direct strat has 1 states, 2 edges and 0 colors
|
direct strategy has 1 states and 1 edges
|
||||||
simplification took X seconds
|
simplification took X seconds
|
||||||
EOF
|
EOF
|
||||||
ltlsynt -f "$f" --outs=b,c --verbose --decompose=0 \
|
ltlsynt -f "$f" --outs=b,c --verbose --decompose=0 \
|
||||||
|
|
@ -705,7 +705,7 @@ cat >exp <<EOF
|
||||||
trying to create strategy directly for (GFb <-> GFa) & G((a & c) | (!a & !c))
|
trying to create strategy directly for (GFb <-> GFa) & G((a & c) | (!a & !c))
|
||||||
translating formula done in X seconds
|
translating formula done in X seconds
|
||||||
direct strategy was found.
|
direct strategy was found.
|
||||||
direct strat has 1 states, 2 edges and 0 colors
|
direct strategy has 1 states and 1 edges
|
||||||
simplification took X seconds
|
simplification took X seconds
|
||||||
EOF
|
EOF
|
||||||
ltlsynt -f '(GFb <-> GFa) && (G((a&c)|(!a&!c)))' --outs=b,c --verbose\
|
ltlsynt -f '(GFb <-> GFa) && (G((a&c)|(!a&!c)))' --outs=b,c --verbose\
|
||||||
|
|
@ -719,7 +719,7 @@ cat >exp <<EOF
|
||||||
trying to create strategy directly for Fa <-> FGb
|
trying to create strategy directly for Fa <-> FGb
|
||||||
translating formula done in X seconds
|
translating formula done in X seconds
|
||||||
direct strategy was found.
|
direct strategy was found.
|
||||||
direct strat has 2 states, 3 edges and 0 colors
|
direct strategy has 2 states and 3 edges
|
||||||
simplification took X seconds
|
simplification took X seconds
|
||||||
EOF
|
EOF
|
||||||
ltlsynt -f "Fa <-> FGb" --outs=b,c --verbose --decompose=0 --verify 2> out
|
ltlsynt -f "Fa <-> FGb" --outs=b,c --verbose --decompose=0 --verify 2> out
|
||||||
|
|
@ -789,8 +789,9 @@ new formula: x & y
|
||||||
new formula: 1
|
new formula: 1
|
||||||
there are 1 subformulas
|
there are 1 subformulas
|
||||||
trying to create strategy directly for 1
|
trying to create strategy directly for 1
|
||||||
|
translating formula done in X seconds
|
||||||
direct strategy was found.
|
direct strategy was found.
|
||||||
direct strat has 1 states, 1 edges and 0 colors
|
direct strategy has 1 states and 1 edges
|
||||||
simplification took X seconds
|
simplification took X seconds
|
||||||
AIG circuit was created in X seconds and has 0 latches and 0 gates
|
AIG circuit was created in X seconds and has 0 latches and 0 gates
|
||||||
EOF
|
EOF
|
||||||
|
|
@ -804,13 +805,15 @@ cat >exp <<EOF
|
||||||
there are 2 subformulas
|
there are 2 subformulas
|
||||||
working on subformula Gx
|
working on subformula Gx
|
||||||
trying to create strategy directly for Gx
|
trying to create strategy directly for Gx
|
||||||
|
translating formula done in X seconds
|
||||||
direct strategy was found.
|
direct strategy was found.
|
||||||
direct strat has 1 states, 1 edges and 0 colors
|
direct strategy has 1 states and 1 edges
|
||||||
simplification took X seconds
|
simplification took X seconds
|
||||||
working on subformula Gy
|
working on subformula Gy
|
||||||
trying to create strategy directly for Gy
|
trying to create strategy directly for Gy
|
||||||
|
translating formula done in X seconds
|
||||||
direct strategy was found.
|
direct strategy was found.
|
||||||
direct strat has 1 states, 1 edges and 0 colors
|
direct strategy has 1 states and 1 edges
|
||||||
simplification took X seconds
|
simplification took X seconds
|
||||||
AIG circuit was created in X seconds and has 0 latches and 0 gates
|
AIG circuit was created in X seconds and has 0 latches and 0 gates
|
||||||
EOF
|
EOF
|
||||||
|
|
@ -1061,7 +1064,7 @@ there are 1 subformulas
|
||||||
trying to create strategy directly for GFi <-> GFo1
|
trying to create strategy directly for GFi <-> GFo1
|
||||||
translating formula done in X seconds
|
translating formula done in X seconds
|
||||||
direct strategy was found.
|
direct strategy was found.
|
||||||
direct strat has 1 states, 2 edges and 0 colors
|
direct strategy has 1 states and 1 edges
|
||||||
simplification took X seconds
|
simplification took X seconds
|
||||||
EOF
|
EOF
|
||||||
ltlsynt -f "G(o1|o2) & (GFi <-> GFo1)" --outs="o1,o2" --verbose\
|
ltlsynt -f "G(o1|o2) & (GFi <-> GFo1)" --outs="o1,o2" --verbose\
|
||||||
|
|
@ -1255,8 +1258,9 @@ new formula: G(o1 | !o2) & G(!o1 | o2)
|
||||||
o2 := o1
|
o2 := o1
|
||||||
new formula: G(o1 | !o1)
|
new formula: G(o1 | !o1)
|
||||||
trying to create strategy directly for G(o1 | !o1)
|
trying to create strategy directly for G(o1 | !o1)
|
||||||
|
translating formula done in X seconds
|
||||||
direct strategy was found.
|
direct strategy was found.
|
||||||
direct strat has 1 states, 1 edges and 0 colors
|
direct strategy has 1 states and 1 edges
|
||||||
simplification took X seconds
|
simplification took X seconds
|
||||||
working on subformula G(!i1 -> (o3 | !o4)) & G(!i2 -> (!o3 | o4))
|
working on subformula G(!i1 -> (o3 | !o4)) & G(!i2 -> (!o3 | o4))
|
||||||
the following signals can be temporarily removed:
|
the following signals can be temporarily removed:
|
||||||
|
|
@ -1266,8 +1270,9 @@ new formula: G(o3 | !o4) & G(!o3 | o4)
|
||||||
o4 := o3
|
o4 := o3
|
||||||
new formula: G(o3 | !o3)
|
new formula: G(o3 | !o3)
|
||||||
trying to create strategy directly for G(o3 | !o3)
|
trying to create strategy directly for G(o3 | !o3)
|
||||||
|
translating formula done in X seconds
|
||||||
direct strategy was found.
|
direct strategy was found.
|
||||||
direct strat has 1 states, 1 edges and 0 colors
|
direct strategy has 1 states and 1 edges
|
||||||
simplification took X seconds
|
simplification took X seconds
|
||||||
REALIZABLE
|
REALIZABLE
|
||||||
HOA: v1
|
HOA: v1
|
||||||
|
|
@ -1298,13 +1303,15 @@ new formula: G(i1->(o1 | !o2)) & G(!i1->(o3 | !o4)) & $gg
|
||||||
there are 2 subformulas
|
there are 2 subformulas
|
||||||
working on subformula G(i1->(o1 | !o2)) & G(i2->(!o1 | o2))
|
working on subformula G(i1->(o1 | !o2)) & G(i2->(!o1 | o2))
|
||||||
trying to create strategy directly for G(i1->(o1 | !o2)) & G(i2->(!o1 | o2))
|
trying to create strategy directly for G(i1->(o1 | !o2)) & G(i2->(!o1 | o2))
|
||||||
|
translating formula done in X seconds
|
||||||
direct strategy was found.
|
direct strategy was found.
|
||||||
direct strat has 1 states, 1 edges and 0 colors
|
direct strategy has 1 states and 1 edges
|
||||||
simplification took X seconds
|
simplification took X seconds
|
||||||
working on subformula G(!i1->(o3 | !o4)) & G(!i2->(!o3 | o4))
|
working on subformula G(!i1->(o3 | !o4)) & G(!i2->(!o3 | o4))
|
||||||
trying to create strategy directly for G(!i1->(o3 | !o4)) & G(!i2->(!o3 | o4))
|
trying to create strategy directly for G(!i1->(o3 | !o4)) & G(!i2->(!o3 | o4))
|
||||||
|
translating formula done in X seconds
|
||||||
direct strategy was found.
|
direct strategy was found.
|
||||||
direct strat has 1 states, 1 edges and 0 colors
|
direct strategy has 1 states and 1 edges
|
||||||
simplification took X seconds
|
simplification took X seconds
|
||||||
REALIZABLE
|
REALIZABLE
|
||||||
HOA: v1
|
HOA: v1
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ except ImportError:
|
||||||
x = pandas.read_csv("out.csv")
|
x = pandas.read_csv("out.csv")
|
||||||
x.to_csv('filtered.csv',
|
x.to_csv('filtered.csv',
|
||||||
columns=('source', 'formula', 'algo',
|
columns=('source', 'formula', 'algo',
|
||||||
'realizable', 'strat_num_states'),
|
'realizable', 'strat_states'),
|
||||||
index=False)
|
index=False)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
|
@ -56,7 +56,7 @@ EOF
|
||||||
$PYTHON test.py
|
$PYTHON test.py
|
||||||
|
|
||||||
cat >expected <<EOF
|
cat >expected <<EOF
|
||||||
source,formula,algo,realizable,strat_num_states
|
source,formula,algo,realizable,strat_states
|
||||||
formulas.ltl:1,G(i1 <-> Xo1),lar,1,3
|
formulas.ltl:1,G(i1 <-> Xo1),lar,1,3
|
||||||
formulas.ltl:2,F(i1 xor i2) <-> Fo1,lar,1,2
|
formulas.ltl:2,F(i1 xor i2) <-> Fo1,lar,1,2
|
||||||
formulas.ltl:3,i1 <-> F(o1 xor o2),lar,1,3
|
formulas.ltl:3,i1 <-> F(o1 xor o2),lar,1,3
|
||||||
|
|
@ -72,7 +72,7 @@ ltlsynt --ins=i1,i2 -F input.csv/-2 --csv=out.csv -q && exit 2
|
||||||
test $? -eq 1
|
test $? -eq 1
|
||||||
$PYTHON test.py
|
$PYTHON test.py
|
||||||
cat >expected <<EOF
|
cat >expected <<EOF
|
||||||
source,formula,algo,realizable,strat_num_states
|
source,formula,algo,realizable,strat_states
|
||||||
input.csv:2,G(i1 <-> Xo1),lar,1,3
|
input.csv:2,G(i1 <-> Xo1),lar,1,3
|
||||||
input.csv:3,F(i1 xor i2) <-> Fo1,lar,1,2
|
input.csv:3,F(i1 xor i2) <-> Fo1,lar,1,2
|
||||||
input.csv:4,i1 <-> F(o1 xor o2),lar,1,3
|
input.csv:4,i1 <-> F(o1 xor o2),lar,1,3
|
||||||
|
|
@ -85,7 +85,7 @@ grep -v 0,0 filtered.csv >input.csv
|
||||||
ltlsynt -F input.csv/-2 --csv=out.csv -q
|
ltlsynt -F input.csv/-2 --csv=out.csv -q
|
||||||
$PYTHON test.py
|
$PYTHON test.py
|
||||||
cat >expected <<EOF
|
cat >expected <<EOF
|
||||||
source,formula,algo,realizable,strat_num_states
|
source,formula,algo,realizable,strat_states
|
||||||
input.csv:2,G(i1 <-> Xo1),lar,1,3
|
input.csv:2,G(i1 <-> Xo1),lar,1,3
|
||||||
input.csv:3,F(i1 xor i2) <-> Fo1,lar,1,2
|
input.csv:3,F(i1 xor i2) <-> Fo1,lar,1,2
|
||||||
input.csv:4,i1 <-> F(o1 xor o2),lar,1,3
|
input.csv:4,i1 <-> F(o1 xor o2),lar,1,3
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue