Remark forces_ngamma_del_ai :
 forall (i : Int) (work : nf_list) (ds : disjs) (ni : nested_imps)
   (ai ai' : atomic_imps) (a : atoms) (k : kripke_tree),
 EQUIV_DEL nf_list i ai ai' ->
 forces_ngamma work ds ni ai a k -> forces_ngamma work ds ni ai' a k.

(* Specifications: *)
Lemma forces_ngamma_del_ai_rev : forall (i : Int) (bs work : nf_list) (ds : disjs) (ni : nested_imps) (ai ai' : atomic_imps) (a : atoms) (k : kripke_tree), LOOKUP nf_list i ai bs -> (forall (n : nat) (b : normal_form), my_nth normal_form n bs b -> forces_t k (nf2form (AImp i b))) -> EQUIV_DEL nf_list i ai ai' -> forces_ngamma work ds ni ai' a k -> forces_ngamma work ds ni ai a k.
Lemma forces_ngamma_eqv : forall (ni1 ni2 : nested_imps) (work : nf_list) (ds : disjs) (ai : atomic_imps) (a : atoms) (k : kripke_tree), eqv_ni ni1 ni2 -> forces_ngamma work ds ni2 ai a k -> forces_ngamma work ds ni1 ai a k.
Lemma forces_ngamma_shift_ds_work : forall (i j : Int) (work : nf_list) (ds : disjs) (ni : nested_imps) (ai : atomic_imps) (a : atoms) (k : kripke_tree), forces_ngamma work ((i, j) :: ds) ni ai a k -> forces_ngamma (NDisj i j :: work) ds ni ai a k.
Lemma forces_ngamma_shift_work_ds : forall (i j : Int) (work : nf_list) (ds : disjs) (ni : nested_imps) (ai : atomic_imps) (a : atoms) (k : kripke_tree), forces_ngamma (NDisj i j :: work) ds ni ai a k -> forces_ngamma work ((i, j) :: ds) ni ai a k.
Lemma forces_ngamma_shift_ni_work : forall (x : nested_imp) (work : nf_list) (ds : disjs) (ni : nested_imps) (ai : atomic_imps) (a : atoms) (k : kripke_tree), forces_ngamma work ds (x :: ni) ai a k -> forces_ngamma (NImp_NF (nested_imp2nimp x) :: work) ds ni ai a k.
Lemma forces_ngamma_shift_work_ni : forall (x : nested_imp) (work : nf_list) (ds : disjs) (ni : nested_imps) (ai : atomic_imps) (a : atoms) (k : kripke_tree), forces_ngamma (NImp_NF (nested_imp2nimp x) :: work) ds ni ai a k -> forces_ngamma work ds (x :: ni) ai a k.
Lemma forces_ngamma_shift_ai_work_new : forall (i : Int) (b : normal_form) (work : nf_list) (ds : disjs) (ni : nested_imps) (ai ai' : atomic_imps) (a : atoms) (k : kripke_tree), (forall bs : nf_list, LOOKUP nf_list i ai bs -> False) -> EQUIV_INS nf_list i (cons b) nf_nil ai ai' -> forces_ngamma work ds ni ai' a k -> forces_ngamma (AImp i b :: work) ds ni ai a k.
Lemma forces_ngamma_shift_ai_work_old : forall (i : Int) (b : normal_form) (work : nf_list) (ds : disjs) (ni : nested_imps) (bs : nf_list) (ai ai' : atomic_imps) (a : atoms) (k : kripke_tree), LOOKUP nf_list i ai bs -> EQUIV_INS nf_list i (cons b) nf_nil ai ai' -> forces_ngamma work ds ni ai' a k -> forces_ngamma (AImp i b :: work) ds ni ai a k.
Lemma forces_ngamma_shift_work_ai : forall (i : Int) (b : normal_form) (work : nf_list) (ds : disjs) (ni : nested_imps) (ai ai' : atomic_imps) (a : atoms) (k : kripke_tree), EQUIV_INS nf_list i (cons b) nf_nil ai ai' -> forces_ngamma (AImp i b :: work) ds ni ai a k -> forces_ngamma work ds ni ai' a k.
Lemma forces_ngamma_shift_a_work : forall (i : Int) (work : nf_list) (ds : disjs) (ni : nested_imps) (ai : atomic_imps) (a a' : atoms) (k : kripke_tree), EQUIV_INS unit i (fun _ : unit => tt) tt a a' -> forces_ngamma work ds ni ai a' k -> forces_ngamma (NAtom i :: work) ds ni ai a k.
Lemma forces_ngamma_shift_work_a : forall (i : Int) (work : nf_list) (ds : disjs) (ni : nested_imps) (ai : atomic_imps) (a a' : atoms) (k : kripke_tree), EQUIV_INS unit i (fun _ : unit => tt) tt a a' -> forces_ngamma (NAtom i :: work) ds ni ai a k -> forces_ngamma work ds ni ai a' k.
Lemma forces_ngamma_shift_work_ni_x_ni : forall (x : nested_imp) (work : nf_list) (ds : disjs) (ni1 ni2 : nested_imps) (ai : atomic_imps) (a : atoms) (k : kripke_tree), forces_ngamma (NImp_NF (nested_imp2nimp x) :: work) ds (ni1 ++ ni2) ai a k -> forces_ngamma work ds (ni1 ++ x :: ni2) ai a k.
Lemma forces_ngamma_shift_ni_x_ni_work : forall (x : nested_imp) (work : nf_list) (ds : disjs) (ni1 ni2 : nested_imps) (ai : atomic_imps) (a : atoms) (k : kripke_tree), forces_ngamma work ds (ni1 ++ x :: ni2) ai a k -> forces_ngamma (NImp_NF (nested_imp2nimp x) :: work) ds (ni1 ++ ni2) ai a k.
Lemma forces_ngamma_cons_work_weak : forall (b c : normal_form) (work : nf_list) (ds : disjs) (ni : nested_imps) (ai : atomic_imps) (a : atoms) (k : kripke_tree), Is_Monotone_kripke_tree k -> (forces_t k (nf2form b) -> forces_t k (nf2form c)) -> forces_ngamma (b :: work) ds ni ai a k -> forces_ngamma (c :: work) ds ni ai a k.
Lemma forces_ngamma_cons_work_weak2 : forall (b c d : normal_form) (work : nf_list) (ds : disjs) (ni : nested_imps) (ai : atomic_imps) (a : atoms) (k : kripke_tree), Is_Monotone_kripke_tree k -> (forces_t k (nf2form b) -> forces_t k (nf2form c) -> forces_t k (nf2form d)) -> forces_ngamma (b :: c :: work) ds ni ai a k -> forces_ngamma (d :: work) ds ni ai a k.
Lemma forces_ngamma_shift_work_ai_weak : forall (i : Int) (bs work : nf_list) (ds : disjs) (ni : nested_imps) (ai ai' : atomic_imps) (a : atoms) (k : kripke_tree), Is_Monotone_kripke_tree k -> LOOKUP nf_list i ai bs -> EQUIV_DEL nf_list i ai ai' -> forces_ngamma (bs ++ work) ds ni ai' a k -> forces_ngamma work ds ni ai a k.
Lemma forces_ngamma_shift_work_ai_strength : forall (i : Int) (bs work : nf_list) (ds : disjs) (ni : nested_imps) (ai ai' : atomic_imps) (a a' : atoms) (k : kripke_tree), Is_Monotone_kripke_tree k -> EQUIV_INS unit i (fun _ : unit => tt) tt a a' -> LOOKUP nf_list i ai bs -> EQUIV_DEL nf_list i ai ai' -> forces_ngamma work ds ni ai a' k -> forces_ngamma (bs ++ work) ds ni ai' a' k.