intuition.
eapply comp_spec_seq; intuition; eauto.
Qed.

(** ** fcf_oracle_eq *)
(** The fcf_oracl_eq theorem is used to replace an oracle with an observationally equivalent oracle.  This theorem accepts a relational predicate that specifies an invariant on the states of the oracles.  The resulting proof obligations will be to show that the invariant holds on the initial state, and the when the invariant holds on any state, the oracles produce identical output for all inputs and the invariant still holds on the resulting state. *)
Theorem fcf_oracle_eq :
forall {S1 S2 : Set}(P : S1 -> S2 -> Prop)(A B C : Set) (c : OracleComp A B C)
(eqdb : EqDec B) (eqdc : EqDec C)
(o1 : S1 -> A -> Comp (B * S1)) (o2 : S2 -> A -> Comp (B * S2))
(eqds1 : EqDec S1) (eqds2 : EqDec S2) (s1 : S1)
(s2 : S2),
P s1 s2 ->
(forall (a : A) (x1 : S1) (x2 : S2),
P x1 x2 ->
comp_spec
(fun (y1 : B * S1) (y2 : B * S2) =>
fst y1 = fst y2 /\ P (snd y1) (snd y2))
(o1 x1 a) (o2 x2 a)) ->
comp_spec
(fun (a : C * S1) (b : C * S2) => fst a = fst b /\ P (snd a) (snd b))
(c S1 eqds1 o1 s1) (c S2 eqds2 o2 s2).