Inductive return_outer_gen: ret_assert -> ret_assert -> Prop :=
| return_outer_gen_refl: forall P t sf,
return_outer_gen
(frame_ret_assert (function_body_ret_assert t P) sf)
(frame_ret_assert (function_body_ret_assert t P) sf)
| return_outer_gen_switch: forall P Q,
return_outer_gen P Q ->
return_outer_gen (switch_ret_assert P) Q
| return_outer_gen_post: forall post P Q,
return_outer_gen P Q ->
return_outer_gen (overridePost post P) Q
| return_outer_gen_for: forall P' P Q,
return_outer_gen P Q ->
return_outer_gen (for_ret_assert P' P) Q
| return_outer_gen_loop1: forall inv P Q,
return_outer_gen P Q ->
return_outer_gen (loop1_ret_assert inv P) Q
| return_outer_gen_loop1x: forall inv P Q,
return_outer_gen P Q ->
return_outer_gen (loop1x_ret_assert inv P) Q
| return_outer_gen_loop2: forall inv P Q,
return_outer_gen P Q ->
return_outer_gen (loop2_ret_assert inv P) Q.

Lemma return_outer_gen_spec: forall P Q,
return_outer_gen P Q ->
RA_return P = RA_return Q.