Section lift_sigma_tau.
Variable n : nat.
Variable sig tau : Type.
Variable g : tau -> option sig.
Variable def : sig.
Variable F : Type.
Definition surjectTapes : tapes tau n -> tapes sig n :=
Vector.map (surjectTape g def).
Definition lift_sigma_tau_Rel (R : Rel (tapes sig n) (F * tapes sig n)) :
Rel (tapes tau n) (F * tapes tau n) :=
fun tin '(yout,tout) => R (surjectTapes tin) (yout, surjectTapes tout).
Definition lift_sigma_tau_T (T : Rel (Vector.t (tape sig) n) nat) :
Rel (Vector.t (tape tau) n) nat :=
fun tin k => T (surjectTapes tin) k.

Lemma surjectTapes_nth t i :
(surjectTapes t)[@i] = surjectTape g def t[@i].