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 Some stmt
else get_loop_stmt kf stmt
| Property.IPAssigns (_, Kstmt stmt, Property.Id_code_annot _, _) ->
Some stmt
| _ -> None
in loop_stmt_opt
| PKEstablished|PKVarDecr|PKVarPos|PKPreserved ->
(match get_stmt (property_of_id p) with
| None -> None | Some (_, s) -> Some s)