/// <summary> /// Create a model checker based on decision diagrams. /// </summary> /// <param name="expression"></param> /// <returns></returns> private static IModelChecker CreateModelCheckerDD(Zen <bool> expression) { var heuristic = new InterleavingHeuristic(); var mustInterleave = heuristic.Compute(expression); var manager = new DDManager <BDDNode>(new BDDNodeFactory()); var solver = new SolverDD <BDDNode>(manager, mustInterleave); solver.Init(); return(new ModelChecker <Assignment <BDDNode>, Variable <BDDNode>, DD, BitVector <BDDNode>, Unit>(solver)); }
/// <summary> /// Create a new instance of a <see cref="StateSet{T}"/>. /// </summary> /// <param name="solver">The solver.</param> /// <param name="stateSet">The state set as a decision diagram.</param> /// <param name="arbitraryMapping">The variable cache.</param> /// <param name="zenExpression">The Zen expression for variables.</param> /// <param name="variableSet">The decision diagram variable set.</param> internal StateSet( SolverDD <BDDNode> solver, DD stateSet, Dictionary <object, Variable <BDDNode> > arbitraryMapping, Zen <T> zenExpression, VariableSet <BDDNode> variableSet) { this.Solver = solver; this.Set = stateSet; this.ArbitraryMapping = arbitraryMapping; this.ZenExpression = zenExpression; this.VariableSet = variableSet; }