<?xml version="1.0" encoding="UTF-8"?>
<metanorma xmlns="https://www.metanorma.org/ns/standoc" type="semantic" version="2.9.1" schema-version="v2.3.0" flavor="ribose">
<bibdata type="standard">
<title language="en" type="main">Plurimath specifications — The pma notation</title>
<docidentifier primary="true" type="Ribose">1006(d)</docidentifier><docnumber>1006</docnumber><date type="updated"><on>2026-10-31</on></date><contributor><role type="author"/><organization>
<name>Ribose Asia Limited</name>
<abbreviation>Ribose</abbreviation></organization></contributor><contributor><role type="author"><description>committee</description></role><organization>
<name>Ribose Asia Limited</name>
<subdivision type="Committee" subtype="technical">
<name>Plurimath</name>
</subdivision></organization></contributor><contributor><role type="publisher"/><organization>
<name>Ribose Asia Limited</name>
<abbreviation>Ribose</abbreviation></organization></contributor><edition>1</edition><version>2026-10-31</version><language>en</language><script>Latn</script><status><stage>draft-standard</stage></status><copyright><from>2026</from><owner><organization>
<name>Ribose Asia Limited</name>
<abbreviation>Ribose</abbreviation></organization></owner></copyright><ext><doctype>standard</doctype><flavor>ribose</flavor></ext></bibdata><metanorma-extension><semantic-metadata><stage-published>false</stage-published></semantic-metadata>
<presentation-metadata><toc-heading-levels>2</toc-heading-levels><html-toc-heading-levels>2</html-toc-heading-levels><doc-toc-heading-levels>2</doc-toc-heading-levels><pdf-toc-heading-levels>2</pdf-toc-heading-levels></presentation-metadata></metanorma-extension>
<boilerplate><copyright-statement>

<clause id="_0bf1199e-8f6c-bc16-f9b0-78b3f1efec79" obligation="normative"><p id="_945067f2-795a-1e64-6f2b-25dd57c0f4d3">© Ribose Asia Limited 2026</p>
</clause>
</copyright-statement>

<license-statement>

<clause id="_3179d22c-816d-e694-6037-341f744bc6dc" obligation="normative">
<title id="_5ad8fb30-fcae-1072-87a2-407e6b4939ec">Warning for Drafts</title>
<p id="_a24807ee-0381-7ef8-1167-c3aacbb0fd73">This document is not a Ribose Standard. It is distributed for review and comment, and is subject to change without notice and may not be referred to as a Standard. Recipients of this draft are invited to submit, with their comments, notification of any relevant patent rights of which they are aware and to provide supporting documentation.</p>
</clause>
</license-statement>

<legal-statement>

<clause id="_7e0f3c63-3fc9-65cf-37f7-b94afa0dbc5d" obligation="normative"><p id="_50bbfa02-61c3-8332-bad8-61e7389d1808">All rights reserved. Unless otherwise specified, no part of this publication may be reproduced or utilized otherwise in any form or by any means, electronic or mechanical, including photocopying, or posting on the internet or an intranet, without prior written permission. Permission can be requested from the address below.</p>
</clause>
</legal-statement>

<feedback-statement>

<clause id="_d43a5e83-e752-e9bc-955e-4282a8ebb43a" obligation="normative"><p id="_0145a561-c9cc-a509-4784-ac2a1e6ea922" anchor="boilerplate-name" align="left">Ribose Asia Limited</p>

<p id="_80954cc8-1f49-9d20-5987-829595995a92" anchor="boilerplate-address" align="left">Suite 1, 8/F, New Henry House<br/> 10 Ice House Street<br/> Central<br/> Hong Kong<br/> <br/> <link target="mailto:copyright@ribose.com"/><br/> <link target="https://www.ribose.com">www.ribose.com</link></p>
</clause>
</feedback-statement>
</boilerplate><preface><foreword id="_0ffafea8-4464-1b4d-5dfb-b98760c1a566" obligation="informative">
<title id="_41c9fad3-d4c1-eecc-4fad-f91704acc026">Foreword</title>
<clause id="_9512f0bf-f82f-ff8f-06c0-5494863e4d6e" obligation="informative">
<title id="_e29a5469-67c9-90aa-f17a-63304bcec2bb">General</title>
<p id="_ab3bb39d-866c-dcfc-c1aa-3a87b5b586fa">This document is the sixth document of the Plurimath specifications series. It specifies pma: the notation Plurimath owns end to end, written for measured quantities and first-class features. Every token is reserved or registry-carried, every form is unambiguous, every error is strict, and nothing is sugar over another parser.</p>

<p id="_92d7203d-9c24-382b-630c-731c8a633263">This document is a forward specification: the notation is specified here for implementation, and its first edition as an implemented surface is its first release. Until that release pma carries no compatibility obligation; from it, the surface is editioned and change-controlled like every notation in this series. The grammar is carried by a checksummed artifact generated from the shared registry (clause 13), in the artifact pattern the asciiunits content language established.</p>
</clause>

<clause id="_6b4ca3df-7ae8-267d-f6f3-0986e02311d1" obligation="informative">
<title id="_dff8ad12-da29-1635-d34a-86a12ce26e23">Documents in the series</title>
<table id="_bca21a13-002f-db2a-76b6-957e2d3b2f17"><colgroup><col width="16.6666%"/><col width="50%"/><col width="33.3334%"/></colgroup>
<name id="_8ba81754-e2a3-6855-e68d-adf51719d6bc">Documents in the series</name>
<thead><tr id="_2432e572-7864-80cb-c492-7f47cb7b7cf6"><th id="_1b704ae7-780b-ecf8-bef7-fa18d5d88a1f" valign="top" align="left">Number</th>
<th id="_bf960ce6-4737-ae2a-a5e5-4ddb5b06d416" valign="top" align="left">Title</th>
<th id="_32566de1-8f31-8daf-1907-1beb1e2c407e" valign="top" align="left">Subject</th>
</tr></thead>
<tbody><tr id="_f1dc34d5-f74b-fbc7-4204-b2474d2ea051"><td id="_30b37317-5e34-fd61-49b1-fc10134813b8" valign="top" align="left">1001</td>
<td id="_ba3e6170-bcb4-c94c-9c13-10cae18788f4" valign="top" align="left">Math model</td>
<td id="_20467d8e-02ab-9abf-7ad0-add62db36470" valign="top" align="left">The formula tree, the node classes, the registry, the rendering surfaces</td>
</tr><tr id="_fc2ac57c-66de-b565-ee10-91ce10b6dafa"><td id="_1eb9bc75-45e1-8265-fabb-fab472ad0cd0" valign="top" align="left">1002</td>
<td id="_b345ea72-98b4-2ef8-427a-dd9f6b57782a" valign="top" align="left">Uncertainty model</td>
<td id="_aa0fcc5f-ca05-660d-5dbf-b8c25ffb34a9" valign="top" align="left">The uncertainty node, its categories, its encodings</td>
</tr><tr id="_e2fe7db4-69ba-c5d3-a7ef-e28a9b4eb97a"><td id="_caf92e88-9ba6-defb-b7af-51a45b3d40f2" valign="top" align="left">1003</td>
<td id="_21509851-4f65-9a0b-add1-128aced03496" valign="top" align="left">Format interfaces</td>
<td id="_25e31c50-df0c-ac76-1d75-437b0ef45d13" valign="top" align="left">The readers and writers per format</td>
</tr><tr id="_43244e2d-2da8-3448-1ef6-fac18ceb1c4c"><td id="_6b1fa606-369a-8e21-2f24-fc99fc4b5631" valign="top" align="left">1004</td>
<td id="_396b142d-2308-23b0-b1d8-658992ca1e3b" valign="top" align="left">Evaluation</td>
<td id="_51895271-cfad-9a2e-fe7e-95396816f081" valign="top" align="left">Numeric evaluation of trees</td>
</tr><tr id="_2d25e5a7-f740-5056-b603-9390a0ad8478"><td id="_afe9b816-11b2-96de-9ae9-675fabe7f710" valign="top" align="left">1005</td>
<td id="_13bcc490-782e-356e-a00f-f9911250f1da" valign="top" align="left">The AsciiMath notation</td>
<td id="_7ff44aa1-90c1-1ec5-80b7-768b67dde837" valign="top" align="left">The complete AsciiMath surface</td>
</tr><tr id="_7f0bf642-8e88-71ad-d436-d83114b37704"><td id="_0bb56005-7995-5db0-925a-ce3aaaf398b7" valign="top" align="left">1006</td>
<td id="_c7af46c3-bf65-dce6-aebc-2aea06c70d0b" valign="top" align="left">The pma notation</td>
<td id="_60d3cc1c-b0da-6609-5886-f87e7a3e032c" valign="top" align="left">This document: the featureful notation</td>
</tr></tbody>
</table>
</clause>

<clause id="_91287e17-b901-367a-9fc7-7d8b34bf86db" obligation="informative">
<title id="_acf72849-a777-2ec7-cbe5-efcb46f6d917">Maintainers</title>
<p id="_3b4f5e47-7c59-1dd8-c312-9895aeb48063">This document is maintained by the Plurimath project at <link target="https://github.com/plurimath/plurimath"/>.</p>
</clause>
</foreword><introduction id="_b5c4765f-7d2c-9cfe-ba98-37c81298b52c" obligation="informative">
<title id="_2b2e98d1-114a-3da4-8556-01ae0a724280">Introduction</title>
<p id="_929b845f-acde-49d0-78c2-6cb00d1b6767">Measured quantities deserve first-class syntax. A metrology author should write <tt>(10.3 +/- 0.2) unit(m)</tt> and mean exactly that: a value, its uncertainty, its unit — not fight a mathematics notation’s grouping rules, not mark uncertainty through strings, not lose the unit’s quantity kind to positional accident. pma is the notation where that sentence is a program.</p>

<p id="_e8d7aebb-bcaa-d595-79eb-347bd441a2f1">AsciiMath (PM 1005) carries the world’s existing linear mathematics, and carries it compatibly — which forbids it from owning its tokens: every extension is a compatibility negotiation. pma starts from the other end. Plurimath owns the grammar, so the reserved words are terminals, <tt>+/-</tt> is one token, the constructors are atomic, malformed input is a parse error, and there is no fallback-to-letters reading anywhere. The two notations share one registry and one tree; they differ in what they promise. AsciiMath promises compatibility; pma promises precision.</p>

<p id="_6afe8589-c4c8-c8ac-5be9-a54d205b97bb">The features that motivated pma are the measured literal, the <tt>unit(...)</tt> constructor with its quantity assertions, the difference typing of <tt>diff(...)</tt>, and the distribution tags of the uncertainty forms. Every one of them exists in exactly one shape here — the rejected-syntax annex records the shapes that lost, and why, so the decisions stay made.</p>

<example id="_66f6cdac-a413-78dc-c0e8-366640ae107d"><p id="_4a1041ce-458d-ede0-617a-275843cdc10b"><tt>(10.3 +/- 0.2) unit(m)</tt> — the canonical measured literal. <strong>Expected outcome.</strong> one uncertainty node (PM 1002): value <tt>10.3</tt>, magnitude <tt>0.2</tt>, category standard, unit the metre — materialised in one form, rendered everywhere, readable by evaluation when it arrives.</p>
</example>
</introduction></preface><sections>

<clause id="_09829fb0-5f7c-54c7-9b72-f23c5a359f70" type="scope" obligation="normative">
<title id="_f70b6ff6-6131-0e24-81e1-850dbe94b63d">Scope</title>
<clause id="_e6a761e6-73a8-0ebe-3a46-9d4068787752" obligation="normative">
<title id="_917955c1-7e75-5fad-982e-70ebd4b7acee">General</title>
<p id="_f6afe5ea-7e3a-a4d7-8e8a-138f2be6be82">This document specifies the pma notation:</p>

<ul id="_24891409-6572-2e86-b319-4c17f7233c3f"><li><p id="_7411311d-4402-1ccc-2847-0fbd5438c572">the design rules the notation is built under;</p>
</li>
<li><p id="_01066f42-49c3-56ec-1087-981259afb8ed">the grammar surface and its token discipline;</p>
</li>
<li><p id="_0c72665a-c899-3f8c-733a-849b3aae909a">the constructors: <tt>unit</tt>, <tt>ustd</tt>, <tt>uexp</tt>, <tt>ucov</tt>, <tt>diff</tt>;</p>
</li>
<li><p id="_6688efb1-7737-53fe-5ee7-f75cfa1df678">the measured literals and their modifiers;</p>
</li>
<li><p id="_503029ab-b2ce-5a69-0f31-170b5fcb6c12">quantity assertions and the static semantics they invoke;</p>
</li>
<li><p id="_1a5f1cf3-d838-097b-f3ca-a4955f587d8a">the rejected syntaxes, and what replaces each;</p>
</li>
<li><p id="_872036f7-2f15-9622-e049-21710f4e791d">materialization into the math model and the rendering relationships to AsciiMath;</p>
</li>
<li><p id="_75f20cad-f3d9-cd40-e38f-a5bcd55af3b5">the artifact and runtime model;</p>
</li>
<li><p id="_0377f5ea-a6ba-0f77-d049-64ebc3dbbeb1">conformance.</p>
</li>
</ul>

<p id="_ac6712ba-c3cf-f28a-f598-2d83199eb320">This document does not specify: the model the notation materialises into (PM 1001), the uncertainty fields (PM 1002), the evaluation that will consume it (PM 1004), the units grammar behind <tt>unit(...)</tt> (CalConnect 36817), or the quantity semantics behind the assertions (CalConnect 36815 and 5) — each is referenced where it applies.</p>
</clause>

<clause id="_143ceb1c-01c3-3602-b9c9-8b63188f8b35" obligation="normative">
<title id="_c2e8613d-9c75-ab29-bedc-57271c2b7976">Relationship to the series</title>
<table id="_fc420410-daf7-0688-7276-7b487b70a676"><colgroup><col width="25%"/><col width="75%"/></colgroup>
<name id="_2d809204-d3ff-342c-900d-3b9ed28aa618">Relationship to the series</name>
<thead><tr id="_9527b38b-f19d-5d6f-e437-122274b292a3"><th id="_16eeed8d-a9d8-685e-0009-7b18bb6b2177" valign="top" align="left">Document</th>
<th id="_288d5435-13f8-37bc-31bb-3b3941bd0b37" valign="top" align="left">Relationship to this one</th>
</tr></thead>
<tbody><tr id="_e8817ecf-0af3-093b-b83c-9c52ae8b4ae9"><td id="_dc4b6190-7e62-95ed-b1e0-9bee286387c5" valign="top" align="left">1001 Math model</td>
<td id="_649680cb-9e29-ea67-fb60-6c7c50d5b728" valign="top" align="left">the tree pma materialises into; renderers and the evaluator come free with it</td>
</tr><tr id="_f4d8e538-9873-9e0f-e0dc-7c534e2360fb"><td id="_06e5e470-9c31-8467-a9e9-609b5a171127" valign="top" align="left">1002 Uncertainty model</td>
<td id="_3fc52132-42cc-ac5e-b243-2e66f812ef1f" valign="top" align="left">the fields the uncertainty constructors carry</td>
</tr><tr id="_0b9c8f62-b5a5-ae9c-0247-29314cc284ed"><td id="_e3b103e8-a4f5-963a-6c08-a5cf7f2f50f3" valign="top" align="left">1005 The AsciiMath notation</td>
<td id="_e998cea5-1cff-ff9d-5027-5efcba00fe20" valign="top" align="left">the sibling notation; shares the registry, differs in promises; the rendering relationship of clause 11</td>
</tr><tr id="_0610d77d-fe57-7460-1bee-96b5b266c1c0"><td id="_e4b9ed7c-5c1d-0730-f9ff-c3b134dded02" valign="top" align="left">CalConnect 36813, 4, 5, 6</td>
<td id="_8c62919b-6d15-859d-515b-ac38962c35ba" valign="top" align="left">the numeric contract, the quantity kinds, the static semantics, and the <tt>unit(...)</tt> content grammar</td>
</tr></tbody>
</table>
</clause>

<clause id="_73afd93f-80ed-44f6-5e48-ff7be4f94b91" obligation="normative">
<title id="_1d0e1a4c-ffd7-07ab-27d9-1b93b15f0191">Audience</title>
<p id="_33d954a8-5118-301c-2873-fdc1ec9c8a41">Implementers of pma, authors who will write it, and the maintainers of the registry and the artifacts it generates.</p>
</clause>
</clause>



<terms id="_47ce74d9-1f09-a4f3-e7de-31cff9d2d2c1" obligation="normative">
<title id="_dfb2eab2-f980-6365-3c47-81d0eb272962">Terms and definitions</title><p id="_dcc01114-4d03-3550-1347-4ba901bda94c">For the purposes of this document, the following terms and definitions apply.</p>
<p id="_44019f7c-608e-0020-3363-715be497391e">For the purposes of this document, the following terms and definitions apply.</p>

<term id="_17d64922-c115-b046-a466-255d6b39fa38" anchor="term-constructor"><preferred><expression>
<name>constructor</name>
</expression>
</preferred>
<definition id="_6bfa007b-a3f7-51e7-0dbb-641b3e39e29e"><verbal-definition id="_1dab1405-a5c7-81de-a4aa-519ab15f2d2c"><p id="_73c6987f-2d09-27be-d6d3-91df0cbd88f9">a reserved <tt>keyword(args)</tt> form that materialises as a single model node</p></verbal-definition></definition>
 </term>

<term id="_86b57b93-1fb7-bd8b-4d3d-05a23b00652a" anchor="term-reserved-word"><preferred><expression>
<name>reserved word</name>
</expression>
</preferred>
<definition id="_5701b929-46a9-77b6-d5ed-67a7adb762f0"><verbal-definition id="_e6c3cfc5-df35-1a86-a739-723d4c51df61"><p id="_47cc03e9-5812-a512-7a76-c6e72597f0fd">a constructor keyword or grammar terminal; the build fails on any collision between a reserved word and the registry’s or the UnitsDB symbol space’s names</p></verbal-definition></definition>
 </term>

<term id="_89d74b47-4de1-a23c-cdcc-b08e2a31bd2d" anchor="term-measured-literal"><preferred><expression>
<name>measured literal</name>
</expression>
</preferred>
<definition id="_d5c4715f-9747-0289-8086-fc6ede5f1d6b"><verbal-definition id="_93298fb8-793b-6d4b-0afd-daf2d9e9ef9b"><p id="_7fa2f21f-1797-d610-d03e-14face2eb0a7">the <tt>(v +/- u)</tt> form with its modifiers: the relative form, the shared exponent, the distribution tag</p></verbal-definition></definition>
 </term>

<term id="_c5ac2103-e62b-e4ca-49d6-7bed679b117d" anchor="term-trailing-unit"><preferred><expression>
<name>trailing unit</name>
</expression>
</preferred>
<definition id="_14c6c0cd-c4bb-5083-a9fb-98c6e45971df"><verbal-definition id="_472161ee-5037-072a-5b73-2c4306c01e87"><p id="_d3e8c417-b90a-1b4b-43bc-f4df0ae341b2">a <tt>unit(...)</tt> following a value or a measured literal, scoping the unit of the whole quantity</p></verbal-definition></definition>
 </term>

<term id="_c567a04a-5a76-3935-ba2e-fd5d2d6705fa" anchor="term-quantity-assertion"><preferred><expression>
<name>quantity assertion</name>
</expression>
</preferred>
<definition id="_99426648-87b4-2c99-0608-c5af51648cda"><verbal-definition id="_de760c24-1ca6-2a1c-8e10-545366a414ea"><p id="_0fa83134-c48f-6d86-39c3-fa5808b8ac78">the <tt>::</tt> annotation binding a quantity kind to a unit expression</p></verbal-definition></definition>
 </term>

<term id="_21d93ff1-c0e2-92c9-a2bb-a770ee3c3ed3" anchor="term-distribution-tag"><preferred><expression>
<name>distribution tag</name>
</expression>
</preferred>
<definition id="_f0ac87a1-ebd4-3a3b-09b5-c3b7627a90b0"><verbal-definition id="_25423e4d-aa55-a4e5-5cfd-413e21fb4aca"><p id="_30f1d487-dd66-5462-609f-8bd58d9edc85">the <tt>~name</tt> modifier selecting an uncertainty distribution family from the closed JCGM-grounded set</p></verbal-definition></definition>
 </term>

<term id="_bba81e6c-825d-9d55-a8ae-036802684fe6" anchor="term-shared-exponent"><preferred><expression>
<name>shared exponent</name>
</expression>
</preferred>
<definition id="_646f1f57-082b-89c0-1143-882f09a6e55e"><verbal-definition id="_b10a47e5-76b0-7519-f1ea-faa4acf9619e"><p id="_bed3522f-9d25-41c2-e80e-59184f4895ed">the <tt>(v +/- u)eE</tt> form, where the exponent shifts the value and the uncertainty together</p></verbal-definition></definition>
 </term>

<term id="_539b0f5c-f235-3661-bf56-3f1f4568213a" anchor="term-relative-form"><preferred><expression>
<name>relative form</name>
</expression>
</preferred>
<definition id="_19341b60-4a27-7f21-86dc-3818b8af4657"><verbal-definition id="_605b8df8-2301-9bd3-47c3-1e652aa16ea4"><p id="_be12d302-d93b-6a54-49dc-e14fd2751198">the <tt>(v +/- n%)</tt> form, where the uncertainty is a percentage of the value</p></verbal-definition></definition>
 </term>

<term id="_f2239b4f-9996-086f-2feb-0a1df632431e" anchor="term-desugar"><preferred><expression>
<name>desugar</name>
</expression>
</preferred>
<definition id="_c9ccc794-248c-907f-abd2-215d63ded211"><verbal-definition id="_a7e057f8-0b93-bbb3-f679-dc6d1c8279fa"><p id="_3a9aa106-65b7-286b-328b-8e136a798034">the reduction of a literal or sugar form to its canonical constructor shape before materialization</p></verbal-definition></definition>
 </term>

<term id="_5dbb2ee8-2657-cac4-44fc-d5070dbf1517" anchor="term-artifact"><preferred><expression>
<name>artifact</name>
</expression>
</preferred>
<definition id="_39ae861b-aaea-e24b-9c5e-ef9b9bcdc7b6"><verbal-definition id="_63d20ac2-e4e3-9bd5-2263-c58ea168ca1d"><p id="_91c0caa1-5ea0-9b05-9bc3-fa869f10b1a1">the checksummed pma grammar artifact, generated from the shared registry, consumed by every runtime</p></verbal-definition></definition>
 </term>

<term id="_3b9441c0-d42d-6d35-46f6-8df6604961be" anchor="term-strict-error"><preferred><expression>
<name>strict error</name>
</expression>
</preferred>
<definition id="_88c383d3-db61-2522-fe8c-5348544b9f64"><verbal-definition id="_b4767a6c-3ea1-762b-944e-9e6c3afe36ca"><p id="_616cc8a3-f523-795d-ef0c-497745f71b9d">a parse or validation error with no fallback reading; the only failure mode this notation has</p></verbal-definition></definition>
 </term>
</terms>

<clause id="_0a0e4ae2-f425-483f-4832-3ede28766962" obligation="normative">
<title id="_577f0878-cbad-249b-c576-b43a5f664bb6">Conventions</title>
<clause id="_7ada6584-0f19-966b-2bab-d67ce80ad61e" obligation="normative">
<title id="_53d82e48-1024-e16a-9901-40ceda1ab9b0">General</title>
<p id="_50373619-e973-421d-ce63-34fac997c154">pma text is shown verbatim; the canonical ASCII form is normative and the ± spelling is its fenced sugar. Trees are named in the model terms of PM 1001. The ± character is U+00B1.</p>
</clause>

<clause id="_d6770bc1-deae-0fc3-a508-cef8f56ccc15" obligation="normative">
<title id="_e9f19607-0eba-c5f0-206e-d25ce63aee52">Examples</title>
<p id="_c1eec828-0423-adb8-fcd8-b8704f37f7a1">Examples carry an <strong>Expected outcome</strong> paragraph. Where an example shows a refusal, the outcome names the error class per PM 1003’s Annex A and the message shape this document fixes.</p>
</clause>

<clause id="_5936c6fc-9d05-710b-e188-962e5621d4b3" obligation="normative">
<title id="_41295d16-f63b-86cd-e319-b09b788308a8">Forward-specification status</title>
<p id="_8285ebd9-4958-3e0d-1903-c21979d56d50">This document specifies the notation for implementation. Rules stated here are the specification the implementation follows; until first release, an implementation gap is a defect of the implementation against this document, not of the document.</p>
</clause>

<clause id="_8b245f0d-e826-7ba0-14b1-b627d054595e" obligation="normative">
<title id="_a1f18729-fe3b-5a43-165f-cabb0956cec1">The artifact references</title>
<p id="_0bb85548-1e61-cf87-77e0-b8bb2ac6ce9d">Where a clause says the grammar carries a form, the artifact is the carrier: this document states the form, the artifact makes it runnable, and the two are checked against each other in the build. References to CalConnect 36817’s grammar are by content, not by copy — the unit grammar appears once, in its own series, and both notations point at it.</p>
</clause>
</clause>

<clause id="_7a040613-01d6-3a87-994b-6e12d66d8d3e" obligation="normative">
<title id="_f107a7a7-8925-a58d-108c-999254380a8c">Design rules</title>
<clause id="_d734c8be-f9b5-34df-9a91-b454bd7417a5" obligation="normative">
<title id="_9beb244f-b9d0-8421-86cc-9ca3d5e0bb37">The six rules</title>
<p id="_74cc0b4b-93a9-f8e7-f36f-8b749f299728">Everything in this notation follows from six rules:</p>

<ol id="_748a348b-4487-491e-e8c6-e64d7f483a34" type="arabic"><li><p id="_5523c05f-27ec-afbd-2a97-e596a07b3d95"><strong>Owned grammar.</strong> The reserved words are terminals of the grammar; the grammar is generated from the shared registry, and the artifact is checksummed. Plurimath owns the notation, so there are no shims to write and none to maintain.</p>
</li>
<li><p id="_d468071d-823f-704f-7766-721fb135ad5f"><strong>Reserved-word safety.</strong> The build fails on any collision between a reserved word and any name in the registry’s symbol space or the UnitsDB symbol space. The failure happens at grammar generation — a collision never reaches a parser.</p>
</li>
<li><p id="_72477af3-0c05-0262-7214-1b40ed44d5d6"><strong>Explicit input.</strong> Values are typed explicitly: the constructors and literals carry their fields in their syntax. Reporting conventions — the concise form above all (PM 1002) — are output-only renderings, never input.</p>
</li>
<li><p id="_3c43bd08-6af4-5708-b363-b2e44b5ac5ce"><strong>Strict errors.</strong> A malformed form is a parse error. There is no fallback-to-letters reading, no best-effort interpretation, no load-bearing whitespace trick.</p>
</li>
<li><p id="_50c3f387-b9ab-4f71-8685-220a87660040"><strong>No strings as syntax.</strong> The quoted-string channel is an AsciiMath device (PM 1005); this notation has none of it. <tt>unit(...)</tt> is unquoted — it is a constructor, and it can afford to be.</p>
</li>
<li><p id="_d4a8765c-08ea-5875-86e2-4d079485def5"><strong>No conversion syntax.</strong> Converting a quantity is an operation evaluation performs (document 1004’s <tt>convert</tt>), not document syntax. A notation that converts inline is a calculator; pma is a notation.</p>
</li>
</ol>

<example id="_5fc67abb-ee6b-34b2-c366-69022d77628e"><p id="_d5dc725b-2476-115d-688e-87d800bebfee">Adding <tt>measure</tt> as a constructor whose name collides with a UnitsDB symbol. <strong>Expected outcome.</strong> the build fails at grammar generation with the collision named. The parser never sees a doubled word, and no runtime resolves the ambiguity — because there is no ambiguity to resolve.</p>
</example>
</clause>

<clause id="_375f5c56-b675-f27d-b954-426e91eaa62b" obligation="normative">
<title id="_c1682d44-d2d8-cabe-1406-2c3fbab920b8">What the rules buy</title>
<p id="_f9c436bf-0192-3f63-3db3-d6c9a35051c6">The rules are why pma errors can be exact. A reader that owns its tokens knows every input is either one of its forms or an error; there is no third case where a spelling might be legacy content. PM 1003’s typed errors become exhaustive here: every refusal names a rule of this document, and every acceptance materialises a tree the model fully defines.</p>
</clause>

<clause id="_93905f8a-2766-8175-f2d3-ec7f1159576b" obligation="normative">
<title id="_c887557a-2043-fccb-511a-a5d7e62aa364">The rules against the features</title>
<p id="_d87e3715-567f-0d9b-7a90-fefd4e694c1d">Each feature exists because a rule allows it, and each rule kills a class of mistakes:</p>

<table id="_d23ef7d8-6c86-1afa-faa1-2d986f63799f"><colgroup><col width="25%"/><col width="37.5%"/><col width="37.5%"/></colgroup><thead><tr id="_dd53ca64-4860-0a9c-ad15-bb7470216e15"><th id="_411b8870-4437-a5b5-734e-65f0dd1dc036" valign="top" align="left">Rule</th>
<th id="_41c51bfd-d80e-03fd-8bb5-552516d3a75b" valign="top" align="left">Enables</th>
<th id="_53842e47-e0aa-f17a-2652-77e1a70f0813" valign="top" align="left">Kills</th>
</tr></thead>
<tbody><tr id="_d15166e5-3e62-0799-00a2-07136fb280fd"><td id="_5448facc-ddbd-3b0a-3a38-ee53aee16c4d" valign="top" align="left">owned grammar</td>
<td id="_ba340102-aa33-0748-2bf5-9db246f4290f" valign="top" align="left">the constructors as terminals</td>
<td id="_0fac88d2-1a43-f9b0-db7e-9299cf6cda0d" valign="top" align="left">the shim layer</td>
</tr><tr id="_ef9e25a6-8dad-14b5-2c20-94ad0e56d199"><td id="_2770caa4-bc2c-7e82-f991-82712420cfad" valign="top" align="left">reserved-word safety</td>
<td id="_797f2056-08c9-ef10-03ee-922a677b4449" valign="top" align="left">stable keywords forever</td>
<td id="_55ad99c4-bc7e-5f02-289e-eb9e33f7616a" valign="top" align="left">accidental collisions</td>
</tr><tr id="_9809ced1-a218-2218-78bf-fd38de201e75"><td id="_44a81234-ad6d-03ab-a372-966acd09b163" valign="top" align="left">explicit input</td>
<td id="_c6c3047e-fee4-7b3a-e94e-92811485ec0b" valign="top" align="left">the literals and their fields</td>
<td id="_b71441e3-6273-443a-0ba9-2ac76a5dbf63" valign="top" align="left">input-side guessing</td>
</tr><tr id="_d4324577-3120-ab8d-bcc0-28f26b2a398a"><td id="_4866168b-3fbc-2fb6-2fa3-0392a74224a8" valign="top" align="left">strict errors</td>
<td id="_cd317d54-0e7f-c446-2db4-e56650e3090e" valign="top" align="left">exhaustive error handling</td>
<td id="_d71a6c37-dc10-5a3d-fef7-ec3ffe4477b3" valign="top" align="left">silent misreads</td>
</tr><tr id="_52d87aeb-1a1d-d55d-0ecb-e9d7047f944f"><td id="_ff1ca68e-48c3-cb04-d050-ea6a3860e8cc" valign="top" align="left">no strings as syntax</td>
<td id="_4e4c531a-0093-2be4-7549-6a44996e8126" valign="top" align="left">the unquoted <tt>unit(...)</tt></td>
<td id="_9d9066d7-bd63-7999-853c-c5946ee4b430" valign="top" align="left">the quoted channel’s limits</td>
</tr><tr id="_27a851f5-c0af-d73c-0b3c-25c9d7b7f286"><td id="_85b207c4-9c4f-3cd8-5fa1-6691a57f3e38" valign="top" align="left">no conversion syntax</td>
<td id="_29b35045-723c-274b-832a-3c8a890cf328" valign="top" align="left">a grammar that stays a grammar</td>
<td id="_00dea9c9-04c9-faff-bc35-ec96dc41428d" valign="top" align="left">inline semantics creep</td>
</tr></tbody>
</table>

<p id="_208a55ce-7b30-7d6c-5fb9-8ead056710e7">The table is this document in miniature: the clauses that follow are the features, and every one of them sits inside a rule.</p>
</clause>
</clause>

<clause id="_696d8792-0e07-bb87-932f-39cc36d0c603" obligation="normative">
<title id="_b6c45b26-0d13-0c9f-d3e0-105435fb6ce5">The grammar</title>
<clause id="_2cc4e780-d8d6-a67e-f295-840c4f5b6fe2" obligation="normative">
<title id="_24abdf30-6d12-8734-45d3-cd1948186a03">General</title>
<p id="_1336559d-f4d1-d224-4ab0-7a2371eb1a5e">The grammar of pma is stated here in full, in PARG — the grammar language of the asciiunits artifact pattern (CalConnect 36817) — as the normative source the pma artifact generates from. A developer implements the reader from this grammar, the materialization rules of clauses 7 and 8, and nothing else: every input is derivable to exactly one tree, or refused by exactly one error.</p>

<p id="_47209a4b-2b52-eabd-2f4a-276037c42ea2">The unit expressions inside <tt>unit(...)</tt> are not re-stated here: the rule references the CalConnect 36817 grammar (the <tt>UnitsmlAscii</tt> artifact), embedded by reference at compile time — one unit grammar, two notations.</p>
</clause>

<clause id="_8ef9ce55-1ee7-ff63-5357-4138d303d0a4" obligation="normative">
<title id="_b806e398-1765-fd6e-705d-20b32c048030">The grammar</title>
<sourcecode id="_b3fa35b7-b350-2123-cc74-d973363d394a" lang="parg"><body># The pma grammar: arithmetic core, measurement constructors, measured
# literals, quantity assertions. Edition 1. Generated into the pma
# artifact; reserved words are checked against the registry's symbol
# space and the UnitsDB symbol space at generation time.

grammar Pma version "0.1.0" edition 1 {

  # lexical terminals
  ws = %x09 / %x0A / %x0B / %x0C / %x0D / %x20
  spaces = 1*ws
  digit = %x30-39
  digits = 1*digit
  lparen = "("
  rparen = ")"
  comma = ","
  plus = "+"
  minus = "-"
  star = "*"
  slash = "/"
  caret = "^"
  percent = "%"
  e_mark = "e"
  tilde = "~"
  colon_colon = "::"
  plus_slash_minus = "+/-"
  plusminus = "±"
  equals = "="
  not_equals = "!="
  lt = "&lt;"
  le = "&lt;="
  gt = "&gt;"
  ge = "&gt;="

  number = (["-"] digits ["." digits]) as number

  # names: identifiers for evaluation bindings. The name table is
  # generated as the identifier shape minus the reserved words — the
  # same generation-time subtraction the unit tables use.
  letter = %x41-5A / %x61-7A
  underscore = "_"
  name = (letter 1*(letter / digit / underscore)) as name

  # the reserved words: checked against registry ∪ unitsdb at generation
  reserved_unit = "unit"
  reserved_ustd = "ustd"
  reserved_uexp = "uexp"
  reserved_ucov = "ucov"
  reserved_diff = "diff"

  # distribution tags: the closed set
  tag_name = ("rect" / "tri" / "u") as distribution

  # unit expressions: the CalConnect 36817 grammar, embedded by reference
  unit_expression = @UnitsmlAscii.expression

  kind_name = from_table "kinds" column "name" as kind

  # ---- expressions ----

  expression = relation

  relation = additive [ (equals / not_equals / lt / le / gt / ge) additive ]

  additive = multiplicative 1*((plus / minus) multiplicative)

  multiplicative = unary 1*((star / slash / keyword_mod) unary)
  keyword_mod = "mod"

  unary = [plus / minus] power

  power = primary [caret unary]

  primary = number / literal / constructor_call / name / (lparen expression rparen)

  # ---- measured literals ----

  literal = lparen number plus_slash_minus magnitude rparen [exponent] [tag] [trailing_unit] as literal
  literal_sugar = lparen number plusminus magnitude rparen [exponent] [tag] [trailing_unit] as literal
  magnitude = (number [percent]) as magnitude

  exponent = e_mark ["-"] digits as exponent
  tag = tilde tag_name as tag

  # ---- constructors ----

  constructor_call = ustd_call / uexp_call / ucov_call / diff_call / unit_call

  ustd_call = reserved_ustd lparen number comma [spaces] number rparen [trailing_unit]
  uexp_call = reserved_uexp lparen number comma [spaces] number comma [spaces] number [comma [spaces] number] rparen [trailing_unit]
  ucov_call = reserved_ucov lparen number comma [spaces] number comma [spaces] number [comma [spaces] number] comma [spaces] kind_name rparen [trailing_unit]
  diff_call = reserved_diff lparen expression rparen
  unit_call = reserved_unit lparen unit_expression [colon_colon kind_name] rparen

  trailing_unit = unit_call

  # ---- entry ----

  entry pma: expression

  test pma {
    accept "(10.3 +/- 0.2) unit(m)"
    accept "(10.3 +/- 2%) unit(m)"
    accept "(3.85 +/- 0.23)e4 unit(m)"
    accept "(0.5 +/- 0.01) ~rect unit(m)"
    accept "(10.3 ± 0.2) unit(m)"
    accept "ustd(10.3, 0.2) unit(m)"
    accept "uexp(10.0, 0.3, 2, 0.95) unit(cm)"
    accept "ucov(10.0, 9.7, 10.3, 0.95, shortest) unit(cm)"
    accept "ucov(10.0, 9.7, 10.3, probabilistically-symmetric)"
    accept "unit(kg m/s^2)"
    accept "unit(Bq)::frequency"
    accept "diff(5 unit(degC))"
    accept "x^2 + 1"
    accept "2 * (3 + 4)"
    reject "10.3(2)"
    reject "3+-1"
    reject "10.3 +/- 0.2"
    reject "(0.5 +/- 0.01) ~magic"
    reject "2x"
    reject "\"unitsml(g)\""
  }
}</body></sourcecode>

</clause>

<clause id="_2b304ded-bda6-fe8f-b83e-34ffa5d354d9" obligation="normative">
<title id="_7ead2643-d1d3-7a66-c0df-9d3cb9d4a46a">Reading the grammar</title>
<ul id="_bd62277f-781f-a3b0-b851-a75d4349bfe2"><li><p id="_7ee29395-90f2-278e-d418-79207f921b31">The repetition, option and alternative operators are PARG’s (<tt>1*</tt>, <tt>[...]</tt>, ordered <tt>/</tt>), as in the asciiunits artifact; the ordered choice makes the alternative order decisive, exactly as it is there.</p>
</li>
<li><p id="_7c6da492-880d-ef62-ea01-2aed1dd6ced4">The <tt>as</tt> captures name the tree positions the materializer consumes: <tt>number</tt>, <tt>name</tt>, <tt>literal</tt>, <tt>magnitude</tt>, <tt>exponent</tt>, <tt>distribution</tt>, <tt>kind</tt>.</p>
</li>
<li><p id="_0ddcbdab-c5a0-b1f0-4ed7-32309d3ced5e">The <tt>name</tt> rule’s table is generated as the identifier shape minus the reserved words — the generation-time subtraction, the same discipline the unit tables use, so a reserved word can never read as a name.</p>
</li>
<li><p id="_87edc0dd-a427-8537-e729-1cf0562ed79b"><tt>@UnitsmlAscii.expression</tt> embeds the CalConnect 36817 grammar by reference at compile time; the unit expressions carry that grammar’s captures into the tree under the unit node.</p>
</li>
<li><p id="_03796f2a-f640-7a27-0bbd-729c98d78fd4">The <tt>test</tt> block is normative: the artifact’s conformance runs the accepts and rejects on every build, and this document’s vectors extend them.</p>
</li>
</ul>
</clause>

<clause id="_09085b70-cfbf-09a7-3c44-bac5c569f668" obligation="normative">
<title id="_8bef3628-2357-e175-49af-138989e67f9c">What the grammar deliberately lacks</title>
<ul id="_f33a3422-38c5-2674-06aa-be3daa1a6e43"><li><p id="_46b3649d-8d12-7290-6537-e43ee6bb5f9c"><strong>No quoted strings.</strong> There is no double-quote token; a quote anywhere is a lexical error (clause 10).</p>
</li>
<li><p id="_0290771f-2c67-ba95-61a4-c5b809466ea8"><strong>No implicit multiplication.</strong> Adjacency is not an operator: <tt>2x</tt> does not derive, and the test block rejects it. Multiplication is written <tt>*</tt>.</p>
</li>
<li><p id="_fb5e57c7-01df-78f5-3356-534ba9bc77dc"><strong>No comments.</strong> A pma input is one expression; there is nothing to comment.</p>
</li>
<li><p id="_c67676e2-8eae-c651-6ab9-57f2ef2606c4"><strong>No statement terminators or sequences.</strong> Edition 1’s input is one expression; sequences are an edition’s addition, with their separator.</p>
</li>
<li><p id="_e441bf99-6da8-d356-2fb8-40187954a56f"><strong>No subscript.</strong> The <tt>_</tt> token does not exist; <tt>^</tt> is the power operator only.</p>
</li>
</ul>
</clause>

<clause id="_bc5ab903-3a05-f5af-02df-2bb56af4c93a" obligation="normative">
<title id="_ee520e8b-6a87-90ea-b6f4-5206100bb94f">The tree, in one table</title>
<p id="_8e670d2e-f612-45fa-c831-0c804c771be9">What each derivation yields, for the materializer:</p>

<table id="_0979a2c6-5e27-1e75-4c18-e991af870f43"><colgroup><col width="25%"/><col width="37.5%"/><col width="37.5%"/></colgroup>
<name id="_487fdc62-71c0-c025-afd4-e8c9f6f180bd">Productions to nodes</name>
<thead><tr id="_e6fbfcdb-8996-7dd2-ed76-766163713043"><th id="_bc0673e6-44db-85ba-28bb-fba2d6dc44e6" valign="top" align="left">Production</th>
<th id="_af40af64-39b5-dc8a-4caf-b85329044131" valign="top" align="left">Captures consumed</th>
<th id="_8334dcd9-a56c-83e3-ef77-64e714bae9d4" valign="top" align="left">Node materialised</th>
</tr></thead>
<tbody><tr id="_5df019d7-73c9-5737-7068-5ca2f835d337"><td id="_d5f30234-95d8-4f99-f19e-bf257a52849e" valign="top" align="left"><tt>literal</tt></td>
<td id="_077b6d13-1b4e-c613-7417-f8559af79fb5" valign="top" align="left">number, magnitude, exponent, distribution, trailing unit</td>
<td id="_e4da206a-3c7c-ae2d-e433-ae4cc10febd8" valign="top" align="left">the desugared uncertainty record (clause 8)</td>
</tr><tr id="_a3ad67e2-f26e-490c-7fc2-eb91dc8fb557"><td id="_c6e398f0-d84a-30de-899c-9c422986d9a3" valign="top" align="left"><tt>ustd_call</tt>, <tt>uexp_call</tt>, <tt>ucov_call</tt></td>
<td id="_a5d41dec-f727-aa6e-7100-0fb268d29a37" valign="top" align="left">the number captures, the kind</td>
<td id="_a6008804-3670-1600-9dd6-47de66703aa3" valign="top" align="left">the uncertainty record per PM 1002</td>
</tr><tr id="_5d83a5e8-ca39-0f4b-9bbe-5374678a904e"><td id="_ec1f8ad3-5331-ba5c-28a1-49cc27ed82b2" valign="top" align="left"><tt>unit_call</tt></td>
<td id="_ecb266bd-5c89-a37b-716c-e7fbcd2cc648" valign="top" align="left">the unit expression, the kind</td>
<td id="_33735083-92fd-0aa0-04f0-bc7ddaebabe2" valign="top" align="left">the <tt>Unitsml</tt> node, assertion recorded</td>
</tr><tr id="_6f14ebda-c56e-d511-6f80-0e3023b0af23"><td id="_454d452c-fb49-df8b-b636-8bfc99b9636d" valign="top" align="left"><tt>diff_call</tt></td>
<td id="_4e538fa6-8541-f3c9-b0d3-cd1cc1d1ce54" valign="top" align="left">the operand expression</td>
<td id="_11710baf-00cd-350b-3249-a5c33fc2a078" valign="top" align="left">the difference-typed quantity (clause 12)</td>
</tr><tr id="_0b8a058b-4f9a-3499-c87e-a34dea5bbb95"><td id="_8d8c9c80-318c-6df2-3af7-de775c3c74ff" valign="top" align="left"><tt>number</tt>, <tt>name</tt></td>
<td id="_547f3a3d-1071-e0fa-c19b-083d328b0898" valign="top" align="left">the text</td>
<td id="_1b9ffba3-90fa-b01b-7a64-664b1e1e935a" valign="top" align="left"><tt>Number</tt>, the binding name</td>
</tr><tr id="_61d8022a-659e-6246-24f4-365defc21b0f"><td id="_991667f2-4bef-1f19-2a81-122361c0798a" valign="top" align="left">the operators</td>
<td id="_649571e2-c728-dc4e-2ec8-f8cfcda78212" valign="top" align="left">the folded operands</td>
<td id="_55f8e5c9-e3e1-fe8c-e423-0f5fc38387e1" valign="top" align="left">the model’s operators (PM 1004’s chain)</td>
</tr></tbody>
</table>
</clause>

<clause id="_4588c3a4-8771-8922-af56-1cbce806a048" obligation="normative">
<title id="_25cb09bb-a127-7cfe-073e-aeccc5ee8bf9">Completeness, stated</title>
<p id="_fd0e0a69-dbd5-653a-d596-bc03a5a35711">The grammar derives every input this document’s clauses describe and nothing else. A form the clauses describe but the grammar does not derive is a defect in one of the two; a form the grammar derives but no clause describes is likewise. The test block, the vectors of Annex E, and the clause cross-checks are the mechanics of that statement — the statement itself is the standard this document is held to.</p>
</clause>
</clause>

<clause id="_55c515a9-3d79-62ec-5ad4-e2a69437b771" obligation="normative">
<title id="_03bad571-0a54-9e87-1001-d20d600d37bc">The constructors</title>
<clause id="_0429d0c7-5170-89e7-c6aa-06efbdd2e054" obligation="normative">
<title id="_1d0a0e6e-9129-6d18-fb0a-a14109f5544f">General</title>
<p id="_8510ad57-1f1d-f883-ceb1-3a1bb3a9a2c3">A constructor is atomic: <tt>keyword(args)</tt> with the argument list its table fixes, materialising one node. A malformed argument list is a parse error — there is no partial record, no default-filled form, no interpretation of what the author probably meant.</p>
</clause>

<clause id="_87bdfbea-df46-6d72-9660-e8d202228753" obligation="normative">
<title id="_e50792f0-6a60-eb45-9b1e-56147aed54bb">unit</title>
<p id="_a6d190e4-8bcb-b031-31b8-5598e21baa28"><tt>unit(&lt;expression&gt;)</tt> carries one unit expression in the CalConnect 36817 grammar and materialises a <tt>Unitsml</tt> node (PM 1001). Alone it states a unit; following a value or a literal it scopes the unit of the whole quantity (the trailing-unit rule below).</p>
</clause>

<clause id="_bb0d8c4c-9c90-fe44-393e-b8b1cdf2afbf" obligation="normative">
<title id="_f79325a2-d192-d1b9-9ce5-25d40dea598f">ustd, uexp, ucov</title>
<p id="_327a0096-945d-dd4e-6e83-874e25bde782">The uncertainty constructors carry PM 1002’s categories with their argument orders:</p>

<table id="_f05e4887-bf56-36b4-9993-3bd500edbfd3"><colgroup><col width="25%"/><col width="50%"/><col width="25%"/></colgroup>
<name id="_578efc4c-d93a-8464-b27e-64a3baad2603">The uncertainty constructors</name>
<thead><tr id="_9ddef341-007b-1b9b-10a0-9f30c502175a"><th id="_4a7104a8-2590-e6f7-bc46-6d950d41eadc" valign="top" align="left">Constructor</th>
<th id="_32a14e44-c22c-1f60-791b-38086aa87618" valign="top" align="left">Arguments in order</th>
<th id="_aabe2f25-7b61-b30c-21a4-f02dca6a72fe" valign="top" align="left">Materialises</th>
</tr></thead>
<tbody><tr id="_fe7943a6-05e7-2313-5442-78ea6eb5db0b"><td id="_3e80ee7c-2403-93b0-3c24-e7a9f2fd17a3" valign="top" align="left"><tt>ustd(v, m)</tt></td>
<td id="_805f33e1-49c5-0e4e-8f70-29d0d23d0a5e" valign="top" align="left">value, magnitude</td>
<td id="_b5dce7d6-9c3d-721e-b436-9f9b908944fc" valign="top" align="left">the standard category, notation absolute</td>
</tr><tr id="_044d9593-7e9d-8c3f-b239-fc5a73245ce0"><td id="_95b713ac-3299-55cb-904c-17fa6c7bd98d" valign="top" align="left"><tt>uexp(v, m, k, p?)</tt></td>
<td id="_a39bb29a-ccfa-0868-dbf7-a0bb2baad946" valign="top" align="left">value, magnitude, factor, optional probability</td>
<td id="_3cb46fb6-0d9f-70be-8b4c-43ca9412e838" valign="top" align="left">the expanded category</td>
</tr><tr id="_93d108d0-57a0-1b0b-aafc-39bf52588e58"><td id="_b725fa7f-79b0-d295-ea85-59d8f2c45cf7" valign="top" align="left"><tt>ucov(v, l, u, p?, kind)</tt></td>
<td id="_3b4262e6-4be5-b77f-28da-cb65fd442b52" valign="top" align="left">value, endpoints, optional probability, kind</td>
<td id="_b1e2d6b4-83a3-aacd-59c5-61e215940d7b" valign="top" align="left">the coverage-interval category</td>
</tr></tbody>
</table>

<p id="_6c253350-8814-bd37-44d8-6b3358a4ff52">Optional arguments are omitted without empty positions, as in AsciiMath. The kinds are <tt>shortest</tt> and <tt>probabilistically-symmetric</tt> — the full model names; AsciiMath’s <tt>symmetric</tt> respelling does not exist here, because this notation owns its tokens and has no minus-sign ambiguity to dodge.</p>

<p id="_c3c7f1a3-828a-45ad-28d8-cfcd22463cd0">The constructors validate through PM 1002’s rules at materialisation: field rules per category, the positive factor, the bounded probability, the exact decimals. A violation is a construction error naming the field — the same typed refusal the model defines, surfaced at parse time.</p>
</clause>

<clause id="_068b164f-d4e6-bd05-a53c-ce03d6efef6f" obligation="normative">
<title id="_2b232b6c-74c9-8c62-c3a8-b84df85872ca">diff</title>
<p id="_0322cb15-9cfd-6de6-54c1-c04026d2cf63"><tt>diff(&lt;quantity&gt;)</tt> materialises its operand as a difference-typed quantity: the node structure of the operand with the difference typing of the quantity algebra (clause 12). The name <tt>diff</tt> is the register’s current choice; the register is the place a successor spelling (<tt>delta</tt>) would land, through the reserved-word process, never by overloading.</p>
</clause>

<clause id="_0cd924b0-2ee2-17fd-8d2f-e2e4db7a6d21" obligation="normative">
<title id="_72530ef8-4670-90d3-4134-6d4eabd467ce">The trailing-unit rule</title>
<p id="_7bc11bef-1138-66a8-60a3-5fa727640c2b">A <tt>unit(...)</tt> following a value or a measured literal scopes the unit of the entire quantity, uncertainty included: <tt>ustd(10.3, 0.2) unit(m)</tt> states a value of <tt>10.3 m</tt> with a magnitude of <tt>0.2 m</tt> — the magnitude is a difference in that unit (clause 12). The unit is stated once; nothing in the form repeats it per field.</p>

<example id="_8cf271a9-5bf9-0672-4df5-1ec0138768a3"><p id="_15e0ed1f-6bf5-c82a-50c4-b4a4704eff90"><tt>ustd(10.3, 0.2) unit(m)</tt>. <strong>Expected outcome.</strong> one <tt>Uncertainty</tt> node — value <tt>10.3</tt>, magnitude <tt>0.2</tt>, category standard, unit the metre. <tt>ustd(10.3)</tt> is a parse error naming the missing magnitude, not a record with a zero.</p>
</example>

<example id="_a235f579-6e13-d0eb-ae6c-1a6bdc2ecd90"><p id="_ccac9be7-37d0-8568-af77-45d7da048f77"><tt>unit(kg m/s^2)</tt>. <strong>Expected outcome.</strong> the <tt>Unitsml</tt> node of the newton’s unit expression — the CalConnect 36817 grammar’s reading, one grammar for both notations.</p>
</example>
</clause>

<clause id="_06d3d756-bba4-4c7e-057b-394fb30a7a67" obligation="normative">
<title id="_9d93ee29-065a-b985-6c2e-feb66440f07f">The constructors against PM 1002’s rules</title>
<p id="_42cc40b6-f0cc-ff5f-3381-3a26fa571029">The uncertainty constructors do not restate PM 1002’s validation — they invoke it. The table maps each constructor’s refusal to the rule that refuses it:</p>

<table id="_b59c944a-e0c2-6b97-6bb0-30fbc77f272a"><colgroup><col width="25%"/><col width="37.5%"/><col width="37.5%"/></colgroup>
<name id="_dd31063e-a86f-fba6-4301-a895fd027099">Constructor refusals and their rules</name>
<thead><tr id="_1808399a-5106-d5d4-8a78-a146449ab5b7"><th id="_df8c5b2d-f335-c6e5-5163-8464faa31c7b" valign="top" align="left">Constructor fault</th>
<th id="_27b7d4b2-8b88-7b63-8ad9-666f07f02398" valign="top" align="left">PM 1002 rule invoked</th>
<th id="_b3ab6672-6b07-a542-0fa3-238fcfd4f5df" valign="top" align="left">Error shape</th>
</tr></thead>
<tbody><tr id="_ab00d32a-e7c5-59eb-0dad-79bb407f7efa"><td id="_2d6a870c-6108-a8ec-9119-de3a76b2c877" valign="top" align="left"><tt>ustd(10.3)</tt> — missing magnitude</td>
<td id="_a1a01d1c-2fcf-c97f-4def-414b8facdf68" valign="top" align="left">the standard category requires the magnitude</td>
<td id="_898c8903-c892-8b29-3976-bdf242b0e68f" valign="top" align="left">construction error: “magnitude is required for a standard uncertainty”</td>
</tr><tr id="_e52ffb29-b6c0-cca1-b25d-158d7d9e8551"><td id="_c1671d14-612d-59af-0a48-36f752d2b6ba" valign="top" align="left"><tt>uexp(10.3, 0.5, 0)</tt> — zero factor</td>
<td id="_df19d885-ca57-b0b5-cc57-c8061811e7ff" valign="top" align="left">the factor must be greater than zero</td>
<td id="_161fcc94-b764-d240-ef22-ee9564c1244a" valign="top" align="left">construction error naming the factor</td>
</tr><tr id="_4f0d4b0f-8f2f-da5e-c9b6-b8ecea7751b3"><td id="_9bb7867e-ffe3-4cb1-e322-1d2e53ea263e" valign="top" align="left"><tt>uexp(10.3, 0.5, 2, 1)</tt> — probability one</td>
<td id="_8411dff4-7ec1-b55e-3618-fa12a1806dd3" valign="top" align="left">the probability is strictly inside (0, 1)</td>
<td id="_da0004ed-c3fd-7b04-064d-b7c14cf26c21" valign="top" align="left">construction error naming the probability</td>
</tr><tr id="_1d9e484b-4fb1-cf60-227e-74d4315b80fc"><td id="_067a6d14-bdb8-e089-550c-2da71cf9d5a3" valign="top" align="left"><tt>ucov(..., fastest)</tt> — unknown kind</td>
<td id="_49002a40-13fe-2af7-1f66-3384ef1cec0b" valign="top" align="left">the kinds are shortest and probabilistically-symmetric</td>
<td id="_3ff3aa08-f15b-1dcd-8263-63934d6a6662" valign="top" align="left">parse error naming the kind</td>
</tr><tr id="_2face2e1-1153-35e5-7524-942b3e18511b"><td id="_df17641e-0967-1a05-1f94-7bc8b77ba001" valign="top" align="left"><tt>diff(x)</tt> — a name, not a quantity</td>
<td id="_760e864c-d41f-3c71-3463-b32c202ab347" valign="top" align="left">the operand must carry a quantity expression</td>
<td id="_28bc82c4-aa3a-10f0-7f75-b5dc19e5a049" valign="top" align="left">parse error naming the operand</td>
</tr></tbody>
</table>

<p id="_35f323bc-9fca-8634-0c3b-60419896843a">The error shapes are this document’s, the rules are PM 1002’s, and the split is deliberate: one model, one validation, two notations surfacing it.</p>
</clause>

<clause id="_b8405273-41ac-bdc6-f9cb-a5a476e9df6e" obligation="normative">
<title id="_de938292-5801-2da0-58a2-09531385bd6d">The trailing unit’s scope, precisely</title>
<p id="_906ec312-64e2-0520-7a26-05b975b05719"><tt>ustd(10.3, 0.2) unit(m)</tt> — the unit scopes the value and the magnitude. <tt>uexp(10.0, 0.3, 2, 0.95) unit(cm)</tt> — the unit scopes value, magnitude and the interval the factor describes: everything in the record is centimetres. A form with two trailing units is a parse error: the scope is the whole quantity, stated once. A constructor whose operand already carries a unit takes no trailing unit — the scope is decided at the innermost statement, and re-stating it outside is ambiguous about what it would override.</p>
</clause>

<clause id="_f40cbf82-5def-6449-82fd-9278129f4c00" obligation="normative">
<title id="_d597e988-414d-4f9f-61fa-70658518d233">The unit expression’s strictness</title>
<p id="_ed7a1e4d-a5d1-8b9d-42d9-56263f8f1986">The expression inside <tt>unit(...)</tt> is the CalConnect 36817 grammar, and its strictness is that grammar’s: an expression the unit reader refuses is a parse error here naming the expression and the unit reader’s message. The channel-less design pays here — in AsciiMath the channel’s content was quoted data; here it is grammar, and the errors are parse errors with positions, not text-channel refusals.</p>
</clause>
</clause>

<clause id="_8409e3c0-f7b3-8304-8d12-d0ab3849b0da" obligation="normative">
<title id="_97dfe22e-17a3-83e1-26eb-0bf858ffcfd4">Measured literals</title>
<clause id="_41538669-2423-e588-89ea-b990031f8042" obligation="normative">
<title id="_5b12b5f8-6641-ba24-f847-d29ebd54aaeb">The canonical form</title>
<p id="_bac828d9-fa17-5969-d1fd-7703ba2eed71"><tt>(v +/- u)</tt> is the measured literal: value <tt>v</tt>, uncertainty magnitude <tt>u</tt>, category standard. <tt>+/-</tt> is one terminal — the canonical ASCII spelling — and the literal desugars to <tt>ustd(v, u)</tt> before materialisation. The parenthesised form is the literal’s whole shape; without the parentheses it is not a literal, it is arithmetic.</p>

<table id="_4cfb412d-b90c-a915-7f2f-4a51f8ae4873"><colgroup><col width="22.2222%"/><col width="44.4444%"/><col width="33.3334%"/></colgroup>
<name id="_63e5aeaa-4804-7281-85c6-f3e4973c3a43">Literal forms</name>
<thead><tr id="_5c7e327d-bd7c-a2ce-105e-be08ffe85eb5"><th id="_b408a2ac-cb17-39fa-615a-2fd0d5785b68" valign="top" align="left">Form</th>
<th id="_138c022c-eaeb-1c60-bad9-689f66db85b6" valign="top" align="left">Reads as</th>
<th id="_e505abb2-685a-cc5b-c5c0-5c458ff1046f" valign="top" align="left">Desugars to</th>
</tr></thead>
<tbody><tr id="_b6deddbe-53be-d843-2826-cfb5f7728ee0"><td id="_3004e627-236e-38fb-a4cf-ab05438c0176" valign="top" align="left"><tt>(10.3 +/- 0.2) unit(m)</tt></td>
<td id="_229acb91-327c-cf69-a604-ed8a0cf21784" valign="top" align="left">canonical literal with trailing unit</td>
<td id="_36154374-cfb6-d715-281f-43820576af48" valign="top" align="left"><tt>ustd(10.3, 0.2) unit(m)</tt></td>
</tr><tr id="_f5233f8b-aac2-fd07-e214-7a6acb411bf0"><td id="_1a9db052-94b3-8d4a-7d06-54af912428b1" valign="top" align="left"><tt>(10.3 +/- 2%) unit(m)</tt></td>
<td id="_28851363-58b7-41d3-a9a8-cd5d034b3209" valign="top" align="left">relative: 2 percent of the value</td>
<td id="_4eb3c245-7275-c127-3bb7-de064490380b" valign="top" align="left">the magnitude computed at materialisation: <tt>0.206</tt>, exact per CalConnect 36813</td>
</tr><tr id="_857df379-5467-aac2-e98c-3ae08e553b81"><td id="_02d39579-2dc5-ff95-b087-fea9838cdd48" valign="top" align="left"><tt>(3.85 +/- 0.23)e4 unit(m)</tt></td>
<td id="_a38e42c0-1f2a-ff38-2af6-696adbafce99" valign="top" align="left">shared exponent: both shift</td>
<td id="_36844342-5000-691f-85a7-074b006f84c3" valign="top" align="left"><tt>ustd(38500, 2300) unit(m)</tt></td>
</tr><tr id="_0ab589dc-9cc0-5742-610b-aea5c007f6e7"><td id="_036811a8-91fe-482f-1472-6a2c8acfc6ef" valign="top" align="left"><tt>(0.5 +/- 0.01) ~rect unit(m)</tt></td>
<td id="_ed87ad81-0577-1f7e-f09b-6f9f4904a2a7" valign="top" align="left">distribution tag attached</td>
<td id="_406d79e6-4381-8ac6-b509-216538f14fe0" valign="top" align="left">the standard literal with tag <tt>rect</tt></td>
</tr><tr id="_c674effe-124b-dc11-9df1-0032fe8a41dc"><td id="_c3af1196-ac17-75b7-9cd3-962ec513a114" valign="top" align="left"><tt>(10.3 ± 0.2) unit(m)</tt></td>
<td id="_84dbc459-1cb6-9090-f67f-e790bfaa913f" valign="top" align="left">the fenced sugar</td>
<td id="_dbc37220-a55e-0b00-f1c2-ec5442305d04" valign="top" align="left">the canonical literal, identically</td>
</tr></tbody>
</table>
</clause>

<clause id="_0ff5e9a2-553a-65ed-db1b-8cc2801efd3b" obligation="normative">
<title id="_8f722f6d-004d-ce6f-d779-e80dc41da081">The relative form</title>
<p id="_7f51ba7e-51dc-60f3-01f9-164cf2b24828"><tt>+/- n%</tt> states the magnitude as a percentage of the value. The magnitude is computed at materialisation — exactly, per the decimal discipline, never at render or evaluation time — so the tree carries the absolute magnitude and the category, and every surface renders the same record. A percentage that does not produce an exact decimal at the value’s precision is a materialisation error naming both numbers.</p>
</clause>

<clause id="_349ed14e-e734-6819-9500-584f9b641db4" obligation="normative">
<title id="_12143b13-c7ba-3cac-395d-394191f52c38">The shared exponent</title>
<p id="_ee185b90-e77e-8600-f101-3191c1063853"><tt>(3.85 +/- 0.23)e4</tt> shifts value and magnitude by the same exponent: <tt>38500</tt> and <tt>2300</tt>. The shift is exact — digit movement, no rounding — and the desugared record carries the shifted decimals. The exponent belongs to the literal, not to the unit: <tt>(3.85 +/- 0.23)e4 unit(m)</tt> states metres throughout.</p>
</clause>

<clause id="_40e7d1a8-2ce1-05ad-604e-e056fbdfc302" obligation="normative">
<title id="_663c4cce-3de1-2a8a-a03b-2665fe798347">The distribution tag</title>
<p id="_b2f220f7-f4cf-a6cd-50b2-c293d5fa649f"><tt>~name</tt> after a literal attaches the distribution family the uncertainty came from: a closed set grounded in the JCGM families (<tt>rect</tt> for the rectangular, <tt>tri</tt> for the triangular, <tt>u</tt> for the normal, and the set’s remaining members as PM 1002’s categories ground them). The tag rides the node as metadata; it changes no arithmetic in this edition, and evaluation (document 1004) will consume it when propagation arrives. A tag outside the closed set is a parse error naming the tag — the set is closed so that consumers can switch on it.</p>
</clause>

<clause id="_547af562-243e-b61f-66c7-f1af6f617e03" obligation="normative">
<title id="_4353b58f-56ea-75f3-93c5-4758ed6c75f0">The ± sugar</title>
<p id="_5796fbaf-da9a-f057-fd3d-5504d6320937"><tt>(10.3 ± 0.2)</tt> is the canonical literal spelled with the fenced ±. It desugars identically; the sugar is fenced-only — the ± appears between the parenthesised literal’s value and magnitude and nowhere else. Outside a fence, ± is not a token of this notation at all: <tt>pm</tt> names the picometre in unit expressions, and the notation will not overload it.</p>
</clause>

<clause id="_9bb507b5-2974-16f7-6e74-06e18459ae64" obligation="normative">
<title id="_78aedf70-cf26-ca07-7885-9cd1106b01b1">What the literals are not</title>
<p id="_44ca138c-6810-06e8-7892-fb79b8d257d3">The concise reporting form of PM 1002 is not an input form here (clause 10); the literals carry absolute magnitudes, and the concise rendering of a standard category is a writer’s act. The literal is input-side syntax; the reporting form is output-side convention; the two meet only in the rendering surfaces.</p>
</clause>

<clause id="_7426b884-da27-4b1e-5f67-d08a65f34723" obligation="normative">
<title id="_a1138905-aedb-1b58-7d4f-0ef3e0e33ece">The literal grammar, precisely</title>
<p id="_0820eb13-6ac7-210c-8cd3-7a984732e565">The literal is: <tt>(</tt>, the value, <tt>+/-</tt>, the magnitude, <tt>)</tt>, then in any order at most one shared exponent (<tt>e</tt> and an integer) and at most one distribution tag (<tt>~</tt> and a tag name), then optionally the trailing unit. The relative form replaces the magnitude with an integer-or-decimal and <tt>%</tt>. Each modifier appears at most once; two exponents or two tags are parse errors. The desugar order is fixed: relative resolution, then the shared exponent shift, then the tag attachment, then the trailing unit — so <tt>(3.85 +/- 0.23)e4</tt> and <tt>(0.5 +/- 0.01) ~rect</tt> compose unambiguously, and <tt>(3.85 +/- 0.23)e4 ~rect unit(m)</tt> is one literal carrying all three modifiers.</p>
</clause>

<clause id="_69d8b433-c5e0-6848-e7af-88e42321138c" obligation="normative">
<title id="_2bd44e00-7750-1d41-79e0-73ffa9d42485">The desugar table</title>
<table id="_de7ceb07-7639-ccb6-6a74-d20c8310ed18"><colgroup><col width="25%"/><col width="37.5%"/><col width="37.5%"/></colgroup>
<name id="_49e57ad9-e7ce-9194-0ade-4cce9759d1ba">Literal desugars</name>
<thead><tr id="_2c312bb6-4c77-aabf-25c1-d4ac8e3259d3"><th id="_bbdd0cb6-dc87-b732-6aab-c25adc7110aa" valign="top" align="left">Literal</th>
<th id="_3e46edc7-c2db-bec7-1c2e-4288157a0ab6" valign="top" align="left">Desugars to</th>
<th id="_352a68c8-f864-add3-d145-0067cb2e041f" valign="top" align="left">Notes</th>
</tr></thead>
<tbody><tr id="_6bbcba36-b05d-56c1-d7aa-d28a114a36eb"><td id="_0dfe87f2-4cb5-e2a5-75c1-a9ae989b22fa" valign="top" align="left"><tt>(10.3 +/- 0.2) unit(m)</tt></td>
<td id="_3540b7c1-74b8-3e90-445f-80352bfce0c6" valign="top" align="left"><tt>ustd(10.3, 0.2) unit(m)</tt></td>
<td id="_ff6732d1-dd84-c8a1-12f9-c2a6441acd2c" valign="top" align="left">the canonical case</td>
</tr><tr id="_aa214c01-8460-1984-f4eb-6a0147f3b060"><td id="_3450cd3e-06ab-3aa9-28c9-a0a9475e130b" valign="top" align="left"><tt>(10.3 +/- 2%) unit(m)</tt></td>
<td id="_8c205fd2-c202-887a-0040-fff227daa324" valign="top" align="left"><tt>ustd(10.3, 0.206) unit(m)</tt></td>
<td id="_50ce9180-275d-8b44-711b-2054447af30b" valign="top" align="left">the exact percentage product</td>
</tr><tr id="_ba250f34-b895-a53d-4918-5013fc66ac2e"><td id="_7127d857-c99c-2d82-3572-78fafe0d9dfe" valign="top" align="left"><tt>(3.85 +/- 0.23)e4 unit(m)</tt></td>
<td id="_a59e7d5e-e8e4-2540-39b8-ac6caf5d99f5" valign="top" align="left"><tt>ustd(38500, 2300) unit(m)</tt></td>
<td id="_2e24744c-c2aa-18c3-b31b-7c3fa5a3da73" valign="top" align="left">the shared shift</td>
</tr><tr id="_e082e233-286a-849b-d44b-410e4162f458"><td id="_cee51771-74e5-7dae-a484-46ec39075a5d" valign="top" align="left"><tt>(0.5 +/- 0.01) ~rect unit(V)</tt></td>
<td id="_bd1f89c2-93d3-9ee7-8425-67b494b99c04" valign="top" align="left">the standard record with tag <tt>rect</tt></td>
<td id="_d2b5b83c-1075-9838-f850-09f7fd472b7e" valign="top" align="left">the tag rides as metadata</td>
</tr><tr id="_89290913-1da5-253f-fa72-90ad2cad04d1"><td id="_1f080340-0653-03f6-9825-e77b58d11ec2" valign="top" align="left"><tt>(10.3 ± 0.2) unit(m)</tt></td>
<td id="_6009a466-f6cd-66f3-1cd1-e858b2c41de4" valign="top" align="left"><tt>ustd(10.3, 0.2) unit(m)</tt></td>
<td id="_934f69f5-8567-aa10-c17b-92df51728ede" valign="top" align="left">the sugar, identically</td>
</tr></tbody>
</table>
</clause>

<clause id="_bc34b6f4-242b-8b6e-afa4-0151aec76a70" obligation="normative">
<title id="_39e2c2df-e9e3-d29f-ca5e-ea580267d3b7">Why the desugar is normative</title>
<p id="_985d25c8-961f-3d5d-cf78-031140efd165">The desugar is the whole semantics of the sugar: a literal means exactly its desugared constructor shape, and nothing the surfaces do may distinguish a literal from its desugar. The corpus carries each row in both spellings, and a writer that renders the sugar form where the record was written canonically has not misbehaved — the record is the same — but the byte corpus freezes the canonical emission, because the canonical form is what the writer writes.</p>
</clause>

<clause id="_1a1cdaa7-d11a-9a9d-f553-27e8f5869b88" obligation="normative">
<title id="_459b5437-8295-e6c3-3dbc-156105fed31f">Refusals</title>
<table id="_dfeb74ac-c2d6-a1b8-196c-c4edfa83ad91"><colgroup><col width="40%"/><col width="60%"/></colgroup>
<name id="_1aad46ab-04b9-6a05-3333-539cece1b05f">Literal refusals</name>
<thead><tr id="_28ce7856-1bdd-000f-c681-42411133ed30"><th id="_e57bd4ed-88e4-3423-9a04-5dec42baf035" valign="top" align="left">Input</th>
<th id="_28ec1a52-787e-6769-07e5-be1dcf713c21" valign="top" align="left">Refusal</th>
</tr></thead>
<tbody><tr id="_7c8a9e06-8eec-34c9-3c51-c8217018b7ae"><td id="_abbe94da-2614-53de-969d-ecaed5e4e2f7" valign="top" align="left"><tt>(10.3 +/- )</tt></td>
<td id="_10ea8ceb-9fdf-7459-fd28-0e4e026a53b4" valign="top" align="left">parse error: the magnitude is missing</td>
</tr><tr id="_eb293b70-5d71-051a-4c25-9d526e02b015"><td id="_9609e9ad-e8ef-ad92-3f07-0a97f2393ee0" valign="top" align="left"><tt>(10.3 +/- 2%) unit(m)</tt> with a value the percentage turns inexact</td>
<td id="_c9005b41-1b2a-01dd-62cc-5e70bbac4a28" valign="top" align="left">materialisation error naming both numbers</td>
</tr><tr id="_741bad31-37ef-331d-ed25-e7488bbe8b22"><td id="_deb17a80-506f-242c-3982-33376f6c6362" valign="top" align="left"><tt>(3.85 +/- 0.23)e4 e5</tt></td>
<td id="_d18a069a-ace0-5935-dd9a-542356895f19" valign="top" align="left">parse error: one exponent at most</td>
</tr><tr id="_facd6d8d-5f05-0a91-122a-5d1cefd135f6"><td id="_1c702c69-5ce8-e9c3-0cb0-b057eef1b0ce" valign="top" align="left"><tt>(0.5 +/- 0.01) ~magic</tt></td>
<td id="_e10422a7-f40a-42da-c734-7791bdbf8e1b" valign="top" align="left">parse error: the tag set is closed</td>
</tr><tr id="_0a0941c2-de30-5e2f-9a3b-c0df832b4b00"><td id="_30238e47-e62d-356d-00d6-3351cc7d8d39" valign="top" align="left"><tt>10.3 +/- 0.2</tt></td>
<td id="_a415cd6b-2b1d-bd6f-9000-7dd5ef716904" valign="top" align="left">parse error: the literal is fenced; bare, the <tt>+/-</tt> has no literal to belong to</td>
</tr></tbody>
</table>
</clause>
</clause>

<clause id="_48e73433-e4be-462d-8a9d-93de5b12a314" obligation="normative">
<title id="_46643bbb-dfeb-2a52-01ce-1ddb8d56b7a7">Quantity assertions</title>
<clause id="_cceb46f3-5dc6-4cd2-322b-9e59213dc6c5" obligation="normative">
<title id="_483b09a4-5a3b-22eb-6395-def9dc70a56b">The :: form</title>
<p id="_1bb049ba-87de-20f5-2be9-2c4e14772d46">A unit expression followed by <tt>::</tt> and a kind name asserts the quantity: <tt>unit(m/s2)::acceleration</tt> states that the expression denotes an acceleration. The kind names are the UnitsDB quantity kinds (CalConnect 36815); the assertion invokes the static semantics of CalConnect 36816 — the expression’s dimension must resolve to the kind’s dimension, and a mismatch is an error at materialisation, not at evaluation time.</p>
</clause>

<clause id="_b3db4a42-cbb2-2985-c8dc-ec8f09d58277" obligation="normative">
<title id="_fea8eb70-73b7-614b-2ae8-fb8a3acd1d32">What the assertion is for</title>
<p id="_19860670-f42a-c03f-d7da-dd70257ee894">The assertion settles what units leave ambiguous: <tt>Bq</tt> and <tt>Hz</tt> share a dimension and are different quantities; <tt>Sv</tt> and <tt>Gy</tt> likewise. An author who writes <tt>unit(Bq)::frequency</tt> has said something checkable — and the static semantics check it. An author who writes <tt>unit(Bq)</tt> without an assertion gets the registry’s primary quantity for the unit (the default), stated so the record is still complete.</p>
</clause>

<clause id="_9b22c8f0-7521-19f6-5a00-80b034fc193c" obligation="normative">
<title id="_76005e09-92b7-3c65-f9dd-957d8b71ebdc">Gating</title>
<p id="_2d8af400-d321-ed6c-438e-2bb10f7e5531">The strict gating of CalConnect 36816 applies to assertions: an assertion that contradicts the registry’s quantity assignment for the unit refuses, and the refusals the units model defines (becquerel is not a hertz, sievert is not a gray) are materialisation errors here, exactly as they are conversion errors there. The notation does not carry its own quantity logic; it invokes the units model’s.</p>
</clause>

<clause id="_11e56ca9-fd14-444d-b069-bb6879371ea3" obligation="normative">
<title id="_826f1f86-9429-cb07-5b8f-304a50350dbf">Assertions on literals</title>
<p id="_2ad8e1d2-ffb8-af19-d454-fe6511b03958">The trailing unit of a literal carries assertions like any unit expression: <tt>(10.3 +/- 0.2) unit(m)::length</tt> asserts the metre as a length — redundant with the registry’s default, checked anyway, and stated because the author preferred the record complete.</p>
</clause>

<clause id="_33cf042b-b973-acca-84e2-7279c68e25b5" obligation="normative">
<title id="_4a191038-980e-f296-b500-ba57ba477143">The assertion grammar, precisely</title>
<p id="_947c91df-e7c6-a440-558b-d616dde4018d">The assertion rides a unit expression at the positions a unit expression appears: inside <tt>unit(...)</tt>, and on the trailing unit of a literal or constructor. <tt>unit(m/s2)::acceleration</tt>, <tt>(10.3 +/- 0.2) unit(m)::length</tt>, <tt>uexp(10.0, 0.3, 2, 0.95) unit(cm)::length</tt> — each states the kind of the quantity the unit denotes. An assertion on a bare <tt>unit(...)</tt> inside an arithmetic product states the product’s operand’s kind, and the static semantics check what the product then builds — the checks are the units model’s, at every position.</p>
</clause>

<clause id="_41e20683-fa55-c867-2bd9-96abeb6d7da4" obligation="normative">
<title id="_b21f2c74-94bb-f07c-ff71-8e88b391d03b">The kinds, named</title>
<p id="_a0b73324-af18-bf66-428d-4d10acab2007">Kind names are the UnitsDB quantity identifiers in their form: <tt>length</tt>, <tt>acceleration</tt>, <tt>activity</tt>, and the rest of the register. A name the register lacks is a materialisation error naming it — the kinds are data (PM 1001’s registry discipline), and this notation carries no kinds of its own.</p>
</clause>

<clause id="_1e2774d2-3b9e-3fb1-8423-18dbfd2ac742" obligation="normative">
<title id="_061b7d95-2843-62aa-e248-a57bf7909a6d">Matched, gated, defaulted</title>
<p id="_51e8cf3a-5807-dc20-65f2-db8aac17baeb">The three assertion outcomes:</p>

<table id="_0063f67f-bce7-f058-e169-e62192a0ed30"><colgroup><col width="33.3333%"/><col width="66.6667%"/></colgroup><thead><tr id="_89c342fb-13be-221d-d0dd-6160d7d7491a"><th id="_51292a44-e72a-df58-ee7d-62e9572a88fc" valign="top" align="left">Case</th>
<th id="_36246ee8-57b8-89ce-1fad-10552ba610a1" valign="top" align="left">Outcome</th>
</tr></thead>
<tbody><tr id="_ed623210-52f8-3289-fda3-783d73fd0782"><td id="_6b36bbcd-8484-1091-a618-2bf5c46b233c" valign="top" align="left">the kind matches the unit’s dimension and assignment</td>
<td id="_65ebd624-2e90-363e-3b12-fadf746b6232" valign="top" align="left">the assertion is recorded on the node</td>
</tr><tr id="_1588c3fd-7514-d30d-efb2-e50f2bedade0"><td id="_593d40cb-a0b5-2836-6785-5cc918395d7c" valign="top" align="left">the dimension matches but the assignment is gated (Bq as a frequency, Sv as a gray)</td>
<td id="_484a75e2-0d65-e60c-154d-b268e1929598" valign="top" align="left">materialisation error naming the gating</td>
</tr><tr id="_db9df034-f174-0e31-c615-8d8528879e0f"><td id="_100fca3e-f440-4309-0291-f951a4f38f12" valign="top" align="left">no assertion written</td>
<td id="_e128d1e2-c744-070a-e620-fa5b331e9a01" valign="top" align="left">the registry’s primary quantity for the unit is recorded, stated as the default</td>
</tr></tbody>
</table>

<p id="_316642cd-9343-9b35-726b-764adb9c006f">Every outcome leaves the record complete: an author either asserts, or the registry’s default is asserted on their behalf — a tree never carries a unit without a quantity statement.</p>
</clause>
</clause>

<clause id="_8c5c0c0e-c7b4-e001-2d3e-49e282966f65" obligation="normative">
<title id="_dcf96dcc-07ff-23fd-7c92-bcd71d3b4a65">The rejected syntaxes</title>
<clause id="_b555309d-eeef-9eab-7fb2-b8e73bd88682" obligation="normative">
<title id="_13cee2c8-e703-9374-b868-b94a872de4f8">General</title>
<p id="_f8a2f410-c4a0-d23e-7baf-7640834b0de9">Every rejected form is recorded with its replacement and its reason. The record is the decision: a proposal to admit one of these forms must argue with the reason, not rediscover it.</p>
</clause>

<clause id="_c94b3d4b-4ae8-7be8-32ea-ca458022fdf4" obligation="normative">
<title id="_9dff309f-bde0-2084-8b23-5c726ae6d5b5">The concise form as input</title>
<p id="_59d6559c-afac-da94-caf3-208bc285c32e"><tt>10.3(2)</tt> is not an input form. The shape collides with the notation’s own arithmetic — a number followed by parentheses is multiplication or application territory — and accepting it would make the parser guess between a reported result and a product. The concise form is a reporting convention (PM 1002): writers emit it for the standard category, and the reporting-form reader of AsciiMath (PM 1005) is the input path that exists for it, with its decimal-places rule. pma, which owns its tokens, declines the ambiguity instead.</p>
</clause>

<clause id="_b3ed8bbc-91fb-e098-67dc-939aa87f0688" obligation="normative">
<title id="_7ba06dda-a41a-d00d-cc85-1ecaceb0c117"><tt>+-</tt> as the separator</title>
<p id="_57a3feb6-4a9a-b142-8c38-a190f91d16c9"><tt>+/-</tt> is one token; <tt>+-</tt> is two characters with a life of their own: <tt>3+-1</tt> is genuinely ambiguous between “three plus minus one” and “three, plus-or-minus one” — the reading the Python <tt>uncertainties</tt> heritage made famous. This notation resolves it by never offering it: the canonical separator is <tt>+/-</tt>, and <tt>+-</tt> is a parse error inside a literal.</p>
</clause>

<clause id="_56a2b624-c0ba-7f85-263d-d4bf3f44ddc2" obligation="normative">
<title id="_fbeed558-4076-5e8b-c263-a973040914f5">Bare <tt>pm</tt> and the ± token outside fences</title>
<p id="_539992c4-494a-8690-5848-43e5d3f01358"><tt>pm</tt> is the picometre — a unit token inside <tt>unit(...)</tt>, never a separator. The ± character outside the fenced sugar is not a token: <tt>10.3 ± 0.2</tt> without the parentheses is a parse error, because an unfenced ± invites the same reading ambiguity the fenced form exists to close.</p>
</clause>

<clause id="_71d93643-4318-028c-f49a-1c0e74d23fc9" obligation="normative">
<title id="_73d1b8b5-3370-b908-51bd-2a47a7970647">Conversion syntax</title>
<p id="_2754dfcd-153a-4637-d8e0-547a3ce2955f">No form of pma converts: <tt>(10.3 +/- 0.2) unit(m) -&gt; unit(ft)</tt> is not a notation, it is a wish. Conversion is <tt>convert(quantity, target)</tt> — an operation of evaluation (document 1004), with the conversion law, the exactness rules and the difference typing of the UnitsML series applied where they belong. A notation that converts inline drags those rules into its grammar; pma keeps its grammar a notation.</p>
</clause>

<clause id="_72d6129e-0ab3-eb2f-6cb1-788435152bd7" obligation="normative">
<title id="_bae68657-940a-15cc-f797-727fe5102f20">Why the record exists</title>
<p id="_904776a5-e6ba-bc8a-2fc9-31b8889755e9">Each rejection is a feature someone will ask for. The annex carries the full rationale (Annex C); this clause carries the rule: the rejected forms stay rejected until an edition argues them back in, with the corpus extended and the rationale answered.</p>
</clause>

<clause id="_3d8e3a49-4617-1d4d-d7b1-d5960af469f3" obligation="normative">
<title id="_cb76edad-3e87-060b-6c19-018d825233a5">The rejections at a glance</title>
<table id="_79a1970b-dad8-258b-ca26-b27ea2e604c9"><colgroup><col width="25%"/><col width="37.5%"/><col width="37.5%"/></colgroup>
<name id="_7ee67c6f-0bf8-40cf-2572-2bb497def16f">Rejected forms and their replacements</name>
<thead><tr id="_58cc80e6-5615-1cb6-0cc5-b8805513cee1"><th id="_ef99cc92-d5e3-bbf7-a62f-a29584596f38" valign="top" align="left">Rejected</th>
<th id="_ef26660e-5b93-ed05-12b7-e829811cd4ce" valign="top" align="left">Replacement</th>
<th id="_655c361b-9f61-aa35-5ee6-200f6410f74d" valign="top" align="left">The reason in one line</th>
</tr></thead>
<tbody><tr id="_c480a5c5-954c-cd16-8a7f-a50127b5daa5"><td id="_4f864083-ea4b-0a2c-074d-bb43d432d483" valign="top" align="left"><tt>10.3(2)</tt> as input</td>
<td id="_00646b65-e08c-8082-a430-e7b67de5f0b4" valign="top" align="left">the literal, or the AsciiMath reporting-form reader</td>
<td id="_59dcd0e6-be86-89b3-71be-81a71125e5a4" valign="top" align="left">the shape is arithmetic territory here</td>
</tr><tr id="_06ff80cd-697f-52e4-2de7-7feca43fd126"><td id="_4d8f35f4-8b3d-6326-50a8-9e3e95f2d344" valign="top" align="left"><tt>+-</tt></td>
<td id="_729f80d4-e2b4-a72b-dd20-61d4f435dc33" valign="top" align="left"><tt>+/-</tt></td>
<td id="_6afb8b06-1e45-a564-f149-e98f78810025" valign="top" align="left"><tt>3+-1</tt> is genuinely ambiguous</td>
</tr><tr id="_6fd548e1-c275-91bc-fdcd-5ce5c6e7a47b"><td id="_f71a9471-0415-afd0-3ba2-5ca320613600" valign="top" align="left">bare <tt>pm</tt> as separator</td>
<td id="_73976af0-fc27-1f4d-b7e9-1ec763545d64" valign="top" align="left">nothing — <tt>pm</tt> is the picometre</td>
<td id="_19254895-eb0c-d38a-d9f6-f1fa5e2a694e" valign="top" align="left">a unit token is never a separator</td>
</tr><tr id="_ea7c26e1-8947-cae4-d328-9a81f4aef241"><td id="_327af435-271d-b524-fa10-3ba9b7993315" valign="top" align="left">± outside fences</td>
<td id="_a8294fa2-da01-bf4e-7f40-2ea1163d48e7" valign="top" align="left">the fenced sugar</td>
<td id="_e1c39369-5bf3-53d1-a4f3-d1f4ca7a98bb" valign="top" align="left">an unfenced ± reopens the reading</td>
</tr><tr id="_8c81b67c-ae83-394d-6fbe-d680bbb57077"><td id="_b12fd5a5-ea16-5998-b606-361033cc29ad" valign="top" align="left">inline conversion</td>
<td id="_5e7372af-f8d8-2186-9b6d-70cba3fd4de5" valign="top" align="left"><tt>convert(q, target)</tt> at evaluation</td>
<td id="_564939a3-0118-c6c8-38ed-761e9d23431b" valign="top" align="left">the conversion rules live in the units model</td>
</tr></tbody>
</table>
</clause>

<clause id="_6629cba5-011f-6291-cbbb-78ccbb60dc56" obligation="normative">
<title id="_00f9296b-341f-2559-a364-3575a136f2df">The one-line rule behind them all</title>
<p id="_955f9971-bbdc-d0f4-3a6b-58b9aa09b3cb">pma separates input syntax from output convention and from evaluation operations, and refuses any form that blurs the lines. The concise form is output; conversion is evaluation; the separator is input and must be unambiguous. Every rejection in this document is one of those lines held.</p>
</clause>
</clause>

<clause id="_5e31a0b8-9310-ccd1-29dd-4eab50de95ba" obligation="normative">
<title id="_d0c40a69-780a-d3ed-4cf2-7e5494011120">Differences from AsciiMath</title>
<p id="_0e04a165-0fc5-9fae-29cf-9de0c9b05d78">This clause is the complete, systematic comparison between pma and the AsciiMath surface of PM 1005. It is organised by category — lexicon, syntax, semantics, errors — and the categories are exhaustive: a construct that is not listed as shared, changed, added, or removed does not exist in either notation’s intersection. A developer implementing pma from this document needs this clause and the grammar of clause 6; nothing else differs.</p>

<clause id="_66c48360-4429-3a36-e975-e041df953652" obligation="normative">
<title id="_9ffd86cd-e920-47b6-9aa4-7ac7b99243fc">Shared, unchanged</title>
<p id="_a593fc21-7e1e-bf8a-602f-f23ceac93305">These parts of AsciiMath carry into pma with identical syntax and identical meaning:</p>

<table id="_87624f4c-94a6-29e2-3180-61bb310ff468"><colgroup><col width="22.2222%"/><col width="44.4444%"/><col width="33.3334%"/></colgroup><thead><tr id="_8af13b06-27fe-ebb3-7f88-ba2d97fa0064"><th id="_5ef35d35-ba8d-b734-40c9-2e80c3e4ae6a" valign="top" align="left">Shared</th>
<th id="_aea8514c-20c7-6fea-5eeb-bb8f23963f41" valign="top" align="left">Form</th>
<th id="_e4271fb9-a14b-f22a-f512-970776386bc9" valign="top" align="left">Reference</th>
</tr></thead>
<tbody><tr id="_6a881c0e-6a06-3396-318d-661afc908a81"><td id="_51e337e7-8ab8-496b-9818-6c2520de0a12" valign="top" align="left">numbers</td>
<td id="_d81a02cf-0cdc-566f-1385-2cb74bb0d510" valign="top" align="left">digits with an optional decimal point, exact decimals</td>
<td id="_9982bed0-4d1a-fb7d-655b-9fa59883a40c" valign="top" align="left">clause 6</td>
</tr><tr id="_08858ddf-8551-1b42-5cfd-a027148b81c6"><td id="_0ee13b0d-0a7e-7357-1e48-bf8b78717461" valign="top" align="left">arithmetic operators</td>
<td id="_8f708c2d-3801-b4b5-4cf0-531d8bd2a66e" valign="top" align="left"><tt>+</tt>, <tt>-</tt>, <tt>*</tt>, <tt>/</tt>, <tt>^</tt>, <tt>mod</tt></td>
<td id="_9df8a08a-64fa-ac03-1106-85073f15336c" valign="top" align="left">clause 6</td>
</tr><tr id="_77bec695-63e6-204d-3dfd-540c9c8b5f5a"><td id="_6d951272-ce7e-d74e-9c38-3c9c8c464159" valign="top" align="left">unary signs</td>
<td id="_07caffc9-ab7c-e296-1e1e-a2e361f82bb1" valign="top" align="left"><tt>-x</tt>, <tt>+x</tt></td>
<td id="_68e32ea7-2ea5-6885-9307-617e57fd3ced" valign="top" align="left">clause 6</td>
</tr><tr id="_76be540a-8c89-22a5-6b28-2bd4ee6ee16b"><td id="_c22864e5-d8bd-97d4-9e20-793d9c10da9b" valign="top" align="left">grouping</td>
<td id="_824e6a67-e5bb-bed8-1aaa-ce05541a6f03" valign="top" align="left">parentheses</td>
<td id="_e2ee9bd7-9333-219e-bd94-e1f53f0099ee" valign="top" align="left">clause 6</td>
</tr><tr id="_3e7192b3-de4f-4449-e67e-5497bcaca808"><td id="_a864a6ba-2107-781e-d822-9e4ef6cacf36" valign="top" align="left">relations</td>
<td id="_ec2164f3-f492-1261-c8a1-c0551605a4a0" valign="top" align="left"><tt>=</tt>, <tt>!=</tt>, <tt>&lt;</tt>, <tt>&lt;=</tt>, <tt>&gt;</tt>, <tt>&gt;=</tt></td>
<td id="_24fc4953-96af-b361-8a75-51175be2e44e" valign="top" align="left">clause 6</td>
</tr><tr id="_0fbe9c1e-a5cf-cac8-ba85-3dbf27b871fe"><td id="_8ba66a66-01af-c68b-beae-f480f6038f0e" valign="top" align="left">names</td>
<td id="_ddcb231f-eb7d-dc8a-950f-160e88e05d7e" valign="top" align="left">identifiers bound at evaluation</td>
<td id="_6a6a3c60-ce6d-f0ee-d35e-ec185b516280" valign="top" align="left">clause 6</td>
</tr><tr id="_98d7036e-45eb-9863-ffcc-5e48cfdb87cd"><td id="_b5c95c38-b70b-8eb2-ce5b-91b15b03a388" valign="top" align="left">the power associativity</td>
<td id="_8d669d74-9af8-5ce1-0d90-238d0c1909ea" valign="top" align="left">right-associative <tt>^</tt></td>
<td id="_21e5e2c4-b6f1-cd5f-b50f-b97bb75d150a" valign="top" align="left">clause 6</td>
</tr></tbody>
</table>
</clause>

<clause id="_22aeb9f7-2d59-8f10-e514-a389fb30e9ee" obligation="normative">
<title id="_a076649a-1ae1-e57f-24a5-acde2fc5dd69">Changed</title>
<p id="_458e0edb-c452-28e3-e4e6-34aa1055999d">These exist in AsciiMath under one spelling and in pma under another:</p>

<table id="_b48472d1-783b-127e-1242-369a9e5bc5bf"><colgroup><col width="22.2222%"/><col width="22.2222%"/><col width="22.2222%"/><col width="33.3334%"/></colgroup><thead><tr id="_c960d586-9bc0-bf85-fea3-b5d4a621b9af"><th id="_9391d6e0-527b-7eae-7ed0-7b5b3ebe3d75" valign="top" align="left">Concept</th>
<th id="_c3d0c66c-e18e-d1c6-a5e6-fa8bcd3d2c97" valign="top" align="left">AsciiMath (PM 1005)</th>
<th id="_f2ff427d-781a-5741-df43-be18171d7daa" valign="top" align="left">pma</th>
<th id="_4c9ac67e-13c9-729a-5719-dfce55354884" valign="top" align="left">Reason</th>
</tr></thead>
<tbody><tr id="_87466bb5-4c6f-ec1c-cf76-3e6ebd1f908d"><td id="_c0dbf5d5-600c-c300-85ec-8fd60a32a44c" valign="top" align="left">the unit</td>
<td id="_1c5f4526-49f2-b938-813e-7f4bdc35f012" valign="top" align="left">the quoted channel <tt>"unitsml(...)"</tt></td>
<td id="_d9f7786b-cbd7-ff68-424a-dc15664b8764" valign="top" align="left">the unquoted constructor <tt>unit(...)</tt></td>
<td id="_e1191f2e-6a21-7b6a-aefa-ddb00a61a425" valign="top" align="left">no strings as syntax (clause 5)</td>
</tr><tr id="_e53bc379-43b7-3385-ddc0-d3362312f82b"><td id="_2870355f-ba98-4c1a-adb8-28d2ebe29448" valign="top" align="left">the interval kind <tt>probabilistically-symmetric</tt></td>
<td id="_ac0be0ed-7c8b-6383-bee5-db08f3dede4f" valign="top" align="left">spelled <tt>symmetric</tt></td>
<td id="_6f5a786e-f9e7-19e5-2b03-bdf74bd813cf" valign="top" align="left">spelled in full</td>
<td id="_6218e018-4769-0a35-7e20-44bd89f8bcb5" valign="top" align="left">no minus-sign ambiguity to dodge; tokens are owned</td>
</tr><tr id="_fdc43689-b88c-1225-b87b-aeb7f9c03370"><td id="_cec1325b-a41e-6783-cf92-053d2513c95b" valign="top" align="left">the uncertainty calls’ context</td>
<td id="_5c65ec31-01b8-952e-762c-0f2fc1e333bf" valign="top" align="left">loose placement rules</td>
<td id="_dbce0ac2-eb2a-f04e-1440-dde0ff066175" valign="top" align="left">strict argument lists with the trailing-unit rule</td>
<td id="_f61c1b59-aad7-051c-3dd2-b0b4ddb0f236" valign="top" align="left">owned grammar</td>
</tr><tr id="_aa070710-b872-65e0-d7f2-8c262f3c39c2"><td id="_c7e988e0-96e7-863c-aaed-87863259982c" valign="top" align="left">the reserved reading of <tt>sum</tt>, <tt>prod</tt></td>
<td id="_a9604d62-24c5-ccfb-361f-5277cce5007e" valign="top" align="left">ternary classes with scripts</td>
<td id="_d50bea96-d502-eb57-7308-63b9fa8d0fc1" valign="top" align="left">reserved words without scripts; iteration bounds are evaluation’s</td>
<td id="_f2a5b8b8-af71-c59f-e899-22bfee671222" valign="top" align="left">clause 6’s token discipline</td>
</tr></tbody>
</table>
</clause>

<clause id="_1866d6bd-0706-ad43-5e90-39e7d41ae54c" obligation="normative">
<title id="_82348ee5-d386-70a7-407d-c6662a255fe8">Added</title>
<p id="_c59d0f72-f080-32ac-0e1e-079f0849072c">These exist only in pma:</p>

<table id="_d5f865a9-382c-b8ae-24ec-11446a82b20d"><colgroup><col width="33.3333%"/><col width="66.6667%"/></colgroup><thead><tr id="_1a4f3f1a-0482-6f24-c8c7-d15cfb3b6bf5"><th id="_eaa6bc58-2545-1c48-0207-dffbc1bb6bcb" valign="top" align="left">Addition</th>
<th id="_657c0343-3d6b-89a5-9e2f-d1c94d3eb144" valign="top" align="left">Form</th>
</tr></thead>
<tbody><tr id="_9cf5a199-218a-c595-e6e2-00d9a5a3c4c1"><td id="_7f77a832-b983-697e-9536-8a947621c3a6" valign="top" align="left">the measured literal</td>
<td id="_65916e2b-61c0-3ea2-fc7f-9d826147f08f" valign="top" align="left"><tt>(v +/- u)</tt> with its modifiers: relative <tt>%</tt>, shared exponent <tt>e</tt>, distribution tag <tt>~name</tt></td>
</tr><tr id="_5f65787c-6e41-3e8e-1252-6b1da5fbd0bf"><td id="_8e20ca29-2526-c990-65f8-e9d9e640fc98" valign="top" align="left">the fenced ± sugar</td>
<td id="_88ab6bfd-3618-f06a-796e-aaebe09feb1a" valign="top" align="left"><tt>(v ± u)</tt> — fenced only</td>
</tr><tr id="_7bf59a10-1cfb-4f34-f226-9d8a9c797c70"><td id="_b603b622-6658-a3b6-949c-59b3f5c9d15c" valign="top" align="left">the unit constructor</td>
<td id="_c82190ad-5ebf-ea5a-67b0-4202d4b10c3c" valign="top" align="left"><tt>unit(...)</tt> unquoted</td>
</tr><tr id="_c1be55f4-487a-4b4d-b1df-9f82e01ce832"><td id="_842e7e60-b1a3-c329-3afc-e22fe56b5809" valign="top" align="left">the difference constructor</td>
<td id="_5f8a871e-736c-9a6d-a883-38e6208b2382" valign="top" align="left"><tt>diff(...)</tt></td>
</tr><tr id="_1d053fbf-3fd2-1361-54e1-14f01b926c7c"><td id="_b15bf1cc-5ed0-52d6-8d6b-7c4d951a187a" valign="top" align="left">the quantity assertion</td>
<td id="_ffa61246-35dc-9de5-27b8-1c5ab4471705" valign="top" align="left"><tt>unit-expression :: kind-name</tt></td>
</tr></tbody>
</table>
</clause>

<clause id="_24b33ec3-333d-37ee-a150-45ba5a0b2966" obligation="normative">
<title id="_ebfe7e4a-3eb3-2b7a-6eaf-3679957b2967">Removed — not carried in this edition</title>
<p id="_b56ccf1e-8431-c884-c1b5-a2ca53e3e681">AsciiMath’s surface has four areas pma does not carry in this edition, stated so the boundary is exact:</p>

<table id="_ab0c602f-ef81-67d7-e62a-086d5179fb28"><colgroup><col width="22.2222%"/><col width="44.4444%"/><col width="33.3334%"/></colgroup><thead><tr id="_17d46aeb-4515-5977-86f5-823388be1b53"><th id="_fbcb8f98-598d-0770-6c48-9378018179f4" valign="top" align="left">Area</th>
<th id="_192fabe2-91f7-7b3c-0652-9171b2230e04" valign="top" align="left">What AsciiMath has</th>
<th id="_36cce5cc-893b-0e94-0a7f-57fb9653e276" valign="top" align="left">pma edition 1</th>
</tr></thead>
<tbody><tr id="_38466e5b-035d-4823-8550-80e4fc0617ab"><td id="_2dc4c759-4470-2cfd-02b8-c0f27569a222" valign="top" align="left">the mathematical construct surface</td>
<td id="_9b3a4ab2-2ded-4cdd-99ea-73dff2afd6a4" valign="top" align="left"><tt>frac</tt>, <tt>root</tt>, <tt>sqrt</tt>, scripts <tt>^</tt>/<tt>_</tt> on symbols, <tt>sum</tt>/<tt>prod</tt>/<tt>int</tt> with scripts, matrices <tt>[[...]]</tt>, accents, font styles, <tt>text(...)</tt></td>
<td id="_1067bd9e-fb38-de32-814f-17416e4807ae" valign="top" align="left">not carried: pma edition 1 is the arithmetic and measurement language; a pma document composes construct content through the model, and an edition may carry a subset later with its grammar and corpus</td>
</tr><tr id="_871f6ae1-9e1b-f788-2d50-9776312c6d52"><td id="_3d30877f-fcbe-43d4-74b8-4f272228a1bd" valign="top" align="left">quoted strings</td>
<td id="_33b0f8d4-2f80-69e6-698b-ae31344c9f81" valign="top" align="left">text content and the channel</td>
<td id="_9d4de4e4-984e-cde0-727d-65444dca1e54" valign="top" align="left">removed entirely: no quoted-string token exists in pma</td>
</tr><tr id="_c9772ce1-496d-fe3b-a01e-47a640d54fac"><td id="_9e824222-60b8-b4ea-cf52-d02018853a19" valign="top" align="left">implicit multiplication</td>
<td id="_fb1986e6-2d6d-3ff3-c4c3-093ba42ebc0b" valign="top" align="left">adjacency <tt>2x</tt> means <tt>2 * x</tt></td>
<td id="_fbccad37-f9bf-4aec-ff7f-9c44aae4e83a" valign="top" align="left">removed: multiplication is explicit <tt>*</tt>; adjacency is a parse error — the owned grammar carries no load-bearing whitespace</td>
</tr><tr id="_118458f1-9c9c-7494-5d8d-deffb12816ad"><td id="_5a0b0d07-4d53-fb2a-2d1b-4e4327dbc2ca" valign="top" align="left">the reporting form as input</td>
<td id="_573dd391-58fd-281a-b776-8625e6acd74f" valign="top" align="left"><tt>10.3(2)</tt> reads</td>
<td id="_758c838a-20f0-ad51-cb96-09a0e5c0d9c6" valign="top" align="left">removed: output-only per clause 10</td>
</tr></tbody>
</table>

<p id="_8d9cf2a1-b12d-15ed-3e8b-7197577b2ab3">The script tokens <tt>^</tt> and <tt>_</tt> in pma belong to the arithmetic’s power operation only: <tt>x^2</tt> is the power, and there is no subscript form in edition 1.</p>
</clause>

<clause id="_ec194845-dc48-ebad-39ac-731b05991a33" obligation="normative">
<title id="_4406b589-567c-cd5b-1781-72c774d725a8">Lexical differences</title>
<table id="_34437dc8-08f8-895d-3f5e-5291bd7c10bf"><colgroup><col width="33.3333%"/><col width="66.6667%"/></colgroup>
<name id="_1e5a9ebf-4726-1621-613f-56ac17618ad0">Lexicon differences</name>
<thead><tr id="_f25c61a7-c71e-8043-9bdf-ccb08718b5cb"><th id="_94d43b4a-a3a1-1a5d-96d4-cba57930a075" valign="top" align="left">Difference</th>
<th id="_75858f44-4c0c-56a5-3fc0-35638700b08e" valign="top" align="left">Statement</th>
</tr></thead>
<tbody><tr id="_ac6bfeaf-1c5f-6eeb-67a6-a4e77a364441"><td id="_a9c348b7-fe26-2051-da27-a4d01c5060ed" valign="top" align="left"><tt>+/-</tt> is one token</td>
<td id="_2b5c94da-1024-3c10-c020-7326c2165608" valign="top" align="left">not <tt>+</tt> then <tt>/</tt> then <tt>-</tt>; the tokeniser’s longest match carries it</td>
</tr><tr id="_e85126f9-b296-301a-87fa-42dda2d39b20"><td id="_fa6c3991-f1c5-2ba7-31ea-7f343f6ee943" valign="top" align="left"><tt>%</tt> is a positional token</td>
<td id="_3079e672-71ef-49fc-135b-f7086649b91c" valign="top" align="left">only inside a literal’s magnitude position; elsewhere a parse error</td>
</tr><tr id="_d2889a3c-0156-087d-776f-4488076746ca"><td id="_c401f36d-b7e7-a008-54f5-204656343223" valign="top" align="left"><tt>e</tt> in exponent position</td>
<td id="_051d6421-a271-5d18-3d4a-f5b84763f919" valign="top" align="left">only after a literal’s closing parenthesis; elsewhere a name</td>
</tr><tr id="_ee911029-a5a5-4e45-4aee-fd957bac48d6"><td id="_a2e01ac3-4e84-a8cb-a32b-319d6fc396ba" valign="top" align="left"><tt>~</tt> is a positional token</td>
<td id="_a70dce90-6efc-a2b4-020c-28128b6426cc" valign="top" align="left">only before a distribution tag; elsewhere a parse error</td>
</tr><tr id="_12271953-eff8-ba75-fe76-fe2d1a91b131"><td id="_75ed303d-ee62-4f5b-8761-278c89ddb7bd" valign="top" align="left"><tt>::</tt> is a positional token</td>
<td id="_929d8ac8-0ccc-0c7e-cb00-57feec76fdd7" valign="top" align="left">only after a unit expression; elsewhere a parse error</td>
</tr><tr id="_be097159-cf82-684c-6831-87e92d94b7a2"><td id="_2228096f-72a4-606f-7bfd-fa44bcc2e72c" valign="top" align="left">no quoted-string token</td>
<td id="_8347465b-777e-7cc5-1b1f-360c88929173" valign="top" align="left">a double quote anywhere is a parse error</td>
</tr><tr id="_1783f764-291d-64da-e3c1-d471f9a9ef53"><td id="_8fed9543-4495-475f-9bdd-d621a31b7582" valign="top" align="left">case sensitivity</td>
<td id="_9494b05a-162c-5e94-af19-8205d57ce13c" valign="top" align="left">identical to AsciiMath: tokens and names are case-sensitive</td>
</tr></tbody>
</table>
</clause>

<clause id="_f2ab4f33-babc-184c-9569-bbc7f3a6946a" obligation="normative">
<title id="_f7755b88-ac6b-a1f4-5f98-f27da83e522b">Error differences</title>
<p id="_be8e86c0-a24f-d455-3b72-ee2d99d7d429">Both notations raise PM 1003’s typed errors. The differences: pma’s error set is exhaustive over its grammar (every input is derivable or named by one error — no legacy corner survives to be interpreted leniently), and pma carries no compatibility fallbacks by definition: AsciiMath’s reader honours its baseline’s leniencies where the baseline has them; pma’s reader honours none, because there is no baseline to honour. The practical consequence for implementers: the pma error table of clause 6 is complete, and conformance to it is testable edge to edge.</p>

<example id="_8aeb1fc0-52ac-83ec-6496-1dd0ccad678c"><p id="_616bc1ea-03b4-dc9c-6b51-c7ee64886fad">The same intent in both notations — the measured value 10.3 m with standard uncertainty 0.2 m — and the two spellings. <strong>Expected outcome.</strong> AsciiMath: <tt>ustd(10.3, 0.2) "unitsml(m)"</tt>. pma: <tt>(10.3 +/- 0.2) unit(m)</tt>. Both materialise the same node; the differences clause accounts for every character that differs — the channel became the constructor, and nothing else changed.</p>
</example>
</clause>

<clause id="_fed51fa6-49d8-e9a8-35a0-35480857bd61" obligation="normative">
<title id="_e73d52e7-63cb-6fa5-e436-6ee7cd400ddd">The MECE claim, stated</title>
<p id="_0637ec9e-67d8-7fef-d29a-8333d71bce97">Every token of pma is either shared, changed, added, or removed by the tables above; every construct is derivable from clause 6’s grammar alone; every input is either derivable — to exactly one tree — or refused by exactly one error. This clause and clause 6 are the whole language; the remaining clauses explain it.</p>
</clause>
</clause>

<clause id="_59b6b08a-1592-9191-1bcd-b3ac9854c224" obligation="normative">
<title id="_fce96ecf-10bd-72db-268c-d58432bccf01">Materialization</title>
<clause id="_45f84c9b-0032-e169-e245-11b86e551c07" obligation="normative">
<title id="_9d3d4aef-98f1-1d77-1077-23588a7b6c74">One tree</title>
<p id="_9fb3537b-0368-d242-05dd-4be1831fcf3f">pma materialises into the one math model (PM 1001): the constructors into their nodes, the literals into desugared constructors, the arithmetic into the model’s operators. Nothing about pma survives into the tree — no syntax marker, no provenance flag — because every renderer and the evaluator consume the model, and a tree that remembered its notation would break that for everyone.</p>

<p id="_c5cf1427-0410-5af7-e19f-0e9e65dbce33">The consequence is the system’s economy: pma’s features render to every surface PM 1001 defines with no per-format work beyond the encodings those documents already define. An uncertainty written in pma renders in OMML through PM 1002’s marker convention exactly as one written in AsciiMath does.</p>
</clause>

<clause id="_9fa3132a-a86e-f8f8-f7f1-a3e1e9cca3c3" obligation="normative">
<title id="_75053e8e-21cb-1981-9e6c-4075f5f2a260">Rendering into AsciiMath</title>
<p id="_8c0d4601-e307-5030-191c-2bad26603dd1">Rendering a pma tree into AsciiMath emits the AsciiMath encodings: the uncertainty calls, the channel for units, the reporting form where the notation carries a concise node. The quoted channel is an AsciiMath device — a pma author never reads their own output through it as input, because pma’s own forms are native; the channel is what the AsciiMath side consumes.</p>

<p id="_2451a574-bf78-01aa-fb6e-bdeb8ab58e53"><strong>Compatibility relationship.</strong> AsciiMath renders into pma natively: the shared tree is pma’s input vocabulary too, and an AsciiMath-read tree writes as pma through the shared constructors. The reverse — pma into AsciiMath — goes through the encodings, and the shared-exponent and tag forms of the literals render into the AsciiMath forms that exist for them.</p>
</clause>

<clause id="_2da3d06f-0794-aaa0-d6fd-f3f7764013d7" obligation="normative">
<title id="_9133ecee-778a-e9e1-6c60-82d1e5e3e648">The strict error surface</title>
<p id="_f75d3088-5012-366d-1f96-0060c907f6db">pma’s reader surfaces PM 1003’s typed errors with this document’s rules: parse errors from the grammar, construction errors from the model’s validation, and nothing else. Every error names its clause here. The error corpus of clause 14 freezes the shapes.</p>
</clause>

<clause id="_a6907fae-cea8-cfc4-869c-42ec5de967d0" obligation="normative">
<title id="_aee993de-9b68-fabe-c8e5-c4e3b3aa59ee">Materialization, worked</title>
<p id="_94fb3625-dd89-2168-dfe1-a0f1e9e876f3"><tt>(10.3 +/- 0.2) unit(m) + uexp(4.1, 0.3, 2) unit(m)</tt>:</p>

<ol id="_73848ae3-5985-213f-e645-67c5b4ff04f2" type="arabic"><li><p id="_87117d44-2605-f0d6-8b8e-2f8d81dcab27">the literal desugars: <tt>ustd(10.3, 0.2) unit(m)</tt>;</p>
</li>
<li><p id="_da71785c-ad71-6719-8ba1-35e9d75f2eff">the constructor parses with its arguments and trailing unit;</p>
</li>
<li><p id="_9663e913-b024-0997-d411-bef766fa4f7e">both materialise: two uncertainty nodes, categories standard and expanded, both metres;</p>
</li>
<li><p id="_52595d0b-e478-16d4-f275-50c3dd4860e5">the addition builds over them — syntax, not semantics: the tree states the sum;</p>
</li>
<li><p id="_d3983929-3b8c-9d0c-1ccf-caacef25921e">rendering: every surface encodes both nodes per PM 1002; evaluation will answer the sum when it can, per its rules.</p>
</li>
</ol>

<p id="_9c3a6c87-ce1b-e9ce-d9c3-28b00e76e531"><strong>Expected outcome.</strong> a tree that says exactly what was written, in the model’s terms, with the semantics pending in the documents that own them.</p>
</clause>

<clause id="_16cead33-74a7-ec09-6c96-81e3629518b4" obligation="normative">
<title id="_229faf8f-71ab-e7ce-f241-01a2db83d863">What materialisation refuses</title>
<p id="_f169d0c3-97a3-49de-0773-0efddd58fcbe">The desugar’s exactness (the relative form’s product), the constructors’ field rules, the assertions’ gating, and the grammar’s strictness — each refusal is a named rule of this document or of PM 1002, at parse or materialisation time, before any tree escapes. A pma reader yields only complete records; the half-built forms the legacy notations tolerated do not exist here because the rules run before the tree does.</p>
</clause>

<clause id="_f43486fe-e5df-582c-e540-f16d35a4a753" obligation="normative">
<title id="_229c7daf-37b8-514f-47b3-db6ac5298230">The two notations, side by side</title>
<p id="_39de9205-6034-aca2-e49b-efe95d7bc744">The same measured statement in both notations, and what each promises:</p>

<table id="_8d08e631-0474-7c77-5b52-a497d0be8a5a"><colgroup><col width="25%"/><col width="37.5%"/><col width="37.5%"/></colgroup>
<name id="_50aeda78-21e1-225d-526c-bde8beee24ab">One statement, two notations</name>
<thead><tr id="_9789b9f8-5cb7-24d1-e506-bb3b86643bfd"><th id="_a0202eef-32cc-eef9-9fbb-6c14975804bc" valign="top" align="left"/><th id="_2eb6ca46-f6b0-adb8-7c62-42cf53da434f" valign="top" align="left">AsciiMath (PM 1005)</th>
<th id="_48010a0c-c8f2-3863-073a-221b4d7510ab" valign="top" align="left">pma (this document)</th>
</tr></thead>
<tbody><tr id="_d6fb2dfb-9103-ae15-daaa-ad7ae7c379f7"><td id="_8875b145-2f8b-5ffd-7eec-afd44e521021" valign="top" align="left">the statement</td>
<td id="_7766c6a1-034a-0641-65ec-9ecdfdfcfab3" valign="top" align="left"><tt>ustd(10.3, 0.2) "unitsml(m)"</tt></td>
<td id="_18a99ffe-3a0c-5bb1-445a-7fcc63493754" valign="top" align="left"><tt>(10.3 +/- 0.2) unit(m)</tt></td>
</tr><tr id="_318ee7fe-20ab-fcbe-512f-2bde30978cb4"><td id="_3073bf50-83a2-af54-7179-4199ada7634b" valign="top" align="left">the tree</td>
<td id="_8f321253-6d0d-5f0e-3412-957e6107a342" valign="top" align="left">the uncertainty node</td>
<td id="_981e247e-1786-21dc-b683-1a60148bda99" valign="top" align="left">the same node</td>
</tr><tr id="_32f6a4ec-440a-dd0f-e2f4-cf1df655203a"><td id="_236b5f09-520d-b3bf-209d-4ca9ba2dc18d" valign="top" align="left">the unit channel</td>
<td id="_f36c0d12-efd8-0ad5-9406-24b65a3c5fc7" valign="top" align="left">quoted string</td>
<td id="_142e8d35-f7f8-afd7-7e2c-0f200c614790" valign="top" align="left">the unquoted constructor</td>
</tr><tr id="_5a2f7249-fb24-ba52-e7fc-863b232cd0c5"><td id="_e3f88169-8e77-7586-accc-ec8820f742cd" valign="top" align="left">the tokens</td>
<td id="_c21842f9-4711-58ae-d265-25ce41a1bf44" valign="top" align="left">compatibility-negotiated</td>
<td id="_6480e238-50ab-9d95-b432-794e605b35c2" valign="top" align="left">owned and reserved</td>
</tr><tr id="_8ecc46dc-c246-c278-986e-fdea8699ad24"><td id="_d61d0b20-d5d8-f57e-8a48-6ad174ec6bd4" valign="top" align="left">the errors</td>
<td id="_4e30f931-ab20-ca01-7f46-2e1d285b5c66" valign="top" align="left">strict, with the channel’s limits</td>
<td id="_0a501033-00c1-d2da-4559-6ea3edd5f069" valign="top" align="left">strict, exhaustive</td>
</tr><tr id="_6e1e84d8-b349-037d-419a-299b21009b99"><td id="_0e673313-d177-c589-0b8b-6a6ccb4487ed" valign="top" align="left">the promise</td>
<td id="_c761f1ed-7b54-dc80-e293-b09a1b596086" valign="top" align="left">the world’s AsciiMath reads unchanged</td>
<td id="_b0009fb6-a6ea-91df-e08d-e43bb228b190" valign="top" align="left">every token means one thing</td>
</tr></tbody>
</table>

<p id="_f6ca7186-0673-1023-83f2-402d1c3dee55">The tree is the shared centre, which is why the table has one identical row: everything below the notation is common. The notations are front doors; the system behind them is one system.</p>
</clause>

<clause id="_4dc239ec-cc3d-8198-8fa6-67bb95b583b6" obligation="normative">
<title id="_bdea3b34-77dc-e9e8-3302-e9913a9d93e1">The rendering relationship, precisely</title>
<p id="_fc44e0c4-666d-2696-baa2-d86a7292d8f5">A pma tree writes to AsciiMath through the encodings: the uncertainty calls, the channel, the reporting form where a concise node exists. The forms pma has that AsciiMath’s writer lacks — the distribution tags, the relative form — render into the encodings AsciiMath has (the tag as its statement, the relative as the computed absolute), because the tree carries the record, not the sugar. An AsciiMath tree writes to pma natively: the constructors are the AsciiMath encodings’ native shapes, and the round trip AsciiMath→tree→pma is lossless by the shared model.</p>
</clause>

<clause id="_cfd3c920-581b-7122-c693-152ea89be25c" obligation="normative">
<title id="_0c9a7e6e-c63d-1eec-88e3-51bd37f30747">Migration</title>
<p id="_564649e4-f9e1-ea4e-3f23-15f70b4a2881">The unreleased uncertainty call forms that earlier plurimath work prototyped migrate into pma unchanged in meaning: <tt>ustd(v, u)</tt> and kin keep their shapes and gain the strict errors, the trailing-unit scoping and the artifact discipline. Nothing released changes — the forms were never released — and the migration note lives here so the history is stated once.</p>
</clause>
</clause>

<clause id="_3f26e406-ffa6-3ce7-cb90-c32a869d88b4" obligation="normative">
<title id="_ad0fe3ad-74c6-fa48-5dae-616f4e219868">Differences and typing</title>
<clause id="_b8ae21ac-8a9e-1d09-b564-0a35192a6ee2" obligation="normative">
<title id="_00747166-ffb6-25c3-ef3a-4ba6c3bdc3c5">The difference quantity</title>
<p id="_411a2953-2e7a-5d20-29eb-35dc075fe128"><tt>diff(5 unit(degC))</tt> materialises a difference-typed quantity: the value five with the unit degree Celsius, typed as a difference — five degrees hotter than something, not five degrees above absolute zero. The typing is the quantity algebra’s (the invariants of the UnitsML series): differences are the values subtraction yields, and they convert factor-only, because offsets do not apply to them.</p>
</clause>

<clause id="_21342375-af02-1a17-c5fe-3b123b03f8a1" obligation="normative">
<title id="_55688000-4f25-056c-651f-be488a992715">Where differences come from</title>
<p id="_34c195cc-239c-cf9a-591f-cf463061c64a">Two roads: the <tt>diff(...)</tt> constructor states one directly; the subtraction of two absolute quantities of the same unit and quantity kind produces one. Both roads land in the same typing, and the arithmetic gating follows the units model: an absolute and a difference may combine in the ways the invariants define, and the model refuses the rest.</p>
</clause>

<clause id="_8298fd88-fa89-aa25-a814-cd46ef3c1f80" obligation="normative">
<title id="_2e23ca2e-4bca-6be4-47cb-20359f212c1b">Why the constructor exists</title>
<p id="_284193de-7dc8-a963-89a1-c6080557874c">The subtraction road needs two absolutes to make a difference; an author who starts from “the temperature rose by 5 degrees” has a difference and no base quantity to subtract. <tt>diff(...)</tt> states it without inventing a base, and the typing carries the statement — so the eventual conversion (<tt>diff</tt> in kelvin is the same five) and the eventual evaluation see the truth the author stated.</p>

<example id="_8baaf18b-17db-8451-5361-7b5412ec964f"><p id="_5a92404b-ee40-4942-0db7-b74b7807a834"><tt>diff(5 unit(degC))</tt> converted to the kelvin difference. <strong>Expected outcome.</strong> <tt>5 K</tt> of difference — the factor-only conversion, no offset applied; the typing did its work.</p>
</example>
</clause>

<clause id="_e9a679ad-a605-fa04-1113-40421372fe20" obligation="normative">
<title id="_ab5c00c0-303f-6b9e-bfcf-90fac59d1b2a">Differences and the literals</title>
<p id="_e7acfd39-ca02-ba5c-ccd5-df836300ec97">A literal’s magnitude is itself a difference — <tt>0.2 m</tt> in <tt>(10.3 +/- 0.2) unit(m)</tt> is a difference quantity, which is why the trailing unit scopes it and why its conversion is factor-only. The trailing-unit rule and the difference typing meet in every literal: the rule states the unit once because both the value and the difference-in-that-unit share it.</p>
</clause>

<clause id="_473da91c-5c05-1a2b-d6a6-c60db4464b04" obligation="normative">
<title id="_08ddab6e-dede-6b5e-0a40-4c1156ee31ca">The invariants, invoked</title>
<p id="_30e39e13-adb4-01fa-65c3-ee8a90335423">The quantity algebra’s invariants (the UnitsML series) govern what may combine with what: an absolute plus a difference yields an absolute, a difference plus a difference yields a difference, and the rest refuses. pma states these as materialisation-time checks where the operands are static, and leaves the dynamic cases to evaluation — the notation refuses what it can see, and the evaluator owns what it cannot.</p>
</clause>
</clause>

<clause id="_1c624424-75b3-4881-4418-9a55b931057a" obligation="normative">
<title id="_65d28127-c973-1680-3fd9-df0a2dcce411">Artifacts and runtimes</title>
<clause id="_f397a475-d333-b359-7f50-0a14c327996a" obligation="normative">
<title id="_d3237012-f199-3523-83e9-0429bb748f0d">The artifact pattern</title>
<p id="_666140ce-2af7-0af7-9bcb-63897aa9da57">The pma grammar is carried by a checksummed artifact, generated from the shared registry — the pattern the asciiunits content language established (CalConnect 36817): the grammar source lives with the registry, generation is deterministic, the artifact is committed with its checksum, and consumers verify the checksum before use. Artifact bytes are authoritative; nothing re-derives them at runtime.</p>
</clause>

<clause id="_788dd916-65cc-bc39-3915-ac4581a861bc" obligation="normative">
<title id="_9f27d4aa-b865-059d-42eb-af100638e186">The runtimes</title>
<p id="_df4c2553-921b-aaac-5e84-86a5d50552a0">The artifact serves every runtime in the artifact pattern: the Ruby reader first, and the TypeScript runtime from the same artifact. Byte-identical behaviour across runtimes is the pattern’s guarantee — the same artifact, the same parse, the same tree, the same errors — and the corpora of clause 14 pin it cross-runtime as they pin it across versions.</p>
</clause>

<clause id="_a8f3a7d1-387b-a0f1-106b-72df19270b1a" obligation="normative">
<title id="_6d33ca01-07ee-2529-6c6e-278f6d192c4c">Editions</title>
<p id="_9757e60d-46e6-47f6-3388-687d54c33371">The notation is editioned from its first release. Before that release, this document is the specification and the surface may still move; after it, the surface changes only at an edition, per the change discipline of the series: new constructors and literals join through the reserved-word process, the corpus extends, and nothing published changes. The registry’s growth (PM 1001) flows into the unit expressions immediately — the unit grammar is the artifact’s, and its growth is that artifact’s editioning.</p>
</clause>

<clause id="_880e9db3-3438-48a7-3acb-f0d272db885d" obligation="normative">
<title id="_bf6cdaf2-3baf-a813-9399-b0ca10f6176d">The artifact lifecycle</title>
<table id="_729e743d-e562-94ed-54c1-b7eab09add7c"><colgroup><col width="33.3333%"/><col width="66.6667%"/></colgroup>
<name id="_21be0847-f600-9abf-342f-83f66751ddbb">The artifact’s path from source to runtime</name>
<thead><tr id="_d35b102d-b3cb-ef4b-fd4e-514110d9fe8a"><th id="_9e6a4750-b56f-1edf-0e54-f02ced83140d" valign="top" align="left">Stage</th>
<th id="_d3d6b137-1c72-0140-fcef-37d982fa52bc" valign="top" align="left">Content</th>
</tr></thead>
<tbody><tr id="_d223e71a-fbe0-6b6e-5a53-cc77e405fdfe"><td id="_8bd0eab5-ebbb-9b27-c8d2-b551705f5346" valign="top" align="left">source</td>
<td id="_e510ca91-b4f5-8853-a430-9d44bbf08f18" valign="top" align="left">the grammar source with the registry data it generates from</td>
</tr><tr id="_951c45df-01fc-b93e-5b7a-cf393d5941d5"><td id="_2defc249-2e83-3edd-ab73-7f16daedb402" valign="top" align="left">generation</td>
<td id="_6d4a09b8-ba20-d170-4b7c-a597c14c6419" valign="top" align="left">the deterministic build: grammar and tables from the data</td>
</tr><tr id="_9dd6f036-af9b-816f-730a-79de3eed0f6a"><td id="_896fb657-593b-7eda-ebe9-368db8ea9724" valign="top" align="left">commit</td>
<td id="_76ae3a3d-8c7d-2753-c246-45cb4da7fffe" valign="top" align="left">the artifact and its checksum, committed together</td>
</tr><tr id="_2df769b6-fa3d-1798-5183-54b51618ea5f"><td id="_8752cd09-5964-7091-9c6b-0723f94e03ad" valign="top" align="left">consume</td>
<td id="_126320b7-b40c-81d9-68bf-b7c6d976c8a6" valign="top" align="left">runtimes verify the checksum, then read the artifact</td>
</tr><tr id="_3e1aa61b-2d2c-33c0-85e0-beee8ef5f420"><td id="_71a1929f-9385-8af7-8388-a82132acc4f9" valign="top" align="left">release</td>
<td id="_7cb99e54-88ae-68f4-4d2e-febcc8027994" valign="top" align="left">the edition pins the artifact; the corpus freezes against it</td>
</tr></tbody>
</table>

<p id="_592646c5-bbd9-f1c2-9774-3aba509bc12d">The lifecycle is the asciiunits pattern’s, and its guarantees transfer: the same checksum serves every runtime, a regenerated artifact that differs is a broken build, and the artifact a release names is the artifact forever.</p>
</clause>

<clause id="_550fca8c-d9eb-b7f9-dda4-b827d644fa9b" obligation="normative">
<title id="_3e95cf7d-54a7-48da-fb54-6cbd861dc532">The TS runtime and the shared corpora</title>
<p id="_840976e9-2d86-2dd4-54d3-97b6361c8ab5">The TypeScript runtime reads the same artifact and replays the same corpora; the cross-runtime class of clause 14 exists to make that a claim rather than a hope. The uncertainty, conversion and conformance sets of the testsuite run on both runtimes and their outputs compare byte for byte — the pattern’s end-to-end statement, checked.</p>
</clause>
</clause>

<clause id="_afda5f26-0cce-a7a8-fd6b-835a1683f18a" obligation="normative">
<title id="_38d9a667-a675-9e7d-488d-5235e796cf9d">Conformance</title>
<clause id="_7c3d5319-d998-2345-d4f0-13b4b1312051" obligation="normative">
<title id="_a1520fdb-f7c0-a1d2-3cc3-4f2d3bb760e5">General</title>
<p id="_7c3f976a-700b-9ab9-3242-1e2b65485c60">Conformance to this document is the implementation of the pma reader per clauses 5 to 12, with the artifact discipline of clause 13. The claims follow PM 1003’s shape.</p>
</clause>

<clause id="_f31fbf9f-5c1f-4e5c-91a2-cfb3c636561d" obligation="normative">
<title id="_488a4dbb-1c03-c44b-726d-edc4a7fa28d0">Conformance classes</title>
<table id="_5cb0a3d8-6eb0-a0dc-068c-a8f57562c088"><colgroup><col width="14.2857%"/><col width="42.8571%"/><col width="42.8572%"/></colgroup>
<name id="_4657f873-49e3-53b7-9742-9641be881667">Conformance classes</name>
<thead><tr id="_619df1f5-6dee-66aa-0838-6fe6760a3bcc"><th id="_6da678e6-d932-8cce-72dc-9823bb5c22ef" valign="top" align="left">Class</th>
<th id="_35147c9b-1c88-94ca-c8eb-c0e65193eb26" valign="top" align="left">Licenses the implementation to claim</th>
<th id="_eaf5a509-5734-31cc-5a89-4cf5ca00ce34" valign="top" align="left">Replay requirements</th>
</tr></thead>
<tbody><tr id="_ce9299dd-2243-918b-e749-0cda3684e5b0"><td id="_2db7cacf-c3d9-9fc3-6db0-30dc89333459" valign="top" align="left">read-pma</td>
<td id="_54f62878-1470-0a8c-4d9f-a89ec7b38414" valign="top" align="left">reads the full surface of clauses 6 to 12, strict errors included</td>
<td id="_a9f52edd-cf82-b4b0-5a82-894bab06f8ca" valign="top" align="left">the pma corpus, tree-identical, and the error vectors with their shapes</td>
</tr><tr id="_2d153d55-9595-d61d-0b0b-c997a5b52bd3"><td id="_9dafc4fb-c9a7-5949-cb5b-21eb5ad6dba1" valign="top" align="left">write-pma</td>
<td id="_0c3f01f8-4609-4acc-d4c5-e487702b4606" valign="top" align="left">writes the canonical surface per this document</td>
<td id="_fa6d49b9-7c22-59ae-75c4-c89f1ec7e496" valign="top" align="left">the pma column, byte-identical</td>
</tr><tr id="_ac073039-f216-3f8e-abde-6885b57d315d"><td id="_ce24285f-d292-38dc-407c-bd9bee0871f6" valign="top" align="left">roundtrip-pma</td>
<td id="_25a7ab96-878b-5287-b7d9-7fad458cd902" valign="top" align="left">the lossless claim: write, read, equal tree</td>
<td id="_299a3338-a136-f352-dd7d-f5779deae043" valign="top" align="left">write-then-read per corpus entry</td>
</tr><tr id="_b86172ef-70f9-07c3-b9ff-153fadc56f65"><td id="_bde9c2ee-8c75-907c-6862-e79ac6ea63c8" valign="top" align="left">cross-runtime</td>
<td id="_b2ee2459-72c5-83fc-b7a9-c86a60d6d802" valign="top" align="left">the same behaviour as the reference runtimes</td>
<td id="_bf9187c7-0ea6-6759-73f9-1e2ac2a9e9e7" valign="top" align="left">the shared corpora replayed on the implementation’s runtime</td>
</tr></tbody>
</table>
</clause>

<clause id="_cbd29531-a44e-ebc5-b182-d5ddcfa56dfe" obligation="normative">
<title id="_b593ce11-deff-ab20-d6f5-0df85a893af4">The corpora</title>
<p id="_8d8b8a48-4947-29b9-4af3-190e20edb95c">pma’s own corpus covers: every constructor with its argument orders and omissions; every literal form and its desugar; every assertion, matching and gated; every rejected form as a refusal vector; the difference forms; and the strict error table. The shared corpora — the uncertainty, conversion and conformance sets of the testsuite — pin the cross-runtime and cross-notation behaviour: a pma-written uncertainty and its AsciiMath-written twin render identically everywhere.</p>
</clause>

<clause id="_05c2bca5-140d-7027-bb59-f931a8c04249" obligation="normative">
<title id="_6423bf11-96d9-60bd-d057-1adb2b5f906d">Claims</title>
<p id="_7f638493-0d2e-49b1-e659-239cd5d39d2a">A claim names the artifact checksum and the corpus generation. An implementation against a moved artifact is a different claim; the discipline is the series’, and pma’s forward-specification status ends at its first release, when the first generation freezes.</p>
</clause>
</clause>

<clause id="_b4ce7d7a-21c2-e1c2-9f3e-0b2fce3f7c9f" obligation="normative">
<title id="_9f18a1ca-5c2e-9c86-112d-a15496dff247">Annex A: the constructor reference</title>
<table id="_ad492a47-c7a5-a4ec-02e9-5a8a00efc480"><colgroup><col width="20%"/><col width="30%"/><col width="20%"/><col width="30%"/></colgroup>
<name id="_d72ba4b3-f6d3-40a0-8f4f-8f860045e2ee">Constructors in full</name>
<thead><tr id="_dcf0e567-4c7b-209b-6159-9669e20c741b"><th id="_b4a60f64-33dd-9563-9876-03eaa8aad9ca" valign="top" align="left">Constructor</th>
<th id="_30413b34-8d8d-720a-6e4e-856926fc8f9a" valign="top" align="left">Arguments</th>
<th id="_0d3f43e9-1038-c544-0d93-7c1c4259b67f" valign="top" align="left">Materialises</th>
<th id="_1aca2de5-7eee-4d72-2ee0-4fd26a64d063" valign="top" align="left">Refusals</th>
</tr></thead>
<tbody><tr id="_25940735-96f2-00dc-7c92-0e32e07f62d3"><td id="_dcd50a4d-ff3a-4934-5dc4-36b1a7d17514" valign="top" align="left"><tt>unit(e)</tt></td>
<td id="_844bf544-3987-97c1-8abc-7485907d1c17" valign="top" align="left">one unit expression (CalConnect 36817)</td>
<td id="_bfa83e64-0854-eb1c-3d70-369fea5a557c" valign="top" align="left"><tt>Unitsml</tt> node</td>
<td id="_5ae5ddd4-90be-5ceb-9940-cde6f4f2d73c" valign="top" align="left">unreadable expression → parse error naming it</td>
</tr><tr id="_7a9ccc27-dd57-57cd-d35d-cc30811f7122"><td id="_0d95d4d2-ae00-01e7-e652-2bc9cf077659" valign="top" align="left"><tt>ustd(v, m)</tt></td>
<td id="_74442311-1799-abcf-edb0-9a426e1fe2ac" valign="top" align="left">value, magnitude</td>
<td id="_404acfd6-a074-48d0-2694-41ed96b86a3a" valign="top" align="left">standard uncertainty, absolute</td>
<td id="_2d43a494-ecf6-6cb7-bfb3-9d19c76af9f9" valign="top" align="left">field rules of PM 1002</td>
</tr><tr id="_5125cedd-18a8-8375-0464-ea70ca62e29d"><td id="_118f0770-f002-0b6d-5849-417e6c9d0ad5" valign="top" align="left"><tt>uexp(v, m, k, p?)</tt></td>
<td id="_f3e4771f-1e02-8a16-de34-9cab29427c20" valign="top" align="left">value, magnitude, factor, optional probability</td>
<td id="_7c14c97f-94dc-33a9-a6d0-0318741409ea" valign="top" align="left">expanded uncertainty</td>
<td id="_d90c882a-4f76-55a0-6625-f8a05e47a743" valign="top" align="left">factor ≤ 0, probability outside (0, 1)</td>
</tr><tr id="_02789049-dc44-839c-b6e8-e96b5fe0bfb1"><td id="_a8e9b58b-4e59-9797-1c74-7843837bd09c" valign="top" align="left"><tt>ucov(v, l, u, p?, kind)</tt></td>
<td id="_d0d306e8-0371-903f-927e-c017666030c9" valign="top" align="left">value, endpoints, optional probability, kind</td>
<td id="_5a1d9a57-2528-f4b9-836e-d796f34c05ca" valign="top" align="left">coverage interval</td>
<td id="_4d4e2873-c4f6-130e-8f57-0f13c33f9f95" valign="top" align="left">forbidden magnitude/factor present; unknown kind</td>
</tr><tr id="_0d3ff131-b7b7-f998-0106-37acfeb65f6b"><td id="_e5132abe-138e-8578-8984-9cc28758ec88" valign="top" align="left"><tt>diff(q)</tt></td>
<td id="_d1a1a16f-758c-aac3-28d2-30967c5892c7" valign="top" align="left">one quantity expression</td>
<td id="_993ea393-6d8e-564b-63c3-b9c0a77f5280" valign="top" align="left">difference-typed quantity</td>
<td id="_6e9aa977-6cde-fd1a-2a34-1fd31e7c2850" valign="top" align="left">non-quantity operand</td>
</tr></tbody>
</table>

<p id="_761cf7eb-c2e7-a13e-fec8-9248478253ca">The optional probability is omitted without an empty position, as in AsciiMath. Every refusal names its field and its rule; the message shapes are this document’s and are frozen in the error corpus.</p>

<clause id="_32fc9754-41f1-97bb-9354-ff5c3f4f9dc6" obligation="normative">
<title id="_3574a040-7c4d-45ab-9cd6-58c115cbe908">The constructors’ composition</title>
<p id="_0108be4f-7370-1a78-2634-c430d8d2bfb6">Constructors compose through the arithmetic: <tt>uexp(10.0, 0.3, 2, 0.95) unit(cm) + uexp(4.1, 0.2, 2) unit(cm)</tt> is an addition of two expanded uncertainties — valid syntax, materialised nodes, and an evaluation question (document 1004) rather than a notation question. The notation carries what the author stated; the evaluator answers what it means.</p>
</clause>
</clause>

<clause id="_647b1c50-3825-d07e-e9dd-8a9c7573d222" obligation="normative">
<title id="_030b0f2e-28db-661a-1bfb-839539c9fac7">Annex B: the reserved-word register</title>
<clause id="_5c8d705c-eab8-fbf0-1c78-760ede71286a" obligation="normative">
<title id="_f1ac82f2-7cae-8512-56c6-da50b536cb71">The register at this edition</title>
<table id="_6910017e-877a-a1a1-f80f-5390558ad6eb"><colgroup><col width="25%"/><col width="50%"/><col width="25%"/></colgroup>
<name id="_a5e6db70-f5df-3892-289a-569ae9fcc6ad">Reserved words</name>
<thead><tr id="_94050194-31f9-93b8-dbed-55fd4f0ca188"><th id="_5586b990-9fa5-f734-a29a-0a1186ea1f4d" valign="top" align="left">Word</th>
<th id="_2716655d-e60e-8d31-e9f2-e3177a917c7d" valign="top" align="left">Role</th>
<th id="_9bede822-edbe-1965-c7a2-e8c2f08c7093" valign="top" align="left">Since</th>
</tr></thead>
<tbody><tr id="_1af629d8-ddee-b89b-77a3-69729cc01ce0"><td id="_f9be627e-b4da-c366-069a-832046d0c50b" valign="top" align="left"><tt>unit</tt></td>
<td id="_60e77859-4124-a8bc-6fad-c663cfd05f9d" valign="top" align="left">the unit constructor</td>
<td id="_0e724af2-5e63-7285-5a9b-2e860b0eda5a" valign="top" align="left">edition 1</td>
</tr><tr id="_89963a4c-9fd9-c2af-56c7-a8df64040562"><td id="_2f6c1c34-32d8-e2eb-9a8f-6d76f45dc0bf" valign="top" align="left"><tt>ustd</tt></td>
<td id="_5bb712f7-407b-8a63-998a-df8ad733876e" valign="top" align="left">standard uncertainty</td>
<td id="_fca5b315-dd38-79bb-16cb-a4b60ad022c7" valign="top" align="left">edition 1</td>
</tr><tr id="_199df7ef-720d-bef4-1092-3570df907fcf"><td id="_c780487e-31a5-c884-5e3f-b9c20dafe81f" valign="top" align="left"><tt>uexp</tt></td>
<td id="_28d55808-a484-e53d-7d2e-28326323372d" valign="top" align="left">expanded uncertainty</td>
<td id="_2bfd16af-9409-12cf-2e27-bcb3a01bce1f" valign="top" align="left">edition 1</td>
</tr><tr id="_6405f192-e4bb-f4ff-e752-a99814d01e40"><td id="_a3320d7d-09c2-2642-494e-07bcdc3ca6b7" valign="top" align="left"><tt>ucov</tt></td>
<td id="_4c7a5640-474e-d2c1-3f0f-2f960d723dd1" valign="top" align="left">coverage interval</td>
<td id="_febc015a-bcb2-3b00-2689-c299f00d428d" valign="top" align="left">edition 1</td>
</tr><tr id="_cd5438c3-8b0e-6531-76db-b65606c47886"><td id="_1f6e8466-9158-d302-3418-043ac7919ffc" valign="top" align="left"><tt>diff</tt></td>
<td id="_66bd579b-41cd-fd75-57d5-a6178277e737" valign="top" align="left">difference constructor</td>
<td id="_249a2dd6-9925-8832-b870-858024c4d079" valign="top" align="left">edition 1</td>
</tr><tr id="_5ec5ce6f-40eb-28dc-5cda-9ab3a0390f00"><td id="_48d69840-9957-dc3b-6c06-3b988de26e3e" valign="top" align="left"><tt>rect</tt>, <tt>tri</tt>, <tt>u</tt></td>
<td id="_605d4f08-dce5-2c91-a5f1-1975299f269a" valign="top" align="left">distribution tags</td>
<td id="_b5c3aca0-c053-2804-609a-b5ee8d41f904" valign="top" align="left">edition 1</td>
</tr></tbody>
</table>
</clause>

<clause id="_c08cbd05-1f79-fd22-02b2-82836e5240e0" obligation="normative">
<title id="_ec926bd3-b670-6b50-6fcf-9585d1a5840a">The process</title>
<p id="_9938c83c-6d4e-7fc6-5d46-94962159fd45">A reserved word joins the register through proposal, collision check, and edition: the collision check runs against the registry’s symbol space and the UnitsDB symbol space, and the word joins only if both are clean. The check is the build’s, not a reviewer’s memory. A word never leaves the register (editioned surfaces do not shrink), and a word’s role never changes — a new role is a new word.</p>
</clause>

<clause id="_5d6abc2c-e782-705f-c0ce-01535100d4d0" obligation="normative">
<title id="_46313adc-8f00-e5c4-2310-c2bc278c1f88">Why the register is small</title>
<p id="_0957054c-e7fd-ef58-a6ea-39faeb265f0d">Six words and three tags is the whole surface, because pma’s features are composable rather than enumerable: the literals desugar to the constructors, the assertions ride the unit expressions, and the arithmetic is the model’s. A notation that needed a keyword per feature would be a command language; this one is a notation.</p>
</clause>
</clause>

<clause id="_ce2c92dc-c6ab-2c65-2210-51f8a83a52bd" obligation="normative">
<title id="_5f532291-0a1e-602c-847d-caec06be6ac1">Annex C: the rejected forms, argued</title>
<clause id="_995f80e3-0dbe-e8eb-c4a5-c25ec48bb1f6" obligation="normative">
<title id="_b660fc0b-a84b-cae6-0479-78626bfcc790">The concise form</title>
<p id="_b8fb5448-c311-63e4-4d4d-7f9b66a41d1e">The argument for accepting <tt>10.3(2)</tt> as input: authors have results in that shape from reports, and re-typing them is friction. The argument against: the shape is the notation’s own application/multiplication territory, and the input that accepts it must choose between a reported result and a product on syntax that does not distinguish them. The resolution: the reporting form is an output convention of PM 1002 everywhere, and its input path exists where the ambiguity is resolvable — the AsciiMath reader, whose positional rule recovers the magnitude exactly. pma authors convert reported results once, into <tt>(10.3 +/- 0.2)</tt>, and the conversion is data entry, not notation.</p>
</clause>

<clause id="_88aeed0c-a5f3-f959-3262-ebc962355de9" obligation="normative">
<title id="_93a16576-b388-f7fe-6b2a-4e8d06c43185"><tt>+-</tt></title>
<p id="_f7c55cc3-e082-391b-2c80-a90c188de98b">One character of separation, and the reading collapses: <tt>3+-1</tt> is either <tt>3 + (−1)</tt> or the literal. The <tt>uncertainties</tt> heritage chose the literal; the notation chooses the operators, because <tt>3 + (-1)</tt> is already unambiguous and the literal already has a spelling. Two spellings for one form is the ambiguity budget spent twice.</p>
</clause>

<clause id="_80418da9-ef1c-59c4-c511-ddf9c3f34bca" obligation="normative">
<title id="_0512e825-2b0a-14f1-f040-f57c7e56901b">Bare <tt>pm</tt></title>
<p id="_d61a3d07-6316-a58c-b6c1-8dbe0b824590"><tt>pm</tt> is the picometre. A unit-bearing notation that also makes <tt>pm</tt> a separator has <tt>unit(5 pm)</tt> meaning two things, and the resolution cannot be syntactic. The ± character keeps the same rule outside fences: it appears exactly where the fence closes it, and nowhere else.</p>
</clause>

<clause id="_cd6e7b97-3e16-b30c-d7fe-3a49b1c08250" obligation="normative">
<title id="_1759e827-5b95-8eb9-99cb-c3449ef7623a">Conversion syntax</title>
<p id="_608500ea-4d72-5554-9c72-748f1d6c7949">The arrow forms are attractive and wrong here: conversion carries exactness rules, difference typing and quantity gating — whole clauses of the UnitsML series. Inline conversion syntax would restate them as grammar, in a place the grammar cannot check. <tt>convert(q, target)</tt> is where those rules live; the notation stays a notation.</p>
</clause>

<clause id="_c7943855-75c1-9f52-d109-83c6b367c2d8" obligation="normative">
<title id="_31eeb26d-7114-fcb2-ed91-f59ed5fa8fef">The general principle</title>
<p id="_fde241aa-826a-5854-3006-07ad60769cf3">A rejected form returns through an edition, with its corpus and its rationale answered — not through a reader that accepts it quietly. The refusals are the notation’s promises as much as its acceptances.</p>
</clause>
</clause>

<clause id="_a7342b6e-57aa-5e18-9c7e-9841fad79880" obligation="normative">
<title id="_01a3e712-bb45-68d2-7823-caf53210c3de">Annex D: worked examples</title>
<clause id="_f6cb0aa2-e32e-a166-c4b2-12798c50eceb" obligation="normative">
<title id="_4b9cf7cf-fd1d-7ea3-aaa6-71aa9f80f34d">A measurement statement</title>
<p id="_3dbc0a6f-09b0-44cb-7137-7505ec6e4eda"><tt>(10.3 +/- 0.2) unit(m)</tt> — the canonical literal with its trailing unit.</p>

<ol id="_4fcc0690-5f44-1beb-7f15-0ec767f24595" type="arabic"><li><p id="_e063d883-b1f2-0ec0-0470-9ede707a427d">the literal desugars to <tt>ustd(10.3, 0.2)</tt>;</p>
</li>
<li><p id="_484e23d6-f82b-747b-70ac-ac6c453bd372">the trailing unit scopes both fields;</p>
</li>
<li><p id="_5f45711b-4db9-bfba-5867-44e17dabab53">materialisation: one uncertainty node, category standard, value <tt>10.3</tt>, magnitude <tt>0.2</tt>, unit the metre.</p>
</li>
</ol>

<p id="_ba3e254d-d916-26e1-47c8-79a5130f6ca4"><strong>Expected outcome.</strong> rendered to AsciiMath: <tt>ustd(10.3, 0.2) "unitsml(m)"</tt>; to LaTeX: <tt>10.3(0.2) m</tt>; to every surface per PM 1002 — one statement, six encodings, no per-format authorship.</p>
</clause>

<clause id="_baa633c2-05c6-873d-f208-d69a1cc300cd" obligation="normative">
<title id="_b392afe9-c39a-2307-6b80-44910f7ff535">A relative statement</title>
<p id="_ae7d4a13-743f-c6b1-f1e0-d5bbcd3c9f21"><tt>(5.0 +/- 1%) unit(V)</tt> — one percent of five volts.</p>

<ol id="_3d6b2a01-52a6-e384-af84-802edce6e80f" type="arabic"><li><p id="_789411d8-a5d2-c4a8-01e1-d34a1efad3d0">the relative magnitude computes at materialisation: exact decimal <tt>0.05</tt>;</p>
</li>
<li><p id="_c1603c8c-3d2f-2ce4-62a3-c109a468a894">the record is the absolute form.</p>
</li>
</ol>

<p id="_4c2681cc-0cc6-157b-eb27-cd757c376995"><strong>Expected outcome.</strong> the tree carries magnitude <tt>0.05</tt>; the surfaces render <tt>5.0(0.05) V</tt> shapes; nothing recomputes the percentage at render or evaluation time.</p>
</clause>

<clause id="_2dc2c34d-072c-1de7-c42b-07f51f82e76c" obligation="normative">
<title id="_9050ae54-986a-336f-1888-8e0340b87738">A shared-exponent statement</title>
<p id="_0ec82043-1b5a-cdcf-43ae-4ddc7755f9bc"><tt>(3.85 +/- 0.23)e4 unit(m)</tt>.</p>

<ol id="_bf48442b-2f93-4660-ca92-53509e7e639c" type="arabic"><li><p id="_05abf888-e597-635c-19c7-60951439ff6a">the exponent shifts both: <tt>38500</tt> and <tt>2300</tt>, digit movement only;</p>
</li>
<li><p id="_4b887579-5fb6-9b6f-990a-358ce5afc4c5">the desugared record is <tt>ustd(38500, 2300) unit(m)</tt>.</p>
</li>
</ol>

<p id="_a23d36cf-9bab-3524-9b35-0a5d75f9e74c"><strong>Expected outcome.</strong> the exact decimals of the shifted form; no rounding anywhere in the shift.</p>
</clause>

<clause id="_8ad20d0c-660d-34f7-d14e-2daf27b914af" obligation="normative">
<title id="_ed2ad96a-8771-e3ce-1e17-8da2fff144f2">A tagged statement</title>
<p id="_d81706c2-8751-20cc-d390-89386e4769a1"><tt>(0.5 +/- 0.01) ~rect unit(V)</tt>.</p>

<ol id="_1a522b1a-92c0-bfce-7b9d-6ca244d8c212" type="arabic"><li><p id="_de278201-5621-abea-8623-df87f1a334c9">the tag attaches to the literal: the uncertainty’s distribution family is the rectangular;</p>
</li>
<li><p id="_99d74cb0-4b58-5b8b-dbe7-81fc43a46694">the node carries the tag as metadata; arithmetic is unchanged in this edition.</p>
</li>
</ol>

<p id="_8e69f30f-72a7-b08c-4954-5419840afa27"><strong>Expected outcome.</strong> the tree with the tag; the surfaces render the tag where their encoding carries it (per PM 1002’s statements) and drop it as presentation where they do not.</p>
</clause>

<clause id="_ec5e9b56-e0c0-61bc-a4d3-670a5f35caad" obligation="normative">
<title id="_4a857cba-69ff-1eca-c3ea-4f63859738b8">An asserted unit</title>
<p id="_48ae7fd5-d61f-5ecc-5cf6-dc613bcd035a"><tt>unit(Bq)::frequency</tt>.</p>

<ol id="_48dda9b8-8313-342b-d67f-5aa34ff7bb2e" type="arabic"><li><p id="_f4660d15-fb94-d09e-f686-e8b91d8d3426">the assertion names the kind; the static semantics check the dimension;</p>
</li>
<li><p id="_1f96277d-9f60-7616-8470-1e6304c8a641">the registry’s assignment for <tt>Bq</tt> is the becquerel’s own quantity — and the gating refuses the frequency claim.</p>
</li>
</ol>

<p id="_25cfaec8-8b1a-57fa-0708-a62f01049a6b"><strong>Expected outcome.</strong> a materialisation error naming the gating: the becquerel is not a hertz, and the assertion said it was. <tt>unit(Bq)::activity</tt> — the kind the registry assigns — materialises with the assertion recorded.</p>
</clause>

<clause id="_73e02a73-5454-de81-9ca6-dfa89ff3415d" obligation="normative">
<title id="_32173019-ab5d-d3fe-3e2b-1b8e8aac4919">A difference</title>
<p id="_7cc81a9c-a2cd-fbd7-74a3-9d7308243f7b"><tt>diff(5 unit(degC))</tt> — the temperature rise.</p>

<ol id="_6257a208-2499-9e2d-778d-7ac05dd3f185" type="arabic"><li><p id="_a40bf5df-9de4-6c6d-f463-e50c1021a940">the constructor types the quantity as a difference;</p>
</li>
<li><p id="_41a72077-41ee-0764-47af-08c905bb2820">the conversion to a kelvin difference is factor-only: <tt>5 K</tt> of difference, no offset.</p>
</li>
</ol>

<p id="_28679d60-ec1d-4c3d-72a6-151da85c353e"><strong>Expected outcome.</strong> the typed difference; the arithmetic that combines it with absolutes follows the invariants; the evaluation that converts it applies no offset — the typing carried the truth the author stated.</p>
</clause>
</clause>

<clause id="_7b958a44-77fb-4099-a6fe-7e1a2eeb1052" obligation="normative">
<title id="_48411a40-0c40-3fc9-ee89-5e64a66a375e">Annex E: test-suite examples</title>
<p id="_0f824d87-f3d5-b87e-0224-fda582f62841">Vectors illustrative of the conformance classes of clause 14; the pma corpus freezes them.</p>

<clause id="_408e13e5-5d9c-1442-4053-4a9b562f1dd4" obligation="normative">
<title id="_31d2d5c9-cf8d-2c73-2307-9c0598553295">Constructor vectors (class <tt>read-pma</tt>)</title>
<example id="_ca8e9250-b541-be62-6536-b9e4f28598b1"><p id="_da94fc5b-a931-b9c2-908e-1ceb1edfb807"><tt>unit(kg m/s^2)</tt>. <strong>Expected outcome.</strong> the <tt>Unitsml</tt> node of the newton expression; the unit reader’s exact reading, positions preserved for errors.</p>
</example>

<example id="_4177de56-677e-cddb-c257-b61a374495a7"><p id="_dddb9b9e-09ec-a9b6-4cac-1f8744ddd673"><tt>ustd(10.3, 0.2) unit(m)</tt> and <tt>uexp(10.0, 0.3, 2, 0.95) unit(cm)</tt> and <tt>ucov(10.0, 9.7, 10.3, 0.95, shortest) unit(cm)</tt>. <strong>Expected outcome.</strong> the three categories with their fields per PM 1002; the trailing units scoped to the whole quantities.</p>
</example>

<example id="_5e131a1c-176c-c2ad-a8e6-e2201796b2a8"><p id="_fa68ad0c-1d8e-7dcf-85f6-d54180cab35b"><tt>ucov(10.0, 9.7, 10.3, probabilistically-symmetric)</tt>. <strong>Expected outcome.</strong> the interval without probability, the full kind name — AsciiMath’s <tt>symmetric</tt> respelling does not exist here.</p>
</example>

<example id="_6b3ba8e3-c903-f6ce-36c8-28ed49b7ee8c"><p id="_47684b71-dd49-c77f-3eb2-6fed9f9517c5"><tt>diff(5 unit(degC))</tt>. <strong>Expected outcome.</strong> the difference-typed quantity; factor-only conversion to the kelvin difference per clause 12.</p>
</example>
</clause>

<clause id="_ee71ea91-7e7d-238f-2016-422a83fa27d3" obligation="normative">
<title id="_984f7f7d-1977-9800-07aa-ecb90b95166b">Literal vectors (class <tt>read-pma</tt>)</title>
<example id="_0efe2233-b3f5-f6f1-ca6c-f4b864d58380"><p id="_2d9e8f76-6ab1-03e1-19bd-2575539159a7">Every form of clause 8’s desugar table, read and compared to its desugar. <strong>Expected outcome.</strong> equal trees between each literal and its desugared constructor shape — the desugar is normative and tested.</p>
</example>

<example id="_90d33f9b-171f-0b38-7588-693afdf6fa45"><p id="_d5a87b10-d08e-53c8-2e6d-2655d1eededd"><tt>(10.3 +/- 2%) unit(m)</tt>. <strong>Expected outcome.</strong> the exact magnitude <tt>0.206</tt>; a percentage that produced an inexact decimal would refuse at materialisation instead.</p>
</example>

<example id="_752537d5-a888-9d0a-d79b-7bf7eaa0f829"><p id="_0f6f881d-8b60-2fd6-57dc-f21c2000647a"><tt>(3.85 +/- 0.23)e4 ~rect unit(m)</tt>. <strong>Expected outcome.</strong> one literal carrying both modifiers — the exponent shifted, the tag attached.</p>
</example>
</clause>

<clause id="_8da5b98b-0c03-ae96-ff7b-c6f753d990de" obligation="normative">
<title id="_21853f02-369d-f52e-ec14-0ea43b07a676">Refusal vectors (class <tt>read-pma</tt>)</title>
<example id="_2c8e71f4-9961-7158-d69f-dc3886693ac2"><p id="_c9518d01-255c-bc4e-1f76-ed90e06e5c6e">Every row of clause 8’s refusal table and clause 7’s refusal table. <strong>Expected outcome.</strong> the named error with its message shape — the strict error surface, one vector per rule.</p>
</example>

<example id="_cfde0941-a0d9-7ad5-6ada-b704b9146c70"><p id="_490f0135-e472-6870-3ff6-729a657b3e18"><tt>10.3(2)</tt>. <strong>Expected outcome.</strong> a parse error: the reporting form is not an input form of this notation (clause 10).</p>
</example>

<example id="_6ce9ca7e-a83c-6e76-5662-805ef421a63d"><p id="_ebe37cc3-f821-e190-61d3-0c56656f1ad2"><tt>3+-1</tt> inside a literal position. <strong>Expected outcome.</strong> a parse error naming the separator; the canonical <tt>+/-</tt> is one token and <tt>+-</tt> is not it.</p>
</example>
</clause>

<clause id="_969875b9-6d90-9ee2-8f06-75c9a5cc2f37" obligation="normative">
<title id="_dba2d3dc-4b78-46f6-48aa-be20fe34fc26">Assertion vectors (class <tt>read-pma</tt>)</title>
<example id="_0dfee93e-99dc-e89e-c657-dff7599a1a54"><p id="_54ea4baa-5783-e8ad-74ee-2ecf195d7c3c"><tt>unit(m)::length</tt> and <tt>unit(Bq)::activity</tt>. <strong>Expected outcome.</strong> recorded assertions — matched and defaulted-and-stated, both complete records.</p>
</example>

<example id="_0d63fb38-9f23-88d3-238c-84755434ea2a"><p id="_1b415d95-67d2-c9e5-be7e-3a6c6b2313ec"><tt>unit(Bq)::frequency</tt>. <strong>Expected outcome.</strong> the gating refusal naming the quantity conflict.</p>
</example>
</clause>

<clause id="_df79e265-5053-00a9-c39e-bccd07ffa3cf" obligation="normative">
<title id="_5af920bc-48f5-0189-fded-363840421853">Round-trip and cross-runtime vectors (classes <tt>roundtrip-pma</tt>, <tt>cross-runtime</tt>)</title>
<example id="_dedb6011-2d8c-c5e0-c964-9660c60dbf0e"><p id="_cad5d975-8559-6030-3c53-df754612253d">A tree carrying every constructor and literal form, written and read back. <strong>Expected outcome.</strong> an equal tree; the canonical form re-emitted byte-identically.</p>
</example>

<example id="_866863ab-d323-cddd-2d08-ba94d9d441f1"><p id="_a08a7119-969b-5def-3589-292730f82f3e">The shared corpora replayed on the TypeScript runtime against the Ruby reference. <strong>Expected outcome.</strong> byte-identical outputs — the cross-runtime claim, discharged.</p>
</example>
</clause>
</clause>


</sections><bibliography><references id="_ebc100db-cb91-2676-2bcc-587fa6a5622e" normative="true" obligation="informative">
<title id="_270c5ee6-077e-f285-ff95-287984a30140">Normative references</title><p id="_49996d2b-65c1-916b-9bbf-42b933aa0025">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.</p>


<bibitem anchor="pm1001" id="_aecd57cb-dc94-7da2-f679-fc8f2036d5be"><formattedref format="application/x-isodoc+xml">of this series.</formattedref><docidentifier>PM 1001 (math model)</docidentifier><docnumber>1001 (math model)</docnumber><language>en</language><script>Latn</script></bibitem>
<bibitem anchor="pm1002" id="_4372d755-90da-b1ee-9826-d2be76372fe2"><formattedref format="application/x-isodoc+xml">of this series.</formattedref><docidentifier>PM 1002 (uncertainty model)</docidentifier><docnumber>1002 (uncertainty model)</docnumber><language>en</language><script>Latn</script></bibitem>
<bibitem anchor="pm1003" id="_6d59302e-7ef4-8466-e39e-f8b469bce2d9"><formattedref format="application/x-isodoc+xml">of this series.</formattedref><docidentifier>PM 1003 (format interfaces)</docidentifier><docnumber>1003 (format interfaces)</docnumber><language>en</language><script>Latn</script></bibitem>
<bibitem anchor="pm1004" id="_7fd5db77-d3ec-d932-9e0c-a9c2908b18db"><formattedref format="application/x-isodoc+xml">of this series.</formattedref><docidentifier>PM 1004 (evaluation)</docidentifier><docnumber>1004 (evaluation)</docnumber><language>en</language><script>Latn</script></bibitem>
<bibitem anchor="pm1005" id="_827c27f8-8510-68cf-faba-523380c896ac"><formattedref format="application/x-isodoc+xml">of this series.</formattedref><docidentifier>PM 1005 (the AsciiMath notation)</docidentifier><docnumber>1005 (the AsciiMath notation)</docnumber><language>en</language><script>Latn</script></bibitem>
<bibitem anchor="cc36813" id="_2f329013-8cb2-77fe-d622-9acf9f09795a"><formattedref format="application/x-isodoc+xml">— the exact-decimal discipline of the values the literals carry.</formattedref><docidentifier>CalConnect 36813 (numeric contract)</docidentifier><docnumber>36813 (numeric contract)</docnumber><language>en</language><script>Latn</script></bibitem>
<bibitem anchor="cc36815" id="_d738802c-dc71-5e52-91eb-24fff7e288f4"><formattedref format="application/x-isodoc+xml">— the quantity kinds the assertions name.</formattedref><docidentifier>CalConnect 36815 (units model)</docidentifier><docnumber>36815 (units model)</docnumber><language>en</language><script>Latn</script></bibitem>
<bibitem anchor="cc36816" id="_e5598bca-d4db-d56d-3ea4-88c288d7fd78"><formattedref format="application/x-isodoc+xml">— the static semantics the assertions invoke.</formattedref><docidentifier>CalConnect 36816 (conversions)</docidentifier><docnumber>36816 (conversions)</docnumber><language>en</language><script>Latn</script></bibitem>
<bibitem anchor="cc36817" id="_ace34baa-6752-cdff-2703-1a90f62355da"><formattedref format="application/x-isodoc+xml">— the grammar inside <tt>unit(...)</tt>, and the artifact pattern of clause 13.</formattedref><docidentifier>CalConnect 36817 (asciiunits content language)</docidentifier><docnumber>36817 (asciiunits content language)</docnumber><language>en</language><script>Latn</script></bibitem>
<bibitem id="_92cf8756-c81b-562d-f1b8-04598ac5d608" type="standard" schema-version="v1.5.6" anchor="jcgm100">
  <fetched>2026-11-05</fetched>
  
<title language="en" script="Latn">Guide to the expression of uncertainty in measurement</title>

  
<title language="fr" script="Latn">Guide pour l’expression de l’incertitude de mesure</title>

  <uri language="en" script="Latn" type="citation">https://www.bipm.org/documents/20126/2071204/JCGM_100_2008_E.pdf/cb0ef43f-baa5-11cf-3f85-4dcd86f77bd6</uri>
  <uri language="fr" script="Latn" type="citation">https://www.bipm.org/documents/20126/2071204/JCGM_100_2008_F.pdf/53384399-1e6d-b598-dd17-2831a6b5b812</uri>
  <docidentifier language="en" script="Latn" type="BIPM" primary="true">JCGM 100:2008</docidentifier>
  <docidentifier language="fr" script="Latn" type="BIPM" primary="true">JCGM 100:2008</docidentifier>
  <docidentifier type="BIPM" primary="true">JCGM 100:2008</docidentifier>
  <docnumber>JCGM 100:2008</docnumber>
  <date type="published">
    <on>2008-09</on>
  </date>
  <contributor>
    <role type="publisher"/>
    <organization>
      
<name language="en" script="Latn">International Bureau of Weights and Measures</name>

      
<name language="fr" script="Latn">Bureau international des poids et mesures</name>

      <abbreviation language="fr" script="Latn">BIPM</abbreviation>
      <uri>www.bipm.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="publisher"/>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Organization for Standardization</name>

      
<name language="fr" script="Latn">Organisation internationale de normalisation</name>

      <abbreviation language="en" script="Latn">ISO</abbreviation>
      <uri>www.iso.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="publisher"/>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Electrotechnical Commission</name>

      
<name language="fr" script="Latn">Commission électrotechnique internationale</name>

      <abbreviation language="en" script="Latn">IEC</abbreviation>
      <uri>www.iec.ch</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Organization of Legal Metrology</name>

      
<name language="fr" script="Latn">Organisation Internationale de Métrologie Légale</name>

      <abbreviation language="fr" script="Latn">OIML</abbreviation>
      <uri>www.oiml.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Union of Pure and Applied Chemistry</name>

      
<name language="fr" script="Latn">Union internationale de chimie pure et appliquée</name>

      <abbreviation language="en" script="Latn">IUPAC</abbreviation>
      <uri>www.iupac.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Union of Pure and Applied Physics</name>

      
<name language="fr" script="Latn">Union internationale de physique pure et appliquée</name>

      <abbreviation language="en" script="Latn">IUPAP</abbreviation>
      <uri>www.iupap.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Federation of Clinical Chemistry and Laboratory Medicine</name>

      
<name language="fr" script="Latn">Fédération internationale de chimie clinique et de biologie moléculaire</name>

      <abbreviation language="en" script="Latn">IFCC</abbreviation>
      <uri>www.ifcc.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Laboratory Accreditation Cooperation</name>

      
<name language="fr" script="Latn">Coopération internationale d’accréditation des laboratoires</name>

      <abbreviation language="en" script="Latn">ILAC</abbreviation>
      <uri>www.ilac.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author">
      <description>committee</description>
    </role>
    <organization>
      
<name language="fr" script="Latn">Bureau international des poids et mesures</name>

      <subdivision>
        
<name language="en" script="Latn">Joint Committee for Guides in Metrology</name>

        
<name language="fr" script="Latn">Comité commun pour les guides en métrologie</name>

        <abbreviation>JCGM</abbreviation>
      </subdivision>
      <abbreviation language="fr" script="Latn">BIPM</abbreviation>
    </organization>
  </contributor>
  <edition>1</edition>
  <language>en</language>
  <language>fr</language>
  <script>Latn</script>
  <place>
    <city>Paris</city>
  </place>
</bibitem>
<bibitem id="_02b3dde3-7b62-b04b-dc6c-85c8bc20310b" type="standard" schema-version="v1.5.6" anchor="jcgm101">
  <fetched>2026-11-05</fetched>
  
<title language="en" script="Latn">Supplement 1 to the “Guide to the expression of uncertainty in measurement” — Propagation of distributions using a Monte Carlo method</title>

  
<title language="fr" script="Latn">Supplément 1 du “Guide pour l’expression de l’incertitude de mesure” — Propagation de distributions par une méthode de Monte Carlo</title>

  <uri language="en" script="Latn" type="citation">https://www.bipm.org/documents/20126/2071204/JCGM_101_2008_E.pdf/325dcaad-c15a-407c-1105-8b7f322d651c</uri>
  <docidentifier language="en" script="Latn" type="BIPM" primary="true">JCGM 101:2008</docidentifier>
  <docidentifier language="fr" script="Latn" type="BIPM" primary="true">JCGM 101:2008</docidentifier>
  <docidentifier type="BIPM" primary="true">JCGM 101:2008</docidentifier>
  <docnumber>JCGM 101:2008</docnumber>
  <date type="published">
    <on>2008</on>
  </date>
  <contributor>
    <role type="publisher"/>
    <organization>
      
<name language="en" script="Latn">International Bureau of Weights and Measures</name>

      
<name language="fr" script="Latn">Bureau international des poids et mesures</name>

      <abbreviation language="fr" script="Latn">BIPM</abbreviation>
      <uri>www.bipm.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <role type="publisher"/>
    <organization>
      
<name language="en" script="Latn">International Organization for Standardization</name>

      
<name language="fr" script="Latn">Organisation internationale de normalisation</name>

      <abbreviation language="en" script="Latn">ISO</abbreviation>
      <uri>www.iso.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <role type="publisher"/>
    <organization>
      
<name language="en" script="Latn">International Electrotechnical Commission</name>

      
<name language="fr" script="Latn">Commission électrotechnique internationale</name>

      <abbreviation language="en">IEC</abbreviation>
      <uri>www.iec.ch</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Organization of Legal Metrology</name>

      
<name language="fr" script="Latn">Organisation internationale de métrologie légale</name>

      <abbreviation language="fr" script="Latn">OIML</abbreviation>
      <uri>www.oiml.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Union of Pure and Applied Chemistry</name>

      
<name language="fr" script="Latn">Union internationale de chimie pure et appliquée</name>

      <abbreviation language="en" script="Latn">IUPAC</abbreviation>
      <uri>www.iupac.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Union of Pure and Applied Physics</name>

      
<name language="fr" script="Latn">Union internationale de physique pure et appliquée</name>

      <abbreviation language="en" script="Latn">IUPAP</abbreviation>
      <uri>www.iupap.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Federation of Clinical Chemistry and Laboratory Medicine</name>

      
<name language="fr" script="Latn">Fédération internationale de chimie clinique et de biologie moléculaire</name>

      <abbreviation language="en" script="Latn">IFCC</abbreviation>
      <uri>www.ifcc.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Laboratory Accreditation Cooperation</name>

      
<name language="fr" script="Latn">Coopération internationale d’accréditation des laboratoires</name>

      <abbreviation language="en" script="Latn">ILAC</abbreviation>
      <uri>www.ilac.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author">
      <description>committee</description>
    </role>
    <organization>
      
<name language="fr" script="Latn">Bureau international des poids et mesures</name>

      <subdivision>
        
<name language="en" script="Latn">Joint Committee for Guides in Metrology</name>

        
<name language="fr" script="Latn">Comité commun pour les Guides en métrologie</name>

        <abbreviation>JCGM</abbreviation>
      </subdivision>
      <abbreviation language="fr" script="Latn">BIPM</abbreviation>
    </organization>
  </contributor>
  <edition>1</edition>
  <language>en</language>
  <language>fr</language>
  <script>Latn</script>
  <place>
    <city>Paris</city>
  </place>
</bibitem>
</references><references id="_da5cc7d3-7503-5af7-ee3e-aa29b47d4109" normative="false" obligation="informative">
<title id="_50ceb1e1-516f-2673-d73d-4f0c58b4d023">Bibliography</title><bibitem anchor="plurimath-repo" id="_7f4a376c-24dc-0918-6b87-18b3d6d13554">
  <formattedref format="application/x-isodoc+xml">— <link target="https://github.com/plurimath/plurimath"/></formattedref>
  <docidentifier>Plurimath repository</docidentifier>
  <language>en</language>
  <script>Latn</script>
</bibitem><bibitem anchor="pm1001-b" id="_a81aaa39-736f-8487-8661-94d927a7b940">
  <formattedref format="application/x-isodoc+xml">of this series</formattedref>
  <docidentifier>PM 1001</docidentifier>
  <docnumber>1001</docnumber>
  <language>en</language>
  <script>Latn</script>
</bibitem><bibitem anchor="pm1002-b" id="_1974483f-6c87-d00a-07c8-05846633364d">
  <formattedref format="application/x-isodoc+xml">of this series</formattedref>
  <docidentifier>PM 1002</docidentifier>
  <docnumber>1002</docnumber>
  <language>en</language>
  <script>Latn</script>
</bibitem><bibitem anchor="pm1003-b" id="_74365254-f573-01a3-bfc7-5698478d4773">
  <formattedref format="application/x-isodoc+xml">of this series</formattedref>
  <docidentifier>PM 1003</docidentifier>
  <docnumber>1003</docnumber>
  <language>en</language>
  <script>Latn</script>
</bibitem><bibitem anchor="pm1004-b" id="_1e18416b-24d8-bc48-4a0e-4e26cad876d9">
  <formattedref format="application/x-isodoc+xml">of this series</formattedref>
  <docidentifier>PM 1004</docidentifier>
  <docnumber>1004</docnumber>
  <language>en</language>
  <script>Latn</script>
</bibitem><bibitem anchor="pm1005-b" id="_d7bafcac-f839-bcc9-b0c9-d7fa281bb9b0">
  <formattedref format="application/x-isodoc+xml">of this series</formattedref>
  <docidentifier>PM 1005</docidentifier>
  <docnumber>1005</docnumber>
  <language>en</language>
  <script>Latn</script>
</bibitem><bibitem anchor="cc36813-b" id="_67929b4e-20a2-45e7-a736-55bb89d778c2">
  <formattedref format="application/x-isodoc+xml">of the UnitsML series</formattedref>
  <docidentifier>CalConnect 36813</docidentifier>
  <docnumber>36813</docnumber>
  <language>en</language>
  <script>Latn</script>
</bibitem><bibitem anchor="cc36814-b" id="_50c52f7a-1a5f-4ee3-08a8-6ca7509d464c">
  <formattedref format="application/x-isodoc+xml">of the UnitsML series</formattedref>
  <docidentifier>CalConnect 36814</docidentifier>
  <docnumber>36814</docnumber>
  <language>en</language>
  <script>Latn</script>
</bibitem><bibitem anchor="cc36815-b" id="_d9e9acd5-fe7b-e2c0-544c-f493c40f6071">
  <formattedref format="application/x-isodoc+xml">of the UnitsML series</formattedref>
  <docidentifier>CalConnect 36815</docidentifier>
  <docnumber>36815</docnumber>
  <language>en</language>
  <script>Latn</script>
</bibitem><bibitem anchor="cc36816-b" id="_da4fcaea-123a-b42e-d000-97a153d15090">
  <formattedref format="application/x-isodoc+xml">of the UnitsML series</formattedref>
  <docidentifier>CalConnect 36816</docidentifier>
  <docnumber>36816</docnumber>
  <language>en</language>
  <script>Latn</script>
</bibitem><bibitem id="_b41f1723-893a-d11c-975a-6818473ca680" type="standard" schema-version="v1.5.6" anchor="jcgm100-b">
  <fetched>2026-11-05</fetched>
  
<title language="en" script="Latn">Guide to the expression of uncertainty in measurement</title>

  
<title language="fr" script="Latn">Guide pour l’expression de l’incertitude de mesure</title>

  <uri language="en" script="Latn" type="citation">https://www.bipm.org/documents/20126/2071204/JCGM_100_2008_E.pdf/cb0ef43f-baa5-11cf-3f85-4dcd86f77bd6</uri>
  <uri language="fr" script="Latn" type="citation">https://www.bipm.org/documents/20126/2071204/JCGM_100_2008_F.pdf/53384399-1e6d-b598-dd17-2831a6b5b812</uri>
  <docidentifier language="en" script="Latn" type="BIPM" primary="true">JCGM 100:2008</docidentifier>
  <docidentifier language="fr" script="Latn" type="BIPM" primary="true">JCGM 100:2008</docidentifier>
  <docidentifier type="BIPM" primary="true">JCGM 100:2008</docidentifier>
  <docnumber>JCGM 100:2008</docnumber>
  <date type="published">
    <on>2008-09</on>
  </date>
  <contributor>
    <role type="publisher"/>
    <organization>
      
<name language="en" script="Latn">International Bureau of Weights and Measures</name>

      
<name language="fr" script="Latn">Bureau international des poids et mesures</name>

      <abbreviation language="fr" script="Latn">BIPM</abbreviation>
      <uri>www.bipm.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="publisher"/>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Organization for Standardization</name>

      
<name language="fr" script="Latn">Organisation internationale de normalisation</name>

      <abbreviation language="en" script="Latn">ISO</abbreviation>
      <uri>www.iso.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="publisher"/>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Electrotechnical Commission</name>

      
<name language="fr" script="Latn">Commission électrotechnique internationale</name>

      <abbreviation language="en" script="Latn">IEC</abbreviation>
      <uri>www.iec.ch</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Organization of Legal Metrology</name>

      
<name language="fr" script="Latn">Organisation Internationale de Métrologie Légale</name>

      <abbreviation language="fr" script="Latn">OIML</abbreviation>
      <uri>www.oiml.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Union of Pure and Applied Chemistry</name>

      
<name language="fr" script="Latn">Union internationale de chimie pure et appliquée</name>

      <abbreviation language="en" script="Latn">IUPAC</abbreviation>
      <uri>www.iupac.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Union of Pure and Applied Physics</name>

      
<name language="fr" script="Latn">Union internationale de physique pure et appliquée</name>

      <abbreviation language="en" script="Latn">IUPAP</abbreviation>
      <uri>www.iupap.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Federation of Clinical Chemistry and Laboratory Medicine</name>

      
<name language="fr" script="Latn">Fédération internationale de chimie clinique et de biologie moléculaire</name>

      <abbreviation language="en" script="Latn">IFCC</abbreviation>
      <uri>www.ifcc.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Laboratory Accreditation Cooperation</name>

      
<name language="fr" script="Latn">Coopération internationale d’accréditation des laboratoires</name>

      <abbreviation language="en" script="Latn">ILAC</abbreviation>
      <uri>www.ilac.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author">
      <description>committee</description>
    </role>
    <organization>
      
<name language="fr" script="Latn">Bureau international des poids et mesures</name>

      <subdivision>
        
<name language="en" script="Latn">Joint Committee for Guides in Metrology</name>

        
<name language="fr" script="Latn">Comité commun pour les guides en métrologie</name>

        <abbreviation>JCGM</abbreviation>
      </subdivision>
      <abbreviation language="fr" script="Latn">BIPM</abbreviation>
    </organization>
  </contributor>
  <edition>1</edition>
  <language>en</language>
  <language>fr</language>
  <script>Latn</script>
  <place>
    <city>Paris</city>
  </place>
</bibitem><bibitem id="_6697f4c1-8f9b-6e5c-e9d6-737fd7b47933" type="standard" schema-version="v1.5.6" anchor="jcgm101-b">
  <fetched>2026-11-05</fetched>
  
<title language="en" script="Latn">Supplement 1 to the “Guide to the expression of uncertainty in measurement” — Propagation of distributions using a Monte Carlo method</title>

  
<title language="fr" script="Latn">Supplément 1 du “Guide pour l’expression de l’incertitude de mesure” — Propagation de distributions par une méthode de Monte Carlo</title>

  <uri language="en" script="Latn" type="citation">https://www.bipm.org/documents/20126/2071204/JCGM_101_2008_E.pdf/325dcaad-c15a-407c-1105-8b7f322d651c</uri>
  <docidentifier language="en" script="Latn" type="BIPM" primary="true">JCGM 101:2008</docidentifier>
  <docidentifier language="fr" script="Latn" type="BIPM" primary="true">JCGM 101:2008</docidentifier>
  <docidentifier type="BIPM" primary="true">JCGM 101:2008</docidentifier>
  <docnumber>JCGM 101:2008</docnumber>
  <date type="published">
    <on>2008</on>
  </date>
  <contributor>
    <role type="publisher"/>
    <organization>
      
<name language="en" script="Latn">International Bureau of Weights and Measures</name>

      
<name language="fr" script="Latn">Bureau international des poids et mesures</name>

      <abbreviation language="fr" script="Latn">BIPM</abbreviation>
      <uri>www.bipm.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <role type="publisher"/>
    <organization>
      
<name language="en" script="Latn">International Organization for Standardization</name>

      
<name language="fr" script="Latn">Organisation internationale de normalisation</name>

      <abbreviation language="en" script="Latn">ISO</abbreviation>
      <uri>www.iso.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <role type="publisher"/>
    <organization>
      
<name language="en" script="Latn">International Electrotechnical Commission</name>

      
<name language="fr" script="Latn">Commission électrotechnique internationale</name>

      <abbreviation language="en">IEC</abbreviation>
      <uri>www.iec.ch</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Organization of Legal Metrology</name>

      
<name language="fr" script="Latn">Organisation internationale de métrologie légale</name>

      <abbreviation language="fr" script="Latn">OIML</abbreviation>
      <uri>www.oiml.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Union of Pure and Applied Chemistry</name>

      
<name language="fr" script="Latn">Union internationale de chimie pure et appliquée</name>

      <abbreviation language="en" script="Latn">IUPAC</abbreviation>
      <uri>www.iupac.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Union of Pure and Applied Physics</name>

      
<name language="fr" script="Latn">Union internationale de physique pure et appliquée</name>

      <abbreviation language="en" script="Latn">IUPAP</abbreviation>
      <uri>www.iupap.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Federation of Clinical Chemistry and Laboratory Medicine</name>

      
<name language="fr" script="Latn">Fédération internationale de chimie clinique et de biologie moléculaire</name>

      <abbreviation language="en" script="Latn">IFCC</abbreviation>
      <uri>www.ifcc.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author"/>
    <organization>
      
<name language="en" script="Latn">International Laboratory Accreditation Cooperation</name>

      
<name language="fr" script="Latn">Coopération internationale d’accréditation des laboratoires</name>

      <abbreviation language="en" script="Latn">ILAC</abbreviation>
      <uri>www.ilac.org</uri>
    </organization>
  </contributor>
  <contributor>
    <role type="author">
      <description>committee</description>
    </role>
    <organization>
      
<name language="fr" script="Latn">Bureau international des poids et mesures</name>

      <subdivision>
        
<name language="en" script="Latn">Joint Committee for Guides in Metrology</name>

        
<name language="fr" script="Latn">Comité commun pour les Guides en métrologie</name>

        <abbreviation>JCGM</abbreviation>
      </subdivision>
      <abbreviation language="fr" script="Latn">BIPM</abbreviation>
    </organization>
  </contributor>
  <edition>1</edition>
  <language>en</language>
  <language>fr</language>
  <script>Latn</script>
  <place>
    <city>Paris</city>
  </place>
</bibitem><bibitem anchor="python-uncertainties" id="_816a3f8c-e90d-b00d-b0a2-421465f50c32">
  <formattedref format="application/x-isodoc+xml">(the <tt>+-</tt> precedent, Annex C)</formattedref>
  <docidentifier>Python <tt>uncertainties</tt> package documentation</docidentifier>
  <language>en</language>
  <script>Latn</script>
</bibitem><bibitem anchor="asciiunits-artifact" id="_0773f9e9-ff33-2ad0-8b7e-0648735e552a">
  <formattedref format="application/x-isodoc+xml">— the artifact pattern this notation’s grammar follows (CalConnect 36817)</formattedref>
  <docidentifier>asciiunits</docidentifier>
  <language>en</language>
  <script>Latn</script>
</bibitem>














</references></bibliography>
</metanorma>
