Section CombineList.
Variable A: Type.
Variable f: A -> A -> A.
Fixpoint combinelist xs ys :=
match xs, ys with
nil, nil => Some nil
| (u::us),(v::vs) => bind (combinelist us vs) (fun l => Some (f u v :: l))
| _, _ => None
end.
End CombineList.

Lemma shift_two_8 z:
match z with
| 0 => 0
| Z.pos y' => Z.pos y'~0~0~0~0~0~0~0~0
| Z.neg y' => Z.neg y'~0~0~0~0~0~0~0~0
end = (z * two_p 8)%Z.