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 initial_diagram: forall (m : option mem) (s_mem s_mem' : mem) (main : val) (main_args : list val) (s_mach_state : ThreadPool (Some hb)) (r1 : option res), machine_semantics.initial_machine (HybConcSem (Some hb) m) r1 s_mem s_mach_state s_mem' main main_args -> exists (j : meminj) (cd : option compiler_index) (t_mach_state : ThreadPool (Some (S hb))) (t_mem t_mem' : mem) (r2 : option res), machine_semantics.initial_machine (HybConcSem (Some (S hb)) m) r2 t_mem t_mach_state t_mem' main main_args /\ concur_match cd j s_mach_state s_mem' t_mach_state t_mem'.