intros goal l b 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 der_goal; 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; try assumption.
apply forces_vimp0.
intros k' suc1.
unfold forces_t in |- *; unfold forces_t2 in |- *; simpl in |- *.
intros; elimtype False; assumption.
apply below_cons_list_tail with (vimp l (Imp Falsum b)); assumption.
apply sound_cons_gamma_tail with (vimp l (Imp Falsum b)); assumption.
unfold minimal in |- *.
intros c k k_is_mon k_forces_gamma in_c.
apply minimal0; try assumption.
apply forces_gamma_cons_gamma; try assumption.
apply forces_vimp0.
intros k' suc1.
unfold forces_t in |- *; unfold forces_t2 in |- *; simpl in |- *.
intros; elimtype False; assumption.
Qed.
(**********************************************************)
(* rules for   ...(cons (vimp l (Imp (Atom i) b)) gamma)... *)

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