intros goal l a0 a1 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_weak2 with (vimp l (Imp a0 b)) (vimp l (Imp a1 b));
try assumption.
intros forces1 forces2.
apply forces_vimp2 with (Imp a0 b) (Imp a1 b); try assumption.
intros k' suc1 forces_a0b forces_a1b.
unfold forces_t2 in |- *;
apply forces_a0_imp_b_and_a1_imp_b__forces_a0_or_a1_imp_b;
try assumption.
apply below_list_weak2 with (vimp l (Imp (OrF a0 a1) b)); try assumption.
intros below1.
split.
apply below_vimp with (Imp (OrF a0 a1) b); try assumption.
intros j' below_ab; elim below_ab; clear below_ab; intros below_a below_b.
elim below_a; clear below_a; intros below_a0 below_a1.
split; assumption.
apply below_vimp with (Imp (OrF a0 a1) b); try assumption.
intros j' below_ab; elim below_ab; clear below_ab; intros below_a below_b.
elim below_a; clear below_a; intros below_a0 below_a1.
split; assumption.
apply sound_cons_gamma_weak2 with (vimp l (Imp (OrF a0 a1) b));
try assumption.
intros der.
split.
apply derivable_vimp with (Imp (OrF a0 a1) b); try assumption.
intros context' der'.
apply (derivable_a0_or_a1_imp_b__derivable_a0_imp_b context' a0 a1 b der');
assumption.
apply derivable_vimp with (Imp (OrF a0 a1) b); try assumption.
intros context' der'.
apply (derivable_a0_or_a1_imp_b__derivable_a1_imp_b context' a0 a1 b der');
assumption.
apply minimal_cons_gamma_weak2 with (vimp l (Imp (OrF a0 a1) b));
try assumption.
intros k k_is_mon forces1 forces2.
apply forces_vimp2 with (Imp a0 b) (Imp a1 b); try assumption.
intros k' suc1 forces_a0b forces_a1b.
unfold forces_t2 in |- *;
apply forces_a0_imp_b_and_a1_imp_b__forces_a0_or_a1_imp_b;
try assumption.
Qed.

(* Specifications: *)
Lemma rule_vimp_or_imp_gamma_new :
forall (goal : form) (l : list Int) (a0 a1 b : form)
(gamma : flist) (work : nf_list) (context : flist)
(j j1 : Int),
Less j j1 ->
search_spec goal
(vimp l (Imp a0 (Atom j))
:: vimp l (Imp a1 (Atom j)) :: vimp (j :: nil) b :: gamma) work
(vimp l (Imp (OrF a0 a1) (Atom j)) :: Imp (Atom j) b :: context) j1 ->
search_spec goal (vimp l (Imp (OrF a0 a1) b) :: gamma) work context j.