Section WW.
Context {t : Type}{ops : Ops t}{specs : Specs ops}.
Let wB := base digits.
Definition WO' (eq0:t->bool) zero h :=
if eq0 h then W0 else WW h zero.
Definition WO := Eval lazy beta delta [WO'] in
let eq0 := ZnZ.eq0 in
let zero := ZnZ.zero in
WO' eq0 zero.
Definition OW' (eq0:t->bool) zero l :=
if eq0 l then W0 else WW zero l.
Definition OW := Eval lazy beta delta [OW'] in
let eq0 := ZnZ.eq0 in
let zero := ZnZ.zero in
OW' eq0 zero.
Definition WW'  (eq0:t->bool) zero h l :=
if eq0 h then OW' eq0 zero l else WW h l.
Definition WW := Eval lazy beta delta [WW' OW'] in
let eq0 := ZnZ.eq0 in
let zero := ZnZ.zero in
WW' eq0 zero.

Lemma spec_WW : forall h l,
zn2z_to_Z wB to_Z (WW h l) = (to_Z h)*wB + to_Z l.