apply preuve_compilation_id.
simple induction e.
intros.
inversion_clear H0.
inversion_clear H3.
do 6 intro.
inversion_clear H0.
intro; intro.
inversion_clear H0.
simple inversion H2.
injection H0; do 3 intro.
try rewrite <- H3; try rewrite H7.
do 2 intro.
inversion_clear H8.
inversion_clear H9.
do 2 intro.
inversion_clear H8.
try rewrite <- H4; try rewrite H6.
exists CV1.
split.
exact H10.
intro; apply CDR.
elim H8; trivial.
injection H4; do 3 intro.
try rewrite H5; try rewrite H7; try rewrite H6; try rewrite H0.
do 4 intro.
inversion_clear H10.
simple inversion H11.
injection H12; try rewrite H10; do 2 intro.
elim H9; elim H15; auto.
try rewrite H13; injection H14; do 2 intro; try rewrite H12; try rewrite H10.
try rewrite <- H15.
do 4 intro.
inversion_clear H18.
cut (ML_DS m0 (id x) V).
cut (Traduction s0 (id x) C0).
intros Hyp_Trad Hyp_ML.
elim (H s0 H1 V Hyp_ML C0 Hyp_Trad CV0 H19).
do 2 intro.
elim H18; do 2 intro.
exists x0.
split.
exact H21.
intro.
apply
(o_DS (ETcons (Cam_pair CV0 CV1) s2) (ETcons CV0 s2) (ETcons x0 s2) car C0).
apply CAR.
exact (H22 s2).
apply Trad_var.
exact H17.
apply IDENT.
exact H8.
Qed.
(*****************************************************************************)
(*                     Case where E is an abstraction                        *)
(*****************************************************************************)

(* Specifications: *)
Lemma Proof_abstraction :
forall (E : MLexp) (p : Pat), compilation (lambda p E).