#symbolic #model-checking #systems-biology #behavior #hctl #boolean-network

bin+lib biodivine-hctl-model-checker

部分定义的布尔网络上的符号 HCTL 模型检查库

11 个版本

0.3.0 2024 年 7 月 5 日
0.2.2 2023 年 12 月 19 日
0.2.0 2023 年 9 月 22 日
0.1.6 2023 年 7 月 14 日
0.1.0 2022 年 12 月 22 日

#34科学

MIT 许可证

260KB
4.5K SLoC

Crates.io Api Docs Continuous integration Coverage GitHub last commit Crates.io

用 RUST 编写的逻辑 HCTL 符号模型检查器

此存储库包含混合逻辑 HCTL 符号模型检查器的 RUST 实现。该方法专注于(部分指定的)布尔网络的分析。特别是,它允许在大型、非平凡网络上检查任何用 HCTL 表达的行为假设。这包括稳定性、双稳态、吸引子或振荡行为等属性。

先决条件

要运行模型检查器,您需要 RUST 编译器。我们建议遵循 rustlang.org 上的说明。

如果您不熟悉 RUST,还可以在 AEON.py 中找到大多数重要功能绑定的 Python 绑定。

功能

此存储库包含 CLI 模型检查工具和模型检查库。

模型检查工具

给定一个(部分定义的)布尔网络模型和 HCTL 公式(编码我们想要检查的属性),该工具计算网络的所有状态(以及相应的参数化)来满足公式。目前,只有命令行界面,即将实现 GUI。根据模式,程序可以生成编码结果的 BDD,可以打印满足状态和颜色的数量,或打印所有满足的赋值。

要直接调用模型检查器,请使用以下命令编译代码

cargo build --release

然后运行二进制文件

.\target\release\hctl-model-checker <MODEL_PATH> <FORMULAE_PATH>
  • MODEL_PATH 是包含所选格式的 BN 模型的文件的路径(见下文,aeon 是默认值)
  • FORMULAE_PATH 是包含有效 HCTL 公式的文件的路径(每行一个)

我们支持以下可选参数

  • -o <OUTPUT_BUNDLE> - 生成包含结果BDD的zip包的路径。
  • -e <EXTENDED_CONTEXT> - 包含BDD的输入zip包的路径,用于指定通配符的上下文(仅适用于扩展公式)。
  • -p <PRINT_OPTION> - 打印的信息量 - 其中之一为 no-print / summary / with-progress / exhaustive
  • -h--help 以获取更多信息

此包还提供了一个API来利用模型检查功能。最相关的高级功能可以在模块 analysismodel_checking 中找到。此外,有关解析(解析器、标记化器、句法树)的有用功能和结构在 preprocessing 模块中。

模型格式

模型检查器默认以 aeon 格式的BN模型为其输入,benchmark_models 目录中包含许多示例模型。但是,您也可以使用 SBMLboolnet 模型。

HCTL公式

包含HCTL属性的文件必须每行包含一个正确格式的公式。公式不得包含自由变量。

格式在包含多个重要公式的 benchmark_formulae.txt 中展示。

要创建自定义公式,您可以使用任何HCTL运算符和许多派生运算符。我们使用以下语法

  • 常量:true / True / 1false / False / 0
  • 命题:字母数字字符和下划线(例如 p_1
  • 变量:字母数字字符和下划线,用 in """" 包围(例如 {x_1}
  • 否定:~
  • 布尔二元运算符:&|=><=>^
  • 时间一元运算符:AXEXAFEFAGEG
  • 时间二元运算符:AUEUAWEW
  • 混合运算符
    • 绑定x:!{x}:
    • 跳跃x:@{x}:
    • 存在x:3{x}:
    • 对于所有x: V{x}:
  • 括号: (, )

运算符优先级如下(优先级越低,越强)

  • 一元运算符(否定 + 时间): 1
  • 二元时间运算符: 2
  • 布尔二元运算符: and=3, xor=4, or=5, imp=6, eq=7
  • 混合运算符: 8

然而,强烈建议在可能的情况下使用括号,以防止任何解析问题。

扩展公式

通配符命题

该库还提供了函数来对包含所谓的“通配符命题”的“扩展”公式进行模型检查。这些特殊命题被评估为用户提供的任意(着色)状态集。这允许在后续计算中重用已预计算的成果。在公式中,这些命题的语法为%属性名%

限制量化变量的域

您还可以以下方式直接限制任何量化变量的域

  • !{x} %%:

域的处理类似于“通配符命题”(见上文)。在计算过程中,用户提供任意一组状态,这些状态将用作变量的域(变量只能取该集合中的状态值)。

这样,用户可以直接限制在自下而上计算过程中遇到的每个{x}的域(使公式更易读并加快计算速度)。

以下等价性成立

  • !{x} in %A%: phi = !{x}: %A% & phi
  • 3{x} in %A%: @{x}: phi = 3{x}: @{x}: %A% & phi
  • V{x} in %A%: @{x}: phi = V{x}: @{x}: %A% => phi

依赖关系

~11-21MB
~250K SLoC