app :: list → list → list cons :: nat → list → list hshuffle :: (nat → nat) → list → list nil :: list reverse :: list → list app(nil, X) → X app(cons(Y, U), V) → cons(Y, app(U, V)) reverse(nil) → nil reverse(cons(W, P)) → app(reverse(P), cons(W, nil)) hshuffle(F1, nil) → nil hshuffle(Z1, cons(U1, V1)) → cons(Z1(U1), hshuffle(Z1, reverse(V1)))