intros goal i work ds ni bs ai ai' a a' context lookup_bs equiv_del
notlookup_i equiv_ins 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_shift_a_work with a'; try assumption.
apply deco_sound_shift_work_ai_weak with i bs ai'; 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_shift_a_work with a'; try assumption.
apply forces_ngamma_shift_work_ai_weak with i bs ai'; assumption.
(* side premisses: Elim premiss.  *)
apply deco_sound_shift_work_ai_strength with i ai a; try assumption.
apply deco_sound_shift_work_a with i a; assumption.
apply nsound_shift_work_ai_strength with i ai a; try assumption.
apply nsound_shift_work_a with i a; assumption.
apply nminimal_shift_work_ai_weak with i ai; try assumption.
apply nminimal_shift_work_a with i a; assumption.
Qed.
(****************************************************************)

Lemma left_disj :
forall (goal : Int) (work : nf_list) (i j : Int) (ds : disjs)
(ni : nested_imps) (ai : atomic_imps) (a : atoms)
(context : flist),
(forall ni1 : nested_imps,
le_ni ni ni1 ->
nsearch_spec goal (NAtom i :: work) ds ni1 ai a (Atom i :: context)) ->
(forall ni2 : nested_imps,
eqv_ni ni2 ni ->
nsearch_spec goal (NAtom j :: work) ds ni2 ai a (Atom j :: context)) ->
nsearch_spec goal work ((i, j) :: ds) ni ai a context.