public void CompleteKnownState()
        {
            List <string> lKnownPredicates = new List <string>();

            foreach (Predicate p in m_lKnown)
            {
                if (!lKnownPredicates.Contains(p.Name))
                {
                    lKnownPredicates.Add(p.Name);
                }
            }
            // List<GroundedPredicate> lGrounded = Domain.GroundAllPredicates(lKnownPredicates);
            HashSet <GroundedPredicate> lGrounded = Domain.GroundAllPredicates();
            HashSet <Predicate>         lUnknown  = new HashSet <Predicate>();

            foreach (Formula f in m_lHidden)
            {
                f.GetAllPredicates(lUnknown);
            }
            foreach (GroundedPredicate gp in lGrounded)
            {
                if (!(Domain.AlwaysConstant(gp) && Domain.AlwaysKnown(gp)))         //not sure why I thouhgt that constant predicates do not apply here. We need them for planning in K domain.
                {
                    if (lUnknown.Contains(gp) || lUnknown.Contains(gp.Negate()) || m_lKnown.Contains(gp) || m_lKnown.Contains(gp.Negate()))
                    {
                        //do nothing
                    }
                    else
                    {
                        m_lKnown.Add(gp.Negate());
                    }
                }
            }
        }