Releases: sybila/biodivine-hctl-model-checker
0.3.4
(this summary is LLM-generated, but validated by project developers)
Changes Since v0.3.3
API-breaking changes
- 🛠️ The minimum supported Rust version (MSRV) has been increased to
1.88.0. Projects using this library must now be compiled with Rust1.88.0or newer.
Other changes
- 🦀 The library has been migrated to the Rust 2024 edition, adopting the latest language features and idioms.
- 📦 Core dependencies have been updated to their latest compatible versions, including
biodivine-lib-bdd,biodivine-lib-param-bn,clap, andtermcolor. - ✨ The codebase has been updated to adhere to the new formatting rules and
clippylints associated with the Rust 2024 edition, enhancing code quality and consistency. - 🤖 The continuous integration (CI) pipeline has been significantly improved by transitioning to reusable workflows for building, validation, and automated releases.
0.3.3
(this summary is LLM-generated, but validated by project developers)
Changes Since v0.3.2
New features
- ✨ Added progress tracking capabilities to model-checking functions for extended formulae (those containing wild-card propositions). This is exposed through the following new functions which accept a
progress_callback:_model_check_extended_formula_model_check_extended_formula_dirty_model_check_multiple_extended_formulae_model_check_multiple_extended_formulae_dirty
Bug fixes
- Fixed a typographical error in an internal source code comment.
Other changes
- ⚙️ The Rust version used in the continuous integration pipeline has been updated to
1.86.0.
0.3.2
(this summary is LLM-generated, but validated by project developers)
Changes Since v0.3.1
API-breaking changes
- The signature of the public function
evaluation::algorithm::eval_nodehas been changed. It now accepts an additionalprogress_callbackargument, which is a function that can be used to monitor the progress of the evaluation.
New features
- ✨ A progress tracking mechanism has been introduced to the model-checking algorithm (resolves #20). For each public function in the
model_checkingmodule (e.g.,model_check_formula), a new "underscored" variant (e.g.,_model_check_formula) is now available. These variants accept a callback function to report on intermediate computation progress, such as the start of a new sub-formula evaluation or the BDD size during fixed-point computations. The original API remains unchanged and does not report progress by default.
Other changes
- The Rust version used for continuous integration has been updated to
1.85.0. - The internal evaluation algorithm has been refactored to accommodate the new progress reporting feature.
- Minor internal code style improvements have been implemented.
0.3.1
(this summary is LLM-generated, but validated by project developers)
Changes Since v0.3.0
New features
- HCTL formula syntax has been extended to support an alternative long-form notation for hybrid operators. Alongside the existing short-hand symbols, you can now use named operators prefixed with a backslash:
\bind,\jump,\exists, and\forall. For example, a formula can now be written as\bind {x}: AG EF {x}. The default serialization format remains the short-hand version. (#19) ✨
Other changes
- The continuous integration (CI) workflow has been updated to use more modern GitHub Actions and improve build times.
- Dependencies on
biodivine-lib-bddandbiodivine-lib-param-bnhave been updated. ⬆️
0.3.0
A third "major" release of the HCTL model checker. This time, the changes are centred around extending functionality regarding "wild-card propositions" and the addition of optional "variable domains" (described below) to the formulae. Other changes come with the project's more extensive refactoring and restructuring (changes in modules).
Domains of quantified variables can now be restricted directly in HCTL formulae. The logic behind these variable domains is similar to wild-card propositions introduced in version 0.2.0. Basically, you specify a special "domain proposition" and an arbitrary (coloured) set to which it will evaluate. The syntax is following: !{x} in %domain%:, and the same goes for other quantifiers. This way, the user can directly restrict the domain of every {x} encountered during bottom-up computation (makes the formula more readable and speeds up the computation). See #17 for more details. This part required extending many public methods, but mainly to modify internal parts of the parsing, evaluation, and caching.
The refactoring part is mainly concerned with the following things:
- simplify or remove redundant and unnecessary methods/trait implementations
- restructure the test suite and improve documentation (both doc strings and comments)
- simplify and shorten complex method/struct/function/variable names
- simplify complex types, make new types/aliases
Also, some bugs were fixed, mostly in the parser (whitespaces after quantifiers are now parsed correctly, and some new edge cases are now handled).
The following things changed in the library's API:
- changes in top-level modules:
- algorithms from module
aeonwere moved to an internal module_aeon_algorithms - new module for loading inputs from files or archives -
load_inputs - new module to generate result archives -
generate_output - all of the complex model-checking tests were moved to a separate internal test module,
_test_model_checking
- algorithms from module
- there are new simplified aliases for some common complex types used within various functions/methods/classes:
LabelToSetMapinstead ofHashMap<String, GraphColoredVertices>to map propositions to their valuationsVarDomainMapinstead ofBTreeMap<String, Option<String>>for mapping of free variables to (optional) labels of their domainFormulaWithDomainsinstead of(String, VarDomainMap)for a sub-formula and mapping of its free variablesVarRenameMapinstead ofHashMap<String, String>as a shorthand for mapping between variable names
- most significant changes in the
preprocessingmodule:- submodule
nodewas renamed to more fittinghctl_tree HctlTreeNodeformulae representations are now serialized (and displayed) in the same format that can be parsed back- variants of operator enums
UnaryOpandBinaryOpwere changed to uppercase in order to support new unified serialization - variant
NodeType::Hybridof theNodeTypeenum now has an additionalOption<String>field to represent the optional domain proposition; the same happens for the methodmk_hybridand for the variantHybridof theHctlTokenenum HctlTreeNodehas a new methodnew_random_booleanfor random generating propositional-logic trees- names of all of all
mk_*methods ofHctlTreeNodewere shortened (such asmk_hybrid_node->mk_hybrid) - names of all variants of the
NodeTypeenum were shortened (such asHybridNode->Hybrid) - utility function
check_props_and_rename_varsis renamed tovalidate_and_rename_recursive, and simplified wrappervalidate_props_and_rename_varsis added - new utilities
validate_wild_cardsandvalidate_and_divide_wild_cards - submodule
read_inputswas removed, part of the functionality is redundant, part moved to moduleload_inputs
- submodule
- most significant changes in the
evaluationmodule:- the
EvalContextstruct was extended with fieldsdomain_raw_setsandfree_var_domainsto track how to evaluate variables during computation. Some of its methods take additional arguments due to this. The fieldcachewas also extended with domains. - in sub-module
canonization, functionget_canonical_and_mappingwas changed to more meaningfulget_canonical_and_renaming; a similar change happened to arguments of functioncanonize_subform - rename sub-module
hctl_operators_evaluationtohctl_operators_eval - rename sub-module
mark_duplicate_subformtomark_duplicates
- the
- other refactoring changes in the
model_checkingmodule- all of the main functions in module
model_checking(such asparse_and_validateormodel_check_formula) now take the formula as&strinstead ofString - name of
parse_hctl_and_validateis simplified toparse_and_validate - name of
collect_unique_wild_card_props_recursiveis simplified tocollect_unique_wild_cards_recursive
- all of the main functions in module
- in module
analysis:- functions
analyse_formulaeandanalyse_formulanow take two additional arguments with optional paths to input archive and output archive
- functions
Many of these changes are now also available as part of the tool itself, not just the library. The model checker can now load an archive with BDDs to be substituted for the wild-card properties and variable domains. It can also generate an archive with resulting BDDs. For details of how the CLI tool currently behaves, see the main README file. These changes also correspond to changes in the module analysis, as mentioned above.
Other minor changes in the project:
- The minimal Rust version in the CI was set to 1.77.0.
0.2.2
(this summary is LLM-generated, but validated by project developers)
Changes Since v0.2.1
Bug fixes
- The sanitization functions (
sanitize_colored_vertices,sanitize_colors,sanitize_vertices) no longer require theSymbolicAsyncGraphto have an associatedBooleanNetwork. This change prevents a potential panic, making the functions more robust. 🐛 - Added internal verification to ensure that formulas using the binder operator (e.g.,
!{x}: FORMULA) are correctly evaluated as equivalent to their universal quantifier counterpart (V{x}: ({x} => FORMULA)), improving the reliability of the model checker. ✅
Other changes
- The dependency on
biodivine-lib-param-bnhas been updated to version0.5.1or newer. 📦
0.2.1
(this summary is LLM-generated, but validated by project developers)
Changes Since v0.2.0
API-breaking changes
- This version updates its core dependency
biodivine-lib-param-bnto version0.5.0or newer. This update introduces several breaking changes from the dependency that are reflected in this library's API:- Methods on
SymbolicAsyncGraphthat previously accessed the underlyingBooleanNetwork(e.g.,graph.as_network().variables()) have been changed. Many of these properties, such asvariables()andnum_vars(), can now be accessed directly on theSymbolicAsyncGraphinstance. - The
SymbolicAsyncGraph::as_network()method now returns anOption<&BooleanNetwork>. - Methods for creating empty sets, such as
SymbolicAsyncGraph::mk_empty_vertices, have been replaced with their colored counterparts, likeSymbolicAsyncGraph::mk_empty_colored_vertices.
- Methods on
- The formula parsing functions
preprocessing::parser::parse_and_minimize_hctl_formulaandpreprocessing::parser::parse_and_minimize_extended_formulanow require aSymbolicContextas an argument instead of aBooleanNetwork. - The public function
postprocessing::sanitizing::sanitize_bddhas been removed. Its functionality has been superseded by theSymbolicContext::transfer_frommethod inbiodivine-lib-param-bn. - The function signature for
mc_utils::get_extended_symbolic_graphhas been updated to accept a borrowed&BooleanNetworkinstead of an owned value.
New features
- ✨ Added new "dirty" model checking functions:
model_check_extended_formula_dirtyandmodel_check_multiple_extended_formulae_dirty. These versions skip the final sanitization step of removing auxiliary HCTL variables from the result, which can offer a performance benefit in specific use cases.
Other changes
- The library's dependencies on
biodivine-lib-bddandbiodivine-lib-param-bnhave been updated to versions>=0.5.7and>=0.5.0respectively. - The internal implementation for sanitizing model checking results has been refactored to use the generalized BDD transfer functionality now provided by
biodivine-lib-param-bn, removing redundant code. (PR #12)
0.2.0
A second "major" release of HCTL model checker. The new functionality revolves around adding "wild-card propositions" (described below). There are also some further changes to the public API. Some more changes are expected in the future 0.3.0, as there is still a lot of refactoring of the project to be done. However, we are hopefully getting closer to a stable 1.0.0 release.
Wild-card propositions are special propositions that are evaluated as an arbitrary (coloured) set given by the user. This allows, for instance, the re-use of already pre-computed results in subsequent computations. In formulae, we now allow including such properties as %property_name%.
Note that the BDD representation of provided coloured sets (to which wild-card propositions are evaluated) must contain the same symbolic variables as the original extended STG.
We provide the following new functionality with regard to the evaluation of the wild-card propositions:
model_check_extended_formulaandmodel_check_multiple_extended_formulaefor running the whole model-checking procedure on extended formulaeparse_extended_formulaandparse_and_minimize_extended_formulato generate syntactic trees for extended formulaetry_tokenize_extended_formulafor tokenizing an extended formula- a new field of Enum
AtomiccalledWildCardPropis added to represent the special properties in syntactic trees EvalContextprovidesextend_context_with_wild_cardsmethod to extend the cache with "raw sets" regarding wild-card propositionsmark_duplicates_canonized_multiplenow also considers terminal wild-card-proposition nodes as duplicatescollect_unique_wild_card_propsto get all unique wild-card propositions in a tree
Some further refactoring changes and other code improvements include:
EvalInfostruct is renamed to a more suitableEvalContext, and similarly, the module name is changed (eval_info->eval_context)- function
collect_unique_hctl_varsdoes not take the (initially empty)HashSetanymore, but instead creates it internally and calls an internal recursive sub-procedure - functions to generate various versions of
HctlTreeNodes (such ascreate_hybridorcreate_unary) are now provided as static methods of theHctlTreeNode, with names such asmk_hybrid_nodeormk_unary_node EvalContextprovides getterget_cachecheck_hctl_var_supportnow computes the number of unique variables internally, and thus, they don't have to be computed outsideHctlTreeNode::newnow generates the tree from HCTL tokens, instead of confusingly creating a constant default nodeHctlTreeNode::defaultis removed because it was confusingmodel_check_treesrenamed tomodel_check_multiple_treesfor consistency
There are also the following little changes to the overall project:
- slight refactoring and documentation improvements, but there is a lot of work to be done (focus of the future release)
- test suite is extended (but refactoring and modifications are still needed in future)
githooksare removed, as they were not usedworkflowissue that arose with the newesttarpaulinis fixed