let user_prop_names p = match p with
    | Property.IPPredicate (_,_,_,idp) -> idp.ip_name
    | Property.IPCodeAnnot (_,_, ca) -> code_annot_names ca
    | Property.IPComplete (_, _, lb) ->
        let name =
          Pretty_utils.sfprintf  "complete_behaviors%a" pp_names lb
        in [name]
    | Property.IPDisjoint (_, _, lb) ->
        let name = Pretty_utils.sfprintf  "disjoint_behaviors%a" pp_names lb
        in [name]
    | Property.IPAssigns (_, _, _, l) ->
      List.fold_left
        (fun acc (t,_) -> t.it_content.term_name @ acc) ["assigns"] l
    | Property.IPFrom _ -> ["from"(* TODO: steal term names from assigns? *)
    | Property.IPDecrease (_,_, Some ca,_) -> code_annot_names ca
    | Property.IPDecrease _ -> ["decreases"](*TODO: add more names ? *)
    | Property.IPAxiom _
    | Property.IPAxiomatic _
    | Property.IPLemma _
    | Property.IPBehavior _
    | Property.IPUnreachable _
    | Property.IPOther _ -> []