Alphabet

compose:[a → a × a → a] ⟶ a → a
cons:[a × a] ⟶ a
hd:a → a
init:a → a
last:a → a
nil:a
reverse:a → a
reverse2:[a × a] ⟶ a
tl:a → a

Variables

F:a → a
Z:a → a
U:a
V:a
W:a
P:a
X1:a
Y1:a
U1:a
V1:a
W1:a
P1:a

Rules

compose(F, Z) · U⇒Z · (F · U)
reverse · V⇒reverse2(V, nil)
reverse2(nil, W)⇒W
reverse2(cons(X1, Y1), P)⇒reverse2(Y1, cons(X1, P))
hd · cons(U1, V1)⇒U1
tl · cons(W1, P1)⇒P1
last⇒compose(hd, reverse)
init⇒compose(reverse, compose(tl, reverse))