Remark call_cont_commut:
  forall (*New: j*) j k k', match_cont j k k' -> match_cont j (Cminor.call_cont k) (call_cont k').Remark find_label_commut:
  forall j lbl s k k',
  match_cont j k k' ->
  match Cminor.find_label lbl s k, find_label lbl (sel_stmt hf ge s) k' with
  | None, None => True
  | Some(s1, k1), Some(s1', k1') => s1' = sel_stmt hf ge s1 /\ match_cont j k1 k1'
  | _, _ => False
  end.(*Lenb: changed type of s from Cminor.state to CMin_core,
  adapted the constructor names,
  and removed one _ in each clause*)
Definition measure (s: CMin_core) : nat :=
  match s with
  | CMin_Callstate _ _ _ => 0%nat
  | CMin_State _ _ _ _ _ => 1%nat
  | CMin_Returnstate _ _ => 2%nat
  end.

(* Specifications: *)
Lemma Match_restrict: forall d mu c1 m1 c2 m2 X (MC: Match_cores d mu c1 m1 c2 m2) (HX: forall b, vis mu b = true -> X b = true) (RC: REACH_closed m1 X), Match_cores d (restrict_sm mu X) c1 m1 c2 m2.
Lemma Match_genv: forall d mu c1 m1 c2 m2 (MC:Match_cores d mu c1 m1 c2 m2), meminj_preserves_globals ge (extern_of mu) /\ (forall b, isGlobalBlock ge b = true -> frgnBlocksSrc mu b = true).