4.2.4 (19/02/2019)

4.2.3 (26/10/2017)

4.2.2 (09/10/2017)

4.2.1 (19/09/2017)

4.2.0 (20/12/2016)

This release includes a large number of internal changes that affect the way FDR is organised, and lay the groundwork for future extensions that are currently being worked on.

3.4.0 (09/03/2016)

3.3.1 (17/06/2015)

3.3.0 (15/06/2015)

3.2.1 – 3.2.3 (06/01/2015)

3.2.0 (30/01/2015)

Bug Fixes:

3.1.0 (11/08/2014)

Major New Features:

Performance Improvements:

Miscellaneous Features:

Bug Fixes:

3.0.0 (09/12/2013)

FDR3 is a complete rewrite of FDR2 that includes a number of exciting new features.

Compared to FDR2 there are the following differences:

Compared to 3.0-beta-7, the following changes have been made:

3.0-beta-7 (15/11/2013)

  • Created RPM and Apt repositories to allow for easier installation on Linux. We strongly recommend that all existing users install FDR3 in this way, if possible. Instructions for doing so can be found on the FDR3 home page.
  • Improved the performance of the on-disk storage option during refinement checks. Several new options have been added to control it, including: refinement.storage.file.path, refinement.storage.file.cache_size, refinement.storage.file.checksum, and refinement.storage.file.compressor.
  • Modified the behaviour of wbisim to be full weak bisimulation and renamed the old version of wbisim to dbisim, which computes a delay bisimulation. wbisim can compress more than dbisim, but in the worst case takes twice as long to compute.
  • Adapted the compiler to elide some unnecessary taus, thus reducing the state space size of some processes. This change is to match a feature in FDR2.
  • Improved the performance of sbisim.
  • Improved the performance of checks that use chase and prioritise.
  • Parallelised divergence checking. This allows multiple threads to proceed in parallel, checking for divergences that start from different nodes. This will does not parallelise divergence checks that start from a single node.
  • Improved the usability and stability of the debug viewer.
  • Added the cd command to the session window that changes the current directory.
  • Fixed several crashes in the graphical user interface.
  • Fixed a few performance issues and one incorrect error message that sometimes appeared when evaluating complex CSPm scripts that make use of large recursive datatypes.
  • Fixed ghosting that could occur in the debug viewer.

3.0-beta-6 (18/10/2013)

  • Many bugs have been fixed in the graphical user interface, including:
    • Fixed several issues that caused FDR3 to steal focus on Ubuntu.
    • Refusal sets are now correctly calculated.
    • Fixed an alignment issue with behaviours in the debug viewer.
    • Fixed a bug that caused the user interface to lockup if Run All was clicked whilst another assertion was running.
    • Removed a warning that QT emitted on startup.
    • Fixed an issue that prevented the user interface from shutting down on Ctrl+C.
    • Fixed a crash when unchecking Show Taus.
  • Added support for opening files either by dragging them to the application icon (Mac OS X only), or by opening them using the operating system’s file browser.
  • Improved the performance of refinement checks on large machines with multiple processor sockets.
  • Optimised the diamond compression.

3.0-beta-5 (12/09/2013)

  • Many improvements to the Debug Viewer, including:
    • All behaviours are now always correctly aligned in the debug viewer (i.e. it is now always the case that events in the same column are synchronised).
    • Improved the presentation of divergence and deadlock counterexamples.
    • Names of named compressed processes, such as normal(P), are now displayed.
    • Added an option to hide taus in the trace.
    • Added the ability to highlight a row and column.
    • Added a new Transition Popover that appears when hovering over an event in the debug viewer. If the event is a tau this will display the hidden event that was performed. In all cases it will display what leaf machines synchronise to perform the event.
    • When zoomed in, the machine name for a given row is now always visible, even after scrolling.
    • Fixed a crash that could occur when dividing loop counterexamples.
  • Added reporting of transition rates during refinement checks.
  • Improved the presentation of the speed and memory graphs that appear in the refinement status popover.
  • Added machine-readable output to the command-line tool; see Machine-Readable Formats for further details. This replaces FDR2’s batch mode.
  • Added two new commands, counterexamples command that pretty-prints a textual representation of the counterexamples to the given assertion to the prompt, and statistics command that prints statistics about a completed or running refinement check to the prompt.
  • Improved the performance of strong bisimulation, typically resulting in a fourfold speedup.
  • Fixed parsing of expressions that mix hiding and parallel operators (such as X \ Y ||| Z).
  • Fixed an issue that prevented the file-backed storage from allocating a file that could appear on extremely large checks.
  • Fixed a crash caused by cancelling a check during evaluation.
  • Fixed a hang caused by a cancelling a check during compilation.

3.0-beta-4 (09/08/2013)

  • Add support for checking determinism using the failures model.
  • Added support for simple profiling of CSPM scripts.
  • Added an option to disable runtime bounds checks for performance reasons (see cspm.runtime_range_checks).
  • Added some parallelisation to the CSPM evaluator, resulting in a speed up when complex CSPM expressions are evaluated as part of checking an assertion.
  • Allow refinement checks to use on-disk temporary storage (see refinement.storage.file.path).
  • Renamed the refinement.compressor option to refinement.storage.compressor.
  • Added a Node Inspector.
  • Added an efficient representation of key-value maps (see Map Functions) to CSPM.
  • Allow more resizing of the main window.
  • Added an option to close all windows whenever a load or reload command is executed (see gui.close_windows_on_load).
  • Allow multi counterexamples to be viewed in the Debug Viewer by setting the option refinement.desired_counterexample_count.
  • Added the ability to view refusals when viewing minimal acceptance information in the Debug Viewer.
  • Added an indication to windows that were created using previous versions of a file (i.e. before a reload/load).
  • Changed the behaviour of print statements to allow them to be evaluated on demand, rather than always evaluating them when a file is loaded.
  • Enhanced the graph viewer to allow layout to be cancelled.

3.0-beta-3 (17/7/2013)

  • Added charts for memory and checking speed to the refinement status popover.
  • Enhanced type annotations to allow types defined inside modules to be used.
  • Added support for nested parametrised modules. Note: instance declarations must now occur lexically after the module that is being instantiated.
  • Added support for type annotations to mention datatypes defined in modules.
  • Allow refinement checks etc. to be cancelled.
  • Improved performance of processes that contain large numbers of transitions.
  • Improved some of the error messages emitted by the compiler.
  • Fixed parsing of minuses immediately followed by a newline.
  • Fixed a bug that could potentially caused a compiled machine to be reused even if it had not been compiled in the correct semantic model.
  • Prevent a crash that could occur if load/reload was executed whilst a refinement check was running.

3.0-beta-2 (15/6/2013)

  • Made the compiler emit an error if prioritise is applied to a process in such a way that makes the result semantically invalid.
  • Add support for print statements.
  • Reduce memory consumption during refinement checks by around 1/3.
  • Added an auto-updater for Mac OS X and alert Linux users to new releases.
  • Fixed a crash that could occur when loop counterexamples were divided.
  • Enhanced the process graph viewer to allow behaviours from the debug viewer to be viewed.
  • Fixed a bug that prevented the Mac OS X version from being opened.
  • Fixed some problems with parsing files with includes inside modules.
  • Expanded Lambda to allow multiple arguments to be specified.
  • Increased the resilience of the parser when dealing with malformed includes.

3.0-beta-1 (23/5/2013)

  • Add a rewritten compiler (the component which produces LTSs from processes). This should result in reduced memory usage during compilation, as well as reduced compilation time. Further, it fixes a number of bugs that prevented various processes from being compiled.
  • Allow multiple assertions to be compiled simultaneously in the GUI.
  • Added more feedback in the GUI on how compilation is proceeding.
  • Add support for parametrised modules.
  • Fixed the definition of WAIT in timed sections.
  • Fixed the evaluation of empty replicated operators in timed sections.

3.0-alpha-6 (02/4/2013)

  • Added support for manual type annotations, to aid with code documentation and to make the type-checker give more accurate errors.
  • Fixed a crash that could occur when dividing repeat behaviours through compressions.

3.0-alpha-5 (26/3/2013)

  • Add more information to the machine popover to allow long traces to be easily viewed.
  • Enhanced the range of programs that can be successfully type-checked.
  • Allow the previous and next word keyboard shortcuts to be used from the GUI terminal.
  • Fixed several issues that would mean wbisim return processes that were not semantically equivalent to the original process.
  • Fixed an issue with timed CSP that would result in incorrect processes being generated.
  • Fixed the low-level implementation of Alphabetised Parallel and prioritise.
  • Fixed a crash that could occur when a behaviour involving chase was divided.

3.0-alpha-4 (15/3/2013)

  • Fixed a bug that caused high-level machines with compressed process arguments to have incorrect minimal acceptances. This may have caused some assertions to erroneously pass.
  • Add support for tock-CSP via timed sections, Synchronising External Choice and Synchronising Interrupt.
  • Enhanced the refinement status popover to include storage statistics, in addition to details on the ply. Also fix a bug where the per node storage estimate was under-reported.
  • Added support for different compression algorithms which can be used during the refinement checking stage, including LZ4HC and zlib (see refinement.storage.compressor).
  • Enhanced the refinement engine to reconstruct counterexamples in parallel.
  • Added support for the chase, deter, lazyenumerate, prioritise and wbisim compressions.
  • Fixed the low-level implementation of Rename and Linked Parallel, which may have caused incorrect transitions to be reported in Probe under certain circumstances.
  • Added support for determinism checking in the failures-divergences model.

3.0-alpha-3 (19/2/2013)

  • Added basic support for the failures-divergences model, including divergence freedom checks and failures-divergences refinement checks. Note that the current implementation has not been optimised to take advantage of multiple cores.
  • Added support for ranged set and ranged list comprehensions, such as <1.. | p == 1> and {1..2 | p == 1}. Both finite and infinite variants are supported for both the lists and the sets.
  • Implemented diamond compression.
  • Implemented tau_loop_factor compression.
  • Added a popover to display performance statistics about refinement checks.
  • Fixed loading of files where the path includes ~ in FDR3.
  • Improved tab completion of file names in the prompt.
  • Fixes FDR3 running on older Mac’s without POPCNT.
  • Fixed the use of the forward delete key, and other deletion shortcuts, at the prompt.
  • Fixed an issue where the node highlighting in Probe was not updated after navigating away.
  • Fixed a crash that occurred when launching FDR3 with too many arguments.
  • Correctly return a trace error if an assertion can fail because of both an acceptance and a trace error.
  • Allowed the semantic model that a process is compiled in to be specified when using the graph command.

3.0-alpha-2 (11/1/2013)

  • Improved the pretty printing of processes in Probe.
  • Improved the performance of Probe.
  • Added a manual.
  • Allowed extensions and productions to be type-checked.
  • Added a new primitive datatype: Char that represents a character, along with associated character and string literals.
  • Added two new functions: error and show that display a given string as an error and pretty print a value, respectively.
  • Restricted the use of prefixing to make it compatible with FDR2.
  • Fixed several minor GUI issues.
  • Fixed a type-checker issue that allowed incorrect programs that used Extendable to pass.
  • Fixed evaluation of replicated link parallel of an empty sequence.
  • Fixed evaluation of prefixing where ? occurred before $.

3.0-alpha-1 (21/12/2012)

The initial alpha release.