Section h_star_WCR.
Definition h_star := h_star _ h.
Variable Z : OracleComp (list (Bvector (HMAC_spec.b c p))) (Bvector (HMAC_spec.b c p))
(list (Bvector (HMAC_spec.b c p)) * list (Bvector (HMAC_spec.b c p))).
Definition Y : OracleComp (list (Bvector (HMAC_spec.b c p))) (Bvector c)
(list (Bvector (HMAC_spec.b c p)) * list (Bvector (HMAC_spec.b c p))) :=
[x, _] <--$2 OC_Run _ _ _ Z (fun _ d => r <--$ OC_Query _ d; $ ret ((app_fpad fpad r), tt)) tt;
$ ret x.
induction a1; intuition.
rewrite vector_0 in *.
trivial.
destruct (vector_S a2).
destruct H2.
subst.
repeat rewrite <- SplitVector.Vector_cons_app_assoc in H.
inversion H.
apply vector_cons_eq in H.
f_equal.
eapply IHa1.
eauto.
Qed.

Theorem WCR_h_star_pad_impl_h_star :
cAU.Adv_WCR _ _ h_star_pad
({ 0 , 1 }^c) Z <=
cAU.Adv_WCR _ _ h_star
({ 0 , 1 }^c) Y.