(** Commutation between translation and the "find label" operation. *)
Section FIND_LABEL.
Variable lbl: label.
Definition nolabel (s: statement) : Prop :=
forall k, find_label lbl s k = None.
Fixpoint nolabel_list (sl: list statement) : Prop :=
match sl with
| nil => True
| s1 :: sl' => nolabel s1 /\ nolabel_list sl'
end.

(* Specifications: *)
Lemma nolabel_list_app:
forall sl2 sl1, nolabel_list sl1 -> nolabel_list sl2 -> nolabel_list (sl1 ++ sl2).
Lemma makeseq_nolabel:
forall sl, nolabel_list sl -> nolabel (makeseq sl).
Lemma makeif_nolabel:
forall a s1 s2, nolabel s1 -> nolabel s2 -> nolabel (makeif a s1 s2).
Lemma make_set_nolabel:
forall t a, nolabel (make_set t a).
Lemma make_assign_nolabel:
forall l r, nolabel (make_assign l r).
Lemma tr_rvalof_nolabel:
forall ty a sl a' tmp, tr_rvalof ty a sl a' tmp -> nolabel_list sl.
Lemma nolabel_do_set:
forall sd a, nolabel_list (do_set sd a).
Lemma nolabel_final:
forall dst a, nolabel_list (final dst a).