The current post condition for remove_all(p, [...]) states:
Postcondition: !exists(p)
This is not correct when p is a symlink, since !exists(p) reads through the symlink. The postcondition should be changed to match that of remove which states !exists(symlink_status(p)).