Esempio n. 1
0
        /// <summary>
        /// [ REFS: traces, DEREFS: ]
        /// </summary>
        /// <param name="automataBDD"></param>
        /// <param name="model"></param>
        public void MCForTA(AutomataBDD automataBDD, Model model)
        {
            //Clear the old data
            this.traces.Clear();

            List<CUDDNode> allTransitions = new List<CUDDNode>(automataBDD.transitionBDD);

            CUDDNode deadlockGoadDD = GetDeadlockDD(allTransitions, model);
            ExpressionBDDEncoding initEncoding = automataBDD.initExpression.TranslateBoolExpToBDD(model);
            if (initEncoding.GuardDDs.Count == 0)
            {
                this.VerificationOutput.VerificationResult = VerificationResultType.VALID;
            }
            else
            {
                CUDD.Ref(automataBDD.transitionBDD);
                List<CUDDNode> discreteTrans = CUDD.Function.And(automataBDD.transitionBDD,
                                                                       CUDD.Function.Not(AutomataBDD.GetTerminationTransEncoding(model)));
                discreteTrans = CUDD.Abstract.ThereExists(discreteTrans, model.GetAllEventVars());

                CUDD.Ref(automataBDD.Ticks);
                List<CUDDNode> tickTrans = CUDD.Function.And(automataBDD.Ticks,
                                                                       CUDD.Function.Not(AutomataBDD.GetTerminationTransEncoding(model)));
                tickTrans = CUDD.Abstract.ThereExists(tickTrans, model.GetAllEventVars());

                bool reachable = model.PathForTA(CUDD.Function.Or(initEncoding.GuardDDs), deadlockGoadDD, discreteTrans,
                                                 tickTrans, automataBDD.SimulationRel, SelectedEngineName);

                CUDD.Deref(discreteTrans, tickTrans);

                this.VerificationOutput.VerificationResult = (reachable) ? VerificationResultType.INVALID : VerificationResultType.VALID;
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Check whethere the goal can be reachable from the initial state of automataBDD
        /// [ REFS: traces, DEREFS: ]
        /// </summary>
        /// <param name="automataBDD"></param>
        /// <param name="goal"></param>
        /// <param name="model"></param>
        public void MCForTA(AutomataBDD automataBDD, Expression goal, Model model)
        {
            //Clear the old data
            this.traces.Clear();

            ExpressionBDDEncoding goalBddEncoding = goal.TranslateBoolExpToBDD(model);

            ExpressionBDDEncoding initEncoding = automataBDD.initExpression.TranslateBoolExpToBDD(model);
            if (initEncoding.GuardDDs.Count == 0)
            {
                VerificationOutput.VerificationResult = VerificationResultType.INVALID;
            }
            else
            {
                CUDDNode initDD = CUDD.Function.Or(initEncoding.GuardDDs);
                CUDDNode goalDD = CUDD.Function.Or(goalBddEncoding.GuardDDs);

                CUDD.Ref(automataBDD.transitionBDD);
                List<CUDDNode> discreteTrans = CUDD.Abstract.ThereExists(automataBDD.transitionBDD, model.GetAllEventVars());

                CUDD.Ref(automataBDD.Ticks);
                List<CUDDNode> tickTrans = CUDD.Abstract.ThereExists(automataBDD.Ticks, model.GetAllEventVars());

                bool reachable = model.PathForTA(initDD, goalDD, discreteTrans, tickTrans, automataBDD.SimulationRel,
                                                 SelectedEngineName);

                CUDD.Deref(discreteTrans, tickTrans);
                CUDD.Deref(initDD, goalDD);

                VerificationOutput.VerificationResult = (reachable) ? VerificationResultType.VALID : VerificationResultType.INVALID;
            }
        }