let id_prop_txt p = match p with
    | Property.IPPredicate (pk,_,ki,idp) ->
        Pretty_utils.sfprintf "%s_%d%a"
         (predicate_kind_txt pk ki)  idp.ip_id pp_names idp.ip_name
    | Property.IPCodeAnnot (_,_, ca) ->
        let name = match ca.annot_content with
          | AAssert _ -> "assert"
          | AInvariant _ -> "loop_inv"
          | AVariant _ -> "loop_variant"
          | _ -> "code_annot"
        in Pretty_utils.sfprintf "%s_%d%a" name ca .annot_id
          pp_names (code_annot_names ca)
    | Property.IPComplete (_, _, lb) ->
        Pretty_utils.sfprintf  "complete_behaviors%a" pp_names lb
    | Property.IPDisjoint (_, _, lb) ->
        Pretty_utils.sfprintf  "disjoint_behaviors%a" pp_names lb
    | Property.IPDecrease _ -> "decrease"
    | Property.IPAxiom name -> ("axiom_"^name)
    | Property.IPAssigns (_kf, ki, _bhv, _) ->
        let name = match ki with
          | Kglobal -> "function_assigns"
          | Kstmt s ->
              match s.skind with
                | Loop _ -> "loop_assigns_" ^ string_of_int s.sid
                | _ -> "stmt_assigns_" ^ string_of_int s.sid
        in name
    | Property.IPBehavior _ -> ""
    | Property.IPBlob state -> State.get_name state