Numeric tower (spec §6.1): the exact layer Integer/Rational/Complex, the inexact layer Real,
and the fixed-width collapsed layer (I8…U128/Isize/Usize/BigFloat) that maps 1:1 to Rust
primitives. Collapsed types exist only after explicit collapse and do not participate in implicit
promotion; they are normalized to the exact/Real layer before any arithmetic (spec §6.1).
The exact layer stays exact by default; a Real infects the result to inexact (spec §6.4 promotion rules).
Inexact real (spec §6.1). NaN/Inf are allowed to exist only in this layer (spec §6.2),
and only arise from explicit collapse; they never enter the symbolic layer.
Promote two numbers to a common type (spec §6.4).
Promotion sequence: Integer < Rational < Complex<Rational> < F64 < Complex<F64>;
a Real infects, promoting the whole Complex to Complex<Real>.
Fixed-width collapsed variants are normalized to the exact/Real layer first (spec §6.1).