let diff d1 d2 =
  fold
    (fun x ds acc ->
       Set.fold 
       (fun (y, rho) acc ->
          (match is_diseq d2 x y with
             | Some _ -> acc
             | None -> 
                 let (acc', _) = add (Fact.Diseq.make x y rho) acc in
                   acc'))
       ds acc)
    d1 empty