public void Add(PROBLEM input, SOLUTION output) { foreach (var observer in Observers) { var observations = new List <Observation>(); //observer.GetObservations(fact, observations); Observations.AddRange(observations); } var constraints = new List <Constraint <SOLUTION> >(); // Use observations to form conclusions foreach (var observation in Observations) { } Constraints = constraints; }