The canonicalization pass in MLIR is widely used as almost equally widely criticized: users and contributors often highlight the lack of a guaranteed normal form, the difficulty to add or remove a canonicalization pattern, or the potentially high cost of this transformation. This talk explores an alternative approach of allowing for a multitude of overlapping user-defined normal forms, a term borrowed from formal rewriting systems. Certain normal forms can be verified programmatically and can serve as a contract between passes allowing them to indicate which properties of the IR they expect, preserve, and produce, thus simplifying and automating the auxiliary transformations bringing IR to a transformation-friendly form. While primarily targeted towards MLIR users and dialect authors, this talk may give insight useful for the LLVM IR canonicalization system.