Fixpoint unary_preserv (e : BC) : bool :=
  match e with
    | zero => true
    | proj n s j => true
    | succ b => b
    | pred => true
    | cond => true
    | rec g h0 h1 => unary_preserv g  &&
                     unary_preserv h0 && 
                     unary_preserv h1 
    | comp _ _ h nl sl => unary_preserv h && 
                          forallb unary_preserv nl &&
                          forallb unary_preserv sl
  end.

Lemma preservation : forall (e : BC) (vnl vsl : list bs), unary_preserv e = true -> forallb unary vnl = true -> forallb unary vsl = true -> unary (sem e vnl vsl) = true.