(** Relational presentation for the transformation of functions, fundefs, and variables. *)
Inductive tr_function: Csyntax.function -> Clight.function -> Prop :=
| tr_function_intro: forall f tf,
tr_stmt f.(Csyntax.fn_body) tf.(fn_body) ->
fn_return tf = Csyntax.fn_return f ->
fn_callconv tf = Csyntax.fn_callconv f ->
fn_params tf = Csyntax.fn_params f ->
fn_vars tf = Csyntax.fn_vars f ->
tr_function f tf.
Inductive tr_fundef: Csyntax.fundef -> Clight.fundef -> Prop :=
| tr_internal: forall f tf,
tr_function f tf ->
tr_fundef (Internal f) (Internal tf)
| tr_external: forall ef targs tres cconv,
tr_fundef (External ef targs tres cconv) (External ef targs tres cconv).

(* Specifications: *)
Lemma transl_function_spec:
forall f tf,
transl_function f = OK tf ->
tr_function f tf.
Lemma transl_fundef_spec:
forall fd tfd,
transl_fundef fd = OK tfd ->
tr_fundef fd tfd.