Fixes #539. * AUTHORS: Update by indicating the status of each contributor. * Makefile.am, bench/Makefile.am, bench/dtgbasat/Makefile.am, bench/dtgbasat/gen.py, bench/emptchk/Makefile.am, bench/emptchk/defs.in, bench/ltl2tgba/Makefile.am, bench/ltl2tgba/defs.in, bench/ltl2tgba/sum.py, bench/ltlclasses/Makefile.am, bench/ltlcounter/Makefile.am, bench/spin13/Makefile.am, bench/stutter/Makefile.am, bench/stutter/stutter_invariance_formulas.cc, bench/stutter/stutter_invariance_randomgraph.cc, bench/wdba/Makefile.am, bin/Makefile.am, bin/autcross.cc, bin/autfilt.cc, bin/common_aoutput.cc, bin/common_aoutput.hh, bin/common_color.cc, bin/common_color.hh, bin/common_conv.cc, bin/common_conv.hh, bin/common_cout.cc, bin/common_cout.hh, bin/common_file.cc, bin/common_file.hh, bin/common_finput.cc, bin/common_finput.hh, bin/common_hoaread.cc, bin/common_hoaread.hh, bin/common_output.cc, bin/common_output.hh, bin/common_post.cc, bin/common_post.hh, bin/common_r.cc, bin/common_r.hh, bin/common_range.cc, bin/common_range.hh, bin/common_setup.cc, bin/common_setup.hh, bin/common_sys.hh, bin/common_trans.cc, bin/common_trans.hh, bin/dstar2tgba.cc, bin/genaut.cc, bin/genltl.cc, bin/ltl2tgba.cc, bin/ltl2tgta.cc, bin/ltlcross.cc, bin/ltldo.cc, bin/ltlfilt.cc, bin/ltlgrind.cc, bin/ltlsynt.cc, bin/man/Makefile.am, bin/options.py, bin/randaut.cc, bin/randltl.cc, bin/spot-x.cc, bin/spot.cc, configure.ac, debian/copyright, doc/Makefile.am, doc/tl/Makefile.am, elisp/Makefile.am, python/Makefile.am, python/buddy.i, python/spot/__init__.py, python/spot/aux_.py, python/spot/gen.i, python/spot/impl.i, python/spot/jupyter.py, python/spot/ltsmin.i, spot/Makefile.am, spot/gen/Makefile.am, spot/gen/automata.cc, spot/gen/automata.hh, spot/gen/formulas.cc, spot/gen/formulas.hh, spot/graph/Makefile.am, spot/graph/graph.hh, spot/graph/ngraph.hh, spot/kripke/Makefile.am, spot/kripke/fairkripke.cc, spot/kripke/fairkripke.hh, spot/kripke/fwd.hh, spot/kripke/kripke.cc, spot/kripke/kripke.hh, spot/kripke/kripkegraph.hh, spot/ltsmin/Makefile.am, spot/ltsmin/ltsmin.cc, spot/ltsmin/ltsmin.hh, spot/ltsmin/spins_interface.cc, spot/ltsmin/spins_interface.hh, spot/ltsmin/spins_kripke.hh, spot/ltsmin/spins_kripke.hxx, spot/mc/Makefile.am, spot/mc/bloemen.hh, spot/mc/bloemen_ec.hh, spot/mc/cndfs.hh, spot/mc/deadlock.hh, spot/mc/intersect.hh, spot/mc/lpar13.hh, spot/mc/mc.hh, spot/mc/mc_instanciator.hh, spot/mc/unionfind.cc, spot/mc/unionfind.hh, spot/mc/utils.hh, spot/misc/Makefile.am, spot/misc/bareword.cc, spot/misc/bareword.hh, spot/misc/bddlt.hh, spot/misc/bitset.cc, spot/misc/bitset.hh, spot/misc/bitvect.cc, spot/misc/bitvect.hh, spot/misc/casts.hh, spot/misc/clz.hh, spot/misc/common.hh, spot/misc/escape.cc, spot/misc/escape.hh, spot/misc/fixpool.hh, spot/misc/formater.cc, spot/misc/formater.hh, spot/misc/hash.hh, spot/misc/hashfunc.hh, spot/misc/intvcmp2.cc, spot/misc/intvcmp2.hh, spot/misc/intvcomp.cc, spot/misc/intvcomp.hh, spot/misc/ltstr.hh, spot/misc/memusage.cc, spot/misc/memusage.hh, spot/misc/minato.cc, spot/misc/minato.hh, spot/misc/mspool.hh, spot/misc/optionmap.cc, spot/misc/optionmap.hh, spot/misc/random.cc, spot/misc/random.hh, spot/misc/satsolver.cc, spot/misc/satsolver.hh, spot/misc/timer.cc, spot/misc/timer.hh, spot/misc/tmpfile.cc, spot/misc/tmpfile.hh, spot/misc/trival.hh, spot/misc/version.cc, spot/misc/version.hh, spot/parseaut/Makefile.am, spot/parseaut/fmterror.cc, spot/parseaut/parseaut.yy, spot/parseaut/parsedecl.hh, spot/parseaut/public.hh, spot/parseaut/scanaut.ll, spot/parsetl/Makefile.am, spot/parsetl/fmterror.cc, spot/parsetl/parsedecl.hh, spot/parsetl/parsetl.yy, spot/parsetl/scantl.ll, spot/priv/Makefile.am, spot/priv/accmap.hh, spot/priv/bddalloc.cc, spot/priv/bddalloc.hh, spot/priv/freelist.cc, spot/priv/freelist.hh, spot/priv/partitioned_relabel.cc, spot/priv/partitioned_relabel.hh, spot/priv/satcommon.cc, spot/priv/satcommon.hh, spot/priv/trim.cc, spot/priv/trim.hh, spot/priv/weight.cc, spot/priv/weight.hh, spot/ta/Makefile.am, spot/ta/ta.cc, spot/ta/ta.hh, spot/ta/taexplicit.cc, spot/ta/taexplicit.hh, spot/ta/taproduct.cc, spot/ta/taproduct.hh, spot/ta/tgta.hh, spot/ta/tgtaexplicit.cc, spot/ta/tgtaexplicit.hh, spot/ta/tgtaproduct.cc, spot/ta/tgtaproduct.hh, spot/taalgos/Makefile.am, spot/taalgos/dot.cc, spot/taalgos/dot.hh, spot/taalgos/emptinessta.cc, spot/taalgos/emptinessta.hh, spot/taalgos/minimize.cc, spot/taalgos/minimize.hh, spot/taalgos/reachiter.cc, spot/taalgos/reachiter.hh, spot/taalgos/statessetbuilder.cc, spot/taalgos/statessetbuilder.hh, spot/taalgos/stats.cc, spot/taalgos/stats.hh, spot/taalgos/tgba2ta.cc, spot/taalgos/tgba2ta.hh, spot/tl/Makefile.am, spot/tl/apcollect.cc, spot/tl/apcollect.hh, spot/tl/contain.cc, spot/tl/contain.hh, spot/tl/declenv.cc, spot/tl/declenv.hh, spot/tl/defaultenv.cc, spot/tl/defaultenv.hh, spot/tl/dot.cc, spot/tl/dot.hh, spot/tl/environment.hh, spot/tl/exclusive.cc, spot/tl/exclusive.hh, spot/tl/formula.cc, spot/tl/formula.hh, spot/tl/hierarchy.cc, spot/tl/hierarchy.hh, spot/tl/length.cc, spot/tl/length.hh, spot/tl/ltlf.cc, spot/tl/ltlf.hh, spot/tl/mark.cc, spot/tl/mark.hh, spot/tl/mutation.cc, spot/tl/mutation.hh, spot/tl/nenoform.cc, spot/tl/nenoform.hh, spot/tl/parse.hh, spot/tl/print.cc, spot/tl/print.hh, spot/tl/randomltl.cc, spot/tl/randomltl.hh, spot/tl/relabel.cc, spot/tl/relabel.hh, spot/tl/remove_x.cc, spot/tl/remove_x.hh, spot/tl/simplify.cc, spot/tl/simplify.hh, spot/tl/snf.cc, spot/tl/snf.hh, spot/tl/sonf.cc, spot/tl/sonf.hh, spot/tl/unabbrev.cc, spot/tl/unabbrev.hh, spot/twa/Makefile.am, spot/twa/acc.cc, spot/twa/acc.hh, spot/twa/bdddict.cc, spot/twa/bdddict.hh, spot/twa/bddprint.cc, spot/twa/bddprint.hh, spot/twa/formula2bdd.cc, spot/twa/formula2bdd.hh, spot/twa/fwd.hh, spot/twa/taatgba.cc, spot/twa/taatgba.hh, spot/twa/twa.cc, spot/twa/twa.hh, spot/twa/twagraph.cc, spot/twa/twagraph.hh, spot/twa/twaproduct.cc, spot/twa/twaproduct.hh, spot/twaalgos/Makefile.am, spot/twaalgos/aiger.cc, spot/twaalgos/aiger.hh, spot/twaalgos/alternation.cc, spot/twaalgos/alternation.hh, spot/twaalgos/are_isomorphic.cc, spot/twaalgos/are_isomorphic.hh, spot/twaalgos/bfssteps.cc, spot/twaalgos/bfssteps.hh, spot/twaalgos/canonicalize.cc, spot/twaalgos/canonicalize.hh, spot/twaalgos/cleanacc.cc, spot/twaalgos/cleanacc.hh, spot/twaalgos/cobuchi.cc, spot/twaalgos/cobuchi.hh, spot/twaalgos/complement.cc, spot/twaalgos/complement.hh, spot/twaalgos/complete.cc, spot/twaalgos/complete.hh, spot/twaalgos/compsusp.cc, spot/twaalgos/compsusp.hh, spot/twaalgos/contains.cc, spot/twaalgos/contains.hh, spot/twaalgos/copy.hh, spot/twaalgos/couvreurnew.cc, spot/twaalgos/couvreurnew.hh, spot/twaalgos/cycles.cc, spot/twaalgos/cycles.hh, spot/twaalgos/dbranch.cc, spot/twaalgos/dbranch.hh, spot/twaalgos/degen.cc, spot/twaalgos/degen.hh, spot/twaalgos/determinize.cc, spot/twaalgos/determinize.hh, spot/twaalgos/dot.cc, spot/twaalgos/dot.hh, spot/twaalgos/dtbasat.cc, spot/twaalgos/dtbasat.hh, spot/twaalgos/dtwasat.cc, spot/twaalgos/dtwasat.hh, spot/twaalgos/dualize.cc, spot/twaalgos/dualize.hh, spot/twaalgos/emptiness.cc, spot/twaalgos/emptiness.hh, spot/twaalgos/emptiness_stats.hh, spot/twaalgos/forq_contains.cc, spot/twaalgos/forq_contains.hh, spot/twaalgos/game.cc, spot/twaalgos/game.hh, spot/twaalgos/genem.cc, spot/twaalgos/genem.hh, spot/twaalgos/gfguarantee.cc, spot/twaalgos/gfguarantee.hh, spot/twaalgos/gtec/Makefile.am, spot/twaalgos/gtec/ce.cc, spot/twaalgos/gtec/ce.hh, spot/twaalgos/gtec/gtec.cc, spot/twaalgos/gtec/gtec.hh, spot/twaalgos/gtec/sccstack.cc, spot/twaalgos/gtec/sccstack.hh, spot/twaalgos/gtec/status.cc, spot/twaalgos/gtec/status.hh, spot/twaalgos/gv04.cc, spot/twaalgos/gv04.hh, spot/twaalgos/hoa.cc, spot/twaalgos/hoa.hh, spot/twaalgos/iscolored.cc, spot/twaalgos/iscolored.hh, spot/twaalgos/isdet.cc, spot/twaalgos/isdet.hh, spot/twaalgos/isunamb.cc, spot/twaalgos/isunamb.hh, spot/twaalgos/isweakscc.cc, spot/twaalgos/isweakscc.hh, spot/twaalgos/langmap.cc, spot/twaalgos/langmap.hh, spot/twaalgos/lbtt.cc, spot/twaalgos/lbtt.hh, spot/twaalgos/ltl2taa.cc, spot/twaalgos/ltl2taa.hh, spot/twaalgos/ltl2tgba_fm.cc, spot/twaalgos/ltl2tgba_fm.hh, spot/twaalgos/magic.cc, spot/twaalgos/magic.hh, spot/twaalgos/mask.cc, spot/twaalgos/mask.hh, spot/twaalgos/mealy_machine.cc, spot/twaalgos/mealy_machine.hh, spot/twaalgos/minimize.cc, spot/twaalgos/minimize.hh, spot/twaalgos/ndfs_result.hxx, spot/twaalgos/neverclaim.cc, spot/twaalgos/neverclaim.hh, spot/twaalgos/parity.cc, spot/twaalgos/parity.hh, spot/twaalgos/postproc.cc, spot/twaalgos/postproc.hh, spot/twaalgos/powerset.cc, spot/twaalgos/powerset.hh, spot/twaalgos/product.cc, spot/twaalgos/product.hh, spot/twaalgos/randomgraph.cc, spot/twaalgos/randomgraph.hh, spot/twaalgos/randomize.cc, spot/twaalgos/randomize.hh, spot/twaalgos/reachiter.cc, spot/twaalgos/reachiter.hh, spot/twaalgos/relabel.cc, spot/twaalgos/relabel.hh, spot/twaalgos/remfin.cc, spot/twaalgos/remfin.hh, spot/twaalgos/remprop.cc, spot/twaalgos/remprop.hh, spot/twaalgos/sbacc.cc, spot/twaalgos/sbacc.hh, spot/twaalgos/sccfilter.cc, spot/twaalgos/sccfilter.hh, spot/twaalgos/sccinfo.cc, spot/twaalgos/sccinfo.hh, spot/twaalgos/se05.cc, spot/twaalgos/se05.hh, spot/twaalgos/sepsets.cc, spot/twaalgos/sepsets.hh, spot/twaalgos/simulation.cc, spot/twaalgos/simulation.hh, spot/twaalgos/split.cc, spot/twaalgos/split.hh, spot/twaalgos/stats.cc, spot/twaalgos/stats.hh, spot/twaalgos/strength.cc, spot/twaalgos/strength.hh, spot/twaalgos/stripacc.cc, spot/twaalgos/stripacc.hh, spot/twaalgos/stutter.cc, spot/twaalgos/stutter.hh, spot/twaalgos/sum.cc, spot/twaalgos/sum.hh, spot/twaalgos/synthesis.cc, spot/twaalgos/synthesis.hh, spot/twaalgos/tau03.cc, spot/twaalgos/tau03.hh, spot/twaalgos/tau03opt.cc, spot/twaalgos/tau03opt.hh, spot/twaalgos/toparity.cc, spot/twaalgos/toparity.hh, spot/twaalgos/totgba.cc, spot/twaalgos/totgba.hh, spot/twaalgos/toweak.cc, spot/twaalgos/toweak.hh, spot/twaalgos/translate.cc, spot/twaalgos/translate.hh, spot/twaalgos/word.cc, spot/twaalgos/word.hh, spot/twaalgos/zlktree.cc, spot/twaalgos/zlktree.hh, spot/twacube/Makefile.am, spot/twacube/cube.cc, spot/twacube/cube.hh, spot/twacube/fwd.hh, spot/twacube/twacube.cc, spot/twacube/twacube.hh, spot/twacube_algos/Makefile.am, spot/twacube_algos/convert.cc, spot/twacube_algos/convert.hh, tests/Makefile.am, tests/core/385.test, tests/core/500.test, tests/core/521.test, tests/core/522.test, tests/core/acc.cc, tests/core/acc.test, tests/core/acc2.test, tests/core/acc_word.test, tests/core/accsimpl.test, tests/core/alternating.test, tests/core/autcross.test, tests/core/autcross2.test, tests/core/autcross3.test, tests/core/autcross4.test, tests/core/autcross5.test, tests/core/babiak.test, tests/core/bare.test, tests/core/basimul.test, tests/core/bdd.test, tests/core/bdddict.cc, tests/core/bdddict.test, tests/core/bitvect.cc, tests/core/bitvect.test, tests/core/bricks.cc, tests/core/bricks.test, tests/core/checkpsl.cc, tests/core/checkta.cc, tests/core/complement.test, tests/core/complementation.test, tests/core/complete.test, tests/core/consterm.cc, tests/core/consterm.test, tests/core/cube.cc, tests/core/cube.test, tests/core/cycles.test, tests/core/dbacomp.test, tests/core/dca.test, tests/core/dca2.test, tests/core/defs.in, tests/core/degendet.test, tests/core/degenid.test, tests/core/degenlskip.test, tests/core/degenscc.test, tests/core/det.test, tests/core/dfs.test, tests/core/dnfstreett.test, tests/core/dot2tex.test, tests/core/dra2dba.test, tests/core/dstar.test, tests/core/dualize.test, tests/core/dupexp.test, tests/core/emptchk.cc, tests/core/emptchk.test, tests/core/emptchke.test, tests/core/emptchkr.test, tests/core/equals.test, tests/core/equalsf.cc, tests/core/eventuniv.test, tests/core/exclusive-ltl.test, tests/core/exclusive-tgba.test, tests/core/explpro2.test, tests/core/explpro3.test, tests/core/explpro4.test, tests/core/explprod.test, tests/core/explsum.test, tests/core/format.test, tests/core/full.test, tests/core/gamehoa.test, tests/core/genaut.test, tests/core/genltl.test, tests/core/gragsa.test, tests/core/graph.cc, tests/core/graph.test, tests/core/hierarchy.test, tests/core/highlightstate.test, tests/core/ikwiad.cc, tests/core/included.test, tests/core/intvcmp2.cc, tests/core/intvcomp.cc, tests/core/intvcomp.test, tests/core/isomorph.test, tests/core/isop.test, tests/core/kind.cc, tests/core/kind.test, tests/core/kripke.test, tests/core/kripkecat.cc, tests/core/latex.test, tests/core/lbt.test, tests/core/lbttparse.test, tests/core/length.cc, tests/core/length.test, tests/core/lenient.test, tests/core/ltl2dstar.test, tests/core/ltl2dstar2.test, tests/core/ltl2dstar3.test, tests/core/ltl2dstar4.test, tests/core/ltl2neverclaim-lbtt.test, tests/core/ltl2neverclaim.test, tests/core/ltl2ta.test, tests/core/ltl2ta2.test, tests/core/ltl2tgba.test, tests/core/ltl2tgba2.test, tests/core/ltl3ba.test, tests/core/ltl3dra.test, tests/core/ltlcounter.test, tests/core/ltlcross.test, tests/core/ltlcross2.test, tests/core/ltlcross3.test, tests/core/ltlcross4.test, tests/core/ltlcross5.test, tests/core/ltlcross6.test, tests/core/ltlcrossce.test, tests/core/ltlcrossce2.test, tests/core/ltlcrossgrind.test, tests/core/ltldo.test, tests/core/ltldo2.test, tests/core/ltlf.test, tests/core/ltlfilt.test, tests/core/ltlgrind.test, tests/core/ltlrel.cc, tests/core/ltlrel.test, tests/core/ltlsynt-pgame.test, tests/core/ltlsynt.test, tests/core/ltlsynt2.test, tests/core/lunabbrev.test, tests/core/maskacc.test, tests/core/maskkeep.test, tests/core/mempool.cc, tests/core/mempool.test, tests/core/minterm.cc, tests/core/minterm.test, tests/core/minusx.test, tests/core/monitor.test, tests/core/nenoform.test, tests/core/neverclaimread.test, tests/core/ngraph.cc, tests/core/ngraph.test, tests/core/nondet.test, tests/core/obligation.test, tests/core/optba.test, tests/core/parity.cc, tests/core/parity.test, tests/core/parity2.test, tests/core/parse.test, tests/core/parseaut.test, tests/core/parseerr.test, tests/core/pdegen.test, tests/core/pgsolver.test, tests/core/prodchain.test, tests/core/prodor.test, tests/core/rabin2parity.test, tests/core/rand.test, tests/core/randaut.test, tests/core/randomize.test, tests/core/randpsl.test, tests/core/randtgba.cc, tests/core/randtgba.test, tests/core/readltl.cc, tests/core/readsave.test, tests/core/reduc.cc, tests/core/reduc.test, tests/core/reduc0.test, tests/core/reduccmp.test, tests/core/reducpsl.test, tests/core/remfin.test, tests/core/remove_x.test, tests/core/remprop.test, tests/core/renault.test, tests/core/safra.cc, tests/core/safra.test, tests/core/satmin.test, tests/core/satmin2.test, tests/core/satmin3.test, tests/core/sbacc.test, tests/core/scc.test, tests/core/sccdot.test, tests/core/sccif.cc, tests/core/sccif.test, tests/core/sccsimpl.test, tests/core/semidet.test, tests/core/sepsets.test, tests/core/serial.test, tests/core/sim2.test, tests/core/sim3.test, tests/core/sonf.test, tests/core/split.test, tests/core/spotlbtt.test, tests/core/spotlbtt2.test, tests/core/streett.test, tests/core/strength.test, tests/core/stutter-ltl.test, tests/core/stutter-tgba.test, tests/core/sugar.test, tests/core/syfco.test, tests/core/syntimpl.cc, tests/core/syntimpl.test, tests/core/taatgba.cc, tests/core/taatgba.test, tests/core/tgbagraph.test, tests/core/tostring.cc, tests/core/tostring.test, tests/core/tripprod.test, tests/core/trival.cc, tests/core/trival.test, tests/core/tunabbrev.test, tests/core/tunenoform.test, tests/core/twacube.cc, tests/core/twacube.test, tests/core/twagraph.cc, tests/core/unabbrevwm.test, tests/core/unambig.test, tests/core/unambig2.test, tests/core/uniq.test, tests/core/utf8.test, tests/core/uwrm.test, tests/core/wdba.test, tests/core/wdba2.test, tests/ltsmin/check.test, tests/ltsmin/check2.test, tests/ltsmin/check3.test, tests/ltsmin/finite.test, tests/ltsmin/finite2.test, tests/ltsmin/finite3.test, tests/ltsmin/kripke.test, tests/ltsmin/modelcheck.cc, tests/ltsmin/testconvert.cc, tests/ltsmin/testconvert.test, tests/python/298.py, tests/python/341.py, tests/python/471.py, tests/python/acc.py, tests/python/accparse2.py, tests/python/aiger.py, tests/python/alarm.py, tests/python/aliases.py, tests/python/alternating.py, tests/python/bdddict.py, tests/python/bdditer.py, tests/python/bddnqueen.py, tests/python/bugdet.py, tests/python/complement_semidet.py, tests/python/dbranch.py, tests/python/declenv.py, tests/python/decompose_scc.py, tests/python/det.py, tests/python/dualize.py, tests/python/ecfalse.py, tests/python/except.py, tests/python/forq_contains.py, tests/python/game.py, tests/python/gen.py, tests/python/genem.py, tests/python/implies.py, tests/python/interdep.py, tests/python/intrun.py, tests/python/kripke.py, tests/python/langmap.py, tests/python/ltl2tgba.py, tests/python/ltl2tgba.test, tests/python/ltlf.py, tests/python/ltlparse.py, tests/python/ltlsimple.py, tests/python/mealy.py, tests/python/merge.py, tests/python/mergedge.py, tests/python/minato.py, tests/python/misc-ec.py, tests/python/optionmap.py, tests/python/origstate.py, tests/python/otfcrash.py, tests/python/parity.py, tests/python/parsetgba.py, tests/python/pdegen.py, tests/python/powerset.py, tests/python/prodexpt.py, tests/python/randgen.py, tests/python/relabel.py, tests/python/remfin.py, tests/python/removeap.py, tests/python/rs_like.py, tests/python/satmin.py, tests/python/sbacc.py, tests/python/sccfilter.py, tests/python/sccinfo.py, tests/python/sccsplit.py, tests/python/semidet.py, tests/python/setacc.py, tests/python/setxor.py, tests/python/simplacc.py, tests/python/simstate.py, tests/python/sonf.py, tests/python/split.py, tests/python/splitedge.py, tests/python/streett_totgba.py, tests/python/streett_totgba2.py, tests/python/stutter.py, tests/python/sum.py, tests/python/synthesis.py, tests/python/toparity.py, tests/python/toweak.py, tests/python/tra2tba.py, tests/python/trival.py, tests/python/twagraph.py, tests/python/zlktree.py, tests/run.in, tests/sanity/80columns.test, tests/sanity/bin.test, tests/sanity/getenv.test, tests/sanity/includes.test, tests/sanity/ipynb.pl, tests/sanity/namedprop.test, tests/sanity/private.test, tests/sanity/readme.pl, tests/sanity/style.test, tools/man2html.pl: Update all copyright headers.
1108 lines
29 KiB
Bash
1108 lines
29 KiB
Bash
#! /bin/sh
|
||
# -*- coding: utf-8 -*-
|
||
# Copyright (C) by the Spot authors, see the AUTHORS file for details.
|
||
#
|
||
# 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 <http://www.gnu.org/licenses/>.
|
||
|
||
. ./defs || exit 1
|
||
|
||
set -e
|
||
|
||
cat >exp <<EOF
|
||
parity 17;
|
||
0 1 0 7,8;
|
||
8 1 1 2;
|
||
2 3 0 11,12;
|
||
12 3 1 2,3;
|
||
3 2 0 13,14;
|
||
14 2 1 2,3;
|
||
13 2 1 1,4;
|
||
4 1 0 8,15;
|
||
15 1 1 5,6;
|
||
6 1 0 8,15;
|
||
5 2 0 16,17;
|
||
17 2 1 2;
|
||
16 2 1 5,6;
|
||
1 1 0 9,10;
|
||
10 1 1 2,3;
|
||
9 1 1 1,5;
|
||
11 3 1 1,4;
|
||
7 1 1 1,2;
|
||
parity 13;
|
||
0 1 0 1,2;
|
||
2 1 1 3;
|
||
3 3 0 5,4;
|
||
4 2 1 12,3;
|
||
12 2 0 5,4;
|
||
5 1 1 6,7;
|
||
7 1 0 9,8;
|
||
8 3 1 12,3;
|
||
9 1 1 11,10;
|
||
10 2 0 9,8;
|
||
11 1 0 9,8;
|
||
6 1 0 13,4;
|
||
13 1 1 6,10;
|
||
1 1 1 6,3;
|
||
parity 5;
|
||
0 1 0 2,3;
|
||
3 3 1 1;
|
||
1 1 0 4,5;
|
||
5 2 1 1,1;
|
||
4 3 1 0,1;
|
||
2 1 1 0,0;
|
||
EOF
|
||
|
||
: > 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 <<EOF
|
||
REALIZABLE
|
||
aag 1 1 0 1 0
|
||
2
|
||
2
|
||
i0 a
|
||
o0 b
|
||
EOF
|
||
ltlsynt --ins=a --outs=b -f 'GFa <-> GFb' --aiger=isop >out
|
||
diff out exp
|
||
|
||
cat >exp <<EOF
|
||
REALIZABLE
|
||
aag 1 1 0 1 0
|
||
2
|
||
2
|
||
i0 a
|
||
o0 b
|
||
EOF
|
||
ltlsynt --ins=a --outs=b -f 'GFa <-> GFb' --aiger=isop+dc >out
|
||
diff out exp
|
||
|
||
cat >exp <<EOF
|
||
REALIZABLE
|
||
aag 1 1 0 1 0
|
||
2
|
||
2
|
||
i0 a
|
||
o0 b
|
||
EOF
|
||
ltlsynt --ins=a --outs=b -f 'GFa <-> GFb' --aiger=isop+ud >out
|
||
diff out exp
|
||
|
||
cat >exp <<EOF
|
||
REALIZABLE
|
||
aag 1 1 0 1 0
|
||
2
|
||
2
|
||
i0 a
|
||
o0 b
|
||
EOF
|
||
ltlsynt --ins=a --outs=b -f 'GFa <-> GFb' --aiger=isop+sub1 >out
|
||
diff out exp
|
||
|
||
cat >exp <<EOF
|
||
REALIZABLE
|
||
aag 1 1 0 1 0
|
||
2
|
||
2
|
||
i0 a
|
||
o0 b
|
||
EOF
|
||
ltlsynt --ins=a --outs=b -f 'GFa <-> GFb' --aiger=isop+sub2 >out
|
||
diff out exp
|
||
|
||
cat >exp <<EOF
|
||
REALIZABLE
|
||
aag 1 1 0 1 0
|
||
2
|
||
2
|
||
i0 a
|
||
o0 b
|
||
EOF
|
||
ltlsynt --ins=a --outs=b -f 'GFa <-> 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 <<EOF
|
||
REALIZABLE
|
||
aag 3 1 1 2 1
|
||
2
|
||
4 1
|
||
6
|
||
6
|
||
6 2 4
|
||
i0 a
|
||
o0 b
|
||
o1 c
|
||
EOF
|
||
ltlsynt --ins=a --outs=b,c -f 'GFa <-> (GFb & GFc)' \
|
||
--algo=ds --simplify=no --aiger=isop >out
|
||
diff out exp
|
||
|
||
ltlsynt --ins=a --outs=b,c -f 'GFa <-> (GFb & GFc)' \
|
||
--algo=ds --simplify=no --aiger=optim >out
|
||
diff out exp
|
||
|
||
cat >exp <<EOF
|
||
REALIZABLE
|
||
aag 2 1 1 2 0
|
||
2
|
||
4 1
|
||
2
|
||
2
|
||
i0 a
|
||
o0 b
|
||
o1 c
|
||
EOF
|
||
ltlsynt --ins=a --outs=b,c -f 'GFa <-> (GFb & GFc)' \
|
||
--algo=ds --simplify=no --aiger=isop+dc >out
|
||
diff out exp
|
||
|
||
cat >exp <<EOF
|
||
REALIZABLE
|
||
aag 3 1 1 2 1
|
||
2
|
||
4 1
|
||
6
|
||
6
|
||
6 2 4
|
||
i0 a
|
||
o0 b
|
||
o1 c
|
||
EOF
|
||
ltlsynt --ins=a --outs=b,c -f 'GFa <-> (GFb & GFc)' \
|
||
--algo=ds --simplify=no --aiger=ite >out
|
||
diff out exp
|
||
|
||
cat >exp <<EOF
|
||
there are 1 subformulas
|
||
trying to create strategy directly for GFa <-> GFb
|
||
direct strategy was found.
|
||
EOF
|
||
ltlsynt --ins='a' --outs='b' -f 'GFa <-> GFb' --verbose --realizability 2> out
|
||
sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx
|
||
diff outx exp
|
||
|
||
cat >exp <<EOF
|
||
there are 1 subformulas
|
||
trying to create strategy directly for GFa <-> GFb
|
||
tanslating formula done in X seconds
|
||
direct strategy was found.
|
||
direct strat has 1 states, 2 edges and 0 colors
|
||
simplification took X seconds
|
||
EOF
|
||
ltlsynt --ins=a --outs=b -f 'GFa <-> GFb' --verbose --algo=ps 2> out
|
||
sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx
|
||
diff outx exp
|
||
|
||
cat >exp <<EOF
|
||
there are 1 subformulas
|
||
trying to create strategy directly for GFe <-> (Fa & Fb & Fc & Fd)
|
||
direct strategy was found.
|
||
EOF
|
||
ltlsynt --ins='a,b,c,d' --outs='e' -f '(Fa & Fb & Fc & Fd) <-> GFe' \
|
||
--verbose --realizability --algo=lar 2> out
|
||
sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx
|
||
diff outx exp
|
||
|
||
cat >exp <<EOF
|
||
the following signals can be temporarily removed:
|
||
i0 := 1
|
||
i2 := 1
|
||
new formula: GFi1 -> G(i1 <-> o0)
|
||
there are 1 subformulas
|
||
trying to create strategy directly for GFi1 -> G(i1 <-> o0)
|
||
direct strategy might exist but was not found.
|
||
translating formula done in X seconds
|
||
automaton has 2 states and 1 colors
|
||
LAR construction done in X seconds
|
||
DPA has 2 states, 1 colors
|
||
split inputs and outputs done in X seconds
|
||
automaton has 6 states
|
||
solving game with acceptance: co-Büchi
|
||
game solved in X seconds
|
||
EOF
|
||
ltlsynt -f "G(Fi0 && Fi1 && Fi2) -> 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,c --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 <<EOF
|
||
REALIZABLE
|
||
HOA: v1
|
||
States: 3
|
||
Start: 0
|
||
AP: 1 "p0"
|
||
acc-name: all
|
||
Acceptance: 0 t
|
||
properties: trans-labels explicit-labels state-acc deterministic
|
||
controllable-AP: 0
|
||
--BODY--
|
||
State: 0
|
||
[t] 1
|
||
State: 1
|
||
[t] 2
|
||
State: 2
|
||
[!0] 2
|
||
--END--
|
||
EOF
|
||
ltlsynt --outs=p0 -x tls-impl=0 --polar=no --simpl=no \
|
||
-f '!XXF(p0 & (p0 M Gp0))' > out
|
||
diff out exp
|
||
|
||
cat >exp <<EOF
|
||
REALIZABLE
|
||
HOA: v1
|
||
States: 1
|
||
Start: 0
|
||
AP: 1 "p0"
|
||
acc-name: all
|
||
Acceptance: 0 t
|
||
properties: trans-labels explicit-labels state-acc deterministic
|
||
controllable-AP: 0
|
||
--BODY--
|
||
State: 0
|
||
[!0] 0
|
||
--END--
|
||
EOF
|
||
ltlsynt --outs=p0 -x tls-impl=1 --polar=no -f '!XXF(p0 & (p0 M Gp0))' > out
|
||
diff out exp
|
||
ltlsynt --outs=p0 -x tls-impl=0 -f '!XXF(p0 & (p0 M Gp0))' > 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: 7'
|
||
ltlsynt --outs=p1 -f "$f" -x"dpa-simul=1" --simpl=bisim | grep 'States: 7'
|
||
ltlsynt --outs=p1 -f "$f" -x"dpa-simul=1" --simpl=bwoa | grep 'States: 6'
|
||
ltlsynt --outs=p1 -f "$f" -x"dpa-simul=1" | grep 'States: 6'
|
||
ltlsynt --outs=p1 -f "$f" -x"dpa-simul=1" --simpl=sat | grep 'States: 3'
|
||
ltlsynt --outs=p1 -f "$f" -x"dpa-simul=1" --simpl=bisim-sat | grep 'States: 3'
|
||
ltlsynt --outs=p1 -f "$f" -x"dpa-simul=1" --simpl=bwoa-sat | grep 'States: 6'
|
||
|
||
# The following used to raise an exception because of a bug in
|
||
# split_2step_fast_here().
|
||
for i in 0 1 2 3 4 5; do
|
||
ltlsynt --ins=a -f 'GFa <-> GFb' --simplify=$i | grep 'States: 1'
|
||
done
|
||
|
||
cat >exp <<EOF
|
||
REALIZABLE
|
||
aag 34 4 3 2 27
|
||
2
|
||
4
|
||
6
|
||
8
|
||
10 39
|
||
12 62
|
||
14 68
|
||
25
|
||
31
|
||
16 11 13
|
||
18 14 16
|
||
20 10 12
|
||
22 15 20
|
||
24 19 23
|
||
26 11 12
|
||
28 15 26
|
||
30 19 29
|
||
32 7 9
|
||
34 16 32
|
||
36 15 32
|
||
38 35 37
|
||
40 3 32
|
||
42 2 4
|
||
44 6 42
|
||
46 8 42
|
||
48 5 32
|
||
50 10 14
|
||
52 12 14
|
||
54 41 45
|
||
56 47 49
|
||
58 51 53
|
||
60 54 56
|
||
62 58 60
|
||
64 33 51
|
||
66 42 53
|
||
68 64 66
|
||
i0 i0
|
||
i1 i1
|
||
i2 i2
|
||
i3 i3
|
||
o0 o0
|
||
o1 o1
|
||
EOF
|
||
ltlsynt -f "G((i0 && i1)<->X(o0)) && G((i2|i3)<->X(o1))" --outs="o0,o1"\
|
||
--aiger=isop+ud --algo=lar --decompose=no --simpl=no >out
|
||
diff out exp
|
||
|
||
cat >exp <<EOF
|
||
REALIZABLE
|
||
aag 54 4 3 2 47
|
||
2
|
||
4
|
||
6
|
||
8
|
||
10 39
|
||
12 87
|
||
14 109
|
||
25
|
||
31
|
||
16 11 13
|
||
18 14 16
|
||
20 10 12
|
||
22 15 20
|
||
24 19 23
|
||
26 11 12
|
||
28 15 26
|
||
30 19 29
|
||
32 7 9
|
||
34 16 32
|
||
36 15 32
|
||
38 35 37
|
||
40 3 6
|
||
42 16 40
|
||
44 15 40
|
||
46 3 8
|
||
48 16 46
|
||
50 15 46
|
||
52 2 4
|
||
54 34 52
|
||
56 36 52
|
||
58 5 6
|
||
60 16 58
|
||
62 15 58
|
||
64 5 8
|
||
66 16 64
|
||
68 15 64
|
||
70 43 45
|
||
72 49 51
|
||
74 55 57
|
||
76 61 63
|
||
78 67 69
|
||
80 70 72
|
||
82 74 76
|
||
84 78 80
|
||
86 82 84
|
||
88 6 16
|
||
90 52 88
|
||
92 6 15
|
||
94 52 92
|
||
96 8 16
|
||
98 52 96
|
||
100 8 15
|
||
102 52 100
|
||
104 91 95
|
||
106 99 103
|
||
108 104 106
|
||
i0 i0
|
||
i1 i1
|
||
i2 i2
|
||
i3 i3
|
||
o0 o0
|
||
o1 o1
|
||
EOF
|
||
ltlsynt -f "G((i0 && i1)<->X(o0)) && G((i2|i3)<->X(o1))" --outs="o0,o1"\
|
||
--aiger=isop --algo=lar --decompose=no --simpl=no >out
|
||
diff out exp
|
||
|
||
|
||
cat >exp <<EOF
|
||
REALIZABLE
|
||
aag 18 4 4 2 10
|
||
2
|
||
4
|
||
6
|
||
8
|
||
10 26
|
||
12 28
|
||
14 34
|
||
16 36
|
||
18
|
||
20
|
||
18 11 12
|
||
20 15 16
|
||
22 2 4
|
||
24 10 12
|
||
26 23 25
|
||
28 22 25
|
||
30 14 16
|
||
32 7 9
|
||
34 31 32
|
||
36 31 33
|
||
i0 i0
|
||
i1 i1
|
||
i2 i2
|
||
i3 i3
|
||
o0 o0
|
||
o1 o1
|
||
EOF
|
||
ltlsynt -f "G((i0 && i1)<->X(o0)) && G((i2|i3)<->X(o1))" --outs="o0,o1"\
|
||
--aiger=isop+ud --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+ud --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 <err` -eq 4
|
||
|
||
|
||
cat >expected <<EOF
|
||
REALIZABLE
|
||
HOA: v1
|
||
States: 1
|
||
Start: 0
|
||
AP: 3 "c" "a" "b"
|
||
acc-name: all
|
||
Acceptance: 0 t
|
||
properties: trans-labels explicit-labels state-acc deterministic weak
|
||
controllable-AP: 0
|
||
--BODY--
|
||
State: 0
|
||
[!0&!1 | !0&!2 | 0&1&2] 0
|
||
--END--
|
||
EOF
|
||
ltlsynt --ins=a,b -f 'G (a & b <=> c)' >stdout
|
||
diff stdout expected
|
||
ltlsynt --outs=c -f 'G (a & b <=> c)' >stdout
|
||
diff stdout expected
|
||
|
||
|
||
ltlsynt --ins=a,b --outs=c,a -f 'GFa | FGc | GFb' 2>stderr && :
|
||
test $? -eq 2
|
||
grep "'a' appears both" stderr
|
||
|
||
ltlsynt --ins=a --outs=c -f 'GFa | FGb | GFc' 2>stderr && :
|
||
test $? -eq 2
|
||
grep "both.*but 'b' is unlisted" stderr
|
||
ltlsynt -f 'GFa | FGb | GFc' 2>stderr && :
|
||
test $? -eq 2
|
||
grep "one of --ins or --outs" stderr
|
||
|
||
# Try to find a direct strategy for GFa <-> GFb and a direct strategy for
|
||
# Gc
|
||
cat >exp <<EOF
|
||
the following signals can be temporarily removed:
|
||
c := d
|
||
new formula: GFa <-> GFb
|
||
there are 1 subformulas
|
||
trying to create strategy directly for GFa <-> GFb
|
||
tanslating formula done in X seconds
|
||
direct strategy was found.
|
||
direct strat has 1 states, 2 edges and 0 colors
|
||
simplification took X seconds
|
||
EOF
|
||
ltlsynt -f '(GFa <-> GFb) && (G(c <-> d))' --outs=b,c --verbose 2> out
|
||
sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx
|
||
diff outx exp
|
||
|
||
# Try to find a direct strategy for (GFa <-> GFb) & G(c <-> d). The
|
||
# order should not impact the result
|
||
for f in "(GFa <-> GFb) & G(c <-> d)" "(GFb <-> GFa) & G(c <-> d)" \
|
||
"G(c <-> d) & (GFa <-> GFb)" "G(c <-> d) & (GFb <-> GFa)"
|
||
do
|
||
cat >exp <<EOF
|
||
trying to create strategy directly for $f
|
||
tanslating formula done in X seconds
|
||
direct strategy was found.
|
||
direct strat has 1 states, 2 edges and 0 colors
|
||
simplification took X seconds
|
||
EOF
|
||
ltlsynt -f "$f" --outs=b,c --verbose --decompose=0 \
|
||
--global-equiv=no --verify 2> out
|
||
sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx
|
||
diff outx exp
|
||
done
|
||
|
||
# # Ltlsynt should be able to detect that G(a&c) is not input-complete so it is
|
||
# # impossible to find a strategy.
|
||
cat >exp <<EOF
|
||
the following signals can be temporarily removed:
|
||
c := 1
|
||
new formula: (GFb <-> GFa) & Ga
|
||
trying to create strategy directly for (GFb <-> GFa) & Ga
|
||
no strategy exists.
|
||
EOF
|
||
ltlsynt -f '(GFb <-> GFa) && G(a&c)' --outs=b,c --verbose\
|
||
--decompose=0 2> out || true
|
||
sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx
|
||
diff outx exp
|
||
|
||
# # ltlsynt should be able to create a strategy when the last G
|
||
# is input-complete.
|
||
cat >exp <<EOF
|
||
trying to create strategy directly for (GFb <-> GFa) & G((a & c) | (!a & !c))
|
||
tanslating formula done in X seconds
|
||
direct strategy was found.
|
||
direct strat has 1 states, 2 edges and 0 colors
|
||
simplification took X seconds
|
||
EOF
|
||
ltlsynt -f '(GFb <-> GFa) && (G((a&c)|(!a&!c)))' --outs=b,c --verbose\
|
||
--verify --decompose=0 2> out
|
||
sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx
|
||
diff outx exp
|
||
|
||
# Direct strategy for persistence
|
||
|
||
cat >exp <<EOF
|
||
trying to create strategy directly for Fa <-> FGb
|
||
tanslating formula done in X seconds
|
||
direct strategy was found.
|
||
direct strat has 2 states, 3 edges and 0 colors
|
||
simplification took X seconds
|
||
EOF
|
||
ltlsynt -f "Fa <-> FGb" --outs=b,c --verbose --decompose=0 --verify 2> out
|
||
sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx
|
||
diff outx exp
|
||
|
||
# Test verbose aiger
|
||
|
||
cat >exp <<EOF
|
||
trying to create strategy directly for Ga <-> Gb
|
||
direct strategy might exist but was not found.
|
||
translating formula done in X seconds
|
||
automaton has 4 states and 1 colors
|
||
LAR construction done in X seconds
|
||
DPA has 4 states, 1 colors
|
||
split inputs and outputs done in X seconds
|
||
automaton has 10 states
|
||
solving game with acceptance: Büchi
|
||
game solved in X seconds
|
||
simplification took X seconds
|
||
AIG circuit was created in X seconds and has 0 latches and 0 gates
|
||
EOF
|
||
ltlsynt -f "Ga <-> Gb" --outs=b --verbose --decompose=0 --verify --aiger 2> out
|
||
sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx
|
||
diff outx exp
|
||
|
||
cat >exp <<EOF
|
||
there are 2 subformulas
|
||
trying to create strategy directly for (b & (b | y)) -> y
|
||
direct strategy might exist but was not found.
|
||
translating formula done in X seconds
|
||
automaton has 2 states and 0 colors
|
||
LAR construction done in X seconds
|
||
DPA has 2 states, 0 colors
|
||
split inputs and outputs done in X seconds
|
||
automaton has 4 states
|
||
solving game with acceptance: all
|
||
game solved in X seconds
|
||
simplification took X seconds
|
||
trying to create strategy directly for (a | x) -> x
|
||
direct strategy might exist but was not found.
|
||
translating formula done in X seconds
|
||
automaton has 2 states and 0 colors
|
||
LAR construction done in X seconds
|
||
DPA has 2 states, 0 colors
|
||
split inputs and outputs done in X seconds
|
||
automaton has 4 states
|
||
solving game with acceptance: all
|
||
game solved in X seconds
|
||
simplification took X seconds
|
||
AIG circuit was created in X seconds and has 0 latches and 0 gates
|
||
EOF
|
||
ltlsynt -f '((a|x) & (b | y) & b) => (x & y)' \
|
||
--outs="x,y" --aiger=ite --pol=no --verify --verbose 2> out
|
||
sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx
|
||
diff outx exp
|
||
|
||
cat >exp <<EOF
|
||
the following signals can be temporarily removed:
|
||
b := 1
|
||
a := 1
|
||
new formula: x & y
|
||
x := 1
|
||
y := 1
|
||
new formula: 1
|
||
there are 1 subformulas
|
||
trying to create strategy directly for 1
|
||
direct strategy was found.
|
||
direct strat has 1 states, 1 edges and 0 colors
|
||
simplification took X seconds
|
||
AIG circuit was created in X seconds and has 0 latches and 0 gates
|
||
EOF
|
||
ltlsynt -f '((a|x) & (b | y) & b) => (x & y)' \
|
||
--outs="x,y" --aiger=ite --verify --verbose 2> out
|
||
sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx
|
||
diff outx exp
|
||
|
||
# Here, G!(!x | !y) should be Gx & Gy
|
||
cat >exp <<EOF
|
||
there are 2 subformulas
|
||
trying to create strategy directly for Gx
|
||
direct strategy was found.
|
||
direct strat has 1 states, 1 edges and 0 colors
|
||
simplification took X seconds
|
||
trying to create strategy directly for Gy
|
||
direct strategy was found.
|
||
direct strat has 1 states, 1 edges and 0 colors
|
||
simplification took X seconds
|
||
AIG circuit was created in X seconds and has 0 latches and 0 gates
|
||
EOF
|
||
ltlsynt -f 'G!(!x | !y)' --outs="x, y" --pol=no --aiger=ite \
|
||
--verify --verbose 2> out
|
||
sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx
|
||
diff outx exp
|
||
|
||
# Here, !F(a | b) should be G(!a) & G(!b)
|
||
cat >exp <<EOF
|
||
there are 2 subformulas
|
||
trying to create strategy directly for G!a
|
||
no strategy exists.
|
||
EOF
|
||
ltlsynt -f '!F(a|b)' --outs=b --pol=no --decompose=yes \
|
||
--aiger --verbose 2> out || true
|
||
sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx
|
||
diff outx exp
|
||
|
||
# Here, G!(a -> b) should be G(a) & G(!b)
|
||
cat >exp <<EOF
|
||
there are 2 subformulas
|
||
trying to create strategy directly for Ga
|
||
no strategy exists.
|
||
EOF
|
||
ltlsynt -f 'G!(a -> b)' --outs=b --decompose=yes --aiger\
|
||
--pol=no --verbose 2> out || true
|
||
sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx
|
||
diff outx exp
|
||
|
||
# Here, (a & b) U (b & c) should be (a U (b & c)) & (b U (b & c))
|
||
cat >exp <<EOF
|
||
there are 1 subformulas
|
||
trying to create strategy directly for (a & b) U (b & c)
|
||
direct strategy might exist but was not found.
|
||
translating formula done in X seconds
|
||
automaton has 2 states and 1 colors
|
||
LAR construction done in X seconds
|
||
DPA has 2 states, 1 colors
|
||
split inputs and outputs done in X seconds
|
||
automaton has 5 states
|
||
solving game with acceptance: Büchi
|
||
game solved in X seconds
|
||
simplification took X seconds
|
||
AIG circuit was created in X seconds and has 0 latches and 0 gates
|
||
EOF
|
||
ltlsynt -f '(a & b) U (b & c)' --outs=b,c --decompose=yes --aiger --verbose\
|
||
--pol=no --verify 2> out
|
||
sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx
|
||
diff outx exp
|
||
|
||
# Here, a => (b & c & d) should be
|
||
# (a => b) & (a => c) & (a => d)
|
||
cat >exp <<EOF
|
||
there are 3 subformulas
|
||
trying to create strategy directly for a -> b
|
||
direct strategy might exist but was not found.
|
||
translating formula done in X seconds
|
||
automaton has 2 states and 0 colors
|
||
LAR construction done in X seconds
|
||
DPA has 2 states, 0 colors
|
||
split inputs and outputs done in X seconds
|
||
automaton has 4 states
|
||
solving game with acceptance: all
|
||
game solved in X seconds
|
||
simplification took X seconds
|
||
trying to create strategy directly for a -> c
|
||
direct strategy might exist but was not found.
|
||
translating formula done in X seconds
|
||
automaton has 2 states and 0 colors
|
||
LAR construction done in X seconds
|
||
DPA has 2 states, 0 colors
|
||
split inputs and outputs done in X seconds
|
||
automaton has 4 states
|
||
solving game with acceptance: all
|
||
game solved in X seconds
|
||
simplification took X seconds
|
||
trying to create strategy directly for a -> d
|
||
direct strategy might exist but was not found.
|
||
translating formula done in X seconds
|
||
automaton has 2 states and 0 colors
|
||
LAR construction done in X seconds
|
||
DPA has 2 states, 0 colors
|
||
split inputs and outputs done in X seconds
|
||
automaton has 4 states
|
||
solving game with acceptance: all
|
||
game solved in X seconds
|
||
simplification took X seconds
|
||
AIG circuit was created in X seconds and has 0 latches and 0 gates
|
||
EOF
|
||
ltlsynt -f 'a => (b & c & d)' --outs=b,c,d, --decompose=yes\
|
||
--pol=no --verbose --aiger 2> out
|
||
sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx
|
||
diff outx exp
|
||
|
||
# Here, !(F(a | b)) should be G!a & G!b
|
||
cat >exp <<EOF
|
||
there are 2 subformulas
|
||
trying to create strategy directly for G!a
|
||
no strategy exists.
|
||
EOF
|
||
ltlsynt -f '!(F(a | b))' --outs=b, --decompose=yes \
|
||
--verbose --pol=no --aiger 2> out || true
|
||
sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx
|
||
diff outx exp
|
||
|
||
ltlsynt --ins="" -f "GFa"
|
||
ltlsynt --outs="" -f "GFb" | grep "UNREALIZABLE"
|
||
|
||
ltlsynt --outs="" -f "1"
|
||
|
||
ltlsynt --outs="" --ins="" -f "GFa" 2>&1 | \
|
||
grep "both --ins and --outs are specified"
|
||
|
||
LTL='(((((G (((((((g_0) && (G (! (r_0)))) -> (F (! (g_0)))) && (((g_0) &&
|
||
(X ((! (r_0)) && (! (g_0))))) -> (X ((r_0) R (! (g_0)))))) && (((g_1) &&
|
||
(G (! (r_1)))) -> (F (! (g_1))))) && (((g_1) && (X ((! (r_1)) && (! (g_1))))) ->
|
||
(X ((r_1) R (! (g_1)))))) && (((! (g_0)) && (true)) || ((true) && (! (g_1))))))
|
||
&& ((r_0) R (! (g_0)))) && (G ((r_0) -> (F (g_0))))) && ((r_1) R (! (g_1)))) &&
|
||
(G ((r_1) -> (F (g_1)))))'
|
||
OUT='g_0, g_1'
|
||
ltlsynt --outs="$OUT" -f "$LTL" --aiger=both+ud\
|
||
--algo=acd | grep "aag 8 2 2 2 4"
|
||
ltlsynt --outs="$OUT" -f "$LTL" --aiger=both+ud\
|
||
--algo=lar | grep "aag 34 2 3 2 29"
|
||
|
||
ltlsynt -f 'G(c) & (G(a) <-> GFb)' --outs=b,c --decompose=yes\
|
||
--verbose --pol=no --realizability 2> out
|
||
cat >exp <<EOF
|
||
there are 2 subformulas
|
||
trying to create strategy directly for Gc
|
||
direct strategy was found.
|
||
trying to create strategy directly for Ga <-> GFb
|
||
direct strategy was found.
|
||
EOF
|
||
diff out exp
|
||
|
||
ltlsynt -f 'G(c) & (G(a) <-> GFb)' --outs=b,c --decompose=yes --pol=no \
|
||
--verbose --realizability --bypass=no 2> out
|
||
cat >exp <<EOF
|
||
there are 2 subformulas
|
||
translating formula done in X seconds
|
||
automaton has 1 states and 0 colors
|
||
LAR construction done in X seconds
|
||
DPA has 1 states, 0 colors
|
||
split inputs and outputs done in X seconds
|
||
automaton has 2 states
|
||
solving game with acceptance: all
|
||
game solved in X seconds
|
||
translating formula done in X seconds
|
||
automaton has 2 states and 2 colors
|
||
LAR construction done in X seconds
|
||
DPA has 2 states, 2 colors
|
||
split inputs and outputs done in X seconds
|
||
automaton has 5 states
|
||
solving game with acceptance: Streett 1
|
||
game solved in X seconds
|
||
EOF
|
||
|
||
sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx
|
||
diff outx exp
|
||
|
||
# ACD verbose
|
||
cat >exp <<EOF
|
||
there are 2 subformulas
|
||
translating formula done in X seconds
|
||
automaton has 1 states and 2 colors
|
||
ACD construction done in X seconds
|
||
DPA has 2 states, 2 colors
|
||
split inputs and outputs done in X seconds
|
||
automaton has 6 states
|
||
solving game with acceptance: generalized-Streett 1 1
|
||
game solved in X seconds
|
||
simplification took X seconds
|
||
translating formula done in X seconds
|
||
automaton has 1 states and 0 colors
|
||
ACD construction done in X seconds
|
||
DPA has 1 states, 0 colors
|
||
split inputs and outputs done in X seconds
|
||
automaton has 2 states
|
||
solving game with acceptance: all
|
||
game solved in X seconds
|
||
simplification took X seconds
|
||
EOF
|
||
ltlsynt -f '(GFa <-> GFb) && (Gc)' --outs=b,c --verbose --bypass=no\
|
||
--algo=acd --pol=no 2> out
|
||
sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx
|
||
diff outx exp
|
||
|
||
# Bypass: check that in G(b1) ∧ (Büchi ↔ GF(b2)), b1 and b2 don't share an AP.
|
||
# We do it because G(o1 ∨ o2) ∧ (GFi ↔ GFo1) is realizable while
|
||
# G(o1) ∧ (GFi ↔ GFo1) is not realizable. So we cannot conclude if
|
||
# they share an AP.
|
||
cat >exp <<EOF
|
||
there are 1 subformulas
|
||
trying to create strategy directly for Go1 & (GFi <-> GFo1)
|
||
direct strategy might exist but was not found.
|
||
translating formula done in X seconds
|
||
automaton has 1 states and 1 colors
|
||
LAR construction done in X seconds
|
||
DPA has 1 states, 1 colors
|
||
split inputs and outputs done in X seconds
|
||
automaton has 3 states
|
||
solving game with acceptance: Büchi
|
||
game solved in X seconds
|
||
EOF
|
||
ltlsynt -f "G(o1) & (GFi <-> GFo1)" --outs="o1" --verbose\
|
||
--bypass=yes --pol=no 2> out || true
|
||
sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx
|
||
diff outx exp
|
||
|
||
cat >exp <<EOF
|
||
there are 1 subformulas
|
||
trying to create strategy directly for G(o1 | o2) & (GFi <-> GFo1)
|
||
direct strategy might exist but was not found.
|
||
translating formula done in X seconds
|
||
automaton has 1 states and 2 colors
|
||
LAR construction done in X seconds
|
||
DPA has 2 states, 2 colors
|
||
split inputs and outputs done in X seconds
|
||
automaton has 6 states
|
||
solving game with acceptance: Streett 1
|
||
game solved in X seconds
|
||
simplification took X seconds
|
||
EOF
|
||
ltlsynt -f "G(o1|o2) & (GFi <-> GFo1)" --outs="o1,o2" --verbose\
|
||
--bypass=yes --pol=no 2> out
|
||
sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx
|
||
diff outx exp
|
||
|
||
cat >exp <<EOF
|
||
the following signals can be temporarily removed:
|
||
o2 := 1
|
||
new formula: GFi <-> GFo1
|
||
there are 1 subformulas
|
||
trying to create strategy directly for GFi <-> GFo1
|
||
tanslating formula done in X seconds
|
||
direct strategy was found.
|
||
direct strat has 1 states, 2 edges and 0 colors
|
||
simplification took X seconds
|
||
EOF
|
||
ltlsynt -f "G(o1|o2) & (GFi <-> GFo1)" --outs="o1,o2" --verbose\
|
||
--bypass=yes 2> out
|
||
sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx
|
||
diff outx exp
|
||
|
||
|
||
# Test the loop around polarity/global-equiv
|
||
cat >exp <<EOF
|
||
the following signals can be temporarily removed:
|
||
r3 := 1
|
||
new formula: G(i <-> o) & G(o <-> o2) & G(!o | !o3) & GFo3
|
||
o := i
|
||
o2 := i
|
||
new formula: GFo3 & G(!i | !o3)
|
||
i := 1
|
||
new formula: GFo3 & G!o3
|
||
there are 1 subformulas
|
||
trying to create strategy directly for GFo3 & G!o3
|
||
direct strategy might exist but was not found.
|
||
translating formula done in X seconds
|
||
automaton has 1 states and 0 colors
|
||
LAR construction done in X seconds
|
||
DPA has 1 states, 0 colors
|
||
split inputs and outputs done in X seconds
|
||
automaton has 3 states
|
||
solving game with acceptance: co-Büchi
|
||
game solved in X seconds
|
||
UNREALIZABLE
|
||
EOF
|
||
ltlsynt -f 'G(o<->i) & G(o2 <-> o) & G(!o | !o3) & G(r3 -> Fo3)' \
|
||
--ins=i,r3 --verbose 2>out 1>&2 && exit 1
|
||
sed 's/ [0-9.e-]* seconds/ X seconds/g' out > outx
|
||
diff outx exp
|
||
|
||
|
||
# Test --dot and --hide-status
|
||
ltlsynt -f 'i <-> Fo' --ins=i --aiger --dot | grep arrowhead=dot
|
||
ltlsynt -f 'i <-> Fo' --ins=i --print-game-hoa --dot | grep 'shape="diamond"'
|
||
ltlsynt -f 'i <-> Fo' --ins=i --dot --hide-status > res
|
||
cat >exp <<EOF
|
||
digraph "" {
|
||
rankdir=LR
|
||
node [shape="circle"]
|
||
I [label="", style=invis, width=0]
|
||
I -> 0
|
||
0 [label="0"]
|
||
0 -> 0 [label="i / o"]
|
||
0 -> 1 [label="!i / !o"]
|
||
1 [label="1"]
|
||
1 -> 1 [label="1 / !o"]
|
||
}
|
||
EOF
|
||
diff res exp
|
||
|
||
|
||
# The following formula, generated from SPIReadManag.tlsf exhibited a bug
|
||
# in the decomposition.
|
||
s1="G(!((!o15 & !((!o14 & o16) <-> (o14 & !o16))) <-> (o15 & !(o14 | o16)))"
|
||
s2=" & !((!o12 & !((!o11 & o13) <-> (o11 & !o13))) <-> (o12 & !(o11 | o13)))"
|
||
s3=" & !((o09 & !o10) <-> (!o09 & o10)) & !((o07 & !o08) <-> (!o07 & o08))"
|
||
s4=" & !((!o05 & !((!o04 & o06) <-> (o04 & !o06))) <-> (o05 & !(o04 | o06)))"
|
||
s5=" & !((!o02 & !((!o01 & o03) <-> (o01 & !o03))) <-> (o02 & !(o01 | o03))))"
|
||
s6=" & ((G!(i2 & i7) & G(o15 -> Fi3)) -> (Go09 & G(o14 <-> (i6 & !i7)) & "
|
||
s7="G(o07 <-> (i7 & i8)) & G((i7 & i8) -> (o11 U i3)) & GFo12 & G(o04 <-> "
|
||
s8="(i4 & i6)) & G(o05 <-> !(i4 & i6)) & G(o15 <-> (i7 & i8)) & G(i7 -> o02) & "
|
||
s9="G((!i7 & !(i1 & i2 & !i5 & i6)) -> o03) & G(o01 <-> (i1 & i2 & !i5 & i6))))"
|
||
s=$s1$s2$s3$s4$s5$s6$s7$s8$s9
|
||
ltlsynt --decomp=yes -f "$s" --ins=i1,i2,i3,i4,i5,i6,i7,i8 --realizability >out
|
||
ltlsynt --decomp=no -f "$s" --ins=i1,i2,i3,i4,i5,i6,i7,i8 --realizability >>out
|
||
cat >expected <<EOF
|
||
REALIZABLE
|
||
REALIZABLE
|
||
EOF
|
||
diff out expected
|