Notation "'query' v" := (OC_Query  _ v) (at level 79) : comp_scope.

(* Specifications: *)
Theorem compMap_oc_spec : forall (C D : Set)(P2 : C -> D -> Prop)(A B : Set)(P1 : A -> B -> Prop)(eqdc : EqDec C)(eqdd : EqDec D)(E F S: Set)(eqds : EqDec S)(ls1 : list A)(ls2 : list B)(c1 : A -> Comp C)(c2 : B -> OracleComp E F D)o (s : S), list_pred P1 ls1 ls2 -> (forall a b z, P1 a b -> comp_spec (fun x y => P2 x (fst y)) (c1 a) (c2 b _ _ o z)) -> comp_spec (fun a b => list_pred P2 a (fst b)) (compMap _ c1 ls1)
Theorem oc_compMap_eq : forall (A B C D : Set){eqd : EqDec D}(f1 f2 : A -> OracleComp B C D)(ls : list A) (S : Set){eqds : EqDec S} o (s : S), (forall s a, comp_spec eq ((f1 a) _ _ o s) ((f2 a) _ _ o s)) -> comp_spec eq ((oc_compMap _ f1 ls) _ _ o s)
Theorem oc_compMap_wf : forall (A B C D : Set)(eqd : EqDec B)(c : A -> OracleComp C D B) ls, (forall a, In a ls -> well_formed_oc
Theorem oc_compMap_qam : forall (A B C D : Set)(eqdb : EqDec B)(c : A -> OracleComp C D B ) (ls : list A)(q : nat), (forall a, queries_at_most (c a) q) ->