intros goal l b c 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_weak with (vimp l c); try assumption.
intros forces_lc.
apply forces_vimp with c; try assumption.
intros.
unfold forces_t2 in |- *; apply forces_b__forces_a_imp_b; try assumption.
apply kripke_tree_kripke_model; assumption.
apply below_list_weak with (vimp l (Imp (Imp Falsum b) c)); try assumption.
intros below_lc.
apply below_vimp with (Imp (Imp Falsum b) c); try assumption.
intros j' below_ab; elim below_ab; clear below_ab; intros below_a below_b.
assumption.
apply sound_cons_gamma_weak with (vimp l (Imp (Imp Falsum b) c));
try assumption.
intros der.
apply derivable_vimp with (Imp (Imp Falsum b) c).
intros context' der'.
apply derivable_falsum_imp_b_imp_c__derivable_c with b; assumption.
assumption.
apply minimal_cons_gamma_weak with (vimp l (Imp (Imp Falsum b) c));
try assumption.
intros k k_is_mon forces1.
apply forces_vimp with c; try assumption.
intros.
unfold forces_t2 in |- *; apply forces_b__forces_a_imp_b; try assumption.
apply kripke_tree_kripke_model; assumption.
Qed.

(* Specifications: *)
Lemma rule_vimp_imp_falsum_imp_gamma :
forall (goal : form) (l : list Int) (a c : form) (gamma : flist)
(work : nf_list) (context : flist) (j j1 : Int),
Less j j1 ->
search_spec goal (vimp l (Imp (Imp a (Atom j)) c) :: gamma) work
(vimp l (Imp (Imp a (Atom j)) c) :: context) j1 ->
search_spec goal (vimp l (Imp (Imp a Falsum) c) :: gamma) work context j.