Provide built-in dimensions for dimensional analysis
As described in 7.3.4 Physical types and units, physical types have two components, a base and a unit. Currently, the base and the unit definition duplicate the information on the base exponents:
type length is SI(m: 1) unit nanometer of length is SI(m: 1, factor: 0.000000001)
The SI(m: 1) part occurs in both, and must always be duplicated in these contexts (once for the length, once for the nanometer). The second occurrence provides some check, but since it is a literal duplication, the check serves little purpose. It appears that the definition of the physical base types is an attempt to do dimensional analysis on the units, for example to check if two units can be added together. For dimensional analysis, it would make sense to define the SI dimensions as built-in identifiers (mass, length, time, temperature, luminous_intensity, electic_current, and amount_of_substance). Note that angles are dimensionless quantities, and the SI system treats the radian as a derived unit with dimension 1, so no dimension would be defined for angles. Our proposal would be to have the physical types be defined in terms of the base dimensions, for example:
type speed is SI(length: 1, time: -1)
while keeping the unit definitions the same:
unit meter_per_second of speed is SI(m: 1, s: -1, factor: 1)