Exemplo n.º 1
0
        public bool Implies(PlanningParser.SubjectGdContext context, StringDictionary assignment)
        {
            //Console.WriteLine("Enter implies");
            bool result;

            if (context.KNOW() != null)
            {
                //Console.WriteLine("Enter Know");
                //CUDD.Print.PrintMinterm(Knowledge);
                //Console.WriteLine("Whether knowledge is equal to false: {0}", Knowledge.Equals(CUDD.ZERO));
                CUDDNode objectNode = context.gd().GetCuddNode(_predicateDict, assignment);
                //CUDD.Print.PrintMinterm(objectNode);
                CUDD.Ref(Knowledge);
                CUDDNode impliesNode = CUDD.Function.Implies(Knowledge, objectNode);
                result = impliesNode.Equals(CUDD.ONE);
            }
            else if (context.BEL() != null)
            {
                //Console.WriteLine("Enter belief");
                //Console.WriteLine("Belief");
                //CUDD.Print.PrintMinterm(Belief);
                CUDDNode objectNode = context.gd().GetCuddNode(_predicateDict, assignment);
                //Console.WriteLine("objectNode");
                //Console.WriteLine(context.gd().GetText());
                //CUDD.Print.PrintMinterm(objectNode);
                CUDD.Ref(Belief);
                CUDDNode impliesNode = CUDD.Function.Implies(Belief, objectNode);
                result = impliesNode.Equals(CUDD.ONE);
            }
            else if (context.NOT() != null)
            {
                result = !Implies(context.subjectGd(0), assignment);
            }
            else if (context.AND() != null)
            {
                result = true;
                for (int i = 0; i < context.subjectGd().Count; i++)
                {
                    if (!Implies(context.subjectGd(i), assignment))
                    {
                        result = false;
                        break;
                    }
                }
            }
            else if (context.OR() != null)
            {
                result = false;
                for (int i = 0; i < context.subjectGd().Count; i++)
                {
                    if (Implies(context.subjectGd(i), assignment))
                    {
                        result = true;
                        break;
                    }
                }
            }
            else
            {
                var  listVariableContext = context.listVariable();
                var  collection          = listVariableContext.GetCollection();
                var  varNameList         = listVariableContext.GetVariableNameList();
                bool isForall            = context.FORALL() != null;
                result = RecursiveScanMixedRaio(context.subjectGd(0), varNameList, collection, assignment, 0, isForall);
            }

            //Console.WriteLine("Implies result: {0}", result);
            //Console.ReadLine();
            return(result);
        }