taba_reverse_let(x) = 
      let Pair(Nil,y) = h(idshape(x))
      in  y

h(Pair(n,x)) = hImpl(n,x)

hImpl(Z,   y) = Pair(y,Nil)
hImpl(S(x),y) = let Pair(Cons(a,x1),y1) = hImpl(x,y)
	        in  Pair(x1,Cons(a,y1))   

idshape(Nil)       = Pair(Z,Nil)
idshape(Cons(a,x)) = let Pair(n,x) = idshape(x)
		     in  Pair(S(n),Cons(a,x))
