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 strong_tree_leq_xmap': forall {A B} f1 f2 t (leq: option B -> option A -> Prop), forall p, (forall a p0, PTree.get p0 t = Some a -> leq (Some (f1 (PTree.prev_append p p0)%positive a)) (Some (f2 (PTree.prev_append p p0)%positive a))) -> leq None None -> bounded_maps.strong_tree_leq (@PTree.xmap A B f1 t p) (@PTree.xmap A A f2 t p) leq.