Definition my_P := fun (x: data) =>
   forall (j : meminj) (c : C) (d : D) (m tm : mem),
   (forall n : nat, safeN source geS P n c m) ->
   match_state x j c m d tm ->
   (exists rv : val, halted source c = Some rv) \/
   (exists (cd' : data) (j' : meminj) (c' : C) (m' : mem),
      corestep_plus source geS c m c' m' /\
      ((exists (d' : D) (tm' : mem),
          corestep_plus target geT d tm d' tm' /\
          match_state cd' j' c' m' d' tm') \/
       (exists rv : val,
          halted source c' = Some rv /\ match_state cd' j' c' m' d tm))).

Lemma corestep_ord: forall cd j, match_state cd j c m d tm -> (exists rv, halted source c = Some rv) \/ (exists cd' j' c' m', corestep_plus source geS c m c' m' /\ ((exists d' tm', corestep_plus target geT d tm d' tm' /\ match_state cd' j' c' m' d' tm') \/ (exists rv, halted source c' = Some rv /\ match_state cd' j' c' m' d tm))).