* lbtt/: Merge lbtt 1.0.3.

This commit is contained in:
Alexandre Duret-Lutz 2004-02-16 12:09:29 +00:00
parent f4708a0179
commit 4741dc02bf
34 changed files with 817 additions and 1033 deletions

View file

@ -1,3 +1,7 @@
2004-02-16 Alexandre Duret-Lutz <adl@src.lip6.fr>
* lbtt/: Merge lbtt 1.0.3.
2004-02-13 Alexandre Duret-Lutz <adl@src.lip6.fr> 2004-02-13 Alexandre Duret-Lutz <adl@src.lip6.fr>
* src/tgbatest/ltl2baw.pl (END): Ensure LTL2TGBA is always * src/tgbatest/ltl2baw.pl (END): Ensure LTL2TGBA is always

View file

@ -10,23 +10,6 @@
* src/TestOperations.cc: Include sys/wait.h. * src/TestOperations.cc: Include sys/wait.h.
* src/Alloc.h: Rename as ...
* src/ObstackAlloc.h: ... this. The problem is that alloc.h is a
system header in g++ < 3.0, and Darwin has a case-insensitive
filesystem. System headers that include alloc.h pick the local
Alloc.h version.
* BuchiAutomaton.h, Configuration.h, DispUtil.cc,
ExternalTranslator.h, FormulaRandomizer.h, Graph.h.in,
LtlFormula.h, Makefile.am, NeverClaimAutomaton.h, PathEvaluator.h,
ProductAutomaton.h, SccIterator.h, SharedTestData.h,
StatDisplay.h, StateSpace.h, StateSpaceRandomizer.cc,
StringUtil.h, TestOperations.h, TestRoundInfo.h, TestStatistics.h,
UserCommandReader.h, UserCommands.h, main.cc: Adjust includes.
2003-12-29 Alexandre Duret-Lutz <adl@src.lip6.fr>
* doc/texinfo.tex: New upstream version.
2003-07-29 Alexandre Duret-Lutz <aduret@src.lip6.fr> 2003-07-29 Alexandre Duret-Lutz <aduret@src.lip6.fr>
* src/TestOperations.cc (generateBuchiAutomaton): Forward SIGINT * src/TestOperations.cc (generateBuchiAutomaton): Forward SIGINT
@ -35,11 +18,6 @@
* src/main.cc (main): Do not intercept SIGINT in * src/main.cc (main): Do not intercept SIGINT in
non-interactive runs. non-interactive runs.
2003-07-13 Alexandre Duret-Lutz <aduret@src.lip6.fr>
* doc/lbtt.texi: Never use @-commands in @node names, recent Texinfo
versions are stricter on this.
2003-07-10 Alexandre Duret-Lutz <aduret@src.lip6.fr> 2003-07-10 Alexandre Duret-Lutz <aduret@src.lip6.fr>
Spot wants `^', not `xor'. Spot wants `^', not `xor'.
@ -59,13 +37,74 @@
* src/Makefile.am (lbtt_translate_SOURCES): Add SpotWrapper.cc * src/Makefile.am (lbtt_translate_SOURCES): Add SpotWrapper.cc
and SpotWrapper.h. and SpotWrapper.h.
* src/translate.cc (main): Add the --spot option, and build * src/translate.cc (main): Add the --spot option, and build
a SpotWrapper of required. a SpotWrapper if required.
2004-02-13 Heikki Tauriainen <heikki.tauriainen@hut.fi>
* src/BitArray.{h,cc}, src/BuchiAutomaton.{h,cc},
src/Configuration.{h,cc}, src/DispUtil.{h,cc},
src/ExternalTranslator.{h,cc}, src/FormulaRandomizer.{h,cc},
src/LtlFormula.{h,cc}, src/NeverClaimAutomaton.{h,cc},
src/PathEvaluator.{h,cc}, src/PathIterator.{h,cc},
src/ProductAutomaton.{h,cc}, src/SpinWrapper.{h,cc},
src/StatDisplay.{h,cc}, src/StateSpace.{h,cc},
src/StateSpaceRandomizer.{h,cc}, src/StringUtil.{h,cc},
src/TestOperations.{h,cc}, src/TestStatistics.{h,cc},
src/translate.{h,cc}, src/UserCommandReader.{h,cc},
src/UserCommands.{h,cc}: Remove all #pragmas.
2004-02-12 Heikki Tauriainen <heikki.tauriainen@hut.fi>
* doc/texinfo.tex: New upstream version.
* doc/lbtt.texi: Update edition to 1.0.2.
Remove node names with commands to fix dvi file generation.
Move the node about the lbtt-translate utility to correct menu.
Reformat the automata file format section to avoid overfull lines
in dvi generation.
Fix description of the Algorithm block used with lbtt-translate.
* doc/testprocedure.txt, doc/intersectioncheck.txt: Add initial
newlines.
2004-02-11 Heikki Tauriainen <heikki.tauriainen@hut.fi>
* src/UserCommandReader.cc [HAVE_ISATTY]: Include the unistd.h
header.
(executeUserCommands) Stop waiting for new commands if an EOF is
detected. [HAVE_ISATTY]: If standard input is not connected to a
terminal, echo the input line.
2004-02-10 Heikki Tauriainen <heikki.tauriainen@hut.fi>
* configure.ac: Remove duplicate checks for headers.
(GLIBC_OBSTACK_WORKAROUND): New config.h macro for checking for a
version of the obstack.h header that requires a workaround to be
compiled with g++.
Add check for the `isatty' library function.
Include the stdio.h header when testing for readline libraries.
* src/Alloc.h: Rename to LbttAlloc.h to avoid a name conflict with
system header files on Darwin.
[GLIBC_OBSTACK_WORKAROUND] (__INT_TO_PTR): Redefine macro to
work around a C++ bug in the obstack.h header file in glibc 2.3.2.
Thanks to Alexandre Duret-Lutz for the original patch.
* src/BuchiAutomaton.h, src/Configuration.h, src/DispUtil.cc,
src/ExternalTranslator.h, src/FormulaRandomizer.h, src/Graph.h.in,
src/LtlFormula.h, src/main.cc, src/Makefile.am,
src/NeverClaimAutomaton.h, src/PathEvaluator.h,
src/ProductAutomaton.h, src/SccIterator.h, src/SharedTestData.h,
src/StatDisplay.h, src/StateSpace.h, src/StateSpaceRandomizer.cc,
src/StringUtil.h, src/TestOperations.h, src/TestRoundInfo.h,
src/TestStatistics.h, src/UserCommandReader.h,
src/UserCommands.h: Adjust includes.
* Update copyright information in source files.
2003-07-04 Alexandre Duret-Lutz <aduret@src.lip6.fr> 2003-07-04 Alexandre Duret-Lutz <aduret@src.lip6.fr>
* src/Config-parse.yy: Remove stray `,' in %token arguments. * src/Config-parse.yy: Remove stray `,' in %token arguments.
* src/Alloc.h (__INT_TO_PTR): Redefine to work around glibc 2.3.
* doc/texinfo.tex: New upstream version.
2003-07-18 Heikki Tauriainen <heikki.tauriainen@hut.fi> 2003-07-18 Heikki Tauriainen <heikki.tauriainen@hut.fi>

View file

@ -14,7 +14,7 @@
This file documents how to use the LTL-to-B@"uchi This file documents how to use the LTL-to-B@"uchi
translator testbench @command{lbtt}. translator testbench @command{lbtt}.
Copyright @copyright{} 2003 Heikki Tauriainen Copyright @copyright{} 2004 Heikki Tauriainen
@ifinfo @ifinfo
@email{heikki.tauriainen@@hut.fi} @email{heikki.tauriainen@@hut.fi}
@end ifinfo @end ifinfo
@ -68,7 +68,7 @@ under the above conditions for modified versions.
@author Heikki Tauriainen <@email{heikki.tauriainen@@hut.fi}> @author Heikki Tauriainen <@email{heikki.tauriainen@@hut.fi}>
@page @page
@vskip 0pt plus 1filll @vskip 0pt plus 1filll
Copyright @copyright{} 2003 Heikki Tauriainen Copyright @copyright{} 2004 Heikki Tauriainen
<@email{heikki.tauriainen@@hut.fi}> <@email{heikki.tauriainen@@hut.fi}>
The latest version of this manual can be obtained from@* The latest version of this manual can be obtained from@*
@ -96,14 +96,14 @@ under the above conditions for modified versions.
@end iftex @end iftex
@ifnottex @ifnottex
@node Top, Copying, (dir), (dir) @node Top, Copying, , (dir)
@top @command{lbtt} @top @command{lbtt}
@command{lbtt} is a tool for testing implementations of algorithms @command{lbtt} is a tool for testing implementations of algorithms
for translating propositional linear temporal logic formulas into for translating propositional linear temporal logic formulas into
B@"uchi automata. B@"uchi automata.
This is edition 1.0.1 of the @command{lbtt} documentation. This edition This is edition 1.0.2 of the @command{lbtt} documentation. This edition
applies to @command{lbtt} versions 1.0.x. applies to @command{lbtt} versions 1.0.x.
@command{lbtt} is free software, you may change and redistribute it @command{lbtt} is free software, you may change and redistribute it
@ -115,20 +115,21 @@ comes with NO WARRANTY. See @ref{Copying} for details.
* Overview:: A short introduction to @command{lbtt}. * Overview:: A short introduction to @command{lbtt}.
* Test methods:: Description of the tests @command{lbtt} * Test methods:: Description of the tests @command{lbtt}
performs. performs.
* Invocation:: How to run the program. * Invocation:: How to run the program.
* Interpreting the output:: Explanation of @command{lbtt}'s output messages. * Interpreting the output:: Explanation of @command{lbtt}'s output messages.
* Analyzing test results:: Working with @command{lbtt}'s internal * Analyzing test results:: Working with @command{lbtt}'s internal
commands. commands.
* Interfacing with lbtt:: Interfacing LTL-to-B@"uchi translators * Interfacing with lbtt:: Interfacing LTL-to-B@"uchi translators
with @command{lbtt}. with @command{lbtt}.
* References:: List of references. * References:: List of references.
* Definitions:: A reference of the formal definitions of * Definitions:: A reference of the formal definitions of
the various objects that @command{lbtt} the various objects that @command{lbtt}
manipulates. manipulates.
* Configuration file option index:: * Configuration file option index::
* Command line option index:: * Command line option index::
@ -255,24 +256,24 @@ for more information.
@menu @menu
* Random input generation:: How @command{lbtt} generates input for the * Random input generation:: How @command{lbtt} generates input for the
tests. tests.
* Testing procedure:: Outline of @command{lbtt}'s testing * Testing procedure:: Outline of @command{lbtt}'s testing
procedure. procedure.
* Model checking result cross-comparison test:: * Model checking result cross-comparison test::
Model checking the same LTL formula in Model checking the same LTL formula in
a fixed state space using different a fixed state space using different
LTL-to-B@"uchi translators should LTL-to-B@"uchi translators should
give the same model checking result. give the same model checking result.
* Model checking result consistency check:: * Model checking result consistency check::
Model checking two complementary LTL Model checking two complementary LTL
formulas in the same state space using formulas in the same state space using
an LTL-to-B@"uchi translator should an LTL-to-B@"uchi translator should
give consistent results. give consistent results.
* Buchi automata intersection emptiness check:: * Automata intersection emptiness check::
The intersection of the languages The intersection of the languages
accepted by two B@"uchi automata accepted by two B@"uchi automata
constructed from two complementary constructed from two complementary
LTL formulas should be empty. LTL formulas should be empty.
@end menu @end menu
@ -302,9 +303,9 @@ the input generation algorithms.
@menu @menu
* Random LTL formulas:: How @command{lbtt} generates random * Random LTL formulas:: How @command{lbtt} generates random
LTL formulas. LTL formulas.
* Random state spaces:: How @command{lbtt} generates random * Random state spaces:: How @command{lbtt} generates random
state spaces. state spaces.
@end menu @end menu
@ -609,7 +610,7 @@ pseudocode description of the algorithm used for generating random LTL
formulas. formulas.
@end ifnottex @end ifnottex
@node The formula generation algorithm, , Random LTL formulas, Random LTL formulas @node The formula generation algorithm, , Random LTL formulas, Random LTL formulas
@subsubsection The formula generation algorithm @subsubsection The formula generation algorithm
@cindex random LTL formula, generation algorithm @cindex random LTL formula, generation algorithm
@ -879,7 +880,7 @@ for more information.
@node Random state spaces, , Random LTL formulas, Random input generation @node Random state spaces, , Random LTL formulas, Random input generation
@subsection Random state spaces @subsection Random state spaces
@cindex state space @cindex state space
@ -1016,7 +1017,7 @@ acceptable limits.
@node Algorithm for generating connected graphs, , Random state spaces, Random state spaces @node Algorithm for generating connected graphs, , Random state spaces, Random state spaces
@subsubsection Algorithm for generating connected graphs @subsubsection Algorithm for generating connected graphs
@cindex random connected graph, generation algorithm @cindex random connected graph, generation algorithm
@ -1028,7 +1029,7 @@ graphs:
@smallexample @smallexample
@r{1} function RandomGraph(@var{n} : Integer; @var{d} : Real in [0.0,1.0]; @r{1} function RandomGraph(@var{n} : Integer; @var{d} : Real in [0.0,1.0];
@var{t} : Real in [0.0,1.0]) : Graph; @var{t} : Real in [0.0,1.0]) : Graph;
@r{2} @var{S} := @{s1, s2, ..., sn@}; @r{2} @var{S} := @{s1, s2, ..., sn@};
@r{3} @var{NodesToProcess} := @{s1@}; @r{3} @var{NodesToProcess} := @{s1@};
@r{4} @var{UnreachableNodes} := @{s2, s3, ..., sn@}; @r{4} @var{UnreachableNodes} := @{s2, s3, ..., sn@};
@ -1055,7 +1056,7 @@ graphs:
@r{25} end; @r{25} end;
@r{26} end; @r{26} end;
@r{27} if @r{there is no edge} (@var{state},@var{state'}) @r{in} @var{Edges} @r{27} if @r{there is no edge} (@var{state},@var{state'}) @r{in} @var{Edges}
@r{for any} @var{state'} @r{in} @var{S} then @r{for any} @var{state'} @r{in} @var{S} then
@r{28} @r{insert} (@var{state},@var{state}) @r{into} @var{Edges}; @r{28} @r{insert} (@var{state},@var{state}) @r{into} @var{Edges};
@r{29} end; @r{29} end;
@r{30} return <@var{S}, @var{Edges}, s1, @var{Label}>; @r{30} return <@var{S}, @var{Edges}, s1, @var{Label}>;
@ -1125,11 +1126,10 @@ and the model checking result consistency check
(@pxref{Model checking result consistency check}) (@pxref{Model checking result consistency check})
on the model checking results, and reports all detected failures. on the model checking results, and reports all detected failures.
The B@"uchi automata intersection emptiness check (@pxref{Buchi The B@"uchi automata intersection emptiness check
automata intersection emptiness check}) operates as follows (note that (@pxref{Automata intersection emptiness check}) operates as follows (note that
the LTL-to-B@"uchi translation phase is repeated in this figure only the LTL-to-B@"uchi translation phase is repeated in this figure only for
for completeness; in reality, @command{lbtt} performs this phase only completeness; in reality, @command{lbtt} performs this phase only once):
once):
@ifhtml @ifhtml
@* @*
@end ifhtml @end ifhtml
@ -1198,7 +1198,7 @@ providing an additional implementation to include in the tests.
@node Model checking result consistency check, Buchi automata intersection emptiness check, Model checking result cross-comparison test, Test methods @node Model checking result consistency check, Automata intersection emptiness check, Model checking result cross-comparison test, Test methods
@section Model checking result consistency check @section Model checking result consistency check
@cindex model checking result consistency check @cindex model checking result consistency check
@ -1236,8 +1236,8 @@ section.
@end iftex @end iftex
@node Buchi automata intersection emptiness check, , Model checking result consistency check, Test methods @node Automata intersection emptiness check, , Model checking result consistency check, Test methods
@section Buchi automata intersection emptiness check @section Automata intersection emptiness check
@cindex B@"uchi automata intersection emptiness check @cindex B@"uchi automata intersection emptiness check
@cindex tests, B@"uchi automata intersection emptiness check @cindex tests, B@"uchi automata intersection emptiness check
@ -1288,7 +1288,7 @@ how to use @command{lbtt}'s internal commands).
@menu @menu
* Configuration file:: Description of the configuration file * Configuration file:: Description of the configuration file
format. format.
* Command line options:: List of command line options. * Command line options:: List of command line options.
@end menu @end menu
@ -1351,17 +1351,17 @@ section specifying an LTL-to-B@"uchi translator. The other sections
are optional and can be used to override the default testing parameters. are optional and can be used to override the default testing parameters.
@menu @menu
* Algorithm section:: Each LTL-to-B@"uchi translator to be * Algorithm section:: Each LTL-to-B@"uchi translator to be
tested requires a separate tested requires a separate
@samp{Algorithm} section in the @samp{Algorithm} section in the
configuration file. configuration file.
* GlobalOptions section:: Options for changing the general * GlobalOptions section:: Options for changing the general
behavior of @command{lbtt}. behavior of @command{lbtt}.
* FormulaOptions section:: Options controlling the way random * FormulaOptions section:: Options controlling the way random
LTL formulas are generated. LTL formulas are generated.
* StateSpaceOptions section:: Options controlling the way random * StateSpaceOptions section:: Options controlling the way random
state spaces are generated. state spaces are generated.
* Sample configuration file:: An example of a configuration file. * Sample configuration file:: An example of a configuration file.
@end menu @end menu
@ -1477,9 +1477,9 @@ The default value for this option is @samp{Always}.
@cindex enabling and disabling tests @cindex enabling and disabling tests
@findex IntersectionCheck @r{[}GlobalOptions@r{]} @findex IntersectionCheck @r{[}GlobalOptions@r{]}
@findex IntersectionTest @r{[}GlobalOptions@r{]} @findex IntersectionTest @r{[}GlobalOptions@r{]}
This option can be used to enable or disable the B@"uchi automata This option can be used to enable or disable the B@"uchi automata intersection
intersection emptiness check (@pxref{Buchi automata intersection emptiness check (@pxref{Automata intersection emptiness check}). The test is
emptiness check}). The test is enabled by default. enabled by default.
@item ModelCheck = Local @r{|} Global @item ModelCheck = Local @r{|} Global
@findex ModelCheck @r{[}GlobalOptions@r{]} @findex ModelCheck @r{[}GlobalOptions@r{]}
@ -1669,16 +1669,16 @@ The following table illustrates the effects of the
@t{ @t{
@r{LTL formula} @r{Can} f @r{be} OutputMode@r{'s effect on the} @r{LTL formula} @r{Can} f @r{be} OutputMode@r{'s effect on the}
f @r{generated if} @r{formula passed to the} f @r{generated if} @r{formula passed to the}
GenerateMode @r{LTL-to-B@"uchi translators} GenerateMode @r{LTL-to-B@"uchi translators}
=NNF @r{?} =NNF @r{?}
------------------------------------------------------------- -------------------------------------------------------------
(p1 V ! p0) @r{Yes} Normal@r{/}NNF@r{:} (p1 V ! p0) (p1 V ! p0) @r{Yes} Normal@r{/}NNF@r{:} (p1 V ! p0)
[] p0 -> <> p1 @r{Yes*} Nor@r{:} [] p0 -> <> p1 [] p0 -> <> p1 @r{Yes*} Nor@r{:} [] p0 -> <> p1
NNF@r{:} (true U ! p0) \/ (true U p1) NNF@r{:} (true U ! p0) \/ (true U p1)
! <> p0 @r{No} Nor@r{:} ! <> p0 ! <> p0 @r{No} Nor@r{:} ! <> p0
NNF@r{:} (false V ! p0) NNF@r{:} (false V ! p0)
@r{* only if} AbbreviatedOperators=Yes @r{* only if} AbbreviatedOperators=Yes
} }
@ -1851,12 +1851,7 @@ the generated state spaces. The default value is 5.
Usually this should probably be the same as the maximum number of Usually this should probably be the same as the maximum number of
different atomic propositions in the generated formulas different atomic propositions in the generated formulas
@ifnottex
(@pxref{FormulaOptions section}). (@pxref{FormulaOptions section}).
@end ifnottex
@iftex
(see the previous section).
@end iftex
If the number of propositions attached to each state of If the number of propositions attached to each state of
the state spaces is less than the maximum number of different propositions that the state spaces is less than the maximum number of different propositions that
may occur in the generated formulas, all ``extra'' propositions in the formulas may occur in the generated formulas, all ``extra'' propositions in the formulas
@ -1900,7 +1895,7 @@ in any state of the state space. Note: This option has no effect if
@end table @end table
@node Sample configuration file, , StateSpaceOptions section, Configuration file @node Sample configuration file, , StateSpaceOptions section, Configuration file
@subsection Sample configuration file @subsection Sample configuration file
@cindex configuration file, example @cindex configuration file, example
@ -1915,7 +1910,7 @@ Algorithm
@{ @{
Name = "Translator 1" Name = "Translator 1"
Path = "~/lbtt/bin/t-1" # location of the translator Path = "~/lbtt/bin/t-1" # location of the translator
# executable # executable
Enabled = Yes Enabled = Yes
@} @}
@ -1924,7 +1919,7 @@ Algorithm
Name = "Translator 2" Name = "Translator 2"
Path = "~/lbtt/bin/t-2" Path = "~/lbtt/bin/t-2"
Parameters = "-x -y 3 -v 0" # parameters to be passed to the Parameters = "-x -y 3 -v 0" # parameters to be passed to the
# `~/lbtt/bin/t-2' executable # `~/lbtt/bin/t-2' executable
Enabled = Yes Enabled = Yes
@} @}
@ -1941,8 +1936,8 @@ GlobalOptions
IntersectionTest = No # emptiness test IntersectionTest = No # emptiness test
ModelCheck = Local # perform the tests only in a ModelCheck = Local # perform the tests only in a
# single state of each state # single state of each state
# space # space
@} @}
FormulaOptions FormulaOptions
@ -1952,15 +1947,15 @@ FormulaOptions
OutputMode = Normal OutputMode = Normal
ChangeInterval = 1 # new formula after each test ChangeInterval = 1 # new formula after each test
# round # round
RandomSeed = 4632912 # random seed RandomSeed = 4632912 # random seed
Size = 5...15 # 5 to 15 nodes in the parse Size = 5...15 # 5 to 15 nodes in the parse
# tree of each formula # tree of each formula
Propositions = 3 # max. 3 different propositions Propositions = 3 # max. 3 different propositions
# in each LTL formula # in each LTL formula
PropositionPriority = 50 # priorities for propositional PropositionPriority = 50 # priorities for propositional
TruePriority = 1 # symbols TruePriority = 1 # symbols
@ -1975,38 +1970,38 @@ FormulaOptions
ReleasePriority = 5 ReleasePriority = 5
DefaultOperatorPriority = 0 # disable all the remaining DefaultOperatorPriority = 0 # disable all the remaining
# operators # operators
@} @}
StatespaceOptions StatespaceOptions
@{ @{
GenerateMode = RandomGraph # generate random (not GenerateMode = RandomGraph # generate random (not
# necessarily connected) graphs # necessarily connected) graphs
# as state spaces # as state spaces
ChangeInterval = 10 # new state space after every ChangeInterval = 10 # new state space after every
# 10th test round # 10th test round
RandomSeed = 37620 # random seed RandomSeed = 37620 # random seed
Size = 50 # 50 states in each state space Size = 50 # 50 states in each state space
Propositions = 3 # 3 propositions in each state Propositions = 3 # 3 propositions in each state
# of each state space # of each state space
EdgeProbability = 0.1 # approximate probability of EdgeProbability = 0.1 # approximate probability of
# having a transition between # having a transition between
# any two states # any two states
TruthProbability = 0.5 # probability with which any TruthProbability = 0.5 # probability with which any
# atomic proposition is true in # atomic proposition is true in
# a state # a state
@} @}
@end smallexample @end smallexample
@node Command line options, , Configuration file, Invocation @node Command line options, , Configuration file, Invocation
@section Command line options @section Command line options
This section lists the command line options that may be used when This section lists the command line options that may be used when
@ -2017,16 +2012,16 @@ there is no direct equivalent in the configuration file options.
@menu @menu
* Special options:: Options available only as command line * Special options:: Options available only as command line
parameters. parameters.
* Global options:: Options corresponding to the * Global options:: Options corresponding to the
@samp{GlobalOptions} section of the @samp{GlobalOptions} section of the
configuration file. configuration file.
* LTL formula options:: Options corresponding to the * LTL formula options:: Options corresponding to the
@samp{FormulaOptions} section of the @samp{FormulaOptions} section of the
configuration file. configuration file.
* State space options:: Options corresponding to the * State space options:: Options corresponding to the
@samp{StateSpaceOptions} section of the @samp{StateSpaceOptions} section of the
configuration file. configuration file.
@end menu @end menu
@ -2194,8 +2189,8 @@ between test rounds to wait for user input.
@cindex enabling and disabling tests @cindex enabling and disabling tests
@vindex --intersectiontest @vindex --intersectiontest
@vindex --nointersectiontest @vindex --nointersectiontest
These options enable or disable the B@"uchi automata intersection These options enable or disable the B@"uchi automata intersection emptiness
emptiness check (@pxref{Buchi automata intersection emptiness check}). check (@pxref{Automata intersection emptiness check}).
@item --localmodelcheck @item --localmodelcheck
@vindex --localmodelcheck @vindex --localmodelcheck
@ -2441,7 +2436,7 @@ them randomly.
@node State space options, , LTL formula options, Command line options @node State space options, , LTL formula options, Command line options
@subsection State space options @subsection State space options
The following command line options affect the way in which @command{lbtt} The following command line options affect the way in which @command{lbtt}
@ -2523,7 +2518,7 @@ This option can be used to change the size of the generated state spaces.
@vindex --truthprobability @vindex --truthprobability
This option sets the probability that @command{lbtt} uses for choosing the This option sets the probability that @command{lbtt} uses for choosing the
valuation for each atomic proposition in each state of the randomly generated valuation for each atomic proposition in each state of the randomly generated
state spaces. (This option has no effect is using enumerated paths as state state spaces. (This option has no effect if using enumerated paths as state
spaces.) spaces.)
@end table @end table
@ -2541,9 +2536,9 @@ messages will be suppressed; higher verbosity modes show information about
@menu @menu
* Configuration information:: The current configuration is shown * Configuration information:: The current configuration is shown
before starting tests. before starting tests.
* Test round messages:: Conventions for reporting test * Test round messages:: Conventions for reporting test
results and test failures. results and test failures.
* Test statistics:: Shown at the end of testing. * Test statistics:: Shown at the end of testing.
@end menu @end menu
@ -2727,11 +2722,11 @@ of the formulas into a B@"uchi automaton correctly.
@end enumerate @end enumerate
The output of phases 4---8 will be repeated for each implementation The output of phases 4---8 will be repeated for each implementation included in
included in the tests. After this @command{lbtt} proceeds to the model the tests. After this @command{lbtt} proceeds to the model checking result
checking result cross-comparison test (@pxref{Model checking result cross-comparison test (@pxref{Model checking result cross-comparison test}) and
cross-comparison test}) and the B@"uchi automata intersection the B@"uchi automata intersection emptiness test
emptiness test (@pxref{Buchi automata intersection emptiness check}). (@pxref{Automata intersection emptiness check}).
The model checking result cross-comparison test might result in the following The model checking result cross-comparison test might result in the following
output: output:
@ -2788,7 +2783,7 @@ format specified above.
@node Test statistics, , Test round messages, Interpreting the output @node Test statistics, , Test round messages, Interpreting the output
@section Test statistics @section Test statistics
@cindex tests, statistics @cindex tests, statistics
@ -2858,9 +2853,9 @@ a single fixed state of each generated state space (called the ``initial''
state of the state space). state of the state space).
@item @item
Number of failures in the B@"uchi automata intersection emptiness Number of failures in the B@"uchi automata intersection emptiness check
check (@pxref{Buchi automata intersection emptiness check}) for each (@pxref{Automata intersection emptiness check}) for each pair of
pair of implementations. implementations.
@end itemize @end itemize
Note that the pairwise inconsistency results form a symmetric matrix (although Note that the pairwise inconsistency results form a symmetric matrix (although
@ -2895,13 +2890,13 @@ showing a prompt of the form
@menu @menu
* Command conventions:: Conventions for entering commands. * Command conventions:: Conventions for entering commands.
* Getting help:: Use the @samp{help} command to access * Getting help:: Use the @samp{help} command to access
on-line help. on-line help.
* Test control commands:: Commands for continuing testing, * Test control commands:: Commands for continuing testing,
skipping tests or enabling or disabling skipping tests or enabling or disabling
implementations. implementations.
* Data display commands:: Commands for displaying information * Data display commands:: Commands for displaying information
about B@"uchi automata, state spaces, about B@"uchi automata, state spaces,
and LTL formulas. and LTL formulas.
* Failure analysis commands:: Commands for analyzing test failures. * Failure analysis commands:: Commands for analyzing test failures.
@end menu @end menu
@ -3167,7 +3162,7 @@ the output that is displayed.
@node Failure analysis commands, , Data display commands, Analyzing test results @node Failure analysis commands, , Data display commands, Analyzing test results
@section Failure analysis commands @section Failure analysis commands
The first part of this section introduces the commands available for The first part of this section introduces the commands available for
@ -3185,7 +3180,7 @@ automata correctness tests. The second part describes the conventions that
@cindex failure analysis, B@"uchi automata intersection check @cindex failure analysis, B@"uchi automata intersection check
@cindex analyzing test failures, B@"uchi automata intersection emptiness check @cindex analyzing test failures, B@"uchi automata intersection emptiness check
Analyze a failure in the B@"uchi automata intersection emptiness check Analyze a failure in the B@"uchi automata intersection emptiness check
(@pxref{Buchi automata intersection emptiness check}). (@pxref{Automata intersection emptiness check}).
The two implementation identifiers select the B@"uchi automata for which The two implementation identifiers select the B@"uchi automata for which
to perform the analysis. The B@"uchi automata intersection emptiness to perform the analysis. The B@"uchi automata intersection emptiness
check always involves automata constructed from the positive and the negative check always involves automata constructed from the positive and the negative
@ -3288,10 +3283,10 @@ itself indefinitely. The witness might look as follows:
@smallexample @smallexample
Execution M: Execution M:
prefix: < s0 @{p0, p4@}, prefix: < s0 @{p0, p4@},
s2 @{p1, p2, p3, p4@} > s2 @{p1, p2, p3, p4@} >
cycle: < s34 @{p0, p1, p2, p3, p4@}, cycle: < s34 @{p0, p1, p2, p3, p4@},
s42 @{p4@}, s42 @{p4@},
s44 @{p1, p4@} > s44 @{p1, p4@} >
@end smallexample @end smallexample
@noindent @noindent
@ -3321,7 +3316,7 @@ $S = \{s_0, s_2, s_{34}, s_{42}, s_{44}\}$,
@iftex @iftex
@tex @tex
$\rho = \{(s_0, s_2), (s_2, s_{34}), (s_{34}, s_{42}), (s_{42}, s_{44}), $\rho = \{(s_0, s_2), (s_2, s_{34}), (s_{34}, s_{42}), (s_{42}, s_{44}),
(s_{44}, s_{34})\}$, (s_{44}, s_{34})\}$,
@end tex @end tex
@end iftex @end iftex
@ifnottex @ifnottex
@ -3360,17 +3355,17 @@ LTL and might look as follows:
+-> M,<s0, ...> |== (p1 U p4) : +-> M,<s0, ...> |== (p1 U p4) :
| +-> M,<s0, ...> |== p4 | +-> M,<s0, ...> |== p4
+-> M,<s0, ...> |== (! p1 -> [] p4) : +-> M,<s0, ...> |== (! p1 -> [] p4) :
+-> M,<s0, ...> |== [] p4 : +-> M,<s0, ...> |== [] p4 :
+-> M,<s0, ...> |== p4 +-> M,<s0, ...> |== p4
+-> s0 --> s2 +-> s0 --> s2
+-> M,<s2, ...> |== p4 +-> M,<s2, ...> |== p4
+-> s2 --> s34 +-> s2 --> s34
+-> M,<s34, ...> |== p4 +-> M,<s34, ...> |== p4
+-> s34 --> s42 +-> s34 --> s42
+-> M,<s42, ...> |== p4 +-> M,<s42, ...> |== p4
+-> s42 --> s44 +-> s42 --> s44
+-> M,<s44, ...> |== p4 +-> M,<s44, ...> |== p4
+-> s44 --> s34 +-> s44 --> s34
@end smallexample @end smallexample
@noindent @noindent
@ -3435,24 +3430,19 @@ which can be seen from the proof.
This chapter gives the details on how to use @command{lbtt} for This chapter gives the details on how to use @command{lbtt} for
testing LTL-to-B@"uchi translation algorithm implementations that are not testing LTL-to-B@"uchi translation algorithm implementations that are not
supported by the basic distribution. (See supported by the basic distribution. (See
@ifnottex
@ref{The lbtt-translate utility} @ref{The lbtt-translate utility}
@end ifnottex
@iftex
the next chapter
@end iftex
for information on how to connect several publicly available for information on how to connect several publicly available
LTL-to-B@"uchi translator implementations to @command{lbtt}.) LTL-to-B@"uchi translator implementations to @command{lbtt}.)
@menu @menu
* Translator interface:: @command{lbtt}'s requirements for an * Translator interface:: @command{lbtt}'s requirements for an
LTL-to-B@"uchi translator. LTL-to-B@"uchi translator.
* Format for LTL formulas:: How @command{lbtt} passes LTL formulas * Format for LTL formulas:: How @command{lbtt} passes LTL formulas
to the translators. to the translators.
* Buchi automata:: How @command{lbtt} expects the translators * Format for automata:: How @command{lbtt} expects the translators
to present their output. to present their output.
* The lbtt-translate utility:: An interface for two LTL-to-B@"uchi * The lbtt-translate utility:: An interface for two LTL-to-B@"uchi
translators. translators.
@end menu @end menu
@ -3479,7 +3469,7 @@ The translator executable should read its input (an LTL formula) from
@var{input-file} and write its output (a B@"uchi automaton) into @var{input-file} and write its output (a B@"uchi automaton) into
@var{output-file} (without removing the input file); see @var{output-file} (without removing the input file); see
@ifnottex @ifnottex
@ref{Format for LTL formulas} and @ref{Buchi automata} @ref{Format for LTL formulas} and @ref{Format for automata}
@end ifnottex @end ifnottex
@iftex @iftex
the following two sections the following two sections
@ -3507,7 +3497,7 @@ Algorithm
@node Format for LTL formulas, Buchi automata, Translator interface, Interfacing with lbtt @node Format for LTL formulas, Format for automata, Translator interface, Interfacing with lbtt
@section Input file format for LTL formulas @section Input file format for LTL formulas
@cindex LTL-to-B@"uchi translators, LTL formula input file format @cindex LTL-to-B@"uchi translators, LTL formula input file format
@ -3520,41 +3510,41 @@ notation) is as follows:
@smallexample @smallexample
@var{formula} @r{::=} `t' @var{formula} @r{::=} `t'
@r{// ``true''} @r{// ``true''}
@r{|} `f' @r{|} `f'
@r{// ``false''} @r{// ``false''}
@r{|} `p'@r{[}0@r{---}9@r{]+} @r{|} `p'@r{[}0@r{---}9@r{]+}
@r{// atomic proposition with} @r{// atomic proposition with}
@r{// a nonnegative integer} @r{// a nonnegative integer}
@r{// identifier} @r{// identifier}
@r{|} `!' @var{sp} @var{formula} @r{|} `!' @var{sp} @var{formula}
@r{// negation} @r{// negation}
@r{|} `X' @var{sp} @var{formula} @r{|} `X' @var{sp} @var{formula}
@r{// ``next time''} @r{// ``next time''}
@r{|} `F' @var{sp} @var{formula} @r{|} `F' @var{sp} @var{formula}
@r{// ``finally''} @r{// ``finally''}
@r{|} `G' @var{sp} @var{formula} @r{|} `G' @var{sp} @var{formula}
@r{// ``globally''} @r{// ``globally''}
@r{|} `&' @var{sp} @var{formula} @var{sp} @var{formula} @r{|} `&' @var{sp} @var{formula} @var{sp} @var{formula}
@r{// conjunction} @r{// conjunction}
@r{|} `|' @var{sp} @var{formula} @var{sp} @var{formula} @r{|} `|' @var{sp} @var{formula} @var{sp} @var{formula}
@r{// disjunction} @r{// disjunction}
@r{|} `i' @var{sp} @var{formula} @var{sp} @var{formula} @r{|} `i' @var{sp} @var{formula} @var{sp} @var{formula}
@r{// implication} @r{// implication}
@r{|} `e' @var{sp} @var{formula} @var{sp} @var{formula} @r{|} `e' @var{sp} @var{formula} @var{sp} @var{formula}
@r{// equivalence} @r{// equivalence}
@r{|} `^' @var{sp} @var{formula} @var{sp} @var{formula} @r{|} `^' @var{sp} @var{formula} @var{sp} @var{formula}
@r{// exclusive or} @r{// exclusive or}
@r{|} `U' @var{sp} @var{formula} @var{sp} @var{formula} @r{|} `U' @var{sp} @var{formula} @var{sp} @var{formula}
@r{// ``(strong) until''} @r{// ``(strong) until''}
@r{|} `V' @var{sp} @var{formula} @var{sp} @var{formula} @r{|} `V' @var{sp} @var{formula} @var{sp} @var{formula}
@r{// ``(weak) release''} @r{// ``(weak) release''}
@r{|} `W' @var{sp} @var{formula} @var{sp} @var{formula} @r{|} `W' @var{sp} @var{formula} @var{sp} @var{formula}
@r{// ``weak until''} @r{// ``weak until''}
@r{|} `M' @var{sp} @var{formula} @var{sp} @var{formula} @r{|} `M' @var{sp} @var{formula} @var{sp} @var{formula}
@r{// ``strong release''} @r{// ``strong release''}
@r{|} `B' @var{sp} @var{formula} @var{sp} @var{formula} @r{|} `B' @var{sp} @var{formula} @var{sp} @var{formula}
@r{// ``before''} @r{// ``before''}
@end smallexample @end smallexample
@noindent @noindent
@ -3591,8 +3581,8 @@ line options (@pxref{Command line options}) to prevent
@node Buchi automata, The lbtt-translate utility, Format for LTL formulas, Interfacing with lbtt @node Format for automata, The lbtt-translate utility, Format for LTL formulas, Interfacing with lbtt
@section Output file format for B@"uchi automata @section Output file format for automata
@cindex file formats, LTL-to-B@"uchi translator output file @cindex file formats, LTL-to-B@"uchi translator output file
@cindex LTL-to-B@"uchi translators, automaton output file format @cindex LTL-to-B@"uchi translators, automaton output file format
@ -3609,49 +3599,49 @@ The output file generated by the translator should contain an @var{automaton}
described using the following grammar: described using the following grammar:
@smallexample @smallexample
@var{automaton} @r{::=} @var{number-of-states} @var{sp} @var{number-of-acceptance-conditions} @var{states} @var{automaton} @r{::=} @var{num-states} @var{sp} @var{num-conds} @var{states}
@var{number-of-states} @r{::=} @r{[}0@r{---}9@r{]+} @var{num-states} @r{::=} @r{[}0@r{---}9@r{]+}
@var{number-of-acceptance-conditions} @r{::=} @r{[}0@r{---}9@r{]+} @var{num-conds} @r{::=} @r{[}0@r{---}9@r{]+}
@var{states} @r{::=} @var{states} @var{sp} @var{state} @var{states} @r{::=} @var{states} @var{sp} @var{state}
@r{|} @r{// empty} @r{|} @r{// empty}
@var{state} @r{::=} @var{state-id} @var{sp} @var{initial?} @var{acceptance-conditions} @var{sp} `-1' @var{transitions} @var{sp} `-1' @var{state} @r{::=} @var{state-id} @var{sp} @var{initial?} @var{conds} @var{sp} `-1' @var{transitions} @var{sp} `-1'
@var{state-id} @r{::=} @r{[}0@r{---}9@r{]+} @var{state-id} @r{::=} @r{[}0@r{---}9@r{]+}
@var{initial?} @r{::=} `0' @r{|} `1' @var{initial?} @r{::=} `0' @r{|} `1'
@var{acceptance-conditions} @r{::=} @var{acceptance-conditions} @var{sp} @var{acceptance-set-id} @var{conds} @r{::=} @var{conds} @var{sp} @var{acceptance-set-id}
@r{|} @r{// empty} @r{|} @r{// empty}
@var{acceptance-set-id} @r{::=} @r{[}0@r{---}9@r{]+} @var{acceptance-set-id} @r{::=} @r{[}0@r{---}9@r{]+}
@var{transitions} @r{::=} @var{transitions} @var{sp} @var{transition} @var{transitions} @r{::=} @var{transitions} @var{sp} @var{transition}
@r{|} @r{// empty} @r{|} @r{// empty}
@var{transition} @r{::=} @var{state-id} @var{sp} @var{guard-formula} @var{transition} @r{::=} @var{state-id} @var{sp} @var{guard-formula}
@var{guard-formula} @r{::=} `t' @var{guard-formula} @r{::=} `t'
@r{// ``true''} @r{// ``true''}
@r{|} `f' @r{|} `f'
@r{// ``false''} @r{// ``false''}
@r{|} `p'@r{[}0@r{---}9@r{]+} @r{|} `p'@r{[}0@r{---}9@r{]+}
@r{// atomic proposition} @r{// atomic proposition}
@r{|} `!' @var{sp} @var{guard-formula} @r{|} `!' @var{sp} @var{guard-formula}
@r{// negation} @r{// negation}
@r{|} `&' @var{sp} @var{guard-formula} @var{sp} @var{guard-formula} @r{|} `&' @var{sp} @var{guard-formula} @var{sp} @var{guard-formula}
@r{// conjunction} @r{// conjunction}
@r{|} `|' @var{sp} @var{guard-formula} @var{sp} @var{guard-formula} @r{|} `|' @var{sp} @var{guard-formula} @var{sp} @var{guard-formula}
@r{// disjunction} @r{// disjunction}
@r{|} `i' @var{sp} @var{guard-formula} @var{sp} @var{guard-formula} @r{|} `i' @var{sp} @var{guard-formula} @var{sp} @var{guard-formula}
@r{// implication} @r{// implication}
@r{|} `e' @var{sp} @var{guard-formula} @var{sp} @var{guard-formula} @r{|} `e' @var{sp} @var{guard-formula} @var{sp} @var{guard-formula}
@r{// equivalence} @r{// equivalence}
@r{|} `^' @var{sp} @var{guard-formula} @var{sp} @var{guard-formula} @r{|} `^' @var{sp} @var{guard-formula} @var{sp} @var{guard-formula}
@r{// exclusive or} @r{// exclusive or}
@end smallexample @end smallexample
@noindent @noindent
(The quoted characters denote the characters themselves; @var{sp} denotes any (The quoted characters denote the characters themselves; @var{sp} denotes any
@ -3679,7 +3669,7 @@ The state and acceptance condition identifiers need not be successive, and the
states or acceptance conditions can be listed in any order. The only states or acceptance conditions can be listed in any order. The only
restrictions are that the identifiers of different states and acceptance restrictions are that the identifiers of different states and acceptance
conditions should be unique and that the total number of different identifiers conditions should be unique and that the total number of different identifiers
should equal @var{number-of-states} or @var{number-of-acceptance-conditions}, should equal @var{num-states} or @var{num-conds},
respectively. (The same identifiers can be shared between states and acceptance respectively. (The same identifiers can be shared between states and acceptance
conditions, however.) conditions, however.)
@ -3743,7 +3733,7 @@ The following example illustrates the file format.
@node The lbtt-translate utility, , Buchi automata, Interfacing with lbtt @node The lbtt-translate utility, , Format for automata, Interfacing with lbtt
@section The @command{lbtt-translate} utility @section The @command{lbtt-translate} utility
@cindex @command{lbtt-translate} (executable file) @cindex @command{lbtt-translate} (executable file)
@ -3812,17 +3802,18 @@ installation instructions. Then add the following @samp{Algorithm} section in
@smallexample @smallexample
Algorithm Algorithm
@{ @{
Name = "@var{name for the implementation}" Name = "@r{[@var{name for the implementation}]}"
Path = "@var{path-to-@command{lbtt-translate}} @var{implementation-selector} @var{path-to-executable}" Path = "@r{[@var{path-to-@command{lbtt-translate}}]}"
Parameters = "@r{[@var{implementation selector}]} @r{[@var{path to executable}]}"
Enabled = Yes Enabled = Yes
@} @}
@end smallexample @end smallexample
@noindent @noindent
where @var{path-to-@command{lbtt-translate}} contains the complete path and where [@var{path-to-@command{lbtt-translate}}] contains the complete path and
file name of the @command{lbtt-translate} tool executable, file name of the @command{lbtt-translate} tool executable,
@var{implementation-selector} is either of the options @samp{--lbt} or [@var{implementation selector}] is either of the options @samp{--lbt} or
@samp{--spin}, and @var{path-to-executable} is the full path @samp{--spin}, and [@var{path to executable}] is the full path
of the tool executable. The names of these executables are usually (assuming of the tool executable. The names of these executables are usually (assuming
a normal installation) @command{lbt} and @command{spin}, respectively. a normal installation) @command{lbt} and @command{spin}, respectively.
@ -3849,7 +3840,7 @@ E.@: Clarke Jr., O.@: Grumberg and D.@: Peled. Model checking. The MIT Press,
1999. 1999.
@item @anchor{[Cou99]} [Cou99] @item @anchor{[Cou99]} [Cou99]
J-M. Couvreur. On-the-fly verification of linear temporal logic. In J.-M. Couvreur. On-the-fly verification of linear temporal logic. In
@i{Proceedings of the World Congress on Formal Methods in the Development of @i{Proceedings of the World Congress on Formal Methods in the Development of
Computing Systems (FM'99), volume I}, volume 1708 of Computing Systems (FM'99), volume I}, volume 1708 of
@i{Lecture Notes in Computer Science}, pages 253---271. Springer-Verlag, 1999. @i{Lecture Notes in Computer Science}, pages 253---271. Springer-Verlag, 1999.
@ -3964,18 +3955,18 @@ manipulates.
@menu @menu
* LTL formulas:: @command{lbtt} uses traditional semantics * LTL formulas:: @command{lbtt} uses traditional semantics
for propositional linear temporal for propositional linear temporal
logic. logic.
* Generalized Buchi automata:: The B@"uchi automata used by @command{lbtt} * Generalized automata:: The B@"uchi automata used by @command{lbtt}
have one initial state, labels on have one initial state, labels on
transitions and zero or more transitions and zero or more
acceptance conditions. acceptance conditions.
* State spaces:: State spaces are Kripke structures * State spaces:: State spaces are Kripke structures
with a total transition relation. with a total transition relation.
@end menu @end menu
@node LTL formulas, Generalized Buchi automata, Definitions, Definitions @node LTL formulas, Generalized automata, Definitions, Definitions
@appendixsec LTL formulas @appendixsec LTL formulas
@command{lbtt} uses the traditional definition for propositional linear @command{lbtt} uses the traditional definition for propositional linear
@ -4355,8 +4346,8 @@ $(\varphi\;{\bf B}\;\psi) \equiv_{\rm def} \neg(\neg\varphi\;\bf{U}\;\psi)$
@node Generalized Buchi automata, State spaces, LTL formulas, Definitions @node Generalized automata, State spaces, LTL formulas, Definitions
@appendixsec Generalized B@"uchi automata @appendixsec Generalized automata
@cindex B@"uchi automata, formal definition @cindex B@"uchi automata, formal definition
@cindex generalized B@"uchi automata, formal definition @cindex generalized B@"uchi automata, formal definition
@ -4375,7 +4366,7 @@ $2^{AP}$
with one initial state, labels on transitions and zero or more acceptance with one initial state, labels on transitions and zero or more acceptance
conditions. conditions.
@appendixsubsec Formal definition of generalized B@"uchi automata @appendixsubsec Formal definition of generalized automata
Formally, a generalized B@"uchi automaton can be represented as a tuple Formally, a generalized B@"uchi automaton can be represented as a tuple
@iftex @iftex
@ -4664,7 +4655,7 @@ of some states and then adjusting the transition labels appropriately.
@node State spaces, , Generalized Buchi automata, Definitions @node State spaces, , Generalized automata, Definitions
@appendixsec State spaces @appendixsec State spaces
@cindex state space, formal definition @cindex state space, formal definition
@ -4743,7 +4734,7 @@ propositions that hold in the state.
@printindex ky @printindex ky
@node Concept index, , User command index, Top @node Concept index, , User command index, Top
@unnumbered Concept index @unnumbered Concept index
@printindex cp @printindex cp

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -20,15 +20,11 @@
#ifndef BUCHIAUTOMATON_H #ifndef BUCHIAUTOMATON_H
#define BUCHIAUTOMATON_H #define BUCHIAUTOMATON_H
#ifdef __GNUC__
#pragma interface
#endif /* __GNUC__ */
#include <config.h> #include <config.h>
#include <iostream> #include <iostream>
#include <map> #include <map>
#include <string> #include <string>
#include "ObstackAlloc.h" #include "LbttAlloc.h"
#include "BitArray.h" #include "BitArray.h"
#include "EdgeContainer.h" #include "EdgeContainer.h"
#include "Exception.h" #include "Exception.h"

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -17,10 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#ifdef __GNUC__
#pragma implementation
#endif /* __GNUC__ */
#include <config.h> #include <config.h>
#include <cstdio> #include <cstdio>
#include <cstdlib> #include <cstdlib>
@ -97,7 +93,7 @@ const struct Configuration::IntegerRange Configuration::STATESPACE_SIZE_RANGE
const struct Configuration::IntegerRange const struct Configuration::IntegerRange
Configuration::STATESPACE_MAX_SIZE_RANGE Configuration::STATESPACE_MAX_SIZE_RANGE
= {1, LONG_MAX, "minimum state space size exceeds the maximum state space " = {1, LONG_MAX, "minimum state space size exceeds the maximum state space "
"size"}; "size"};
@ -312,7 +308,7 @@ void Configuration::read(int argc, char* argv[])
{ {
long int interval_length long int interval_length
= parseCommandLineInteger = parseCommandLineInteger
(command_line_options[option_index].name, optarg); (command_line_options[option_index].name, optarg);
checkIntegerRange(interval_length, GENERATION_RANGE, false); checkIntegerRange(interval_length, GENERATION_RANGE, false);
if (opttype == OPT_FORMULACHANGEINTERVAL) if (opttype == OPT_FORMULACHANGEINTERVAL)
@ -426,7 +422,7 @@ void Configuration::read(int argc, char* argv[])
{ {
long int number_of_rounds long int number_of_rounds
= parseCommandLineInteger = parseCommandLineInteger
(command_line_options[option_index].name, optarg); (command_line_options[option_index].name, optarg);
checkIntegerRange(number_of_rounds, ROUND_COUNT_RANGE, false); checkIntegerRange(number_of_rounds, ROUND_COUNT_RANGE, false);
global_options.number_of_rounds = number_of_rounds; global_options.number_of_rounds = number_of_rounds;
locked_options.insert(make_pair(CFG_GLOBALOPTIONS, CFG_ROUNDS)); locked_options.insert(make_pair(CFG_GLOBALOPTIONS, CFG_ROUNDS));
@ -446,7 +442,7 @@ void Configuration::read(int argc, char* argv[])
{ {
long int rounds_to_skip long int rounds_to_skip
= parseCommandLineInteger = parseCommandLineInteger
(command_line_options[option_index].name, optarg); (command_line_options[option_index].name, optarg);
checkIntegerRange(rounds_to_skip, ROUND_COUNT_RANGE, false); checkIntegerRange(rounds_to_skip, ROUND_COUNT_RANGE, false);
global_options.init_skip = rounds_to_skip; global_options.init_skip = rounds_to_skip;
} }
@ -465,7 +461,7 @@ void Configuration::read(int argc, char* argv[])
{ {
long int verbosity long int verbosity
= parseCommandLineInteger = parseCommandLineInteger
(command_line_options[option_index].name, optarg); (command_line_options[option_index].name, optarg);
checkIntegerRange(verbosity, VERBOSITY_RANGE, false); checkIntegerRange(verbosity, VERBOSITY_RANGE, false);
global_options.verbosity = verbosity; global_options.verbosity = verbosity;
locked_options.insert(make_pair(CFG_GLOBALOPTIONS, CFG_VERBOSITY)); locked_options.insert(make_pair(CFG_GLOBALOPTIONS, CFG_VERBOSITY));
@ -475,17 +471,17 @@ void Configuration::read(int argc, char* argv[])
case OPT_VERSION : case OPT_VERSION :
cout << "lbtt " PACKAGE_VERSION "\n" cout << "lbtt " PACKAGE_VERSION "\n"
"lbtt is free software; you may change and " "lbtt is free software; you may change and "
"redistribute it under the terms of\n" "redistribute it under the terms of\n"
"the GNU General Public License. lbtt comes with " "the GNU General Public License. lbtt comes with "
"NO WARRANTY. See the file\n" "NO WARRANTY. See the file\n"
"COPYING for details.\n"; "COPYING for details.\n";
exit(0); exit(0);
break; break;
case OPT_ABBREVIATEDOPERATORS : case OPT_ABBREVIATEDOPERATORS :
case OPT_NOABBREVIATEDOPERATORS : case OPT_NOABBREVIATEDOPERATORS :
formula_options.allow_abbreviated_operators formula_options.allow_abbreviated_operators
= (opttype == OPT_ABBREVIATEDOPERATORS); = (opttype == OPT_ABBREVIATEDOPERATORS);
locked_options.insert(make_pair(CFG_FORMULAOPTIONS, locked_options.insert(make_pair(CFG_FORMULAOPTIONS,
CFG_ABBREVIATEDOPERATORS)); CFG_ABBREVIATEDOPERATORS));
@ -512,7 +508,7 @@ void Configuration::read(int argc, char* argv[])
{ {
long int priority long int priority
= parseCommandLineInteger = parseCommandLineInteger
(command_line_options[option_index].name, optarg); (command_line_options[option_index].name, optarg);
checkIntegerRange(priority, PRIORITY_RANGE, false); checkIntegerRange(priority, PRIORITY_RANGE, false);
@ -546,7 +542,7 @@ void Configuration::read(int argc, char* argv[])
case OPT_FALSEPRIORITY : case OPT_FALSEPRIORITY :
symbol = ::Ltl::LTL_FALSE; symbol = ::Ltl::LTL_FALSE;
locked_options.insert(make_pair(CFG_FORMULAOPTIONS, locked_options.insert(make_pair(CFG_FORMULAOPTIONS,
CFG_FALSEPRIORITY)); CFG_FALSEPRIORITY));
break; break;
@ -664,7 +660,7 @@ void Configuration::read(int argc, char* argv[])
{ {
long int num_propositions long int num_propositions
= parseCommandLineInteger = parseCommandLineInteger
(command_line_options[option_index].name, optarg); (command_line_options[option_index].name, optarg);
checkIntegerRange(num_propositions, PROPOSITION_COUNT_RANGE, false); checkIntegerRange(num_propositions, PROPOSITION_COUNT_RANGE, false);
@ -710,7 +706,7 @@ void Configuration::read(int argc, char* argv[])
{ {
long int size long int size
= parseCommandLineInteger = parseCommandLineInteger
(command_line_options[option_index].name, value); (command_line_options[option_index].name, value);
checkIntegerRange(size, min_size_range, false); checkIntegerRange(size, min_size_range, false);
@ -840,15 +836,15 @@ void Configuration::read(int argc, char* argv[])
if (error) if (error)
throw ConfigurationException throw ConfigurationException
("", string("unrecognized argument (`") + optarg ("", string("unrecognized argument (`") + optarg
+ "') for option `--" + "') for option `--"
+ command_line_options[option_index].name + "'"); + command_line_options[option_index].name + "'");
} }
while (opttype != -1); while (opttype != -1);
if (optind != argc) if (optind != argc)
throw ConfigurationException throw ConfigurationException
("", string("unrecognized command line option `") ("", string("unrecognized command line option `")
+ argv[optind] + "'"); + argv[optind] + "'");
/* /*
* Read the configuration file. * Read the configuration file.
@ -857,8 +853,8 @@ void Configuration::read(int argc, char* argv[])
FILE* configuration_file = fopen(global_options.cfg_filename.c_str(), "r"); FILE* configuration_file = fopen(global_options.cfg_filename.c_str(), "r");
if (configuration_file == NULL) if (configuration_file == NULL)
throw ConfigurationException throw ConfigurationException
("", "error opening configuration file `" ("", "error opening configuration file `"
+ global_options.cfg_filename + "'"); + global_options.cfg_filename + "'");
try try
{ {
@ -903,7 +899,7 @@ void Configuration::read(int argc, char* argv[])
} }
for (set<unsigned long int, less<unsigned long int>, for (set<unsigned long int, less<unsigned long int>,
ALLOC(unsigned long int) >::const_iterator ALLOC(unsigned long int) >::const_iterator
id = algorithm_id_set.begin(); id = algorithm_id_set.begin();
id != algorithm_id_set.end(); id != algorithm_id_set.end();
++id) ++id)
@ -933,8 +929,8 @@ void Configuration::read(int argc, char* argv[])
if (global_options.number_of_rounds <= global_options.init_skip) if (global_options.number_of_rounds <= global_options.init_skip)
throw ConfigurationException throw ConfigurationException
("", "the argument for `--skip' must be less than the total " ("", "the argument for `--skip' must be less than the total "
"number of test rounds"); "number of test rounds");
/* /*
* Check that there is at least one algorithm available for use. * Check that there is at least one algorithm available for use.
@ -942,7 +938,7 @@ void Configuration::read(int argc, char* argv[])
if (algorithms.empty()) if (algorithms.empty())
throw ConfigurationException throw ConfigurationException
("", "no implementations defined in the configuration file"); ("", "no implementations defined in the configuration file");
/* /*
* The case where the number of available variables for propositional * The case where the number of available variables for propositional
@ -962,7 +958,7 @@ void Configuration::read(int argc, char* argv[])
&& formula_options.symbol_priority[::Ltl::LTL_TRUE] == 0 && formula_options.symbol_priority[::Ltl::LTL_TRUE] == 0
&& formula_options.symbol_priority[::Ltl::LTL_FALSE] == 0) && formula_options.symbol_priority[::Ltl::LTL_FALSE] == 0)
throw ConfigurationException("", "at least one atomic symbol must have " throw ConfigurationException("", "at least one atomic symbol must have "
"nonzero priority"); "nonzero priority");
/* /*
* If the operators ->, <->, xor, <>, [], W and M are disallowed, set their * If the operators ->, <->, xor, <>, [], W and M are disallowed, set their
@ -1000,12 +996,12 @@ void Configuration::read(int argc, char* argv[])
unary_operator_allowed = unary_operator_allowed =
(it->first == ::Ltl::LTL_NEGATION || it->first == ::Ltl::LTL_NEXT (it->first == ::Ltl::LTL_NEGATION || it->first == ::Ltl::LTL_NEXT
|| it->first == ::Ltl::LTL_FINALLY || it->first == ::Ltl::LTL_FINALLY
|| it->first == ::Ltl::LTL_GLOBALLY); || it->first == ::Ltl::LTL_GLOBALLY);
} }
if (!unary_operator_allowed) if (!unary_operator_allowed)
throw ConfigurationException("", "at least one unary operator must have " throw ConfigurationException("", "at least one unary operator must have "
"a nonzero priority"); "a nonzero priority");
/* /*
* Initialize the random formula generator with priorities for the LTL * Initialize the random formula generator with priorities for the LTL
@ -1024,49 +1020,49 @@ void Configuration::read(int argc, char* argv[])
{ {
switch (it->first) switch (it->first)
{ {
case ::Ltl::LTL_ATOM : case ::Ltl::LTL_ATOM :
case ::Ltl::LTL_TRUE : case ::Ltl::LTL_TRUE :
case ::Ltl::LTL_FALSE : case ::Ltl::LTL_FALSE :
formula_options.formula_generator.useSymbol(it->first, it->second); formula_options.formula_generator.useSymbol(it->first, it->second);
break; break;
case ::Ltl::LTL_NEGATION : case ::Ltl::LTL_NEGATION :
formula_options.formula_generator.useShortOperator formula_options.formula_generator.useShortOperator
(it->first, it->second); (it->first, it->second);
total_short_unary_priority += it->second; total_short_unary_priority += it->second;
if (formula_options.generate_mode != NNF) if (formula_options.generate_mode != NNF)
{ {
formula_options.formula_generator.useLongOperator formula_options.formula_generator.useLongOperator
(it->first, it->second); (it->first, it->second);
total_long_unary_priority += it->second; total_long_unary_priority += it->second;
} }
break; break;
case ::Ltl::LTL_NEXT : case ::Ltl::LTL_NEXT :
case ::Ltl::LTL_FINALLY : case ::Ltl::LTL_FINALLY :
case ::Ltl::LTL_GLOBALLY : case ::Ltl::LTL_GLOBALLY :
formula_options.formula_generator.useShortOperator formula_options.formula_generator.useShortOperator
(it->first, it->second); (it->first, it->second);
total_short_unary_priority += it->second; total_short_unary_priority += it->second;
formula_options.formula_generator.useLongOperator formula_options.formula_generator.useLongOperator
(it->first, it->second); (it->first, it->second);
total_long_unary_priority += it->second; total_long_unary_priority += it->second;
break; break;
case ::Ltl::LTL_CONJUNCTION : case ::Ltl::LTL_CONJUNCTION :
case ::Ltl::LTL_DISJUNCTION : case ::Ltl::LTL_DISJUNCTION :
case ::Ltl::LTL_IMPLICATION : case ::Ltl::LTL_IMPLICATION :
case ::Ltl::LTL_EQUIVALENCE : case ::Ltl::LTL_EQUIVALENCE :
case ::Ltl::LTL_XOR : case ::Ltl::LTL_XOR :
case ::Ltl::LTL_UNTIL : case ::Ltl::LTL_UNTIL :
case ::Ltl::LTL_V : case ::Ltl::LTL_V :
case ::Ltl::LTL_WEAK_UNTIL : case ::Ltl::LTL_WEAK_UNTIL :
case ::Ltl::LTL_STRONG_RELEASE : case ::Ltl::LTL_STRONG_RELEASE :
case ::Ltl::LTL_BEFORE : case ::Ltl::LTL_BEFORE :
formula_options.formula_generator.useLongOperator formula_options.formula_generator.useLongOperator
(it->first, it->second); (it->first, it->second);
total_binary_priority += it->second; total_binary_priority += it->second;
break; break;
} }
} }
} }
@ -1091,9 +1087,9 @@ void Configuration::read(int argc, char* argv[])
++op) ++op)
{ {
if (op->second > 0) if (op->second > 0)
{ {
switch (op->first) switch (op->first)
{ {
case ::Ltl::LTL_ATOM : case ::Ltl::LTL_ATOM :
case ::Ltl::LTL_TRUE : case ::Ltl::LTL_TRUE :
case ::Ltl::LTL_FALSE : case ::Ltl::LTL_FALSE :
@ -1106,18 +1102,18 @@ void Configuration::read(int argc, char* argv[])
= formula_options.formula_generator.size; = formula_options.formula_generator.size;
s <= formula_options.formula_generator.max_size; s <= formula_options.formula_generator.max_size;
s++) s++)
{ {
if (k >= s) if (k >= s)
continue; continue;
probability += operatorProbability probability += operatorProbability
(op->first, k, s, (op->first, k, s,
total_short_unary_priority, total_short_unary_priority,
total_long_unary_priority, total_long_unary_priority,
total_binary_priority, total_binary_priority,
result_cache); result_cache);
} }
probability /= static_cast<double> probability /= static_cast<double>
(formula_options.formula_generator.max_size (formula_options.formula_generator.max_size
- formula_options.formula_generator.size - formula_options.formula_generator.size
+ 1); + 1);
@ -1158,18 +1154,18 @@ void Configuration::print(ostream& stream, int indent) const
Exceptional_ostream estream(&stream, ios::badbit | ios::failbit); Exceptional_ostream estream(&stream, ios::badbit | ios::failbit);
estream << string(indent, ' ') + "Program configuration:\n" estream << string(indent, ' ') + "Program configuration:\n"
+ string(indent, ' ') + string(22, '-') + "\n\n" + string(indent, ' ') + string(22, '-') + "\n\n"
+ string(indent + 2, ' ') + string(indent + 2, ' ')
+ toString(global_options.number_of_rounds) + toString(global_options.number_of_rounds)
+ " test round" + " test round"
+ (global_options.number_of_rounds > 1 ? "s" : ""); + (global_options.number_of_rounds > 1 ? "s" : "");
if (global_options.init_skip > 0) if (global_options.init_skip > 0)
estream << " (of which the first " estream << " (of which the first "
+ (global_options.init_skip > 1 + (global_options.init_skip > 1
? toString(global_options.init_skip) + " rounds " ? toString(global_options.init_skip) + " rounds "
: string("")) : string(""))
+ "will be skipped)"; + "will be skipped)";
estream << ".\n" + string(indent + 2, ' '); estream << ".\n" + string(indent + 2, ' ');
@ -1181,14 +1177,14 @@ void Configuration::print(ostream& stream, int indent) const
estream << "Running in batch mode.\n"; estream << "Running in batch mode.\n";
estream << string(indent + 2, ' ') estream << string(indent + 2, ' ')
+ "Using " + "Using "
+ (global_options.product_mode == GLOBAL + (global_options.product_mode == GLOBAL
? "global" : "local") ? "global" : "local")
+ " model checking for tests.\n"; + " model checking for tests.\n";
if (!global_options.transcript_filename.empty()) if (!global_options.transcript_filename.empty())
estream << string(indent + 2, ' ') + "Writing error log to `" estream << string(indent + 2, ' ') + "Writing error log to `"
+ global_options.transcript_filename + "'.\n"; + global_options.transcript_filename + "'.\n";
estream << '\n' + string(indent + 2, ' ') + "Implementations:\n"; estream << '\n' + string(indent + 2, ' ') + "Implementations:\n";
@ -1218,19 +1214,19 @@ void Configuration::print(ostream& stream, int indent) const
estream << "Enabled tests:\n"; estream << "Enabled tests:\n";
if (global_options.do_comp_test) if (global_options.do_comp_test)
estream << string(indent + 4, ' ') + estream << string(indent + 4, ' ') +
"Model checking result cross-comparison test\n"; "Model checking result cross-comparison test\n";
if (global_options.do_cons_test) if (global_options.do_cons_test)
estream << string(indent + 4, ' ') + estream << string(indent + 4, ' ') +
"Model checking result consistency check\n"; "Model checking result consistency check\n";
if (global_options.do_intr_test) if (global_options.do_intr_test)
estream << string(indent + 4, ' ') + estream << string(indent + 4, ' ') +
"Büchi automata intersection emptiness check\n"; "Büchi automata intersection emptiness check\n";
} }
else else
estream << "All automata correctness tests disabled.\n"; estream << "All automata correctness tests disabled.\n";
estream << '\n' + string(indent + 2, ' ') + "Random state spaces:\n" estream << '\n' + string(indent + 2, ' ') + "Random state spaces:\n"
+ string(indent + 4, ' '); + string(indent + 4, ' ');
switch (global_options.statespace_generation_mode) switch (global_options.statespace_generation_mode)
{ {
@ -1257,15 +1253,15 @@ void Configuration::print(ostream& stream, int indent) const
estream << "..." + toString(statespace_generator.max_size); estream << "..." + toString(statespace_generator.max_size);
estream << string(" state") estream << string(" state")
+ (statespace_generator.max_size == 1 ? "" : "s") + ", " + (statespace_generator.max_size == 1 ? "" : "s") + ", "
+ toString(statespace_generator.atoms_per_state) + toString(statespace_generator.atoms_per_state)
+ " atomic proposition" + " atomic proposition"
+ (statespace_generator.atoms_per_state == 1 ? "" : "s") + (statespace_generator.atoms_per_state == 1 ? "" : "s")
+ ")\n" + string(indent + 4, ' '); + ")\n" + string(indent + 4, ' ');
if (global_options.statespace_change_interval == 0 if (global_options.statespace_change_interval == 0
|| global_options.statespace_change_interval || global_options.statespace_change_interval
>= global_options.number_of_rounds) >= global_options.number_of_rounds)
estream << "Using a fixed state space.\n" + string(indent + 4, ' '); estream << "Using a fixed state space.\n" + string(indent + 4, ' ');
else else
{ {
@ -1297,16 +1293,16 @@ void Configuration::print(ostream& stream, int indent) const
if (global_options.statespace_generation_mode != ENUMERATEDPATH) if (global_options.statespace_generation_mode != ENUMERATEDPATH)
{ {
estream << "Random seed: " estream << "Random seed: "
+ toString(global_options.statespace_random_seed) + toString(global_options.statespace_random_seed)
+ '\n' + string(indent + 4, ' '); + '\n' + string(indent + 4, ' ');
if (global_options.statespace_generation_mode & GRAPH) if (global_options.statespace_generation_mode & GRAPH)
estream << "Random edge probability: " estream << "Random edge probability: "
+ toString(statespace_generator.edge_probability) + toString(statespace_generator.edge_probability)
+ '\n' + string(indent + 4, ' '); + '\n' + string(indent + 4, ' ');
estream << "Propositional truth probability: " estream << "Propositional truth probability: "
+ toString(statespace_generator.truth_probability) + toString(statespace_generator.truth_probability)
+ "\n"; + "\n";
} }
@ -1315,32 +1311,32 @@ void Configuration::print(ostream& stream, int indent) const
if (global_options.formula_input_filename.empty()) if (global_options.formula_input_filename.empty())
{ {
estream << "Random LTL formulas:\n" + string(indent + 4, ' ') estream << "Random LTL formulas:\n" + string(indent + 4, ' ')
+ toString(formula_options.formula_generator.size); + toString(formula_options.formula_generator.size);
if (formula_options.formula_generator.max_size if (formula_options.formula_generator.max_size
!= formula_options.formula_generator.size) != formula_options.formula_generator.size)
estream << "..." estream << "..."
+ toString(formula_options.formula_generator.max_size); + toString(formula_options.formula_generator.max_size);
estream << string(" parse tree node") estream << string(" parse tree node")
+ (formula_options.formula_generator.max_size == 1 ? "" : "s") + (formula_options.formula_generator.max_size == 1 ? "" : "s")
+ ", " + ", "
+ toString(formula_options.formula_generator. + toString(formula_options.formula_generator.
number_of_available_variables) number_of_available_variables)
+ " atomic proposition" + " atomic proposition"
+ (formula_options.formula_generator. + (formula_options.formula_generator.
number_of_available_variables == 1 ? "" : "s"); number_of_available_variables == 1 ? "" : "s");
} }
else else
estream << "Reading LTL formulas from `" estream << "Reading LTL formulas from `"
+ global_options.formula_input_filename + global_options.formula_input_filename
+ "'."; + "'.";
estream << '\n' + string(indent + 4, ' '); estream << '\n' + string(indent + 4, ' ');
if (global_options.formula_change_interval == 0 if (global_options.formula_change_interval == 0
|| global_options.formula_change_interval || global_options.formula_change_interval
>= global_options.number_of_rounds) >= global_options.number_of_rounds)
estream << "Using a fixed LTL formula."; estream << "Using a fixed LTL formula.";
else else
{ {
@ -1357,7 +1353,7 @@ void Configuration::print(ostream& stream, int indent) const
|| global_options.formula_change_interval % 100 >= 20) || global_options.formula_change_interval % 100 >= 20)
{ {
switch (global_options.formula_change_interval % 10) switch (global_options.formula_change_interval % 10)
{ {
case 1 : estream << "st"; break; case 1 : estream << "st"; break;
case 2 : estream << "nd"; break; case 2 : estream << "nd"; break;
case 3 : estream << "rd"; break; case 3 : estream << "rd"; break;
@ -1378,18 +1374,18 @@ void Configuration::print(ostream& stream, int indent) const
if (global_options.formula_input_filename.empty() if (global_options.formula_input_filename.empty()
&& formula_options.generate_mode == NNF) && formula_options.generate_mode == NNF)
estream << string(indent + 4, ' ') estream << string(indent + 4, ' ')
+ "Formulas will be generated into negation normal form.\n"; + "Formulas will be generated into negation normal form.\n";
else if (formula_options.output_mode == NNF) else if (formula_options.output_mode == NNF)
estream << string(indent + 4, ' ') estream << string(indent + 4, ' ')
+ "Formulas will be converted into negation normal form.\n"; + "Formulas will be converted into negation normal form.\n";
if (global_options.formula_input_filename.empty()) if (global_options.formula_input_filename.empty())
{ {
estream << string(indent + 4, ' ') + "Random seed: " estream << string(indent + 4, ' ') + "Random seed: "
+ toString(global_options.formula_random_seed) + toString(global_options.formula_random_seed)
+ '\n' + string(indent + 4, ' ') + '\n' + string(indent + 4, ' ')
+ "Atomic symbols in use (priority):\n" + "Atomic symbols in use (priority):\n"
+ string(indent + 6, ' '); + string(indent + 6, ' ');
bool first_printed = false; bool first_printed = false;
@ -1410,13 +1406,13 @@ void Configuration::print(ostream& stream, int indent) const
switch (op->first) switch (op->first)
{ {
case ::Ltl::LTL_ATOM : case ::Ltl::LTL_ATOM :
estream << "propositions"; estream << "propositions";
break; break;
case ::Ltl::LTL_TRUE : case ::Ltl::LTL_FALSE : case ::Ltl::LTL_TRUE : case ::Ltl::LTL_FALSE :
estream << ::Ltl::infixSymbol(op->first); estream << ::Ltl::infixSymbol(op->first);
break; break;
default : default :
break; break;
} }
@ -1425,7 +1421,7 @@ void Configuration::print(ostream& stream, int indent) const
estream << '\n' estream << '\n'
<< string(indent + 4, ' ') << string(indent + 4, ' ')
+ "Operators used for random LTL formula generation:"; + "Operators used for random LTL formula generation:";
string operator_name_string; string operator_name_string;
string operator_priority_string; string operator_priority_string;
@ -1452,7 +1448,7 @@ void Configuration::print(ostream& stream, int indent) const
{ {
operator_name_string = string(11, ' ') + operator_name_string; operator_name_string = string(11, ' ') + operator_name_string;
operator_priority_string = string(11, ' ') operator_priority_string = string(11, ' ')
+ operator_priority_string; + operator_priority_string;
operator_distribution_string operator_distribution_string
= string(indent + 6, ' ') + "occurrences/formula "; = string(indent + 6, ' ') + "occurrences/formula ";
} }
@ -1478,7 +1474,7 @@ void Configuration::print(ostream& stream, int indent) const
== max_operators_per_line - 1) == max_operators_per_line - 1)
{ {
estream << '\n' + operator_name_string + '\n' estream << '\n' + operator_name_string + '\n'
+ operator_priority_string + '\n'; + operator_priority_string + '\n';
if (!formula_options.symbol_distribution.empty()) if (!formula_options.symbol_distribution.empty())
estream << operator_distribution_string + '\n'; estream << operator_distribution_string + '\n';
@ -1498,7 +1494,7 @@ void Configuration::print(ostream& stream, int indent) const
if (number_of_operators_printed % max_operators_per_line != 0) if (number_of_operators_printed % max_operators_per_line != 0)
{ {
estream << '\n' + operator_name_string + '\n' + operator_priority_string estream << '\n' + operator_name_string + '\n' + operator_priority_string
+ '\n'; + '\n';
if (!formula_options.symbol_distribution.empty()) if (!formula_options.symbol_distribution.empty())
estream << operator_distribution_string + '\n'; estream << operator_distribution_string + '\n';
@ -1512,7 +1508,7 @@ void Configuration::print(ostream& stream, int indent) const
/* ========================================================================= */ /* ========================================================================= */
string Configuration::algorithmString string Configuration::algorithmString
(vector<Configuration::AlgorithmInformation, (vector<Configuration::AlgorithmInformation,
ALLOC(Configuration::AlgorithmInformation) >::size_type ALLOC(Configuration::AlgorithmInformation) >::size_type
algorithm_id) const algorithm_id) const
/* ---------------------------------------------------------------------------- /* ----------------------------------------------------------------------------
* *
@ -1528,7 +1524,7 @@ string Configuration::algorithmString
using namespace ::StringUtil; using namespace ::StringUtil;
return toString(algorithm_id) + ": `" + *(algorithms[algorithm_id].name) return toString(algorithm_id) + ": `" + *(algorithms[algorithm_id].name)
+ '\''; + '\'';
} }
/* ========================================================================= */ /* ========================================================================= */
@ -1544,184 +1540,184 @@ void Configuration::showCommandLineHelp(const char* program_name)
* ------------------------------------------------------------------------- */ * ------------------------------------------------------------------------- */
{ {
cout << string("Usage: ") + program_name cout << string("Usage: ") + program_name
+ " [OPTION]...\n\nGeneral options:\n" + " [OPTION]...\n\nGeneral options:\n"
" --[no]comparisontest Enable or disable the model " " --[no]comparisontest Enable or disable the model "
"checking result\n" "checking result\n"
" cross-comparison test\n" " cross-comparison test\n"
" --configfile=FILE Read configuration from FILE\n" " --configfile=FILE Read configuration from FILE\n"
" --[no]consistencytest Enable or disable the model " " --[no]consistencytest Enable or disable the model "
"checking result\n" "checking result\n"
" consistency test\n" " consistency test\n"
" --disable=IMPLEMENTATION-ID[,IMPLEMENTATION-ID...]\n" " --disable=IMPLEMENTATION-ID[,IMPLEMENTATION-ID...]\n"
" Exclude implementation(s) from " " Exclude implementation(s) from "
"tests\n" "tests\n"
" --enable=IMPLEMENTATION-ID[,IMPLEMENTATION-ID,...]\n" " --enable=IMPLEMENTATION-ID[,IMPLEMENTATION-ID,...]\n"
" Include implementation(s) into " " Include implementation(s) into "
"tests\n" "tests\n"
" --formulafile=FILE Read LTL formulas from FILE\n" " --formulafile=FILE Read LTL formulas from FILE\n"
" --globalmodelcheck Use global model checking in " " --globalmodelcheck Use global model checking in "
"tests\n" "tests\n"
" (equivalent to " " (equivalent to "
"`--modelcheck=global')\n" "`--modelcheck=global')\n"
" -h, --help Show this help and exit\n" " -h, --help Show this help and exit\n"
" --interactive=MODE Set the interactivity mode " " --interactive=MODE Set the interactivity mode "
"(`always', `onerror', \n" "(`always', `onerror', \n"
" `never')\n" " `never')\n"
" --[no]intersectiontest Enable or disable the Büchi " " --[no]intersectiontest Enable or disable the Büchi "
"automata\n" "automata\n"
" intersection emptiness test\n" " intersection emptiness test\n"
" --localmodelcheck Use local model checking in tests" " --localmodelcheck Use local model checking in tests"
"\n" "\n"
" (equivalent to " " (equivalent to "
"`--modelcheck=local')\n" "`--modelcheck=local')\n"
" --logfile=FILE Write error log to FILE\n" " --logfile=FILE Write error log to FILE\n"
" --modelcheck=MODE Set model checking mode " " --modelcheck=MODE Set model checking mode "
"(`global' or `local')\n" "(`global' or `local')\n"
" --nopause Do not pause between test rounds " " --nopause Do not pause between test rounds "
"(equivalent to\n" "(equivalent to\n"
" `--interactive=never')\n" " `--interactive=never')\n"
" --pause Pause unconditionally after every " " --pause Pause unconditionally after every "
"test round\n" "test round\n"
" (equivalent to " " (equivalent to "
"`--interactive=always')\n" "`--interactive=always')\n"
" --pauseonerror Pause between test rounds only in " " --pauseonerror Pause between test rounds only in "
"case of an\n" "case of an\n"
" error (equivalent to " " error (equivalent to "
"`--interactive=onerror')\n" "`--interactive=onerror')\n"
" --profile Disable all automata correctness " " --profile Disable all automata correctness "
"tests\n" "tests\n"
" --quiet, --silent Run all tests silently without " " --quiet, --silent Run all tests silently without "
"interruption\n" "interruption\n"
" --rounds=NUMBER-OF-ROUNDS Set number of test rounds (1-)\n" " --rounds=NUMBER-OF-ROUNDS Set number of test rounds (1-)\n"
" --showconfig Display current configuration and " " --showconfig Display current configuration and "
"exit\n" "exit\n"
" --showoperatordistribution Display probability distribution " " --showoperatordistribution Display probability distribution "
"for LTL formula\n" "for LTL formula\n"
" operators\n" " operators\n"
" --skip=NUMBER-OF-ROUNDS Set number of test rounds to skip " " --skip=NUMBER-OF-ROUNDS Set number of test rounds to skip "
"before\n" "before\n"
" starting tests\n" " starting tests\n"
" --verbosity=INTEGER Set the verbosity of output (0-5)\n" " --verbosity=INTEGER Set the verbosity of output (0-5)\n"
" --version Display program version and exit" " --version Display program version and exit"
"\n\n" "\n\n"
"LTL formula generation options:\n" "LTL formula generation options:\n"
" --[no]abbreviatedoperators Allow or disallow operators ->, " " --[no]abbreviatedoperators Allow or disallow operators ->, "
"<->, xor, <>,\n" "<->, xor, <>,\n"
" [], u, w in the generated " " [], u, w in the generated "
"formulas\n" "formulas\n"
" --andpriority=INTEGER Set priority for the /\\ operator\n" " --andpriority=INTEGER Set priority for the /\\ operator\n"
" --beforepriority=INTEGER Set priority for the Before " " --beforepriority=INTEGER Set priority for the Before "
"operator\n" "operator\n"
" --defaultoperatorpriority=INTEGER\n" " --defaultoperatorpriority=INTEGER\n"
" Set default priority for operators" " Set default priority for operators"
"\n" "\n"
" --equivalencepriority=INTEGER\n" " --equivalencepriority=INTEGER\n"
" Set priority for the <-> operator\n" " Set priority for the <-> operator\n"
" --falsepriority=INTEGER Set priority for the constant " " --falsepriority=INTEGER Set priority for the constant "
"`false'\n" "`false'\n"
" --finallypriority=INTEGER Set priority for the <> operator\n" " --finallypriority=INTEGER Set priority for the <> operator\n"
" --formulachangeinterval=NUMBER-OF-ROUNDS\n" " --formulachangeinterval=NUMBER-OF-ROUNDS\n"
" Set formula generation interval in " " Set formula generation interval in "
"test rounds\n" "test rounds\n"
" (0-)\n" " (0-)\n"
" --formulageneratemode=MODE Set formula generation mode " " --formulageneratemode=MODE Set formula generation mode "
"(`normal', `nnf')\n" "(`normal', `nnf')\n"
" --formulaoutputmode=MODE Set formula output mode (`normal', " " --formulaoutputmode=MODE Set formula output mode (`normal', "
"`nnf')\n" "`nnf')\n"
" --formulapropositions=NUMBER-OF-PROPOSITIONS\n" " --formulapropositions=NUMBER-OF-PROPOSITIONS\n"
" Set maximum number of atomic " " Set maximum number of atomic "
"propositions in\n" "propositions in\n"
" generated formulas (0-)\n" " generated formulas (0-)\n"
" --formularandomseed=INTEGER Set random seed for the formula " " --formularandomseed=INTEGER Set random seed for the formula "
"generation\n" "generation\n"
" algorithm\n" " algorithm\n"
" --formulasize=SIZE,\n" " --formulasize=SIZE,\n"
" --formulasize=MIN-SIZE...MAX-SIZE\n" " --formulasize=MIN-SIZE...MAX-SIZE\n"
" Set size of random LTL formulas " " Set size of random LTL formulas "
"(1-)\n" "(1-)\n"
" --[no]generatennf Force or prevent generating LTL " " --[no]generatennf Force or prevent generating LTL "
"formulas in\n" "formulas in\n"
" negation normal form\n" " negation normal form\n"
" --globallypriority=INTEGER Set priority for the [] operator\n" " --globallypriority=INTEGER Set priority for the [] operator\n"
" --implicationpriority=INTEGER\n" " --implicationpriority=INTEGER\n"
" Set priority for the -> operator\n" " Set priority for the -> operator\n"
" --nextpriority=INTEGER Set priority for the Next operator" " --nextpriority=INTEGER Set priority for the Next operator"
"\n" "\n"
" --notpriority=INTEGER Set priority for the negation " " --notpriority=INTEGER Set priority for the negation "
"operator\n" "operator\n"
" --orpriority=INTEGER Set priority for the \\/ operator\n" " --orpriority=INTEGER Set priority for the \\/ operator\n"
" --[no]outputnnf Enable or disable formula " " --[no]outputnnf Enable or disable formula "
"translation to\n" "translation to\n"
" negation normal form before " " negation normal form before "
"invoking the\n" "invoking the\n"
" translators\n" " translators\n"
" --propositionpriority=INTEGER\n" " --propositionpriority=INTEGER\n"
" Set priority for atomic " " Set priority for atomic "
"propositions\n" "propositions\n"
" --releasepriority=INTEGER Set priority for the (Weak) Release" " --releasepriority=INTEGER Set priority for the (Weak) Release"
" operator\n" " operator\n"
" --strongreleasepriority=INTEGER\n" " --strongreleasepriority=INTEGER\n"
" Set priority for the Strong " " Set priority for the Strong "
"Release operator\n" "Release operator\n"
" --truepriority=INTEGER Set priority for the constant " " --truepriority=INTEGER Set priority for the constant "
"`true'\n" "`true'\n"
" --untilpriority=INTEGER Set priority for the (Strong) Until" " --untilpriority=INTEGER Set priority for the (Strong) Until"
" operator\n" " operator\n"
" --weakuntilpriority=INTEGER\n" " --weakuntilpriority=INTEGER\n"
" Set priority for the Weak Until " " Set priority for the Weak Until "
"operator\n" "operator\n"
" --xorpriority=INTEGER Set priority for the xor " " --xorpriority=INTEGER Set priority for the xor "
"operator\n\n" "operator\n\n"
"State space generation options:\n" "State space generation options:\n"
" --edgeprobability=PROBABILITY\n" " --edgeprobability=PROBABILITY\n"
" Set random edge probability for " " Set random edge probability for "
"state spaces\n" "state spaces\n"
" (0.0--1.0)\n" " (0.0--1.0)\n"
" --enumeratedpath Enumerate all paths of a given " " --enumeratedpath Enumerate all paths of a given "
"size and a given\n" "size and a given\n"
" number of propositions per state " " number of propositions per state "
"(equivalent to\n" "(equivalent to\n"
" `--statespacegeneratemode=" " `--statespacegeneratemode="
"enumeratedpath')\n" "enumeratedpath')\n"
" --randomconnectedgraph Generate connected graphs as state " " --randomconnectedgraph Generate connected graphs as state "
"spaces\n" "spaces\n"
" (equivalent to\n" " (equivalent to\n"
" `--statespacegeneratemode=" " `--statespacegeneratemode="
"randomconnectedgraph')\n" "randomconnectedgraph')\n"
" --randomgraph Generate random graphs as state " " --randomgraph Generate random graphs as state "
"spaces\n" "spaces\n"
" (equivalent to\n" " (equivalent to\n"
" `--statespacegeneratemode=" " `--statespacegeneratemode="
"randomgraph')\n" "randomgraph')\n"
" --randompath Generate random paths as state " " --randompath Generate random paths as state "
"spaces\n" "spaces\n"
" (equivalent to\n" " (equivalent to\n"
" `--statespacegeneratemode=" " `--statespacegeneratemode="
"randompath')\n" "randompath')\n"
" --statespacechangeinterval=NUMBER-OF-ROUNDS\n" " --statespacechangeinterval=NUMBER-OF-ROUNDS\n"
" Set state space generation " " Set state space generation "
"interval in test\n" "interval in test\n"
" rounds (0-)\n" " rounds (0-)\n"
" --statespacegeneratemode=MODE\n" " --statespacegeneratemode=MODE\n"
" Set state space generation mode\n" " Set state space generation mode\n"
" (`randomconnectedgraph', " " (`randomconnectedgraph', "
"`randomgraph',\n" "`randomgraph',\n"
" `randompath', `enumeratedpath')\n" " `randompath', `enumeratedpath')\n"
" --statespacepropositions=NUMBER-OF-PROPOSITIONS\n" " --statespacepropositions=NUMBER-OF-PROPOSITIONS\n"
" Set number of propositions per " " Set number of propositions per "
"state (0-)\n" "state (0-)\n"
" --statespacerandomseed=INTEGER\n" " --statespacerandomseed=INTEGER\n"
" Set random seed for the state " " Set random seed for the state "
"space generation\n" "space generation\n"
" algorithm\n" " algorithm\n"
" --statespacesize=SIZE,\n" " --statespacesize=SIZE,\n"
" --statespacesize=MIN-SIZE...MAX-SIZE\n" " --statespacesize=MIN-SIZE...MAX-SIZE\n"
" Set size of generated state spaces " " Set size of generated state spaces "
"(1-)\n" "(1-)\n"
" --truthprobability=PROBABILITY\n" " --truthprobability=PROBABILITY\n"
" Set truth probability of " " Set truth probability of "
"propositions (0.0--1.0)\n\n" "propositions (0.0--1.0)\n\n"
"Report bugs to <heikki.tauriainen@hut.fi>.\n"; "Report bugs to <heikki.tauriainen@hut.fi>.\n";
} }
/* ========================================================================= */ /* ========================================================================= */
@ -1809,12 +1805,12 @@ long int Configuration::parseCommandLineInteger
if (*endptr != '\0' || value.empty()) if (*endptr != '\0' || value.empty())
throw ConfigurationException throw ConfigurationException
("", "the argument for `--" + option + "' must be a nonnegative " ("", "the argument for `--" + option + "' must be a nonnegative "
"integer"); "integer");
if (val == LONG_MIN || val == LONG_MAX) if (val == LONG_MIN || val == LONG_MAX)
throw ConfigurationException throw ConfigurationException
("", "the argument for `--" + option + "' is out of range"); ("", "the argument for `--" + option + "' is out of range");
return val; return val;
} }
@ -1899,7 +1895,7 @@ double Configuration::operatorProbability
{ {
if (arity == 1 && total_short_unary_priority > 0) if (arity == 1 && total_short_unary_priority > 0)
result = static_cast<double>(priority) result = static_cast<double>(priority)
/ static_cast<double>(total_short_unary_priority); / static_cast<double>(total_short_unary_priority);
else else
result = 0.0; result = 0.0;
} }
@ -1931,7 +1927,7 @@ double Configuration::operatorProbability
total_long_unary_priority, total_long_unary_priority,
total_binary_priority, total_binary_priority,
result_cache) result_cache)
* operatorProbability(op, k - i, n - m - 1, * operatorProbability(op, k - i, n - m - 1,
total_short_unary_priority, total_short_unary_priority,
total_long_unary_priority, total_long_unary_priority,
total_binary_priority, total_binary_priority,
@ -1946,7 +1942,7 @@ double Configuration::operatorProbability
if (op != ::Ltl::LTL_NEGATION || formula_options.generate_mode != NNF) if (op != ::Ltl::LTL_NEGATION || formula_options.generate_mode != NNF)
result += static_cast<double>(priority) result += static_cast<double>(priority)
* operatorProbability(op, k - 1, n - 1, * operatorProbability(op, k - 1, n - 1,
total_short_unary_priority, total_short_unary_priority,
total_long_unary_priority, total_long_unary_priority,
total_binary_priority, total_binary_priority,
@ -1965,7 +1961,7 @@ double Configuration::operatorProbability
total_long_unary_priority, total_long_unary_priority,
total_binary_priority, total_binary_priority,
result_cache) result_cache)
* operatorProbability(op, k - 1 - i, n - m - 1, * operatorProbability(op, k - 1 - i, n - m - 1,
total_short_unary_priority, total_short_unary_priority,
total_long_unary_priority, total_long_unary_priority,
total_binary_priority, total_binary_priority,
@ -1976,7 +1972,7 @@ double Configuration::operatorProbability
} }
result += static_cast<double>(p1) result += static_cast<double>(p1)
* operatorProbability(op, k, n - 1, * operatorProbability(op, k, n - 1,
total_short_unary_priority, total_short_unary_priority,
total_long_unary_priority, total_long_unary_priority,
total_binary_priority, total_binary_priority,

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -20,10 +20,6 @@
#ifndef CONFIGURATION_H #ifndef CONFIGURATION_H
#define CONFIGURATION_H #define CONFIGURATION_H
#ifdef __GNUC__
#pragma interface
#endif /* __GNUC__ */
#include <config.h> #include <config.h>
#include <iostream> #include <iostream>
#include <map> #include <map>
@ -31,7 +27,7 @@
#include <string> #include <string>
#include <utility> #include <utility>
#include <vector> #include <vector>
#include "ObstackAlloc.h" #include "LbttAlloc.h"
#include "Exception.h" #include "Exception.h"
#include "FormulaRandomizer.h" #include "FormulaRandomizer.h"
#include "StateSpaceRandomizer.h" #include "StateSpaceRandomizer.h"
@ -55,22 +51,22 @@ public:
~Configuration(); /* Destructor. */ ~Configuration(); /* Destructor. */
void read(int argc, char* argv[]); /* Reads the program void read(int argc, char* argv[]); /* Reads the program
* configuration. * configuration.
*/ */
void print /* Writes the current */ void print /* Writes the current */
(ostream& stream = cout, int indent = 0) const; /* configuration (in a (ostream& stream = cout, int indent = 0) const; /* configuration (in a
* textual form) to a * textual form) to a
* stream. * stream.
*/ */
struct AlgorithmInformation; /* See below. */ struct AlgorithmInformation; /* See below. */
string algorithmString /* Formats the the id */ string algorithmString /* Formats the the id */
(vector<AlgorithmInformation, /* of an algorithm and */ (vector<AlgorithmInformation, /* of an algorithm and */
ALLOC(AlgorithmInformation) >::size_type/* the name of the */ ALLOC(AlgorithmInformation) >::size_type/* the name of the */
algorithm_id) const; /* algorithm into a algorithm_id) const; /* algorithm into a
* string. * string.
*/ */
static void showCommandLineHelp /* Prints the list of */ static void showCommandLineHelp /* Prints the list of */
@ -79,52 +75,52 @@ public:
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
enum InteractionMode {NEVER, ALWAYS, ONERROR}; /* Enumeration constants enum InteractionMode {NEVER, ALWAYS, ONERROR}; /* Enumeration constants
* affecting the behaviour * affecting the behaviour
* of the program as * of the program as
* regards user control. * regards user control.
*/ */
enum FormulaMode {NORMAL, NNF}; /* Enumeration constants enum FormulaMode {NORMAL, NNF}; /* Enumeration constants
* affecting the generation * affecting the generation
* and output of random * and output of random
* formulae. * formulae.
*/ */
enum StateSpaceMode {RANDOMGRAPH = 1, /* Enumeration constants */ enum StateSpaceMode {RANDOMGRAPH = 1, /* Enumeration constants */
RANDOMCONNECTEDGRAPH = 2, /* affecting the */ RANDOMCONNECTEDGRAPH = 2, /* affecting the */
GRAPH = 3, /* generation of random */ GRAPH = 3, /* generation of random */
RANDOMPATH = 4, /* state spaces. */ RANDOMPATH = 4, /* state spaces. */
ENUMERATEDPATH = 8, ENUMERATEDPATH = 8,
PATH = 12}; PATH = 12};
enum ProductMode {LOCAL, GLOBAL}; /* Enumeration constants enum ProductMode {LOCAL, GLOBAL}; /* Enumeration constants
* for controlling the * for controlling the
* scope of synchronous * scope of synchronous
* products. * products.
*/ */
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
struct AlgorithmInformation /* A structure for storing struct AlgorithmInformation /* A structure for storing
* information about a * information about a
* particular algorithm * particular algorithm
* (name, path to * (name, path to
* executable, command-line * executable, command-line
* parameters). * parameters).
*/ */
{ {
string* name; /* Name of the algorithm. string* name; /* Name of the algorithm.
*/ */
string* path_to_program; /* Path to the executable string* path_to_program; /* Path to the executable
* required for running * required for running
* the algorithm. * the algorithm.
*/ */
string* extra_parameters; /* Additional command-line string* extra_parameters; /* Additional command-line
* parameters required for * parameters required for
* running the executable. * running the executable.
*/ */
bool enabled; /* Determines whether the bool enabled; /* Determines whether the
* algorithm is enabled * algorithm is enabled
@ -136,42 +132,42 @@ public:
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
struct GlobalConfiguration /* A structure for storing struct GlobalConfiguration /* A structure for storing
* all the information * all the information
* affecting the general * affecting the general
* behaviour of the * behaviour of the
* program. * program.
*/ */
{ {
int verbosity; /* Determines the verbosity int verbosity; /* Determines the verbosity
* of program output (0-5, * of program output (0-5,
* the bigger the value, * the bigger the value,
* the more information * the more information
* will be shown). * will be shown).
*/ */
InteractionMode interactive; /* Controls the behaviour InteractionMode interactive; /* Controls the behaviour
* of the program as * of the program as
* regards the ability of * regards the ability of
* the user to enter * the user to enter
* commands between test * commands between test
* rounds. Possible values * rounds. Possible values
* and their meanings are: * and their meanings are:
* *
* NEVER: * NEVER:
* Run all tests without * Run all tests without
* interruption. * interruption.
* ALWAYS: * ALWAYS:
* Pause after each test * Pause after each test
* round to wait for * round to wait for
* user commands. * user commands.
* ONERROR: * ONERROR:
* Try to run the tests * Try to run the tests
* without interruption. * without interruption.
* However, in case of * However, in case of
* an error, pause and * an error, pause and
* wait for user * wait for user
* commands. * commands.
*/ */
unsigned long int number_of_rounds; /* Number of test rounds. unsigned long int number_of_rounds; /* Number of test rounds.
*/ */
@ -181,22 +177,22 @@ public:
*/ */
unsigned long int statespace_change_interval; /* Determines the frequency unsigned long int statespace_change_interval; /* Determines the frequency
* (in rounds) of how often * (in rounds) of how often
* a new state space is * a new state space is
* generated. * generated.
*/ */
StateSpaceMode statespace_generation_mode; /* Random state space StateSpaceMode statespace_generation_mode; /* Random state space
* generation mode. * generation mode.
* Available options are: * Available options are:
* *
* RANDOMGRAPH: * RANDOMGRAPH:
* Generate random * Generate random
* connected graphs as * connected graphs as
* state spaces. * state spaces.
* RANDOMPATH: * RANDOMPATH:
* Generate paths as * Generate paths as
* state spaces, choose * state spaces, choose
* the loop and the * the loop and the
* truth assignments for * truth assignments for
* atomic propositions * atomic propositions
@ -207,47 +203,47 @@ public:
* enumerating all * enumerating all
* possible paths of a * possible paths of a
* given length. * given length.
*/ */
unsigned long int formula_change_interval; /* Determines the frequency unsigned long int formula_change_interval; /* Determines the frequency
* (in rounds) of how often * (in rounds) of how often
* a new formula is * a new formula is
* generated. * generated.
*/ */
ProductMode product_mode; /* Determines the scope of ProductMode product_mode; /* Determines the scope of
* the synchronous products * the synchronous products
* computed by the program. * computed by the program.
* Possible values and * Possible values and
* their meanings are: * their meanings are:
* *
* LOCAL: * LOCAL:
* The synchronous * The synchronous
* products are computed * products are computed
* only with respect to * only with respect to
* the initial state of * the initial state of
* the system. This will * the system. This will
* save memory but makes * save memory but makes
* the algorithm cross- * the algorithm cross-
* comparisons less * comparisons less
* powerful, possibly * powerful, possibly
* at the cost of * at the cost of
* chances for finding * chances for finding
* inconsistencies in the * inconsistencies in the
* results. * results.
* GLOBAL: * GLOBAL:
* The synchronous * The synchronous
* products are computed * products are computed
* with respect to each * with respect to each
* system state (i.e. * system state (i.e.
* the formula is model * the formula is model
* checked in each system * checked in each system
* state separately). * state separately).
* This will usually * This will usually
* require more memory * require more memory
* than the other * than the other
* alternative. * alternative.
*/ */
string cfg_filename; /* Name for the string cfg_filename; /* Name for the
* configuration file. * configuration file.
@ -285,9 +281,9 @@ public:
}; };
struct FormulaConfiguration /* A structure for storing struct FormulaConfiguration /* A structure for storing
* specific information * specific information
* affecting the generation * affecting the generation
* of random formulae. * of random formulae.
*/ */
{ {
int default_operator_priority; /* Default priority for all int default_operator_priority; /* Default priority for all
@ -304,79 +300,79 @@ public:
*/ */
bool allow_abbreviated_operators; /* Determines whether the bool allow_abbreviated_operators; /* Determines whether the
* operators ->, <->, xor, * operators ->, <->, xor,
* <>, [], W and M should * <>, [], W and M should
* be allowed when * be allowed when
* generating random * generating random
* formulae (these are * formulae (these are
* `abbreviated' operators * `abbreviated' operators
* since they could be * since they could be
* written in an equivalent * written in an equivalent
* form by using another * form by using another
* operators). * operators).
*/ */
Configuration::FormulaMode output_mode; /* Determines whether the Configuration::FormulaMode output_mode; /* Determines whether the
* generated formulae are * generated formulae are
* to be converted to * to be converted to
* negation normal form * negation normal form
* before passing them to * before passing them to
* the different * the different
* algorithms. Possible * algorithms. Possible
* values are: * values are:
* *
* NORMAL: * NORMAL:
* No conversion. * No conversion.
* NNF: * NNF:
* Do the conversion * Do the conversion
* (this may affect the * (this may affect the
* size of the formulae!) * size of the formulae!)
*/ */
Configuration::FormulaMode generate_mode; /* Determines whether the Configuration::FormulaMode generate_mode; /* Determines whether the
* formulae are to be * formulae are to be
* generated in negation * generated in negation
* normal form (strict * normal form (strict
* size requirement for * size requirement for
* formulae). Possible * formulae). Possible
* values are: * values are:
* *
* NORMAL: * NORMAL:
* Allow more flexibility * Allow more flexibility
* in the generation of * in the generation of
* formulae. * formulae.
* NNF: * NNF:
* Force generation into * Force generation into
* negation normal form. * negation normal form.
*/ */
::Ltl::FormulaRandomizer formula_generator; /* Interface to the random ::Ltl::FormulaRandomizer formula_generator; /* Interface to the random
* LTL formula generation * LTL formula generation
* algorithm. * algorithm.
*/ */
}; };
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
vector<AlgorithmInformation, /* A vector containing */ vector<AlgorithmInformation, /* A vector containing */
ALLOC(AlgorithmInformation) > algorithms; /* information about the ALLOC(AlgorithmInformation) > algorithms; /* information about the
* algorithms used in * algorithms used in
* the tests. * the tests.
*/ */
GlobalConfiguration global_options; /* General configuration GlobalConfiguration global_options; /* General configuration
* information. * information.
*/ */
FormulaConfiguration formula_options; /* Configuration FormulaConfiguration formula_options; /* Configuration
* information for * information for
* generating random * generating random
* formulae. * formulae.
*/ */
Graph::StateSpaceRandomizer /* Interface to the */ Graph::StateSpaceRandomizer /* Interface to the */
statespace_generator; /* random state space statespace_generator; /* random state space
* generation * generation
* algorithms. * algorithms.
*/ */
@ -392,9 +388,9 @@ public:
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
class ConfigurationException : public Exception /* A class for reporting class ConfigurationException : public Exception /* A class for reporting
* errors when reading * errors when reading
* the configuration file. * the configuration file.
*/ */
{ {
public: public:
ConfigurationException /* Constructors. */ ConfigurationException /* Constructors. */
@ -497,12 +493,12 @@ private:
OPT_STATESPACESIZE, OPT_TRUTHPROBABILITY}; OPT_STATESPACESIZE, OPT_TRUTHPROBABILITY};
typedef map<pair<int, int>, double, /* Type definitions for */ typedef map<pair<int, int>, double, /* Type definitions for */
less<pair<int, int> >, /* the result cache used */ less<pair<int, int> >, /* the result cache used */
ALLOC(double) > /* for computing the */ ALLOC(double) > /* for computing the */
ProbabilityMapElement; /* probability */ ProbabilityMapElement; /* probability */
typedef map<int, ProbabilityMapElement, /* distribution of LTL */ typedef map<int, ProbabilityMapElement, /* distribution of LTL */
less<int>, /* formula operators. */ less<int>, /* formula operators. */
ALLOC(ProbabilityMapElement) > ALLOC(ProbabilityMapElement) >
ProbabilityMap; ProbabilityMap;
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
@ -514,8 +510,8 @@ private:
*/ */
void reset(); /* Initializes the void reset(); /* Initializes the
* configuration data * configuration data
* to default values. * to default values.
*/ */
long int parseCommandLineInteger /* Converts an integer */ long int parseCommandLineInteger /* Converts an integer */

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -17,14 +17,10 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#ifdef __GNUC__
#pragma implementation
#endif /* __GNUC__ */
#include <config.h> #include <config.h>
#include <deque> #include <deque>
#include <stack> #include <stack>
#include "ObstackAlloc.h" #include "LbttAlloc.h"
#include "DispUtil.h" #include "DispUtil.h"
/****************************************************************************** /******************************************************************************

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -808,7 +808,7 @@ inline FileWriteException::FileWriteException() :
inline FileWriteException::FileWriteException inline FileWriteException::FileWriteException
(const string& filename, const string& details) : (const string& filename, const string& details) :
IOException("error writing to " + filename IOException("error writing to " + filename
+ string(details.empty() ? "" : " " + details)) + string(details.empty() ? "" : " " + details))
/* ---------------------------------------------------------------------------- /* ----------------------------------------------------------------------------
* *
* Description: Constructor for class FileWriteException. This constructor * Description: Constructor for class FileWriteException. This constructor

View file

@ -17,10 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#ifdef __GNUC__
#pragma implementation
#endif /* __GNUC__ */
#include <config.h> #include <config.h>
#include <csignal> #include <csignal>
#include <cstdio> #include <cstdio>

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -20,10 +20,6 @@
#ifndef EXTERNALTRANSLATOR_H #ifndef EXTERNALTRANSLATOR_H
#define EXTERNALTRANSLATOR_H #define EXTERNALTRANSLATOR_H
#ifdef __GNUC__
#pragma interface
#endif /* __GNUC__ */
#include <config.h> #include <config.h>
#include <deque> #include <deque>
#include <stack> #include <stack>
@ -33,7 +29,7 @@
#else #else
#include <strstream> #include <strstream>
#endif /* HAVE_SSTREAM */ #endif /* HAVE_SSTREAM */
#include "ObstackAlloc.h" #include "LbttAlloc.h"
#include "Exception.h" #include "Exception.h"
#include "LtlFormula.h" #include "LtlFormula.h"
#include "translate.h" #include "translate.h"
@ -210,8 +206,8 @@ private:
*/ */
stack<TempFileObject*, /* Stack for storing */ stack<TempFileObject*, /* Stack for storing */
deque<TempFileObject*, /* temporary file */ deque<TempFileObject*, /* temporary file */
ALLOC(TempFileObject*) > > /* information. */ ALLOC(TempFileObject*) > > /* information. */
temporary_file_objects; temporary_file_objects;
friend class KecWrapper; /* Friend declarations. */ friend class KecWrapper; /* Friend declarations. */

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -20,14 +20,10 @@
#ifndef FORMULARANDOMIZER_H #ifndef FORMULARANDOMIZER_H
#define FORMULARANDOMIZER_H #define FORMULARANDOMIZER_H
#ifdef __GNUC__
#pragma interface
#endif /* __GNUC__ */
#include <config.h> #include <config.h>
#include <vector> #include <vector>
#include <utility> #include <utility>
#include "ObstackAlloc.h" #include "LbttAlloc.h"
#include "LtlFormula.h" #include "LtlFormula.h"
namespace Ltl namespace Ltl

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -34,7 +34,7 @@ using SLIST_NAMESPACE::slist;
#include <utility> #include <utility>
#include <vector> #include <vector>
#include "ObstackAlloc.h" #include "LbttAlloc.h"
#include "BitArray.h" #include "BitArray.h"
#include "Exception.h" #include "Exception.h"

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -20,17 +20,13 @@
#ifndef LTLFORMULA_H #ifndef LTLFORMULA_H
#define LTLFORMULA_H #define LTLFORMULA_H
#ifdef __GNUC__
#pragma interface
#endif /* __GNUC__ */
#include <config.h> #include <config.h>
#include <deque> #include <deque>
#include <iostream> #include <iostream>
#include <map> #include <map>
#include <stack> #include <stack>
#include <string> #include <string>
#include "ObstackAlloc.h" #include "LbttAlloc.h"
#include "BitArray.h" #include "BitArray.h"
#include "Exception.h" #include "Exception.h"

View file

@ -16,10 +16,10 @@ lbtt_SOURCES = \
FormulaRandomizer.cc \ FormulaRandomizer.cc \
FormulaRandomizer.h \ FormulaRandomizer.h \
FormulaWriter.h \ FormulaWriter.h \
LbttAlloc.h \
LtlFormula.cc \ LtlFormula.cc \
LtlFormula.h \ LtlFormula.h \
main.cc \ main.cc \
ObstackAlloc.h \
PathEvaluator.cc \ PathEvaluator.cc \
PathEvaluator.h \ PathEvaluator.h \
PathIterator.cc \ PathIterator.cc \

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -20,16 +20,12 @@
#ifndef NEVERCLAIMAUTOMATON_H #ifndef NEVERCLAIMAUTOMATON_H
#define NEVERCLAIMAUTOMATON_H #define NEVERCLAIMAUTOMATON_H
#ifdef __GNUC__
#pragma interface
#endif /* __GNUC__ */
#include <config.h> #include <config.h>
#include <map> #include <map>
#include <string> #include <string>
#include <utility> #include <utility>
#include <vector> #include <vector>
#include "ObstackAlloc.h" #include "LbttAlloc.h"
#include "Exception.h" #include "Exception.h"
using namespace std; using namespace std;

View file

@ -1,166 +0,0 @@
/*
* Copyright (C) 1999, 2000, 2001, 2002, 2003
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
*
* This program 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 2
* of the License, or (at your option) any later version.
*
* This program 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef ALLOC_H
#define ALLOC_H
#include <config.h>
#ifdef HAVE_SINGLE_CLIENT_ALLOC
#define ALLOC(typename) single_client_alloc
#else
#define ALLOC(typename) allocator<typename>
#endif /* HAVE_SINGLE_CLIENT_ALLOC */
#ifdef HAVE_OBSTACK_H
/* GNU libc 2.3's copy of obstack.h uses a definition of __INT_TO_PTR
which does not compile in C++. Fortunately it will not override
an existing definition. */
#if __GLIBC__ == 2 && __GLIBC_MINOR__ == 3
# define __INT_TO_PTR(P) ((P) + (char *) 0)
#endif
#include <obstack.h>
#include <cstdlib>
#include <new>
/******************************************************************************
*
* A wrapper class for allocating memory through an obstack.
*
*****************************************************************************/
class ObstackAllocator
{
public:
ObstackAllocator(); /* Constructor. */
~ObstackAllocator(); /* Destructor. */
void* alloc(int size); /* Allocates memory. */
void free(void* obj); /* Deallocates memory. */
static void failure(); /* Callback function for
* reporting a memory
* allocation failure.
*/
private:
ObstackAllocator(const ObstackAllocator&); /* Prevent copying and */
ObstackAllocator& operator= /* assignment of */
(const ObstackAllocator&); /* ObstackAllocator
* objects.
*/
struct obstack store; /* The obstack. */
};
#define obstack_chunk_alloc std::malloc
#define obstack_chunk_free std::free
/******************************************************************************
*
* Inline function definitions for class ObstackAllocator.
*
*****************************************************************************/
/* ========================================================================= */
inline ObstackAllocator::ObstackAllocator()
/* ----------------------------------------------------------------------------
*
* Description: Constructor for class ObstackAllocator.
*
* Arguments: None.
*
* Returns: Nothing.
*
* ------------------------------------------------------------------------- */
{
obstack_init(&store);
}
/* ========================================================================= */
inline ObstackAllocator::~ObstackAllocator()
/* ----------------------------------------------------------------------------
*
* Description: Destructor for class ObstackAllocator.
*
* Arguments: None.
*
* Returns: Nothing.
*
* ------------------------------------------------------------------------- */
{
obstack_free(&store, NULL);
}
/* ========================================================================= */
inline void* ObstackAllocator::alloc(int size)
/* ----------------------------------------------------------------------------
*
* Description: Interface to the memory allocator.
*
* Argument: size -- Number of bytes to allocate.
*
* Returns: A pointer to the beginning of the newly allocated memory.
*
* ------------------------------------------------------------------------- */
{
return obstack_alloc(&store, size);
}
/* ========================================================================= */
inline void ObstackAllocator::free(void* obj)
/* ----------------------------------------------------------------------------
*
* Description: Interface to the memory deallocation function.
*
* Argument: obj -- A pointer to the object to deallocate. (Because the
* underlying memory allocator is an obstack, freeing
* an object also releases all objects allocated after
* the given object.)
*
* Returns: Nothing.
*
* ------------------------------------------------------------------------- */
{
obstack_free(&store, obj);
}
/* ========================================================================= */
inline void ObstackAllocator::failure()
/* ----------------------------------------------------------------------------
*
* Description: Callback function for reporting memory allocation failures.
*
* Arguments: None.
*
* Returns: Nothing.
*
* ------------------------------------------------------------------------- */
{
throw std::bad_alloc();
}
#endif /* HAVE_OBSTACK_H */
#endif /* !ALLOC_H */

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -20,13 +20,9 @@
#ifndef PATHEVALUATOR_H #ifndef PATHEVALUATOR_H
#define PATHEVALUATOR_H #define PATHEVALUATOR_H
#ifdef __GNUC__
#pragma interface
#endif /* __GNUC__ */
#include <iostream> #include <iostream>
#include <map> #include <map>
#include "ObstackAlloc.h" #include "LbttAlloc.h"
#include "BitArray.h" #include "BitArray.h"
#include "Exception.h" #include "Exception.h"
#include "LtlFormula.h" #include "LtlFormula.h"

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -20,15 +20,11 @@
#ifndef PRODUCTAUTOMATON_H #ifndef PRODUCTAUTOMATON_H
#define PRODUCTAUTOMATON_H #define PRODUCTAUTOMATON_H
#ifdef __GNUC__
#pragma interface
#endif /* __GNUC__ */
#include <config.h> #include <config.h>
#include <deque> #include <deque>
#include <iostream> #include <iostream>
#include <vector> #include <vector>
#include "ObstackAlloc.h" #include "LbttAlloc.h"
#include "BitArray.h" #include "BitArray.h"
#include "BuchiAutomaton.h" #include "BuchiAutomaton.h"
#include "EdgeContainer.h" #include "EdgeContainer.h"

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -25,7 +25,7 @@
#include <set> #include <set>
#include <stack> #include <stack>
#include <vector> #include <vector>
#include "ObstackAlloc.h" #include "LbttAlloc.h"
#include "Graph.h" #include "Graph.h"
using namespace std; using namespace std;

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -21,7 +21,7 @@
#define SHAREDTESTDATA_H #define SHAREDTESTDATA_H
#include <vector> #include <vector>
#include "ObstackAlloc.h" #include "LbttAlloc.h"
#include "Exception.h" #include "Exception.h"
#include "TestRoundInfo.h" #include "TestRoundInfo.h"
#include "TestStatistics.h" #include "TestStatistics.h"

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -20,14 +20,10 @@
#ifndef STATDISPLAY_H #ifndef STATDISPLAY_H
#define STATDISPLAY_H #define STATDISPLAY_H
#ifdef __GNUC__
#pragma interface
#endif /* __GNUC__ */
#include <config.h> #include <config.h>
#include <iostream> #include <iostream>
#include <vector> #include <vector>
#include "ObstackAlloc.h" #include "LbttAlloc.h"
#include "Configuration.h" #include "Configuration.h"
#include "TestStatistics.h" #include "TestStatistics.h"

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -20,12 +20,8 @@
#ifndef STATESPACE_H #ifndef STATESPACE_H
#define STATESPACE_H #define STATESPACE_H
#ifdef __GNUC__
#pragma interface
#endif /* __GNUC__ */
#include <config.h> #include <config.h>
#include "ObstackAlloc.h" #include "LbttAlloc.h"
#include "BitArray.h" #include "BitArray.h"
#include "EdgeContainer.h" #include "EdgeContainer.h"
#include "Graph.h" #include "Graph.h"

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -17,14 +17,10 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#ifdef __GNUC__
#pragma implementation
#endif /* __GNUC__ */
#include <climits> #include <climits>
#include <config.h> #include <config.h>
#include <map> #include <map>
#include "ObstackAlloc.h" #include "LbttAlloc.h"
#include "BitArray.h" #include "BitArray.h"
#include "Exception.h" #include "Exception.h"
#include "StateSpaceRandomizer.h" #include "StateSpaceRandomizer.h"

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -20,10 +20,6 @@
#ifndef STRINGUTIL_H #ifndef STRINGUTIL_H
#define STRINGUTIL_H #define STRINGUTIL_H
#ifdef __GNUC__
#pragma interface
#endif /* __GNUC__ */
#include <config.h> #include <config.h>
#include <set> #include <set>
#include <string> #include <string>
@ -33,7 +29,7 @@
#include <strstream> #include <strstream>
#endif /* HAVE_SSTREAM */ #endif /* HAVE_SSTREAM */
#include <vector> #include <vector>
#include "ObstackAlloc.h" #include "LbttAlloc.h"
#include "Exception.h" #include "Exception.h"
using namespace std; using namespace std;

View file

@ -17,10 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#ifdef __GNUC__
#pragma implementation
#endif /* __GNUC__ */
#include <config.h> #include <config.h>
#include <csignal> #include <csignal>
#include <cstdio> #include <cstdio>

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -20,16 +20,12 @@
#ifndef TESTOPERATIONS_H #ifndef TESTOPERATIONS_H
#define TESTOPERATIONS_H #define TESTOPERATIONS_H
#ifdef __GNUC__
#pragma interface
#endif /* __GNUC__ */
#include <config.h> #include <config.h>
#include <fstream> #include <fstream>
#include <iostream> #include <iostream>
#include <string> #include <string>
#include <vector> #include <vector>
#include "ObstackAlloc.h" #include "LbttAlloc.h"
#include "Configuration.h" #include "Configuration.h"
#include "Exception.h" #include "Exception.h"
#include "StateSpace.h" #include "StateSpace.h"

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -25,7 +25,7 @@
#include <fstream> #include <fstream>
#include <iostream> #include <iostream>
#include <vector> #include <vector>
#include "ObstackAlloc.h" #include "LbttAlloc.h"
#include "Exception.h" #include "Exception.h"
#include "LtlFormula.h" #include "LtlFormula.h"
#include "ProductAutomaton.h" #include "ProductAutomaton.h"

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -20,14 +20,10 @@
#ifndef TESTSTATISTICS_H #ifndef TESTSTATISTICS_H
#define TESTSTATISTICS_H #define TESTSTATISTICS_H
#ifdef __GNUC__
#pragma interface
#endif /* __GNUC__ */
#include <config.h> #include <config.h>
#include <utility> #include <utility>
#include <vector> #include <vector>
#include "ObstackAlloc.h" #include "LbttAlloc.h"
#include "BuchiAutomaton.h" #include "BuchiAutomaton.h"
#include "Configuration.h" #include "Configuration.h"
#include "ProductAutomaton.h" #include "ProductAutomaton.h"

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -20,15 +20,11 @@
#ifndef USERCOMMANDREADER_H #ifndef USERCOMMANDREADER_H
#define USERCOMMANDREADER_H #define USERCOMMANDREADER_H
#ifdef __GNUC__
#pragma interface
#endif /* __GNUC__ */
#include <config.h> #include <config.h>
#include <string> #include <string>
#include <utility> #include <utility>
#include <vector> #include <vector>
#include "ObstackAlloc.h" #include "LbttAlloc.h"
#include "Configuration.h" #include "Configuration.h"
#include "Exception.h" #include "Exception.h"

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -20,17 +20,13 @@
#ifndef USERCOMMANDS_H #ifndef USERCOMMANDS_H
#define USERCOMMANDS_H #define USERCOMMANDS_H
#ifdef __GNUC__
#pragma interface
#endif /* __GNUC__ */
#include <config.h> #include <config.h>
#include <deque> #include <deque>
#include <iostream> #include <iostream>
#include <string> #include <string>
#include <vector> #include <vector>
#include <utility> #include <utility>
#include "ObstackAlloc.h" #include "LbttAlloc.h"
#include "BuchiAutomaton.h" #include "BuchiAutomaton.h"
#include "Configuration.h" #include "Configuration.h"
#include "ProductAutomaton.h" #include "ProductAutomaton.h"

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -28,7 +28,7 @@
#include <readline/readline.h> #include <readline/readline.h>
#include <readline/history.h> #include <readline/history.h>
#endif /* HAVE_READLINE */ #endif /* HAVE_READLINE */
#include "ObstackAlloc.h" #include "LbttAlloc.h"
#include "Configuration.h" #include "Configuration.h"
#include "DispUtil.h" #include "DispUtil.h"
#include "Exception.h" #include "Exception.h"

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 1999, 2000, 2001, 2002, 2003 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
* Heikki Tauriainen <Heikki.Tauriainen@hut.fi> * Heikki Tauriainen <Heikki.Tauriainen@hut.fi>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -17,10 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#ifdef __GNUC__
#pragma implementation
#endif /* __GNUC__ */
#include <config.h> #include <config.h>
#include <csignal> #include <csignal>
#include <fstream> #include <fstream>