• Let us model the poop rule as a predicate keep that maps the set of real world objects to {true, false} and a function poopy that maps the set of real world objects to the set of real world objects with poop on them.

    For all x, keep(poopy(x)) = keep(poopy(poopy(x))), thus we can say that poopy is idempotent under keep.

    Further, poopy is injective because there exist distinct x and y such that keep(poopy(x)) ≠ keep(poopy(y)). The proof by example is that you would keep a poopy million dollar bill, but you would not keep a poopy poop.