class Solve::Solver

def possible_values_for(variable)

def possible_values_for(variable)
  possible_values_for_variable = possible_values[variable.artifact]
  if possible_values_for_variable.nil?
    constraints_for_variable = constraint_table.constraints_on_artifact(variable.artifact)
    all_values_for_variable = domain[variable.artifact]
    possible_values_for_variable = constraints_for_variable.inject(all_values_for_variable) do |remaining_values, constraint|
      remaining_values.reject { |value| !constraint.satisfies?(value.version) }
    end
    possible_values[variable.artifact] = possible_values_for_variable
  end
  possible_values_for_variable
end