(* File: NSound.v  (last edited on 27/10/2000) (c) Klaus Weich  *)
Require Export Le_Ks.
Require Export Derivable_Tools.
Definition nsound (work : nf_list) (ds : disjs) (ni : nested_imps)
(ai : atomic_imps) (a : atoms) (context : flist) :=
forall c : normal_form,
in_ngamma work ds ni ai a c -> Derivable context (nf2form c).
intros work ds ni1 ni2 ai a context eq12 sound.
unfold nsound in |- *.
intros c in_ngamma.
apply sound.
apply in_ngamma_eqv with ni2.
apply eqv_sym; assumption.
assumption.
Qed.
intros work ds ni1 ni2 ai a context le sound.
unfold nsound in |- *.
intros c in_ngamma.
apply sound.
apply in_ngamma_ge with ni2; assumption.
Qed.
intros work ds ni1 ni2 ai a context le sound.
unfold nsound in |- *.
intros c in_ngamma.
apply sound.
apply in_ngamma_le with ni2; assumption.
Qed.
(***********************************************************************)
intros i j work ds ni ai a context sound.
unfold nsound in |- *.
intros c in_ngamma.
apply sound.
apply in_ngamma_shift_ds_work; assumption.
Qed.

Lemma nsound_shift_work_ni :
forall (x : nested_imp) (work : nf_list) (ds : disjs)
(ni : nested_imps) (ai : atomic_imps) (a : atoms)
(context : flist),
nsound (NImp_NF (nested_imp2nimp x) :: work) ds ni ai a context ->
nsound work ds (x :: ni) ai a context.