Section expected_poly_time_theory.
Context `{ept : expected_poly_time_predicate}.
intuition.
eapply (@expected_poly_time_compose _ _ _ _ _ _ (fun n a b => (f2 n b))); eauto.
eapply expected_poly_time_const; eauto.
Qed.

Theorem expected_poly_time_compose_binary :
forall (A B C D : nat -> Type)(f1 : forall n, A n -> B n)(f2 : forall n, A n -> C n)(f3 : forall n, B n -> C n -> D n) ,
efficient _ f1 ->
efficient _ f2 ->
efficient _ f3 ->
efficient _ (fun n (a : A n) => f3 n (f1 n a) (f2 n a)).