Ltac NoLabelTac :=
  match goal with
  | [ |- nolabel_list nil ] => exact I
  | [ |- nolabel_list (final _ _) ] => apply nolabel_final (*; NoLabelTac*)
  | [ |- nolabel_list (_ :: _) ] => simpl; split; NoLabelTac
  | [ |- nolabel_list (_ ++ _) ] => apply nolabel_list_app; NoLabelTac
  | [ H: _ -> nolabel_list ?x |- nolabel_list ?x ] => apply H; NoLabelTac
  | [ |- nolabel (makeseq _) ] => apply makeseq_nolabel; NoLabelTac
  | [ |- nolabel (makeif _ _ _) ] => apply makeif_nolabel; NoLabelTac
  | [ |- nolabel (make_set _ _) ] => apply make_set_nolabel
  | [ |- nolabel (make_assign _ _) ] => apply make_assign_nolabel
  | [ |- nolabel _ ] => red; intros; simpl; auto
  | [ |- _ /\ _ ] => split; NoLabelTac
  | _ => auto
  end.

(* Specifications: *)
Lemma tr_find_label_expr: (forall le dst r sl a tmps, tr_expr le dst r sl a tmps -> nolabel_list sl) /\(forall le rl sl al tmps, tr_exprlist le rl sl al tmps -> nolabel_list sl).
Lemma tr_find_label_top: forall e le m dst r sl a tmps, tr_top tge e le m dst r sl a tmps -> nolabel_list sl.
Lemma tr_find_label_expression: forall r s a, tr_expression r s a -> forall k, find_label lbl s k = None.
Lemma tr_find_label_expr_stmt: forall r s, tr_expr_stmt r s -> forall k, find_label lbl s k = None.
Lemma tr_find_label_if: forall r s, tr_if r Sskip Sbreak s -> forall k, find_label lbl s k = None.
Lemma tr_find_label: forall s k ts tk (TR: tr_stmt s ts) (MC: match_cont k tk), match Csem.find_label lbl s k with | None => find_label lbl ts tk = None | Some (s', k') => exists ts', exists tk', find_label lbl ts tk = Some (ts', tk') /\ tr_stmt s' ts' /\ match_cont k' tk' end with tr_find_label_ls: forall s k ts tk (TR: tr_lblstmts s ts) (MC: match_cont k tk), match Csem.find_label_ls lbl s k with | None => find_label_ls lbl ts tk = None | Some (s', k') => exists ts', exists tk', find_label_ls lbl ts tk = Some (ts', tk') /\ tr_stmt s' ts' /\ match_cont k' tk' end.