SI - International System of Units

The domain ``SI`` (abbrev. also ``SI``) implements SI Units. The standard reference for this topic is: Bureau International des Poids et Mesures BIPM

The recommended practical system of units of measurement is the International System of Units (Système International d’Unités, with the international abbreviation SI). The SI is defined by the SI Brochure, which is published by the BIPM.

[De] Constructors

Base units

%m   :  Integer -> %
%kg  :  Integer -> %
%s   :  Integer -> %
%A   :  Integer -> %
%K   :  Integer -> %
%mol :  Integer -> %
%cd  :  Integer -> %

Compound construction/deconstructor

mksi: List(Integer) -> %
si2l: % -> List(Integer)

Derived units

SI_derived : String -> %

To each function there is an example below.

In order to use the library we have to load it:

)lib SI
SIunit is now explicitly exposed in frame initial
SIunit will be automatically loaded when needed from
   /home/kfp/Development/physqty/Untitled Folder/SI.NRLIB/SI

Seven Base Units

Length (meter)

The metre is the length of the path travelled by light in vacuum during a time interval of 1/299 792 458 of a second.

Symbol: m
Warning: HyperTeX macro table not found
                                                              Type: SIunit
Mass (kilogram)

The kilogram is the unit of mass; it is equal to the mass of the international prototype of the kilogram.

Symbol: kg
                                                              Type: SIunit
Time (second)

The second is the duration of 9 192 631 770 periods of the radiation corresponding to the transition between the two hyperfine levels of the ground state of the caesium 133 atom.

Symbol: s
                                                              Type: SIunit
Electric current (ampere)

The ampere is that constant current which, if maintained in two straight parallel conductors of infinite length, of negligible circular cross-section, and placed 1 m apart in vacuum, would produce between these conductors a force equal to 2 x 10–7 newton per metre of length.

Symbol: A
                                                              Type: SIunit
Thermodynamic temperature (kelvin)

The kelvin, unit of thermodynamic temperature, is the fraction 1/273.16 of the thermodynamic temperature of the triple point of water.

Symbol: K
                                                              Type: SIunit
Amount of substance (mol)
  • The mole is the amount of substance of a system which contains as many elementary entities as there are atoms in 0.012 kilogram of carbon 12.

  • When the mole is used, the elementary entities must be specified and may be atoms, molecules, ions, electrons, other particles, or specified groups of such particles.

    Symbol: mol

                                                              Type: SIunit
Luminous intensity (candela)

The candela is the luminous intensity, in a given direction, of a source that emits monochromatic radiation of frequency 540 x \(10^{12}\) hertz and that has a radiant intensity in that direction of 1/683 watt per steradian.

Symbol: cd
                                                              Type: SIunit


-- Volume (cubic meter)
                                                              Type: SIunit
-- Force (newton)
 1  1 - 2
m kg s
                                                              Type: SIunit
-- Force again, i.e. input order does not matter
-- and %s(-2) is equivalent to divide by %s(2).
 1  1 - 2
m kg s
                                                              Type: SIunit


the output ordering is fixed: m kg s A K mol cd. This is also the order of arguments for the compound constructor **`mksi`**.


The mksi (make SI) constructor creates a SI unit from a list of exponents:

mksi [1,1,-2,0,0,0,0]
 1  1 - 2
m kg s
                                                              Type: SIunit
-- Lets make the unit for pressure = force/area
p:=mksi [-1,1,-2,0,0,0,0]
 - 1  1 - 2
m   kg s
                                                              Type: SIunit
-- Let's check:
 - 1  1 - 2
m   kg s
                                                              Type: SIunit
mksi [1,1,1,1,1,1,1]
 1  1 1 1 1   1  1
m kg s A K mol cd
                                                              Type: SIunit
-- the "one" unit
mksi [0,0,0,0,0,0,0]
Type: SIunit


The si2l function converts a SI unit to a list of its exponents, i.e. it is the reverse function of mksi:

si2l F
[1,1,- 2,0,0,0,0]
                                                       Type: List(Integer)
si2l p
[- 1,1,- 2,0,0,0,0]
                                                       Type: List(Integer)
si2l %cd(6)
                                                       Type: List(Integer)
%A(3) * %K(8)
 3 8
                                                              Type: SIunit
si2l %
                                                       Type: List(Integer)

Derived Units

The derived SI units are built in for convenience. The lookup function is SI_derived and expects as argument the name of the derived unit. Note that those and their nomenclature are clearly defined by BIPM:

SIderived(s:String):% ==
      s = "hertz"     => %s(-1)
      s = "newton"    => %kg(1)*%m(1)*%s(-2)
      s = "pascal"    => %kg(1)*%m(-1)*%s(-2)
      s = "joule"     => %kg(1)*%m(2)*%s(-2)
      s = "watt"      => %kg(1)*%m(2)*%s(-3)
      s = "coulomb"   => %s(1)*%A(1)
      s = "volt"      => %kg(1)*%m(2)*%s(-3)*%A(-1)
      s = "farad"     => %kg(-1)*%m(-2)*%s(4)*%A(2)
      s = "ohm"       => %kg(1)*%m(2)*%s(-3)*%A(2)
      s = "siemens"   => %kg(-1)*%m(-2)*%s(3)*%A(2)
      s = "weber"     => %kg(1)*%m(2)*%s(-2)*%A(-1)
      s = "tesla"     => %kg(1)*%s(-2)*%A(-1)
      s = "henry"     => %kg(1)*%m(2)*%s(-2)*%A(-2)
      s = "lumen"     => %cd(1)
      s = "lux"       => %m(-2)*%cd(1)
      s = "becquerel" => %s(-1)
      s = "gray"      => %m(2)*%s(-2)
      s = "sievert"   => %m(2)*%s(-2)
      s = "katal"     => %s(-1)*%mol(1)
      error "Expected string name of a derived SI unit."
SIderived "pascal"
 - 1  1 - 2
m   kg s
                                                              Type: SIunit
SIderived "tesla"
  1 - 2 - 1
kg s   A
                                                              Type: SIunit
(SIderived "gray") * (SIderived "becquerel")
 2 - 3
m s
                                                              Type: SIunit
Energy := SIderived "joule"
Force  := SIderived "newton"
 2  1 - 2
m kg s
                                                              Type: SIunit
 1  1 - 2
m kg s
                                                              Type: SIunit
                                                              Type: SIunit
-- indeed Energy = Force * %m(1)
 2  1 - 2
m kg s
                                                              Type: SIunit
Test for equality

Use $ if necessary:

(Energy = (Force * %m(1)))$SI
                                                             Type: Boolean
                                                             Type: Boolean
-- Error (actually 'meter' is a base unit and not derived)
>> Error detected within library code:
Expected string name of a derived SI unit.

Next see Buckingham :math:`Pi` Theorem