Section Consistency_Induction_Step.
Context (cenv: composite_env)
(env: PTree.t A)
(l: list (positive * composite))
(i0: positive)
(co0: composite).
Hypothesis NOT_IN_LIST: ~ In i0 (map fst l).
Hypothesis RDT_list: Forall (relative_defined_type l) (map snd (co_members co0)).
Hypothesis CENV0: PTree.get i0 cenv = Some co0.
Hypothesis IH_In_equiv: forall i, In i (map fst l) <-> In i (map fst (PTree.elements env)).
Hypothesis IH_RDT:
forall i co a,
PTree.get i cenv = Some co ->
PTree.get i env = Some a ->
Forall (relative_defined_type (PTree.elements env)) (map snd (co_members co)).
Hypothesis IH_main:
Consistent cenv env.

(* Specifications: *)
Lemma NOT_IN: ~ In i0 (map fst (PTree.elements env)).
Lemma RDT_PTree: Forall (relative_defined_type (PTree.elements env)) (map snd (co_members co0)).
Lemma establish_In_equiv:
forall i, In i (map fst ((i0, co0) :: l)) <-> In i (map fst (PTree.elements (env_rec i0 co0 env))).
Lemma establish_RDT:
forall i co a,
PTree.get i cenv = Some co ->
PTree.get i (env_rec i0 co0 env) = Some a ->
Forall (relative_defined_type (PTree.elements (env_rec i0 co0 env))) (map snd (co_members co)).
Lemma establish_main:
Consistent cenv (env_rec i0 co0 env).