method vpredicate_named p = match p.content with
    | Pold p -> 
        let l = Logic_const.old_label  in
        let old_label = self#change_label l in
        let new_p = {p with content = Pnot p} in
          Cil.ChangeDoChildrenPost (new_p, self#restore_pred old_label)
    | Pat (p, l) -> 
        let old_label = self#change_label l in
        let new_p = {p with content = Pnot p} in
        Cil.ChangeDoChildrenPost (new_p, self#restore_pred old_label)
    | Papp _ ->
        let post = function
          | {content=Papp(predicate,labels,args)} as p -> 
              let new_labels = 
                List.map 
                  (fun (logic,stmt) -> logic, label_map stmt) 
                  labels 
              in { p with content=Papp(predicate,new_labels,args) }
          | _ -> assert false
        in
        Cil.ChangeDoChildrenPost (p,post)
    | _ -> Cil.DoChildren