Proof using.
eauto using subseq_filterMap.
Qed.
Ltac start :=
match goal with
| [ H : good_trace (_ :: _) |- _ ] => simpl in H
end;
break_and; subst;
match goal with
| [ H : context [In (?c _) (_ :: ?c ?k' :: _) -> In _ ?l] |- _ ] =>
assert (In (O k') l) by firstorder;
assert (before (I k') (O k') l) by auto;
repeat rewrite get_IR_input_keys_defn in *;
repeat rewrite get_IR_output_keys_defn in *;
repeat match goal with
| [ H : NoDup (_ :: _) |- _ ] => invc H
end;
assert (In (I k') l) by eauto using before_In;
assert (forall x, before x (I k') l -> exists k, x = I k) by eauto using before_head_op;
find_copy_apply_lem_hyp before_split; auto; try congruence; break_exists; subst
end;
repeat match goal with
| [ H : In ?x (_ ++ ?x :: _) |- _ ] => clear H
| [ H : In ?x (_ ++ _ :: _ ++ ?x :: _) |- _ ] => clear H
end.

(* Specifications: *)
Lemma acknowledge_all_ops_func_target_ext_strong :
forall (l : list op) (t t' : list IR),
(forall k : K, In (I k) l -> In (IRU k) t -> In (IRU k) t') ->
(forall k : K, In (I k) l -> In (IRU k) t' -> In (IRU k) t) ->
acknowledge_all_ops_func l t = acknowledge_all_ops_func l t'.