apply preuve_compilation.
intros e V ML_c s C Trad_c hab CV Eq.
inversion_clear ML_c.
exists (val (def_op c)).
split.
exact (Eq_op c).
inversion_clear Trad_c.
intro s0.
exact (QUO s0 CV (def_op c)).
Qed.
(*****************************************************************************)
(*                    Case where E is an identifier                          *)
(* This case is special in the sens that we cannot use the predicate         *)
(*compilation because the variables of the formulation must be introduced    *)
(* in a very precise order.                                                  *)
(* Of course we could avoid a new definition using a the Cut tactic          *)
(* The point is that in this case only we must first do an induction on the  *)
(* ML environment in which we evaluate our expression (an identifier!)       *)
(*****************************************************************************)
Inductive compilation_id (E : MLexp) : Prop :=
preuve_compilation_id :
(forall (e : MLenv) (s : Squelette),
Habite e s ->
forall V : MLval,
ML_DS e E V ->
forall C : Commande,
Traduction s E C ->
forall CV : CSem_val,
Equiv_env e CV ->
exists CV1 : CSem_val,
Equiv_val V CV1 /\
(forall s : Etat, CAM_DS (ETcons CV s) C (ETcons CV1 s))) ->
compilation_id E.

(* Specifications: *)
Lemma Proof_ident : forall x : Pat, compilation_id (id x).
intro.