Alphabet

append:[list × list] ⟶ list
cons:[nat × list] ⟶ list
map:[nat → nat × list] ⟶ list
mirror:[list] ⟶ list
nil:list
reverse:[list] ⟶ list
shuffle:[list] ⟶ list

Variables

X:nat
Y:list
U:list
H:nat → nat

Rules

append(nil, U)⇒U
append(cons(X, Y), U)⇒cons(X, append(Y, U))
reverse(nil)⇒nil
shuffle(nil)⇒nil
shuffle(cons(X, Y))⇒cons(X, shuffle(reverse(Y)))
mirror(nil)⇒nil
mirror(cons(X, Y))⇒append(cons(X, mirror(Y)), cons(X, nil))
map(H, nil)⇒nil
map(H, cons(X, Y))⇒cons(H · X, map(H, Y))