BehaVerify: Formal Verification for Behavior Trees¶
BehaVerify is a Python toolbox that takes a behavior-tree
specification and produces a formally verified model, an executable
runtime, and a publication-quality diagram — from a single
.tree source file.
Note
BehaVerify is an active research tool first released at SEFM 2022 and maintained at Vanderbilt’s VeriVITAL lab. The landing diagram above is the same pipeline that underlies every peer-reviewed result; see Publications.
A compact TextX grammar — seven blocks, prefix-notation expressions, first-class temporal operators.
nuxmv, python, cpp, haskell, latex,
trace, grid — single DSL, many targets.
Drop ONNX classifiers or regressors straight into an action;
formally verify the composed neuro-symbolic tree.
Fast-forwarding SMV encoding + aggressive node trimming = verification at industrial tree sizes.
Compile an LTL formula into a runtime monitor that can fire a BT action when violated.
Every paper ships its own REPRODUCIBILITY/<year>_<venue>/
directory with Docker, timing scripts, and expected results.
What flows through the pipeline¶
The landing diagram above annotates every file type. In one sentence:
Inputs are a .tree behavior-tree description, optional .onnx
neural-network weights, and (optionally) an already-compiled .smv
model. The core pipeline parses the DSL, runs static validation, and
builds an internal IR of nodes, variables, and expressions. Code
generators lower that IR into six target languages. The resulting
artefacts then feed the verification strategies:
Strategy |
What it answers |
|---|---|
Model checking (nuXmv on |
Is every reachable state safe? Does every path eventually reach
the goal? Any LTL/CTL query in the |
Simulation ( |
How does the tree behave under a specific input trace or random seed? |
Runtime monitors |
On a deployed robot, has the specification just been violated?
If yes, run the |
Getting started¶
pip install . plus nuXmv for the verification mode.
End-to-end DrunkenDrone in five minutes.
Author a minimal .tree file from scratch.