# Function mz_expr::relation::canonicalize::canonicalize_equivalences

source · ```
pub fn canonicalize_equivalences<'a, I>(
equivalences: &mut Vec<Vec<MirScalarExpr>>,
input_column_types: I,
)
```

## Expand description

Canonicalize equivalence classes of a join and expressions contained in them.

`input_types`

can be the ColumnTypes of the join or the ColumnTypes of
the individual inputs of the join in order.

This function:

- simplifies expressions to involve the least number of non-literal nodes. This ensures that we only replace expressions by “even simpler” expressions and that repeated substitutions reduce the complexity of expressions and a fixed point is certain to be reached. Without this rule, we might repeatedly replace a simple expression with an equivalent complex expression containing that (or another replaceable) simple expression, and repeat indefinitely.
- reduces all expressions contained in
`equivalences`

. - Does everything that canonicalize_equivalence_classes does.