#! /bin/sh # -*- coding: utf-8 -*- # Copyright (C) 2017, 2019-2021 Laboratoire de Recherche et # Développement de l'Epita (LRDE). # # This file is part of Spot, a model checking library. # # Spot is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # Spot is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public # License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . . ./defs || exit 1 set -e cat >exp < out for algo in ds sd lar; do ltlsynt --ins=a --outs=b -f 'GFa <-> GFb' --algo=$algo --print-pg >>out done diff out exp cat >exp < GFb' --aiger=isop >out diff out exp cat >exp < GFb' --aiger=isop+dc >out diff out exp cat >exp < GFb' --aiger=isop+ud >out diff out exp cat >exp < GFb' --aiger=isop+sub1 >out diff out exp cat >exp < GFb' --aiger=isop+sub2 >out diff out exp cat >exp < GFb' --aiger=isop,isop+dc,isop+ud >out diff out exp ltlsynt --ins=a --outs=b -f 'GFa <-> GFb' --aiger=ite >out diff out exp ltlsynt --ins=a --outs=b -f 'GFa <-> GFb' --aiger=ite+ud+dc >out diff out exp ltlsynt --ins=a --outs=b -f 'GFa <-> GFb' --aiger >out diff out exp cat >exp < (GFb & GFc)' \ --algo=ds --simplify=no --aiger=isop >out diff out exp cat >exp < (GFb & GFc)' \ --algo=ds --simplify=no --aiger=isop+dc >out diff out exp cat >exp < (GFb & GFc)' \ --algo=ds --simplify=no --aiger=ite >out diff out exp cat >exp < GFb' --verbose --realizability 2> out sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx diff outx exp cat >exp < GFb' --verbose --algo=ps 2> out sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx diff outx exp cat >exp < GFe' \ --verbose --realizability --algo=lar 2> out sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx diff outx exp cat >exp < G(i1 <-> o0)" --outs="o0" --algo=lar \ --verbose --realizability 2> out sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx diff outx exp for r in '' '--real'; do opts="$r --ins=a --outs=b -f" ltlsynt --algo=ds $opts 'GFa <-> GFb' --csv=FILE || : ltlsynt --algo=sd $opts 'FGa <-> GF(b&XXb)' --csv='>>FILE' || : ltlsynt --algo=ps $opts 'FGa <-> GF(b&XXb)' --csv='>>FILE' || : ltlsynt --algo=lar $opts 'FGc <-> GF(!b&XXb)' --csv='>>FILE' || : ltlsynt --algo=lar.old $opts 'FGa <-> GF(c&a)' --csv='>>FILE' || : test 6 = `wc -l < FILE` # Make sure all lines in FILE have the same number of commas sed 's/[^,]//g' < FILE | ( read first while read l; do test "x$first" = "x$l" || exit 1 done) done for a in sd ds lar lar.old; do test 1 = `grep -c ",.$a.," FILE` || exit 1 done # ltlsynt --algo=lar --ins=a --outs=b -f 'FGa <-> GF(c&a)' --print-pg --csv >out # grep parity out # grep 'FGa.*,"lar",' out # grep formula out F0='(G ((((req) -> (X ((grant) && (X ((grant) && (X (grant))))))) && ((grant) -> (X (! (grant))))) && ((cancel) -> (X ((! (grant)) U (go))))))' IN0='cancel, go, req' OUT0='grant' EXP0='UNREALIZABLE' F1='(G ((((req) -> (X ((grant) || (X ((grant) || (X (grant))))))) && ((grant) -> (X (! (grant))))) && ((cancel) -> (X ((! (grant)) U (go))))))' IN1='cancel, go, req' OUT1='grant' EXP1='UNREALIZABLE' F2='((G ((cancel) -> (X (go)))) -> (G ((((req) -> (X ((grant) || (X ((grant) || (X (grant))))))) && ((grant) -> (X (! (grant))))) && ((cancel) -> (X ((! (grant)) U (go)))))))' IN2='cancel, go, req' OUT2='grant' EXP2='REALIZABLE' F3='((G ((cancel) -> (X ((go) || (X (go)))))) -> (G ((((req) -> (X ((grant) || (X ((grant) || (X (grant))))))) && ((grant) -> (X (! (grant))))) && ((cancel) -> (X ((! (grant)) U (go)))))))' IN3='cancel, go, req' OUT3='grant' EXP3='REALIZABLE' F4='((G ((cancel) -> (X ((go) || (X (go)))))) -> (G ((((req) -> (X (((grant) || (cancel)) || (X (((grant) || (cancel)) || (X ((grant) || (cancel)))))))) && ((grant) -> (X (! (grant))))) && ((cancel) -> (X ((! (grant)) U (go)))))))' IN4='cancel, go, req' OUT4='grant' EXP4='REALIZABLE' F5='((G ((cancel) -> (X ((go) || (X ((go) || (X (go)))))))) -> (G ((((req) -> (X (((grant) || (cancel)) || (X (((grant) || (cancel)) || (X ((grant) || (cancel)))))))) && ((grant) -> (X (! (grant))))) && ((cancel) -> (X ((! (grant)) U (go)))))))' IN5='cancel, go, req' OUT5='grant' EXP5='REALIZABLE' F6='((G ((cancel) -> (X ((go) || (X (go)))))) -> (G ((((cancel) -> (X ((! (grant)) U (go)))) && ((grant) -> (X (! (grant))))) && ((req) -> (((grant) || (cancel)) || (X (((grant) || (cancel)) || (X (((grant) || (cancel)) || (X ((grant) || (cancel))))))))))))' IN6='cancel, go, req' OUT6='grant' EXP6='REALIZABLE' F7='(! ((G ((req) -> (F (ack)))) && (G ((go) -> (F (grant))))))' IN7='go, req' OUT7='ack, grant' EXP7='UNREALIZABLE' F8='(((G ((((r1) -> (F (a1))) && ((r2) -> (F (a2)))) && (! ((a1) && (a2))))) && (((a1) U (r1)) || (G (a1)))) && (((a2) U (r2)) || (G (a2))))' IN8='r1, r2' OUT8='a1, a2' EXP8='UNREALIZABLE' F9='((((G (((((((r0) -> (F (a0))) && ((r1) -> (F (a1)))) && ((r2) -> (F (a2)))) && (! ((a0) && (a1)))) && (! ((a0) && (a2)))) && (! ((a1) && (a2))))) && (((a0) U (r0)) || (G (a0)))) && (((a1) U (r1)) || (G (a1)))) && (((a2) U (r2)) || (G (a2))))' IN9='r0, r1, r2' OUT9='a0, a1, a2' EXP9='UNREALIZABLE' IN10='a, b, c' OUT10='p0, p1, p2' F10='G (p0 && ! p1 && ! p2 || (! p0 && p1 && ! p2) || (! p0 && ! p1 && p2)) && (F (G a) || F (G b) || G (F c) <-> (G (F p0) || (G (F p1) && ! G (F p2))))' EXP10='REALIZABLE' for i in 0 1 7 8 9; do F=$(eval echo \$F$i) IN=$(eval echo \$IN$i) OUT=$(eval echo \$OUT$i) EXP=$(eval echo \$EXP$i) for algo in sd ds lar; do test $EXP = $(ltlsynt -f "$F" --ins="$IN" --outs="$OUT" --realizability \ --algo=$algo) done done for i in 2 3 4 5 6 10; do F=$(eval echo \$F$i) IN=$(eval echo \$IN$i) OUT=$(eval echo \$OUT$i) EXP=$(eval echo \$EXP$i) ltl2tgba -f "!($F)" > negf_aut$i # test ltlsynt for algo in sd ds ps lar lar.old; do ltlsynt -f "$F" --ins="$IN" --outs="$OUT" --algo=$algo > out$i || true REAL=`head -1 out$i` test $REAL = $EXP tail -n +2 out$i > res$i # check that the L(strategy) is included in L(F) autfilt -q -v --intersect=negf_aut$i res$i # check that all environment actions are possible autfilt --remove-ap="$OUT" res$i | autfilt --dualize | autfilt --is-empty -q done done cat >exp < out diff out exp cat >exp < out diff out exp ltlsynt --outs=p0 -f '!XXF(p0 & (p0 M Gp0))' > out diff out exp f='Fp0 U XX((p0 & F!p1) | (!p0 & Gp1))' ltlsynt --verbose --algo=ps --outs=p1 --ins=p0 -f "$f" -x"dpa-simul=1" 2>err grep 'DPA has 13 states' err ltlsynt -x dpa-simul=0 --verbose --algo=ps --outs=p1 --ins=p0 -f "$f" 2>err grep 'DPA has 29 states' err ltlsynt --verbose -x wdba-minimize=1 --algo=ps --outs=p1 --ins=p0 -f "$f" 2>err grep 'DPA has 12 states' err ltlsynt --outs=p1 -f "$f" -x"dpa-simul=1" --simpl=no | grep 'States: 5' ltlsynt --outs=p1 -f "$f" -x"dpa-simul=1" --simpl=bisim | grep 'States: 5' ltlsynt --outs=p1 -f "$f" -x"dpa-simul=1" --simpl=bwoa | grep 'States: 4' ltlsynt --outs=p1 -f "$f" -x"dpa-simul=1" | grep 'States: 4' ltlsynt --outs=p1 -f "$f" -x"dpa-simul=1" --simpl=sat | grep 'States: 2' ltlsynt --outs=p1 -f "$f" -x"dpa-simul=1" --simpl=bisim-sat | grep 'States: 2' ltlsynt --outs=p1 -f "$f" -x"dpa-simul=1" --simpl=bwoa-sat | grep 'States: 4' cat >exp <X(o0)) && G((i2|i3)<->X(o1))" --outs="o0,o1"\ --aiger=isop --algo=lar --decompose=no --simpl=no >out diff out exp cat >exp <X(o0)) && G((i2|i3)<->X(o1))" --outs="o0,o1"\ --aiger=isop --algo=lar --decompose=yes --simpl=no >out diff out exp ltlsynt -f "G((i0 && i1)<->X(o0)) && G((i2|i3)<->X(o1))" --outs="o0,o1"\ --aiger=isop --algo=lar --simpl=no >out diff out exp # Issue #477 ltlsynt -f 'a U (b' 2>err && exit 1 test $? -eq 2 test `wc -l expected < c)' >stdout diff stdout expected ltlsynt --outs=c -f 'G (a & b <=> c)' >stdout diff stdout expected