app :: list → list → list cons :: nat → list → list map :: (nat → nat) → list → list nil :: list reverse :: list → list shuffle :: 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)) shuffle(nil) → nil shuffle(cons(X1, Y1)) → cons(X1, shuffle(reverse(Y1))) map(G1, nil) → nil map(H1, cons(W1, P1)) → cons(H1(W1), map(H1, P1))