Proof using.
induction 1; intros; simpl in *; intuition (auto; congruence).
Qed.
Fixpoint acknowledge_all_ops_func (l : list op) (target : list IR) : list IR :=
match l with
| [] => []
| x :: xs => match x with
| I k => if acknowledged_op_dec k xs
then IRI k :: acknowledge_all_ops_func xs target
else if in_dec IR_eq_dec (IRU k) target
then IRI k :: IRU k :: acknowledge_all_ops_func xs target
else acknowledge_all_ops_func xs target
| O k => IRO k :: acknowledge_all_ops_func xs target
end
end.
Hint Constructors acknowledge_all_ops.

(* Specifications: *)
Lemma acknowledge_all_ops_func_defn :
forall x l target,
acknowledge_all_ops_func (x :: l) target =
match x with
| I k => if acknowledged_op_dec k l
then IRI k :: acknowledge_all_ops_func l target
else if in_dec IR_eq_dec (IRU k) target
then IRI k :: IRU k :: acknowledge_all_ops_func l target
else acknowledge_all_ops_func l target
| O k => IRO k :: acknowledge_all_ops_func l target
end.