Remark permutation_norepet:
forall (A: Type) (l l': list A), Permutation l l' -> list_norepet l -> list_norepet l'.

(* Specifications: *)
Lemma build_compilenv_sound:
forall f cenv sz,
build_compilenv f = (cenv, sz) ->
list_norepet (map fst (Csharpminor.fn_vars f)) ->
cenv_compat cenv (Csharpminor.fn_vars f) sz /\ cenv_separated cenv (Csharpminor.fn_vars f).
Lemma assign_variables_domain:
forall id vars cesz,
(fst (assign_variables cesz vars))!id <> None ->
(fst cesz)!id <> None \/ In id (map fst vars).
Lemma build_compilenv_domain:
forall f cenv sz id ofs,
build_compilenv f = (cenv, sz) ->
cenv!id = Some ofs -> In id (map fst (Csharpminor.fn_vars f)).
Lemma build_compilenv_sound:
forall f cenv sz,
build_compilenv f = (cenv, sz) ->
list_norepet (map fst (Csharpminor.fn_vars f)) ->
cenv_compat cenv (Csharpminor.fn_vars f) sz /\ cenv_separated cenv (Csharpminor.fn_vars f).
Lemma assign_variables_domain:
forall id vars cesz,
(fst (assign_variables cesz vars))!id <> None ->
(fst cesz)!id <> None \/ In id (map fst vars).
Lemma build_compilenv_domain:
forall f cenv sz id ofs,
build_compilenv f = (cenv, sz) ->
cenv!id = Some ofs -> In id (map fst (Csharpminor.fn_vars f)).