In this book there is a lot of mention of "pushing x down". For example:
Pushing NOT operations down and eliminating them
NOT operations need to be pushed downwards for correctness reasons. Attention has to be paid to the IS NOT NULL and IS NULL predicates. XXX complete set of rules go into some table
...
Typical steps during this rewrite phase are unnesting nested queries, pushing selections down, and introducing index structures.
...
When pushing down projections, we only apply them just before a pipeline breaker
...
Logical query optimization turned out to be a little difficult: pushing selections down and reordering joins are mutually interdependent.
...
In this section, we consider pushing down (pulling up) unary operators into (from) the arguments of binary operators. Thus, we are interested in equivalences of the form $f(e_1 ◦ e_2) ≡ f(e_1) ◦ e_2$ and $f(e_1 ◦ e_2) ≡ e_1 ◦ f(e_2)$.
From that last example I can vaguely see that e.g. $f(e_1 ◦ e_2) ≡ f(e_1) ◦ e_2$ there is a "moving out" of $e_2$ from the equation, but I'm not sure what direction up/down and not sure what the meaning/purpose is in doing this. Wondering what exactly this means.