Section InterpAsmProperties.
Context {E': Type -> Type}.
Notation E := (Reg +' Memory +' E').
(** This interpreter is compatible with the equivalence-up-to-tau. *)
Global Instance eutt_interp_asm {R}:
Proper (@eutt E R R eq ==> eq ==> eq ==> @eutt E' (prod memory (prod registers R)) (prod _ (prod _ R)) eq) interp_asm.

(** [interp_asm] commutes with [Ret]. *)
Lemma interp_asm_ret: forall {R} (r: R) (regs : registers) (mem: memory),
@eutt E' _ _ eq (interp_asm (ret r) mem regs)
(ret (mem, (regs, r))).