intros goal i b work ds ni ai a context forces_i premiss.
unfold nsearch_spec in |- *; intros complete sound mon.
elim premiss; clear premiss.
intros ni1 less1 complete1 spec1.
apply NSearch_Res with ni1; try assumption.
apply deco_sound_cons_work_weak with b; try assumption.
intros.
apply forces_b__forces_a_imp_b_t with (a := Atom i) (b := nf2form b);
assumption.
elim spec1; clear spec1.
intros derivable_goal; apply NDerivable; assumption.
intros k k_is_mon k_forces_ngamma k_nonforces_goal.
apply NRefutable with k; try assumption.
apply forces_ngamma_cons_work_weak with b; try assumption.
intros forces_b.
simpl in |- *; apply forces_b__forces_a_imp_b_t; assumption.
(* side premisses: Elim premiss.  *)
apply deco_sound_cons_work_strength with (AImp i b); try assumption.
intros k k_is_mon k_forces_ngamma.
apply forces_a_a_imp_b__forces_b_t with (Atom i); try assumption.
apply k_forces_ngamma with (c := NAtom i).
apply In_Atoms; assumption.
apply k_forces_ngamma with (c := AImp i b).
apply in_ngamma_cons_work_head.
apply nsound_cons_work_weak with (AImp i b); try assumption.
intros der_ab.
apply derivable_a_a_imp_b__derivable_b with (Atom i); try assumption.
apply sound with (c := NAtom i).
apply In_Atoms; assumption.
apply nminimal_cons_work_weak with (AImp i b); try assumption.
intros k k_is_mon forces_b.
simpl in |- *; apply forces_b__forces_a_imp_b_t; assumption.
Qed.
(****************************************************************)

Lemma left_p_imp_ai :
forall (goal i : Int) (work : nf_list) (ds : disjs)
(ni : nested_imps) (bs : nf_list) (ai ai' : atomic_imps)
(a a' : atoms) (context : flist),
LOOKUP nf_list i ai bs ->
EQUIV_DEL nf_list i ai ai' ->
(forall d : unit, LOOKUP unit i a d -> False) ->
EQUIV_INS unit i (fun _ : unit => tt) tt a a' ->
nsearch_spec goal (bs ++ work) ds ni ai' a' context ->
nsearch_spec goal (NAtom i :: work) ds ni ai a context.