/// <summary> /// Grounds the conditions by the specified substitution. /// </summary> /// <param name="conditions">Conditions.</param> /// <param name="substitution">Variable substitution.</param> /// <returns>Grounded conditions.</returns> public Conditions Ground(Conditions conditions, ISubstitution substitution) { // (partially) ground the whole conditions by the specified substitution Conditions newConditions = conditions.CloneEmpty(); foreach (var expression in conditions) { newConditions.Add(ExpressionsGrounder.Value.Ground(expression, substitution)); } // for partially lifted conditions - remove parameters that were grounded by the substitution if (conditions.Parameters != null) { newConditions.Parameters.Clear(); foreach (var parameter in conditions.Parameters) { if (!substitution.Contains(parameter.ParameterNameId)) { newConditions.Parameters.Add(parameter.Clone()); } } // if the conditions are fully grounded, set the parameters as null if (newConditions.Parameters.Count == 0) { newConditions.Parameters = null; } } return(newConditions); }