canonicalization implementations