let rec pp fmt s =
  match !Mode.value with
    | Mode.Internals ->
        (let v = Partition.v_of s.p in
           if not(V.is_empty v) then
             begin
               Format.fprintf fmt "\nV: ";
               V.pp fmt v
             end);
        (let d = Partition.d_of s.p in
           if not(D.is_empty d) then
             begin
               Format.fprintf fmt "\nD: ";
               D.pp fmt d
            end);
        if not(Combine.E.is_empty s.eqs) then
          begin
            Format.fprintf fmt "\n";
            Combine.E.pp fmt s.eqs
          end 
    | Mode.Context -> 
        Pretty.set Atom.pp fmt (List.rev s.ctxt)
    | Mode.None -> 
        ()