fn reverse_permute<'a, I, J>(exprs: I, permutation: J)where
    I: Iterator<Item = &'a mut MirScalarExpr>,
    J: Iterator<Item = &'a usize>,
Expand description

Applies the reverse of [MirScalarExpr.permute] on each expression.

permutation can be thought of as a mapping of column references from stateA to stateB. [MirScalarExpr.permute] assumes that the column references of the expression are in stateA and need to be remapped to their stateB counterparts. This methods assumes that the column references are in stateB and need to be remapped to stateA.

The outputs field of MirRelationExpr::Project is a mapping from “after” to “before”. Thus, when lifting projections, you would permute on outputs, but you need to reverse permute when pushing projections down.