unfold G2_3, G2_3_bad.
inline_first.
comp_skip.
unfold au_F_A.
simpl.
inline_first.
eapply comp_spec_eq_impl_eq.
comp_skip.
eapply (@oc_comp_spec_eq _ _ _ _ _ _ _ _ _ _ _ _ _ _ (fun a b => a = fst b)).
trivial.
intuition.
subst.
unfold F_randomFunc, WCR_Oracle.
inline_first.
comp_simp.
case_eq (arrayLookup_f (Bvector_EqDec b) (fst x2) (F x a)); intuition.
simpl.
inline_first.
comp_simp.
simpl.
eapply comp_spec_ret; intuition.
simpl.
inline_first.
comp_skip.
apply (oneVector c).
apply (oneVector c).
comp_simp.
inline_first.
comp_simp.
simpl.
eapply comp_spec_ret; intuition.
simpl in *.
intuition; subst.
comp_simp.
simpl.
inline_first.
unfold funcCollision.
case_eq (findCollision (list_EqDec (Bvector_EqDec b))
(Bvector_EqDec b) (fst (split (fst (snd b1))))); intuition.
destruct p.
destruct p.
simpl.
comp_simp.
eapply comp_spec_ret; intuition.
destruct b1.
simpl in *.
destruct p.
simpl in *.

(* Specifications: *)
Theorem findCollision_1_correct :
forall (A B : Set) eqd1 eqd2 (ls : list (A * B)) (x1 x2 : A) y,
findCollision_1 eqd1 eqd2 ls x1 y =
Some x2 ->
x1 <> x2 /\
In (x2, y) ls.