method vpredicate_named p = match p.content with
    | 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