public static void ReplaceRule(Rule originalRule, Rule replacementRule) { var index = Rules.IndexOf(originalRule); RemoveRule(originalRule); Rules.Insert(index, replacementRule); replacementRule.Conclusion.ClearCache(); ConcreteObservations.Remove(replacementRule.Conclusion); foreach (var concreteObservation in replacementRule.ConcreteObservations) { if (!ConcreteObservations.Contains(concreteObservation) && !concreteObservation.IsConclusion()) { ConcreteObservations.Add(concreteObservation); } } }