intros goal l a b gamma work context j j1 less1 spec0.
apply
search_spec_subst_gamma_pos
with (j1 := j1) (a := a) (b := vimp l (OrF (Atom j) b));
try assumption; clear spec0.
intros below_c.
generalize (below_vimp_tail j l (OrF a b) below_c).
generalize (below_vimp_head j l (OrF a b) below_c); clear below_c.
intros below_ab below_l; elim below_ab; clear below_ab;
intros below_a below_b.
split.
assumption.
split.
apply below_vimp_split.
intros i0 in0.
apply less_trans with j; try assumption.
apply below_l; assumption.
split.
assumption.
apply below_form_less_below_form with j; try assumption.
rewrite (subst_vimp_head j a l (OrF (Atom j) b)); try assumption.
simpl in |- *.
rewrite (subst_form_below j a b); try assumption.
rewrite (equal_dec_refl j form a (Atom j)).
trivial.
intros k k_is_mon forces1 forces2.
apply forces_vimp with (OrF (Atom j) b).
intros k' suc1 forces_jb.
elim forces_jb; clear forces_jb.
intros; left.
change (forces_t2 k k' a) in |- *.
apply (forces2 k'); assumption.
intros; right; assumption.
assumption.
Qed.
(**********************************************************)
(* rules for   ...(cons (vimp l (Imp Falsum b)) gamma)... *)

Lemma rule_vimp_falsum_imp_b_gamma :
forall (goal : form) (l : list Int) (b : form) (gamma : flist)
(work : nf_list) (context : flist) (j : Int),
search_spec goal gamma work context j ->
search_spec goal (vimp l (Imp Falsum b) :: gamma) work context j.