intros goal l a gamma work context j spec0.
unfold search_spec in |- *.
intros below_goal below_gamma below_context sound0 minimal0.
elim spec0; clear spec0; try assumption.
intros derivable_i; apply derivable; assumption.
intros k k_is_mon k_forces_gamma k_notforces_goal.
apply refutable with k; try assumption.
apply forces_gamma_cons_gamma_weak with (vimp l a); try assumption.
intros forces_la.
apply forces_vimp with a.
intros; left; assumption.
assumption.
apply below_list_weak with (vimp l (OrF a Falsum)); try assumption.
intros below_x.
apply below_vimp with (OrF a Falsum); try assumption.
intros j0 below_or; elim below_or; intros; assumption.
apply sound_cons_gamma_weak with (vimp l (OrF a Falsum)); try assumption.
intros der.
apply derivable_vimp with (OrF a Falsum); try assumption.
intros context0 der0.
apply derivable_a_or_falsum__derivable_a; assumption.
apply minimal_cons_gamma_weak with (vimp l (OrF a Falsum)); try assumption.
intros k k_is_mon k_forces_la.
apply forces_vimp with a; try assumption.
intros; left; assumption.
Qed.

Lemma rule_vimp_atom_or_a_gamma :
forall (goal : form) (l : list Int) (i : Int) (a : form)
(gamma : flist) (work : nf_list) (context : flist)
(j j1 : Int),
Less j j1 ->
search_spec goal (Imp (Atom j) a :: gamma) (nvimp l (NDisj i j) :: work)
(vimp l (OrF (Atom i) (Atom j)) :: Imp (Atom j) a :: context) j1 ->
search_spec goal (vimp l (OrF (Atom i) a) :: gamma) work context j.