<?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 AsciiMath notation</title>
<docidentifier primary="true" type="Ribose">1005(d)</docidentifier><docnumber>1005</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="_fa1a29ec-3f07-4d7a-9e6d-7ba0bed66e59" obligation="informative">
<title id="_41c9fad3-d4c1-eecc-4fad-f91704acc026">Foreword</title>
<clause id="_71e2c5e7-6ccf-d1f0-aae7-3808352c9629" obligation="informative">
<title id="_e29a5469-67c9-90aa-f17a-63304bcec2bb">General</title>
<p id="_c8642d18-b3d6-54f3-a084-666957b1e713">This document is the fifth document of the Plurimath specifications series. It specifies the AsciiMath notation as Plurimath reads and writes it: the complete accepted surface — every token, construct, fence and channel — and the rules that turn linear text into the formula tree of PM 1001.</p>

<p id="_d8272dcf-8d58-cf25-ddcf-ced23a876bd8">AsciiMath is a linear format for mathematics: plain text, readable and writable without markup, with mathematics’ own conventions for precedence and grouping. Plurimath’s implementation has grown specifics of its own — the uncertainty forms, the UnitsML channel, localized readings — and this document states the whole surface as it is, grounded in the reader’s tables and pinned by the corpus. Where Plurimath’s AsciiMath differs from the asciimath.org public definition, this document says so in the compatibility notes of each clause; the notation specified here is Plurimath’s.</p>
</clause>

<clause id="_9f6846ff-d082-12df-8ae5-4ae7fd2cd359" obligation="informative">
<title id="_dff8ad12-da29-1635-d34a-86a12ce26e23">Documents in the series</title>
<table id="_979677be-5032-11b7-87ce-7001032b038f"><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="_ba093b65-d97c-844b-0188-b8661956834a"><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="_a0c9338e-58aa-600b-9912-3e94e1ce48c4" valign="top" align="left">This document: the complete AsciiMath surface</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="_ab4ffc3b-1672-8c06-aa1f-f009f7343d1b" obligation="informative">
<title id="_2b2e98d1-114a-3da4-8556-01ae0a724280">Introduction</title>
<p id="_d82d11a6-bc15-28f6-7bf1-42eb9eb94731">AsciiMath writes mathematics the way mathematicians type it: <stem block="false" type="MathML"><math xmlns="http://www.w3.org/1998/Math/MathML">
  <mstyle displaystyle="false">
    <mrow>
      <munderover>
        <mo>∑</mo>
        <mrow>
          <mi>i</mi>
          <mo>=</mo>
          <mn>1</mn>
        </mrow>
        <mi>n</mi>
      </munderover>
      <msup>
        <mi>i</mi>
        <mn>3</mn>
      </msup>
    </mrow>
    <mo>=</mo>
    <msup>
      <mrow>
        <mo>(</mo>
        <mfrac>
          <mrow>
            <mi>n</mi>
            <mrow>
              <mo>(</mo>
              <mi>n</mi>
              <mo>+</mo>
              <mn>1</mn>
              <mo>)</mo>
            </mrow>
          </mrow>
          <mn>2</mn>
        </mfrac>
        <mo>)</mo>
      </mrow>
      <mn>2</mn>
    </msup>
  </mstyle>
</math><asciimath>sum_(i=1)^n i^3 = ((n(n+1))/2)^2</asciimath></stem> is the sum of cubes, written with no markup at all — tokens for symbols, <tt>^</tt> and <tt>_</tt> for scripts, parentheses for grouping, <tt>/</tt> for fractions, and function names for the rest. The format’s genius is that its text is already unambiguous to a trained eye; the reader’s work is to make that reading mechanical.</p>

<p id="_47baebe9-440a-2771-5611-1fe4ffa0ff44">This document makes it mechanical. Every token the reader accepts is listed; every construct’s shape, precedence and yielded tree is stated; the fences — including the multi-character and letter-pair fences the implementation adds — are tabulated; the quoted-string channels are defined; the uncertainty forms of PM 1002 are given their reading rules; and the whole surface is pinned by a corpus that replays byte-identically, generation after generation.</p>

<p id="_6dce426a-2fc9-c06f-b59d-87af6f5d3cb5">The document is written to serve three readers at once: the implementer who needs the exact tables, the author who wants to know what they can write, and the tool builder deciding whether to accept or emit the notation. Each clause states its rules once, in the form the corpus tests.</p>

<example id="_59702005-fe4f-cb5c-ef82-f01acc9664b4"><p id="_1b4696df-309e-a80f-0b67-c560f31b619c"><tt>x^2 + y_1</tt> — two scripts and an addition. <strong>Expected outcome.</strong> a power of <tt>x</tt> to the <tt>Number</tt> 2, an addition symbol, and a base of <tt>y</tt> with subscript <tt>1</tt>: the shape PM 1001’s examples carry, read from nine characters of plain text.</p>
</example>

<clause id="_40355c28-0bf1-264c-63e7-0a6710b9aaff" obligation="informative">
<title id="_00be458e-f885-9764-45ef-a36d1afd55d7">What this document is not</title>
<p id="_a5cf8391-27f4-dab9-000f-c8340245b1b4">It is not a tutorial — the examples teach the rules, not the mathematics. It is not the pma notation (that document is separate), and it is not the history of the format — the compatibility notes carry exactly as much of that as the rules need. It is the notation as Plurimath implements it, stated so that a careful reader can predict the reader’s answer for any input before asking it.</p>
</clause>
</introduction></preface><sections>

<clause id="_303e64c1-b78f-a0db-c761-5a80073562e8" type="scope" obligation="normative">
<title id="_f70b6ff6-6131-0e24-81e1-850dbe94b63d">Scope</title>
<clause id="_0a434eda-d99c-efb4-a2e0-2a7a10ab2ebb" obligation="normative">
<title id="_917955c1-7e75-5fad-982e-70ebd4b7acee">General</title>
<p id="_9643b6a4-78fc-22b9-7f71-8020fda6ba5c">This document specifies the AsciiMath notation as implemented by Plurimath:</p>

<ul id="_ee44d414-e635-8cc1-dc3c-d44d19cc0a93"><li><p id="_51581395-df89-264c-d65a-f2d8747bcc9f">the token surface: symbols, numbers, function names, fonts, fences;</p>
</li>
<li><p id="_dd1d428c-5857-deed-bd5f-7b454518761f">the construct shapes: unary, binary, ternary and sub/sup classes, with their arguments;</p>
</li>
<li><p id="_69543c88-fc4a-b5a9-15e6-99913a5884b7">tables and their bracket forms;</p>
</li>
<li><p id="_e2bcf7a1-049a-1797-f8d3-9c95a2bef96f">scripts and fractions, with the precedence that joins them;</p>
</li>
<li><p id="_b4a3b6f8-9ca1-521e-c732-9bea0204a074">quoted strings and the UnitsML channel;</p>
</li>
<li><p id="_4604ca3b-2c79-5f96-b407-392daa0e3e48">the uncertainty forms of PM 1002 as they read and write in AsciiMath;</p>
</li>
<li><p id="_5d595d8b-e90f-3910-972a-5acae7f6f53f">precedence and grouping;</p>
</li>
<li><p id="_ccb3fd6d-9233-b6a6-e0da-b044ed9883b4">the reading algorithm and its errors;</p>
</li>
<li><p id="_a3067e45-e9f6-9fbc-7dd0-7503ad0e89dc">the corpus and conformance.</p>
</li>
</ul>

<p id="_ca88cff3-7e85-af5d-56ce-1e0690bb8a8d">This document does not specify: the other formats (PM 1003), the tree (PM 1001), the uncertainty model (PM 1002), evaluation (PM 1004), or the pma notation, which is its own document.</p>
</clause>

<clause id="_6c64d005-6651-26a7-57c3-4b9b960d922d" obligation="normative">
<title id="_c2e8613d-9c75-ab29-bedc-57271c2b7976">Relationship to the series</title>
<table id="_a1942376-3d12-0c11-b63b-fa71fc30f02d"><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="_ee2a5c37-2e34-0b02-e6b9-52d4732143e4"><td id="_dc4b6190-7e62-95ed-b1e0-9bee286387c5" valign="top" align="left">1001 Math model</td>
<td id="_f520a31a-920d-80d7-a4b5-0a69863f7e1f" valign="top" align="left">the tree this notation reads into and writes from</td>
</tr><tr id="_94f3d022-5906-af6e-0866-3ebcda1a4f28"><td id="_06e5e470-9c31-8467-a9e9-609b5a171127" valign="top" align="left">1002 Uncertainty model</td>
<td id="_c7b7d301-729a-c7df-fd2f-449ebf0fdf27" valign="top" align="left">the uncertainty forms this notation reads and writes</td>
</tr><tr id="_19ba069d-72e1-03d3-d917-63d75d1d7c54"><td id="_46f01dcf-409c-cfcc-a239-9cefe7f55a34" valign="top" align="left">1003 Format interfaces</td>
<td id="_a6dd7223-28ff-21ba-e5b5-ddeae0786331" valign="top" align="left">the reader and writer contracts this notation satisfies</td>
</tr><tr id="_d7ea942f-27c3-deab-b852-0382e984092e"><td id="_e726a05f-e060-64b1-d3a2-764c93c488d3" valign="top" align="left">1006 The pma notation</td>
<td id="_63a86070-4c36-3698-2599-380f08f5bbbd" valign="top" align="left">the featureful notation that shares this one’s registry</td>
</tr></tbody>
</table>
</clause>

<clause id="_30db4cb2-392c-6f0c-f81a-b06e6c6646cc" obligation="normative">
<title id="_1451c75f-b818-2492-feb1-c0abfe12d8db">Compatibility with asciimath.org</title>
<p id="_67e10096-2b11-8812-7186-92d93178ea56">Plurimath’s AsciiMath descends from the asciimath.org public definition and extends it. This document specifies Plurimath’s surface; where it extends or sharpens the public definition, the clause says so in a <strong>Compatibility note</strong>. The compatibility notes are informational; the rules are normative.</p>
</clause>

<clause id="_1eccf3a1-4a85-44d5-a173-b25c92f08516" obligation="normative">
<title id="_ddf7ef13-131e-488c-29e7-0a6adbf8e63e">Audience</title>
<p id="_0c30c1d7-3254-f103-27a8-43883f0ad910">Implementers of Plurimath and of other AsciiMath processors, authors writing AsciiMath, and tool builders.</p>
</clause>

<clause id="_a0de72dd-22f4-6275-2590-b08551b6e5aa" obligation="normative">
<title id="_59f76fbc-7a97-26da-4de8-6695e9d96a50">Extensions over the baseline, in one table</title>
<table id="_f006da6f-2f3b-c777-4379-15ff7611acfc"><colgroup><col width="28.5714%"/><col width="28.5714%"/><col width="42.8572%"/></colgroup>
<name id="_19087d60-a348-78c1-6b30-3921df3da3e7">The extensions this document adds to the asciimath.org baseline</name>
<thead><tr id="_40ab5798-1db6-845a-4f74-e5e340641781"><th id="_3617927e-399d-8931-1f26-0d6eb1652ca5" valign="top" align="left">Extension</th>
<th id="_f4298892-1f03-afb2-20c9-4f2e710d69f9" valign="top" align="left">Clause</th>
<th id="_0b531371-b3aa-6bfc-64e9-ab3adb55889e" valign="top" align="left">Shape</th>
</tr></thead>
<tbody><tr id="_34248c57-311c-ee07-171f-614c606a1e0d"><td id="_4b6ba96a-79e6-a6f7-bcf0-21af666fc527" valign="top" align="left">the uncertainty calls and the reporting form</td>
<td id="_ee5d2620-c49c-f5c2-9555-6a6a6f8f793c" valign="top" align="left">12</td>
<td id="_dda9b5f3-f8a7-26bd-eae7-949bcc01b74a" valign="top" align="left"><tt>ustd</tt>/<tt>uexp</tt>/<tt>ucov</tt>, <tt>v(digits)</tt></td>
</tr><tr id="_54fd0f65-1e30-6a9a-c7e6-54520c93a0f7"><td id="_7598d423-77a9-fe89-844b-59ca1cbcdee5" valign="top" align="left">the UnitsML channel</td>
<td id="_13c9c6f1-2f1c-6693-f777-64f2da7a4799" valign="top" align="left">11</td>
<td id="_c5215f9a-18a7-6f6e-0f58-820e7499a5a2" valign="top" align="left"><tt>"unitsml(…​)"</tt></td>
</tr><tr id="_b35bafd0-90e7-b03b-47d1-10e09b68de1c"><td id="_d509e753-c377-3b67-fe93-ea5b648cc477" valign="top" align="left">the special bold alphabets</td>
<td id="_9fd7c7d7-1ad8-7a0a-57f2-eb79dedcc9fc" valign="top" align="left">8</td>
<td id="_f1f53310-7009-26df-9331-dbf565cb1e48" valign="top" align="left"><tt>ZZ</tt> <tt>RR</tt> <tt>QQ</tt> <tt>NN</tt> <tt>CC</tt></td>
</tr><tr id="_e4faef23-8130-587b-73f2-d5728d949fec"><td id="_31ee427b-999c-e4be-98ba-442c1cc267ae" valign="top" align="left">the added font tokens</td>
<td id="_621e7622-3c59-85d9-321d-76c6c97eb150" valign="top" align="left">8</td>
<td id="_e74494b4-5ad6-2f01-782a-5960bd71c685" valign="top" align="left"><tt>rm</tt>, <tt>ii</tt></td>
</tr><tr id="_d286e856-6872-098d-a4a5-736acc28a73c"><td id="_3232bdac-ab82-916f-b361-4774439252fc" valign="top" align="left">the added fences</td>
<td id="_6b5ff6b3-5163-a7e4-0117-4f5cb772867b" valign="top" align="left">Annex C</td>
<td id="_009eba8f-194e-39b0-c920-940b7ed7e37a" valign="top" align="left"><tt>ᑕ</tt>/<tt>ᑐ</tt>, <tt>ℒ</tt>/<tt>ℛ</tt></td>
</tr><tr id="_8db29a1f-a1d6-4e75-46ac-33c564b757e7"><td id="_750b46e1-0351-649a-e3b2-4eb3ee493567" valign="top" align="left">the added symbols</td>
<td id="_4a038f15-95e2-8d2a-1fe2-04cc3eba8123" valign="top" align="left">6</td>
<td id="_0e8d0463-164d-a89a-c806-54a47919320d" valign="top" align="left">per the registry’s superset</td>
</tr><tr id="_4f959ab2-337d-4482-a099-b3e8968f5deb"><td id="_478ea9ca-59c9-a9c5-4a20-e2db9c758812" valign="top" align="left">shared-exponent reporting</td>
<td id="_5e72ba2b-1b92-2135-962b-aa085276f210" valign="top" align="left">12</td>
<td id="_04a39194-1bf5-8d8b-e440-dda77a161470" valign="top" align="left">the concise shift form</td>
</tr></tbody>
</table>

<p id="_4dad28ef-ca80-414a-8c55-f41cf638db39">Everything else in this document is the baseline as Plurimath reads it — sharpened, tabulated and pinned, but not changed.</p>
</clause>
</clause>



<terms id="_b651d646-a19b-5bb4-b22f-6514b426ca69" 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="_8aa8082e-f110-685c-b1db-64e5a04f9cd2" anchor="term-token"><preferred><expression>
<name>token</name>
</expression>
</preferred>
<definition id="_1fad1066-dca9-7502-d344-bd52c21cc28c"><verbal-definition id="_dd4db08c-0932-a643-212e-8e1911521cb0"><p id="_868a8092-fbb6-af43-dded-e2c965c35248">a maximal lexical unit of AsciiMath input: a symbol token, a number, a function or font name, a fence, or a structure character</p></verbal-definition></definition>
 </term>

<term id="_1b9791be-3b0c-08df-e82b-4fbf9586a02a" anchor="term-symbol"><preferred><expression>
<name>symbol</name>
</expression>
</preferred>
<definition id="_ae662d70-2ff3-c6f8-f46d-9b38b2348597"><verbal-definition id="_4010a337-fafc-e8f6-5476-413f1ce9bd26"><p id="_4682985b-2253-4a61-320a-3ca93028b1c2">a registry entry’s AsciiMath token: <tt>alpha</tt>, <tt>sum</tt>, <tt>infty</tt>, and the rest of the symbol space</p></verbal-definition></definition>
 </term>

<term id="_86c7d663-dd2a-c565-f807-dad6303766de" anchor="term-unary-class"><preferred><expression>
<name>unary class</name>
</expression>
</preferred>
<definition id="_62f5b08b-929a-dc08-6a8e-86a4d36e39eb"><verbal-definition id="_ee55c732-db33-ed3a-3932-f2b2f756e2c4"><p id="_0376a203-e261-85fb-04a8-77318b53e33e">a construct taking one operand, written <tt>name(x)</tt> or <tt>name x</tt>: the list of clause 8</p></verbal-definition></definition>
 </term>

<term id="_3c4cab1f-cbcc-6770-232a-eddca77870ec" anchor="term-binary-class"><preferred><expression>
<name>binary class</name>
</expression>
</preferred>
<definition id="_ba417344-1747-c03a-ebf7-1e47d977f0b8"><verbal-definition id="_c7163586-f63f-1a1c-4dd2-c64245e736e5"><p id="_d0b636a2-cf1f-3b19-0f31-802fbf522646">a construct taking two operands: <tt>frac</tt>, <tt>root</tt>, <tt>underset</tt>, <tt>overset</tt>, <tt>stackrel</tt></p></verbal-definition></definition>
 </term>

<term id="_14efd795-7226-d47b-4a81-df07f8c47ff2" anchor="term-ternary-class"><preferred><expression>
<name>ternary class</name>
</expression>
</preferred>
<definition id="_720ca9be-bb28-c433-10bf-190cc0ec05e5"><verbal-definition id="_a480c045-a43f-deaa-6576-3f0e25d6f95c"><p id="_c13d55bd-7f5f-c8c7-34fe-34e63e9bbcde">a construct taking an operand and both scripts: <tt>sum</tt>, <tt>prod</tt>, <tt>int</tt>, <tt>oint</tt></p></verbal-definition></definition>
 </term>

<term id="_aefe9d66-3989-ab62-b517-9fae5c2aae91" anchor="term-sub_sup-class"><preferred><expression>
<name>sub/sup class</name>
</expression>
</preferred>
<definition id="_83365813-bfb0-d98b-04a3-79b933f356c5"><verbal-definition id="_090adc12-8ae8-6a70-ac82-83f767cba715"><p id="_27044e5d-16b6-eb75-8e52-abf91a63bff8">a construct taking an operand and optional sub or superscript: <tt>lim</tt>, <tt>log</tt></p></verbal-definition></definition>
 </term>

<term id="_699c3e14-f198-3181-b10f-446c1ea60eb2" anchor="term-font-style-name"><preferred><expression>
<name>font style name</name>
</expression>
</preferred>
<definition id="_cd40981f-cd24-8410-3504-e604b772c4cd"><verbal-definition id="_022b3dbb-21fb-7028-3fdb-4c5cd81299cf"><p id="_ec21d76e-6d62-3499-affb-a55530125636">a token applying a font variant to its operand: the list of clause 8</p></verbal-definition></definition>
 </term>

<term id="_ee3b6681-c9ce-6664-5d19-9b9e3a838632" anchor="term-fence"><preferred><expression>
<name>fence</name>
</expression>
</preferred>
<definition id="_e27dfd3b-edad-86a8-6dee-3dcb468b4108"><verbal-definition id="_fb701ce8-1a6f-9293-d53e-95d0a9ba1920"><p id="_9eaa18c5-92ca-d81f-6718-8c85d7e74871">a token pair delimiting content: the parenthesis table of Annex C, including the multi-character and letter-pair fences</p></verbal-definition></definition>
 </term>

<term id="_c4c8d3b7-6866-7eb4-0ed7-62799baf88ad" anchor="term-structure-character"><preferred><expression>
<name>structure character</name>
</expression>
</preferred>
<definition id="_7db1fe5f-a8af-e564-ee5c-26284056cd5f"><verbal-definition id="_4bb2c2cf-8aac-1d9a-1153-548a9475c02b"><p id="_ec1dfeba-6b32-f816-f677-112a5b9a6101">one of <tt>^</tt>, <tt>_</tt>, <tt>/</tt>, <tt>@</tt>, and the grouping parentheses</p></verbal-definition></definition>
 </term>

<term id="_b6c0e97d-fda1-f8a0-678c-7a8203bdbcff" anchor="term-quoted-string"><preferred><expression>
<name>quoted string</name>
</expression>
</preferred>
<definition id="_784a9c83-d5d3-4caf-e6d9-f253cf83f0b5"><verbal-definition id="_6fc08e2a-b909-af32-1d9d-34268daed290"><p id="_dc6ef40e-d086-92c8-d5c5-1c9b3c75c887">double-quoted content read verbatim, with the UnitsML channel as its one special case</p></verbal-definition></definition>
 </term>

<term id="_6886edeb-df35-306a-4617-db841279fbaf" anchor="term-channel"><preferred><expression>
<name>channel</name>
</expression>
</preferred>
<definition id="_1be0f2a0-a993-3263-aff6-d53fe4566b0b"><verbal-definition id="_be3709f8-bec9-86b2-adc2-ec6bcff2b3f2"><p id="_78a0a18d-2d60-fd8c-fdda-225da3d143d0">the quoted string form <tt>"unitsml(…​)"</tt> carrying a unit expression</p></verbal-definition></definition>
 </term>

<term id="_9cfa267b-586c-d8bb-153e-2445c4034f50" anchor="term-reporting-form"><preferred><expression>
<name>reporting form</name>
</expression>
</preferred>
<definition id="_1ceb11d5-1920-0bc0-c982-7cbc2ccfe46c"><verbal-definition id="_726a5097-f08a-0f34-82b6-17a5f9397c5f"><p id="_e46c087e-24ec-d8e8-4ebb-43b4fce1bbc2">the concise uncertainty shape <tt>v(digits)</tt>, read per PM 1002</p></verbal-definition></definition>
 </term>

<term id="_9d59ca8f-9afe-4134-dce5-0f1bd1e00b7c" anchor="term-corpus"><preferred><expression>
<name>corpus</name>
</expression>
</preferred>
<definition id="_742d8233-69b2-b82b-a0bc-35570b52ee75"><verbal-definition id="_a625844f-a9ee-5b3f-9023-d2e08165a0da"><p id="_9f94532d-2817-e8dd-329f-ff825a627040">the pinned AsciiMath corpus this document’s claims replay, with its generations</p></verbal-definition></definition>
 </term>

<term id="_7ad00508-a084-1411-fbea-cf25a4f0c0c8" anchor="term-canonical-token"><preferred><expression>
<name>canonical token</name>
</expression>
</preferred>
<definition id="_d835eb85-f587-3c19-e266-d510f6597f8e"><verbal-definition id="_0013c361-94bb-7862-900b-462254b20a1d"><p id="_84615a02-934a-a0c8-90f3-004f4aeb6392">the registry entry’s primary AsciiMath spelling; the token the writer emits</p></verbal-definition></definition>
 </term>

<term id="_14def31e-287a-d5d5-fb70-5ddc2331ff90" anchor="term-longest-match"><preferred><expression>
<name>longest match</name>
</expression>
</preferred>
<definition id="_fdb529b3-b90a-a7fe-392f-347b9595f6f4"><verbal-definition id="_12f8286d-ff59-6eae-a809-6d4041e6929f"><p id="_e6f3dc52-387f-1931-9f6e-389951cb26ca">the tokeniser’s rule that the longest vocabulary entry at a position wins</p></verbal-definition></definition>
 </term>

<term id="_44b54fcd-73ab-5fee-2eef-6c54e5483a17" anchor="term-open-stack"><preferred><expression>
<name>open stack</name>
</expression>
</preferred>
<definition id="_3a9ee2a2-d2dc-b5b1-cd5f-fe96c371d0b9"><verbal-definition id="_30734ed2-8d59-73ca-f68d-35c127f66da8"><p id="_f6dfee9f-b8cd-b757-83fe-7d0ef44e34b5">the reader’s record of unclosed fence openers, matched by opener identity</p></verbal-definition></definition>
 </term>

<term id="_abcc0e10-f293-e94a-f905-18e1f58dfd9b" anchor="term-generation"><preferred><expression>
<name>generation</name>
</expression>
</preferred>
<definition id="_ca3147fd-fe60-5100-663b-e65d674162e8"><verbal-definition id="_e9c6000b-e6ea-c552-8183-57843ec5a0bf"><p id="_11d6ca6d-7e0a-dd7f-6108-2c4a40ea41bc">a published, immutable version set of the corpus; claims name the generation they were checked against</p></verbal-definition></definition>
 </term>
</terms>

<clause id="_ac143f06-109c-6beb-25cc-6cb0d9de5a9d" obligation="normative">
<title id="_577f0878-cbad-249b-c576-b43a5f664bb6">Conventions</title>
<clause id="_efb88faf-f22e-c8f4-14c5-0f32c5cdfc92" obligation="normative">
<title id="_53d82e48-1024-e16a-9901-40ceda1ab9b0">General</title>
<p id="_71deb2f1-d541-e57b-579d-41a0ac0c5451">Input text is shown verbatim between backticks; trees are shown in the math-zone notation of PM 1001. Tokens are the reader’s lexical units; this document writes them exactly as accepted.</p>
</clause>

<clause id="_987a6dff-540a-cd7e-f97f-f21074886511" obligation="normative">
<title id="_e9f19607-0eba-c5f0-206e-d25ce63aee52">Examples</title>
<p id="_9a7ecaf6-a162-6cc9-7ff8-d546c633c51d">Examples carry an <strong>Expected outcome</strong> paragraph. Where an example names a tree, the outcome names the node classes; where it names an error, the outcome names the error of PM 1003’s Annex A.</p>
</clause>

<clause id="_d7261e20-e4c7-2cae-a2a1-47cec4b5925b" obligation="normative">
<title id="_89ab80eb-e3e0-e786-365b-534ad89bf67e">Compatibility notes</title>
<p id="_f4043d18-1cda-71a1-2025-12ffdb4009ca">Paragraphs beginning <strong>Compatibility note</strong> compare this surface with the asciimath.org baseline. They are informational; the rules of the clause are normative regardless.</p>
</clause>

<clause id="_980697fc-7c9e-ce36-6a5f-2e5554fa3507" obligation="normative">
<title id="_166be2a7-bc23-5e6c-1b6e-91d514d4459a">Tables</title>
<p id="_5e10e75f-b400-5fbf-f2db-50fd65d111ef">The tables of clauses 6 to 12 and the annexes are generated from the reader’s constants, and a mismatch between a table here and the constants fails the build of this document. The tables are the surface.</p>
</clause>

<clause id="_58ff090c-035f-f998-f8d7-1a57be18bb12" obligation="normative">
<title id="_42ec525d-2225-7505-96bd-601437a3f7d1">The generated tables</title>
<p id="_7ef8a048-69c4-b006-2f12-73678487766b">The tables of clauses 6 to 12 and Annexes A to D are generated from the reader’s constants and the registry at build time of this document. An edit to the constants that a table here does not reflect fails the build; the tables and the implementation cannot drift apart silently. Edition 1’s tables were generated from the 0.11 series implementation.</p>
</clause>
</clause>

<clause id="_a1e129e4-e6a1-cb8b-4a94-18b27ee96da3" obligation="normative">
<title id="_5a171aed-8535-96f9-6f07-5b717de318cd">Notation overview</title>
<clause id="_1ef3d59a-6f41-7270-54ed-91976cd47b7b" obligation="normative">
<title id="_0af58ae5-954a-d036-13e4-d644df0b81ae">The shape of the language</title>
<p id="_e7cd4beb-6f71-7e7d-0b36-10c10b9ab90d">AsciiMath input is a sequence of tokens. Tokens come from four sources: the symbol space (clause 6), the construct names (clause 8), the structure characters (<tt>^</tt>, <tt>_</tt>, <tt>/</tt>, <tt>@</tt>, parentheses), and quoted strings (clause 11). Whitespace separates tokens and never means anything by itself.</p>

<example id="_a8fec406-9040-e0ae-f8e3-4ab20e28620a"><p id="_cb1804c7-bc27-c930-c0cb-ef6504f26da6"><tt>sum_(i=1)^n i^3</tt> <strong>Expected outcome.</strong> five token groups: the ternary class <tt>sum</tt> with its <tt>_</tt>/<tt>^</tt> scripts, and the operand <tt>i^3</tt>. Whitespace between the <tt>^n</tt> and the <tt>i^3</tt> ends the nary’s upper script and starts the summand.</p>
</example>
</clause>

<clause id="_9fe2f513-c722-f666-e00f-8bddc6da665e" obligation="normative">
<title id="_c03021f2-99c1-64e3-4cda-2c69b9d7167f">A linear format</title>
<p id="_d9f9f5e5-f254-0324-5631-7ad08b8d3312">The notation is linear: no environments, no begin/end pairs, no markup beyond the construct parentheses. Everything is characters. The fences pair by the table of Annex C — including the pairs the public definition lacks and Plurimath adds: the letter-pair fences <tt>(:</tt> and <tt>:)</tt> for angle-bracket content and the single-letter Unicode fences.</p>
</clause>

<clause id="_cead072a-ce71-04ef-b662-ac1033713c8a" obligation="normative">
<title id="_858e0f52-d5cb-5bb6-9aa0-503d27cee60f">What a reading yields</title>
<p id="_e3e796c3-5457-6e25-85ca-76082fefc75b">A reading yields one formula tree per PM 1001: node classes with operands in class order, symbols resolved through the registry, uncertainty nodes constructed through PM 1002’s validation. The tree carries nothing about the notation — the same tree can be written from pma, MathML or OMML (PM 1003).</p>
</clause>

<clause id="_d3c4e70a-2fe0-d3ff-98af-7fba5f8a1217" obligation="normative">
<title id="_3248ffc0-796b-6c96-0a40-8ef466cf8594">The reader’s promises</title>
<p id="_8dd30ea3-63a9-c7d1-ee55-e4703e1cbd5a">The reader of this notation (PM 1003, clause 8) is total on this surface: every text built from the constructs of this document reads; everything else is a typed error. The corpus of clause 15 pins both directions.</p>
</clause>

<clause id="_74e85c0c-72f7-33fa-e40b-a0fbc8b0b9b3" obligation="normative">
<title id="_3f488c31-9257-5cee-7364-051af35b31e8">A first reading, token by token</title>
<p id="_5dea558a-38fd-871e-042e-816c17b92cfc">The sum of cubes, <stem block="false" type="MathML"><math xmlns="http://www.w3.org/1998/Math/MathML">
  <mstyle displaystyle="false">
    <mrow>
      <munderover>
        <mo>∑</mo>
        <mrow>
          <mi>i</mi>
          <mo>=</mo>
          <mn>1</mn>
        </mrow>
        <mi>n</mi>
      </munderover>
      <msup>
        <mi>i</mi>
        <mn>3</mn>
      </msup>
    </mrow>
    <mo>=</mo>
    <msup>
      <mrow>
        <mo>(</mo>
        <mfrac>
          <mrow>
            <mi>n</mi>
            <mrow>
              <mo>(</mo>
              <mi>n</mi>
              <mo>+</mo>
              <mn>1</mn>
              <mo>)</mo>
            </mrow>
          </mrow>
          <mn>2</mn>
        </mfrac>
        <mo>)</mo>
      </mrow>
      <mn>2</mn>
    </msup>
  </mstyle>
</math><asciimath>sum_(i=1)^n i^3 = ((n(n+1))/2)^2</asciimath></stem>, as the reader sees it:</p>

<ol id="_18fdd2c1-90de-319a-46e5-20c2b66e6740" type="arabic"><li><p id="_fb2a32d1-ccf7-e7f5-880f-87a661f3c2b0"><tt>sum</tt> — the ternary token; its scripts follow;</p>
</li>
<li><p id="_bcca4608-25e4-5564-1d7d-13e3907e1728"><tt>_(i=1)</tt> — the lower limit: an index definition <tt>i = 1</tt> (evaluation reads it per PM 1004; the tree carries the limit as written);</p>
</li>
<li><p id="_8ca795b5-9510-eb2d-9a10-f2d65ba6c682"><tt>^n</tt> — the upper limit: the name <tt>n</tt>;</p>
</li>
<li><p id="_c442c2c1-ed35-5a83-f59b-ed4522c877c2"><tt>i^3</tt> — the summand: a power;</p>
</li>
<li><p id="_2d5434dc-68d3-0a18-9336-7eeab9082852"><tt>=</tt> — the relation symbol;</p>
</li>
<li><p id="_e3f78e5a-9380-c020-a485-64876402e7dc"><stem block="false" type="MathML"><math xmlns="http://www.w3.org/1998/Math/MathML">
  <mstyle displaystyle="false">
    <msup>
      <mrow>
        <mo>(</mo>
        <mfrac>
          <mrow>
            <mi>n</mi>
            <mrow>
              <mo>(</mo>
              <mi>n</mi>
              <mo>+</mo>
              <mn>1</mn>
              <mo>)</mo>
            </mrow>
          </mrow>
          <mn>2</mn>
        </mfrac>
        <mo>)</mo>
      </mrow>
      <mn>2</mn>
    </msup>
  </mstyle>
</math><asciimath>((n(n+1))/2)^2</asciimath></stem> — the right side: a power over a fenced fraction — the inner fence holds the product <tt>n(n+1)</tt>, the fraction takes the fence and the <tt>2</tt>, the outer fence groups the fraction, and <tt>^2</tt> scripts it all.</p>
</li>
</ol>

<p id="_4b1fc839-790e-6284-cca7-fda6a0baf800"><strong>Expected outcome.</strong> one relation between a limited nary and a scripted fraction — the tree PM 1001’s introduction carries, read from characters a mathematician typed without thinking about markup.</p>
</clause>

<clause id="_659b6b6e-f8ce-f2d7-7ab3-a843ced19d06" obligation="normative">
<title id="_41db52ac-cb90-5752-be08-e5af48c943d7">The three extensions over the baseline</title>
<p id="_323add82-a59a-9d57-3e2c-dd17db782f8f">Everything in this document that the asciimath.org baseline lacks is one of three extensions, each with its clause: the uncertainty forms (clause 12), the UnitsML channel (clause 11), and the added tokens and fences (clauses 6 and 8, noted per case). The baseline itself — its symbols, constructs, precedence and fences — reads unchanged.</p>
</clause>

<clause id="_767faefe-f42a-6c78-2c14-8546ca690520" obligation="normative">
<title id="_f95b3521-916d-b252-95e0-b1b08930204f">Whitespace</title>
<p id="_5bb6acd5-cab3-6f98-17d8-9992a5d26ba5">Whitespace between tokens is a separator and nothing else: it ends attachments (clause 13) and never creates content. Inside construct argument groups, the argument’s own grammar governs. Inside quoted strings, spaces are content verbatim. The reader normalises nothing about the input’s spacing — <tt>input_string</tt> keeps it — but the tree records structure only.</p>
</clause>

<clause id="_2a4c8d1a-0a91-0ec8-082f-5f1d28fb159f" obligation="normative">
<title id="_4689b91b-4485-dbc8-49f8-a7844afba810">Two readings of one habit</title>
<p id="_fa09c209-ea71-8c46-c761-53a5de3d70cf">Mathematicians write <tt>sin 2x</tt> meaning <tt>sin(2x)</tt>. The notation reads <tt>sin(2) · x</tt> (clause 13’s ruling). The gap between habit and ruling is not a defect to patch with a smarter reader; it is the reason grouping exists, and every AsciiMath author learns it once. The ruling is old, public, and pinned by the corpus — this document states it rather than relitigates it.</p>
</clause>

<clause id="_61261477-35c9-3b8d-4649-b0d513e1918d" obligation="normative">
<title id="_2b1f628b-68d6-63a7-9e88-fed7211bdc74">The whitespace rules, in one table</title>
<table id="_bf283684-1915-f190-42cb-633c893ea61d"><colgroup><col width="33.3333%"/><col width="66.6667%"/></colgroup>
<name id="_fc0b1240-1c3f-6a5e-01f7-8da033a5264c">Whitespace behaviour</name>
<thead><tr id="_bde60afb-254a-9b2e-d01b-5e40103c0142"><th id="_ccb1988d-85a4-35b5-7b01-60d83477e5a0" valign="top" align="left">Position</th>
<th id="_1f420df1-9bf8-36db-bf26-cf15b9e94956" valign="top" align="left">Effect</th>
</tr></thead>
<tbody><tr id="_6ba1c34e-789d-a2da-157d-4e8ad317eedc"><td id="_6369b3d7-29bd-8cee-f6f1-f5d82d264297" valign="top" align="left">between tokens</td>
<td id="_fe856479-e722-e827-f9ac-75fbea655f31" valign="top" align="left">separator; ends script and argument attachments</td>
</tr><tr id="_cf43e29e-2e42-0e09-a45a-e2f16bf04058"><td id="_72206968-b12b-0fbe-5a41-25a4ab317ea0" valign="top" align="left">inside a construct’s argument group</td>
<td id="_721851ca-81a1-64a9-24c2-38690b165c20" valign="top" align="left">content spacing; the argument grammar governs</td>
</tr><tr id="_78ebb02c-185a-365d-974e-2d994099b821"><td id="_1461943b-3415-bd32-5cd4-44b520de30f5" valign="top" align="left">inside quoted strings</td>
<td id="_c12d6ffe-7cf4-9f90-fdfd-3aafe4bbe350" valign="top" align="left">content, verbatim</td>
</tr><tr id="_29324c66-8274-9510-b915-dae6360cbf3b"><td id="_e2975ad0-0b8e-d9f1-7f64-82e1dd2f8122" valign="top" align="left">leading and trailing on the input</td>
<td id="_04cf62c0-6374-5ced-4b84-d6e779e0be15" valign="top" align="left">insignificant; trimmed before tokenising</td>
</tr><tr id="_6b936dc6-3fe7-261c-d1ec-2e7ace55f42e"><td id="_2fbe0d14-0c86-dd30-49ea-935d5272cc51" valign="top" align="left">inside a number or token</td>
<td id="_f41180ce-b99b-55b8-52f4-99996a1909a1" valign="top" align="left">impossible — a token never contains space</td>
</tr></tbody>
</table>
</clause>

<clause id="_2492ce52-1d83-6e43-24a4-050a11100917" obligation="normative">
<title id="_fd198317-e44e-951c-97a3-f67098885ec4">Reading across the series</title>
<p id="_5ae1855b-aa53-9c63-8b2a-2ff3be1ace32">An AsciiMath tree is a PM 1001 tree: PM 1002’s uncertainty forms read to validated nodes, PM 1003’s reader contract wraps this reader, PM 1004’s evaluator consumes what the tree denotes, and the writer of clause 16 emits PM 1001’s AsciiMath surface. This document is the notation; the series is the system.</p>
</clause>
</clause>

<definitions id="_4455f000-f2bb-705f-d775-c5ddab0a4462" type="symbols" obligation="normative">
<title id="_7101fc80-070c-b034-f6e2-579acde55faf">Symbols</title>
<definitions id="_9f066cba-0781-fd60-784b-444231ffb68d" obligation="normative">
<title id="_397617da-06d1-8b58-c1ea-a61da93222af">The symbol surface</title>
<p id="_537a89f3-7a90-dc39-a537-cc9e90571e68">The symbol tokens are the registry’s AsciiMath tokens (PM 1001’s symbol space, 1 438 entries at edition 1). A symbol token reads to its registry entry’s <tt>Symbol</tt> node and nothing else: no arguments, no variants. The families:</p>

<table id="_b78bca49-606e-589d-e8e9-3cf0ee6be459"><colgroup><col width="33.3333%"/><col width="66.6667%"/></colgroup>
<name id="_ba46c57a-9d62-744f-c046-ebade0822b0f">Symbol families</name>
<thead><tr id="_92543e23-21b5-664e-b4da-499b0794a468"><th id="_00bc824e-9856-be35-8b4c-824b6a832f8e" valign="top" align="left">Family</th>
<th id="_5d25f768-777d-1ebd-56c0-b842db5b374c" valign="top" align="left">Representative tokens</th>
</tr></thead>
<tbody><tr id="_50e2cde6-8815-18a2-61ad-1eff3e066344"><td id="_fa11c502-61e9-15a1-9b4c-f112342c3f8c" valign="top" align="left">Greek lower</td>
<td id="_f4cc9190-1ec8-9bda-8ea9-954d95dc87a5" valign="top" align="left"><tt>alpha</tt> <tt>beta</tt> <tt>gamma</tt> <tt>delta</tt> <tt>epsilon</tt> <tt>zeta</tt> <tt>eta</tt> <tt>theta</tt> <tt>iota</tt> <tt>kappa</tt> <tt>lambda</tt> <tt>mu</tt> <tt>nu</tt> <tt>xi</tt> <tt>pi</tt> <tt>rho</tt> <tt>sigma</tt> <tt>tau</tt> <tt>upsilon</tt> <tt>phi</tt> <tt>chi</tt> <tt>psi</tt> <tt>omega</tt></td>
</tr><tr id="_aadf6e78-a961-fe1e-a7dc-229eaf68357e"><td id="_edf6a0d8-56d6-3ccd-4e70-10cf9f0d14f8" valign="top" align="left">Greek upper</td>
<td id="_1fc20c2e-5481-6916-1502-667e513517de" valign="top" align="left"><tt>Alpha</tt> <tt>Beta</tt> <tt>Gamma</tt> <tt>Delta</tt> <tt>Theta</tt> <tt>Lambda</tt> <tt>Xi</tt> <tt>Pi</tt> <tt>Sigma</tt> <tt>Upsilon</tt> <tt>Phi</tt> <tt>Psi</tt> <tt>Omega</tt></td>
</tr><tr id="_ff59b8f4-84e8-f60d-b587-803b94b44a3b"><td id="_c40e1dc6-4350-c38a-79d5-5eab61a5dee5" valign="top" align="left">binary operators</td>
<td id="_eb0b61a0-5d40-ffe9-a2ac-56e49146fe5f" valign="top" align="left"><tt>+</tt> <tt>-</tt> <tt>*</tt> <tt>**</tt> <tt>times</tt> <tt>div</tt> <tt>pm</tt> <tt>mp</tt> <tt>cdot</tt> <tt>ast</tt> <tt>star</tt> <tt>circ</tt> <tt>bullet</tt> <tt>oplus</tt> <tt>ominus</tt> <tt>otimes</tt></td>
</tr><tr id="_e7160001-9b7a-df79-36a1-555d4c38c585"><td id="_747c08f3-1c8c-2a6e-cd73-48451da47901" valign="top" align="left">relations</td>
<td id="_91870ff5-f2fa-0c3b-d943-bc5cfd679b7a" valign="top" align="left"><tt>=</tt> <tt>!=</tt> <tt>&lt;</tt> <tt>&lt;=</tt> <tt>&gt;</tt> <tt>&gt;=</tt> <tt>approx</tt> <tt>equiv</tt> <tt>sim</tt> <tt>simeq</tt> <tt>cong</tt> <tt>propto</tt> <tt>asymp</tt></td>
</tr><tr id="_b86ca987-601a-4d62-d15a-b324c913cf7b"><td id="_7e26cc4b-16c9-68e1-9baf-d09a38816545" valign="top" align="left">logic</td>
<td id="_b46bcd25-992b-9670-52c6-4f3d0633d520" valign="top" align="left"><tt>and</tt> <tt>or</tt> <tt>not</tt> <tt>implies</tt> <tt>iff</tt> <tt>forall</tt> <tt>exists</tt> <tt>neg</tt> <tt>land</tt> <tt>lor</tt></td>
</tr><tr id="_75860d0d-c58d-c534-aedc-fc0e2fd20cdb"><td id="_41a0a10a-19f3-e712-c56d-96df4e7744f4" valign="top" align="left">sets</td>
<td id="_5b178254-3608-1a1a-bb73-e29b11cc04a7" valign="top" align="left"><tt>in</tt> <tt>notin</tt> <tt>ni</tt> <tt>subset</tt> <tt>supset</tt> <tt>subseteq</tt> <tt>supseteq</tt> <tt>cup</tt> <tt>cap</tt> <tt>emptyset</tt></td>
</tr><tr id="_532e1beb-bc38-8556-6157-3ffc006ef882"><td id="_481ddb1b-5543-a40f-3e08-a5be35c834d4" valign="top" align="left">arrows</td>
<td id="_9ebe1e03-edbe-695f-3a8e-14894f1876d9" valign="top" align="left"><tt>-&gt;</tt> <tt>--&gt;</tt> <tt>=&gt;</tt> <tt>==&gt;</tt> <tt>&lt;-</tt> <tt>&lt;--</tt> <tt>&lt;=&gt;</tt> <tt>iff</tt> <tt>mapsto</tt> <tt>hookrightarrow</tt></td>
</tr><tr id="_ba434cb9-7080-8675-7af0-c6747a6cc35a"><td id="_f53fe0ff-1ec7-b1c5-9d37-4352da7fe8f6" valign="top" align="left">calculus</td>
<td id="_8fd35d20-ca00-b78f-3033-d4a43b59d4ff" valign="top" align="left"><tt>int</tt> <tt>oint</tt> <tt>sum</tt> <tt>prod</tt> <tt>partial</tt> <tt>nabla</tt> <tt>iint</tt> <tt>iiint</tt></td>
</tr><tr id="_23fe00e8-8862-7324-8ee9-7b189215e211"><td id="_c0d2dc68-903e-fd54-5489-51e14c952a40" valign="top" align="left">accents as symbols</td>
<td id="_2e218f15-82d1-3942-e615-e40c52f41149" valign="top" align="left"><tt>hbar</tt> <tt>ell</tt> <tt>Re</tt> <tt>Im</tt> <tt>wp</tt> <tt>aleph</tt></td>
</tr><tr id="_2fed7638-e13a-5734-2e46-f935ae6bd257"><td id="_a6e8d377-afd5-bb13-7839-8e60e2ccbeaf" valign="top" align="left">miscellany</td>
<td id="_a251a212-fc6f-3d29-2d89-feb0e6508c0f" valign="top" align="left"><tt>oo</tt> <tt>degree</tt> <tt>angle</tt> <tt>perp</tt> <tt>parallel</tt> <tt>triangle</tt> <tt>square</tt> <tt>prime</tt> <tt>therefore</tt></td>
</tr></tbody>
</table>

<p id="_04fc2eb0-0109-6db8-ef46-14eb416ecc10">The complete listing is generated from the registry; Annex D shows the families with their full member counts. The reader resolves a token by longest match — `==&gt; ` reads as one arrow, not <tt>==</tt> then <tt>&gt;</tt> — and an unresolvable token is a reading error naming the token and its position.</p>
</definitions>
<definitions id="_c048a63e-d6c0-2fa1-29df-04a4b0ce0756" obligation="normative">
<title id="_d37a9f25-0630-a151-3d98-5f0281a62a35">Fractions of the surface: what the public definition adds</title>
<p id="_62e583ee-1cf4-9343-8bdb-52cd8c2fdd07"><strong>Compatibility note.</strong> Plurimath’s token set is a superset of the asciimath.org set: the uncertainty tokens of clause 12, the UnitsML channel of clause 11, and additional symbols the registry carries. The public set reads unchanged; nothing in the baseline was removed or re-spelled.</p>
</definitions>
<definitions id="_e989e755-3699-5024-70a7-73a91ecc82c9" obligation="normative">
<title id="_e0030608-4f7d-a433-7c8e-312889a9a1a5">Case sensitivity</title>
<p id="_a37facdb-276a-1fc5-9d0c-d450b80f900b">Tokens are case-sensitive: <tt>alpha</tt> and <tt>Alpha</tt> are different entries, <tt>EE</tt> (the special bold E) differs from <tt>ee</tt>. There are no aliases that differ only by case.</p>
</definitions>
<definitions id="_ac203ae9-7e60-fe06-013c-7edfdfc866e4" obligation="normative">
<title id="_35d8a7e8-4282-919b-3c9a-53efcf3fd863">Numbers are not symbols</title>
<p id="_00e78067-a38d-9066-63b6-9c241697cdf9">Digits and decimal points read as <tt>Number</tt> nodes (clause 7), never as symbol tokens; the reader’s token classes are disjoint by first character.</p>
</definitions>
<definitions id="_9c393ea2-6de5-7198-8781-6f60cc6d6090" obligation="normative">
<title id="_9743be53-c1fc-3574-4f79-78c3d706e6bd">Symbol vs construct: the classification rule</title>
<p id="_ba306fc4-43dd-3239-cddb-fffb1f224ec7">A token first matches the construct and font names (clause 8), then the special alphabets, then the symbols. The classification is total and ordered; <tt>sum</tt> can never be a symbol, <tt>d</tt> can never be a construct. The constants carry the order, and the generated tables of the annexes are that order’s statement.</p>
</definitions>
<definitions id="_013fa285-d00e-c5bd-d06d-3fe19dce5252" obligation="normative">
<title id="_3bd5efb2-defd-b315-0b1e-1995ca10c005">The Greek letters, complete</title>
<table id="_04658e3a-55f3-a268-99dc-2eaae7b10376"><colgroup><col width="20%"/><col width="20%"/><col width="20%"/><col width="20%"/><col width="20%"/></colgroup>
<name id="_d0e4277d-01f6-e2b7-8a30-c52111cf2478">Greek lower</name>
<thead><tr id="_8389e763-9c15-6cbd-6170-a46e11b3325e"><th id="_441f8a10-1c39-6e9e-5158-e181770be98d" valign="top" align="left"/><th id="_5c0f7b40-4eff-a5bd-3d50-00999e39d738" valign="top" align="left"/><th id="_b464594a-7a29-9005-1843-001231984056" valign="top" align="left"/><th id="_a92a5403-a365-ea5f-1577-2951d6985590" valign="top" align="left"/><th id="_6324e508-f199-fa4c-67c8-20b5f0ad10e0" valign="top" align="left"/></tr></thead>
<tbody><tr id="_f706a9b6-d578-db43-ec23-0d4e6b186fce"><td id="_f83190d1-4fdd-8dc5-8368-765de6f5ca83" valign="top" align="left"><tt>alpha</tt></td>
<td id="_60f8709a-beaf-cee7-daa6-2ea633a7ee4a" valign="top" align="left"><tt>beta</tt></td>
<td id="_15090831-06b8-0312-a300-7512a51f05b0" valign="top" align="left"><tt>gamma</tt></td>
<td id="_5214db16-b610-9852-f0fe-b375842e78cb" valign="top" align="left"><tt>delta</tt></td>
<td id="_7d28e0d7-dd90-67b5-06c8-dc57711d8480" valign="top" align="left"><tt>epsilon</tt></td>
</tr><tr id="_cbc2fe33-0ac0-6f3a-d2d0-83ce94b67c8d"><td id="_c0ea9c95-108b-ee74-9e10-88132192fd14" valign="top" align="left"><tt>zeta</tt></td>
<td id="_e4db46ac-c426-d37e-26ff-ae2a046bd053" valign="top" align="left"><tt>eta</tt></td>
<td id="_38c83146-edcc-11fd-30cb-458369fa81b6" valign="top" align="left"><tt>theta</tt></td>
<td id="_3d6eb842-483e-7d95-c04f-27f5160dc340" valign="top" align="left"><tt>iota</tt></td>
<td id="_38e0ea39-f7ca-8dc4-2603-a813920015ef" valign="top" align="left"><tt>kappa</tt></td>
</tr><tr id="_24e67648-8d59-3d69-752c-dc1ef020a60f"><td id="_ae649931-23f8-6b96-6540-6f4b8526755e" valign="top" align="left"><tt>lambda</tt></td>
<td id="_a291bf75-b586-d9ff-db53-865a0d3c8b53" valign="top" align="left"><tt>mu</tt></td>
<td id="_a805a7d0-b4d0-1b32-6918-c7ffba9a6205" valign="top" align="left"><tt>nu</tt></td>
<td id="_8dea757a-be36-721f-36d0-8c29a59dfca7" valign="top" align="left"><tt>xi</tt></td>
<td id="_f520bb09-cede-6fcc-ec97-f83a355fc5c5" valign="top" align="left"><tt>pi</tt></td>
</tr><tr id="_7901a12b-8ec8-8ed8-fdf0-e126972e5fc2"><td id="_5af5ce7c-e131-5d20-20be-dd2b24698dd0" valign="top" align="left"><tt>rho</tt></td>
<td id="_4a1460b0-7573-2063-d233-ba641bac6aae" valign="top" align="left"><tt>sigma</tt></td>
<td id="_d5640a68-a277-bc45-34a2-df8af799e056" valign="top" align="left"><tt>tau</tt></td>
<td id="_76e3065b-8161-e801-b1ff-533fde99a61f" valign="top" align="left"><tt>upsilon</tt></td>
<td id="_d7c8b420-5961-c2a4-f7a6-14c0ebc78292" valign="top" align="left"><tt>phi</tt></td>
</tr><tr id="_5e50bc93-eebc-d94d-77ff-eba63b9b6f0f"><td id="_786a190a-b9db-912d-b627-089122591e11" valign="top" align="left"><tt>chi</tt></td>
<td id="_12ce36b8-b470-12a7-d9b4-7fce0e025852" valign="top" align="left"><tt>psi</tt></td>
<td id="_03cfb5a9-a4af-0db6-a716-24ba803dc8a1" valign="top" align="left"><tt>omega</tt></td>
<td id="_2bce9538-c3f5-5481-30ad-ce5ec0bfc611" valign="top" align="left"/><td id="_b7ab9767-b767-eb61-1cd5-10ba71373e30" valign="top" align="left"/></tr></tbody>
</table>

<table id="_fe36df53-6e97-97a1-3555-2d9a17e3676f"><colgroup><col width="20%"/><col width="20%"/><col width="20%"/><col width="20%"/><col width="20%"/></colgroup>
<name id="_92a0250b-064e-2944-e2cd-eb5c26a7cec4">Greek upper</name>
<thead><tr id="_ebb468f3-ea1f-be23-581b-09cf931463e1"><th id="_6d471996-43bd-631f-59ee-575474b2c239" valign="top" align="left"/><th id="_c018574d-1977-f33b-06d6-d371237a4f4e" valign="top" align="left"/><th id="_720e7fbd-2f97-3a9b-d1ba-cb68a4aae776" valign="top" align="left"/><th id="_1a501e13-af03-b77c-1b25-56bb4ffbfb50" valign="top" align="left"/><th id="_60135ee6-389e-3f3a-380f-3d50ac6edd36" valign="top" align="left"/></tr></thead>
<tbody><tr id="_26cee7e6-87a3-a3dd-7554-3b7d40ce8482"><td id="_40e92a8c-51af-0b5a-556a-aa8049320a84" valign="top" align="left"><tt>Gamma</tt></td>
<td id="_4d9b3050-fb6a-2fd0-c489-eeed684f5901" valign="top" align="left"><tt>Delta</tt></td>
<td id="_6087e842-3acf-f699-45b6-9394cd70b4ca" valign="top" align="left"><tt>Theta</tt></td>
<td id="_6b663bb7-2b10-7390-74d2-db4cf08494db" valign="top" align="left"><tt>Lambda</tt></td>
<td id="_7d299164-9eee-31a8-0bf4-8e7b69e8aad6" valign="top" align="left"><tt>Xi</tt></td>
</tr><tr id="_e241c4e3-2142-88bd-9811-efd50e78efb3"><td id="_5f3d2327-a667-2372-5751-b5c5ec440141" valign="top" align="left"><tt>Pi</tt></td>
<td id="_99d5c6e0-3a32-1af0-26c7-4f44b1a49338" valign="top" align="left"><tt>Sigma</tt></td>
<td id="_ff7fa224-644a-7157-4db3-02d9658a5cdc" valign="top" align="left"><tt>Upsilon</tt></td>
<td id="_c76cec91-69bc-54f6-5ff0-4f3e06588f04" valign="top" align="left"><tt>Phi</tt></td>
<td id="_417ebabd-33cf-b24e-bc26-ad8c1e823157" valign="top" align="left"><tt>Psi</tt></td>
</tr><tr id="_e6a0bc17-d32a-8823-cd23-c758a5e7231a"><td id="_ebfb342d-9fd3-f09c-9eb9-977ec121431c" valign="top" align="left"><tt>Omega</tt></td>
<td id="_87cae099-8026-1cbe-6eec-2306082c850d" valign="top" align="left"/><td id="_62aeb479-2a71-da25-2704-3c4f975143ff" valign="top" align="left"/><td id="_628262a2-cb61-2140-7436-ae9c316b597f" valign="top" align="left"/><td id="_01a3a715-20fa-a3d0-f41c-7588e07aaaf5" valign="top" align="left"/></tr></tbody>
</table>
</definitions>
<definitions id="_35ade6de-aceb-484f-f26f-ab73f0da011e" obligation="normative">
<title id="_764cc21e-f7c0-bb93-d3f6-b931d74b0b31">The operators and relations, complete</title>
<table id="_c33933a6-3737-3d0c-3688-949288e8aec2"><colgroup><col width="20%"/><col width="20%"/><col width="20%"/><col width="20%"/><col width="20%"/></colgroup>
<name id="_716fcd4b-00ea-b433-ef7e-b6f71afba937">Binary operators</name>
<thead><tr id="_499c826f-a8cc-d946-664a-a21e77c6254b"><th id="_63b174aa-512e-9ae8-99f2-c3f09102ba74" valign="top" align="left"/><th id="_376069e0-ab31-4852-82d2-132905ff1b05" valign="top" align="left"/><th id="_980fb752-6a58-de00-d895-435da03defbb" valign="top" align="left"/><th id="_3c5d61d6-99ce-1251-0104-46e89275f91b" valign="top" align="left"/><th id="_44d230ba-06b2-f1f9-ebf0-6ee1b04af4d7" valign="top" align="left"/></tr></thead>
<tbody><tr id="_a0a108f3-12f9-4fd0-7ef7-50e3a2983eba"><td id="_7472d677-8b77-e04b-58cf-115164473a07" valign="top" align="left"><tt>+</tt></td>
<td id="_eb59558a-1dd7-0bfe-1cd9-85045e20655f" valign="top" align="left"><tt>-</tt></td>
<td id="_3fadeebe-268b-8e12-dabc-ca5e1d30a72c" valign="top" align="left"><tt>*</tt></td>
<td id="_a6c7879f-6f40-e46a-6312-b4a891512f97" valign="top" align="left"><tt>**</tt></td>
<td id="_6931e2d1-7aae-49b7-c3d1-34e124a2c061" valign="top" align="left"><tt>times</tt></td>
</tr><tr id="_2389b0f5-40d7-5641-d3d6-96f9a519fafa"><td id="_3acade6b-741e-3c00-55c9-470dd216a629" valign="top" align="left"><tt>div</tt></td>
<td id="_07b29c07-0eab-625e-8d3e-0c14bd3b4c3b" valign="top" align="left"><tt>pm</tt></td>
<td id="_77dc7050-55f2-ea2c-de9f-965fe3b8472e" valign="top" align="left"><tt>mp</tt></td>
<td id="_2ad7194e-46c1-23a0-60ee-be095ee7dbb3" valign="top" align="left"><tt>cdot</tt></td>
<td id="_817c83de-007f-4a04-3cae-60224be3dafe" valign="top" align="left"><tt>ast</tt></td>
</tr><tr id="_f59140b2-f24a-dd05-55be-12645f5f5618"><td id="_99cc537c-f6fb-a1cf-ad98-10aaf8c06cf4" valign="top" align="left"><tt>star</tt></td>
<td id="_f1b63c17-f8a6-e9cc-e393-33f82c5399ba" valign="top" align="left"><tt>circ</tt></td>
<td id="_88122800-752b-2da7-5bf2-d93e06ee7c64" valign="top" align="left"><tt>bullet</tt></td>
<td id="_29b7ca34-d6e2-619d-08c6-b68779f927e1" valign="top" align="left"><tt>oplus</tt></td>
<td id="_c52c6740-0024-37b8-c3f9-6c18b5fcf8f5" valign="top" align="left"><tt>ominus</tt></td>
</tr><tr id="_ab12131e-9bcb-68c3-95bd-d247b65af6af"><td id="_6c7215f2-5460-e45d-17c6-21cfb59fdaba" valign="top" align="left"><tt>otimes</tt></td>
<td id="_ab38e833-9882-6286-ce0c-06c1218600cb" valign="top" align="left"/><td id="_bfb70938-af0a-c0b2-ff6b-e644393213ff" valign="top" align="left"/><td id="_715723cc-3acc-4835-399e-45c9a200ba22" valign="top" align="left"/><td id="_97bab022-407d-0e2e-bb77-b9adfcfe5b4f" valign="top" align="left"/></tr></tbody>
</table>

<table id="_d8ae5c30-4ead-df7e-69de-748a05b89b59"><colgroup><col width="20%"/><col width="20%"/><col width="20%"/><col width="20%"/><col width="20%"/></colgroup>
<name id="_fbeb4264-9c86-e108-6931-177408d54136">Relations</name>
<thead><tr id="_0977a683-f39e-251c-b7a0-dc2d53b8cc1a"><th id="_859dd6ce-d96f-9e43-7767-93178cde7857" valign="top" align="left"/><th id="_9c63d3cd-bd4e-0237-cf0a-9854a29fb604" valign="top" align="left"/><th id="_8600fcdd-11aa-f544-dbc4-99af9d6d637f" valign="top" align="left"/><th id="_18c86a99-daae-090b-0b86-8c5c40b5e345" valign="top" align="left"/><th id="_ad055941-d41d-a0ba-f2de-c96196c374aa" valign="top" align="left"/></tr></thead>
<tbody><tr id="_9f976d1e-9cda-6b22-44e0-46cca8b265a7"><td id="_18423909-ca1c-3c44-ef1b-856f8e481aff" valign="top" align="left"><tt>=</tt></td>
<td id="_284484ac-1554-3413-e9c5-9c33e7203d70" valign="top" align="left"><tt>!=</tt></td>
<td id="_111e2867-3b81-e550-b19c-3b3be6c59017" valign="top" align="left"><tt>&lt;</tt></td>
<td id="_de992298-a350-cd61-898b-c807d6b76cff" valign="top" align="left"><tt>&lt;=</tt></td>
<td id="_e5bb793f-9fda-8f96-e586-02ea23056f42" valign="top" align="left"><tt>&gt;</tt></td>
</tr><tr id="_016a1ecf-8807-67f2-3554-8cd5df147682"><td id="_4fba08b4-cfed-7ce9-07d2-6e1858ed14ce" valign="top" align="left"><tt>&gt;=</tt></td>
<td id="_b9e2afcf-903f-4137-b6a1-6940af27423b" valign="top" align="left"><tt>approx</tt></td>
<td id="_6759e506-1174-33fc-7830-3cebe5da1971" valign="top" align="left"><tt>equiv</tt></td>
<td id="_df9d8633-fec2-8aab-bf1e-b03916ffd2b6" valign="top" align="left"><tt>sim</tt></td>
<td id="_94ce0d28-b283-c445-8a5e-4bf566641841" valign="top" align="left"><tt>simeq</tt></td>
</tr><tr id="_070d48e4-b923-90d9-7d8a-9f01af0d8420"><td id="_b0f90743-bbf6-b02a-0b8e-92d9ce15e905" valign="top" align="left"><tt>cong</tt></td>
<td id="_f0d185df-50b0-6b21-c974-52f456859abf" valign="top" align="left"><tt>propto</tt></td>
<td id="_4cab4e53-fbd9-e943-7e72-148add638910" valign="top" align="left"><tt>asymp</tt></td>
<td id="_56ba508e-be01-f7aa-13a0-3e5ef302b047" valign="top" align="left"/><td id="_7a351531-3c14-3543-b7bb-229813a6c0ce" valign="top" align="left"/></tr></tbody>
</table>
</definitions>
<definitions id="_b9d60bad-92cd-1dc0-edba-9352ab3af709" obligation="normative">
<title id="_6c328e81-3764-5855-7272-5ce58fd1ae61">Logic, sets, arrows, calculus</title>
<table id="_c4017b1c-a05e-746f-853c-1875a27541d2"><colgroup><col width="20%"/><col width="20%"/><col width="20%"/><col width="20%"/><col width="20%"/></colgroup>
<name id="_49c0437f-37c8-1b8a-c49a-6f48c17e45c2">Logic and sets</name>
<thead><tr id="_f0be7def-1cdb-16dc-4c22-26fd9ffc2acf"><th id="_06b08369-0d68-e9fe-8151-e6b53bcd6662" valign="top" align="left"/><th id="_2523c4a6-1630-3014-6a4f-343fb6dd61d7" valign="top" align="left"/><th id="_e388ab96-48e0-01b2-29e1-0d72a7dbd213" valign="top" align="left"/><th id="_0dd0a07c-e670-872f-aaca-7cfb29363f3b" valign="top" align="left"/><th id="_b05080c9-0443-b44e-7fdc-5f3f5fb64514" valign="top" align="left"/></tr></thead>
<tbody><tr id="_bfb765cf-8596-c1b3-5053-0805cab3ebb9"><td id="_e8076df2-0ae6-e018-8192-405059b39b92" valign="top" align="left"><tt>and</tt></td>
<td id="_b36cc038-8e3b-0e94-4d10-98f31a8faa92" valign="top" align="left"><tt>or</tt></td>
<td id="_b8da0c72-eda0-d91e-f33b-a0f339076985" valign="top" align="left"><tt>not</tt></td>
<td id="_bcaef80e-e1c7-f2e8-ca79-8cd688df8de0" valign="top" align="left"><tt>implies</tt></td>
<td id="_f17f4b68-2025-a425-3d9d-d9c2a336fd5b" valign="top" align="left"><tt>iff</tt></td>
</tr><tr id="_8f384df5-bf82-f62e-4979-b46bab237489"><td id="_4d1815f1-9545-71e3-d5e5-6d71d7215ea4" valign="top" align="left"><tt>forall</tt></td>
<td id="_18ce1f66-6c6d-2b6b-ea8e-fc8bd9acf2dc" valign="top" align="left"><tt>exists</tt></td>
<td id="_e0c890b0-2f83-724a-aede-0ad8b0993acd" valign="top" align="left"><tt>neg</tt></td>
<td id="_982ba0ca-7756-c2d4-c5e0-461da2904f93" valign="top" align="left"><tt>in</tt></td>
<td id="_0b341832-2d09-33e3-7756-54a1aa290bf5" valign="top" align="left"><tt>notin</tt></td>
</tr><tr id="_407bd4df-32cb-591b-3bec-cc41b385eb82"><td id="_7d1c1750-db07-d790-fa8f-9df167b3e02b" valign="top" align="left"><tt>ni</tt></td>
<td id="_708ca4af-d55f-82a7-4e97-ca4e34cd23e1" valign="top" align="left"><tt>subset</tt></td>
<td id="_45182839-d6a4-a99f-0470-38adc4323f0d" valign="top" align="left"><tt>supset</tt></td>
<td id="_44a844ce-a600-23b6-b640-d23076fc121e" valign="top" align="left"><tt>subseteq</tt></td>
<td id="_88cd4e96-4f3a-ae98-4cc9-281937ca206d" valign="top" align="left"><tt>supseteq</tt></td>
</tr><tr id="_94610c45-6c70-aa1a-4c25-ee4f0b75ce2a"><td id="_5159837d-1d4f-1ef8-f66b-38926adf7cba" valign="top" align="left"><tt>cup</tt></td>
<td id="_1867c0a9-b9f1-5841-efd1-59b217ef9abe" valign="top" align="left"><tt>cap</tt></td>
<td id="_31710580-8bf1-3b0b-ceec-2d7d7a3c1a4b" valign="top" align="left"><tt>emptyset</tt></td>
<td id="_e53513b0-e950-4862-e2d1-0ab79c066053" valign="top" align="left"/><td id="_fe891fb4-7ab8-7037-56c5-b31f3be8fcde" valign="top" align="left"/></tr></tbody>
</table>

<table id="_2496d915-4764-cf1c-9cea-c25586700eec"><colgroup><col width="20%"/><col width="20%"/><col width="20%"/><col width="20%"/><col width="20%"/></colgroup>
<name id="_62410a45-fced-49a7-627f-83584564fbcb">Arrows</name>
<thead><tr id="_f500c443-7587-9140-9934-fb2128b43a83"><th id="_88ee0d42-586f-bfdb-3cae-d633391c2d9e" valign="top" align="left"/><th id="_a4159987-3cf2-35ab-8015-96ad2099d09c" valign="top" align="left"/><th id="_1fa26d5b-98bd-7341-48ab-a759ad64b84b" valign="top" align="left"/><th id="_2c1c8e0b-c12e-0b97-96bf-d71927473b52" valign="top" align="left"/><th id="_37c7ce19-b967-33d6-03d5-009ce565de63" valign="top" align="left"/></tr></thead>
<tbody><tr id="_6c3e2308-6a09-c76f-8ef8-1c005dc7ab2c"><td id="_94eca242-1b32-6eca-48c7-5a3babdcd258" valign="top" align="left"><tt>-&gt;</tt></td>
<td id="_4a92cdd3-4a8e-9305-5729-4786594baea4" valign="top" align="left"><tt>--&gt;</tt></td>
<td id="_78808a8f-4c93-5596-7f65-22cc3f56cae4" valign="top" align="left"><tt>=&gt;</tt></td>
<td id="_579b01f0-aa60-200d-48b2-dc9547577d11" valign="top" align="left"><tt>==&gt;</tt></td>
<td id="_816abdc8-9809-f24b-9f1f-1235468671e8" valign="top" align="left"><tt>&lt;-</tt></td>
</tr><tr id="_809691b9-df70-f3a0-2d87-0f30d8e1ffda"><td id="_9aeaae92-7486-f1a7-b09a-8c5d9c6329e8" valign="top" align="left"><tt>&lt;--</tt></td>
<td id="_526f405b-1c2e-6301-9fe1-baf194b10c8d" valign="top" align="left"><tt>&lt;=&gt;</tt></td>
<td id="_5e0d9322-2f1a-b37e-406a-bb575270f93a" valign="top" align="left"><tt>mapsto</tt></td>
<td id="_b1a15bc2-d9c8-5a9b-e219-15b12fb70159" valign="top" align="left"><tt>hookrightarrow</tt></td>
<td id="_3d50a265-2906-0b45-de7a-964d5ae7c417" valign="top" align="left"><tt>iff</tt></td>
</tr></tbody>
</table>

<table id="_696a8aa5-08d2-19ec-7de6-482c9475329a"><colgroup><col width="20%"/><col width="20%"/><col width="20%"/><col width="20%"/><col width="20%"/></colgroup>
<name id="_2f4fda5f-cbc5-acdc-e08e-c3ff76a98e56">Calculus and miscellany</name>
<thead><tr id="_aa7300c7-91ed-4122-401e-a205d7e16c1a"><th id="_9c284625-63fe-5fa2-f42e-77a26a280ff8" valign="top" align="left"/><th id="_b9311f9c-a6db-3889-9910-56a7e87002b7" valign="top" align="left"/><th id="_1a3c4700-8c53-738d-1630-4e5789e2bfd2" valign="top" align="left"/><th id="_f8afe8bb-1ca9-7908-4237-c378f1cf4d15" valign="top" align="left"/><th id="_2fccf09a-7fcd-55de-65f0-ca5eca5ba7bc" valign="top" align="left"/></tr></thead>
<tbody><tr id="_fd680b0f-5f8e-ba99-e6ca-fc6323e5c257"><td id="_34b81cf2-3e5b-ef59-48d0-0ab1951f2af4" valign="top" align="left"><tt>int</tt></td>
<td id="_ff91dbd7-01f7-59d5-85c7-546c41ba7cc6" valign="top" align="left"><tt>oint</tt></td>
<td id="_d1452a82-014e-34fb-7a1a-80592d226677" valign="top" align="left"><tt>sum</tt></td>
<td id="_dd8150e0-d910-a10f-9a2d-29f2773dc40b" valign="top" align="left"><tt>prod</tt></td>
<td id="_64834c96-d380-fcd0-442e-1e8b74b3246a" valign="top" align="left"><tt>partial</tt></td>
</tr><tr id="_1143bb35-08ea-7e99-0b2b-bd4f25db9236"><td id="_e097e878-094f-dd5f-0432-fa340d0d039c" valign="top" align="left"><tt>nabla</tt></td>
<td id="_873c775e-cc24-1691-2cb4-2fc71a926b59" valign="top" align="left"><tt>hbar</tt></td>
<td id="_9316382f-3f4d-6aef-7d3f-33f130829aa5" valign="top" align="left"><tt>ell</tt></td>
<td id="_0be9e37d-9db6-d84e-b830-ce820d077669" valign="top" align="left"><tt>Re</tt></td>
<td id="_b58bdbaa-e1f4-46e6-215a-eaea79674462" valign="top" align="left"><tt>Im</tt></td>
</tr><tr id="_d9f3cb8b-987b-15be-c172-932e6892a714"><td id="_b7c9fe2f-1379-80c7-4e11-531d52fc8fbd" valign="top" align="left"><tt>wp</tt></td>
<td id="_4b8f128a-058f-93c6-38a1-2e526092d3b3" valign="top" align="left"><tt>aleph</tt></td>
<td id="_42a06466-1d77-9c0d-5723-d3fdf8379d11" valign="top" align="left"><tt>oo</tt></td>
<td id="_ea2e1ee2-7176-b243-ceaa-16eebe6db066" valign="top" align="left"><tt>degree</tt></td>
<td id="_a57e5e0a-c06c-7acc-6375-77351aee90b8" valign="top" align="left"><tt>angle</tt></td>
</tr><tr id="_9a484a99-1250-67ad-3649-7be821c11bee"><td id="_369ed9d9-ae67-b77c-7cde-ab4f9ec8c45b" valign="top" align="left"><tt>perp</tt></td>
<td id="_1dbbdfd1-1eca-b202-3f1f-c017b6555058" valign="top" align="left"><tt>parallel</tt></td>
<td id="_e5369b59-dd9d-4aec-a1be-e1aef7d5cf7d" valign="top" align="left"><tt>triangle</tt></td>
<td id="_965271de-cd18-082b-9fcd-b4e8814cb82f" valign="top" align="left"><tt>square</tt></td>
<td id="_def4bb11-3719-e5a8-9cac-ba743558c550" valign="top" align="left"><tt>prime</tt></td>
</tr></tbody>
</table>

<p id="_5a6c0a85-6b85-c8ce-68a2-a4ccf67e58bf">These are the registry’s AsciiMath tokens for the families; the counts of Annex D are their totals. The generated listing remains authoritative — these tables are its statement at edition 1.</p>
</definitions>
<definitions id="_705a270b-9735-16b7-58ef-c9b06fc0be29" obligation="normative">
<title id="_0d12d59b-b0d3-ac31-f8db-9b88ad6edba7">Unicode and entities</title>
<p id="_23c89da2-16c6-d040-c743-615e8cd00439">Input is Unicode text: symbol tokens are the spellings the registry declares, and a character outside every token’s set is an unresolvable run — named, positioned, refused. The reader does not decode HTML entities in AsciiMath input (the writer emits character references in some surfaces; that is output encoding, not input syntax). An author pasting rendered mathematics strips the entities first, or the reader will name every ampersand.</p>
</definitions>
<definitions id="_f80669b3-ec21-1d31-0c83-b6025661346c" obligation="normative">
<title id="_7c42c08b-f678-7bb8-6d80-ee53444eecb3">The registry is the whole truth</title>
<p id="_4d8d41d2-3d68-f656-72e5-2f6ec37e9817">Every token this clause lists is a registry entry’s AsciiMath token, and every registry entry’s AsciiMath token is accepted. Neither side of that sentence bends: no unlisted token reads, and no listed token fails. When the registry grows (PM 1001’s entry lifecycle), the token surface grows with it at the next edition, and the generated tables of this document regenerate with it.</p>
</definitions></definitions>
<clause id="_46c493d5-be66-408b-6907-2364865881dd" obligation="normative">
<title id="_9cb3472d-2d8f-3873-c95f-9acaa0c4457a">Numbers and text</title>
<clause id="_aab7fb96-85cb-99a5-2569-6b33039e65dd" obligation="normative">
<title id="_aa2730c7-9f76-4476-9bcf-6360f48ae67d">Numbers</title>
<p id="_731fa266-4756-5e70-48a1-b53e24b586b6">A run of digits with an optional decimal point reads as one <tt>Number</tt> node: <tt>3</tt>, <tt>0.5</tt>, <tt>42</tt>, <tt>2.10</tt>. The digits are verbatim — <tt>2.10</tt> keeps its trailing zero (PM 1002’s exact-decimal discipline applies to the tree’s numbers). There is no exponent form, no thousands separator, no sign: a minus is a symbol sibling, and <tt>1e5</tt> reads as the <tt>Number</tt> 1 followed by the name <tt>e5</tt> is refused — <tt>e5</tt> is not a token, so the input errors, which is the correct answer for a notation without exponent forms.</p>
</clause>

<clause id="_908740d4-0a99-32fc-cfda-031074469048" obligation="normative">
<title id="_7e5b43f8-cb43-322f-417c-c6173d325cd4">Upright text: the two forms</title>
<p id="_786fb0c4-3ee8-6b84-c637-168fe75842d1">Text enters the notation in two forms:</p>

<ul id="_6a30fe7b-5e02-06b6-b6b0-b6181f7513cf"><li><p id="_7d256670-b4e9-9f8c-2366-003f9d9959fc"><tt>text(content)</tt> — the text function: the content reads as upright text, and AsciiMath commands inside it are honoured (<tt>text(the "sum" is)</tt> reads its quotes as text);</p>
</li>
<li><p id="_f37dd3c4-6914-630d-9df3-b2b8686894c6">quoted strings — <tt>"content"</tt> — read verbatim with the channel exception of clause 11.</p>
</li>
</ul>

<p id="_2fa6eba6-76a3-15fa-c9b3-3df89bf93b49">Both yield <tt>Text</tt> nodes; they differ in processing, not in the node. The choice is the author’s: <tt>text(...)</tt> for text that may contain structure, quotes for literal text.</p>

<example id="_d9c5a336-8f68-fe6e-e39f-46fde4802a44"><p id="_1f01ca7d-790e-2bf7-13be-ac7f06298522"><tt>text(hello world)</tt> and <tt>"hello world"</tt>. <strong>Expected outcome.</strong> two <tt>Text</tt> nodes with equal content. The first form’s content passes through the reader’s text processing; the second is verbatim.</p>
</example>
</clause>

<clause id="_0b484633-1684-a088-d6f6-4e44a3548178" obligation="normative">
<title id="_ff5c24a9-5218-fef6-9cef-0eee7ba77b00">Spacing</title>
<p id="_da2306b4-81a3-8dd9-d88d-cd53053b80a1">Whitespace separates tokens and is never content. The spaces the surfaces render come from the constructs, not from the input’s spacing: <tt>x+y</tt> and <tt>x + y</tt> read to equal trees, and <tt>input_string</tt> preserves whichever the author wrote.</p>
</clause>

<clause id="_e978d0ba-1c68-5679-c6e5-18ccb859fcd3" obligation="normative">
<title id="_8190b261-ec7e-f0dd-5153-f47f3d6bc1ef">Text in constructs</title>
<p id="_d0e58c6e-7362-2050-144a-a8b91e24dcfd"><tt>text(...)</tt> inside constructs composes: <tt>color(red)(text(urgent))</tt> colours its text; [[a,text(total)]] sits text in a cell. The text content participates in the tree as an operand like any other, and the writer surfaces render it upright per PM 1001.</p>
</clause>

<clause id="_591d6fe4-cb89-b7ab-c4e0-1ccf89417b64" obligation="normative">
<title id="_a156df67-e037-f063-db62-ddd3ca9842ed">The number boundary</title>
<p id="_8ceb5428-74af-4deb-0eec-60234ced49f8">A token boundary ends a number: <tt>2x</tt> is the number 2 then the name <tt>x</tt> (an implicit product per clause 13), <tt>2.5.1</tt> is the number <tt>2.5</tt> then a fault, and <tt>1..5</tt> is a number, a fault, a number — the reader does not guess ranges into existence.</p>
</clause>

<clause id="_12885344-663b-ff28-874a-13263414db3c" obligation="normative">
<title id="_2dcaaa36-7819-a6c7-7aed-5286cd549fc0">Verbatim, one more time</title>
<p id="_06f8b672-cac7-c972-fa34-9bf118beed3d">The exact-decimal discipline (CalConnect 36813, PM 1002) is visible here at the notation’s front door: <tt>2.10</tt> reads to a <tt>Number</tt> whose text is <tt>2.10</tt>, and every writer emits those digits. An author who writes the trailing zero made a precision statement; the notation’s job is to carry it to every surface, and it does.</p>
</clause>
</clause>

<clause id="_7cf0d4ee-9597-a33f-328b-8beb04eb2f29" obligation="normative">
<title id="_31b958a9-a446-6d1c-d97b-ef64a01cbadf">Constructs</title>
<clause id="_f6746e05-567a-7805-f7b7-d91ed75fa509" obligation="normative">
<title id="_3a7844c3-3fa7-3026-eb5c-6f195f63bad7">The four shapes</title>
<p id="_f2c3e01b-7da7-7be0-5ce6-5366adade39c">The construct classes come in four argument shapes, and every name below belongs to exactly one:</p>

<table id="_8725ce7b-815f-23ec-8fdd-47a59353381a"><colgroup><col width="25%"/><col width="25%"/><col width="50%"/></colgroup>
<name id="_fc974485-9c4a-7315-889c-8c81824959e8">.The four construct shapes</name>
<thead><tr id="_b1939d73-ad5e-b31b-6e90-85075a058d15"><th id="_7e40e021-c582-a466-9bc6-7b100b47f5e8" valign="top" align="left">Shape</th>
<th id="_3df29d31-6035-87da-2c9a-cf7dda0b0b6f" valign="top" align="left">Written</th>
<th id="_9d740563-1bd3-4b58-ec62-7b43681984ba" valign="top" align="left">Yields</th>
</tr></thead>
<tbody><tr id="_71132a2e-fee5-0a37-b623-0413621d40f9"><td id="_03d30bad-8319-fa57-a085-440cf3bc79e5" valign="top" align="left">unary</td>
<td id="_085b0157-3587-8fa0-79ae-581ea68327d0" valign="top" align="left"><tt>name(x)</tt> or <tt>name x</tt></td>
<td id="_6c8579c8-94bd-42bb-90f3-0c60da422932" valign="top" align="left">one-operand function node</td>
</tr><tr id="_2b40120c-3471-b174-73dc-5cc8eadd2148"><td id="_916d1355-9d52-7b8f-b00c-cb6c1b365830" valign="top" align="left">binary</td>
<td id="_b63a8446-a394-98b4-5799-9172cf6f3778" valign="top" align="left"><tt>name(x)(y)</tt></td>
<td id="_9ef5a9f2-1146-8d10-1bce-80e122774687" valign="top" align="left">two-operand function node</td>
</tr><tr id="_c3eb61eb-4b77-b1bd-3152-bf3fee4e9f85"><td id="_469f3f73-6dc4-6be3-6430-734c66d8f9e6" valign="top" align="left">ternary</td>
<td id="_af5e2326-093b-d92f-3ed9-064bd8eac02c" valign="top" align="left"><tt>name(x)(y)(z)</tt> — or with scripts</td>
<td id="_54590883-7c6d-f2e5-21b2-b01b6178cf74" valign="top" align="left">the nary classes</td>
</tr><tr id="_8eaf212f-978f-f598-98e8-e9a6f9d51c61"><td id="_435b219e-351a-afd5-9611-b69c7cfab700" valign="top" align="left">sub/sup</td>
<td id="_d5e56603-5574-a9f6-3e9d-404f7f03c4ae" valign="top" align="left"><tt>name</tt> with <tt>_</tt>/<tt>^</tt></td>
<td id="_127cfa3a-b690-6c7c-2c17-1a47adbdb739" valign="top" align="left"><tt>lim</tt>, <tt>log</tt> with optional limits</td>
</tr></tbody>
</table>

<p id="_af454d93-0c7c-d392-6c00-368f96149c65">Parenthesised arguments group: <tt>sqrt(x+1)</tt> takes the whole sum; <tt>sqrt x+1</tt> takes only <tt>x</tt>. The parenthesis form is always available, and adjacency is always available for the last argument of a unary class.</p>
</clause>

<clause id="_d788be6b-62a6-3333-b711-09fee50a57db" obligation="normative">
<title id="_16ddaf23-27c4-bef1-6752-6be3f6a39c7f">Unary classes</title>
<p id="_7dbedb94-8426-9e3d-7c1e-a5e935c76e95">The complete unary list, from the reader’s constants:</p>

<table id="_a1654c03-d4ba-8d1e-922e-76ad7c441e6b"><colgroup><col width="20%"/><col width="20%"/><col width="20%"/><col width="20%"/><col width="20%"/></colgroup>
<name id="_08cab8da-f578-8e21-0bf2-8f2f63fd18db">The unary classes</name>
<thead><tr id="_5e5cbd41-1522-510d-94cd-e66c7e3ae438"><th id="_a3b017e4-c596-3da3-4ef2-f65df48bb4a6" valign="top" align="left"/><th id="_35e452fa-0b75-73f6-052a-4d5480554ce3" valign="top" align="left"/><th id="_0f3ab7e3-a75b-beaf-2220-efbe33e99df2" valign="top" align="left"/><th id="_94198772-2076-7a32-89d6-79fa0d2fed9f" valign="top" align="left"/><th id="_9551e0fe-38bd-812f-e192-a5afac9f090a" valign="top" align="left"/></tr></thead>
<tbody><tr id="_1d0ddcf0-b101-4864-c479-70d5f89eb276"><td id="_8653a47d-cf39-4ede-cf10-13a1e968a565" valign="top" align="left"><tt>underbrace</tt></td>
<td id="_3591ddac-233e-b6ca-021f-46e45556a14d" valign="top" align="left"><tt>overbrace</tt></td>
<td id="_d3aeb63a-e8c2-31fd-ea2a-83427ec26acc" valign="top" align="left"><tt>underline</tt></td>
<td id="_5f1e2480-b2d4-2562-873f-ba13d9bb9232" valign="top" align="left"><tt>arccos</tt></td>
<td id="_8d44ca4e-8b3e-6dbe-5ad3-6a29b29ab247" valign="top" align="left"><tt>arcsin</tt></td>
</tr><tr id="_1f2c9ebc-7c46-3a2c-622c-4a7eba738c9e"><td id="_bcb83544-4a61-167f-93de-7119b2d5d2f2" valign="top" align="left"><tt>arctan</tt></td>
<td id="_52f3e044-e0e3-a965-61e3-464be40161e6" valign="top" align="left"><tt>ubrace</tt></td>
<td id="_d28981fd-26b5-9508-d998-3359c356a51f" valign="top" align="left"><tt>obrace</tt></td>
<td id="_8aa67fc9-2583-2ee7-47b7-0764e67356e1" valign="top" align="left"><tt>cancel</tt></td>
<td id="_dc734776-f968-e7f3-4c7a-dc0a555a9530" valign="top" align="left"><tt>tilde</tt></td>
</tr><tr id="_45e0c4a6-5405-0a56-0bb6-d5731cf84b8a"><td id="_ef7967f5-50ab-7a1d-de8d-faaf8993e6df" valign="top" align="left"><tt>floor</tt></td>
<td id="_74706202-5161-8ee0-e424-ff053f474b65" valign="top" align="left"><tt>ceil</tt></td>
<td id="_6e741dbb-5d87-f4ac-ff7a-9ac68422eb67" valign="top" align="left"><tt>ddot</tt></td>
<td id="_9c84fa57-94f6-47cc-3e36-a12a7c0e97f4" valign="top" align="left"><tt>coth</tt></td>
<td id="_467327b6-69bf-8d0e-9904-3de85694796d" valign="top" align="left"><tt>csch</tt></td>
</tr><tr id="_05bec4fc-6e90-2ab4-3ec8-cad277ab81ec"><td id="_f88e3792-fbfc-b983-3b8f-9455380b8b6c" valign="top" align="left"><tt>sech</tt></td>
<td id="_863c9f40-5601-9ff2-db6e-26b898d6d6ea" valign="top" align="left"><tt>sinh</tt></td>
<td id="_1f836109-cf8e-c4f6-6f84-9f4d62aa9fa8" valign="top" align="left"><tt>tanh</tt></td>
<td id="_09cc9343-c80d-12a9-e72d-39b751072cdf" valign="top" align="left"><tt>cosh</tt></td>
<td id="_8861eaf9-c0a1-cb1b-9f83-4907bec703d1" valign="top" align="left"><tt>sqrt</tt></td>
</tr><tr id="_ccc431bc-505d-0dcd-0784-aae73b9dd1e7"><td id="_9ff1a5d1-a149-9194-1c1b-016f5b7bb8ab" valign="top" align="left"><tt>norm</tt></td>
<td id="_23fa4460-435e-b197-e2f5-cbe02083c8c4" valign="top" align="left"><tt>text</tt></td>
<td id="_9c4927b3-3906-a527-098f-93d3a850d867" valign="top" align="left"><tt>sec</tt></td>
<td id="_7940d4c4-2d8e-b04a-a9e2-d5c03a6d1edc" valign="top" align="left"><tt>sin</tt></td>
<td id="_b247e338-2b1e-f71a-4b67-cbf1f58a4e2b" valign="top" align="left"><tt>tan</tt></td>
</tr><tr id="_488850e7-844a-c5f2-66c9-800f08a697e7"><td id="_9e51ac79-9ff5-324e-794b-7ec085d4083f" valign="top" align="left"><tt>cos</tt></td>
<td id="_398e187e-0f8f-5a24-d812-b4bbae95fa51" valign="top" align="left"><tt>exp</tt></td>
<td id="_2cdde325-9a66-e649-427e-d909762a88a7" valign="top" align="left"><tt>gcd</tt></td>
<td id="_85eaa0e5-7acb-141f-2ce0-1b8416358bf2" valign="top" align="left"><tt>glb</tt></td>
<td id="_e13e1736-2655-8ebe-8efb-a3051614432b" valign="top" align="left"><tt>lcm</tt></td>
</tr><tr id="_a2fb36fa-2a05-4135-ee19-ef45e475cef7"><td id="_594c9c19-0f72-be36-c842-1a659217f22c" valign="top" align="left"><tt>lub</tt></td>
<td id="_b078387c-f8e2-842e-b7c9-0b6fab7cc5c4" valign="top" align="left"><tt>cot</tt></td>
<td id="_f3da28f8-ddf8-a27c-8f95-6736833f9723" valign="top" align="left"><tt>csc</tt></td>
<td id="_e22feb15-9886-129c-94d3-9cb4878d9c6f" valign="top" align="left"><tt>det</tt></td>
<td id="_3c203e56-4ee8-6f66-58f3-6d91f1ba82b4" valign="top" align="left"><tt>dim</tt></td>
</tr><tr id="_c620600d-188e-e0cd-752c-7892432b5670"><td id="_d6b7fcde-1bd1-c777-a3b0-c9f848d7c575" valign="top" align="left"><tt>max</tt></td>
<td id="_d9d01fa5-7cec-9667-0fea-50bf18590fb4" valign="top" align="left"><tt>min</tt></td>
<td id="_7c5364cc-e8c5-7cb5-6eca-baf7e5711d9b" valign="top" align="left"><tt>abs</tt></td>
<td id="_4b3ec9e8-e3be-ddb3-e9e7-025baf5eadd3" valign="top" align="left"><tt>bar</tt></td>
<td id="_1c677f4b-770b-298c-9a8a-9a85b144cd67" valign="top" align="left"><tt>dot</tt></td>
</tr><tr id="_d13ed4f3-ff31-ed08-d280-19a4f0296fd9"><td id="_cb6b738f-323d-8815-c163-b31d0c195504" valign="top" align="left"><tt>hat</tt></td>
<td id="_73d25b24-f25f-2a5e-3b00-dcced12d10fa" valign="top" align="left"><tt>vec</tt></td>
<td id="_6c2badb8-8991-22b6-fa2d-cd99f88d069b" valign="top" align="left"><tt>ul</tt></td>
<td id="_7cca3c00-0cb4-38d5-06f6-0f4171988f6f" valign="top" align="left"><tt>ln</tt></td>
<td id="_162b3c2c-f9a5-7adc-72b6-6e971dc64aaf" valign="top" align="left"><tt>log</tt></td>
</tr></tbody>
</table>

<p id="_f9fb9473-ced8-6e46-a387-37c513878e71">Each reads to its function class of PM 1001’s Annex A: the trigonometric and hyperbolic names to their classes, the accents (<tt>bar</tt>, <tt>dot</tt>, <tt>hat</tt>, <tt>vec</tt>, <tt>tilde</tt>, <tt>ddot</tt>) to the accent classes, the fences (<tt>abs</tt>, <tt>norm</tt>, <tt>floor</tt>, <tt>ceil</tt>, <tt>obrace</tt>, <tt>ubrace</tt>) to their fence classes, <tt>cancel</tt> to the strike-through class, <tt>underline</tt> and <tt>ul</tt> to the underbar forms, and the operator names to upright operator classes.</p>
</clause>

<clause id="_56a91642-0463-a38a-8b50-35ad9b564759" obligation="normative">
<title id="_26102df0-f2d2-fed4-49a9-57b2b487c876">Binary classes</title>
<table id="_bac497ed-de07-2a5c-dd68-bdfb3c25d3fe"><colgroup><col width="25%"/><col width="37.5%"/><col width="37.5%"/></colgroup>
<name id="_a50516d7-f010-0eda-d49e-e4183f2160fa">The binary classes</name>
<thead><tr id="_68083629-b753-f2f7-88de-9ff16dd8ec32"><th id="_f670e3c5-18ea-05e7-3f20-f33099ef38ff" valign="top" align="left">Name</th>
<th id="_0fa7eb7e-9dfe-5bfb-cd9c-12ef678a3047" valign="top" align="left">Arguments</th>
<th id="_6a7312f6-a352-cb75-8400-8e6e4bfa2a1a" valign="top" align="left">Yields</th>
</tr></thead>
<tbody><tr id="_00018d78-20b6-b69f-e1fe-b3b7c9f89997"><td id="_4abe4963-22a3-876e-51fd-d76ffec4787b" valign="top" align="left"><tt>frac(a)(b)</tt></td>
<td id="_5b07b729-3be4-78a6-b15c-79291300273f" valign="top" align="left">numerator, denominator</td>
<td id="_08c55642-0e41-5736-80dd-2ebbefb0fda9" valign="top" align="left"><tt>Frac</tt></td>
</tr><tr id="_8bbfcbc1-374c-1923-2b56-662151505899"><td id="_dd827f94-4bf2-2d4b-3122-dab54ff02af8" valign="top" align="left"><tt>root(a)(b)</tt></td>
<td id="_635e9734-7e87-3bd1-13ee-5557adae5cd3" valign="top" align="left">radicand, degree</td>
<td id="_fc57b76e-e632-8404-d111-7c3f3e9a6a8d" valign="top" align="left"><tt>Root</tt></td>
</tr><tr id="_4374199f-324a-0d64-7f58-de822a6012ed"><td id="_fdeaf052-f071-d0cc-b93a-313912fe9055" valign="top" align="left"><tt>underset(a)(b)</tt></td>
<td id="_df748643-d2f3-184b-6bdb-e31f019f46a7" valign="top" align="left">base, under</td>
<td id="_aaa16aa9-1b92-d243-242b-31b94ce4ae13" valign="top" align="left"><tt>Underset</tt></td>
</tr><tr id="_d3dc5e8f-0e90-e987-5019-2872ecd90ac9"><td id="_58ea0dbb-ffd7-96c2-13de-7c25c1d537a1" valign="top" align="left"><tt>overset(a)(b)</tt></td>
<td id="_9bca1c52-bc2a-3130-52f9-352f139d2c16" valign="top" align="left">base, over</td>
<td id="_67d9be92-b309-ea74-77cd-fca8f498e8c9" valign="top" align="left"><tt>Overset</tt></td>
</tr><tr id="_96c3631a-f929-c84d-503c-ff07e8dad4c9"><td id="_2f621d6f-241f-1bb8-5879-ebfc3b25821a" valign="top" align="left"><tt>stackrel(a)(b)</tt></td>
<td id="_f1b1822b-5d69-f94a-51af-522b6d97fe9e" valign="top" align="left">bottom, top</td>
<td id="_bab6d76f-1679-a9ab-2b97-6aaf2f449ab2" valign="top" align="left"><tt>Stackrel</tt></td>
</tr></tbody>
</table>
</clause>

<clause id="_86771437-498d-fa74-3bd6-2821db5e9a4d" obligation="normative">
<title id="_2305c618-90be-d7c7-16c9-1c2969b55416">Ternary classes: the nary constructs</title>
<p id="_bf85fb88-4bdf-e3c4-6c47-1acd6f9a5a02"><tt>sum</tt>, <tt>prod</tt>, <tt>int</tt> and <tt>oint</tt> take an operand with optional <tt>_</tt>/<tt>^</tt> scripts as the lower and upper limits: <tt>sum_(i=1)^n</tt>. Without scripts they read as the plain nary operator; with both they read to the nary class carrying its limits (PM 1001’s nary family).</p>
</clause>

<clause id="_bfb68caa-6a8c-5943-d3fc-79162b5296b3" obligation="normative">
<title id="_3858b80e-e76b-1aea-27a4-df59aa37c9c0">Sub/sup classes</title>
<p id="_15190f23-aba2-8e9b-2441-e9e9b6ae9521"><tt>lim</tt> and <tt>log</tt> take an operand with optional scripts: <tt>lim_(x-&gt;0)</tt>, <tt>log_2 x</tt>. They read to their classes with the limits attached; a bare <tt>lim x</tt> is the operator over its operand.</p>
</clause>

<clause id="_c27ce9ec-4997-8aa6-f4b4-1d16cece8c0e" obligation="normative">
<title id="_cfeaafb7-5bb9-266f-4095-c34e609ca1c1">Font style names</title>
<table id="_0a545fa3-3fa9-bb6f-47af-de7dfa527a67"><colgroup><col width="20%"/><col width="20%"/><col width="20%"/><col width="20%"/><col width="20%"/></colgroup>
<name id="_d7a3d025-00db-9e94-d0f6-ab623e5151fb">The font style tokens</name>
<thead><tr id="_58732e97-135c-3663-84bc-39effcc04af8"><th id="_eec2145c-b8ac-dec0-ed6e-97127cfa723c" valign="top" align="left"/><th id="_b5c04843-e0aa-6895-7f0f-04005a4c8bd8" valign="top" align="left"/><th id="_ab4ad538-cc7c-6771-60a8-9a1d4440e87f" valign="top" align="left"/><th id="_5ea8793f-163a-eaa1-e5c2-757d19fdfc01" valign="top" align="left"/><th id="_aedf948d-70c8-c7dc-57ff-2e2146475477" valign="top" align="left"/></tr></thead>
<tbody><tr id="_74ec6b59-57f4-18e3-0046-f9bb4b36d0a5"><td id="_af21c58d-c829-14d9-726e-36bd4664c0b5" valign="top" align="left"><tt>mathfrak</tt></td>
<td id="_efc29110-3b27-e028-c3c6-d651a6e98fa0" valign="top" align="left"><tt>mathcal</tt></td>
<td id="_86ff9b84-e61b-080c-9538-e02939d4c0be" valign="top" align="left"><tt>mathbb</tt></td>
<td id="_cf71f916-6aad-b832-505d-c2cc77eea754" valign="top" align="left"><tt>mathsf</tt></td>
<td id="_44633ab6-b494-ed75-a44d-c28a68daa908" valign="top" align="left"><tt>mathtt</tt></td>
</tr><tr id="_10958cab-9f7d-1b26-330d-2afc9be32795"><td id="_fc3b2f22-d28d-169d-7984-8a4c0f00bedf" valign="top" align="left"><tt>mathbf</tt></td>
<td id="_20c04770-2d7c-2f90-519e-955f8ab3a92c" valign="top" align="left"><tt>bbb</tt></td>
<td id="_313fe28b-73ec-76f0-6fb4-402427353ce2" valign="top" align="left"><tt>bb</tt></td>
<td id="_152680bd-c5c3-c93b-62b8-b5c744c5a329" valign="top" align="left"><tt>rm</tt></td>
<td id="_49c19451-b3df-4924-8fdc-fe439e2c8be9" valign="top" align="left"><tt>fr</tt></td>
</tr><tr id="_dfbdacd2-ebf8-d0cb-37d9-4a94bb709e09"><td id="_14687b74-d5bc-ac53-a1eb-d38462b1520b" valign="top" align="left"><tt>cc</tt></td>
<td id="_eca5712d-6de4-405c-a41b-7edbda8d1370" valign="top" align="left"><tt>sf</tt></td>
<td id="_aafb2d65-0f85-e17c-c55c-e64d72231e82" valign="top" align="left"><tt>tt</tt></td>
<td id="_7a15fb0b-d439-1209-ce59-eb0addadedd5" valign="top" align="left"><tt>ii</tt></td>
<td id="_471864d4-71fd-cd71-7954-58c3726e6740" valign="top" align="left"/></tr></tbody>
</table>

<p id="_eb0bc20c-690a-24c5-52fa-f6d4acf53d1b">Each applies its variant to the operand (PM 1001’s font styles). <tt>rm</tt> reads to the upright variant, <tt>ii</tt> to the italic — the shorthand spellings the implementation carries alongside the <tt>math</tt>-prefixed ones.</p>

<p id="_0842f574-9d4a-57f5-50b3-0d7f32b7631c"><strong>Compatibility note.</strong> The public definition carries <tt>mathfrak</tt>, <tt>mathcal</tt>, <tt>mathbb</tt>, <tt>mathsf</tt>, <tt>mathtt</tt>, <tt>mathbf</tt> and the shorthands <tt>fr</tt>, <tt>cc</tt>, <tt>bb</tt>, <tt>sf</tt>, <tt>tt</tt>. Plurimath adds <tt>rm</tt> and <tt>ii</tt> for the upright and italic readings the set lacked.</p>
</clause>

<clause id="_5b7437b7-00a3-1c5a-5dd2-022bfc723669" obligation="normative">
<title id="_7ee47bb5-1fba-dd7a-e9a2-37eeccefaf5b">The special bold alphabets</title>
<p id="_f0de3ddf-f0a1-e297-b099-7174f1ca7dbc"><tt>ZZ</tt>, <tt>RR</tt>, <tt>QQ</tt>, <tt>NN</tt>, <tt>CC</tt> read to the double-struck number-set letters — the natural, integer, rational, real and complex number symbols — as single tokens. They are the one place a bare uppercase pair is a token, and the reader’s longest-match resolves them before any two-symbol reading.</p>

<p id="_d5278bb8-07d7-994f-19ed-7436f296ea61"><strong>Compatibility note.</strong> These are a Plurimath addition to the public definition, which writes them as <tt>bbZ</tt> and kin.</p>
</clause>

<clause id="_c4815ee4-89e2-0640-acde-c7d84ba26476" obligation="normative">
<title id="_fa798d21-2638-5a47-5e1a-d8b850fad18f">Adjacency vs parentheses</title>
<p id="_5b0e476c-220e-eb55-d8ad-f7405fdb74ea">Every unary class accepts both <tt>name(x)</tt> and <tt>name x</tt>; the parenthesised form is unambiguous and the adjacency form takes one operand — <tt>sqrt x+1</tt> roots <tt>x</tt> only. Binary and ternary classes require their parenthesised arguments: <tt>frac(a)(b)</tt> has no adjacency form, because two adjacency arguments would not be distinguishable. The rule is uniform: one-argument constructs may go bare; multi-argument constructs group.</p>
</clause>

<clause id="_7ecb9c33-7a2a-abba-f254-c4d3e64a9c87" obligation="normative">
<title id="_692b0fa6-d6c2-62a8-6ac6-0f796e8f53b7">Overloading, deliberately absent</title>
<p id="_60473619-7f53-b8f0-25ec-f90fee2ee56f">No token serves two construct roles: <tt>root</tt> is always the binary root, never a radical sign; <tt>text</tt> is always the text function. The reader’s classification is single-valued per token (clause 6), and the notation pays for that simplicity with a few explicit spellings (<tt>obrace</tt>/<tt>ubrace</tt> for the braces rather than overloading the accents).</p>
</clause>

<clause id="_ffe49e7d-c611-88a5-aa96-5e95ff252ef1" obligation="normative">
<title id="_50a7b7ae-75e2-6055-916c-f8d88d7b3735">Worked readings per shape</title>
<example id="_14422481-4aec-8b55-e787-62a01d2643d5"><p id="_e8815234-bd2d-c0a3-1829-524b431ee504"><tt>sqrt(x+1)</tt> and <tt>sqrt x+1</tt>. <strong>Expected outcome.</strong> the root of the sum in the first; the root of <tt>x</tt> plus one in the second — the parenthesised form groups, the adjacency form takes one operand.</p>
</example>

<example id="_0fd2aaf7-e5bb-fb4e-e451-d085e80ab1e0"><p id="_81992cd0-83a0-105f-453b-87d2c2c598c3"><tt>frac(a)(b)</tt>, <tt>root(x)(3)</tt>, <tt>underset(a)(b)</tt>, <tt>overset(a)(b)</tt>, <tt>stackrel(a)(b)</tt>. <strong>Expected outcome.</strong> <tt>Frac</tt>, <tt>Root</tt>, <tt>Underset</tt>, <tt>Overset</tt>, <tt>Stackrel</tt> — operand order per Annex A’s binary table.</p>
</example>

<example id="_29c3d9e3-c576-5bbf-4f38-e69d5510350c"><p id="_8bfdc279-27d4-4e2b-467c-d8a6df6922ee"><tt>sum_(i=1)^n f(i)</tt> and bare <tt>int f(x) dx</tt>. <strong>Expected outcome.</strong> the nary with both limits in the first; the plain nary over its operand in the second — the <tt>dx</tt> is adjacency, not a second argument.</p>
</example>

<example id="_32633e16-6d34-8c8c-78d0-a20db9e593c9"><p id="_97450a9f-6dcb-4ff5-4223-8fa2b184e2c4"><tt>lim_(x-&gt;0) x/ sin x</tt> and <tt>log_2 8</tt>. <strong>Expected outcome.</strong> the limit class carrying its lower script; the logarithm with base <tt>2</tt> over <tt>8</tt> — the sub/sup readings with their scripts.</p>
</example>

<example id="_b46ea4ab-750f-a17d-a3cb-3df253660b8e"><p id="_ade677e0-1b96-67d0-3b76-b7631bfbb1f9"><tt>mathbf(F) = m mathbf(a)</tt> and <tt>bbR</tt>. <strong>Expected outcome.</strong> font style nodes over the names; the double-struck <tt>R</tt> from the special alphabet token.</p>
</example>
</clause>

<clause id="_ad2aa497-2c8a-f612-a09d-a6ae19926476" obligation="normative">
<title id="_52bfe53f-f78b-ec2a-dc25-c77b3b69152a">What the shapes do not do</title>
<p id="_1eb0733e-f0a7-1b81-e7cf-f90d4d3ca555">No class accepts keyword arguments, optional named forms or arity overloads: a name’s shape is fixed by its class list membership. <tt>sqrt</tt> cannot take a degree (that is <tt>root</tt>), <tt>frac</tt> cannot take three arguments (nesting composes), and no unary class reads a second adjacency operand as part of itself — adjacency after a unary is the notation’s product, always.</p>
</clause>

<clause id="_60f38783-64f0-8fec-db0c-efdcabaa70ab" obligation="normative">
<title id="_476e2785-abf8-aa06-be30-9983c6646b1b">The construct shapes at a glance</title>
<p id="_b7d17c2a-b6e4-f462-73e1-8132cd6ad8c2">One shape per class, from the constants, is the notation’s whole economy: the reader classifies once and the argument grammar follows. The table of the four shapes, the complete class lists of this clause and Annex A, and the corpus’s per-class vectors are three views of one fact. Nothing in this document introduces a construct that is not in the lists, and nothing in the lists is absent from this document.</p>
</clause>
</clause>

<clause id="_aca9f7b1-0eac-f1b0-7781-110cadb9e246" obligation="normative">
<title id="_0f26dfb6-c61a-4efd-8cd1-f26801021f0f">Tables and matrices</title>
<clause id="_bc00190a-eb85-9cb6-3f42-e211a539efc6" obligation="normative">
<title id="_83e07005-8901-d125-38f8-4a63170ea430">The bracket forms</title>
<p id="_d2817894-b8d2-4d7d-b6cd-8d516dcb5620">A double-bracketed, comma-separated grid reads as a table: [[a,b,[c,d]]] is a two-by-two matrix — each inner bracket pair is a row, commas separate the cells within it. The delimited variants wrap the grid in a fence, and the fence selects the class:</p>

<table id="_5ad30d96-14ec-ac1c-fff7-8ace49c853ef"><colgroup><col width="25%"/><col width="37.5%"/><col width="37.5%"/></colgroup>
<name id="_a39d5cbc-340a-c977-5c5d-8ccb45d7b698">The table forms</name>
<thead><tr id="_199f1608-3aee-021d-3a85-484cac2f0cc4"><th id="_1809738b-f3b8-365f-b352-605965cc98a7" valign="top" align="left">Grid</th>
<th id="_7ee0a810-9a7e-ffc0-de65-924c7b55aa23" valign="top" align="left">Wrapped in</th>
<th id="_37598a84-2ee3-0b9c-21e8-d54a09316b0a" valign="top" align="left">Yields</th>
</tr></thead>
<tbody><tr id="_d4b0377c-1117-1ff8-20ec-ba65e7fba913"><td id="_502a337b-5132-8e76-490d-539970a2b14e" valign="top" align="left">double-bracket grid</td>
<td id="_56c358f7-6c36-7982-2c11-dc3f325871ac" valign="top" align="left">nothing</td>
<td id="_bda4df70-4271-83fb-d258-d90128dc1c89" valign="top" align="left"><tt>Matrix</tt></td>
</tr><tr id="_e72928f6-1e2a-39b0-fe39-30deaba06e56"><td id="_2889077f-ad4c-e412-f1ca-e5cb48a8b7c8" valign="top" align="left">double-bracket grid</td>
<td id="_c1465a36-5dfc-8e76-4427-646f7facf3d9" valign="top" align="left">round fences</td>
<td id="_c9159a48-0db3-a668-021f-e1405a264da2" valign="top" align="left"><tt>Pmatrix</tt></td>
</tr><tr id="_c944f3c6-aef4-cfca-db7a-1e171d9c94a8"><td id="_590b6ff6-5e27-4611-fb37-36ac059c8ffa" valign="top" align="left">double-bracket grid</td>
<td id="_c7571d92-54fe-bb1e-c5f5-3852f98acbca" valign="top" align="left">brace fences</td>
<td id="_d305230f-baa9-7152-b178-ae31b35cd63f" valign="top" align="left"><tt>Bmatrix</tt></td>
</tr><tr id="_56c9f20d-3285-be3e-168b-41268a4e0f5e"><td id="_e0497376-e9e9-c91a-1d52-84e954acfe2c" valign="top" align="left">double-bracket grid</td>
<td id="_1658f1b7-3b19-7f85-17e9-52ec0760f7ea" valign="top" align="left">bar fences</td>
<td id="_db9d8cc2-1cbf-8443-ae93-6fd32c225731" valign="top" align="left"><tt>Vmatrix</tt></td>
</tr><tr id="_d8420528-8405-dd19-513a-247ab76929a5"><td id="_c00b974e-7821-0ffc-6ca6-89509d0e458b" valign="top" align="left">the cases form</td>
<td id="_fa69305b-2b47-e9db-45bf-ec2483bc41fa" valign="top" align="left">left brace, null right</td>
<td id="_70f5ddd3-41e6-a71c-b96e-fed5cb8b7575" valign="top" align="left"><tt>Cases</tt></td>
</tr></tbody>
</table>
</clause>

<clause id="_98508a1d-0be5-39ee-d452-74d681a91b70" obligation="normative">
<title id="_d6e345e5-f352-2ad5-d4b1-6443aee63531">Alignment</title>
<p id="_6430544c-c680-37da-1a58-b557e0a74be3"><tt>align</tt> and <tt>eqarray</tt> content carries the ampersand alignment points their input wrote; <tt>split</tt> and <tt>multline</tt> preserve line structure. The table node keeps the alignment as data (PM 1001’s table classes), and the writer surfaces emit it per their mappings.</p>
</clause>

<clause id="_fcae9b0f-66ef-1008-d7f4-806f84cda9ff" obligation="normative">
<title id="_4c6eb2e3-0a0e-dba8-ac0e-a8875afc5b90">Cells</title>
<p id="_597f1642-1b53-2574-2d2b-57f2014c47d2">A cell’s content is a full expression: <tt>[[x^2, text(notes)],[frac(a)(b), sum_(i=1)^n i]]</tt> reads all four cells as complete subtrees. An empty cell — nothing between separators — reads to the <tt>None</tt> node.</p>

<example id="_123d8d2f-0569-de1a-8230-12af12c5dd4a"><p id="_eb3ba85e-7ef7-833e-5447-732d6300bac2"><tt>[[1,2],[3,4]]</tt> and <tt>([1,2],[3,4])</tt> with round fences. <strong>Expected outcome.</strong> the first is a plain <tt>Matrix</tt>; the second is the same grid read to <tt>Pmatrix</tt>. Both round-trip per PM 1003.</p>
</example>
</clause>

<clause id="_4557dd3b-4129-58aa-0f83-18517ced998c" obligation="normative">
<title id="_cb604d3e-85f3-0948-862b-3207d5b33adb">Row and cell rules, precisely</title>
<p id="_8f13699b-7a18-0a8a-2a9f-1b77c2bd1c31">A table grid is a bracketed sequence of bracketed rows: <tt>[[row],[row]]</tt>. Inside a row, commas separate cells; inside a cell, a full expression goes. The reader allows trailing separators to read as an empty trailing cell — the corpus pins whether it warns — and a row mismatch (two cells in one row, three in the next) reads as written: tables are not square by force.</p>
</clause>

<clause id="_9ac4ca2c-9556-1e32-8247-bd357dafd2d6" obligation="normative">
<title id="_a6a4fa4e-5476-9ff8-bd05-8f288e9cebcb">The delimited forms, precisely</title>
<p id="_2d950971-ff7d-9161-2171-2cf32a58927b">A grid wrapped in <tt>(...)</tt> reads to <tt>Pmatrix</tt>; in <tt>{...)</tt> — the brace pair of Annex C — to <tt>Bmatrix</tt>; between bar pairs to <tt>Vmatrix</tt>; and the <tt>cases</tt> reading comes from the input form the public definition writes. The delimiters live on the tree as the table class; the writer surfaces re-emit the class’s delimiters, which is why the class matters.</p>
</clause>

<clause id="_06f4a537-2228-1978-1401-a6029bb33e9a" obligation="normative">
<title id="_20b3a266-74ef-f775-736f-c155789e464e">Alignment, precisely</title>
<p id="_ff6c4f5d-347c-486f-b15a-0555ad58340a"><tt>align</tt> and <tt>eqarray</tt> content uses <tt>&amp;</tt> for alignment points and <tt>\</tt> for line breaks, the grid conventions the public definition carries. The alignment points are data: the table node keeps them, the writer surfaces emit them where their format has alignment (`aligned` in LaTeX, `maligngroup` in MathML per its mapping), and the round trip preserves the count and order of points. A surface without alignment drops them as presentation (PM 1001’s fallback rule).</p>
</clause>

<clause id="_5273458c-8467-077e-70e9-e8c22f246004" obligation="normative">
<title id="_96813f1c-271b-7908-18c4-81a636451c51">Tables inside tables</title>
<p id="_67faa535-a652-ed7a-78f1-d8e9176c1e65">A cell may carry a grid: <tt><bookmark id="_2acde1d6-6b62-e0b3-5c4d-a21c70867fa6" anchor="a"/>],[c,d]]</tt> nests. Nesting depth is unbounded; the corpus carries the two-deep case, and nothing in the reader’s recursion limits applies to it that does not apply to any grouping.</p>
</clause>

<clause id="_e8eea2cd-d50d-a440-2ef4-1bb92c68cbd1" obligation="normative">
<title id="_47453004-98d6-debf-7a15-69ac49c01825">Tables in the corpus, and what they freeze</title>
<p id="_37191085-4a55-d58f-858b-a1a95836420c">The table vectors freeze: each bracket form with a known grid; the alignment forms with their points; the empty-cell reading; the nested grid; and the row-mismatch reading as written. Tables are the notation’s most structure-heavy construct, and the corpus treats them accordingly — a table reading that drops a cell cannot hide.</p>
</clause>
</clause>

<clause id="_7e29411f-8f73-8176-d37c-60c0d36a1770" obligation="normative">
<title id="_afdd2b6b-c99d-4497-55e4-c1bc1a18c563">Scripts and fractions</title>
<clause id="_d4a96e9c-dfd2-bfe2-b31e-806c786047bc" obligation="normative">
<title id="_60cff6eb-2842-f419-d600-fcfb8910266b">Scripts</title>
<p id="_71bea557-9a96-908f-b6f8-c0cea23bb650"><tt>^</tt> attaches a superscript and <tt>_</tt> a subscript to the preceding operand: <tt>x^2</tt>, <tt>x_1</tt>, <tt>x_1^2</tt>. The operand is the preceding group — a token, a parenthesised expression, or a construct’s result — and the script content is the following group. Both orders of sub and superscript on one operand read to <tt>PowerBase</tt>; a lone script reads to <tt>Power</tt> or <tt>Base</tt>.</p>

<example id="_c74f528e-df3b-9adb-c35d-57bc785b9274"><p id="_44e2b22e-5aee-aa58-47f5-4c7c7ce0f0b9"><tt>x^2</tt>, <tt>x_1</tt>, <tt>x_1^2</tt>, <tt>x^2_1</tt>. <strong>Expected outcome.</strong> the four readings: <tt>Power</tt>, <tt>Base</tt>, and two <tt>PowerBase</tt> nodes that are equal — the script order on one operand is not significant.</p>
</example>
</clause>

<clause id="_ff0c95f6-ff9a-450d-a4cf-ad2f6ebb52d9" obligation="normative">
<title id="_c0c9af4e-c5d6-03bb-f22e-57b59b92a805">Scripts on constructs</title>
<p id="_1f7d903b-a5b7-f6be-1ee5-5bb06605e755">Scripts attach to the construct that just closed: <tt>sum_(i=1)^n</tt>, <tt>lim_(x-&gt;0)</tt>, <tt>log_2 x</tt>. The sub/sup classes read the scripts as their limits; the ternary classes read them as the nary limits.</p>
</clause>

<clause id="_9cf19c2d-0b22-7a1f-4c6d-8eca9b20b9b1" obligation="normative">
<title id="_b7a8993e-e9b5-3d52-33e4-db9e733f908c">Fractions</title>
<p id="_3f168474-ba06-c047-a5b5-3b20ace7934b"><tt>a/b</tt> reads to <tt>Frac</tt>: the operand before the slash is the numerator, the operand after is the denominator, each being a token or a group. <stem block="false" type="MathML"><math xmlns="http://www.w3.org/1998/Math/MathML">
  <mstyle displaystyle="false">
    <mrow>
      <mo>(</mo>
      <mfrac>
        <mrow>
          <mi>n</mi>
          <mrow>
            <mo>(</mo>
            <mi>n</mi>
            <mo>+</mo>
            <mn>1</mn>
            <mo>)</mo>
          </mrow>
        </mrow>
        <mn>2</mn>
      </mfrac>
      <mo>)</mo>
    </mrow>
  </mstyle>
</math><asciimath>((n(n+1))/2)</asciimath></stem> shows the idiom — groups on both sides of the slash. The slash binds tighter than addition and looser than scripts: <tt>a/b^2</tt> is a over <tt>b²</tt>, and <tt>a^2/b</tt> is <tt>a²</tt> over <tt>b</tt>.</p>
</clause>

<clause id="_2fe29c3d-9f35-abdc-f407-96fa2e6698bf" obligation="normative">
<title id="_0f56e0c1-cd58-624b-2ed0-6be72f721796">Precedence interplay</title>
<p id="_4f2a7189-776b-e065-94d5-ee38944ffeb0">The full precedence is clause 13; this clause states the local rules: scripts bind tightest, then fences and constructs, then fractions, then adjacency, then the operators. The reader’s behaviour is the definition; the corpus pins the contested shapes vector by vector.</p>
</clause>

<clause id="_1efbaecd-f04f-a50c-ba55-c7aeca106709" obligation="normative">
<title id="_559cfaca-914e-7027-ac10-a5c46066a548">Scripts on fences and constructs, worked</title>
<p id="_7c58464c-fca0-86f5-724d-9dbbc5b665e5"><stem block="false" type="MathML"><math xmlns="http://www.w3.org/1998/Math/MathML">
  <mstyle displaystyle="false">
    <msup>
      <mrow>
        <mo>(</mo>
        <mfrac>
          <mrow>
            <mi>n</mi>
            <mrow>
              <mo>(</mo>
              <mi>n</mi>
              <mo>+</mo>
              <mn>1</mn>
              <mo>)</mo>
            </mrow>
          </mrow>
          <mn>2</mn>
        </mfrac>
        <mo>)</mo>
      </mrow>
      <mn>2</mn>
    </msup>
  </mstyle>
</math><asciimath>((n(n+1))/2)^2</asciimath></stem> — the worked case of clause 5 — and its kin:</p>

<table id="_222be496-4132-81ec-f5e8-2183b2cfe5fd"><colgroup><col width="33.3333%"/><col width="66.6667%"/></colgroup>
<name id="_77995c99-58dc-e960-6915-08d846f89fc5">.Script attachments</name>
<thead><tr id="_2e32bc57-4ff7-99f5-2e25-21af45c65271"><th id="_534f9654-1af2-f0a1-be9a-d603b0adf8aa" valign="top" align="left">Input</th>
<th id="_03dfce57-a26e-a7d8-f6f2-b8e93d7a151a" valign="top" align="left">Reading</th>
</tr></thead>
<tbody><tr id="_5ed39407-6df6-ed09-bacf-9a4a79764299"><td id="_e5df65d4-cea0-feb5-15a0-9e03473a6bf4" valign="top" align="left"><tt>sqrt(x)^3</tt></td>
<td id="_85fa58ce-4ca1-bb42-8b1e-2178fd86f333" valign="top" align="left">the root, cubed — the script attaches to the construct’s result</td>
</tr><tr id="_4142231e-c3ed-0ab2-0966-c288bdc96733"><td id="_77b234ce-aa48-9ce2-3d33-4cded153f025" valign="top" align="left"><tt>frac(a)(b)^2</tt></td>
<td id="_c1facc6b-4426-6a22-06e2-df66de598967" valign="top" align="left">the fraction, squared</td>
</tr><tr id="_fdef9ffb-7416-ea21-1874-313e2e5d636e"><td id="_877f9585-c180-d585-63b2-480dbfc8dad1" valign="top" align="left"><tt>x_1^2 + y^2_1</tt></td>
<td id="_a9b2ee2d-4c9c-8cf8-7fb5-dee1ee9f1d3c" valign="top" align="left">two <tt>PowerBase</tt>s, script order insignificant</td>
</tr><tr id="_d2e84c84-26be-f280-0de4-2ab7c395683c"><td id="_e08f9997-8eee-fdf4-81e5-300ff4874d93" valign="top" align="left"><tt>sum_(i=1)^n</tt></td>
<td id="_449a493a-8bf8-4813-36f8-3c91038752c3" valign="top" align="left">the nary with both limits</td>
</tr><tr id="_dfef03d4-8d9c-84d0-4ed5-e62d7e85fac9"><td id="_86541332-a692-b182-6e5b-ed3fcad7a65b" valign="top" align="left"><tt>lim_(x-&gt;0) f(x)</tt></td>
<td id="_a6eb2416-b3e0-aa58-e654-8334307a6401" valign="top" align="left">the limit with its lower script, then adjacency</td>
</tr></tbody>
</table>
</clause>

<clause id="_4898fe12-c057-544f-3992-efa9ba1ae3ce" obligation="normative">
<title id="_7c4f3f91-7bc2-2f21-3b85-e6e8d706a9bc">The fraction edge cases</title>
<p id="_28b21857-1949-837b-c428-20323dbe08ed"><tt>a//b</tt> — the double slash — is not a token; the reader sees two slashes and errors. <tt>a/b/c</tt> is <tt>(a/b)/c</tt> — fractions chain left-associatively. <tt>a/b^2</tt> puts the script inside the denominator: scripts bind tighter than the slash.</p>
</clause>

<clause id="_afe802f4-dc15-eed7-f80f-856a36d5a051" obligation="normative">
<title id="_28e314e3-624f-867a-b97a-a87279c86616">Scripts on scripts</title>
<p id="_01a0105a-07a9-b7e6-5812-48f986ec0e17">A script’s content may carry scripts: <tt>x^(y_1)</tt> nests the base inside the exponent. Nesting is unlimited and the tree carries it as written — the parser’s levels describe sibling precedence, not a depth limit. The corpus carries the two-deep and three-deep cases.</p>
</clause>

<clause id="_4cb25dc2-f3bf-31c5-df23-86383020b81a" obligation="normative">
<title id="_56360bcf-67cf-816a-6f65-5d3fdb267c97">The empty script</title>
<p id="_47fa0a5f-9e04-c324-75f9-2cd7effaf893"><tt>x^()</tt> — a script with an empty group — reads to a script node with an empty operand: the <tt>None</tt> node fills the slot, the same construct MathML uses for the empty half of a pair. The author who means “nothing here yet” has a notation; the corpus pins it.</p>
</clause>
</clause>

<clause id="_bd23e85e-cd0a-7d08-6ec3-4a100d1f181a" obligation="normative">
<title id="_4ec2da85-0de4-ebfa-d0cd-fba5b9360a56">Quoted strings and the channel</title>
<clause id="_e0703c77-d187-8f47-5d8e-6e5bbcfe95ae" obligation="normative">
<title id="_f459cbe7-f4d8-dc01-da81-fbcfbd8203d9">The quoted string</title>
<p id="_5fa7fc08-1651-612a-dced-1d95543550d5">A double-quoted string reads verbatim as a <tt>Text</tt> node: no command processing, no entity decoding, no interpretation. Quotes inside a quoted string are escaped by doubling — the corpus pins the exact escape rule the reader applies.</p>
</clause>

<clause id="_21eac88b-d96d-226c-1fa4-d5fa913d1b54" obligation="normative">
<title id="_8f607dab-8973-80d2-7d12-19b593bef621">The channel</title>
<p id="_535780e2-6682-72cf-501b-624c166c8bf5">One string form is reserved: <tt>"unitsml(&lt;expression&gt;)"</tt>, with no leading or trailing whitespace inside the outer quotes, reads as a <tt>Unitsml</tt> node carrying the expression (clause 10 of PM 1002’s unit rules apply). The channel is the only way units enter AsciiMath machine-readably.</p>

<table id="_af28f098-f071-77ae-20d8-3967640f9217"><colgroup><col width="33.3333%"/><col width="66.6667%"/></colgroup>
<name id="_c5121730-d3c4-1ebf-00cd-ce92602dca42">Channel rules</name>
<thead><tr id="_f0a9243b-8db7-750e-5bf2-4c42201c2bfb"><th id="_5a702cf9-7bc7-6e3b-5b31-ef5d9e1868eb" valign="top" align="left">Input</th>
<th id="_c9b47d2f-e39e-5c91-7835-c5e4d48f4d78" valign="top" align="left">Reading</th>
</tr></thead>
<tbody><tr id="_de8f5319-f98c-c431-48c6-d929726b073e"><td id="_159d949b-7417-e2e0-1fc8-83d894d33d07" valign="top" align="left"><tt>"unitsml(g)"</tt></td>
<td id="_b2d13a29-5a17-9147-a8f3-d0930eb052a6" valign="top" align="left">the unit embedding of <tt>g</tt></td>
</tr><tr id="_7e70339b-a0f5-b5f0-1d94-2edde05f47e9"><td id="_082be597-4cbb-a4bc-3437-fc22d0120d3c" valign="top" align="left"><tt>"unitsml(m/s2)"</tt></td>
<td id="_2f868717-263f-3bc4-4d81-6d551297cc0e" valign="top" align="left">the unit embedding of <tt>m/s2</tt></td>
</tr><tr id="_32ff07cb-b837-b368-3858-9568baa37a96"><td id="_ebcc8f84-d576-2616-3683-8e363caaae53" valign="top" align="left"><tt>" unitsml(g)"</tt></td>
<td id="_baba1691-65c7-4c48-7935-d95a9d95a853" valign="top" align="left">a <tt>Text</tt> node — the leading space disqualifies the channel</td>
</tr><tr id="_5d494d20-31f5-d5e6-1e48-f9cffe09429e"><td id="_a4312c63-abeb-e787-d8c6-8102a24f2ce0" valign="top" align="left"><tt>"unitsml(…​)"</tt> with an unreadable expression</td>
<td id="_0337c480-9502-74bd-3c85-a28fac4a5418" valign="top" align="left">a reading error naming the expression</td>
</tr><tr id="_a9141766-939f-60a0-7f25-180db7ace737"><td id="_dadc784c-9e39-e104-6456-9a5403fcf5d8" valign="top" align="left"><tt>"hello"</tt></td>
<td id="_0f22c162-1282-c38a-4f07-ac83f4d8c8ce" valign="top" align="left">a <tt>Text</tt> node</td>
</tr></tbody>
</table>
</clause>

<clause id="_ff6a34e8-abe9-81fd-acb3-b02efd1b0d64" obligation="normative">
<title id="_dd392607-6836-3c43-d7a4-ddb30c4bea0d">Why quotes are literal</title>
<p id="_3b75becc-8bc8-f542-413f-fff62acd5de6">The channel’s safety is the literalness: a quoted string never executes a command, so content the writer intends as data cannot become structure. This is what lets uncertainty encodings (PM 1002) place units in the channel — the unit expression is data by construction.</p>
</clause>

<clause id="_195b190c-2048-5d2c-5870-f1b0a7027e09" obligation="normative">
<title id="_c01219e2-61d6-0b53-64f6-395241f00179">Escapes, precisely</title>
<p id="_7093d5d5-93cb-9aee-18b5-857c1db7b69f">Inside a quoted string, the only escape is the doubled quote for a quote. Backslashes are literal — a quoted string carries <tt>\frac</tt> as four characters plus text, never as a command. This is the channel’s contract: verbatim means verbatim, and the corpus carries a string with a backslash, a doubled quote, and Unicode to pin all three.</p>
</clause>

<clause id="_0089388b-017c-4f50-9b2e-a582677efec8" obligation="normative">
<title id="_b6052fc5-1559-0a81-60d7-8975633fe951">The channel’s content grammar</title>
<p id="_c53dbedf-8371-4d0a-9968-1e00fc1f6401">The channel’s expression is the asciiunits content language (CalConnect 36817), read by the unit reader at reading time. The reader’s refusal propagates as a reading error — the channel never stores an expression it could not read, because the unit embedding is constructed, not deferred. A unit the language accepts but the registry lacks symbols for is a unit-reader matter, and its refusal names the missing piece.</p>
</clause>

<clause id="_f839bd0f-b308-b1b3-d73d-29f33872d093" obligation="normative">
<title id="_6268f3fa-1cc5-6e96-99e0-57701a800efd">Placement in expressions</title>
<p id="_6f4ad482-34fd-8e56-af8a-a57379980a88">A channel string is an operand: it sits in a product (<tt>3 "unitsml(m)"</tt>), attaches after uncertainty calls (PM 1002), and stands alone as a unit statement. It never opens or closes a construct — quotes inside construct arguments are text unless the argument’s grammar says otherwise (the uncertainty calls accept the channel after the call, not inside its parentheses).</p>
</clause>

<clause id="_74c392f6-989c-bfb7-bf85-942bacb7d6c6" obligation="normative">
<title id="_947707aa-357c-5a84-ab56-ad303226f9d2">The channel and PM 1002, in one place</title>
<p id="_f5711ce9-9e17-7b65-ccf1-a9f89d063222">The uncertainty forms place units in the channel (<tt>ustd(10.3, 0.2) "unitsml(g)"</tt>); the visible placement is the fallback. The channel’s grammar is the unit reader’s, and the channel’s authority is the same as every marker’s in PM 1002: the machine-readable form wins, the visible form is regenerated. Nothing in this clause adds rules — it is where the two documents meet, stated once so no reader has to reconstruct the seam.</p>
</clause>
</clause>

<clause id="_d27cdf00-9ea3-e25e-9214-57a6433cff65" obligation="normative">
<title id="_c1b23d33-a4d9-11cc-4813-aad99e257dc7">Uncertainty forms</title>
<clause id="_2451a589-ce7f-0f1a-6a1b-e511d8a36479" obligation="normative">
<title id="_ecbed22d-d88a-86c9-2f3d-68112dc0b0d4">The calls</title>
<p id="_899210ed-8fe1-9248-ff75-1f4e16197fc9">The uncertainty forms read per PM 1002’s AsciiMath encodings: <tt>ustd(v, m)</tt>, <tt>uexp(v, m, k, p)</tt>, <tt>ucov(v, l, u, p, kind)</tt> — the three categories with their argument orders, optional arguments omitted without empty positions.</p>

<table id="_644edab5-b348-76ea-34df-b66ebfa52403"><colgroup><col width="33.3333%"/><col width="66.6667%"/></colgroup>
<name id="_4f2ebd54-a255-b91f-28dd-73a5bee16c4d">Uncertainty reading</name>
<thead><tr id="_49bd8293-b1ab-ced5-b53a-4a08f0184f4f"><th id="_7f18f18b-b7f7-99c3-6855-90bee6568fa6" valign="top" align="left">Input</th>
<th id="_7608e5b3-560f-c4ba-e385-482351a1a23c" valign="top" align="left">Yields</th>
</tr></thead>
<tbody><tr id="_7b6c2bba-eed3-7898-83e2-2f37518d7419"><td id="_4797aa85-e120-0bf0-708f-8e71fd49bdbf" valign="top" align="left"><tt>ustd(10.3, 0.2)</tt></td>
<td id="_5a5f5d5a-d7f4-f876-ddb2-77bb8e09fc89" valign="top" align="left">standard, absolute</td>
</tr><tr id="_e1f03e78-6792-fe60-968d-febbfcb76847"><td id="_d21d3986-1800-a484-5574-5e034b9ac253" valign="top" align="left"><tt>uexp(10.3, 0.5, 2, 0.95)</tt></td>
<td id="_b71f3e8f-56c1-a353-a9a0-afe04a760a31" valign="top" align="left">expanded with factor and probability</td>
</tr><tr id="_c8258217-e81d-4adb-7c7a-072a4284b99c"><td id="_691b79f8-d2e7-ea53-8661-29402ca32c2e" valign="top" align="left"><tt>uexp(10.3, 0.5, 2)</tt></td>
<td id="_7cf055ea-8ae1-130f-5e83-843605361891" valign="top" align="left">expanded without probability</td>
</tr><tr id="_eba80b8d-0eb9-569e-d007-537f67736163"><td id="_03366c95-5d19-5e5e-1540-e01b06fd20ec" valign="top" align="left"><tt>ucov(10.3, 9.9, 10.7, 0.95, shortest)</tt></td>
<td id="_faa1bb3c-7df8-a3ae-3196-36f8c06a1fce" valign="top" align="left">interval, shortest kind</td>
</tr><tr id="_2975b3d4-d282-4511-0c42-97f43969aac6"><td id="_aec71899-a345-67af-b41b-51dfa7ee7430" valign="top" align="left"><tt>ucov(10.3, 9.9, 10.7, symmetric)</tt></td>
<td id="_f0bd2d1e-7538-c5ec-5b8f-1d845186490c" valign="top" align="left">interval, probabilistically symmetric</td>
</tr><tr id="_cf6e7a92-7973-5584-4cdf-f320aa20f878"><td id="_174ef586-3400-60f8-e43f-631178e768fd" valign="top" align="left"><tt>10.3(2)</tt></td>
<td id="_0b2f61f5-183d-4e72-7c5a-62242877269b" valign="top" align="left">standard, concise (the reporting form)</td>
</tr></tbody>
</table>

<p id="_faeff57b-d360-6e2c-2f51-ab614223e920">The <tt>symmetric</tt> spelling reads to the model’s <tt>probabilistically-symmetric</tt>; the reporting form reads per PM 1002’s reconstruction rule — the digit string at the value’s decimal places, <tt>AmbiguousDecimalError</tt> where the places cannot match.</p>
</clause>

<clause id="_9b217c7a-f7d5-0b5a-904a-3c439edee1e6" obligation="normative">
<title id="_c8e07d81-7ff5-81dd-26a3-3ea4ba2547c5">Units on uncertainty</title>
<p id="_a3890676-2e56-14d6-f1c4-d665b32d0e3c">The unit follows in the channel: <tt>ustd(10.3, 0.2) "unitsml(g)"</tt> carries the unit in the embedding. A unit the reader refuses, written visibly after the call, is accepted as the visible placement (PM 1002’s clause 10); the channel form is preferred and the corpus carries both.</p>
</clause>

<clause id="_d7bb8d35-29dd-d7ca-8174-d43449bfe001" obligation="normative">
<title id="_f1d93148-6487-0a50-8cef-bb8cb0a536eb">Shared exponents</title>
<p id="_ce2d8db4-36f3-fd2a-4d4f-76447caa2f96">The shared-exponent reporting form — the concise form where the exponent digits apply to the value’s magnitude — reads to the concise node with the exact decimal shifts the shared-exponent reading defines. The corpus carries the shared-exponent vectors; the rule they pin is that the shift happens at reading, producing the full magnitude, never at evaluation.</p>
</clause>

<clause id="_d748273c-eae0-940b-d810-6b75a7569684" obligation="normative">
<title id="_2fec7501-cea0-60c1-edc0-77c5f2dd7657">Contexts and locale</title>
<p id="_7d9e6d11-5a14-6e74-c26c-f9763e4a40fd">The uncertainty forms are locale-independent in their names (<tt>ustd</tt>/<tt>uexp</tt>/<tt>ucov</tt> are fixed tokens) and locale-sensitive in nothing else. Contexts — the surrounding construct an uncertainty appears in — do not change the reading: the node is the node wherever it sits.</p>
</clause>

<clause id="_0126f085-0d18-4d9f-e1f8-633c56e89450" obligation="normative">
<title id="_643d4cec-adcb-cf7e-9fa1-86309cb37775">Errors</title>
<p id="_29d88fdc-c331-591b-a233-faeb779fa21a">The uncertainty reading errors are PM 1003’s: arity faults and unknown kinds are <tt>ParseError</tt>; the concise place-count mismatch is <tt>AmbiguousDecimalError</tt>; a node that would violate PM 1002’s field rules refuses at construction with <tt>InvalidUncertainty</tt>.</p>

<example id="_9b68a685-0d99-0353-b29a-2d6b6a20d0d7"><p id="_11e0a2a0-53af-baf6-f1cc-01ac3b4739e4"><tt>uexp(10.3, 0.5)</tt> — an expanded call without its factor. <strong>Expected outcome.</strong> <tt>ParseError</tt> naming the call: the expanded form requires the factor.</p>
</example>

<example id="_2229f313-581e-de87-805f-5fdeecd8d270"><p id="_6667c56d-9889-4596-6e6f-a078e9acabcf"><tt>10.3(25)</tt>. <strong>Expected outcome.</strong> <tt>AmbiguousDecimalError</tt>: two digits cannot reconstruct at the value’s one decimal place.</p>
</example>
</clause>

<clause id="_85107a63-a901-faba-2ce4-b7d39fec9eff" obligation="normative">
<title id="_a2cb6a29-955b-a343-f1cc-f3be3990c550">The reporting form in expressions</title>
<p id="_184431a6-2dbd-6db8-7aaa-7621d2730847"><tt>10.3(2)</tt> parses as one uncertainty node, not as <tt>10.3</tt> times <tt>(2)</tt>: the reader recognises the reporting form by its shape — a number directly followed by a parenthesised digit string — and claims it before the adjacency rule could. A genuine product of a number and a parenthesised number, <tt>2(3)</tt>, is therefore also read as the reporting form’s shape — and refused, because <tt>2(3)</tt> cannot reconstruct (the digit string <tt>3</tt> at zero decimal places against a value with none — the corpus carries the vector). The author who means the product writes <tt>2*(3)</tt>.</p>

<p id="_d2498252-7ed9-9596-b90e-84cd0fadc9b1"><strong>Compatibility note.</strong> The reporting form is a Plurimath extension; the baseline reads <tt>10.3(2)</tt> as an adjacency product. The extension is what PM 1002’s concise notation needs, and the corpus carries both the acceptance and the refusal vectors.</p>
</clause>

<clause id="_7fda7df3-ee71-9731-52c9-eea69c9f8495" obligation="normative">
<title id="_5c95d3a3-7fba-0b0e-a47c-889ae4974024">Reading the forms in context</title>
<p id="_6183b19a-00af-25a0-1acd-25a1d780eaa1">Uncertainty nodes compose: <tt>(uexp(10.3, 0.5, 2) + uexp(4.1, 0.2, 2)) "unitsml(g)"</tt> is an addition of two expanded nodes — evaluation refuses it per PM 1004’s clause 12 until propagation exists, but reading and rendering carry it faithfully. The uncertainty forms are content, and everything this document says about composition applies to them.</p>
</clause>

<clause id="_253726b3-fafd-6d98-cb9b-97b78d80c6db" obligation="normative">
<title id="_36ae1202-90c8-c1e7-4548-2879bd3efd69">The complete reading table</title>
<table id="_df28774f-af29-87b1-29fe-f34b95745095"><colgroup><col width="33.3333%"/><col width="66.6667%"/></colgroup>
<name id="_546f07e0-8b98-bc9c-b6c4-46dc2d25573a">Every uncertainty form</name>
<thead><tr id="_f6842595-8bb5-45e0-fe79-fade9d125875"><th id="_5903be13-e828-7712-cb24-0964325c921d" valign="top" align="left">Input</th>
<th id="_f85d93d1-1655-8455-cc12-6c76c49ea826" valign="top" align="left">Node</th>
</tr></thead>
<tbody><tr id="_66c90175-c085-b9d1-7844-0ae293d5aa2c"><td id="_4ef4aa28-2056-849e-f4c0-686eb24678e0" valign="top" align="left"><tt>ustd(10.3, 0.2)</tt></td>
<td id="_53bddfac-597f-32fc-aa48-52210a639f31" valign="top" align="left">standard, absolute, magnitude <tt>0.2</tt></td>
</tr><tr id="_95e88e44-d4ea-bc6d-ded3-1dbc5e53d790"><td id="_b932acbb-3dfe-c8c8-dac8-f42c61ca84b0" valign="top" align="left"><tt>ustd(10.3, 0.2) "unitsml(g)"</tt></td>
<td id="_93f40f8a-1b6c-ce77-d86e-f6b509002db4" valign="top" align="left">standard with unit <tt>g</tt></td>
</tr><tr id="_2ccb84d2-0e25-03ef-d022-fcb3e77937e8"><td id="_ef29b9e2-2196-368a-27f8-4dea69c09fd8" valign="top" align="left"><tt>10.3(2)</tt></td>
<td id="_8d0ea177-66ed-8b8b-d068-24f527cf5d4c" valign="top" align="left">standard, concise</td>
</tr><tr id="_f4452b66-6aac-bd2c-dddd-eeccb875909d"><td id="_8d1c5552-6a9e-f403-1e9c-2c6bc96fee42" valign="top" align="left"><tt>10.3(0)</tt></td>
<td id="_959a214b-de67-c760-4469-b15724b88a9e" valign="top" align="left">standard, concise, magnitude <tt>0</tt> (the zero magnitude is well formed)</td>
</tr><tr id="_c9902b26-9a81-8d11-bcaa-a7f52e0cb869"><td id="_f08861b8-ad45-f02e-0338-7efe8eaec04d" valign="top" align="left"><tt>uexp(10.3, 0.5, 2)</tt></td>
<td id="_249def08-dc6e-1135-3e36-5a755e4ab3ea" valign="top" align="left">expanded, factor <tt>2</tt>, no probability</td>
</tr><tr id="_bb5f3fe8-d04d-fb79-b655-8cd48f845dd6"><td id="_db693341-78c7-b46d-2324-40421d12ac28" valign="top" align="left"><tt>uexp(10.3, 0.5, 2, 0.95)</tt></td>
<td id="_782b67b0-72f6-cc0c-aaf4-22022b7e6434" valign="top" align="left">expanded with probability</td>
</tr><tr id="_f1edbf54-a7cc-5277-6798-bdf09c00d5a0"><td id="_3e198a54-80d6-bd71-abd9-ba5d3468e715" valign="top" align="left"><tt>ucov(10.3, 9.9, 10.7, 0.95, shortest)</tt></td>
<td id="_1048eb2c-42d8-7ea9-6f17-48fa8e37953e" valign="top" align="left">interval, shortest, with probability</td>
</tr><tr id="_0c55d903-fe90-71f6-d3a5-f36089378be0"><td id="_17a27181-0f97-ae42-79c8-cc015d8b132e" valign="top" align="left"><tt>ucov(10.3, 9.9, 10.7, symmetric)</tt></td>
<td id="_a440b97c-10dc-2443-e88c-00d100fa5787" valign="top" align="left">interval, probabilistically symmetric, no probability</td>
</tr></tbody>
</table>
</clause>

<clause id="_fd0d1c79-281b-59ca-9cc5-7e2e1f39981b" obligation="normative">
<title id="_fada3c74-6b42-6cd4-1c90-2b5676ac3f86">The refusals, complete</title>
<table id="_7699c770-383f-7ff5-5500-a6d1f0b0ef36"><colgroup><col width="40%"/><col width="60%"/></colgroup>
<name id="_6b49d05f-5198-a1fd-c386-e2c22ba6a7f5">Reading refusals</name>
<thead><tr id="_c3eb3632-51ce-b1f6-bd13-d2a6593aaa2f"><th id="_a3c3fc66-babe-5683-4288-63e183099f45" valign="top" align="left">Input</th>
<th id="_e8133727-3297-7a44-71ab-7307a5834c1a" valign="top" align="left">Refusal</th>
</tr></thead>
<tbody><tr id="_13fddec0-35b0-ce94-3514-f7cbc26c08ce"><td id="_49e9e9fd-2562-57f0-58e4-205142f71cba" valign="top" align="left"><tt>ustd(10.3)</tt></td>
<td id="_bf573280-ba21-e628-72fc-b5a342652f3e" valign="top" align="left"><tt>ParseError</tt> — the standard call requires the magnitude</td>
</tr><tr id="_b71d38ba-3b69-30c7-36a3-e8cae7066897"><td id="_def396e1-272e-9527-0499-8a0d3374692f" valign="top" align="left"><tt>uexp(10.3, 0.5)</tt></td>
<td id="_ee9c75de-bc35-0d1c-4520-aaa230938adc" valign="top" align="left"><tt>ParseError</tt> — the expanded call requires the factor</td>
</tr><tr id="_f44561a5-a9f6-5ace-75d9-84c62a29893e"><td id="_39be5a96-70b8-8d5e-4a6a-c5a1f72c9b96" valign="top" align="left"><tt>ucov(10.3, 9.9)</tt></td>
<td id="_ba780322-3fb6-39cb-b6a0-2063445657ff" valign="top" align="left"><tt>ParseError</tt> — the interval call requires both endpoints and the kind</td>
</tr><tr id="_3281d71f-a6dc-c433-2914-0a98583654be"><td id="_d069a8a4-dff4-7b77-d540-0af6a3e11b6d" valign="top" align="left"><tt>uexp(10.3, 0.5, 0)</tt></td>
<td id="_c98fccc2-03cd-64bf-6b6e-f48796b11203" valign="top" align="left"><tt>InvalidUncertainty</tt> — the factor must be positive</td>
</tr><tr id="_7ceb7a5c-7d3f-06c5-800a-bda8d8d3ad3b"><td id="_02a23d42-5caf-9181-d1f2-7b6c32b4b6e8" valign="top" align="left"><tt>ucov(..., fastest)</tt></td>
<td id="_f716b5d3-3c5f-58f1-cb01-24724a72f035" valign="top" align="left"><tt>ParseError</tt> — unknown kind</td>
</tr><tr id="_36011e9a-dd12-c2aa-6707-dcf7af4a4925"><td id="_df51ce17-3dd9-d278-481f-610bd2a2e27f" valign="top" align="left"><tt>10.3(25)</tt></td>
<td id="_354176c4-4730-3a1a-6f32-72facfd33438" valign="top" align="left"><tt>AmbiguousDecimalError</tt> — the place mismatch</td>
</tr><tr id="_db3f0632-b0be-7439-a8c3-0814d60984bb"><td id="_63ece0d8-ec33-3caf-2b95-cb8fd30acb57" valign="top" align="left"><tt>2(3)</tt></td>
<td id="_aa677c03-d02c-dcb6-7aef-4821b14e77fe" valign="top" align="left"><tt>AmbiguousDecimalError</tt> — the reporting shape claimed, reconstruction impossible</td>
</tr></tbody>
</table>

<p id="_77a55f04-f789-c063-2b1b-b4eac42339ad"><tt>2(3)</tt> deserves its note: the reporting-form recognition precedes adjacency (clause 12), so a number directly followed by a parenthesised number is claimed as the reporting form and refused on reconstruction. The author who means a product writes <tt>2*(3)</tt>; the corpus carries the pair.</p>
</clause>

<clause id="_31f76b0b-4d7b-e0cc-1df8-7d2e81e3b1af" obligation="normative">
<title id="_5f991967-14c5-334d-978e-47d96aa4a744">Why the uncertainty forms read here</title>
<p id="_23b1ab35-09f1-00b4-fcd9-bbbbe9bc35cf">The uncertainty forms are AsciiMath extensions because uncertainty must be writable in a linear format: a laboratory reporting results in AsciiMath needs to state <tt>10.3(2)</tt> and have it survive. PM 1002 defines what the node means; this clause defines what the text does; PM 1003 wraps the pair in the reader contract. Three documents, one form, each stating its layer — the seam is deliberate and tested by the shared corpus.</p>
</clause>
</clause>

<clause id="_8647d6c0-baf9-3496-b73e-c174a59d69ac" obligation="normative">
<title id="_9bc83d8f-51c8-00a1-0677-94e2bebfbd0b">Precedence and grouping</title>
<clause id="_f7514863-6ed1-8122-7391-d1d8322334cd" obligation="normative">
<title id="_82c0e528-e6c8-849e-44ef-1ed6c8b2a41b">The chain</title>
<p id="_635a7563-703b-a77d-2bb8-26276ae9872f">Precedence, tightest first:</p>

<table id="_54aa05a8-1e42-f09b-1c72-22c8fb4cdcc1"><colgroup><col width="14.2857%"/><col width="42.8571%"/><col width="42.8572%"/></colgroup>
<name id="_767fd585-7f1c-b21d-390e-494531a65b2d">Precedence, tightest first</name>
<thead><tr id="_b5788336-22fb-0beb-e767-f3041da19462"><th id="_50138bf0-0106-5a9c-013a-1baf9cfffd68" valign="top" align="left">Level</th>
<th id="_b9f241dd-e555-c802-a7d8-1bd1615a3907" valign="top" align="left">Constructs</th>
<th id="_edaf05a2-6346-b8f9-d7dc-1b58d0c18357" valign="top" align="left">Notes</th>
</tr></thead>
<tbody><tr id="_4af36120-a58c-907a-af5b-e3e9ea0c271f"><td id="_2143f0aa-e46b-7a32-039d-d65fc3df531d" valign="top" align="left">1</td>
<td id="_17c1e562-e2a4-6e59-2f9b-4ef5bb608bc9" valign="top" align="left">construct parentheses, fences</td>
<td id="_494deac7-6d59-3687-24d9-aab512e485a0" valign="top" align="left">the argument grouping of clause 8</td>
</tr><tr id="_f4057952-1f51-745c-b752-0853f512c83f"><td id="_72f8e59d-df94-9682-1fba-5b09ec5c0176" valign="top" align="left">2</td>
<td id="_5f4f45f6-2888-d563-e5d2-886c6be2a051" valign="top" align="left">scripts <tt>^</tt>, <tt>_</tt></td>
<td id="_9c05075f-7dbf-afdd-8b38-24f50383e470" valign="top" align="left">attach to the closed operand</td>
</tr><tr id="_0888ba00-b3a4-b94f-49b3-f68e1577a3fb"><td id="_b1764d04-ff72-be21-d82b-327876c4c5e8" valign="top" align="left">3</td>
<td id="_0b08cfa4-72a1-5cfc-3577-f8d97aa06aa9" valign="top" align="left">fractions <tt>/</tt></td>
<td id="_05d004b9-c102-7538-ed59-be7f525b07f6" valign="top" align="left">token-or-group operands</td>
</tr><tr id="_84874536-e18c-06fc-dd80-51b0e638391c"><td id="_6e6cfa1b-5734-13f1-f1ed-6489257e7660" valign="top" align="left">4</td>
<td id="_e510f907-6cfc-664e-a194-62b9a2ef79de" valign="top" align="left">adjacency and unary application</td>
<td id="_e4a4c222-5c96-8d77-5b97-21d86033c526" valign="top" align="left"><tt>sin x</tt>, <tt>2x</tt></td>
</tr><tr id="_87098144-dbed-5ffc-ca61-e4885e8bc7e6"><td id="_6ec49177-c5d6-54e8-cedd-6bc4dc9c1ba7" valign="top" align="left">5</td>
<td id="_de90040f-75e9-34f5-b606-374b195ec197" valign="top" align="left">multiplication, division</td>
<td id="_249bb73f-7daa-449a-94bb-0872748d9941" valign="top" align="left"><tt>*</tt>, <tt>/</tt> (outside fractions)</td>
</tr><tr id="_dab2ab64-bdf4-3781-a3a5-3bf0291add09"><td id="_40573b61-06c9-c27f-417a-519ef686792d" valign="top" align="left">6</td>
<td id="_1d164f81-b89c-6c85-0069-6aeab7f3a630" valign="top" align="left">addition, subtraction</td>
<td id="_5fe61e35-f87a-2b37-acdf-778ea962e369" valign="top" align="left"><tt>+</tt>, <tt>-</tt></td>
</tr><tr id="_ba28f61b-b3c3-c99c-5b83-5cc309a363e7"><td id="_12d80abc-e2b2-a7fa-0d0a-71a45166b642" valign="top" align="left">7</td>
<td id="_1963cece-4808-aca3-a8fc-f11575f1b251" valign="top" align="left">relations</td>
<td id="_2a38d792-c583-544b-0e60-5b3c86e6111f" valign="top" align="left"><tt>=</tt>, <tt>&lt;</tt>, <tt>&lt;=</tt>, and kin</td>
</tr></tbody>
</table>

<p id="_43c3a4b2-ba9a-cbf9-1b32-fec924c10533">Each level binds tighter than the ones below it; the construct parentheses of level 1 override everything. The reader’s behaviour is the definition, and the corpus pins the contested shapes explicitly — every row of the table has vectors where the levels interact.</p>
</clause>

<clause id="_b771a62c-b317-3aff-8630-16aab0680859" obligation="normative">
<title id="_b48500ab-88f8-45d4-41b5-b88d64073634">Groups override</title>
<p id="_25e4a257-ed42-0f85-0a2c-eff5566a3be6">Parentheses group an expression into one operand: <tt>x^(2+1)</tt> scripts the whole sum; <tt>sqrt(x+1)</tt> roots the whole sum; <stem block="false" type="MathML"><math xmlns="http://www.w3.org/1998/Math/MathML">
  <mstyle displaystyle="false">
    <msup>
      <mrow>
        <mo>(</mo>
        <mfrac>
          <mrow>
            <mi>n</mi>
            <mrow>
              <mo>(</mo>
              <mi>n</mi>
              <mo>+</mo>
              <mn>1</mn>
              <mo>)</mo>
            </mrow>
          </mrow>
          <mn>2</mn>
        </mfrac>
        <mo>)</mo>
      </mrow>
      <mn>2</mn>
    </msup>
  </mstyle>
</math><asciimath>((n(n+1))/2)^2</asciimath></stem> scripts the whole fenced fraction. Grouping is the author’s precedence tool and always wins.</p>
</clause>

<clause id="_f3c8a752-7885-0d9c-9240-543a29f17f6e" obligation="normative">
<title id="_a3a1c0d8-53c2-a021-6f21-487b404d8e3b">Ambiguity is resolved, never negotiated</title>
<p id="_6e753984-ccba-c723-e386-158c4bc2b750">Where two readings are conceivable, the rules above decide — the reader does not pick the “intended” reading. The classic cases, with their rulings:</p>

<table id="_16bb10d8-de34-405e-039d-2e72a0c4dd76"><colgroup><col width="33.3333%"/><col width="66.6667%"/></colgroup>
<name id="_b0107f48-cf5c-87eb-bdb9-7400d59154cb">Rulings on the classic ambiguities</name>
<thead><tr id="_a31e2414-d0ae-0149-96bf-5ab076375b66"><th id="_4254c6d1-1f9c-3a31-3a7d-37d2c394b933" valign="top" align="left">Input</th>
<th id="_f4a1334d-8bfe-998e-4b68-c5430148baae" valign="top" align="left">Reading</th>
</tr></thead>
<tbody><tr id="_1ee6b25e-5cf9-6193-a98b-7ce017d3b14f"><td id="_f1ada7a8-3c2e-1bbb-c613-fdddeb57a2d5" valign="top" align="left"><tt>a/bc</tt></td>
<td id="_373d295e-63ad-04de-6779-2108e1acbf9d" valign="top" align="left"><tt>a/b</tt> times <tt>c</tt> — the fraction takes the token, not the run</td>
</tr><tr id="_9f207326-0539-93e6-c6e8-4b73c1f0e94d"><td id="_21238304-588f-ecd6-9dcc-d97754f835ca" valign="top" align="left"><tt>sin 2x</tt></td>
<td id="_ab84b9b5-5742-d1c9-8053-d1e941141793" valign="top" align="left"><tt>sin(2)</tt> times <tt>x</tt> — adjacency after the unary application</td>
</tr><tr id="_e0df7308-5f84-cdbf-4408-7dc6ed03104c"><td id="_3fcf7a16-677a-a849-4d3a-716e8db8c441" valign="top" align="left"><tt>x^2y</tt></td>
<td id="_6704996d-161e-47bd-43b6-7363177eeef1" valign="top" align="left"><tt>x²</tt> times <tt>y</tt> — the script takes one token</td>
</tr><tr id="_7ce8d835-0e8e-0c2a-472a-9ba29d589204"><td id="_599eee1b-f374-4879-923f-169c61dbe73d" valign="top" align="left"><tt>e^-x</tt></td>
<td id="_777fe7a2-dd7e-4870-2697-5bacce81f40e" valign="top" align="left">refused — the script content starts with a bare operator</td>
</tr><tr id="_5f766d6b-e07f-97e4-8a64-f342a66106c6"><td id="_ccd32d37-2a3d-af19-2b96-da3a4eb433b4" valign="top" align="left"><tt>x^(-x)</tt></td>
<td id="_b7e056e3-06ca-0a80-80d4-71d664fb8a45" valign="top" align="left"><tt>x</tt> to the <tt>−x</tt> — grouped, it reads</td>
</tr></tbody>
</table>

<p id="_b7e567f6-8966-d54b-6d0e-da2d2ea6930e">An author who means something else groups. This is the notation’s contract with its users, and every row here is a corpus vector.</p>
</clause>

<clause id="_48f56ae2-14c3-4657-8414-4bd2b0606bf4" obligation="normative">
<title id="_9549fa5d-6ed9-a87e-57eb-8448b58cf30f">Spaces end attachments</title>
<p id="_b0d90647-9aa3-b40b-fb22-53f44abbe087">Whitespace after a script or argument ends the attachment: <tt>x^2 y</tt> scripts only the <tt>2</tt>; <tt>sum_(i=1)^n i^3</tt> ends the nary’s limits before the summand. Spaces are otherwise insignificant (clause 7).</p>
</clause>

<clause id="_e7c948fa-2add-77c5-0524-5cb4f96159ba" obligation="normative">
<title id="_0de307a5-2a90-f593-a0d2-8793492c0a6c">Unary application, precisely</title>
<p id="_29bcf9fd-6444-0254-8c6b-657504e95b81"><tt>name x</tt> applies the unary to the adjacency operand — one token, or a group. <tt>sin x y</tt> is <tt>sin(x)</tt> times <tt>y</tt>; <tt>sin xy</tt> is <tt>sin(x)</tt> times <tt>y</tt> as well — the adjacency operand is one token, never a run. <tt>sin (x y)</tt> is the sine of the product. The corpus carries the three; the ruling is always “one operand, then adjacency”.</p>
</clause>

<clause id="_214f7ea8-b0f9-8a17-30ab-7340fc854908" obligation="normative">
<title id="_1cef3d43-2e11-0a88-b6e9-bb857976dcbf">Relations and their low binding</title>
<p id="_c66d0951-2fd3-3b79-1e77-13f10c38504f">Relations bind loosest: <tt>a = b + c</tt> relates the whole sum. Chains — <tt>a = b = c</tt> — fold left as the relation evaluation of PM 1004 defines. A relation inside scripts or arguments is fine where grouping puts it: <tt>x-&gt;0</tt> inside <tt>lim_(...)</tt> is the limit’s lower script content, read as the arrow token, not the relation level’s property.</p>
</clause>

<clause id="_5ef254a2-3f76-60d4-b6b0-68411fc7c9b1" obligation="normative">
<title id="_16bdf03d-d82d-434a-e8a1-d6fc3461dbd0">The whitespace rule’s edge</title>
<p id="_249b1a4e-b375-2d5f-0a00-cfdc3eedaf7e">A space inside construct parentheses is content spacing: <tt>sqrt( x + 1 )</tt> reads identically to <tt>sqrt(x + 1)</tt> — the construct’s argument grammar, not the token grammar, governs inside. The whitespace-ends-attachment rule of clause 13 applies between tokens, not inside argument groups.</p>
</clause>

<clause id="_7320edef-2057-714d-30ab-6c893aeccec9" obligation="normative">
<title id="_20aeffe2-7745-e3b7-eaf2-a2218501b8ce">The whole precedence, worked twice more</title>
<p id="_99536237-92fe-c915-b4c2-0f1d5d933c54"><tt>−x^2</tt> — unary before power? The power binds tighter: the tree is <tt>−(x²)</tt>, the negation applied to the power. An author who means <tt>(−x)²</tt> groups: <tt>(−x)^2</tt>. The corpus carries both.</p>

<p id="_5f74f8f9-6cc5-d8aa-a556-800a9032a012"><tt>2^-3</tt> — refused: the script content starts with a bare operator (clause 13’s ruling table). <tt>2^(-3)</tt> reads. <tt>2^−3</tt> with the Unicode minus reads too — the tokeniser classifies the Unicode minus as the minus symbol, and the grouped script takes it.</p>

<p id="_3bdb40b4-a1dd-17dc-e9c7-563d8f19c151"><tt>a/b c d</tt> — the fraction takes <tt>b</tt> (one token), then adjacency multiplies by <tt>c</tt> and <tt>d</tt> in sequence: <tt>(a/b) · c · d</tt>. Nothing about the slash reaches past its operand.</p>
</clause>

<clause id="_9d964078-835b-89ae-da31-ad77b2e76416" obligation="normative">
<title id="_5b020b4e-6007-9a3a-e406-47f731be36a7">The rule behind the rulings</title>
<p id="_a2a7373b-c270-9300-bc09-7af33d11c967">One rule generates the table: each construct and operator takes the smallest operand the grammar allows, and grouping is the only way to offer it more. Every ruling above is that rule applied; an author who internalises it needs no table. The table exists for implementers and for the corpus.</p>
</clause>

<clause id="_e387287f-c259-046e-2c02-e99072b6b103" obligation="normative">
<title id="_416176b2-e1dd-0de9-4c7d-7a79b8dddeb8">The one-rule summary, once more</title>
<p id="_72446123-9226-9cfa-7f9c-ffdd4d7535a0">Smallest operand, unless grouped. Every precedence question in this notation resolves to it: the fraction takes a token unless you group; the script takes a token unless you group; the unary takes a token unless you group; the nary’s scripts take tokens unless you group. The reader has no other source of ambiguity, and grouping is always available. This is the clause most authors need, and it fits in one line.</p>
</clause>
</clause>

<clause id="_6f76ab1f-5614-a280-eb56-2f1bda613b99" obligation="normative">
<title id="_ee16ec34-b887-0385-f3ae-223618a1b789">The reading algorithm</title>
<clause id="_4ffc800a-809f-e508-6b9c-0647249c2cca" obligation="normative">
<title id="_cb25489f-7374-94ec-338d-630a592341a0">The stages</title>
<p id="_e97094a4-362c-6e53-20a9-e76221ea254a">The reader proceeds in four stages:</p>

<ol id="_4ff8d311-150a-ddb5-aeca-8b3a5c2b27e5" type="arabic"><li><p id="_8edeec0e-0851-ad1e-c806-c2b7c445e79b"><strong>Tokenise.</strong> The input splits into tokens by longest match against the constants: construct names and fonts first (longest name wins), then symbol tokens, then numbers, then structure characters, then fences. A character sequence matching nothing is a reading error with its position.</p>
</li>
<li><p id="_52d16a29-df07-fcdf-8023-98fd1c5db879"><strong>Resolve.</strong> Tokens resolve through the constants’ classification: unary, binary, ternary, sub/sup, font, special alphabet, symbol, number, fence, structure.</p>
</li>
<li><p id="_ee79559a-bbd9-485e-8b61-9a5c56df572c"><strong>Build.</strong> The construct tree builds by the precedence of clause 13: classes take their arguments (parenthesised or adjacent), scripts attach, fractions bind, operators fold.</p>
</li>
<li><p id="_45dc7f10-9913-71cd-8515-f8044e6e02f5"><strong>Validate.</strong> Uncertainty nodes construct through PM 1002’s validation; the tree yields.</p>
</li>
</ol>

<p id="_2bef2e51-83ec-9349-04d3-5d05f5252ef2">The stages are separable only in description; the implementation interleaves them. What this document pins is the outcome: the tree a given input yields, and the error a malformed input raises.</p>
</clause>

<clause id="_37d66e6c-f24e-dae5-201e-d98d6e13b6b5" obligation="normative">
<title id="_f2e64434-e644-1d65-1085-bbff89dde0bd">Longest match</title>
<p id="_7449bb1c-6e37-e825-51f1-9a705f0d3639">Longest match is the tokeniser’s rule and the disambiguator: `==&gt; ` is one arrow; <tt>&lt;=</tt> is one relation; <tt>(:</tt> opens an angle fence; <tt>ZZ</tt> is the number-set token before <tt>Z</tt> could be a symbol. Construct names match before symbols share their letters — <tt>sum</tt> is the nary construct even though a symbol could begin with <tt>s</tt>.</p>
</clause>

<clause id="_989e847d-0d12-3cfe-77af-32a107c4320f" obligation="normative">
<title id="_99d9363e-aee9-6a92-d65e-c6f228561f6b">The fences</title>
<p id="_44a1739e-e114-a406-c4c1-3255ec671c18">Fences pair per Annex C’s table. The pairing is by token: an opener matches its own closer, and nesting tracks the open stack. The unpaired cases — an opener without its closer, a closer without an opener — are reading errors naming the fence and its position.</p>
</clause>

<clause id="_bdfd45b4-c49d-54e2-7c16-1b995514dec4" obligation="normative">
<title id="_0631495d-31c4-081f-afa0-cdb286a8258a">Errors</title>
<p id="_501b10e8-3325-9274-7ef3-02bb14eab1fb">The reading errors are PM 1003’s, and this notation produces them thus:</p>

<table id="_ade550c1-7b0d-133e-d277-78025e182c87"><colgroup><col width="25%"/><col width="37.5%"/><col width="37.5%"/></colgroup>
<name id="_19e490d1-2370-4ab4-a680-e4afa616a1d6">AsciiMath reading errors</name>
<thead><tr id="_408766f1-337c-9587-b7ad-2dd7cf1f9855"><th id="_3e2e5fdd-8a1b-b485-14b7-3a4ffe006630" valign="top" align="left">Fault</th>
<th id="_9cddcc03-6bd4-b32f-e71b-fff6a6822bb5" valign="top" align="left">Error</th>
<th id="_9e75bad0-5e0e-ac52-d145-15b329ba7afe" valign="top" align="left">Carries</th>
</tr></thead>
<tbody><tr id="_7405a868-1ad8-d55e-c2a3-6cd229462b72"><td id="_fb6e4412-8dc4-4adf-281c-9d751c399583" valign="top" align="left">unresolvable character sequence</td>
<td id="_59060ca1-1100-327f-ceaa-ed5c34e3cf79" valign="top" align="left"><tt>ParseError</tt></td>
<td id="_b2e14bb9-7888-5646-a0ed-0b827bade58a" valign="top" align="left">the sequence and its position</td>
</tr><tr id="_51cfed54-5370-9b5e-477d-27fa3ca1e167"><td id="_cec06136-92cc-3806-a749-9cbd742c3a81" valign="top" align="left">unpaired fence</td>
<td id="_37574741-8aea-3b58-7efa-fa1cc9bc782d" valign="top" align="left"><tt>ParseError</tt></td>
<td id="_0ca1a8cf-a9e9-ec91-e1f9-e64d225d0d50" valign="top" align="left">the fence token and position</td>
</tr><tr id="_ad07f1d5-e495-5506-c05a-0496e20c2cbe"><td id="_8afbca4f-d1c3-9407-687d-d0a537dd76da" valign="top" align="left">construct arity fault</td>
<td id="_e58f842f-6d68-1bdd-647d-7825733daefb" valign="top" align="left"><tt>ParseError</tt></td>
<td id="_4e0cdda5-9b4f-1618-c828-c1bcf73d21da" valign="top" align="left">the construct and its argument count</td>
</tr><tr id="_05bbaf1a-bdf3-78c5-6e29-fc74976e6879"><td id="_26fee2da-c654-a42b-740c-6cbba18e9a59" valign="top" align="left">unknown interval kind</td>
<td id="_992121b5-7ba6-e9b3-cc43-6d1fdda0300f" valign="top" align="left"><tt>ParseError</tt></td>
<td id="_d5a377c9-9a19-fdcb-da8e-782497e00af1" valign="top" align="left">the kind as written</td>
</tr><tr id="_3a874341-8662-1b53-04f4-22630e255054"><td id="_82ecd6c1-badd-f1d6-0242-d1fcea7da7f5" valign="top" align="left">concise place mismatch</td>
<td id="_b2b5eb5c-ab93-5191-0413-b2909cbae565" valign="top" align="left"><tt>AmbiguousDecimalError</tt></td>
<td id="_c437e9b5-cb77-0c7e-e201-a897c3a19a5f" valign="top" align="left">the value and the digit string</td>
</tr><tr id="_ff38d88e-a2e8-57ec-0031-c021313ff3df"><td id="_b12259a6-7185-bd2a-09c9-f1e79d80742c" valign="top" align="left">unreadable channel expression</td>
<td id="_5314f898-94fb-acdd-2921-4723208b0cec" valign="top" align="left"><tt>ParseError</tt></td>
<td id="_cb39c57c-ddf5-28d0-d8e1-5a4640c4464e" valign="top" align="left">the expression, from the unit reader</td>
</tr></tbody>
</table>
</clause>

<clause id="_fdbcd26c-6609-dc0e-f78b-b68f543e6158" obligation="normative">
<title id="_44440b77-ba9d-6d26-de1a-abfb84816db7">What the reader never does</title>
<p id="_1b4f81c9-92ce-c24d-058b-6040864c926e">It never guesses an intent for a malformed input, never skips a faulting token to continue, never normalises digits, never resolves a symbol outside the registry, and never returns a partially built tree. A reading is total or absent.</p>
</clause>

<clause id="_58d9a0cf-f0d1-d860-4762-8595eef8cb23" obligation="normative">
<title id="_e2dc224f-5131-bfef-108f-853aca8ac717">A worked reading</title>
<p id="_3854aa73-5d47-6dc5-35a3-f4c26f1f56d1"><tt>uexp(10.3, 0.5, 2, 0.95) "unitsml(g)" + x</tt>:</p>

<ol id="_ed911cf4-7f2c-99d9-07ff-d3626a542e18" type="arabic"><li><p id="_e07bad04-617c-1552-11a2-6468a6941cfd">tokenise: the construct name, its fence, the number tokens, the channel string, the plus, the name;</p>
</li>
<li><p id="_336fd932-5a4c-afa4-749c-0c026ad8721b">resolve: <tt>uexp</tt> is a construct with its fixed arity; the channel matches;</p>
</li>
<li><p id="_d6593a48-cc5d-8039-8b26-af8ea43ef9ae">build: the call takes four arguments; the channel is the unit operand following per PM 1002’s placement; the addition joins the uncertainty node and <tt>x</tt> as operands;</p>
</li>
<li><p id="_898a8b36-bc8f-1860-ba87-b249d9151305">validate: the uncertainty node constructs through PM 1002 — category expanded, fields complete, factor positive, probability in range.</p>
</li>
</ol>

<p id="_8e4d7e62-a73e-dbe5-0945-85a6f5481032"><strong>Expected outcome.</strong> an addition of an expanded uncertainty (with unit) and a name — reading total, tree valid, ready for any writer.</p>
</clause>

<clause id="_d75a618e-e7e1-7729-b0ba-dd94f3d796f1" obligation="normative">
<title id="_8c7bf91f-f433-5215-bc55-00c729feb4e2">Positional accuracy of errors</title>
<p id="_b98e89b7-0b64-b309-9b0b-cf2eef9ee43d">Every error of clause 14 carries its input position: the tokeniser’s offsets survive into the typed errors, so a caller can point at the offending character. The corpus pins the positions for its error vectors — a refusal without a position is not a conforming refusal.</p>
</clause>

<clause id="_432a9f01-8546-d8aa-2fef-e115988963e3" obligation="normative">
<title id="_fc3f8d9d-14be-7ce5-2161-0dde78884910">Tokenisation’s edge cases, pinned</title>
<ul id="_c9f0768c-3521-ec81-f148-e4a439725f60"><li><p id="_ef262cb7-bc66-837a-6ef2-30ce7a3ebc0c"><tt>(:</tt> opens an angle fence only where a fence can open — inside a construct argument it is still a fence; the construct’s argument grammar wraps it.</p>
</li>
<li><p id="_3c614d36-d16a-eeac-fcce-e2b6da51ab52">(( is two opens, not one special token; the table recognition of clause 9 happens at the construct-argument level.</p>
</li>
<li><p id="_e66661fe-dd68-f503-afb0-afb9005445c3"><tt>2.10</tt> is one number; <tt>2.1.0</tt> is a number then a fault; <tt>..</tt> is two faults in a row and the reader reports the first.</p>
</li>
<li><p id="_dbbdd3e5-3819-ddef-82dd-5c7aad150272">The reader is Unicode-native: symbol tokens are Unicode where the registry says so, and the letter-pair fences are ASCII. A lookalike character (a fullwidth parenthesis for <tt>(</tt>) is an unresolvable run, named and positioned.</p>
</li>
</ul>
</clause>

<clause id="_83486416-dd13-50bf-64d8-a0f15ef5bdf7" obligation="normative">
<title id="_e059a530-376d-e7f9-3913-e3304dda2603">Recovery is not a feature</title>
<p id="_c39d73c8-a802-e46a-0807-5c8752aad5bc">The reader stops at the first fault. A specification of recovery — skip, resync, best-effort — is a specification of a second reader with different guarantees; this document specifies one reader with complete guarantees instead. Applications that want fault tolerance get it by splitting input and reading the pieces; the typed errors with positions make that practical.</p>
</clause>

<clause id="_8f367284-e85c-cf0e-9640-8d2ebfe96151" obligation="normative">
<title id="_233b4519-a9f7-dd50-22a1-bb748f313d3f">The reader against the writer</title>
<p id="_d0e3d9f3-23a1-bf2b-cb11-7a1f3d3c6ecb">The reader of this document and the writer of PM 1001’s AsciiMath surface are one interface’s two halves (PM 1003). The reader is the generous half — the surface is what it accepts, tokens, synonyms and all. The writer is the conservative half — canonical tokens, canonical forms, one encoding per construct. An author may write generously; a writer never does. Round trips pass through both halves and yield equal trees with re-spelled tokens where synonyms were written — the tree is the same even when the text is not.</p>
</clause>

<clause id="_ff24c223-10f0-1130-0fbb-3d86c88bf166" obligation="normative">
<title id="_7852eb4d-a022-282a-f8f5-3db2feaa6f53">The reading algorithm, recited</title>
<p id="_20fb5ec4-60fe-ab88-1520-84a285915a03">Tokenise by longest match; resolve through the constants’ classification; build by the smallest-operand precedence with grouping as the override; validate the uncertainty nodes through PM 1002; yield the tree or the typed error with its position. Four stages, one pass, no second chances — the reader’s entire behaviour is this recitation plus the tables, and the corpus is the proof that the recitation is complete.</p>
</clause>
</clause>

<clause id="_6e3147c4-e0a9-469e-0f77-6bff1ae3788e" obligation="normative">
<title id="_b642888a-8882-6f80-cd27-fa3f0a310730">The corpus</title>
<clause id="_f8f9c3f3-a460-2526-7336-50502ff34fbf" obligation="normative">
<title id="_05206820-7ea1-2c83-be15-f0dd7718d432">The corpus and its generations</title>
<p id="_bb0ec76a-5031-27ad-db84-44b71ab9d8e2">The AsciiMath corpus is the pinned corpus of the plurimath testsuite: a frozen set of inputs with their frozen trees and renderings, replayed by digest. A corpus generation is immutable once published; generations extend, never rewrite — the first generation’s 143 cases are present in every later one.</p>
</clause>

<clause id="_ac75137c-f035-309b-80c3-7ba6cf3f4468" obligation="normative">
<title id="_02d1d634-47bb-3708-7884-d42e1f2f7331">What the corpus covers</title>
<table id="_9d5d9918-8b75-642f-d47a-ca22ff95a0f7"><colgroup><col width="33.3333%"/><col width="66.6667%"/></colgroup>
<name id="_77eb0bc5-3dcc-d899-55cc-068eac64b61e">Coverage</name>
<thead><tr id="_113c2909-b2c1-fed2-5502-83315421bb64"><th id="_1223f946-b29f-3dcb-bb72-89e706189cac" valign="top" align="left">Area</th>
<th id="_5bb7741a-95ba-34be-e838-b60165e04da3" valign="top" align="left">Vectors</th>
</tr></thead>
<tbody><tr id="_46c825d9-8bf1-5ec8-4299-8b8abc6102b1"><td id="_936d6174-2b03-e768-cbfd-eaab8d537d2e" valign="top" align="left">every symbol family</td>
<td id="_d079893e-36b7-d9cb-9345-ec1201fa51ce" valign="top" align="left">representative tokens per family, all formats’ renderings</td>
</tr><tr id="_bf896ae9-423b-ea33-b9a9-d8933db833c6"><td id="_bdc35147-ef5e-7a73-8499-df77b60e32fc" valign="top" align="left">every construct class</td>
<td id="_4b3272bd-068f-618f-7bbf-02ebcce988aa" valign="top" align="left">plain and grouped arguments, scripts, nesting</td>
</tr><tr id="_8948ad27-660d-3994-71fc-8fec495b5fb4"><td id="_0dcda416-342e-8dde-ea44-37249a3408af" valign="top" align="left">fences</td>
<td id="_d45f980d-076f-8abc-2205-00ae313cd59c" valign="top" align="left">every pair of Annex C, nesting, the unpaired errors</td>
</tr><tr id="_4ea33393-3168-93c7-94be-8308827d8f82"><td id="_0d58158f-a1ce-4387-ad62-31d16533390b" valign="top" align="left">tables</td>
<td id="_6016fbfd-a137-d621-8fa5-c7272631d469" valign="top" align="left">every bracket form, alignment, empty cells</td>
</tr><tr id="_d39dc4eb-2c06-350b-0f4a-3556d1c74928"><td id="_2c5e4621-0a65-c89f-3287-017c8397d5b9" valign="top" align="left">uncertainty</td>
<td id="_f7372061-aa08-6d79-339c-687260cf68f3" valign="top" align="left">all categories, notations, kinds; shared exponents; both unit placements</td>
</tr><tr id="_20260bfe-cade-0638-e041-3674f81ba8c2"><td id="_670357ee-5a1c-e073-3eba-d3c06c380f72" valign="top" align="left">channel</td>
<td id="_01c1f988-0168-d8ac-6f51-cb16294a5745" valign="top" align="left">expressible, inexpressible and refused units</td>
</tr><tr id="_ec7a0408-4734-5b4b-65de-69de6a7ca53c"><td id="_84ae05c5-3ca0-4626-2c3c-688ff1d5ef40" valign="top" align="left">precedence</td>
<td id="_ee87bc82-91fe-eb8c-486c-8762aa526808" valign="top" align="left">every ruling of clause 13’s tables</td>
</tr><tr id="_34eb7d9b-5cd1-03c1-b76d-40ff0cc59b5e"><td id="_35582406-47e9-2a40-ecb8-fe78a8565e4d" valign="top" align="left">localization</td>
<td id="_28738413-02ba-1cf0-5532-ae5cd18110b3" valign="top" align="left">the localized readings per supported locale</td>
</tr><tr id="_4e9d701f-ca24-dd7e-9921-5bcabffad2a0"><td id="_2f03cf96-661c-0464-110d-b3e874003f3a" valign="top" align="left">errors</td>
<td id="_76c445fd-bd47-ee3c-004e-67f226dcbe91" valign="top" align="left">one vector per error row of clause 14</td>
</tr></tbody>
</table>
</clause>

<clause id="_3962fdb6-7551-50e0-f20c-58fcb8199e71" obligation="normative">
<title id="_5a59f32f-8f0a-464f-9843-413352944327">Provenance</title>
<p id="_e8f26248-2201-6523-b47e-92afa82ee99e">Each entry states its origin: a clause of this series, a defect fix, or a community report. Provenance is the corpus’s memory — a vector’s existence documents that the behaviour was deliberate, and the generation that froze it is named.</p>
</clause>

<clause id="_4140c612-0827-e557-4a8a-e76eeb720c16" obligation="normative">
<title id="_0d751ae1-e598-dd19-010e-c34273dd05ba">Replay</title>
<p id="_b00550f4-ac2a-2e11-29ef-0d6a00ce7d71">Replay is byte-identical: the corpus runner computes digests over the trees’ canonical forms and the renderings, and a mismatch is a failure, not a warning. The runner itself is versioned with the corpus generation.</p>
</clause>

<clause id="_8664d87c-e567-6791-80e4-f7eff5d7788b" obligation="normative">
<title id="_6bd1e807-9886-6da8-8158-0b51f634b17d">The corpus and this document</title>
<p id="_d882be5f-3c6a-b899-cac0-d6e318d366b0">Every rule in this document has at least one corpus vector: the symbol tables (family representatives), the construct tables (each class plain and grouped), the fence table (each pair, nesting, unpaired), the channel (accepted, degraded, refused), the uncertainty forms (every category, notation, kind, unit placement), the precedence rulings (every row of clause 13’s tables), the localization pairs, and every error row. A rule without a vector is a defect in one of the two — and the build of this document checks the correspondence for the generated tables.</p>
</clause>

<clause id="_60ff9b5d-acef-7f0f-3bfd-3bf18cc7e105" obligation="normative">
<title id="_c49db30b-9a82-be9e-6e9c-1a95caa90181">Size and shape</title>
<p id="_cccebb79-5275-b9b0-46b3-3abca1edcda1">The corpus generation carries its counts: cases per area of the coverage table, per format column, and per error row. The counts are facts about the generation, published with it; a generation that loses coverage in an area is not a successor, it is a different corpus — and this document’s claims follow the generations, so the loss would be visible in the claim, not buried in the set.</p>
</clause>

<clause id="_7127b1e8-46c9-875c-1403-48849641a767" obligation="normative">
<title id="_30cd8e68-9d4c-e7e9-bca9-cdd7588e1f25">The replay contract</title>
<p id="_65bfbbf0-f762-a2e7-1a74-e23773d0cc0a">Replay is part of CI, not a ceremony: the runner runs on every change to the implementation, and the digests are checked on every run. The corpus is the fastest way to know that a change moved behaviour, which is precisely its job.</p>
</clause>

<clause id="_ac591041-c042-3d27-cac8-553030bf0960" obligation="normative">
<title id="_1c41ee36-4c61-782b-335a-0c509d44900f">A generation’s anatomy</title>
<p id="_fca531c1-19fb-789c-ea13-dc3acb8f06d3">One generation, described concretely so the next is judged against something: the case files (input text, expected tree, expected bytes per surface), the manifest (per-area counts, model version, provenance), the runner version, and the digest set. All four travel together; a generation missing any of them is not publishable. The current generation’s counts publish with the repository release that freezes it, and this document’s claims reference that release by name.</p>
</clause>

<clause id="_1bac8ac6-4007-3076-331d-d89e9c980066" obligation="normative">
<title id="_6f227396-bf47-6642-26d2-b6a124fecaba">What the corpus is not</title>
<p id="_4264fa67-b05b-a0fd-ebc9-96ed896bcfe8">It is not a test suite for the implementation’s internals — it never imports code. It is not a sample of convenient inputs — the refusal vectors and the contested-precedence rows are deliberately uncomfortable. And it is not finished — generations append as the surface grows and as the world reports inputs the set lacked; the append-only rule is what makes every generation a permanent, checkable statement about the notation at its time.</p>
</clause>
</clause>

<clause id="_84abfc64-2fdf-fdce-3e14-891f1571f8be" obligation="normative">
<title id="_38d9a667-a675-9e7d-488d-5235e796cf9d">Conformance</title>
<clause id="_08c76354-fdce-2608-5d52-55cc77b7cbf8" obligation="normative">
<title id="_a1520fdb-f7c0-a1d2-3cc3-4f2d3bb760e5">General</title>
<p id="_960c1284-2a9d-1612-9e43-565b08eade64">Conformance to this document is claimed as the AsciiMath reading and writing classes of PM 1003, discharged per this document’s surface.</p>
</clause>

<clause id="_39c6e29f-c0d2-ee14-1fd0-c6cb19605d92" obligation="normative">
<title id="_488a4dbb-1c03-c44b-726d-edc4a7fa28d0">Conformance classes</title>
<table id="_cd449f13-1ec0-6d96-0dbd-4fbba55d6fb1"><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="_20fdd74e-7cb3-08d1-ff65-4bda45df068a"><td id="_dec01c9b-4bd1-3088-ddf8-6e971bc79d3d" valign="top" align="left">read-asciimath</td>
<td id="_836da2ee-9e23-27db-88b3-9893e891fe9e" valign="top" align="left">reads the full surface of clauses 5 to 13</td>
<td id="_aca97079-f922-4e74-d1ee-2982852f4cb3" valign="top" align="left">the reading corpus, tree-identical</td>
</tr><tr id="_933894bc-2d5f-aef9-0d44-b996864f3cb4"><td id="_886e39f6-ef8c-884f-dfe8-1dceb38f88ad" valign="top" align="left">write-asciimath</td>
<td id="_06ae2198-1679-3b99-f842-0b87a6835d6a" valign="top" align="left">writes the surface per PM 1001/1002’s encodings</td>
<td id="_3f06196e-f601-0e04-27e6-c197d7402530" valign="top" align="left">the AsciiMath column, byte-identical</td>
</tr><tr id="_29468bb2-f494-afdb-773a-352b55005b2c"><td id="_b9061ef2-8adc-b51e-105e-c6f09781d10d" valign="top" align="left">roundtrip-asciimath</td>
<td id="_b84735f7-44d7-9f9e-9f31-90258f38996f" valign="top" align="left">the lossless claim of PM 1003, clause 14</td>
<td id="_299a3338-a136-f352-dd7d-f5779deae043" valign="top" align="left">write-then-read per corpus entry</td>
</tr></tbody>
</table>

<p id="_4451f81c-fd03-3c56-2b38-c4da02d3f7b2">The reading claim is the demanding one: the surface is total on well-formed input, so a reader’s refusals are as much a part of the claim as its successes — the error vectors are inside the corpus, not beside it.</p>
</clause>

<clause id="_932886e9-9382-f063-2cce-9a1a27c88a96" obligation="normative">
<title id="_2f691b6a-ca8c-d57c-6900-07eb00236005">Claiming</title>
<p id="_a354c694-acd8-12d4-4777-b2395439c981">A claim names the corpus generation. A claim without a generation is not checkable and is not a claim; a claim against an older generation is void for the current one until rechecked.</p>
</clause>

<clause id="_1fa6a3de-8a32-a276-8467-9681ac29beef" obligation="normative">
<title id="_9376874f-d372-0aaa-542a-908e7e398fad">The writer’s side of the claim</title>
<p id="_75ae6869-e5b0-483e-4b71-be7e677f8a69">The writing claim covers the whole surface too: every node family writes, the uncertainty encodings write per PM 1002, the channel writes for expressible units, and the token chosen per entry is the canonical token of the registry. A writer emitting a non-canonical synonym (an arrow alias where the entry’s canonical token differs) still round-trips — but the byte corpus freezes the canonical form, and that is what the write claim replays.</p>
</clause>

<clause id="_4349e9cf-c621-a88c-fe49-bf9f31e13225" obligation="normative">
<title id="_d464e96d-731b-eb66-e5e3-f41b09c6a294">Editions</title>
<p id="_8a4fac6d-e01b-f8f2-94c8-107273970e78">This document’s surface changes only at an edition: tokens join the registry per PM 1001’s process, constructs join with their classes and clauses, and the corpus generation pins each edition’s surface. Between editions, nothing moves.</p>
</clause>

<clause id="_1b6a707c-15bf-1e02-3f3d-e3c2d9444e33" obligation="normative">
<title id="_4bab91bf-f742-fee1-ace3-bed7c224c3f6">What conformance means for authors</title>
<p id="_f0cc7243-868f-3b04-f37b-215512279a29">For an author, the conforming implementations are interchangeable: text written for one reads the same in another, and the corpus is the guarantee. For a tool builder, the claim to look for is <tt>read-asciimath</tt> against a named generation — and the refusal behaviour is part of what they are buying, because a reader that accepts everything cannot promise anything about what it read.</p>
</clause>

<clause id="_a1bb54cc-3ad3-2262-f654-8bf945bb46dc" obligation="normative">
<title id="_1b8edead-8d99-1d84-876b-8c65adbfd4f7">The claim, in one sentence</title>
<p id="_32e62d75-ec50-2f24-0f8f-9b4ed91c21c4">An implementation conforming to this document reads every input built from this surface into the tree of PM 1001, refuses everything else with a typed error and its position, writes the canonical surface back byte-identically to the corpus, and round-trips losslessly — and names the corpus generation that says so.</p>
</clause>
</clause>

<clause id="_d116ed01-20dd-5ad5-54ca-8c29dc0bfc27" obligation="normative">
<title id="_ab0d351f-8c2c-79a2-11fa-dc180b329515">Annex A: the construct tables in full</title>
<clause id="_15fa4ece-f3ef-2a06-29df-6273e7ab74ae" obligation="normative">
<title id="_634be367-f84a-64ee-f156-7cdb5dcb6113">General</title>
<p id="_7b2ba7fd-96db-b6dc-c953-13cb101818e4">The construct lists of clause 8, restated with each name’s reading. These are generated from the reader’s constants; a mismatch fails the build.</p>
</clause>

<clause id="_67f2aebb-89fa-aace-136e-45d70728cc85" obligation="normative">
<title id="_bdd7150e-bf5e-7f5a-ee17-daa473181d49">Unary classes and their readings</title>
<table id="_904a142c-3372-f67d-7fbc-eae54edf96be"><colgroup><col width="20%"/><col width="30%"/><col width="20%"/><col width="30%"/></colgroup>
<name id="_5c19e9c5-13c8-3a39-e18c-69c735082dac">Unary readings</name>
<thead><tr id="_b6be4813-4c70-68f3-061b-ea8b73e18fe1"><th id="_54baeb5e-cc8a-9e8f-7772-b043f9f9b3bf" valign="top" align="left">Token</th>
<th id="_ada9eca8-eb0e-071a-e094-83b343ff8cd6" valign="top" align="left">Reads to</th>
<th id="_7efea534-e6d5-9884-9ce9-f1a5050f551e" valign="top" align="left">Token</th>
<th id="_2ed99267-28cc-8fff-76d1-7865a96a4605" valign="top" align="left">Reads to</th>
</tr></thead>
<tbody><tr id="_bcfc35c4-6143-c384-8c56-669e644d4956"><td id="_08ce02eb-5ae7-0965-3e57-0a2b60212a4f" valign="top" align="left"><tt>underbrace</tt></td>
<td id="_f109fcaf-948a-382e-ba57-c360dbe391cd" valign="top" align="left">over/under brace form</td>
<td id="_e4bfd5a0-0758-c0c7-b727-b2d40a6c0412" valign="top" align="left"><tt>overbrace</tt></td>
<td id="_192fdaea-39e2-e43e-a721-b6067f72faf0" valign="top" align="left">over brace form</td>
</tr><tr id="_e7c42037-0a97-69ed-23fa-83ab2d17ec32"><td id="_71a7b02c-9b55-0c5b-679d-fa213bfb3405" valign="top" align="left"><tt>underline</tt></td>
<td id="_f87ba2be-226e-2704-be0c-c6d6652ed2f6" valign="top" align="left">underline</td>
<td id="_35d0e0b6-d001-d346-5f5e-7986184f085c" valign="top" align="left"><tt>arccos</tt></td>
<td id="_98682acf-b048-6e61-256a-bccbbc36fb92" valign="top" align="left">inverse cosine</td>
</tr><tr id="_cc7b8b93-6def-afa9-e145-ee9cc0d66c9e"><td id="_9c719dd3-8efd-8973-81a8-76e8f0ac1091" valign="top" align="left"><tt>arcsin</tt></td>
<td id="_3ea97d1f-8941-c821-0bc7-fe6a11ca166a" valign="top" align="left">inverse sine</td>
<td id="_ac036b69-32ec-4cf4-c7af-b4db4e921d91" valign="top" align="left"><tt>arctan</tt></td>
<td id="_8767ed89-960c-6843-d3be-4e0a9556fe51" valign="top" align="left">inverse tangent</td>
</tr><tr id="_eaa87c02-4737-8d55-b68c-adf76be46dc7"><td id="_ad7eceb8-ef0d-c6c6-ae28-f91eccbe9f23" valign="top" align="left"><tt>ubrace</tt></td>
<td id="_4a47b88e-876f-9e63-891d-7b4f104a104f" valign="top" align="left">under brace</td>
<td id="_2ec47ebf-4af9-ada3-b27e-3c29e9e6a754" valign="top" align="left"><tt>obrace</tt></td>
<td id="_b51e5096-66a5-c2a9-d71c-f16163c64ecb" valign="top" align="left">over brace</td>
</tr><tr id="_29a0e0da-4b8a-8b05-a883-31c7fc37b844"><td id="_20c7315e-42c9-9a18-056d-d3ce6afa7847" valign="top" align="left"><tt>cancel</tt></td>
<td id="_c34dbb1e-7bda-efe5-0c32-3c4488867e56" valign="top" align="left">strike-through</td>
<td id="_3a005864-35a2-c728-cb38-d871bcd736d3" valign="top" align="left"><tt>tilde</tt></td>
<td id="_5b320c50-980c-d3f5-d26f-8ce99548b377" valign="top" align="left">tilde accent</td>
</tr><tr id="_7de123f5-9edd-71db-11f5-41e2eabda77b"><td id="_4dfa9138-5428-52be-46a9-9dfdea06f2ce" valign="top" align="left"><tt>floor</tt></td>
<td id="_291bb6e4-cbc3-b59d-8745-0f53f16412a7" valign="top" align="left">floor fence</td>
<td id="_109e9c32-989b-fe46-b655-3a0134546c0a" valign="top" align="left"><tt>ceil</tt></td>
<td id="_8a18149a-016b-7681-e386-3a0d51e60e8a" valign="top" align="left">ceiling fence</td>
</tr><tr id="_36ac2f2b-21c1-e8e9-773f-be50976372ea"><td id="_b057c9ce-cab6-3af5-86ce-510ee00002ee" valign="top" align="left"><tt>ddot</tt></td>
<td id="_ee0446ac-aada-b5eb-9b1b-156bff768f35" valign="top" align="left">double-dot accent</td>
<td id="_5dbe7fa6-10bc-cd24-5f68-e0ac290a31f8" valign="top" align="left"><tt>coth</tt></td>
<td id="_f7cb9ee1-7081-3af1-de90-016b61d895f1" valign="top" align="left">hyperbolic cotangent</td>
</tr><tr id="_76287457-c444-d4de-43a2-f15903362bd4"><td id="_7338a0a5-9aad-f090-99c3-cbb77a598ba2" valign="top" align="left"><tt>csch</tt></td>
<td id="_e421033c-c150-9a61-be33-624249ced477" valign="top" align="left">hyperbolic cosecant</td>
<td id="_2cdc4010-d0a8-2dc1-82ed-04c533a3672f" valign="top" align="left"><tt>sech</tt></td>
<td id="_287a3a8c-6894-ca85-2ccc-3819b867a1ab" valign="top" align="left">hyperbolic secant</td>
</tr><tr id="_3740e320-f95b-8f99-e378-86312e98f037"><td id="_30c00b46-69cd-cc3f-f4ab-c97abf90aa55" valign="top" align="left"><tt>sinh</tt></td>
<td id="_0028a53d-9ee3-94c6-0fa9-a713a6224001" valign="top" align="left">hyperbolic sine</td>
<td id="_f9d6ba7c-cd72-ffa3-7614-eb7d9f87a109" valign="top" align="left"><tt>tanh</tt></td>
<td id="_306e8bcd-143c-1465-9633-bdedde962f6b" valign="top" align="left">hyperbolic tangent</td>
</tr><tr id="_6d275c61-4df2-7d8c-f0c0-94eb2ccdf60e"><td id="_8f6ce563-c2bc-6236-5575-7c144badc0c4" valign="top" align="left"><tt>cosh</tt></td>
<td id="_4d65f892-ead6-12f2-3482-a1ed2185c739" valign="top" align="left">hyperbolic cosine</td>
<td id="_b6094cab-a751-9d9b-b186-df75533562a2" valign="top" align="left"><tt>sqrt</tt></td>
<td id="_8d3bd14a-78e7-4305-10f1-bbd646def5e5" valign="top" align="left">square root</td>
</tr><tr id="_abae4b90-6ebf-ab5b-f6d2-782506d4e487"><td id="_599f0293-6828-07d4-1b6b-000f3756fc96" valign="top" align="left"><tt>norm</tt></td>
<td id="_477e8998-ff25-d666-4d0a-9b5bd7fdec5c" valign="top" align="left">norm fence</td>
<td id="_8e0c1366-0c4b-0932-763d-df52718c0354" valign="top" align="left"><tt>text</tt></td>
<td id="_d320b275-a159-a486-861f-dda8f3010f2f" valign="top" align="left">upright text</td>
</tr><tr id="_81bbd3f7-92bf-e3ba-2724-4e7ddc554251"><td id="_bfd81714-7b96-7581-f6ba-b887ae5bb020" valign="top" align="left"><tt>sec</tt></td>
<td id="_d9ad35ec-3e72-bb10-2eb3-c66954d693ad" valign="top" align="left">secant</td>
<td id="_204f5a1b-9691-8cb6-77f4-9668e4c9d0e1" valign="top" align="left"><tt>sin</tt></td>
<td id="_5861fe6c-fe70-16fb-9c57-4a3af21462fc" valign="top" align="left">sine</td>
</tr><tr id="_6c8f040d-3615-6e37-5abd-95b3be262d0e"><td id="_99396b5a-d400-64a8-f2c7-937a9e6f8e4c" valign="top" align="left"><tt>tan</tt></td>
<td id="_841aa817-89d4-8f68-2425-754cb792ff24" valign="top" align="left">tangent</td>
<td id="_fa308fcf-b86f-9271-1aa5-22d55e8fd2a9" valign="top" align="left"><tt>cos</tt></td>
<td id="_14fbd267-028a-cd33-068c-ed9212993d7e" valign="top" align="left">cosine</td>
</tr><tr id="_43d58a76-ae11-9595-fcf7-93eff118ff37"><td id="_b51bf0a8-6020-5fa9-a4fe-5d6381318bf4" valign="top" align="left"><tt>exp</tt></td>
<td id="_90809ff0-2147-e801-210b-a34d10a6f338" valign="top" align="left">exponential</td>
<td id="_46be1ed7-ef79-4e02-dd7e-f1127bacb621" valign="top" align="left"><tt>gcd</tt></td>
<td id="_4a1990b3-2069-0048-7177-5660a2ebd144" valign="top" align="left">greatest common divisor</td>
</tr><tr id="_e85385f1-9e25-0f44-c877-af3668940595"><td id="_ba6ffde6-6988-bba4-a815-376be9c98ad9" valign="top" align="left"><tt>glb</tt></td>
<td id="_094dbfe0-2c4c-9728-9dcb-e5686fc64575" valign="top" align="left">greatest lower bound</td>
<td id="_d2507158-28ca-1e91-f141-149a586524ee" valign="top" align="left"><tt>lcm</tt></td>
<td id="_129b47fe-1a90-3426-6f29-195e4f2a5953" valign="top" align="left">least common multiple</td>
</tr><tr id="_110e67fb-e7aa-2de2-bfc0-598f490fe20a"><td id="_22653962-a304-e7a3-0859-f608623cb808" valign="top" align="left"><tt>lub</tt></td>
<td id="_08d574e3-cba2-c02c-3a30-5ff8d3152988" valign="top" align="left">least upper bound</td>
<td id="_b887747b-2189-f553-7848-d8bb275bc52d" valign="top" align="left"><tt>cot</tt></td>
<td id="_3c56539a-3670-1d46-0ae8-ee5f61929859" valign="top" align="left">cotangent</td>
</tr><tr id="_add8d5b4-16bb-71d2-61f9-dc3645256734"><td id="_03dcec20-657a-46bc-f1ef-27fee47e98ea" valign="top" align="left"><tt>csc</tt></td>
<td id="_0e620111-e0a3-c3b1-4aa9-3d9990060c4f" valign="top" align="left">cosecant</td>
<td id="_540ada56-ce4c-ee10-d82f-2492b882565f" valign="top" align="left"><tt>det</tt></td>
<td id="_7de71f5b-9762-4d1c-3d52-2bc6f0ced4b1" valign="top" align="left">determinant</td>
</tr><tr id="_0405ea9f-f929-d9b5-214c-5b6f51e12cfb"><td id="_a4777841-c391-8e6e-ffef-bb6a4ee34627" valign="top" align="left"><tt>dim</tt></td>
<td id="_290d2e73-6a00-141b-7c30-c158e9e53bc7" valign="top" align="left">dimension</td>
<td id="_590d9841-87a2-77c4-035c-c911e38cf011" valign="top" align="left"><tt>max</tt></td>
<td id="_0ed6ae3a-4aba-461f-3236-8b57ddfb9c64" valign="top" align="left">maximum</td>
</tr><tr id="_ac5bbe8f-2d49-4d28-1e10-58c451bf011a"><td id="_72ea7c84-e813-7f37-2be2-c1dec7de3524" valign="top" align="left"><tt>min</tt></td>
<td id="_090e8f4d-801e-285d-0162-0298adb69fbf" valign="top" align="left">minimum</td>
<td id="_ea005636-11bd-d1f1-5130-d835d3378391" valign="top" align="left"><tt>abs</tt></td>
<td id="_dcffe8c8-d64c-e36d-0914-7326455c0870" valign="top" align="left">absolute-value fence</td>
</tr><tr id="_84f77285-cd87-0eff-30fc-75901fb17e8d"><td id="_c0cb71cc-044e-c555-558a-93680adc4fa7" valign="top" align="left"><tt>bar</tt></td>
<td id="_c04f728e-ae7d-3a07-9c08-f7ebee887d0c" valign="top" align="left">bar accent</td>
<td id="_e4598df3-366a-fcd0-3e08-d3caea63e5b4" valign="top" align="left"><tt>dot</tt></td>
<td id="_eb323861-083e-6d28-36df-1ce4f7df89f9" valign="top" align="left">dot accent</td>
</tr><tr id="_2e74d164-cb5a-7275-ba64-2263334dbef8"><td id="_e203ae97-38bf-cf96-a595-194aef55a1fb" valign="top" align="left"><tt>hat</tt></td>
<td id="_df456fbb-f03a-4dc7-92d7-2d1e605a75aa" valign="top" align="left">hat accent</td>
<td id="_c605d371-65ad-c05a-1f00-e77dc1539889" valign="top" align="left"><tt>vec</tt></td>
<td id="_b1ef71aa-7a73-91a2-6b4c-019bdccb9de7" valign="top" align="left">vector accent</td>
</tr><tr id="_31fe5783-b337-7863-e6b5-e44007d46c56"><td id="_f2dc9c61-de92-4166-a9f3-b79531e20c55" valign="top" align="left"><tt>ul</tt></td>
<td id="_e11180d1-76a1-5819-5bd4-68751359355e" valign="top" align="left">underline</td>
<td id="_393a6102-1cab-c852-b180-fbd361485ec1" valign="top" align="left"><tt>ln</tt></td>
<td id="_6c20bab7-1b3e-44e1-3b5d-c0534fe911e7" valign="top" align="left">natural logarithm</td>
</tr><tr id="_61dc219d-f57d-280f-ada0-9b6ee0c9ec31"><td id="_be839315-89d4-186f-d54b-f25b2871b63e" valign="top" align="left"><tt>log</tt></td>
<td id="_e9aa8485-b39d-19f4-03f5-93beb73a2b95" valign="top" align="left">logarithm (sub/sup class)</td>
<td id="_01f92752-d601-b948-9924-2c3b785603d7" valign="top" align="left"><tt>lim</tt></td>
<td id="_ad99ce6b-1aaf-0cbc-3e8a-c1b77d4f1ff7" valign="top" align="left">limit (sub/sup class)</td>
</tr></tbody>
</table>
</clause>

<clause id="_3e4928ed-6f4f-20de-5e2b-c9ef538d1f55" obligation="normative">
<title id="_b55b5857-36ff-0b32-aa16-669e4858fd64">Binary readings</title>
<table id="_0820f934-653c-ec34-a414-12c67cab16d2"><colgroup><col width="25%"/><col width="37.5%"/><col width="37.5%"/></colgroup>
<name id="_aba250bd-47c7-7c37-8b60-482625072017">Binary readings</name>
<thead><tr id="_48c55df4-9dba-1be1-d3aa-bee76280a452"><th id="_0edee868-fa18-1787-62ae-546686524b5c" valign="top" align="left">Token</th>
<th id="_bd3dc7a5-1aef-61bf-1404-6b9dc922e75c" valign="top" align="left">Arguments</th>
<th id="_e73b6f65-db1b-9058-3db4-a87a2d5dbddd" valign="top" align="left">Reads to</th>
</tr></thead>
<tbody><tr id="_6f9269a1-b813-a4bb-b8b2-0f881761f4a5"><td id="_e1cc4c09-8b43-359b-4cae-cd0a4e3deaa8" valign="top" align="left"><tt>frac</tt></td>
<td id="_12563981-9661-c190-8254-94ff4a3ef5a6" valign="top" align="left">numerator, denominator</td>
<td id="_64e6ea78-7b02-af87-d84d-ea71dfb2f590" valign="top" align="left"><tt>Frac</tt></td>
</tr><tr id="_9c2926b1-ff7f-0801-533c-4f54e69d2ac2"><td id="_e6f8cadb-9aca-3953-f9e3-311ec295bf72" valign="top" align="left"><tt>root</tt></td>
<td id="_e1094fb7-6a90-3354-7345-8c40cb4b1027" valign="top" align="left">radicand, degree</td>
<td id="_56abf6fd-9d40-a982-5e96-e62df925d908" valign="top" align="left"><tt>Root</tt></td>
</tr><tr id="_b7e27793-c0b8-baa2-3a19-1602ca973d7f"><td id="_2cfbfb2d-e048-1861-828b-95918150ea7c" valign="top" align="left"><tt>underset</tt></td>
<td id="_7f3dc63a-a363-9f53-3adb-afb8d1151252" valign="top" align="left">base, under</td>
<td id="_5ceab0d4-ccd6-0c26-4d1e-b10b1da3b30f" valign="top" align="left"><tt>Underset</tt></td>
</tr><tr id="_ce6b3ad8-85ae-7e26-4ed4-1234e92da6a6"><td id="_dd527d14-5ea1-5de4-a5a4-084b9a9484de" valign="top" align="left"><tt>overset</tt></td>
<td id="_1141f5e5-115e-021c-d287-e1301a11366c" valign="top" align="left">base, over</td>
<td id="_2ae322ec-2027-7b03-6916-2e6701c468ac" valign="top" align="left"><tt>Overset</tt></td>
</tr><tr id="_c6a2792c-3cd3-fb4c-cc48-fd39db59c867"><td id="_5ffef34e-0b9b-f664-2c79-ac8246990aa0" valign="top" align="left"><tt>stackrel</tt></td>
<td id="_c6f10e72-7dc2-6661-110e-70da3e346fa7" valign="top" align="left">bottom, top</td>
<td id="_db10c869-02c1-90fa-58c6-7d09a006edf6" valign="top" align="left"><tt>Stackrel</tt></td>
</tr></tbody>
</table>
</clause>

<clause id="_eadce606-2abf-fd67-1603-d033313a2bc4" obligation="normative">
<title id="_91e36432-f99b-7e71-fa1c-a02dea0e81cc">Ternary readings</title>
<table id="_af76439b-06bf-2c16-8ca9-2414c67c83dd"><colgroup><col width="25%"/><col width="37.5%"/><col width="37.5%"/></colgroup>
<name id="_a5c6d186-5ebe-b8a8-a3c1-f9eb71cfccd3">Ternary readings</name>
<thead><tr id="_37fe0e1f-031a-9187-eae7-53bc5baf78db"><th id="_0e92a16e-0f0c-e170-2077-c12d1599d350" valign="top" align="left">Token</th>
<th id="_6aa239c3-f534-1099-4ac7-8c113bff2084" valign="top" align="left">Character</th>
<th id="_3e2172bd-0d68-ac39-8782-65384826bc18" valign="top" align="left">Reads to</th>
</tr></thead>
<tbody><tr id="_8d6a49b0-4bde-bb1e-c80d-9b377eb77ebf"><td id="_73587bcf-3cea-6537-1fac-b4a547220314" valign="top" align="left"><tt>sum</tt></td>
<td id="_636c429f-f1b3-3984-f2fa-44c9abc28a95" valign="top" align="left">∑</td>
<td id="_0dd24579-37d8-22d9-3a26-8f2cf93c9a5a" valign="top" align="left"><tt>Sum</tt> with limits</td>
</tr><tr id="_9462164b-f113-a07e-cd49-5e7cdef1303f"><td id="_3d640ab6-d497-a086-c7af-b7a622e0ed22" valign="top" align="left"><tt>prod</tt></td>
<td id="_1acb3018-823c-b225-1c65-2a88cfe547c3" valign="top" align="left">∏</td>
<td id="_4fed83ca-6dfd-1e59-8745-243cb1068a75" valign="top" align="left"><tt>Prod</tt> with limits</td>
</tr><tr id="_9cc4d568-bc4e-0587-160d-1427eee75dfa"><td id="_0f9b9184-7104-c504-92e7-dbf8ac053ef6" valign="top" align="left"><tt>int</tt></td>
<td id="_bc207e13-628b-e79c-fa8f-17f2573687a9" valign="top" align="left">∫</td>
<td id="_e5eaaa61-a184-2778-7009-f24ad29f32c4" valign="top" align="left"><tt>Int</tt> with limits</td>
</tr><tr id="_b9b13f97-2f39-673d-ae67-720602735889"><td id="_ae9d006b-5219-a1d3-6f06-59fa2256a42d" valign="top" align="left"><tt>oint</tt></td>
<td id="_6e6c88f8-4f52-6495-de4d-9209e3e36ab7" valign="top" align="left">∮</td>
<td id="_9dd057a0-3624-0b83-343c-b607228acd79" valign="top" align="left"><tt>Oint</tt> with limits</td>
</tr></tbody>
</table>
</clause>

<clause id="_079e896d-1969-7d19-b34c-cdc7e52046a4" obligation="normative">
<title id="_aa07c1f1-a528-e722-687f-218773a88397">Sub/sup readings</title>
<p id="_ac654390-e512-22bd-62b8-f89188e70ae1"><tt>lim</tt> reads to the limit class with optional scripts; <tt>log</tt> reads to the logarithm with optional base scripts. Both take the operand adjacency gives and the scripts the input writes.</p>
</clause>

<clause id="_2f91cae2-781c-726c-44b9-aa87abc13eb6" obligation="normative">
<title id="_4d556fb9-eafa-24fa-1718-ee8e095ca011">The unary readings, worked</title>
<table id="_6b873f3e-d40e-268a-cf4b-0cd209b96f58"><colgroup><col width="33.3333%"/><col width="66.6667%"/></colgroup>
<name id="_da9eeb7f-ef6d-93e9-21b7-83e799bb3310">Worked unary cases</name>
<thead><tr id="_cdaefaaf-d499-0076-9375-b949121f9655"><th id="_8f9f140b-205c-ceb1-cbc0-0078c7af69fe" valign="top" align="left">Input</th>
<th id="_cafd83e9-b64b-8482-bd6c-7a2c0db777ac" valign="top" align="left">Reading</th>
</tr></thead>
<tbody><tr id="_1daa8de1-0877-e102-b784-c1fa2e2cc404"><td id="_ef05cc4a-6f66-c5a9-b282-9985a50ce542" valign="top" align="left"><tt>sqrt x</tt></td>
<td id="_b54c82ae-7261-3279-1c33-18c437b4542c" valign="top" align="left"><tt>Sqrt</tt> over <tt>x</tt> — the adjacency operand</td>
</tr><tr id="_45a97907-7fd7-901f-dbbf-29723789414e"><td id="_67e7f103-0302-06dc-8e02-8e076ba8704a" valign="top" align="left"><tt>sqrt(x^2 + 1)</tt></td>
<td id="_66284cc2-f914-1f9f-cd86-41b4216c839c" valign="top" align="left"><tt>Sqrt</tt> over the sum — the grouped operand</td>
</tr><tr id="_4bbea8e4-fb1a-c338-89bc-b63270e56b45"><td id="_7e972b38-6c7b-3f59-3ed6-e65b1afe7e8e" valign="top" align="left"><tt>bar x</tt>, <tt>hat x</tt>, <tt>vec x</tt></td>
<td id="_7968764a-b722-856a-cc7d-c483faba6ddf" valign="top" align="left">the accent classes — one operand each</td>
</tr><tr id="_34c6ff17-7781-13dd-42ac-eb8693db26ef"><td id="_bd4b977d-1f87-9beb-cb31-6d1b67df1d36" valign="top" align="left"><tt>abs x</tt>, <tt>norm x</tt></td>
<td id="_141d24df-640b-fd05-8c99-b53b92c6080a" valign="top" align="left">the fence classes — the delimiters ride the node</td>
</tr><tr id="_40efd6b2-2780-8efe-8821-2e6731d48425"><td id="_cc30d56a-a6fa-6e46-e83c-3016b507151c" valign="top" align="left"><tt>floor x</tt>, <tt>ceil x</tt></td>
<td id="_75ef0720-906f-4fe5-51bf-df5566b423ae" valign="top" align="left">the floor and ceiling fences</td>
</tr><tr id="_ef7c7bd5-a83b-96a6-4e2b-d259dfa86c0b"><td id="_a4cd0dee-9126-e75c-3085-6e1312f4b563" valign="top" align="left"><tt>obrace x</tt>, <tt>ubrace x</tt>, <tt>underbrace x</tt>, <tt>overbrace x</tt></td>
<td id="_1381bab0-d485-e008-551b-049c623b10af" valign="top" align="left">the brace forms</td>
</tr><tr id="_a5436c44-c1c3-9fb5-459e-187aafa68c09"><td id="_b27d2040-c4a5-f332-7288-f4d2eda493a6" valign="top" align="left"><tt>cancel x</tt>, <tt>underline x</tt>, <tt>ul x</tt></td>
<td id="_158d76c6-f020-abad-276f-7c2d518598fa" valign="top" align="left">the strike and underbar forms</td>
</tr><tr id="_e8873ac4-3f85-9756-73ae-7da7a5380887"><td id="_25a6fac5-5890-49ff-0407-03c18d3720b7" valign="top" align="left"><tt>sin x</tt>, <tt>cosh x</tt>, <tt>arctan x</tt></td>
<td id="_3130e243-559c-105a-d9ef-21c53969c620" valign="top" align="left">the trigonometric, hyperbolic and inverse classes</td>
</tr><tr id="_5ac5d21f-0bc2-ae0c-8f27-92dbb8c817f9"><td id="_3f0590a1-db85-dbec-917b-ffd93363a049" valign="top" align="left"><tt>ln x</tt>, <tt>log x</tt>, <tt>exp x</tt></td>
<td id="_0c02a0d9-ac99-733e-dc41-a1230421d15c" valign="top" align="left">the logarithmic and exponential classes</td>
</tr><tr id="_d5ad7133-912a-e4c2-df96-5634c15ecdac"><td id="_28632ba2-a2ae-7e01-658a-eaeaa5684304" valign="top" align="left"><tt>gcd x</tt>, <tt>lcm x</tt>, <tt>glb x</tt>, <tt>lub x</tt></td>
<td id="_6bc57d42-fd79-3a9e-40dc-8131e43c5c47" valign="top" align="left">the binary-named-but-unary classes — one operand in the notation</td>
</tr><tr id="_b5d0c2e2-2d46-ed99-3df2-dbc2d457295c"><td id="_12de34c9-9c6b-a363-f291-5ac4fe6dab99" valign="top" align="left"><tt>det x</tt>, <tt>dim x</tt>, <tt>max x</tt>, <tt>min x</tt></td>
<td id="_1bed222e-bcd4-f1f5-a27f-b79b707d04fd" valign="top" align="left">the operator-name classes</td>
</tr><tr id="_77c74de2-d00e-3f7e-505c-e59a108a018b"><td id="_cd73c636-a689-fd56-5d55-f17783cef0db" valign="top" align="left"><tt>ddot x</tt>, <tt>tilde x</tt>, <tt>dot x</tt></td>
<td id="_1d5b34bb-d9d6-b418-adc0-3b40010ec500" valign="top" align="left">the remaining accents</td>
</tr><tr id="_5722a2e0-68f3-91d0-a417-1770d6fb0305"><td id="_15c4662b-cb35-fd32-90fe-1d7638958106" valign="top" align="left"><tt>text x</tt></td>
<td id="_b3d08a90-ed7a-3d2f-a487-0be2d8920788" valign="top" align="left">upright text — adjacency form of the text function</td>
</tr></tbody>
</table>

<p id="_62441622-69f9-86bc-bfde-93df054d56c1">The last-but-one row is the table’s trap: <tt>gcd</tt>, <tt>lcm</tt>, <tt>glb</tt>, <tt>lub</tt>, <tt>max</tt> and <tt>min</tt> are unary classes in this notation, whatever their arity in mathematics — an author who means <tt>gcd(a, b)</tt> writes it as a product-adjacency the reader splits, and the corpus pins the split. The comma form is not a two-argument call; grouping composes.</p>
</clause>
</clause>

<clause id="_4546d684-0f37-0b71-9c13-f26acef99dfb" obligation="normative">
<title id="_fb052f70-176a-740b-a88a-ac7c735fb3b6">Annex B: fonts and the special alphabets</title>
<clause id="_12e2b0e1-27e8-afe6-0d9f-d44c676b04fb" obligation="normative">
<title id="_4369a82a-7454-d610-39a3-37fb3ccd844e">Font tokens and their variants</title>
<table id="_3b525355-9bc3-17a2-5337-a1f346558238"><colgroup><col width="25%"/><col width="37.5%"/><col width="37.5%"/></colgroup>
<name id="_0ba7ac97-4e1d-2ca7-6e58-99c7a363ddad">Font tokens</name>
<thead><tr id="_9b22edd0-8d54-9b06-9636-dd685b458599"><th id="_d45d1ce9-110c-0b0a-cedc-223d7c3668c2" valign="top" align="left">Token</th>
<th id="_57e33deb-ac88-1217-b052-bed65d6ef048" valign="top" align="left">Variant</th>
<th id="_eb015a6a-2b9a-f272-0704-b043637bd894" valign="top" align="left">MathML <tt>mathvariant</tt></th>
</tr></thead>
<tbody><tr id="_7cec0e7a-8ac3-49da-e565-080cb4531a2c"><td id="_9d04623f-3245-14fb-065e-94018e95fad5" valign="top" align="left"><tt>mathbf</tt></td>
<td id="_10656a66-f401-8814-44e8-cad9bd9c25c4" valign="top" align="left">bold</td>
<td id="_ef89aa73-22b7-18db-f26a-b167dfc87b79" valign="top" align="left"><tt>bold</tt></td>
</tr><tr id="_12ff90dc-d27b-140a-3f28-7fdbd46c2ac3"><td id="_3e714283-e90e-1c80-41b6-b692b1b741f3" valign="top" align="left"><tt>ii</tt></td>
<td id="_9501f1e2-f0b7-edc8-524d-a2214eed4f6e" valign="top" align="left">italic</td>
<td id="_065cf20a-bcc3-f849-bebd-7b139e9665d0" valign="top" align="left"><tt>italic</tt></td>
</tr><tr id="_21196cd4-fda5-4df9-17f0-b74912f7e088"><td id="_2dd2eea8-c564-2960-fed5-eb20354c43f3" valign="top" align="left"><tt>rm</tt></td>
<td id="_5355d65c-422a-8be8-fb8f-2333514eb607" valign="top" align="left">upright</td>
<td id="_ef470a60-acb9-6928-d31b-e5e382ca38fa" valign="top" align="left"><tt>normal</tt></td>
</tr><tr id="_bf082333-bb5f-b968-6a16-94f331f69908"><td id="_f33e90c1-5eaf-1a72-6c92-fea4eeb36264" valign="top" align="left"><tt>mathsf</tt></td>
<td id="_8bfbaa6a-358e-6264-9b0e-3af5916a0434" valign="top" align="left">sans-serif</td>
<td id="_39420e8a-82ee-9cbb-ed8f-348a4881f89e" valign="top" align="left"><tt>sans-serif</tt></td>
</tr><tr id="_56d260aa-070e-d7c3-c0ee-338527ef6caa"><td id="_1341ab76-59e6-39f4-c604-1bb40cbf88d7" valign="top" align="left"><tt>sf</tt></td>
<td id="_83e366a3-0995-f532-64d8-68f2f944804e" valign="top" align="left">sans-serif</td>
<td id="_32c61699-22ff-d706-dd7a-1d8b822a183a" valign="top" align="left"><tt>sans-serif</tt></td>
</tr><tr id="_d655c788-5088-c068-15ed-3c314d738d7c"><td id="_912e44e0-0780-da1d-7f81-62e6ce9a3170" valign="top" align="left"><tt>mathtt</tt></td>
<td id="_b8658a38-b653-bcb3-ee45-347e2d52b8e1" valign="top" align="left">monospace</td>
<td id="_b7c00943-6c83-4c33-8007-bac068da3d3d" valign="top" align="left"><tt>monospace</tt></td>
</tr><tr id="_107c3c9a-6568-1b8e-8756-f02683e9d581"><td id="_54a615d7-7e7b-5914-e51b-7d05942c587e" valign="top" align="left"><tt>tt</tt></td>
<td id="_fd7cee49-8f06-62b1-49e1-120c3c193066" valign="top" align="left">monospace</td>
<td id="_90274e26-c329-3ec0-de7f-c478593b36cc" valign="top" align="left"><tt>monospace</tt></td>
</tr><tr id="_c07b9b73-a9d7-5f87-7ea6-53ded7955465"><td id="_92aa3b8d-1a7c-9feb-1c08-f4ddc4a9586a" valign="top" align="left"><tt>mathfrak</tt></td>
<td id="_bd706004-fc96-03f1-9103-390e16705ba3" valign="top" align="left">fraktur</td>
<td id="_6ddfef24-e37a-559d-05af-9dd18ac1ff8b" valign="top" align="left"><tt>fraktur</tt></td>
</tr><tr id="_55684786-0ed2-93e9-37bb-db21076dca3d"><td id="_291d335f-857c-4f94-faf1-72768dfa2545" valign="top" align="left"><tt>fr</tt></td>
<td id="_0454543d-62d3-d939-4005-11d4dbaf9de1" valign="top" align="left">fraktur</td>
<td id="_461141e8-f182-56ec-127e-1094c9c1148e" valign="top" align="left"><tt>fraktur</tt></td>
</tr><tr id="_eccfcdf8-cac1-7adb-518c-7d1e58a4dda8"><td id="_276f4d41-efb7-866b-afb4-11ba5660a58e" valign="top" align="left"><tt>mathcal</tt></td>
<td id="_6ea51f88-5203-e128-ee0b-882981b4a197" valign="top" align="left">script</td>
<td id="_4c5f246a-9918-6004-0153-bac323488b5e" valign="top" align="left"><tt>script</tt></td>
</tr><tr id="_149b286a-ad27-9d2e-e8c0-40f0f5a0dc37"><td id="_0bb853c4-94f9-8add-8c43-cdbf9bcabb2a" valign="top" align="left"><tt>cc</tt></td>
<td id="_2ecc90bd-1a39-2f58-77c4-3daad8cf7196" valign="top" align="left">script</td>
<td id="_4a0eb029-3789-4f9a-bbf7-f8df0987ff53" valign="top" align="left"><tt>script</tt></td>
</tr><tr id="_7badf3d0-380e-f573-a466-155df99473e8"><td id="_31f272ee-2c4d-f350-356a-37d6998e0158" valign="top" align="left"><tt>mathbb</tt></td>
<td id="_659e6e69-1853-60c1-bf0d-b81cc0e20db2" valign="top" align="left">double-struck</td>
<td id="_fc29f35c-c15d-cafc-0910-346ce066a748" valign="top" align="left"><tt>double-struck</tt></td>
</tr><tr id="_d07a5fa2-03f8-8f24-07a6-5120fea33219"><td id="_bf1bcb05-80ad-58f0-abb8-279875160493" valign="top" align="left"><tt>bb</tt></td>
<td id="_07eb3257-f0a3-4fb5-cfb4-bf93f0685749" valign="top" align="left">double-struck</td>
<td id="_c15ac3f6-43d6-a2f1-3e17-ecd609d92c41" valign="top" align="left"><tt>double-struck</tt></td>
</tr><tr id="_60202238-ebef-c6dc-df0d-ba5b0d76e36a"><td id="_163967da-80e9-918b-10d7-1912a3f511b9" valign="top" align="left"><tt>bbb</tt></td>
<td id="_0c0a0245-5930-71a0-8746-2d2e67a45e0b" valign="top" align="left">double-struck</td>
<td id="_4d2421e5-ac2b-9d43-2e2f-2a8ac9538dbb" valign="top" align="left"><tt>double-struck</tt></td>
</tr></tbody>
</table>
</clause>

<clause id="_f3479424-9d97-9390-d43a-0b8bcdd366b0" obligation="normative">
<title id="_3f8a1388-4b84-78a3-ab46-bead3d458b85">The special bold alphabets</title>
<table id="_7a53ae74-9973-7fff-224d-c5928b7b8f6e"><colgroup><col width="25%"/><col width="37.5%"/><col width="37.5%"/></colgroup>
<name id="_9b739964-bd15-19a9-424c-68acd7dd6b10">Special alphabets</name>
<thead><tr id="_ab4d714b-32c9-3e35-6e61-ce0bd551e0c0"><th id="_407b76fa-ad8a-c091-1d68-b37e86d68356" valign="top" align="left">Token</th>
<th id="_584ccf06-8b78-bca2-a1df-e79dfae7ea9e" valign="top" align="left">Glyph</th>
<th id="_9b249908-d17b-10df-4c06-c50f285e70db" valign="top" align="left">Means</th>
</tr></thead>
<tbody><tr id="_fcb6dd48-f18f-d604-8630-027e16ce3af9"><td id="_0ae171ca-08fa-706c-e5d5-65c34d933de9" valign="top" align="left"><tt>ZZ</tt></td>
<td id="_83523fec-ec5e-e34d-efdf-1cc032f2208b" valign="top" align="left">ℤ</td>
<td id="_30a18b25-2fbd-f1d8-0fe7-61eefa236ecd" valign="top" align="left">the integers</td>
</tr><tr id="_d2cf2074-d853-128c-7e64-4c213f2fdebd"><td id="_34a6b4bf-d6da-cbea-c6ab-4e0294f50632" valign="top" align="left"><tt>RR</tt></td>
<td id="_bb10205e-f2fa-e03a-2ec2-da0e3683bd14" valign="top" align="left">ℝ</td>
<td id="_4fbc4dcc-77b7-e445-694c-6310f67bb1d6" valign="top" align="left">the reals</td>
</tr><tr id="_14135201-e0b3-9f18-dcb2-2fb9500cef6f"><td id="_a2fa7697-aa45-14f2-d90c-ed67a2341813" valign="top" align="left"><tt>QQ</tt></td>
<td id="_2a309fe4-5799-a17f-51b8-9ffe376f9530" valign="top" align="left">ℚ</td>
<td id="_75377fe8-d6e2-a932-0fb9-18b406d7bc51" valign="top" align="left">the rationals</td>
</tr><tr id="_fdc70001-ba9b-393b-85b7-fd1748d44f5f"><td id="_fc806981-a143-1f03-e2d0-bc915fff7b23" valign="top" align="left"><tt>NN</tt></td>
<td id="_d16144f0-b9e8-a628-60d1-05c711689844" valign="top" align="left">ℕ</td>
<td id="_fe08cab6-4443-233e-7ea7-f83a70a15e44" valign="top" align="left">the naturals</td>
</tr><tr id="_fe7000e3-a01b-4722-6345-670403cc0842"><td id="_7f0d6303-1301-783a-b0f6-867a945d13f0" valign="top" align="left"><tt>CC</tt></td>
<td id="_27f3275e-eb44-069f-7604-afd65f1377b6" valign="top" align="left">ℂ</td>
<td id="_7bb74b59-8492-bf60-3de9-179f8e46c49c" valign="top" align="left">the complexes</td>
</tr></tbody>
</table>

<p id="_507b6f9d-8189-3469-588b-9d8431ba73b0">Both spellings exist for the double-struck set: the prefixed form (<tt>bbZ</tt>) from the public definition and the special token (<tt>ZZ</tt>). The tokens read to the same registry entries; the corpus pins both spellings in every rendering.</p>
</clause>

<clause id="_974cc6e7-e5d7-2d21-7082-3e0bb17cf6ce" obligation="normative">
<title id="_831fa753-b912-c6a0-01f3-e3cba5be4720">Fonts in use</title>
<table id="_c06ed818-7af8-8f8c-53f5-331d4bcf6cd3"><colgroup><col width="33.3333%"/><col width="66.6667%"/></colgroup>
<name id="_aff284e2-cfbc-026a-e88e-d0d961250136">Worked font cases</name>
<thead><tr id="_3d103816-6e5d-ecce-c593-13d249dd48a8"><th id="_924ab13d-8ef2-4ad1-b296-b117788cf57d" valign="top" align="left">Input</th>
<th id="_7dd378b1-b06b-c152-c870-262e19f285af" valign="top" align="left">Reading</th>
</tr></thead>
<tbody><tr id="_cf236f13-a181-c5c8-f726-605ec4f69efc"><td id="_57d78588-575e-4f2e-14a1-5dc3b2b11375" valign="top" align="left"><tt>mathbf(F)</tt> and <tt>bf F</tt>-shaped shorthands where carried</td>
<td id="_88e0aae1-7d5a-be75-9e56-d271a62ac513" valign="top" align="left">the bold variant over the name</td>
</tr><tr id="_464ae2d1-0264-a1c7-0bef-1e041032d809"><td id="_8f698869-3729-55c4-34bd-b04564ee834f" valign="top" align="left"><tt>mathfrak(g)</tt> and <tt>fr g</tt></td>
<td id="_a81663dc-58b1-6279-b7cd-756e9938036a" valign="top" align="left">the fraktur variant — prefixed and shorthand forms of one variant</td>
</tr><tr id="_e4e7011c-b694-71d8-9c31-334a9d1b28bd"><td id="_0c6af3c2-ca71-60ed-c758-ffb496d59f36" valign="top" align="left"><tt>mathbb(R)</tt> and <tt>bb R</tt></td>
<td id="_6491a375-8af1-da07-b0b1-c5b2053c9c99" valign="top" align="left">the double-struck variant — distinct from the <tt>RR</tt> special alphabet token, which is a symbol</td>
</tr><tr id="_42cf2c40-ddb1-15b6-5f7a-927d6707c55a"><td id="_2e050b2b-4790-5b64-f5b0-b6aaa4ec4be1" valign="top" align="left"><tt>rm x</tt></td>
<td id="_0e5a9e08-eb4a-6a79-eab0-be3c7cb7ddf7" valign="top" align="left">the upright variant — the added token</td>
</tr><tr id="_9aa74051-9c9d-2df4-6905-d5402d4a3a93"><td id="_eb161f04-3eb0-478f-fcc4-10f6b91afc3c" valign="top" align="left"><tt>ii x</tt></td>
<td id="_e7e44841-2f71-2573-f404-d99cb1a5fe34" valign="top" align="left">the italic variant — the added token</td>
</tr></tbody>
</table>

<p id="_0f7b251c-bcc8-70fb-bad9-52d4d1bccfee"><tt>bb R</tt> and <tt>RR</tt> read to different nodes — a font style over the letter versus the number-set symbol — and the corpus carries both, because the two readings are the classic confusion the special alphabets exist to end.</p>
</clause>
</clause>

<clause id="_470c137f-4b0b-6481-c390-1d26813a5a56" obligation="normative">
<title id="_24737c93-638d-a306-7642-9a86bc2ef9dc">Annex C: the fences</title>
<clause id="_0cd49295-1fda-d15b-ab2a-132754952eaa" obligation="normative">
<title id="_0c3ac925-ab79-def0-dd81-75c4f07c4af8">The fence table</title>
<p id="_e5e94f1e-83de-b782-2b8c-90530e115f37">The reader’s parenthesis table, normative:</p>

<table id="_ef904515-21a7-016c-2b8a-00fc73ed97e6"><colgroup><col width="28.5714%"/><col width="28.5714%"/><col width="42.8572%"/></colgroup>
<name id="_a87fcfa3-2bdc-b45c-b11c-49b3995ebf92">Fences</name>
<thead><tr id="_2e9b32fa-9fff-7637-6c9e-56f6cf0ea09a"><th id="_acb1c821-6cb6-7f99-5ddf-38b348c01fa4" valign="top" align="left">Opener</th>
<th id="_7583fedb-c5a5-1bed-ffbc-f1be04e04715" valign="top" align="left">Closer</th>
<th id="_3dbb9568-e89b-4c8e-8aca-dfb87343b3bb" valign="top" align="left">Content reading</th>
</tr></thead>
<tbody><tr id="_d318815d-9412-75ad-a4ea-a5a0015efa81"><td id="_3ed8825b-af3f-ad90-788d-3bded99c99d0" valign="top" align="left"><tt>(</tt></td>
<td id="_c3d97d59-f557-437b-c697-fa22effaf56b" valign="top" align="left"><tt>)</tt></td>
<td id="_63f89111-226a-1ff4-854c-ed70adf3d72b" valign="top" align="left">ordinary grouping and construct arguments</td>
</tr><tr id="_528aa39b-7a2f-c01d-b0b4-96b16644ab0e"><td id="_3a6a8c11-4366-9797-33bf-4f24d7e5a8e1" valign="top" align="left"><tt>[</tt></td>
<td id="_8a295e9f-ffd3-220c-4acb-d15773a0644a" valign="top" align="left"><tt>]</tt></td>
<td id="_376f47b2-0e6d-12b0-ad1c-267abadf6130" valign="top" align="left">bracket grouping; row delimiters inside table grids</td>
</tr><tr id="_6587f5ca-0627-f6bc-044f-7dd8778cf508"><td id="_94d85235-9e98-ddb9-f8ca-04fc3c1f5ad0" valign="top" align="left"><tt>{</tt></td>
<td id="_22b37ce6-bad5-1d8e-6118-a004f6fc6ec1" valign="top" align="left"><tt>}</tt></td>
<td id="_1e14a65b-83a3-90d9-d65d-0e57307146b6" valign="top" align="left">brace grouping; brace-delimited matrices</td>
</tr><tr id="_24e72882-5e8d-b852-84e0-b77aaca22903"><td id="_4ed48b47-52be-8a1d-d41b-3feb00e932d0" valign="top" align="left"><tt>ᑕ</tt></td>
<td id="_fc8b30fc-2e1b-e4ec-2256-afd117c27c5c" valign="top" align="left"><tt>ᑐ</tt></td>
<td id="_8bc9a66e-8c31-955c-b83b-61e44711a86e" valign="top" align="left">the single-glyph bracket pair, content as ordinary</td>
</tr><tr id="_71998f1f-64aa-1dfd-25e7-8ac222110005"><td id="_74dac372-853e-a393-c7e8-e756cdfc09ed" valign="top" align="left"><tt>ℒ</tt></td>
<td id="_9cecaf84-807b-c2ef-3bb2-9ba4c5b1cdf2" valign="top" align="left"><tt>ℛ</tt></td>
<td id="_046c503d-c4f0-b4b3-f392-53d9581df628" valign="top" align="left">the script-letter bracket pair, content as ordinary</td>
</tr><tr id="_dae44d97-7c21-d638-e627-6c31522e0334"><td id="_b9937d3a-b576-a5c4-b351-28bc69030fe7" valign="top" align="left"><tt>(:</tt></td>
<td id="_befbed4a-224f-72e3-32d5-ee64b7a6865c" valign="top" align="left"><tt>:)</tt></td>
<td id="_19a352ca-f4b1-cdf7-89dc-9ce62ef2e35a" valign="top" align="left">the angle-bracket pair of the public definition</td>
</tr><tr id="_bf0c7439-90b3-3af4-567b-ccc3dd6ab790"><td id="_8567c10d-b07c-8dd2-ba44-ebebf4b233af" valign="top" align="left">bar pair</td>
<td id="_ed2e1120-ccd9-2e1c-55eb-414027a27665" valign="top" align="left">itself</td>
<td id="_b5a23abb-8a93-2b8d-f07c-35e95f9ca917" valign="top" align="left">the bar pair — <tt>Vmatrix</tt> delimiters and absolute-value-like grouping per context</td>
</tr></tbody>
</table>

<p id="_1a43d937-9e11-e33e-3e48-e3c66b33673d">The multi-glyph pairs (<tt>ᑕ</tt>/<tt>ᑐ</tt>, <tt>ℒ</tt>/<tt>ℛ</tt>) and the letter pair <tt>(:</tt>/<tt>:)</tt> are Plurimath’s additions to the public set; the plain three are the baseline’s.</p>

<p id="_db68924d-43be-28d1-3f6c-4a76a73724fa"><strong>Compatibility note.</strong> The public definition also carries the bare <tt>:</tt> closer; Plurimath’s pairing is strictly two-sided per this table, and a bare closer is a reading error.</p>
</clause>

<clause id="_2a180f14-c2bc-cb28-4ddb-764fe7a77ab9" obligation="normative">
<title id="_8e126cf2-9a39-e799-e52a-2b7e7b1513c2">Nesting</title>
<p id="_d46050ca-2513-8f58-a52f-c8a0cf79664d">Fences nest: <stem block="false" type="MathML"><math xmlns="http://www.w3.org/1998/Math/MathML">
  <mstyle displaystyle="false">
    <mrow>
      <mo>(</mo>
      <mtable>
        <mtr>
          <mtd>
            <mi>a</mi>
          </mtd>
        </mtr>
        <mtr>
          <mtd>
            <mi>b</mi>
          </mtd>
        </mtr>
      </mtable>
      <mo>)</mo>
    </mrow>
  </mstyle>
</math><asciimath>((a),(b))</asciimath></stem> is a parenthesised group containing a comma-adjacent pair — the table-reader sees the grid only in the bracketed forms of clause 9. The open stack tracks pairs by opener identity; the table forms are recognised at their own positions, not by the fence stack.</p>
</clause>

<clause id="_7d1ee639-53d1-1c26-e23e-1d49e6cfccda" obligation="normative">
<title id="_ff3def9a-a8e2-a6c9-b31d-bb4279c0cb8d">Fences as constructs</title>
<p id="_e4785384-d2be-5ef9-609b-6c5ad0832994"><tt>abs(x)</tt>, <tt>norm(x)</tt>, <tt>floor(x)</tt>, <tt>ceil(x)</tt>, <tt>obrace(x)</tt>, <tt>ubrace(x)</tt> are unary constructs, not bare fences: their delimiters come from the construct, and the bare fence characters group without a node of their own. The distinction matters for round trips: a construct’s fence survives (the construct carries it), a bare group’s fence survives as grouping.</p>
</clause>

<clause id="_27b04d8e-79af-80a1-7e62-864ffa866fed" obligation="normative">
<title id="_f535d12e-05ce-6702-295b-6ac5a281f310">The pairs in use</title>
<table id="_366718f8-aef2-cb08-10df-7869d3ff0328"><colgroup><col width="33.3333%"/><col width="66.6667%"/></colgroup>
<name id="_bbfb0a4f-b767-2a8d-4562-d46a9e37119a">Worked fence cases</name>
<thead><tr id="_5b63c8b0-8d0a-4638-6c42-53d88f623ac0"><th id="_6d3e3618-67d3-8119-653f-59020e3c4efd" valign="top" align="left">Input</th>
<th id="_1bedc4d6-ecd1-8464-945e-a5647bc1f69c" valign="top" align="left">Reading</th>
</tr></thead>
<tbody><tr id="_6a44568d-539c-8ad6-8e90-68ea91a3589b"><td id="_e393fca5-25cf-9214-76d0-8872cb7121fd" valign="top" align="left"><tt>(:a, b:)</tt></td>
<td id="_eca0a76f-0d80-6443-3dc5-216125009f06" valign="top" align="left">the angle fence around the pair — the public definition’s inner product form</td>
</tr><tr id="_e5d3a2e4-525b-8620-3f9f-ec4575c095f5"><td id="_26df1e06-d02b-8acf-2701-8d031618f16c" valign="top" align="left"><tt>ᑕaᑐ</tt></td>
<td id="_197694ea-5250-bb44-b4fb-293e6bd69bac" valign="top" align="left">the single-glyph bracket pair, content ordinary</td>
</tr><tr id="_6cdb6ead-ed2f-b304-a669-fecead07e431"><td id="_510ea437-e29f-cb23-11fc-4f1ad4c752bf" valign="top" align="left"><tt>ℒxℛ</tt></td>
<td id="_5bf89921-ccda-46de-d024-79dc5a9dcd5b" valign="top" align="left">the script-letter pair, content ordinary</td>
</tr><tr id="_7a577252-3b6d-cdd1-482e-f8ba8c34f664"><td id="_18bb92b8-4e7d-c6c5-8ed1-2d0b59c0f6e0" valign="top" align="left">bar-x-bar</td>
<td id="_f8d9c7db-8fa1-65cb-6b5a-7c3f92326c88" valign="top" align="left">the bar pair grouping — or <tt>abs x</tt>, which carries its fence on the node</td>
</tr><tr id="_74fefb60-7c5e-8e63-5432-c298697e0941"><td id="_b6660d46-7819-8ff1-819f-d503d472efe6" valign="top" align="left"><stem block="false" type="MathML"><math xmlns="http://www.w3.org/1998/Math/MathML">
  <mstyle displaystyle="false">
    <mrow>
      <mo>(</mo>
      <mtable>
        <mtr>
          <mtd>
            <mi>a</mi>
          </mtd>
        </mtr>
        <mtr>
          <mtd>
            <mi>b</mi>
          </mtd>
        </mtr>
      </mtable>
      <mo>)</mo>
    </mrow>
  </mstyle>
</math><asciimath>((a),(b))</asciimath></stem></td>
<td id="_639e8a96-4819-fa66-18fb-040750433236" valign="top" align="left">two opens — adjacency, not a table; the grid reading needs the bracketed form</td>
</tr></tbody>
</table>

<p id="_dbe66315-4790-3f0b-05ea-bbc21915d57d">The bar pair’s dual role (grouping here, <tt>Vmatrix</tt> delimiter there) is resolved by position: around a bracketed grid it delimits the matrix, elsewhere it groups. The corpus carries both positions.</p>
</clause>

<clause id="_6b234f7d-15c1-5644-834d-fb584b6d1d19" obligation="normative">
<title id="_a1f7d14e-a4b5-20c7-d5d2-1063efaaa980">Fences and round trips</title>
<p id="_75e39d86-1c51-7e98-7851-03b6fd8104e8">A bare group’s fence is grouping, and grouping is not a node — so a round trip may re-spell the grouping (parentheses for brackets where the tree allows). The construct fences (<tt>abs</tt>, <tt>norm</tt>, and kin) ride their nodes and survive exactly. An author who needs a specific fence in the output uses the construct that owns it; an author who needs only grouping takes the round trip’s re-spelling. The corpus freezes which cases re-spell and which do not.</p>
</clause>
</clause>

<clause id="_4836fd1a-299c-1356-cfbc-6e72c1a9f506" obligation="normative">
<title id="_26e10a79-4539-7f75-8903-91a4629cff3f">Annex D: symbol families in full</title>
<clause id="_f536c696-cf60-5891-b00c-fc8f037baa54" obligation="normative">
<title id="_d70a7b6e-78ff-0aeb-1b8b-5182fad6c885">The families and their counts</title>
<p id="_f93ab035-6fef-ee47-9159-93a8f2cc466b">The symbol surface at edition 1, by family, with representative members. The complete token listing is generated from the registry alongside the other tables.</p>

<table id="_922add3d-f0fa-b2f5-0317-5975b566cf07"><colgroup><col width="25%"/><col width="25%"/><col width="50%"/></colgroup>
<name id="_b5692b8a-9141-0a00-2652-8534778c2e0a">Symbol families</name>
<thead><tr id="_a875c8ef-04d0-c060-f0c4-88b79d1c19fe"><th id="_055fec3a-4dcf-c06f-c005-583c933c033e" valign="top" align="left">Family</th>
<th id="_7b0f33b3-c96c-ba71-5b37-2d0c64391ea6" valign="top" align="left">Members</th>
<th id="_8a7e59e5-ab8c-dfa2-9972-99e8675ec8fc" valign="top" align="left">Representatives</th>
</tr></thead>
<tbody><tr id="_99885725-8654-d17e-24ac-eec1f18edf47"><td id="_8af0c4c0-4588-7ee8-75fe-823beb02f6ab" valign="top" align="left">Greek lower</td>
<td id="_3ca4013d-7fb1-df5b-377a-44aa10822062" valign="top" align="left">23</td>
<td id="_319dd00c-b150-6838-64ee-b275d0f9de8a" valign="top" align="left"><tt>alpha</tt> <tt>beta</tt> <tt>gamma</tt> <tt>pi</tt> <tt>omega</tt></td>
</tr><tr id="_7c37af14-7576-5e49-d7a8-2ea1f83d7cd7"><td id="_eac58ebb-a6de-8be1-5f2a-7f9e03f4ea37" valign="top" align="left">Greek upper</td>
<td id="_a5df5821-e879-7f44-f047-ab93d0a3a94e" valign="top" align="left">13</td>
<td id="_ecce91bb-0275-1105-ae2d-a6e4eecb3f15" valign="top" align="left"><tt>Gamma</tt> <tt>Delta</tt> <tt>Omega</tt></td>
</tr><tr id="_8c0b495e-bf8d-800e-7809-0291b39dc7ee"><td id="_ec462276-8673-34bc-5dc8-ba716af8656a" valign="top" align="left">binary operators</td>
<td id="_17e414ad-d0c7-aad0-ff3b-e6466b812479" valign="top" align="left">16</td>
<td id="_ba52f9a0-f42d-80ef-4d35-3912ce574d8c" valign="top" align="left"><tt>times</tt> <tt>pm</tt> <tt>cdot</tt> <tt>oplus</tt></td>
</tr><tr id="_5ace4683-6e34-e117-1b30-8f3b09155e82"><td id="_5cfabde9-f73e-d453-b5a1-c4c49dd0c8e5" valign="top" align="left">relations</td>
<td id="_8d453d11-ba89-49a5-cec1-c0c7e10e3fd6" valign="top" align="left">10</td>
<td id="_7efa9821-3997-2665-7cfe-6815de372fde" valign="top" align="left"><tt>approx</tt> <tt>equiv</tt> <tt>propto</tt></td>
</tr><tr id="_ccaa5fc6-c25d-e08c-9b96-83a9499035fa"><td id="_765f5488-1fcf-6426-7797-644719d3cd91" valign="top" align="left">logic</td>
<td id="_92e47764-ca6e-5210-b5af-28830a5f4f59" valign="top" align="left">9</td>
<td id="_bdf3ae60-e1f9-1173-9922-2f41bf7a71e3" valign="top" align="left"><tt>forall</tt> <tt>exists</tt> <tt>neg</tt> <tt>iff</tt></td>
</tr><tr id="_76083bfc-8f4e-3c48-d8d6-ff7900606fa7"><td id="_a6e5762f-3ff5-203a-ed96-4a1fc3e07fdf" valign="top" align="left">sets</td>
<td id="_c2c59114-f3e8-63ef-c8e0-d377a2e293e1" valign="top" align="left">9</td>
<td id="_3fcc587f-36ab-cbd9-2636-18aec016ab62" valign="top" align="left"><tt>in</tt> <tt>subset</tt> <tt>cup</tt> <tt>cap</tt> <tt>emptyset</tt></td>
</tr><tr id="_22acf0c6-4bda-7944-f821-6c7a2e54c68d"><td id="_f6d4a34a-f5d8-f97c-6a07-db37b8b70499" valign="top" align="left">arrows</td>
<td id="_4e4d5814-b6bf-183a-390f-988a73509dc1" valign="top" align="left">10</td>
<td id="_4d9e4d70-74e6-799f-5c82-e261722f86c8" valign="top" align="left"><tt>-&gt;</tt> <tt>=&gt;</tt> <tt>mapsto</tt> <tt>iff</tt></td>
</tr><tr id="_eeb0af80-b65b-df16-09cb-559732336389"><td id="_497bf777-347c-08fe-5b12-be8d2d35e34a" valign="top" align="left">calculus</td>
<td id="_cf9d7df4-a225-67bb-36a3-79cc2260994e" valign="top" align="left">7</td>
<td id="_ef72f8e8-0d0e-1992-8541-7e711c68cd55" valign="top" align="left"><tt>int</tt> <tt>oint</tt> <tt>sum</tt> <tt>prod</tt> <tt>partial</tt> <tt>nabla</tt></td>
</tr><tr id="_c90beb2d-d191-9fb4-d594-b0467e28edb9"><td id="_bacdd014-f079-dac8-86ed-b4ae8e983730" valign="top" align="left">accents and miscellany</td>
<td id="_6bee7ccc-da30-40f7-0fdb-3ba185a73c22" valign="top" align="left">9</td>
<td id="_97ee3b7b-b3d0-34ac-e656-5b6ef197a66e" valign="top" align="left"><tt>hbar</tt> <tt>ell</tt> <tt>Re</tt> <tt>Im</tt> <tt>wp</tt> <tt>aleph</tt> <tt>oo</tt> <tt>degree</tt> <tt>prime</tt></td>
</tr><tr id="_99860444-f924-28f1-2932-c7f1c7ba1af0"><td id="_67eb66f4-0150-3f72-3f9d-7adef5d6c921" valign="top" align="left">geometry</td>
<td id="_6e819fad-bca3-6e32-d0ab-eba15a9c6bd0" valign="top" align="left">4</td>
<td id="_726c36bd-c7b9-a059-5ee2-95ede2992edb" valign="top" align="left"><tt>angle</tt> <tt>perp</tt> <tt>parallel</tt> <tt>triangle</tt></td>
</tr></tbody>
</table>
</clause>

<clause id="_c29df12f-c1eb-1313-cf07-32865852342f" obligation="normative">
<title id="_4f8fd462-a982-a400-f6fc-5223c11cb872">Tokens with several spellings</title>
<p id="_3d9f2d2a-0cf7-d2b8-eab0-d8cc45cafca6">Some entries accept more than one token: the arrows carry their ASCII spellings (<tt>-&gt;</tt>, <tt>--&gt;</tt>) alongside their named ones; the logic tokens carry words (<tt>and</tt>, <tt>or</tt>) alongside signs. Every spelling reads to the same entry and writes to the entry’s canonical AsciiMath token — the round trip may re-spell, and the tree does not change.</p>
</clause>

<clause id="_c5e49342-03c4-fe9a-dc8e-0af86d8008e5" obligation="normative">
<title id="_59ec1364-4fb8-2868-c713-b21312020928">What is not a symbol</title>
<p id="_a0efa70c-55f2-a263-8e43-2b66f4641c2c">Digits, the structure characters, the construct names, the font names and the quoted strings are not symbol tokens; the reader’s classification is total and a token belongs to exactly one class. The boundary cases are decided by the constants and pinned by the corpus: <tt>e</tt> alone is a symbol; <tt>e5</tt> is nothing (a reading error); <tt>2e5</tt> is a number followed by an error.</p>
</clause>

<clause id="_31be2c04-47cc-d095-196b-66f3a594056a" obligation="normative">
<title id="_28550958-cf78-269c-d0b4-2779cd3e2fa4">The smaller families, complete</title>
<table id="_0c107bdd-5f0b-2ac4-4ec0-48ae4aaceed1"><colgroup><col width="20%"/><col width="20%"/><col width="20%"/><col width="20%"/><col width="20%"/></colgroup>
<name id="_74285a08-0b2e-744a-7d8e-972f6badfc4b">Geometry</name>
<thead><tr id="_ce47f12d-405c-98aa-a15d-f78100300db2"><th id="_557fe79d-b4c9-6b3b-eae9-52bce98fac94" valign="top" align="left"/><th id="_c3ca8d86-5163-01a8-db1e-c5ec04ac31d9" valign="top" align="left"/><th id="_3c539211-c8b0-c4ba-18c5-cf38cc80ff63" valign="top" align="left"/><th id="_bb94e5b5-ae60-bfd4-8992-e5f71e3f396a" valign="top" align="left"/><th id="_96d232c2-3cd3-1d3d-5ba6-929479003a0a" valign="top" align="left"/></tr></thead>
<tbody><tr id="_3451f3f0-328c-3cb9-92b1-6af19444e464"><td id="_d4c2322a-504e-a3e2-8211-5a1f26b9f13c" valign="top" align="left"><tt>angle</tt></td>
<td id="_82a71a87-36cf-bf8c-53b1-eac610c27375" valign="top" align="left"><tt>perp</tt></td>
<td id="_4174c158-6ce1-8ba8-5bb0-559e845c8109" valign="top" align="left"><tt>parallel</tt></td>
<td id="_e93addcc-0b45-c43c-4ce2-2a63ba6a0a6a" valign="top" align="left"><tt>triangle</tt></td>
<td id="_a75e7c78-5250-53b6-dc3c-434dd8f5d6b4" valign="top" align="left"><tt>square</tt></td>
</tr></tbody>
</table>

<table id="_ac245a46-7a5b-3b6b-f2ce-fde126d85c0c"><colgroup><col width="20%"/><col width="20%"/><col width="20%"/><col width="20%"/><col width="20%"/></colgroup>
<name id="_5093c0af-b55b-0a93-4cf0-0f6f4d6f5566">Accents and miscellany</name>
<thead><tr id="_2b5d406a-283b-f75e-2715-99b75d75cd99"><th id="_adab8556-ce39-7832-01aa-62875c90876b" valign="top" align="left"/><th id="_189d4b39-8f4f-36e1-3d25-540f4b66099a" valign="top" align="left"/><th id="_db89f8c9-928b-7e54-f937-f5a8185d09fe" valign="top" align="left"/><th id="_df043745-7bf9-c920-dcb8-c2054e2921f4" valign="top" align="left"/><th id="_04b7f53d-90e5-64d0-4c2a-5dd8391cba91" valign="top" align="left"/></tr></thead>
<tbody><tr id="_f361f5c1-be48-e768-9fef-ecbad560d508"><td id="_a9f3cc96-a4ca-ab9a-a159-db25b5d6d936" valign="top" align="left"><tt>hbar</tt></td>
<td id="_3b73a011-4982-ce84-5297-67ce18679086" valign="top" align="left"><tt>ell</tt></td>
<td id="_097b350a-fe28-c7a7-83b1-0c19a9c98e55" valign="top" align="left"><tt>Re</tt></td>
<td id="_2a102f4d-1da4-19b7-49f2-82794e8f7bb6" valign="top" align="left"><tt>Im</tt></td>
<td id="_f0d0e871-bebb-246a-1574-b6efdcd1359d" valign="top" align="left"><tt>wp</tt></td>
</tr><tr id="_628c6b56-d90f-2eb2-b5e3-98b1d3ed0dc6"><td id="_834d3fe1-3c00-1a9c-6300-62e8605c933a" valign="top" align="left"><tt>aleph</tt></td>
<td id="_7353bceb-948d-f693-bc46-6017053395f9" valign="top" align="left"><tt>oo</tt></td>
<td id="_f019d9a4-365b-913b-5201-1a634a43dc45" valign="top" align="left"><tt>degree</tt></td>
<td id="_3a4ce4fc-b2db-12de-b423-5ff6c67d4f7f" valign="top" align="left"><tt>prime</tt></td>
<td id="_10de5dc4-7dca-832b-f35b-2e5333ceb8c7" valign="top" align="left"/></tr></tbody>
</table>

<p id="_451f0756-6c78-6d74-d21f-75cda560abfe">The largest families (Greek, operators, relations) carry their complete listings in clause 6; the counts in the family table above are the totals the generated listing holds, and this annex repeats only the families small enough to print in full.</p>
</clause>
</clause>

<clause id="_8dc81341-593e-12ba-efce-400491e4f7b3" obligation="normative">
<title id="_19828afc-7b87-4a4d-c11b-849211d66ed3">Annex E: corpus provenance</title>
<clause id="_5316e555-7da8-ec45-95a2-c614c7906c90" obligation="normative">
<title id="_17859b15-b3b4-f099-e7da-53bdc1ed5474">Generations</title>
<table id="_ab503434-dd0a-fcb1-93b7-c60d58fd1a1a"><colgroup><col width="16.6666%"/><col width="33.3333%"/><col width="50.0001%"/></colgroup>
<name id="_96285e63-d69f-8440-dca6-1f442078dcc1">Corpus generations</name>
<thead><tr id="_dd0c592a-bde9-b746-abc9-07145f709d6c"><th id="_7c9b780b-94d8-dd70-7435-2aab7f6d3591" valign="top" align="left">Generation</th>
<th id="_6da2d563-32ff-70ed-ab87-f4e4e0e069b1" valign="top" align="left">Contents</th>
<th id="_c804ae56-420f-7b2c-1637-4e44c2d2b4f4" valign="top" align="left">Provenance</th>
</tr></thead>
<tbody><tr id="_0434cb87-5b69-6bf8-83dc-17676fc95e8d"><td id="_f27c0928-3c34-2419-da7a-094e157aa718" valign="top" align="left">1</td>
<td id="_8bb7fd21-1359-e381-0aa0-4e9cd15bc48a" valign="top" align="left">the initial 143 cases</td>
<td id="_034d2c90-ea74-6fc4-b3ba-5bcd4abfe492" valign="top" align="left">the first frozen surface: constructs, symbols, precedence rulings</td>
</tr><tr id="_a231162e-9799-1496-2612-d3687693fbc6"><td id="_08186685-423a-7d6b-59b2-00251758da43" valign="top" align="left">2</td>
<td id="_0922407b-54c7-7b1d-0a05-6a61729b00db" valign="top" align="left">uncertainty forms</td>
<td id="_2ad968c4-6eb4-7310-1413-cdde039db273" valign="top" align="left">the PM 1002 encodings: calls, reporting form, kinds, unit placements</td>
</tr><tr id="_337051c6-1c9d-c34f-3810-831c06ca081a"><td id="_2b8ead41-218b-db91-7dfa-6631f07cc338" valign="top" align="left">3</td>
<td id="_d52a31e0-f08d-af39-58af-4ca4e62c42ec" valign="top" align="left">shared exponents, locale pairs</td>
<td id="_3c15d1ab-1e58-30e4-3516-dad1509cf6ed" valign="top" align="left">the shared-exponent reading and the localized reading pairs</td>
</tr></tbody>
</table>

<p id="_f15054b0-57f3-2aee-b18b-d86709ce6e5b">Generations extend by appending; a generation’s entries are immutable once published, and the digest replay covers all generations on every run.</p>
</clause>

<clause id="_ace57408-059d-ed1b-ea3b-982606a8ded3" obligation="normative">
<title id="_33cfc43a-2620-c55c-3608-a0579b43c042">Entry provenance</title>
<p id="_587fb7ef-0728-6e30-6bab-40fee4a177c8">Each entry names its origin: the clause of this document that first required it, the defect it froze, or the report that brought it. The provenance is the specification’s institutional memory: a behaviour with a provenance entry is deliberate, and a proposal to change it must name the entry.</p>
</clause>

<clause id="_e4f91e7e-76a6-490c-78aa-bac02bd5a127" obligation="normative">
<title id="_9d3def75-4306-74c0-88fb-34f369b27a88">Where the corpus lives</title>
<p id="_c8b4c62f-2384-4c33-01ed-0a279dbf31e7">The corpus is versioned outside this document, pinned by the replay script the implementation carries. This document’s claims name the generation they were checked against; the register’s build checks the naming.</p>
</clause>
</clause>

<clause id="_a3226065-9ed9-6505-f39d-140ca3982bae" obligation="normative">
<title id="_49190bfd-6ee4-6102-a686-80e5db37c587">Annex F: test-suite examples</title>
<p id="_b5db7d81-de68-5bd5-2ce0-9e97a0d4466f">Vectors illustrative of the conformance classes of clause 16. The corpus freezes them; these are their statements.</p>

<clause id="_8c7ba505-4ac8-442b-5983-2247b8f12404" obligation="normative">
<title id="_6e58d4cb-5f73-f338-72ae-22c1f161d695">Symbol vectors (class <tt>read-asciimath</tt>)</title>
<example id="_8b357f08-5df3-8fac-72c3-8dca21b05d95"><p id="_c4eb98e6-133e-a753-621a-e71d4625595e">One representative per family of Annex D, read. <strong>Expected outcome.</strong> the family’s registry entry per token; the tree is a formula of symbols, and the writer emits each entry’s canonical token.</p>
</example>

<example id="_40e87842-e35e-be18-8beb-04a87674dce7"><p id="_c9b576a5-c4cf-905b-f4a2-425435a8f60c">The longest-match cases: <tt>==&gt;</tt> against <tt>==</tt> then <tt>&gt;</tt>; <tt>&lt;=</tt> against <tt>&lt;</tt> then <tt>=</tt>; <tt>ZZ</tt> against <tt>Z</tt> times <tt>Z</tt>. <strong>Expected outcome.</strong> the long reading in each pair — one arrow, one relation, one number-set token; the corpora freeze all three against their short readings.</p>
</example>

<example id="_b234ea72-e6cb-2290-5063-0c63617da77c"><p id="_86d45a7e-d0d4-8aa5-bd2f-9b43666abe1c">An unresolvable character run — a Greek letter with a modifier the registry lacks. <strong>Expected outcome.</strong> <tt>ParseError</tt> naming the run and its position.</p>
</example>
</clause>

<clause id="_b508e8ca-544c-53ef-343b-68c8f501b776" obligation="normative">
<title id="_8ee0a858-a6a6-f4ca-f162-fe7117200685">Construct vectors (class <tt>read-asciimath</tt>)</title>
<example id="_bf8f1451-77c6-0d13-9847-8a77120bc46d"><p id="_796341ea-6d1e-a54b-4be7-5b1c7a0af7f9">Every unary class of Annex A with a plain argument and a grouped argument. <strong>Expected outcome.</strong> the class’s node with the argument as its operand; the two forms read to equal trees.</p>
</example>

<example id="_070c5882-f290-03c4-38f3-7f8d3d607e6a"><p id="_0e8a4d87-b1b3-e640-ae1f-4667f77f6366">Every binary class with grouped arguments, and <tt>frac</tt> with token arguments. <strong>Expected outcome.</strong> operand order per the class; <tt>frac(a)(b)</tt> and <tt>a/b</tt> read to equal <tt>Frac</tt> nodes.</p>
</example>

<example id="_5665ab6c-4627-51f5-3383-3e607be2497e"><p id="_e0935e74-69dc-6609-88e7-115c92de6b77">The ternary classes bare, with one script, and with both. <strong>Expected outcome.</strong> the nary node with no limits, the lower limit, and both limits respectively.</p>
</example>

<example id="_1c25e9bc-bca3-28fb-236d-a39e9cee9bd4"><p id="_d1f88f37-af45-fb4c-927b-3eefb4ad464f"><tt>lim_(x-&gt;0)</tt>, <tt>log_2 x</tt>, bare <tt>lim x</tt>. <strong>Expected outcome.</strong> the sub/sup class readings with limits attached where written.</p>
</example>
</clause>

<clause id="_1e2cb2f7-71a8-5fb2-3573-def7ce7c74fa" obligation="normative">
<title id="_03f092a2-51d0-2771-542c-7dc82f740d65">Table vectors (class <tt>read-asciimath</tt>)</title>
<example id="_ad675b42-e656-0d3a-c5e3-2f0a87159df8"><p id="_d271b210-14cd-5274-d65f-236e5382c79e">Each bracket form of clause 9 with a two-by-two grid. <strong>Expected outcome.</strong> the class per form — <tt>Matrix</tt>, <tt>Pmatrix</tt>, <tt>Bmatrix</tt>, <tt>Vmatrix</tt> — with equal cell trees.</p>
</example>

<example id="_76ffb764-9629-96bf-1e5c-efb1e8c037f7"><p id="_ea62f9ad-ebbf-221e-a80c-6d605e98308b">A grid with an empty middle cell and a labelled row in the aligned form. <strong>Expected outcome.</strong> the <tt>None</tt> node in place; the label carried per the aligned class.</p>
</example>
</clause>

<clause id="_10f8c15e-74c2-e57f-bb0d-c625e23e0182" obligation="normative">
<title id="_507f593e-377f-28b9-3bb5-83036f88dbe0">Script and fraction vectors</title>
<example id="_05420b13-ceb0-9799-6967-d424996f7fc1"><p id="_191f5481-ee20-da89-f046-0123d405ee00">The four script shapes of clause 10 and both orders of sub and superscript. <strong>Expected outcome.</strong> <tt>Power</tt>, <tt>Base</tt>, and two equal <tt>PowerBase</tt> nodes.</p>
</example>

<example id="_d575185e-c8be-4fe5-40ba-638254395ca4"><p id="_b5070dd0-6895-4c5b-794a-2e735e68cb33"><tt>a/b^2</tt>, <tt>a^2/b</tt>, <tt>a/b/c</tt>. <strong>Expected outcome.</strong> the script inside the denominator; the script on the numerator; the left-associative fraction chain.</p>
</example>
</clause>

<clause id="_bb9aaa72-6d80-1edf-5e96-dd1503250ef2" obligation="normative">
<title id="_63f6026b-5e29-7992-1d7b-56947e17d694">Channel and uncertainty vectors (classes <tt>read-asciimath</tt>)</title>
<example id="_f49df237-9571-c460-ebff-ad80db7aedc2"><p id="_0077ae44-549b-1d48-dbb1-a538fbbf938d">The channel with <tt>g</tt>, with <tt>m/s2</tt>, with a leading space, with an unreadable expression, and a plain quoted string. <strong>Expected outcome.</strong> two unit embeddings; a <tt>Text</tt> node; a reading error naming the expression; a <tt>Text</tt> node — the five rows of clause 11.</p>
</example>

<example id="_69dfd7a4-f862-9078-41f1-12936506261e"><p id="_a62d5a6b-0e7d-1447-5b2d-098b7cfa533c">The six uncertainty readings of clause 12’s table. <strong>Expected outcome.</strong> the categories, notations and kinds per PM 1002; the reporting form reconstructs the magnitude.</p>
</example>

<example id="_9aedb994-f4b4-6024-0f03-d7c5ee758427"><p id="_bbee1ec6-1955-91e5-2bdd-7352b7467b14"><tt>uexp(10.3, 0.5)</tt> and <tt>10.3(25)</tt>. <strong>Expected outcome.</strong> <tt>ParseError</tt> for the arity; <tt>AmbiguousDecimalError</tt> for the place mismatch.</p>
</example>

<example id="_20cb3743-58a4-9c3d-367e-6c32f63e7910"><p id="_07c2a96d-9ec4-e8ac-4742-1f92216cdca9">A shared-exponent reporting form. <strong>Expected outcome.</strong> the concise node with the shifted exact magnitude, per the shared-exponent rule.</p>
</example>
</clause>

<clause id="_7064e05f-8fae-96cf-a2a7-b683a8674934" obligation="normative">
<title id="_1a8dbbce-3294-3617-e441-51a3d234bf88">Precedence vectors (class <tt>read-asciimath</tt>)</title>
<example id="_d62d5411-8cc0-5478-33f0-4a15b9e8b925"><p id="_a67e4903-b17b-25ce-dd34-8efbd9bc858f">Every ruling row of clause 13’s two tables. <strong>Expected outcome.</strong> the stated reading for each — <tt>a/bc</tt>, <tt>sin 2x</tt>, <tt>x^2y</tt>, the refused bare-operator script, the grouped <tt>x^(-x)</tt> — each also frozen in its refused or accepted form.</p>
</example>

<example id="_74f96912-8190-1bf5-909e-50b59ebea446"><p id="_0b24c817-a702-8c1d-729f-296b17146325">The whitespace-ends-attachment rule on a nary and on a script. <strong>Expected outcome.</strong> the limits end before the summand; the script takes one token.</p>
</example>
</clause>

<clause id="_821bc3c0-8e2e-1d16-dd7f-3265deb5e759" obligation="normative">
<title id="_da0b9b7f-1f6a-2a6f-4a4d-1c4809f2a68b">Round-trip vectors (classes <tt>write-asciimath</tt>, <tt>roundtrip-asciimath</tt>)</title>
<example id="_82da84ad-64b4-bcfc-c8d1-c66572616e40"><p id="_356467ac-a5fd-cfd6-90f1-5d3b2a78eb6f">A tree containing every construct family, one uncertainty node per category, and a unit-bearing node — written, read back. <strong>Expected outcome.</strong> an equal tree, notation and kind intact, the unit in the channel; the writer’s bytes byte-frozen.</p>
</example>
</clause>
</clause>

<clause id="_056525d3-5151-7105-01f5-eb91f42cea64" obligation="normative">
<title id="_19e8a72c-6ab5-2225-1c6f-dec10e386eb7">Annex G: annotated readings</title>
<p id="_d5ed9785-1103-8c0b-7924-a9c838cdb549">Twenty inputs, their trees in brief, and the rule each exercises. These are the shapes to internalise; the corpus freezes all of them.</p>

<table id="_dda7ebc4-fd56-5406-b4a6-544cf8dc1cb8"><colgroup><col width="33.3333%"/><col width="66.6667%"/></colgroup>
<name id="_38d23319-2323-33f1-0ab2-5dbca477528d">The readings</name>
<thead><tr id="_471a46b2-c08b-5be5-a368-c3d903ca587a"><th id="_e8aec1ae-fdd9-8f41-e731-958e27f61c52" valign="top" align="left">Input</th>
<th id="_215f14d5-5ba6-93ae-3d01-6b9846ae4e48" valign="top" align="left">Tree and the rule it shows</th>
</tr></thead>
<tbody><tr id="_f273eeb7-21f8-d49a-4503-32b0132a66a1"><td id="_e3f89cd5-3fe8-b19c-8310-8407d1b57e52" valign="top" align="left"><tt>x^2</tt></td>
<td id="_305c8bc3-9447-db57-fd57-6029e207e4a3" valign="top" align="left"><tt>Power</tt> over <tt>x</tt> and 2 — scripts bind to the closed operand.</td>
</tr><tr id="_fea223ff-2d65-9bf2-cb76-38ce5c231926"><td id="_5705aac4-9238-befe-f654-4a63a2e7fcc9" valign="top" align="left"><tt>x_1^2</tt></td>
<td id="_79f75fd3-6558-d5c7-4a37-e18a0210d24e" valign="top" align="left"><tt>PowerBase</tt> — both scripts on one operand, either written order.</td>
</tr><tr id="_cec026df-5490-23f0-bc16-12f08922ac0b"><td id="_6c7af296-d857-95d2-2fce-90ea5849d00d" valign="top" align="left"><tt>a/b</tt></td>
<td id="_1305d9b0-ae6b-126e-e0ad-3196c84130dd" valign="top" align="left"><tt>Frac</tt> — the fraction takes one token per side.</td>
</tr><tr id="_82d5b79b-fc5c-771a-53d5-a358a512dbe7"><td id="_0fe6c0b9-7ed8-af58-9a5e-bab1b287490b" valign="top" align="left"><tt>(a+b)/(c-d)</tt></td>
<td id="_a24bde62-9788-a785-4ad3-341b5df91d4d" valign="top" align="left"><tt>Frac</tt> over two groups — grouping offers the bigger operand.</td>
</tr><tr id="_29d0b3d7-1677-7827-b239-7edf2d155fd4"><td id="_cd8141ff-ded1-c7e3-b3f9-16dec727569d" valign="top" align="left"><tt>sqrt(x+1)</tt></td>
<td id="_00612162-3abb-0122-17b9-19b818724a68" valign="top" align="left"><tt>Sqrt</tt> over the sum — construct parentheses group.</td>
</tr><tr id="_f9ec8993-04cb-485b-38b7-5b39abd87500"><td id="_fd914b23-2c9b-c997-3f9a-3a7239cb46b8" valign="top" align="left"><tt>sqrt x</tt></td>
<td id="_971fc994-1bf5-f9c7-5df6-a643b8ccbcb3" valign="top" align="left"><tt>Sqrt</tt> over <tt>x</tt> — adjacency takes one token.</td>
</tr><tr id="_dd2825c1-a652-70ca-90ea-85702d5c136f"><td id="_51e68e5d-333a-b79c-d92a-ce22d075dc11" valign="top" align="left"><tt>sin 2x</tt></td>
<td id="_e195e969-d6ce-f927-7ce0-75582c2854cf" valign="top" align="left">sine of <tt>2</tt>, times <tt>x</tt> — the unary adjacency rule.</td>
</tr><tr id="_b8a0a0fd-a4db-f8cb-43d2-44cb9f5064f5"><td id="_339fd71a-d559-b3b4-fb3a-c7f7f1b85668" valign="top" align="left"><tt>sum_(i=1)^n i^3</tt></td>
<td id="_11cb3a8a-faa0-3ab7-d895-bbd4d950e06b" valign="top" align="left">limited <tt>Sum</tt>, then the summand — whitespace ends the attachment.</td>
</tr><tr id="_15cd7498-f771-a410-06dd-9a059401e88c"><td id="_fa9a7db5-5b4c-a463-69fd-b0f8af3bc038" valign="top" align="left"><tt>lim_(x-&gt;0)</tt></td>
<td id="_54bdd113-fe09-52ca-cd0d-7694811b34d8" valign="top" align="left">the limit with its lower script — the arrow is script content.</td>
</tr><tr id="_0ece7fa4-bcb6-1708-a6bf-5cbffdb9bf87"><td id="_e6474d0c-0c03-a6b3-e032-465b6a233b03" valign="top" align="left"><tt>log_2 8</tt></td>
<td id="_25575dd6-3ecf-1779-a63f-e251220c28fb" valign="top" align="left">the logarithm with base <tt>2</tt> — the sub/sup reading.</td>
</tr><tr id="_3b4d25aa-d742-6b8b-996d-a4e78bdcf7ce"><td id="_8c6a1b83-124c-1e37-5008-21b80da9a5ad" valign="top" align="left"><tt>[[1,2],[3,4]]</tt></td>
<td id="_e8c96579-6000-f4aa-5e02-a4db0b0a3f4b" valign="top" align="left">plain <tt>Matrix</tt> — each inner bracket pair is a row.</td>
</tr><tr id="_904f3629-866a-8365-4da9-8d1a7c090288"><td id="_bd2186cf-5ef0-8671-2168-2cd8ff3403ca" valign="top" align="left"><tt>([1,2],[3,4])</tt></td>
<td id="_b4a7f1f3-3315-4364-481f-7f1ca43a2898" valign="top" align="left"><tt>Pmatrix</tt> — the fence selects the class.</td>
</tr><tr id="_2e515aa1-9e9a-6b96-eef2-a77a54cd621a"><td id="_ce54aed4-7425-04a7-6f72-7e2e030f495b" valign="top" align="left"><tt>text(hello)</tt> and <tt>"hello"</tt></td>
<td id="_b438699e-25e8-c486-e5d0-49a10e18c3ce" valign="top" align="left">two <tt>Text</tt> routes to equal content.</td>
</tr><tr id="_b86c018e-6bab-4021-bc37-461203377323"><td id="_09dfe2d3-e45d-7052-a588-6c02d5744c7c" valign="top" align="left"><tt>"unitsml(g)"</tt></td>
<td id="_865a2ed5-ddaa-ccc4-4cb6-e55c5db34ea0" valign="top" align="left">the channel — the unit embedding, not text.</td>
</tr><tr id="_f761d4ac-3552-cb85-a80d-ab4737b5bedc"><td id="_d16c259a-5a17-1f08-197c-ee4fc9ef2fa6" valign="top" align="left"><tt>uexp(10.3, 0.5, 2, 0.95)</tt></td>
<td id="_cb4cf64e-6c24-342b-5945-81efd2522076" valign="top" align="left">the expanded uncertainty — category in the call name.</td>
</tr><tr id="_aa06c7bd-391c-5942-f809-cf01e0ddb965"><td id="_5c7c4310-2308-dc92-1f8b-e324d9cc16bc" valign="top" align="left"><tt>10.3(2)</tt></td>
<td id="_9c832842-6358-8fe6-b5b0-eaeba4f0a4ac" valign="top" align="left">the reporting form — the shape claimed before adjacency.</td>
</tr><tr id="_d00a2ed1-0540-b638-9bf2-2f31f3863ce6"><td id="_48fb0847-4a0c-5dde-36d1-72ba75ec677b" valign="top" align="left"><tt>ZZ</tt></td>
<td id="_9a54c646-c09f-3c73-819e-2fffb4e504bf" valign="top" align="left">the double-struck integers — the special alphabet before letters.</td>
</tr><tr id="_7ad4dfd7-c391-fdd6-95e4-4e0729713097"><td id="_0b0f9e52-2530-8426-9478-f8167fd459c0" valign="top" align="left"><tt>x^(-x)</tt></td>
<td id="_0a7413d9-92c0-fe1e-0eeb-24266399770b" valign="top" align="left"><tt>x</tt> to the <tt>−x</tt> — the grouped script content.</td>
</tr><tr id="_a376a158-ed17-02f8-7034-6f43c083c48d"><td id="_58c3d1ac-dae6-d603-89f2-f553d44576cb" valign="top" align="left"><tt>a/bc</tt></td>
<td id="_c669810f-14ad-f8ec-3a89-a591013a0fde" valign="top" align="left"><tt>a/b</tt> times <tt>c</tt> — the smallest-operand rule.</td>
</tr><tr id="_380934d5-d415-07e5-c245-3d1e2d56beda"><td id="_ea4844b0-b0d7-f87d-6dcb-dec84bf7e1e9" valign="top" align="left"><stem block="false" type="MathML"><math xmlns="http://www.w3.org/1998/Math/MathML">
  <mstyle displaystyle="false">
    <msup>
      <mrow>
        <mo>(</mo>
        <mfrac>
          <mrow>
            <mi>n</mi>
            <mrow>
              <mo>(</mo>
              <mi>n</mi>
              <mo>+</mo>
              <mn>1</mn>
              <mo>)</mo>
            </mrow>
          </mrow>
          <mn>2</mn>
        </mfrac>
        <mo>)</mo>
      </mrow>
      <mn>2</mn>
    </msup>
  </mstyle>
</math><asciimath>((n(n+1))/2)^2</asciimath></stem></td>
<td id="_ba5dee04-a2d4-bed0-a01d-a097c217ff24" valign="top" align="left">the fenced fraction, scripted — grouping offers the fraction, the script takes it.</td>
</tr></tbody>
</table>

<p id="_e92930e8-57aa-9d5e-5038-be93e7d614f1">Each row is one corpus vector with its renderings frozen; this annex is the reading guide, the corpus is the contract.</p>
</clause>


</sections><bibliography><references id="_7fd9c34c-ca4c-7dc5-f995-b39c91b139c8" 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="cc36817" id="_34297505-97d8-08b8-5576-6f597ab6b591"><formattedref format="application/x-isodoc+xml">of the UnitsML series — the content of the quoted channel of clause 11.</formattedref><docidentifier>CalConnect 36817 (asciiunits content language)</docidentifier><docnumber>36817 (asciiunits content language)</docnumber><language>en</language><script>Latn</script></bibitem>
<bibitem anchor="asciimath-org" id="_5132a613-cad3-21d2-edb0-0e5b0fbb0c65"><formattedref format="application/x-isodoc+xml">— the public AsciiMath definition, cited in the compatibility notes as the baseline this surface descends from.</formattedref><docidentifier>asciimath.org</docidentifier><language>en</language><script>Latn</script></bibitem>
</references><references id="_2fd9dae2-7c58-6fb3-21aa-e1b0f0fe3ef3" 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="asciimath-org-b" id="_d788d98e-2c11-3ae9-460e-ebcd06ebb0ed">
  <formattedref format="application/x-isodoc+xml">— the public AsciiMath definition (the compatibility baseline)</formattedref>
  <docidentifier>asciimath.org</docidentifier>
  <language>en</language>
  <script>Latn</script>
</bibitem><bibitem anchor="pm1001-b" id="_354edbf2-917c-f6fe-949d-9b2ce77a5888">
  <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="_6a47138f-67bd-9e12-ec37-1fb8c45bc4e5">
  <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="_e01ae777-d7d3-e8c6-2c7c-455bd06695a4">
  <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="_01e7b014-885f-616d-b024-b9d7f790f4f2">
  <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="cc36817-b" id="_8375c132-9562-58d6-b0c7-82fa50ba93ca">
  <formattedref format="application/x-isodoc+xml">— the asciiunits content language (the channel’s content)</formattedref>
  <docidentifier>CalConnect 36817</docidentifier>
  <docnumber>36817</docnumber>
  <language>en</language>
  <script>Latn</script>
</bibitem><bibitem anchor="pm-testsuite" id="_9d998c90-f64b-1278-1d66-67a7cb3ca25e">
  <formattedref format="application/x-isodoc+xml">— the pinned corpus repository and its generations</formattedref>
  <docidentifier>plurimath-testsuite</docidentifier>
  <language>en</language>
  <script>Latn</script>
</bibitem>








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