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()); } } } }