752
Kondo rule
(slrpnk.net)
Be sure to follow the rule before you head out.
Rule: You must post before you leave.
Your model is lacking in one area - poopy() has an inverse poopwash() where for some set of poopy objects Y, poopwash maps Y to a subset of the set of real world objects, but there exists a set of poopy objects Z for which poopwash maps Z to a subset of poopy objects.
My initial instinct was to suggest that for all z in Z, keep(z) = false, however I believe your million dollar example runs counter to this. Nonetheless, I suspect there is a useful subset of Z, let's say S, for which we can say, for all s in S, keep(s) = false.