let rec add_property ips ip =
  if not (Property.Set.mem ip !ips) then
    begin
      ips := Property.Set.add ip !ips ;
      add_consolidation ips (Consolidation.get ip)
    end
    
and add_consolidation ips = function
  | Consolidation.Never_tried 
  | Consolidation.Considered_valid 
  | Consolidation.Valid _ 
  | Consolidation.Invalid _ 
  | Consolidation.Inconsistent _ -> ()

  | Consolidation.Valid_under_hyp ps 
  | Consolidation.Unknown ps 
  | Consolidation.Invalid_under_hyp ps 
  | Consolidation.Valid_but_dead ps
  | Consolidation.Invalid_but_dead ps
  | Consolidation.Unknown_but_dead ps -> 
      add_pending ips ps

and add_pending ipref (ps:Consolidation.pending) =
  E.Map.iter
    (fun _ m ->
       E.Map.iter
         (fun _ ips -> 
            Property.Set.iter (add_property ipref) ips
         ) m
    ) ps