fix: builtin component instances in the `grind` canonicalizer

This PR fixes a `grind` internal error (`ring term has not been internalized`) triggered when a user-defined `Pow Int Nat` instance with higher priority is in scope.

The `grind` canonicalizer maps every `HPow Int Nat Int` instance to the builtin one, but the component class `Pow Int Nat` was not in the builtin table. When the builtin instance is visited as a plain term (e.g., as a ground pattern argument of an E-matching theorem), its `Pow Int Nat` argument is re-synthesized and the user instance wins, so the builtin instance was cached as mapping to the user one. Terms canonicalized afterwards, such as the goal's `x ^ 2`, kept the user instance, while the `x ^ 2 / 4` atom cutsat builds when eliminating `%` was canonicalized to the builtin one and reached the ring solver without an `ENode`. The table now also covers the component classes of the builtin `Nat` and `Int` instances, so every builtin instance is a fixpoint of canonicalization.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
3 files changed