Fixpoint cs_preserve_members (coeq: PTree.t bool) (m: members): bool :=
  match m with
  | nil => true
  | ((_, t) :: m) => andb (cs_preserve_type coeq t) (cs_preserve_members coeq m)
  end.Definition cs_preserve_env: PTree.t bool :=
  let l := composite_reorder.rebuild_composite_elements (@cenv_cs cs_to) in
  fold_right (fun (ic: positive * composite) (T0: PTree.t bool) => let (i, co) := ic in let T := T0 in PTree.set i (cs_preserve_members T (co_members co)) T) (PTree.empty _) l.

(* Specifications: *)
Lemma aux1: forall T co, (fix fm (l : list (ident * type * bool)) : bool := match l with | nil => true | (_, _, b) :: l' => b && fm l' end) (map (fun it0 : positive * type => let (i0, t0) := it0 in (i0, t0, type_func.F (fun t : type => match t with | Tstruct _ _ | Tunion _ _ => false | _ => true end) (fun (b : bool) (_ : type) (_ : Z) (_ : attr) => b) (fun (b : bool) (id : ident) (_ : attr) => test_aux b id) (fun (b : bool) (id : ident) (_ : attr) => test_aux b id) T t0)) (co_members co)) = cs_preserve_members T (co_members co).
Lemma aux2: type_func.Env (fun t : type => match t with | Tstruct _ _ | Tunion _ _ => false | _ => true end) (fun (b : bool) (_ : type) (_ : Z) (_ : attr) => b) (fun (b : bool) (id : ident) (_ : attr) => test_aux b id) (fun (b : bool) (id : ident) (_ : attr) => test_aux b id) (fun _ : struct_or_union => fix fm (l : list (ident * type * bool)) : bool := match l with | nil => true | (_, _, b) :: l' => b && fm l' end) (composite_reorder.rebuild_composite_elements cenv_cs) = cs_preserve_env.