(** The [transf_instr_spec] predicate relates one instruction in the initial code with its possible transformations in the optimized code. *)
Inductive transf_instr_spec (f: function): instruction -> instruction -> Prop :=
| transf_instr_tailcall: forall sig ros args res s,
f.(fn_stacksize) = 0 ->
is_return_spec f s res ->
transf_instr_spec f (Icall sig ros args res s) (Itailcall sig ros args)
| transf_instr_default: forall i,
transf_instr_spec f i i.

Lemma transf_instr_charact:
forall f pc instr,
f.(fn_stacksize) = 0 ->
transf_instr_spec f instr (transf_instr f pc instr).