Foreword
General
This document is the second document of the Plurimath specifications series. It specifies the uncertainty model: the node that carries a measured value together with its uncertainty through the Plurimath system, the categories of uncertainty it represents, the discipline that governs the numbers it carries, and the representation of each category in every output format.
The model described here is implemented in the plurimath gem of the 0.11 series (the Plurimath::Math::Function::Uncertainty class). Where this document and the implementation disagree, the disagreement is a defect in one of the two.
Documents in the series
| Number | Title | Subject |
|---|---|---|
| 1001 | Math model | The formula tree, the node classes, the registry, the rendering surfaces |
| 1002 | Uncertainty model | This document: the uncertainty node, its categories, its number discipline, its per-format encodings |
| 1003 | Format interfaces | The per-format readers and writers |
| 1004 | Evaluation | Numeric evaluation and uncertainty propagation |
Maintainers
This document is maintained by the Plurimath project at https://github.com/plurimath/plurimath.
Introduction
A reported measurement is a pair: the measured value and its uncertainty. The GUM (JCGM 100) fixes the vocabulary — standard uncertainty, expanded uncertainty with its coverage factor, coverage interval — and the reporting discipline; JCGM 101 adds the coverage interval obtained by Monte Carlo. Plurimath carries these reported results as first-class content: an uncertainty is a node of the formula tree (PM 1001), not decoration around a number, and it survives every format transition the system performs.
The design problem is that the six output formats carry uncertainty very differently. AsciiMath has no uncertainty at all and needs an explicit call syntax; LaTeX renders the concise reporting form natively but needs appended statements for a coverage factor; UnicodeMath needs an intent wrapper to keep the semantics machine-readable; MathML 4 has intent attributes; OMML has neither and needs a marker convention. This document defines one model and one encoding per format, so that a result written once renders faithfully everywhere and, where a format can carry the semantics, carries them machine-readably.
Two disciplines run through the whole document. First, the node records reported numbers exactly as written: it never calculates, rounds or converts them — rounding is the author’s act (JCGM 100 7.2.2). Second, every category has one spelling per format: the same result is written the same way by every conforming implementation.
EXAMPLE
The reported result “10.3 g, standard uncertainty 0.2 g” is one Uncertainty node of category standard. It renders as ustd(10.3, 0.2) "unitsml(g)" in AsciiMath, as 10.3(0.2) g in LaTeX and HTML, and as an intent-marked construct in MathML, OMML and UnicodeMath. Reading any of the lossless forms back yields the node again.
0.1 The design forces
Four forces shaped the model, and the document keeps them in view because every clause is a resolution among them:
Fidelity. A reported result is a statement by its author. The model carries the statement — the digits, the category, the kind, the notation — and adds nothing.
One encoding per format. Two spellings of the same category in the same format would reintroduce the ambiguity the GUM warns against. Every format has exactly one encoding per category, fixed to the byte.
Semantics where the format allows. Where a format has a machine-readable channel — intent in MathML and UnicodeMath, the call name in AsciiMath, the marker run in OMML — the encoding uses it, so that consumers read fields, not shapes.
No computation. The node is a record. Propagation, combination and interval construction live in document 1004, on demand, with their own discipline.
1 Scope
1.1 General
This document specifies the uncertainty model of the Plurimath system:
the uncertainty node and its fields;
the three uncertainty categories — standard, expanded, coverage interval — with the fields each requires and forbids;
the notation distinction (absolute and concise) and the concise-form rule;
the exact-decimal discipline that governs every number the node carries;
the representation of each category in each output format, including the marker conventions of MathML, OMML and UnicodeMath;
units on an uncertainty, through the UnitsML embedding;
conformance of an implementation of this model.
This document does not specify:
the syntax with which each input notation writes an uncertainty, beyond what the per-format encodings of clause 9 imply for the formats that read (document 1003 specifies the reading contracts);
uncertainty arithmetic: propagation, combination, degrees of freedom, coverage-factor computation — evaluation is document 1004;
which numerical tolerance conventions apply to evaluation output (CalConnect 36813 governs those).
1.2 Relationship to the series
| Document | Relationship to this one |
|---|---|
| 1001 Math model | defines the tree this node lives in and the rendering surfaces this document encodes for |
| 1003 Format interfaces | defines the reader contracts for the encodings this document defines |
| 1004 Evaluation | consumes uncertainty nodes numerically; this node never computes |
| CalConnect 36813, 5, 6 | numeric contract, XML usage, and the content language of the unit embedding |
1.3 Audience
Implementers of Plurimath, implementers of independent readers and writers that must carry uncertainty through these formats, and authors of documents 1003 and 1004.
2 Normative references
The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.
JCGM 100:2008, INTERNATIONAL ORGANIZATION FOR STANDARDIZATION, ORGANISATION INTERNATIONALE DE NORMALISATION (ISO), INTERNATIONAL ELECTROTECHNICAL COMMISSION, COMMISSION ÉLECTROTECHNIQUE INTERNATIONALE (IEC), INTERNATIONAL ORGANIZATION OF LEGAL METROLOGY, ORGANISATION INTERNATIONALE DE MÉTROLOGIE LÉGALE (OIML), INTERNATIONAL UNION OF PURE AND APPLIED CHEMISTRY, UNION INTERNATIONALE DE CHIMIE PURE ET APPLIQUÉE (IUPAC), INTERNATIONAL UNION OF PURE AND APPLIED PHYSICS, UNION INTERNATIONALE DE PHYSIQUE PURE ET APPLIQUÉE (IUPAP), INTERNATIONAL FEDERATION OF CLINICAL CHEMISTRY AND LABORATORY MEDICINE, FÉDÉRATION INTERNATIONALE DE CHIMIE CLINIQUE ET DE BIOLOGIE MOLÉCULAIRE (IFCC), INTERNATIONAL LABORATORY ACCREDITATION COOPERATION, COOPÉRATION INTERNATIONALE D’ACCRÉDITATION DES LABORATOIRES (ILAC), and BUREAU INTERNATIONAL DES POIDS ET MESURES (BIPM). Guide to the expression of uncertainty in measurement. Report no. JCGM 100:2008. First edition. Paris: International Bureau of Weights and Measures, Bureau international des poids et mesures; International Organization for Standardization, Organisation internationale de normalisation; International Electrotechnical Commission, Commission électrotechnique internationale, 2008. Available from: https://www.bipm.org/documents/20126/2071204/JCGM_100_2008_E.pdf/cb0ef43f-baa5-11cf-3f85-4dcd86f77bd6.
JCGM 101:2008, INTERNATIONAL ORGANIZATION FOR STANDARDIZATION, ORGANISATION INTERNATIONALE DE NORMALISATION (ISO), INTERNATIONAL ELECTROTECHNICAL COMMISSION, COMMISSION ÉLECTROTECHNIQUE INTERNATIONALE (IEC), INTERNATIONAL ORGANIZATION OF LEGAL METROLOGY, ORGANISATION INTERNATIONALE DE MÉTROLOGIE LÉGALE (OIML), INTERNATIONAL UNION OF PURE AND APPLIED CHEMISTRY, UNION INTERNATIONALE DE CHIMIE PURE ET APPLIQUÉE (IUPAC), INTERNATIONAL UNION OF PURE AND APPLIED PHYSICS, UNION INTERNATIONALE DE PHYSIQUE PURE ET APPLIQUÉE (IUPAP), INTERNATIONAL FEDERATION OF CLINICAL CHEMISTRY AND LABORATORY MEDICINE, FÉDÉRATION INTERNATIONALE DE CHIMIE CLINIQUE ET DE BIOLOGIE MOLÉCULAIRE (IFCC), INTERNATIONAL LABORATORY ACCREDITATION COOPERATION, COOPÉRATION INTERNATIONALE D’ACCRÉDITATION DES LABORATOIRES (ILAC), and BUREAU INTERNATIONAL DES POIDS ET MESURES (BIPM). Supplement 1 to the “Guide to the expression of uncertainty in measurement” — Propagation of distributions using a Monte Carlo method. Report no. JCGM 101:2008. First edition. Paris: International Bureau of Weights and Measures, Bureau international des poids et mesures; International Organization for Standardization, Organisation internationale de normalisation; International Electrotechnical Commission, Commission électrotechnique internationale, 2008. Available from: https://www.bipm.org/documents/20126/2071204/JCGM_101_2008_E.pdf/325dcaad-c15a-407c-1105-8b7f322d651c.
JCGM 200:2012, INTERNATIONAL ORGANIZATION FOR STANDARDIZATION, ORGANISATION INTERNATIONALE DE NORMALISATION (ISO), INTERNATIONAL ELECTROTECHNICAL COMMISSION, COMMISSION ÉLECTROTECHNIQUE INTERNATIONALE (IEC), INTERNATIONAL ORGANIZATION OF LEGAL METROLOGY, ORGANISATION INTERNATIONALE DE MÉTROLOGIE LÉGALE (OIML), INTERNATIONAL UNION OF PURE AND APPLIED CHEMISTRY, UNION INTERNATIONALE DE CHIMIE PURE ET APPLIQUÉE (IUPAC), INTERNATIONAL UNION OF PURE AND APPLIED PHYSICS, UNION INTERNATIONALE DE PHYSIQUE PURE ET APPLIQUÉE (IUPAP), INTERNATIONAL FEDERATION OF CLINICAL CHEMISTRY AND LABORATORY MEDICINE, FÉDÉRATION INTERNATIONALE DE CHIMIE CLINIQUE ET DE BIOLOGIE MOLÉCULAIRE (IFCC), INTERNATIONAL LABORATORY ACCREDITATION COOPERATION, COOPÉRATION INTERNATIONALE D’ACCRÉDITATION DES LABORATOIRES (ILAC), and BUREAU INTERNATIONAL DES POIDS ET MESURES (BIPM). International vocabulary of metrology – Basic and general concepts and associated terms (VIM). Report no. JCGM 200:2012. Third edition. Paris: International Bureau of Weights and Measures, Bureau international des poids et mesures; International Organization for Standardization, Organisation internationale de normalisation; International Organization for Standardization, Organisation internationale de normalisation; International Electrotechnical Commission, Commission électrotechnique internationale, 2012. Available from: https://www.bipm.org/documents/20126/2071204/JCGM_200_2012.pdf/f0e1ad45-d337-bbeb-53a6-15fe649d0ff1.
CalConnect 36813 (numeric contract), of the UnitsML series, for the exact-decimal discipline.
CalConnect 36817 (asciiunits content language), of the UnitsML series, for the unit embedding.
PM 1001 (math model), of this series, for the tree and the rendering surfaces.
3 Terms and definitions
For the purposes of this document, the following terms and definitions apply.
For the purposes of this document, the following terms and definitions apply.
3.1 uncertainty node
the tree node carrying a measured value with its uncertainty; an instance of the model of clause 5
3.2 category
which kind of uncertainty the node represents: standard, expanded, or coverage-interval
3.3 standard uncertainty
the uncertainty of the result expressed as a standard deviation (JCGM 100 7.2.1); category standard
3.4 expanded uncertainty
a quantity defining an interval about the result with a stated coverage probability, obtained from a standard uncertainty by multiplication with a coverage factor (JCGM 100 6.2.1); category expanded
3.5 coverage interval
an interval containing the measured value with a stated coverage probability, given by its endpoints (JCGM 101 5.3); category coverage-interval
3.6 coverage factor
the positive number multiplying a standard uncertainty to yield an expanded uncertainty; conventionally written k
3.7 coverage probability
the probability that the interval covers the true value; a number strictly between 0 and 1
3.8 interval kind
which shortest-probability property a coverage interval has: shortest or probabilistically-symmetric
3.9 notation
how a standard uncertainty is written: absolute (10.3(0.2) shape) or concise (10.3(2) shape)
3.10 concise form
the reporting form in which the uncertainty magnitude is written as a digit string in the last decimal places of the value, with as many decimal places as the value
3.11 estimate
the measured value the uncertainty qualifies; carried verbatim
3.12 magnitude
the uncertainty magnitude; an unsigned plain decimal
3.13 marker
the machine-readable name string that the MathML intent, OMML and UnicodeMath encodings carry: standard-uncertainty, expanded-uncertainty, or coverage-interval, qualified by :concise and by the interval kind where applicable
3.14 exact decimal
a decimal string preserved verbatim from its source; 2.10 and 2.1 are different exact decimals
3.15 InvalidUncertainty
the typed error a conforming implementation raises when an uncertainty node is constructed with an inconsistent field set
3.16 statement
the fixed text appended to the shape-only encodings stating the interval kind, the coverage factor or the coverage probability
3.17 encoding
the one rendering of a node in one format, defined by clause 9 and frozen in the corpus
3.18 round trip
reading a node’s encoding in a lossless format back to a node equal to the original
3.19 refusal
construction-time rejection with an InvalidUncertainty naming the violated rule
3.20 corpus
the frozen set of nodes and encodings used to discharge conformance claims
4 Conventions
4.1 General
Encodings are written as literal output: 10.3(0.2) is the two-character-group rendering with a full-width-free ASCII parenthesis pair; ± is the Unicode character U+00B1. Format names follow PM 1001: MathML, OMML, LaTeX, UnicodeMath, HTML, AsciiMath.
4.2 Examples
Examples appear in blocks titled Example and end with an Expected outcome paragraph stating the observable behaviour of a conforming implementation. Where an example shows per-format output, the outcome lists the rendering of every format the example names.
4.3 Numbers
Number fields carry exact decimals as text. This document never rounds: where a rule compares decimals it compares them exactly, digit by digit, without converting to floating point.
4.4 Model references
The node model is written in LML (clause 5) as in PM 1001; the LML blocks are normative and compile with the LutaML toolchain.
4.5 The formats
| Format | Role | Carries semantics via |
|---|---|---|
| AsciiMath | lossless linear form | the category call |
| LaTeX | output; display | shape and statements |
| HTML | output; display | shape and statements |
| UnicodeMath | lossless linear form | the ⓘ intent wrapper |
| MathML | lossless markup form | the intent attribute |
| OMML | lossless office form | the marker run |
4.6 Marker rendering in prose
Marker strings are shown in monospace; ± denotes U+00B1; the ⓘ and ⓐ characters are U+24D8 and U+24D0. Encodings in tables are literal: what the table shows is what a conforming writer emits, byte for byte, apart from the number slots.
5 The uncertainty node
5.1 General
The uncertainty node is specified as an LML model. It is one indivisible result: rendering never splits it across lines, and no surface recomputes any of its fields.
5.2 The model
lml "1.0"
models UncertaintyModel {
class Uncertainty {
attribute value, ExactDecimal[1]
attribute category, UncertaintyCategory[1]
attribute magnitude, ExactDecimal
attribute coverage_factor, ExactDecimal
attribute coverage_probability, ExactDecimal
attribute lower, ExactDecimal
attribute upper, ExactDecimal
attribute interval_kind, IntervalKind
attribute notation, Notation
attribute unit, Unitsml
}
enum UncertaintyCategory {
value standard
value expanded
value coverage-interval
}
enum Notation {
value absolute
value concise
}
enum IntervalKind {
value shortest
value probabilistically-symmetric
}
class ExactDecimal {
attribute text, String[1]
}
}
The ExactDecimal of the model corresponds to a Number node of the tree (PM 1001) whose text is a plain decimal; the node never holds computed values.
5.3 Field rules
The category determines which fields are required and which are forbidden. A node is well formed when, for its category:
| Field | standard | expanded | coverage-interval |
|---|---|---|---|
| value | required | required | required |
| magnitude | required | required | forbidden |
| coverage_factor | forbidden | required | forbidden |
| coverage_probability | forbidden | optional | optional |
| lower, upper | forbidden | forbidden | required |
| interval_kind | forbidden | forbidden | required |
| notation | absolute or concise | unqualified | unqualified |
| unit | optional | optional | optional |
Constructing a node that violates its category’s field set raises InvalidUncertainty with a message naming the field and the category. The validation runs at construction; a tree therefore never contains a malformed uncertainty node.
EXAMPLE
A node of category expanded given a lower endpoint. Expected outcome. construction raises InvalidUncertainty with the message “lower does not apply to a expanded uncertainty”; no tree is produced.
5.4 The value
The value is a signed plain decimal: an optional minus sign, digits, and an optional fractional part. It is carried verbatim: no canonicalisation of trailing zeros, no exponent forms, no thousands separators.
5.5 Indivisibility
The node renders as one unit in every format. A line break inside a rendered uncertainty never occurs; a surface asked to break inside one places the break before or after the whole node.
5.6 Markers
The marker is the machine-readable name of the node, carried by the intent mechanisms of MathML, OMML and UnicodeMath:
| Category | Base marker | Qualifiers | Full shape |
|---|---|---|---|
| standard | standard-uncertainty | :concise when notation is concise | standard-uncertainty(v,m) or standard-uncertainty:concise(v,m) |
| expanded | expanded-uncertainty | none | expanded-uncertainty(v,m,k,p) |
| coverage-interval | coverage-interval | :shortest or :probabilistically-symmetric | coverage-interval:l,u,p qualified |
Marker arguments are the node’s numbers in the fixed order of clause 9’s encodings, comma-separated without spaces.
5.7 The fields, one by one
5.7.1 value
The measured value: a signed plain decimal held verbatim. It is the only field every category requires. The minus sign belongs to the value; magnitudes and endpoints are unsigned.
5.7.2 magnitude
The uncertainty magnitude: an unsigned plain decimal. For the standard category it is the standard uncertainty; for the expanded category it is the expanded uncertainty itself. It never appears on a coverage-interval node.
5.7.3 coverage_factor
The factor k that turned a standard uncertainty into the expanded one: an unsigned plain decimal greater than zero. 0 and negative values are refused, as is any form that is not a plain decimal. The factor is reported, never recomputed: a node does not know which distribution or degrees of freedom produced its k, and this document does not pretend it does.
5.7.4 coverage_probability
The probability p attached to an expanded uncertainty or a coverage interval: an unsigned plain decimal strictly between 0 and 1, checked exactly (clause 8). Optional on both categories.
5.7.5 lower and upper
The endpoints of a coverage interval: unsigned plain decimals. This document does not require lower < upper — the reported endpoints are carried verbatim, and an author who reports inverted endpoints has made their own statement; evaluation (document 1004) may flag it, construction does not.
5.7.6 interval_kind
Which property the interval has: shortest or probabilistically-symmetric. Required on a coverage-interval node and forbidden elsewhere, because an interval without its kind is not interpretable — for a skewed distribution the two intervals differ, and the difference is information.
5.7.7 notation
How a standard uncertainty reports: absolute or concise (clause 7). Present only on the standard category; the concise rule makes it meaningless anywhere else.
5.7.8 unit
The measurement unit, held as a UnitsML embedding (clause 10). Optional on every category.
5.8 Equality
Two nodes are equal when their categories and all ten fields are equal, field by field. Equality is exact: 0.2 and 0.20 are different magnitudes and therefore different nodes. Equality does not consult encodings: two nodes with equal fields have equal encodings by the determinism of clause 9.
5.9 Cloning
Copying a node copies the tree structures it holds (its value, numbers and unit) and shares nothing mutable. A copy is created through the constructor and revalidated; a validation passing at construction time cannot be bypassed by copying.
5.10 The validation rules as a model
The field rules of clause 5, written as the model they enforce:
models UncertaintyValidation {
class StandardRule {
attribute requires, String { cardinality 1..n }
attribute forbids, String { cardinality 1..n }
attribute allows_notation, Boolean[1]
}
class ExpandedRule {
attribute requires, String { cardinality 1..n }
attribute forbids, String { cardinality 1..n }
}
class CoverageIntervalRule {
attribute requires, String { cardinality 1..n }
attribute forbids, String { cardinality 1..n }
attribute requires_kind, Boolean[1]
}
}with the populations: StandardRule requires value, magnitude and forbids coverage_factor, coverage_probability, lower, upper, interval_kind; ExpandedRule requires value, magnitude, coverage_factor and forbids lower, upper, interval_kind; CoverageIntervalRule requires value, lower, upper, interval_kind and forbids magnitude, coverage_factor. The notation check is the standard category’s alone; every refusal raises InvalidUncertainty at construction.
6 The three categories
6.1 Standard uncertainty
The standard uncertainty (JCGM 100 7.2.1) reports the result v with its standard uncertainty m. It carries value and magnitude, and its notation distinguishes the absolute form from the concise form (clause 7). It carries no coverage factor, no coverage probability and no endpoints.
EXAMPLE
“10.3 g, standard uncertainty 0.2 g”. Expected outcome. a node with value 10.3, magnitude 0.2, notation absolute, unit g; rendering per clause 9 gives ustd(10.3, 0.2) "unitsml(g)" in AsciiMath and 10.3(0.2) g in LaTeX and HTML.
6.2 Expanded uncertainty
The expanded uncertainty (JCGM 100 6.2.1, 7.2.3) reports the result v with uncertainty magnitude m and coverage factor k, optionally with the coverage probability p that was used to choose k. The magnitude here is the expanded uncertainty itself, not a standard uncertainty.
The coverage factor is a positive unsigned decimal: 0, 0.5 and negative factors do not describe coverage factors and are refused. The coverage probability, when present, lies strictly between 0 and 1; both bounds are exact decimal comparisons, not float comparisons.
EXAMPLE
“U = 0.5 g at k = 2, p = 95%”. Expected outcome. a node with value 10.3, magnitude 0.5, coverage factor 2, coverage probability 0.95, unit g; rendering per clause 9 gives uexp(10.3, 0.5, 2, 0.95) "unitsml(g)" in AsciiMath and (10.3 ± 0.5) g (k = 2, p = 0.95)-shaped output in LaTeX and HTML with the statements appended.
6.3 Coverage interval
The coverage interval (JCGM 101 5.3, 5.5) reports the result v with the interval [l, u] and its kind: shortest or probabilistically-symmetric, optionally with the coverage probability p. The magnitude and coverage factor fields do not apply.
The interval kind is carried because the two kinds differ semantically — the shortest interval of a distribution need not be its probabilistically symmetric one — and the distinction survives every encoding that can carry it. In AsciiMath the symmetric kind is spelled symmetric (the - of probabilistically-symmetric would read as minus); the model carries the one kind and each format spells it its own way.
EXAMPLE
“10.3 g, 95% coverage interval [9.9, 10.7], shortest”. Expected outcome. a node with value 10.3, lower 9.9, upper 10.7, interval kind shortest, coverage probability 0.95, unit g; rendering per clause 9 gives ucov(10.3, 9.9, 10.7, 0.95, shortest) in AsciiMath and 10.3, [9.9, 10.7] with the probability statement in LaTeX and HTML.
6.4 Category identity
The category is part of the node’s identity: two nodes with the same numbers and different categories are different nodes. A round trip that loses the category is a lossy round trip, and the encodings of clause 9 are designed so that no lossless format loses it.
6.5 Choosing a category
The category is the author’s statement about their result, and the model carries it rather than inferring it:
| The author’s report | Category | Fields the node carries | Surface shape |
|---|---|---|---|
| “u = 0.2 g” | standard | value, magnitude | v(m) reporting form |
| “U = 0.5 g, k = 2” | expanded | value, magnitude, factor | (v ± m) with statements |
| “[9.9, 10.7] at 95%” | coverage-interval | value, endpoints, kind | v, [l, u] with statements |
Converting between categories is not a rendering act: turning a standard uncertainty into an expanded one requires multiplying by a factor — a computation belonging to document 1004, performed on request, producing a new node. An encoding never silently upgrades one category’s shape to another’s.
6.6 The category in the encodings
Every encoding that can carry semantics carries the category name explicitly: the AsciiMath call names it (ustd, uexp, ucov), and the markers begin with it (standard-uncertainty, expanded-uncertainty, coverage-interval). The shape-only encodings (LaTeX, HTML) distinguish the categories by shape alone — the reporting form, the ± form, the interval form — which is unambiguous precisely because the model defines exactly three shapes and refuses everything else.
EXAMPLE
The three categories with the same value 10.3 and unit g, side by side in LaTeX. Expected outcome. 10.3(0.2) g, (10.3 \pm 0.5) g~(k = 2), and 10.3,~[9.9, 10.7] g~(shortest, p = 0.95) — three distinguishable shapes, no shared ambiguity.
6.7 The JCGM grounding
| Category | Grounding | What the node carries beyond the JCGM form |
|---|---|---|
| standard | JCGM 100 7.2.1–7.2.2 reporting forms | the notation distinction and the exact-decimal discipline |
| expanded | JCGM 100 6.2.1, 7.2.3 | the reported factor and probability, carried verbatim |
| coverage-interval | JCGM 101 5.3, 5.5 | the interval kind, made explicit per endpoint pair |
The model adds no metrology of its own. Everything metrological — which k to choose, which interval is shortest, whether the distribution is symmetric enough for the symmetric interval — is the author’s or the evaluator’s (document 1004); the node records what was reported.
6.8 Interval kinds, precisely
The shortest coverage interval of a probability distribution and its probabilistically symmetric interval coincide only for symmetric distributions. JCGM 101 distinguishes them because Monte Carlo results need not be symmetric; a reported interval says which one it is, and downstream consumers treat them differently when combining or comparing results. The model carries the distinction on every interval node; the encodings carry it in every channel that carries anything.
7 Notation and the concise form
7.1 Absolute and concise
A standard uncertainty is written in one of two notations. The absolute notation carries the full magnitude: 10.3(0.2) means v = 10.3 with u = 0.2. The concise notation carries the magnitude as a digit string aligned to the value’s last decimal places: 10.3(2) means the same result with u = 0.2.
7.2 The concise rule
The concise form is well defined only when the magnitude has exactly as many decimal places as the value. The magnitude’s digits after its decimal point, with leading zeros of the fraction removed, form the concise digit string. A magnitude whose decimal places do not match the value’s cannot be written concisely after it, and constructing such a node is refused:
EXAMPLE 1
value 10.3, magnitude 0.25, concise notation. Expected outcome. construction raises InvalidUncertainty: “magnitude 0.25 cannot be written concisely after 10.3: it needs as many decimal places as the value”. The node is not created; nothing renders.
EXAMPLE 2
value 10.3, magnitude 0.2, concise notation. Expected outcome. the node is accepted. Its concise digit string is 2. The AsciiMath encoding renders the concise reporting form 10.3(2); the other surfaces render the absolute shape with the marker qualified :concise, because only the reporting form is concise, never the carried magnitude.
7.3 What concise means for the model
The notation is a property of the standard category alone. The model always carries the full magnitude; the concise notation says that the AsciiMath and any other reporting-shaped encoding of this node uses the concise reporting form. Reading a concise form back yields a node with notation concise and the reconstructed full magnitude: 10.3(2) reads back as value 10.3, magnitude 0.2.
7.4 The expanded and interval categories carry no notation
A notation argument accompanying an expanded uncertainty or a coverage interval is refused: the notion belongs to the standard-uncertainty reporting form. This keeps the concise digit string unambiguous: it appears only where its decimal-places rule is defined.
7.5 Concise across value shapes
The concise rule binds the magnitude’s decimal places to the value’s, so its behaviour at the edges is pinned by examples:
| Value | Magnitude | Concise? | Reporting form |
|---|---|---|---|
| 10.3 | 0.2 | yes | 10.3(2) |
| 10 | 2 | yes | 10(2) |
| 10.0 | 0.0 | yes | 10.0(0) |
| 10.3 | 0.25 | no | refused at construction |
| 10.3 | 2 | no | refused at construction |
| -42.1 | 0.5 | yes | -42.1(5) |
A zero magnitude is well formed (10.0(0)) — a reported uncertainty of zero is the author’s statement. The negative value carries its sign on the value; the magnitude stays unsigned.
7.6 Notation is not a suggestion to writers
A writer that receives a concise node and renders the absolute reporting form has not honoured the model: the notation is carried precisely so the reporting shape follows the author’s choice. The encodings of clause 9 emit the concise reporting form exactly where this document says (AsciiMath) and the qualified marker where the format carries semantics.
7.7 Reading the concise form
Reading 10.3(2) reconstructs the full magnitude by aligning the digit string to the value’s decimal places: one digit at one decimal place gives 0.2. The reconstruction is defined only because the concise rule guaranteed the place counts match; a malformed concise form is a reading error, not a reconstruction opportunity (document 1003 owns the error behaviour).
8 Exact-decimal discipline
8.1 The grammar
Every number the node carries is a plain decimal:
| Field | Grammar | Examples |
|---|---|---|
| value | -? digits ( . digits )? | 10.3, -42, 0.0015 |
| magnitude, coverage_factor, coverage_probability, lower, upper | digits ( . digits )? | 0.2, 2, 0.95 |
No exponent forms, no signs on the unsigned fields, no separators. A value carried as anything else — a computed float, a Number with a base or a size qualifier, an empty string — is refused at construction.
8.2 Verbatim preservation
The node stores the digits as written. 2.10 and 2.1 are different exact decimals: the trailing zero is the author’s statement of precision, and the model does not speak over it. Every encoding emits the digits verbatim; every exact comparison in this model — the concise rule, the probability bounds — compares the decimal strings digit-wise without converting to floating point.
EXAMPLE
A node with value 10.30, magnitude 0.20. Expected outcome. every encoding emits 10.30 and 0.20 with the trailing zeros intact; no surface normalises them away.
8.3 Rounding is the author’s act
The node never calculates, rounds or converts its numbers (JCGM 100 7.2.2). Where evaluation (document 1004) produces numbers, they are produced as exact decimals by the evaluation rules of CalConnect 36813 and attached to new nodes; an existing node’s fields are never rewritten in place.
8.4 Comparisons without floating point
The two comparisons the model performs — the concise decimal-places rule and the coverage-probability bounds — are defined on the digit strings:
the probability check requires the first nonzero digit of the fraction to exist (strictly greater than zero) and the string to compare strictly less than "1" digit-wise;
the concise rule compares decimal-place counts, which is a property of the strings alone.
Both refuse inputs whose comparison would require rounding.
8.5 Worked comparisons
The comparisons are on strings, and the examples below pin the edge behaviour.
EXAMPLE 1
Probability 0.999 against the bound 1. Expected outcome. accepted: digit-wise, 0.999 is strictly less than 1. The check does not convert to float; a float conversion of 0.999999999999999999 would equal 1.0 and wrongly refuse.
EXAMPLE 2
Probability 1.0. Expected outcome. refused: the string equals the upper bound digit-wise; a probability of exactly one is not a coverage probability.
EXAMPLE 3
Probability 0.0. Expected outcome. refused: the string has no nonzero digit, so it is not strictly greater than zero.
EXAMPLE 4
Probability 0.90. Expected outcome. accepted: trailing zeros do not affect the digit-wise comparison; the encoding emits 0.90 verbatim, never 0.9.
EXAMPLE 5
Magnitude 0.2 against value 10.3 for conciseness: decimal places 1 and 1. Expected outcome. accepted; the concise digit string is 2.
EXAMPLE 6
Magnitude 0.02 against value 10.3 for conciseness: decimal places 2 and 1. Expected outcome. refused: the magnitudes’ decimal places do not match the value’s, and 10.3(02) is not a defined form.
8.6 Where the discipline comes from
JCGM 100 7.2.2 fixes the reporting forms and assigns rounding to the reporter. The exact-decimal discipline is that assignment made executable: the model cannot round because it does not compute, and it cannot silently normalise because its numbers are text. The same discipline governs the whole Plurimath stack through CalConnect 36813; this document applies it to the uncertainty fields.
9 Per-format encodings
9.1 The encoding matrix
Each format has one encoding per category. The matrix states which formats carry the semantics machine-readably (via the marker) and which carry the reported shape only.
| Format | standard | expanded | coverage-interval | Semantics carrier |
|---|---|---|---|---|
| AsciiMath | ustd(v, m) | uexp(v, m, k, p) | ucov(v, l, u, p, kind) | the call itself |
| LaTeX | v(m) | (v \pm m) + statements | v, [l, u] + statements | shape only |
| HTML | v(m) | (v ± m) + statements | v, [l, u] + statements | shape only |
| UnicodeMath | intent wrapper | intent wrapper | intent wrapper | ⓘ("marker"...) |
| MathML | intent on the enclosing mrow | same | same | intent attribute |
| OMML | marker run + shape | same | same | marker convention |
9.2 AsciiMath
The category call names are ustd, uexp, ucov. Arguments are the node’s numbers in category order, comma-space separated. The interval kinds are spelled shortest and symmetric in AsciiMath (the model’s probabilistically-symmetric, respelled because AsciiMath reads - as minus). The concise notation renders the reporting form v(digits) instead of a call. The unit travels in the quoted UnitsML channel "unitsml(...)" when the unit is expressible there (clause 10).
EXAMPLE
The four standard-uncertainty shapes. Expected outcome. value 10.3 magnitude 0.2 absolute: ustd(10.3, 0.2); the same with notation concise: 10.3(2); expanded with k = 2, p = 0.95: uexp(10.3, 0.5, 2, 0.95); interval shortest with p = 0.95: ucov(10.3, 9.9, 10.7, 0.95, shortest); the symmetric kind spells symmetric in the same position.
9.3 LaTeX
The standard category renders the reporting form v(m) — the full magnitude in the parentheses, whatever the notation. The expanded category renders (v \pm m) followed by the statements ~(k = K) and (p = P) for the fields present. The interval category renders v,~[l, u] followed by the kind and probability statements. Statements are appended after the unit.
EXAMPLE
The expanded node of clause 6 in LaTeX. Expected outcome. (10.3 \pm 0.5) g~(k = 2, p = 0.95) — shape, unit, then the statements, in that order.
9.4 HTML
The HTML encoding is the LaTeX encoding with the Unicode ± (U+00B1), plain spaces, and no TeX-specific spacing. Interval and statement shapes are identical.
9.5 UnicodeMath
The whole node is wrapped in an intent: ⓘ("marker" visible), where marker is the full marker string of clause 5 and visible is the display shape — the reporting form for standard, (v±m) plus statement text for expanded, v, [l, u] plus statement text for the interval. A unit travels in ⓐ(unit ...) inside the wrapper.
EXAMPLE
The standard node in UnicodeMath. Expected outcome. ⓘ("standard-uncertainty(10.3,0.2)"10.3(0.2)) — marker with arguments, then the visible shape.
9.6 MathML
The node renders as an mrow carrying the intent attribute with the marker string. Its content: mn for the value, a fenced group for the magnitude ((m)), (v ± m) for expanded, mn(v), mfenced[l, u] for the interval, followed by the unit’s MathML form when present.
9.7 OMML
The OMML surface carries the marker as a convention: a run holding the marker string precedes the shape runs (value run, fence with magnitude run, and so on), and the unit, when present, is boxed. OMML has no intent mechanism; the marker run is the machine-readable channel, and consumers that do not understand it ignore one run of text.
9.8 Statements
The appended statements of LaTeX, HTML and UnicodeMath state the fields the shape cannot show: the coverage factor as k = K, the coverage probability as p = P, the interval kind as its spelled name. Statements appear in one fixed order — kind, factor, probability — after the unit.
9.9 Emission algorithms
The encodings are stated as algorithms so that two implementations cannot diverge over punctuation or order.
9.9.1 AsciiMath emission
Begin the call: the category name (ustd, uexp, ucov) and (.
Append the arguments in the order of Annex A, comma-space separated, omitting absent optional arguments.
Close the call with ).
For a standard node with concise notation, emit instead the reporting form: the value, (, the concise digit string, ).
If the unit is expressible in UnitsML, append a space and "unitsml(<expression>)"; otherwise append a space and the unit’s own AsciiMath rendering.
9.9.2 LaTeX emission
Standard: the value, (, the full magnitude, ).
Expanded: (, the value, ` \pm `, the magnitude, ).
Interval: the value, ,~[, the lower, `, `, the upper, ].
Append the unit’s LaTeX rendering, preceded by a space, when present.
Append the statements (Annex A order), each preceded by ~ in LaTeX.
9.9.3 HTML emission
Identical to LaTeX with three substitutions: ± (U+00B1) for \pm, plain spaces for the tildes, and no TeX spacing inside the interval.
9.9.4 UnicodeMath emission
Begin ⓘ(" and the marker string (clause 5), then ".
Append the visible shape: the reporting form for standard (absolute shape regardless of notation), (v±m) for expanded with the statement texts appended as plain text, v, [l, u] for the interval likewise.
If the unit is present, append `ⓐ(unit ` and the unit’s UnicodeMath rendering and ).
Close with ).
9.9.5 MathML emission
Open an mrow with the intent attribute set to the marker string.
Standard: mn with the value, then an mfenced open and close parenthesis containing mn with the full magnitude.
Expanded: mfenced containing mn(value), mo(±), mn(magnitude).
Interval: mn(value), mo(,), mfenced with open bracket and close bracket containing mn(lower), mo(,), mn(upper).
Append the unit’s MathML form when present. Close the mrow.
9.9.6 OMML emission
Emit a run containing the marker string.
Emit the shape runs: the value, then a fenced group for the magnitude (standard) or the parenthesised ± group (expanded) or the bracketed interval (interval).
If the unit is present, emit it boxed after the shape.
9.10 Reading contracts
The reading contracts of the lossless encodings belong to document 1003. This document constrains them with one rule each:
AsciiMath: the call forms and the concise reporting form read back to the node with the fields the arguments carry;
UnicodeMath: the ⓘ wrapper is authoritative for the fields; the visible shape is regenerated;
MathML: the intent attribute is authoritative;
OMML: the marker run is authoritative;
LaTeX and HTML: display surfaces, not read.
A reader that finds a marker and a visible shape disagreeing follows the marker.
9.11 Encodings by category, format by format
9.11.1 AsciiMath
| Node | Encoding |
|---|---|
| standard, absolute, no unit | ustd(10.3, 0.2) |
| standard, concise | 10.3(2) |
| standard, absolute, unit g | ustd(10.3, 0.2) "unitsml(g)" |
| expanded with k and p | uexp(10.3, 0.5, 2, 0.95) |
| expanded without p | uexp(10.3, 0.5, 2) |
| interval, shortest, with p | ucov(10.3, 9.9, 10.7, 0.95, shortest) |
| interval, symmetric, without p | ucov(10.3, 9.9, 10.7, symmetric) |
9.11.2 LaTeX
| Node | Encoding |
|---|---|
| standard, absolute | 10.3(0.2) |
| standard, concise | 10.3(0.2) — the carried magnitude, never the digit string |
| expanded with k and p | (10.3 \pm 0.5)~(k = 2,~(p = 0.95)) |
| expanded without p | (10.3 \pm 0.5)~(k = 2) |
| interval, shortest, with p | 10.3,~(shortest,(p = 0.95)) |
9.11.3 UnicodeMath
The wrapper makes the shape visible and the fields authoritative:
| Node | Encoding |
|---|---|
| standard, absolute | ⓘ("standard-uncertainty(10.3,0.2)"10.3(0.2)) |
| standard, concise | ⓘ("standard-uncertainty:concise(10.3,0.2)"10.3(0.2)) |
| expanded with k and p | ⓘ("expanded-uncertainty(10.3,0.5,2,0.95)"(10.3±0.5)(k = 2)(p = 0.95)) |
| interval, shortest, with p | ⓘ("coverage-interval:shortest(10.3,9.9,10.7,0.95)"10.3, [9.9, 10.7](shortest)(p = 0.95)) |
9.11.4 MathML and OMML
Both carry the marker of clause 5 as the authoritative channel and the same visible shapes as HTML, with the construction rules of the emission algorithms. The marker argument list is identical in both.
9.12 Statement grammar
The statement texts are a small fixed grammar, so that a reader can recover k, p and the kind from the shape-only encodings:
statement = kind-statement | factor-statement | probability-statement
kind-statement = "(" kind ")"
factor-statement = "(" "k" "=" unsigned-decimal ")"
probability-statement = "(" "p" "=" unsigned-decimal ")"
kind = "shortest" | "probabilistically-symmetric"
Statements appear in the order kind, factor, probability, separated by a space in HTML and by ~ in LaTeX. The readers of document 1003 use this grammar to recover the fields; a statement outside the grammar is not part of a node’s encoding.
10 Units on an uncertainty
10.1 The unit field
A node may carry one unit, held as a UnitsML embedding (PM 1001, Unitsml node). The unit qualifies the value, the magnitude and the endpoints alike: the node reports “10.3 g with 0.2 g”, and the unit appears once.
10.2 Expressibility
When the unit is expressible in the asciiunits content language (CalConnect 36817) — a single symbol such as g, kg, m/s2 — the AsciiMath encoding embeds it in the quoted UnitsML channel: ustd(10.3, 0.2) "unitsml(g)". The embedding is attempted at encoding time; the attempt uses the UnitsML reader, and a unit the reader refuses falls back to visible placement.
EXAMPLE
A node with unit g in AsciiMath. Expected outcome. ustd(10.3, 0.2) "unitsml(g)" — the channel carries the unit machine-readably and the unit does not appear again in the call or after it.
10.3 Visible placement
When the unit is not expressible in UnitsML — arbitrary text the reader rejects — the AsciiMath encoding places the unit visibly after the call, which is the only place the AsciiMath reader accepts it: ustd(10.3, 0.2) <unit>. The unit then travels as ordinary trailing content, and the format’s own encoding carries it (LaTeX after the shape, UnicodeMath inside ⓐ(...), and so on).
10.4 Constraints
The unit is either a Unitsml node or a non-empty formula holding no uncertainty: a unit containing an uncertainty is refused (InvalidUncertainty, “unit must not contain an uncertainty”). A unit is not a place for content; it names the measurement unit and nothing else.
10.5 Losslessness
The unit survives every lossless round trip. The quoted channel and the visible placements of clause 9 read back to the unit field; a format transition that silently drops the unit is a defect of the encoding, not a permitted loss.
10.6 Worked unit cases
| Unit | Expressible in UnitsML | AsciiMath encoding |
|---|---|---|
| g | yes | ustd(10.3, 0.2) "unitsml(g)" |
| m/s2 | yes | ustd(10.3, 0.2) "unitsml(m/s2)" |
| mm | yes | ustd(500.0, 0.5) "unitsml(mm)" |
| arbitrary text | no | ustd(10.3, 0.2) <unit rendered visibly> |
The expressibility question is answered by the UnitsML reader at encoding time, not by a table in this document: a unit the reader accepts travels in the channel, and a unit it refuses travels visibly. The same node encodes differently across the two cases only in where the unit sits; the unit field itself is identical.
10.7 Units on intervals
The interval endpoints share the value’s unit; the unit appears once. [9.9, 10.7] g is one unit for the interval, not one per endpoint — reporting two units would double-count the measurement unit and is not a defined encoding.
11 Conformance
11.1 General
Conformance to this document is the implementation of the uncertainty node per clause 5 with the encodings of clause 9. Claims are per class; every claim is discharged by replaying frozen vectors.
11.2 Conformance classes
| Class | Licenses the implementation to claim | Replay requirements |
|---|---|---|
| uncertainty-model | constructs, validates and inspects uncertainty nodes per clauses 5 to 8 | the construction and refusal vectors of Annex C |
| encode-asciimath | encodes uncertainty nodes per clause 9 in AsciiMath | the AsciiMath column of the uncertainty corpus, byte-identically |
| encode-latex | encodes per clause 9 in LaTeX | the LaTeX column, byte-identically |
| encode-html | encodes per clause 9 in HTML | the HTML column, byte-identically |
| encode-unicodemath | encodes per clause 9 in UnicodeMath | the UnicodeMath column, byte-identically |
| encode-mathml | encodes per clause 9 in MathML with intent markers | the MathML column, byte-identically |
| encode-omml | encodes per clause 9 in OMML with the marker convention | the OMML column, byte-identically |
| full-uncertainty | all of the above | all columns |
An encode-<format> claim carries uncertainty-model with it.
11.3 The uncertainty corpus
The corpus is a frozen set of nodes with, per format, their expected encodings. Entries state their provenance (the node’s fields, the model version that froze the encodings) and replay without modification. Encodings change only at an edition of this document.
11.4 Round-trip classes
A claim of round-trip for a format means: reading the format’s encoding of a corpus node back yields a node equal to it. Round-trip claims exist for the formats whose readers are specified in document 1003; this document defines the property, that document its mechanics.
11.5 Corpus governance
The uncertainty corpus is owned like every corpus in the series: entries are frozen with provenance, replay byte-identically, and change only at an edition. A change to any encoding of this document — a punctuation move, a statement rewording, a marker change — produces a model-version change and a new corpus generation, never a patch over frozen bytes.
The corpus covers, at minimum: every category in every format; the concise and absolute notations; the two interval kinds; optional fields present and absent; the unit expressible and not expressible; and every refusal vector of Annex C.
11.6 Drift and disagreement
An implementation whose encodings differ from the corpus does not conform at the corpus’s model version. An implementation whose tree differs from the clause 5 model does not conform, whatever its encodings do. Disagreements between this document and the implementation are resolved by fixing one of the two and recording which moved.
12 Annex A: encoding details
12.1 General
This annex fixes the remaining details the clause 9 tables summarise: argument orders, statement texts, spelling tables and the marker grammar. The encodings here are normative to the byte for the fixed parts (call names, punctuation, marker strings); the numbers are verbatim by clause 8.
12.2 Argument orders
| Call | Arguments in order | Optional |
|---|---|---|
| ustd(v, m) | value, magnitude | none |
| uexp(v, m, k, p) | value, magnitude, coverage factor, coverage probability | p |
| ucov(v, l, u, p, kind) | value, lower, upper, coverage probability, kind | p |
Omitted optional arguments do not leave empty positions: uexp(10.3, 0.5, 2) is the encoding of an expanded node without probability, and ucov(10.3, 9.9, 10.7, shortest) of an interval without one.
12.3 Statement texts
| Field | LaTeX text | HTML text |
|---|---|---|
| interval kind | ~(shortest) | (shortest) |
| coverage factor | ~(k = 2) | (k = 2) |
| coverage probability | ~(p = 0.95) | (p = 0.95) |
Statements appear in the order kind, factor, probability. The kind statement appears only for the interval category, the factor statement only for the expanded category, the probability statement for either when the field is present.
12.4 Interval kind spelling
| Model value | AsciiMath | Markers and statements |
|---|---|---|
| shortest | shortest | shortest |
| probabilistically-symmetric | symmetric | probabilistically-symmetric |
The AsciiMath respelling exists because - reads as minus there. Every other surface uses the full model name.
12.5 Concise digit string
The concise digit string is computed from the magnitude’s text: remove the decimal point, remove the leading zeros of the result. An empty result renders as 0.
EXAMPLE
Magnitudes and their concise digit strings at value 10.3. Expected outcome. 0.2 gives 2; 0.20 gives 20 — and the node is refused, because 0.20 has two decimal places against the value’s one; 2 gives 2 at value 10 (decimal places zero on both sides); 0.0 gives 0 at value 10.0.
12.6 Marker grammar
marker = category-marker [ ":concise" ] [ ":" kind ]
category-marker = "standard-uncertainty" | "expanded-uncertainty" | "coverage-interval"
kind = "shortest" | "probabilistically-symmetric"
The :concise qualifier appears only on the standard marker, the :kind qualifier only on the coverage-interval marker. Where the enclosing format shows marker arguments, they are the numbers in the call argument order of this annex, comma-separated without spaces.
EXAMPLE
Markers and their argument shapes. Expected outcome. standard-uncertainty(10.3,0.2); standard-uncertainty:concise(10.3,0.2); expanded-uncertainty(10.3,0.5,2,0.95); coverage-interval:shortest(10.3,9.9,10.7,0.95); coverage-interval:probabilistically-symmetric(10.3,9.9,10.7).
13 Annex B: rejected designs
This annex records the designs this model rejected and why, so that the decisions do not relitigate themselves.
13.1 Uncertainty as arithmetic affinity
Carrying uncertainty as an arithmetic property that propagates through every operator automatically (the design of Python’s uncertainties package, where ufloat(10.3, 0.2) * 2 yields a value with a propagated uncertainty) was rejected. Plurimath’s tree is a formula tree, not an evaluation graph: propagation happens in evaluation (document 1004), on demand, with the GUM rules applied where the author asked for them. Attaching propagation to the node would force every rendering to be an evaluation and would give reported results and computed results different semantics in the same tree.
13.2 Uncertainty as a first-class linear token
Wolfram’s Around[10.3, 0.2] renders 10.3 ± 0.2 and reads back symmetrically. The ± form was rejected as the model’s carrier because it is ambiguous between the standard-uncertainty reading (± one standard uncertainty, the GUM convention) and the expanded reading (± U with a coverage factor) — the ambiguity the GUM itself warns about when the form is used without qualification. The ± shape remains a rendering of the expanded category, never the carrier.
13.3 Concise as an input notation for reporting-shaped readers
Accepting 10.3(2) as an input shorthand everywhere was rejected: the concise rule needs the value’s decimal-place count, and a reader that accepts it must silently reconstruct the magnitude — a transformation that belongs to a defined reading contract, not to every surface. The concise form is a reporting form the AsciiMath encoding emits and the AsciiMath reader of document 1003 reads under its stated rule.
13.4 +- as an infix input
The AsciiMath-style +- infix was rejected outright: 3+-1 is genuinely ambiguous, and the node model has no operation it could denote. The ± character is output-only, inside the encodings of clause 9.
13.5 Per-format uncertainty markup families
Encoding uncertainties as format-native layout per format (say, OMML phantom boxes that simulate reporting forms without any marker) was rejected: the semantics would live nowhere machine-readably. Every format’s encoding carries the marker where the format has any machine-readable channel at all (intent in MathML and UnicodeMath, the marker run in OMML, the call in AsciiMath).
13.6 Why three categories and no more
The GUM family gives exactly three reported shapes: the standard uncertainty (one number), the expanded uncertainty (magnitude with a factor and optionally a probability), and the coverage interval (endpoints with a kind and optionally a probability). A fourth category — “coverage factor with asymmetric magnitudes”, say — would need a shape no encoding defines and a semantics no JCGM document states; when such a category appears in practice, this document gains it at an edition, with its fields, its encodings and its corpus, rather than by stretching an existing one.
13.7 Why the model carries the reporting notation
A stricter design would carry only absolute magnitudes and let writers choose the reporting form. The concise notation is carried because the reporting form is part of how the author reported the result: 10.3(2) and 10.3(0.2) are the same measurement but not the same document. The model carries the distinction; the encodings honour it.
13.8 Why statements and not subscripts or footnotes
The k and p statements of the LaTeX and HTML encodings could be typeset as subscripts or marginal notes. Statements were chosen because they round-trip: a subscript would need parsing conventions in every reader to recover k and p, while the statement text is recoverable by the readers of document 1003 from the fixed statement grammar of this document’s encodings.
13.9 Why markers rather than format profiles
A cleaner-looking alternative to the OMML marker run and the UnicodeMath wrapper is a “profile” convention: publish per-format stylesheets that recognise uncertainty shapes by their layout. Rejected: layout recognition is ambiguous exactly where the shapes overlap ((v ± m) is a legitimate ordinary expression), and a profile makes every consumer trust typesetting for semantics. The marker is explicit, travels inside the document, and needs no stylesheet.
13.10 Why the category names the call
ustd, uexp and ucov name the category in the AsciiMath encoding itself. A single call with a category argument (unc(std, 10.3, 0.2)) was rejected: the three forms differ in arity and argument meaning, so the argument list is only interpretable once the category is known — putting the category in the name keeps every call self-describing and keeps the concise reporting form a natural special case rather than a branch.
14 Annex C: test-suite examples
Vectors illustrative of the conformance classes of clause 11. Each states the node, the property under test, and the expected outcome. The uncertainty corpus carries the frozen versions.
14.1 Construction and refusal (class uncertainty-model)
EXAMPLE 1
ustd node: value 10.3, magnitude 0.2, notation absolute. Expected outcome. constructed; == holds for an identically constructed node and fails when any field differs, including the notation.
EXAMPLE 2
A standard node also given a coverage factor. Expected outcome. InvalidUncertainty: “coverage_factor does not apply to a standard uncertainty”.
EXAMPLE 3
An expanded node with coverage factor 0. Expected outcome. InvalidUncertainty: “coverage factor 0 must be greater than 0”.
EXAMPLE 4
An expanded node with coverage probability 1. Expected outcome. InvalidUncertainty: “coverage probability 1 must lie strictly between 0 and 1”. The comparison is exact: 0.999...9 with arbitrarily many nines is accepted, and no floating point is involved.
EXAMPLE 5
A standard node with concise notation, value 10.3, magnitude 0.25. Expected outcome. InvalidUncertainty naming the decimal-place mismatch (clause 7).
EXAMPLE 6
A value carried as a computed float or a Number with a base. Expected outcome. InvalidUncertainty: the value must be a plain signed decimal.
EXAMPLE 7
A unit holding an uncertainty. Expected outcome. InvalidUncertainty: “unit must not contain an uncertainty”.
14.2 Encodings, standard category (classes encode-*)
EXAMPLE 1
Value 10.3, magnitude 0.2, absolute, unit g. Expected outcome. AsciiMath ustd(10.3, 0.2) "unitsml(g)"; LaTeX 10.3(0.2) g; HTML 10.3(0.2) g; UnicodeMath ⓘ("standard-uncertainty(10.3,0.2)"10.3(0.2)ⓐ(unit g)); MathML mrow with intent="standard-uncertainty(10.3,0.2)" containing the value, fence, and unit; OMML with the marker run standard-uncertainty(10.3,0.2) before the shape runs and the unit boxed.
EXAMPLE 2
The same node with notation concise. Expected outcome. AsciiMath renders the reporting form 10.3(2); the marker qualifies to standard-uncertainty:concise(10.3,0.2); every other surface’s visible shape is unchanged (10.3(0.2)), because the carried magnitude is the same.
14.3 Encodings, expanded category
EXAMPLE 1
Value 10.3, magnitude 0.5, coverage factor 2, coverage probability 0.95, unit g. Expected outcome. AsciiMath uexp(10.3, 0.5, 2, 0.95) "unitsml(g)"; LaTeX (10.3 \pm 0.5) g~(k = 2, p = 0.95); HTML (10.3 ± 0.5) g (k = 2, p = 0.95); UnicodeMath ⓘ("expanded-uncertainty(10.3,0.5,2,0.95)"...); MathML intent expanded-uncertainty(10.3,0.5,2,0.95); OMML marker run expanded-uncertainty(10.3,0.5,2,0.95).
EXAMPLE 2
The same without the probability. Expected outcome. the probability argument and the p = 0.95 statement are absent everywhere; no empty positions or empty statements remain.
14.4 Encodings, coverage-interval category
EXAMPLE 1
Value 10.3, lower 9.9, upper 10.7, probability 0.95, kind shortest, unit g. Expected outcome. AsciiMath ucov(10.3, 9.9, 10.7, 0.95, shortest) "unitsml(g)"; LaTeX 10.3,~[9.9, 10.7] g~(shortest, p = 0.95)-shaped output with the statements in kind-then-probability order; UnicodeMath with marker coverage-interval:shortest(10.3,9.9,10.7,0.95); MathML intent likewise; OMML marker run matching.
EXAMPLE 2
The same with kind probabilistically-symmetric. Expected outcome. AsciiMath spells symmetric; the markers and statements spell probabilistically-symmetric; the model value round-trips either spelling back to the same kind.
14.5 Unit handling (classes encode-*)
EXAMPLE
A unit the UnitsML reader rejects, in AsciiMath. Expected outcome. the call renders and the unit follows visibly after it; the quoted channel is absent; nothing is dropped.
14.6 Round trips
EXAMPLE
Each corpus node’s lossless encoding read back. Expected outcome. a node equal to the original in every field, including category, notation and interval kind; the unit equals the original unit.
14.7 Round trips through the quoted channel
EXAMPLE 1
ustd(10.3, 0.2) "unitsml(m/s2)" read back by the AsciiMath reader of document 1003. Expected outcome. a node equal to the original: value 10.3, magnitude 0.2, absolute notation, unit the UnitsML embedding of m/s2; the quoted channel reconstructs the unit exactly.
EXAMPLE 2
10.3(2) read back. Expected outcome. a node with value 10.3, magnitude 0.2, notation concise; the concise digit string of the reconstructed node renders 10.3(2) again.
14.8 The refusal vectors, rule by rule
One vector per validation rule, so the corpus pins every refusal message.
EXAMPLE 1
A coverage_probability field on a standard node. Expected outcome. refused: “coverage_probability does not apply to a standard uncertainty”.
EXAMPLE 2
An interval_kind on an expanded node. Expected outcome. refused: “interval_kind does not apply to a expanded uncertainty”.
EXAMPLE 3
A standard node without a magnitude. Expected outcome. refused: “magnitude is required for a standard uncertainty”.
EXAMPLE 4
An expanded node without a coverage factor. Expected outcome. refused: “coverage_factor is required for a expanded uncertainty”.
EXAMPLE 5
A coverage-interval node without an upper endpoint. Expected outcome. refused: “upper is required for a coverage interval uncertainty” — the node names its category as it does in the markers, with hyphens.
EXAMPLE 6
A negative magnitude. Expected outcome. refused: the magnitude must be an unsigned plain decimal.
EXAMPLE 7
A value 1.5e3. Expected outcome. refused: exponent forms are not plain decimals; the author writes 1500 or reports in a smaller unit.
EXAMPLE 8
A notation concise argument on an expanded node. Expected outcome. refused: “notation :concise applies only to a standard uncertainty”.
EXAMPLE 9
An empty unit formula. Expected outcome. refused: “unit must not be empty”.
EXAMPLE 10
A value that is not a Number node at all. Expected outcome. refused: “value must be a Math::Number holding a plain decimal, got …” — the message carries the offending object’s inspection.
15 Annex D: worked end-to-end results
Three complete results, each from the author’s report through the node to every encoding. These are the shapes the corpus freezes.
15.1 Result one: a gauge-block length
The author reports: “the length is 500.0 mm with standard uncertainty 0.5 mm”.
The node: category standard, value 500.0, magnitude 0.5, notation absolute, unit the UnitsML embedding of mm.
The encodings:
| Format | Encoding |
|---|---|
| AsciiMath | ustd(500.0, 0.5) "unitsml(mm)" |
| LaTeX | 500.0(0.5) mm |
| HTML | 500.0(0.5) mm |
| UnicodeMath | ⓘ("standard-uncertainty(500.0,0.5)"500.0(0.5)ⓐ(unit mm)) |
| MathML | mrow with intent="standard-uncertainty(500.0,0.5)", mn(500.0), fenced mn(0.5), unit |
| OMML | marker run standard-uncertainty(500.0,0.5), value run, fenced magnitude run, boxed unit |
Reading the AsciiMath encoding back yields the node. The trailing zero of 500.0 is present in every encoding and in the read-back node.
15.2 Result two: an expanded uncertainty
The author reports: “the mass difference is 10.3 g, U = 0.5 g (k = 2, p = 95%)”.
The node: category expanded, value 10.3, magnitude 0.5, coverage factor 2, coverage probability 0.95, unit g.
The encodings:
| Format | Encoding |
|---|---|
| AsciiMath | uexp(10.3, 0.5, 2, 0.95) "unitsml(g)" |
| LaTeX | (10.3 \pm 0.5) g~(k = 2,~(p = 0.95))-shaped output with the statements in factor-then-probability order |
| HTML | (10.3 ± 0.5) g (k = 2) (p = 0.95) |
| UnicodeMath | ⓘ("expanded-uncertainty(10.3,0.5,2,0.95)"...) with the visible shape and statements |
| MathML | mrow with intent="expanded-uncertainty(10.3,0.5,2,0.95)", fenced (10.3 ± 0.5), unit |
| OMML | marker run expanded-uncertainty(10.3,0.5,2,0.95), fenced ± runs, boxed unit |
Dropping the probability from the report drops the p argument and the (p = 0.95) statement everywhere; no empty positions remain.
15.3 Result three: a Monte Carlo coverage interval
The author reports: “10.3 g, 95 % coverage interval [9.9, 10.7], shortest interval (JCGM 101 §9)”.
The node: category coverage-interval, value 10.3, lower 9.9, upper 10.7, interval kind shortest, coverage probability 0.95, unit g.
The encodings:
| Format | Encoding |
|---|---|
| AsciiMath | ucov(10.3, 9.9, 10.7, 0.95, shortest) "unitsml(g)" |
| LaTeX | 10.3,~[9.9, 10.7] g(shortest,(p = 0.95))-shaped output |
| HTML | 10.3, [9.9, 10.7] g (shortest) (p = 0.95) |
| UnicodeMath | ⓘ("coverage-interval:shortest(10.3,9.9,10.7,0.95)"...) |
| MathML | mrow with intent="coverage-interval:shortest(10.3,9.9,10.7,0.95)", value, bracketed group, unit |
| OMML | marker run coverage-interval:shortest(10.3,9.9,10.7,0.95), shape runs, boxed unit |
The same result with the probabilistically symmetric kind changes three things and nothing else: the AsciiMath kind spells symmetric, the markers and kind statements spell probabilistically-symmetric, and the model’s interval_kind field reads back as probabilistically-symmetric from every lossless encoding.
15.4 What the three results show
The category, the kind and the notation travel through every encoding that can carry them, and the shapes differ across categories in every format.
The numbers are verbatim everywhere; nothing normalises, rounds or reorders digits.
The unit appears exactly once per encoding, in the channel that format uses for units.
Round trips recover the node, not an approximation of it.
Bibliography
[1] Plurimath repository, — https://github.com/plurimath/plurimath
[2] Plurimath::Math::Function::Uncertainty implementation, — the reference implementation of this model
[3] JCGM 100:2008, INTERNATIONAL ORGANIZATION FOR STANDARDIZATION, ORGANISATION INTERNATIONALE DE NORMALISATION (ISO), INTERNATIONAL ELECTROTECHNICAL COMMISSION, COMMISSION ÉLECTROTECHNIQUE INTERNATIONALE (IEC), INTERNATIONAL ORGANIZATION OF LEGAL METROLOGY, ORGANISATION INTERNATIONALE DE MÉTROLOGIE LÉGALE (OIML), INTERNATIONAL UNION OF PURE AND APPLIED CHEMISTRY, UNION INTERNATIONALE DE CHIMIE PURE ET APPLIQUÉE (IUPAC), INTERNATIONAL UNION OF PURE AND APPLIED PHYSICS, UNION INTERNATIONALE DE PHYSIQUE PURE ET APPLIQUÉE (IUPAP), INTERNATIONAL FEDERATION OF CLINICAL CHEMISTRY AND LABORATORY MEDICINE, FÉDÉRATION INTERNATIONALE DE CHIMIE CLINIQUE ET DE BIOLOGIE MOLÉCULAIRE (IFCC), INTERNATIONAL LABORATORY ACCREDITATION COOPERATION, COOPÉRATION INTERNATIONALE D’ACCRÉDITATION DES LABORATOIRES (ILAC), and BUREAU INTERNATIONAL DES POIDS ET MESURES (BIPM). Guide to the expression of uncertainty in measurement. Report no. JCGM 100:2008. First edition. Paris: International Bureau of Weights and Measures, Bureau international des poids et mesures; International Organization for Standardization, Organisation internationale de normalisation; International Electrotechnical Commission, Commission électrotechnique internationale, 2008. Available from: https://www.bipm.org/documents/20126/2071204/JCGM_100_2008_E.pdf/cb0ef43f-baa5-11cf-3f85-4dcd86f77bd6.
[4] JCGM 101:2008, INTERNATIONAL ORGANIZATION FOR STANDARDIZATION, ORGANISATION INTERNATIONALE DE NORMALISATION (ISO), INTERNATIONAL ELECTROTECHNICAL COMMISSION, COMMISSION ÉLECTROTECHNIQUE INTERNATIONALE (IEC), INTERNATIONAL ORGANIZATION OF LEGAL METROLOGY, ORGANISATION INTERNATIONALE DE MÉTROLOGIE LÉGALE (OIML), INTERNATIONAL UNION OF PURE AND APPLIED CHEMISTRY, UNION INTERNATIONALE DE CHIMIE PURE ET APPLIQUÉE (IUPAC), INTERNATIONAL UNION OF PURE AND APPLIED PHYSICS, UNION INTERNATIONALE DE PHYSIQUE PURE ET APPLIQUÉE (IUPAP), INTERNATIONAL FEDERATION OF CLINICAL CHEMISTRY AND LABORATORY MEDICINE, FÉDÉRATION INTERNATIONALE DE CHIMIE CLINIQUE ET DE BIOLOGIE MOLÉCULAIRE (IFCC), INTERNATIONAL LABORATORY ACCREDITATION COOPERATION, COOPÉRATION INTERNATIONALE D’ACCRÉDITATION DES LABORATOIRES (ILAC), and BUREAU INTERNATIONAL DES POIDS ET MESURES (BIPM). Supplement 1 to the “Guide to the expression of uncertainty in measurement” — Propagation of distributions using a Monte Carlo method. Report no. JCGM 101:2008. First edition. Paris: International Bureau of Weights and Measures, Bureau international des poids et mesures; International Organization for Standardization, Organisation internationale de normalisation; International Electrotechnical Commission, Commission électrotechnique internationale, 2008. Available from: https://www.bipm.org/documents/20126/2071204/JCGM_101_2008_E.pdf/325dcaad-c15a-407c-1105-8b7f322d651c.
[5] Pendrill, L. R. (2024), Quantities and units: order amongst complexity, De Gruyter
[6] Python uncertainties package documentation, (rejected design, Annex B)
[7] Wolfram Language Around documentation, (rejected design, Annex B)
[8] CalConnect 36813, — the exact-decimal discipline applied across the stack