/// <summary> /// Expands given inference level via back chaining. /// </summary> /// <param name="parent">The parent to be expanded.</param> /// <returns>The expansion.</returns> private IEnumerable<InferenceLevel> expand(InferenceLevel parent) { foreach (var requirement in parent.GetRequirements()) { if (!_wildcardToLevel.ContainsKey(requirement)) yield return getState(parent, requirement); } }