Inductive in_ngamma_del_ai_rev_spec (i : Int) (bs : nf_list)
(c : normal_form) : Set :=
    In_NGamma_Del_AI_Rev_Spec_Intro :
      forall (b : normal_form) (n : nat),
      my_nth normal_form n bs b ->
      c = AImp i b -> in_ngamma_del_ai_rev_spec i bs c.Inductive in_ngamma_del_ai_rev_spec (i : Int) (bs : nf_list)
(c : normal_form) : Set :=
    In_NGamma_Del_AI_Rev_Spec_Intro :
      forall (b : normal_form) (n : nat),
      my_nth normal_form n bs b ->
      c = AImp i b -> in_ngamma_del_ai_rev_spec i bs c.

(* Specifications: *)
Lemma in_ngamma_del_ai_rev : forall (work : nf_list) (ds : disjs) (ni : nested_imps) (i : Int) (bs : nf_list) (ai ai' : atomic_imps) (a : atoms) (c : normal_form), LOOKUP nf_list i ai' bs -> EQUIV_DEL nf_list i ai' ai -> in_ngamma work ds ni ai' a c -> in_ngamma work ds ni ai a c + in_ngamma_del_ai_rev_spec i bs c.
Lemma in_ngamma_ins_a_tail : forall (work : nf_list) (ds : disjs) (ni : nested_imps) (ai : atomic_imps) (i : Int) (a a' : atoms) (c : normal_form), EQUIV_INS unit i (fun _ : unit => tt) tt a a' -> in_ngamma work ds ni ai a c -> in_ngamma work ds ni ai a' c.
Lemma in_ngamma_ins_a_head : forall (work : nf_list) (ds : disjs) (ni : nested_imps) (ai : atomic_imps) (i : Int) (a a' : atoms), EQUIV_INS unit i (fun _ : unit => tt) tt a a' -> in_ngamma work ds ni ai a' (NAtom i).
Lemma in_ngamma_ins_a_rev : forall (work : nf_list) (ds : disjs) (ni : nested_imps) (ai : atomic_imps) (i : Int) (a a' : atoms) (c : normal_form), EQUIV_INS unit i (fun _ : unit => tt) tt a a' -> in_ngamma work ds ni ai a' c -> in_ngamma work ds ni ai a c + {c = NAtom i}.
Lemma in_ngamma_shift_work_ds : forall (i j : Int) (work : nf_list) (ds : disjs) (ni : nested_imps) (ai : atomic_imps) (a : atoms) (c : normal_form), in_ngamma (NDisj i j :: work) ds ni ai a c -> in_ngamma work ((i, j) :: ds) ni ai a c.
Lemma in_ngamma_shift_ds_work : forall (i j : Int) (work : nf_list) (ds : disjs) (ni : nested_imps) (ai : atomic_imps) (a : atoms) (c : normal_form), in_ngamma work ((i, j) :: ds) ni ai a c -> in_ngamma (NDisj i j :: work) ds ni ai a c.
Lemma in_ngamma_shift_work_ni : forall (x : nested_imp) (work : nf_list) (ds : disjs) (ni : nested_imps) (ai : atomic_imps) (a : atoms) (c : normal_form), in_ngamma (NImp_NF (nested_imp2nimp x) :: work) ds ni ai a c -> in_ngamma work ds (x :: ni) ai a c.
Lemma in_ngamma_shift_ni_work : forall (x : nested_imp) (work : nf_list) (ds : disjs) (ni : nested_imps) (ai : atomic_imps) (a : atoms) (c : normal_form), in_ngamma work ds (x :: ni) ai a c -> in_ngamma (NImp_NF (nested_imp2nimp x) :: work) ds ni ai a c.
Lemma in_ngamma_shift_work_ni_x_ni : forall (x : nested_imp) (work : nf_list) (ds : disjs) (ni1 ni2 : nested_imps) (ai : atomic_imps) (a : atoms) (c : normal_form), in_ngamma (NImp_NF (nested_imp2nimp x) :: work) ds (ni1 ++ ni2) ai a c -> in_ngamma work ds (ni1 ++ x :: ni2) ai a c.
Lemma in_ngamma_shift_ni_x_ni_work : forall (x : nested_imp) (work : nf_list) (ds : disjs) (ni1 ni2 : nested_imps) (ai : atomic_imps) (a : atoms) (c : normal_form), in_ngamma work ds (ni1 ++ x :: ni2) ai a c -> in_ngamma (NImp_NF (nested_imp2nimp x) :: work) ds (ni1 ++ ni2) ai a c.
Lemma in_ngamma_shift_work_ai_new : forall (work : nf_list) (ds : disjs) (ni : nested_imps) (i : Int) (b : normal_form) (ai ai' : atomic_imps) (a : atoms) (c : normal_form), (forall bs : nf_list, LOOKUP nf_list i ai bs -> False) -> EQUIV_INS nf_list i (cons b) nf_nil ai ai' -> in_ngamma (AImp i b :: work) ds ni ai a c -> in_ngamma work ds ni ai' a c.
Lemma in_ngamma_shift_work_ai_old : forall (work : nf_list) (ds : disjs) (ni : nested_imps) (i : Int) (b : normal_form) (bs : nf_list) (ai ai' : atomic_imps) (a : atoms) (c : normal_form), LOOKUP nf_list i ai bs -> EQUIV_INS nf_list i (cons b) nf_nil ai ai' -> in_ngamma (AImp i b :: work) ds ni ai a c -> in_ngamma work ds ni ai' a c.
Lemma in_ngamma_shift_ai_work : forall (work : nf_list) (ds : disjs) (ni : nested_imps) (i : Int) (b : normal_form) (ai ai' : atomic_imps) (a : atoms) (c : normal_form), EQUIV_INS nf_list i (cons b) nf_nil ai ai' -> in_ngamma work ds ni ai' a c -> in_ngamma (AImp i b :: work) ds ni ai a c.
Lemma in_ngamma_shift_work_a : forall (work : nf_list) (ds : disjs) (ni : nested_imps) (ai : atomic_imps) (i : Int) (a a' : atoms) (c : normal_form), EQUIV_INS unit i (fun _ : unit => tt) tt a a' -> in_ngamma (NAtom i :: work) ds ni ai a c -> in_ngamma work ds ni ai a' c.
Lemma in_ngamma_shift_a_work : forall (work : nf_list) (ds : disjs) (ni : nested_imps) (ai : atomic_imps) (i : Int) (a a' : atoms) (c : normal_form), EQUIV_INS unit i (fun _ : unit => tt) tt a a' -> in_ngamma work ds ni ai a' c -> in_ngamma (NAtom i :: work) ds ni ai a c.