Fixpoint fold_Ssequence lc :=
match lc with
| nil => Sskip
| c1 :: nil => c1
| c :: lc0 => Ssequence c (fold_Ssequence lc0)
end.
Definition non_Sseq c :=
match c with
| Ssequence _ _ => False
| _ => True
end.
Inductive unfold_Sseq_rel: statement -> list statement -> Prop :=
| singleton: forall c, non_Sseq c -> unfold_Sseq_rel c (c :: nil)
| tl_step: forall c1 c2 lc, non_Sseq c1 -> unfold_Sseq_rel c2 lc ->
unfold_Sseq_rel (Ssequence c1 c2) (c1 :: lc)
| hd_step: forall c1 c2 c3 lc, unfold_Sseq_rel (Ssequence c1 (Ssequence c2 c3)) lc ->
unfold_Sseq_rel (Ssequence (Ssequence c1 c2) c3) lc
.

Lemma semax_convert_for_while':
forall CS Espec Delta Pre s1 e2 s3 s4 s5 Post,
nocontinue s4 = true ->
nocontinue s3 = true ->
@semax CS Espec Delta Pre
(Ssequence s1 (Ssequence (Swhile e2 (Ssequence s4 s3)) s5)) Post ->
@semax CS Espec Delta Pre (Ssequence (Sfor s1 e2 s4 s3) s5) Post.