Canonical ROBDDs and bounded symbolic state-space analysis for MoonBit
Dependencies
///|
let manager = @moonbdd.Manager::new(
["a", "b"],
@moonbdd.ResourceBudget::default(),
).unwrap()
///|
let value = manager.compile("a -> b").unwrap()
///|
let count = manager.sat_count_decimal(value).unwrap()pub(all) enum BddError {
InvalidBudget(String, Int)
EmptyVariable
InvalidVariableName(String)
DuplicateVariable(String)
UnknownVariable(String)
ForeignHandle
NodeBudgetExceeded(Int)
WorkBudgetExceeded(Int)
InputBudgetExceeded(Int)
DepthBudgetExceeded(Int)
ModelBudgetExceeded(Int)
ConstraintBudgetExceeded(Int)
AnalysisBudgetExceeded(Int)
OutputBudgetExceeded(Int)
IterationBudgetExceeded(Int)
ArithmeticOverflow
InvalidArgument(String)
InvalidArtifact(String)
UnsupportedVersion(Int)
} derive(Eq, Debug)pub(all) enum ConstraintError {
EmptyConstraintName
DuplicateConstraintName(String)
ConstraintCompileFailure(String, ExpressionError)
ConstraintAnalysisFailure(BddError)
} derive(Eq, Debug)pub(all) enum ExpressionError {
ParseFailure(ParseDiagnostic)
CompileFailure(BddError)
} derive(Eq, Debug)pub struct Manager {
variables : Array[String]
variable_index : HashMap[String, Int]
budget : ResourceBudget
// private fields
}fn Manager::diagnose_constraints(self : Manager, constraints : Array[NamedConstraint]) -> Result[ConstraintReport, ConstraintError]fn Manager::enumerate_cubes(self : Manager, value : Bdd, maximum_cubes : Int) -> Result[CubeEnumeration, BddError]fn Manager::enumerate_models(self : Manager, value : Bdd, maximum : Int) -> Result[ModelEnumeration, BddError]fn Manager::new(variable_names : Array[String], budget : ResourceBudget) -> Result[Manager, BddError]fn Manager::reach(self : Manager, initial : Bdd, transition : Bdd, encoding : StateEncoding, invariant : Bdd?) -> Result[ReachabilityResult, BddError]fn Manager::truth_table(self : Manager, value : Bdd, maximum_rows : Int) -> Result[TruthTable, BddError]Canonical ROBDDs and bounded symbolic state-space analysis for MoonBit
Dependencies