Fixpoint interpTermsVector (value : nat -> U M) (n : nat) 
 (ts : Terms L n) {struct ts} : Vector.t (U M) n :=
  match ts in (Terms _ n) return (Vector.t (U M) n) with
  | Tnil => Vector.nil (U M)
  | Tcons m t ts =>
      Vector.cons (U M) (interpTerm value t) m (interpTermsVector value m ts)
  end.

Lemma preserveValue : forall value : nat -> U M, (forall f : Formula L, mem _ T f -> interpFormula value (nnTranslate f)) -> forall g : Formula L, SysPrf L T g -> interpFormula value (nnTranslate g).