Ltac prove_semax_prog_old :=
split3; [ | | split3; [ | | split]];
[ reflexivity || fail "duplicate identifier in prog_defs"
| reflexivity || fail "unaligned initializer"
| solve [compute; repeat f_equal; apply proof_irr] || fail "comp_specs not equal"
|
| reflexivity || fail "match_globvars failed"
| match goal with |- match ?A with _ => _ end =>
let fs := fresh "fs" in set (fs := A); hnf in fs; subst fs; cbv iota beta;
lazymatch goal with
| |- False => fail "Can't find _main in Gprog"
| |- _ =>  idtac
end;
(eexists; reflexivity) ||
fail "Funspec of _main is not in the proper form"
end
];
repeat (apply semax_func_cons_ext_vacuous; [reflexivity | reflexivity | ]).
(**************MATERIAL FOR NEW TACTIC prove_semax_prog STARTS HERE ***************)

Lemma extract_compEnv t a (H: build_composite_env t = Errors.OK a)
d p m w:
a = prog_comp_env (Clightdefs.mkprogram t d p m w).