Ltac exploit_match:=
      unfold match_thread_target,match_thread_source,match_thread_compiled in *;
      match goal with
      | [ H: getThreadC ?i = _ ?c,
             H0: context[match_state2match_thread] |- _ ] =>
        rewrite H in H0; inversion H0; subst; simpl in *; clear H0
      end;
      fold match_thread_target in *;
      fold match_thread_source in *;
      fold match_thread_compiled in *.(* Build the concur_match *)
    Ltac destroy_ev_step_sum:=
      match goal with
      | [ H: ev_step_sum _ _ _ _ _ _ _ |- _ ] => inversion H; clear H
      end.

Lemma thread_step_plus_from_corestep: forall (m : option mem) (tge : ClightSemanticsForMachines.G * Asm.genv) (U : list nat) (st1 : t) (m1 : mem) (Htid : containsThread st1 hb) (st2 : t) (mu : meminj) (m2 : mem) (cd0 : compiler_index) (H0 : concur_match (Some cd0) mu st1 m1 st2 m2) (code2 : Asm.state) (s4' : Smallstep.state (Asm.part_semantics Asm_g)) (m4' : mem), corestep_plus (Asm_core.Asm_core_sem Asm_g) code2 (restrPermMap (proj1 ((memcompat2 H0) hb (contains12 H0 Htid)))) s4' m4' -> forall Htid' : containsThread st2 hb, machine_semantics_lemmas.thread_step_plus (HybConcSem (Some (S hb)) m) tge U st2 m2 (updThread Htid' (Krun (TState Clight.state Asm.state s4')) (getCurPerm m4', snd (getThreadR Htid'))) m4'.