let get_induction p =
  let get_stmt = function
    | Property.IPDecrease(kf,Kstmt stmt,_,_) -> Some (kf, stmt)
    | Property.IPCodeAnnot(kf,stmt,_) -> Some (kf, stmt)
    | Property.IPAssigns(kf,Kstmt stmt,_,_) -> Some (kf, stmt)
    | _ -> None
  in match p.p_kind with
    | PKAFctOut|PKAFctExit|PKPre _ -> None
    | PKProp ->
        let loop_stmt_opt = match get_stmt (property_of_id p) with
          | None -> None
          | Some (kf, s) -> get_loop_stmt kf s
        in loop_stmt_opt
    | PKPropLoop ->
        let loop_stmt_opt = match property_of_id p with
          | Property.IPCodeAnnot(kf,stmt,
                                 {annot_content = AInvariant(_, loop, _)})
            ->
              if loop then (*loop invariant *) Some stmt
              else (* invariant inside loop *) get_loop_stmt kf stmt
          | Property.IPAssigns (_, Kstmt stmt, Property.Id_code_annot _, _) ->
              (* loop assigns *) Some stmt
          | _ -> None (* assert false ??? *)
        in loop_stmt_opt
    | PKEstablished|PKVarDecr|PKVarPos|PKPreserved ->
        (match get_stmt (property_of_id p) with 
           | None -> None | Some (_, s) -> Some s)