intros a b gamma work context j spec0.
unfold search_spec in |- *.
intros below_goal below_gamma below_context sound0 minimal0.
elim below_goal; clear below_goal; intros below_a below_b.
elim spec0; clear spec0; try assumption.
intros derivable_i.
apply derivable.
elim derivable_i; clear derivable_i; intros t der_t.
apply Derivable_Intro with (Abs a t).
apply ImpIntro; assumption.
intros k k_is_mon k_forces_gamma k_notforces_b.
apply refutable with k; try assumption.
apply forces_gamma_cons_gamma_tail with a; assumption.
intros forces_ab.
apply k_notforces_b.
apply forces_a_a_imp_b__forces_b_t with a; try assumption.
apply forces_gamma_cons_gamma_head with gamma work; assumption.
apply below_cons_list; assumption.
apply below_cons_list; assumption.
apply sound_cons_gamma_cons_context; assumption.
apply minimal_cons_gamma_cons_context; assumption.
Qed.

Lemma rule_gamma_a :
forall (a : form) (gamma : flist) (work : nf_list)
(context : flist) (j j1 : Int),
Less j j1 ->
search_spec (Atom j) (Imp a (Atom j) :: gamma) work
(Imp a (Atom j) :: context) j1 -> search_spec a gamma work context j.