Definition loop1_ret_assert (Inv: assert) (R: ret_assert) : ret_assert :=
match R with
{| RA_normal := n; RA_break := b; RA_continue := c; RA_return := r |} =>
{| RA_normal := Inv;
RA_break := n;
RA_continue := Inv;
RA_return := r |}
end.
Definition loop2_ret_assert (Inv: assert) (R: ret_assert) : ret_assert :=
match R with
{| RA_normal := n; RA_break := b; RA_continue := c; RA_return := r |} =>
{| RA_normal := Inv;
RA_break := n;
RA_continue := seplog.FF;
RA_return := r |}
end.

(* Specifications: *)
Lemma frame_for1:
forall Q R F,
frame_ret_assert (loop1_ret_assert Q R) F =
loop1_ret_assert (fun rho => Q rho * F rho) (frame_ret_assert R F).
Lemma frame_loop1:
forall Q R F,
frame_ret_assert (loop2_ret_assert Q R) F =
loop2_ret_assert (fun rho => Q rho * F rho) (frame_ret_assert R F).
Lemma overridePost_normal:
forall P Q, overridePost P (normal_ret_assert Q) = normal_ret_assert P.