intros context l.
elim l; clear l.
intros a b der_ab der_a.
apply der_ab; assumption.
simpl in |- *; intros i l ih a b der_ab der_a.
apply ih with (a := Imp (Atom i) a); try assumption.
intros context' der_ia.
elim der_ia; clear der_ia; intros t der_ia.
elim (der_ab (Atom i :: context')).
intros s der_b.
apply Derivable_Intro with (Abs (Atom i) s).
apply ImpIntro; assumption.
apply Derivable_Intro with (App (Atom i) (Shift t) (Var 0)).
apply ImpElim.
apply ShiftIntro; assumption.
apply ByAssumption.
apply My_NthO.
Qed.

(* Specifications: *)
Lemma derivable_vimp2 :
forall (context : flist) (l : list Int) (a b c : form),
(forall context : flist,
Derivable context a -> Derivable context b -> Derivable context c) ->
Derivable context (vimp l a) ->
Derivable context (vimp l b) -> Derivable context (vimp l c).