Alphabet

nil:list
app:[list × list] ⟶ list
cons:[nat × list] ⟶ list
shuffle:[list] ⟶ list
hshuffle:[list] ⟶ list
reverse:[list] ⟶ list
hrepeat:[nat × list → list × list] ⟶ list
0:nat
s:[nat] ⟶ nat
uhalf:[nat] ⟶ nat
tail:[list] ⟶ list
head:[list] ⟶ nat

Variables

n:nat
x:list
y:list
l:list
F:list → list

Rules

app(nil, l)l
app(cons(n, l), y)cons(n, app(l, y))
reverse(nil)nil
reverse(cons(n, l))app(reverse(l), cons(n, nil))
shuffle(nil)nil
shuffle(cons(n, l))cons(n, shuffle(reverse(l)))
uhalf(0)0
uhalf(s(0))s(0)
uhalf(s(s(n)))s(uhalf(n))
hrepeat(0, F, l)l
hrepeat(s(n), F, l)hrepeat(uhalf(n), F, F · l)
tail(cons(n, l))l
head(cons(n, l))n
hshuffle(l)hrepeat(head(l), λz:list.shuffle(z), tail(l))