-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathmath-json.html
347 lines (347 loc) · 130 KB
/
math-json.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-compute-engine/math-json" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.7.0">
<title data-rh="true">MathJSON Format · CortexJS</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://cortexjs.io/img/social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://cortexjs.io/img/social-card.jpg"><meta data-rh="true" property="og:url" content="https://cortexjs.io/math-json"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="MathJSON Format · CortexJS"><meta data-rh="true" name="description" content="MathJSON is a lightweight data interchange format for mathematical notation"><meta data-rh="true" property="og:description" content="MathJSON is a lightweight data interchange format for mathematical notation"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://cortexjs.io/math-json"><link data-rh="true" rel="alternate" href="https://cortexjs.io/math-json" hreflang="en"><link data-rh="true" rel="alternate" href="https://cortexjs.io/math-json" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://Q23Y5RN3UQ-dsn.algolia.net" crossorigin="anonymous"><link rel="search" type="application/opensearchdescription+xml" title="CortexJS" href="/opensearch.xml">
<link rel="stylesheet" src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/codemirror.min.css">
<script>!function(){var e,o;window.moduleMap||(window.moduleMap={}),window.moduleMap={...window.moduleMap,mathlive:"//unpkg.com/mathlive?module","compute-engine":"//unpkg.com/@cortex-js/compute-engine?module"},(e=["https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/codemirror.min.js","https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/mode/javascript/javascript.min.js","https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/mode/xml/xml.min.js","https://unpkg.com/@cortex-js/compute-engine","https://unpkg.com/mathlive/dist/mathlive.min.js","https://unpkg.com/@ui-js/code-playground/dist/code-playground.js@module"]).forEach(((t,m)=>{const n=t.endsWith("@module"),c="script"+function(e,o=0){let t=3735928559^o,m=1103547991^o;for(let o=0;o<e.length;o++){const n=e.charCodeAt(o);t=Math.imul(t^n,2654435761),m=Math.imul(m^n,1597334677)}return t=Math.imul(t^t>>>16,2246822507),t^=Math.imul(m^m>>>13,3266489909),m=Math.imul(m^m>>>16,2246822507),m^=Math.imul(t^t>>>13,3266489909),4294967296*(2097151&m)+(t>>>0)}(t=t.replace("@module","")).toString(36);if(document.getElementById(c))return;const d=document.createElement("script");n&&(d.type="module"),d.id=c,d.src=t,d.async=!1,o&&m===e.length-1&&(d.onload=o),document.head.appendChild(d)}))}()</script>
<link rel="preconnect" href="https://rsms.me/">
<link rel="stylesheet" href="https://rsms.me/inter/inter.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="/assets/css/styles.5e964885.css">
<script src="/assets/js/runtime~main.196a30fe.js" defer="defer"></script>
<script src="/assets/js/main.5ee1857f.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();null!==e?t(e):window.matchMedia("(prefers-color-scheme: dark)").matches?t("dark"):(window.matchMedia("(prefers-color-scheme: light)").matches,t("light"))}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><b class="navbar__title text--truncate">CortexJS</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/mathfield">Mathfield</a><a class="navbar__item navbar__link" href="/compute-engine">Compute Engine</a></div><div class="navbar__items navbar__items--right"><a href="https://github.com/cortex-js" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link" icon="github">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a><div class="navbarSearchContainer_Bca1"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search (Command+K)"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20" aria-hidden="true"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="docsWrapper_hBAB"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docRoot_UBD9"><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class="sidebarViewport_aRkj"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/mathfield">Mathfield</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" role="button" aria-expanded="true" href="/compute-engine">Compute Engine</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item compass-icon"><a class="menu__link" tabindex="0" href="/compute-engine">Introduction</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item flask-icon"><a class="menu__link" tabindex="0" href="/compute-engine/demo">Demo</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2"><hr></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item changelog-icon"><a class="menu__link" tabindex="0" href="/compute-engine/changelog">Changelog</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2"><hr></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/expressions">Expressions</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/evaluate">Evaluation of Expressions</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/symbolic-computing">Symbolic Computing</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/numeric-evaluation">Numeric Evaluation</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/canonical-form">Canonical Form</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/symbols">Symbols</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/augmenting">Custom Functions and Symbols</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/latex-syntax">LaTeX Syntax</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/types">Types</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/simplify">Simplify</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/compiling">Compiling Expressions</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/assumptions">Assumptions</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/patterns-and-rules">Patterns and Rules</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2"><hr></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item sdk-icon"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/math-json">MathJSON Format</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item sdk-icon"><a class="menu__link" tabindex="0" href="/compute-engine/api">API Reference</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2"><hr></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item compass-icon"><a class="menu__link" tabindex="0" href="/compute-engine/standard-library">MathJSON Standard Library</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/arithmetic">Arithmetic</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/calculus">Calculus</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/collections">Collections</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/complex">Complex</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/control-structures">Control Structures</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/core">Core</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/functions">Functions</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/linear-algebra">Linear Algebra</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/logic">Logic</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/sets">Sets</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/special-functions">Special Functions</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/statistics">Statistics</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/styling">Styling</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/trigonometry">Trigonometry</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link">Tutorials</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item tutorial-icon"><a class="menu__link" tabindex="0" href="/tutorials/simple-quiz">Simple Quiz</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/about">Additional Resources</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_TBSr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Compute Engine</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">MathJSON Format</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><div class="heroContainer_TJ2O" style="--hero-image:url(/img/hero/math-json.jpg)"><div class="heroImage_PmN2"></div><div class="heroText_Kqfb"><header><h1>MathJSON</h1></header></div></div>
<div class="intro_b9yo"><p>MathJSON: a lightweight data interchange format for mathematical notation.</p></div>
<div class="symbols-table"><table><thead><tr><th style="text-align:left">Math</th><th style="text-align:left">MathJSON</th></tr></thead><tbody><tr><td style="text-align:left"><code class="language-math math-inline">\displaystyle\frac{n}{1+n}</code></td><td style="text-align:left"><code>["Divide", "n", ["Add", 1, "n"]]</code></td></tr><tr><td style="text-align:left"><code class="language-math math-inline">\sin^{-1}^\prime(x)</code></td><td style="text-align:left"><code>["Apply", ["Derivative", ["InverseFunction", "Sin"]], "x"]</code></td></tr></tbody></table></div>
<p>MathJSON is built on the <a href="https://www.json.org/" target="_blank" rel="noopener noreferrer">JSON format</a>. Its focus is on
interoperability between software programs to facilitate the exchange of
mathematical data and the building of scientific software through the
integration of software components communicating with a common format.</p>
<p>It is human-readable, while being easy for machines to generate and parse. It is
simple enough that it can be generated, consumed and manipulated using any
programming languages.</p>
<p>MathJSON can be transformed from (parsing) and to (serialization) other formats.</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Demo</div><div class="admonitionContent_BuS1"><p>Type an expression in the mathfield below to see its MathJSON representation.</p><math-field style="width:100%;border-radius:8px;padding:8px;margin-bottom:1em">e^{i\pi}+1=0</math-field><div class="console_pCP6"><span class="sep_A8lW">{}</span></div></div></div>
<p>The <strong>Cortex Compute Engine</strong> library provides an implementation in
JavaScript/TypeScript of utilities that parse LaTeX to MathJSON, serialize
MathJSON to LaTeX, and provide a collection of functions for symbolic
manipulation and numeric evaluations of MathJSON expressions.</p>
<div class="readMore_KWn8"><a href="/compute-engine/demo/"><p>Try a demo of the <strong>Compute Engine</strong><svg class="icon_qj0s chevronRightBold_bbMj"><use xlink:href="/icons.svg#chevron-right-bold"></use></svg></p></a></div>
<div class="readMore_KWn8"><a href="/compute-engine/guides/latex-syntax/"><p>Read more about the <strong>Compute Engine</strong> LaTeX syntax parsing and
serializing<svg class="icon_qj0s chevronRightBold_bbMj"><use xlink:href="/icons.svg#chevron-right-bold"></use></svg></p></a></div>
<p>Mathematical notation is used in a broad array of fields, from elementary school
arithmetic, engineering, applied mathematics to physics and more. New notations
are invented regularly and MathJSON endeavors to be flexible and extensible to
account for those notations.</p>
<p>The Compute Engine includes a standard library of functions and symbols which
can be extended with custom libraries.</p>
<div class="readMore_KWn8"><a href="/compute-engine/guides/standard-library/"><p>Read more about the <strong>MathJSON Standard Library</strong><svg class="icon_qj0s chevronRightBold_bbMj"><use xlink:href="/icons.svg#chevron-right-bold"></use></svg></p></a></div>
<p>MathJSON is not intended to be suitable as a visual representation of arbitrary
mathematical notations, and as such is not a replacement for LaTeX or MathML.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="structure-of-a-mathjson-expression">Structure of a MathJSON Expression<a href="#structure-of-a-mathjson-expression" class="hash-link" aria-label="Direct link to Structure of a MathJSON Expression" title="Direct link to Structure of a MathJSON Expression"></a></h2>
<p>A MathJSON expression is a combination of <strong>numbers</strong>, <strong>symbols</strong>, <strong>strings</strong>
and <strong>functions</strong>.</p>
<p><strong>Number</strong></p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:var(--console-color)"><span class="token number" style="color:var(--base-09)">3.14</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token number" style="color:var(--base-09)">314e-2</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"3.14159265358979323846264338327950288419716939937510"</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"-Infinity"</span><span class="token punctuation" style="color:var(--base-06)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><strong>Symbol</strong></p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:var(--console-color)"><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token string" style="color:var(--base-0b)">"Pi"</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token string" style="color:var(--base-0b)">"🍎"</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token string" style="color:var(--base-0b)">"半径"</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token property" style="color:var(--base-0c)">"sym"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Pi"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"wikidata"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Q167"</span><span class="token punctuation" style="color:var(--base-06)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><strong>String</strong></p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:var(--console-color)"><span class="token string" style="color:var(--base-0b)">"'Diameter of a circle'"</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token property" style="color:var(--base-0c)">"str"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Srinivasa Ramanujan"</span><span class="token punctuation" style="color:var(--base-06)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><strong>Function</strong></p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Add"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">1</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token property" style="color:var(--base-0c)">"fn"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token property" style="color:var(--base-0c)">"sym"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Add"</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"1"</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token property" style="color:var(--base-0c)">"sym"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><strong>Numbers</strong>, <strong>symbols</strong>, <strong>strings</strong> and <strong>functions</strong> are expressed either as
object literals with a <code>"num"</code> <code>"str"</code> <code>"sym"</code> or <code>"fn"</code> key, respectively, or
using a shorthand notation as a a JSON number, string or array.</p>
<p>The shorthand notation is more concise and easier to read, but it cannot include
metadata properties.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="numbers">Numbers<a href="#numbers" class="hash-link" aria-label="Direct link to Numbers" title="Direct link to Numbers"></a></h2>
<p>A MathJSON <strong>number</strong> is either:</p>
<ul>
<li>an object literal with a <code>"num"</code> key</li>
<li>a JSON number</li>
<li>a JSON string starting with <code>+</code>, <code>-</code> or the digits <code>0</code>-<code>9</code>. Using a string
is useful to represent numbers with a higher precision or greater range than
JSON numbers.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="numbers-as-object-literals">Numbers as Object Literals<a href="#numbers-as-object-literals" class="hash-link" aria-label="Direct link to Numbers as Object Literals" title="Direct link to Numbers as Object Literals"></a></h3>
<p><strong>Numbers</strong> may be represented as an object literal with a <code>"num"</code> key. The
value of the key is a <strong>string</strong> representation of the number.</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> <string></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>The string representing a number follows the
<a href="https://tools.ietf.org/html/rfc7159#section-6" target="_blank" rel="noopener noreferrer">JSON syntax for number</a>, with
the following differences:</p>
<ul>
<li>The range or precision of MathJSON numbers may be greater than the range and
precision supported by <a href="https://en.wikipedia.org/wiki/IEEE_754" target="_blank" rel="noopener noreferrer">IEEE 754</a>
64-bit float.</li>
</ul>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"1.1238976755823478721365872345683247563245876e-4567"</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<ul>
<li>The string values <code>"NaN"</code> <code>"+Infinity"</code> and <code>"-Infinity"</code> are used to
represent respectively an undefined result as per
<a href="https://en.wikipedia.org/wiki/IEEE_754" target="_blank" rel="noopener noreferrer">IEEE 754</a>, <code class="language-math math-inline">+\infty</code>, and
<code class="language-math math-inline">-\infty</code>.</li>
</ul>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"+Infinity"</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<ul>
<li>If the string includes the pattern <code>/\([0-9]+\)/</code>, that is a series of one or
more digits enclosed in parentheses, that pattern is interpreted as
repeating digits.</li>
</ul>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"1.(3)"</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"0.(142857)"</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"0.(142857)e7"</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<ul>
<li>The following characters in a string representing a number are ignored:</li>
</ul>
<div class="symbols-table first-column-header" style="--first-col-width:9ch"><table><thead><tr><th style="text-align:left"></th><th style="text-align:left"></th></tr></thead><tbody><tr><td style="text-align:left"><strong>U+0009</strong></td><td style="text-align:left"><strong>TAB</strong></td></tr><tr><td style="text-align:left"><strong>U+000A</strong></td><td style="text-align:left"><strong>LINE FEED</strong></td></tr><tr><td style="text-align:left"><strong>U+000B</strong></td><td style="text-align:left"><strong>VERTICAL TAB</strong></td></tr><tr><td style="text-align:left"><strong>U+000C</strong></td><td style="text-align:left"><strong>FORM FEED</strong></td></tr><tr><td style="text-align:left"><strong>U+000D</strong></td><td style="text-align:left"><strong>CARRIAGE RETURN</strong></td></tr><tr><td style="text-align:left"><strong>U+0020</strong></td><td style="text-align:left"><strong>SPACE</strong></td></tr><tr><td style="text-align:left"><strong>U+00A0</strong></td><td style="text-align:left"><strong>UNBREAKABLE SPACE</strong></td></tr></tbody></table></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="numbers-as-number-literals">Numbers as Number Literals<a href="#numbers-as-number-literals" class="hash-link" aria-label="Direct link to Numbers as Number Literals" title="Direct link to Numbers as Number Literals"></a></h3>
<p>When a <strong>number</strong> is compatible with the JSON representation of numbers and
has no metadata, a JSON number literal may be used.</p>
<p>Specifically:</p>
<ul>
<li>the number fits in a 64-bit binary floating point, as per <strong>IEEE 754-2008</strong>, with a
53-bit significand (about 15 digits of precision) and 11-bit exponent.
If negative, its range is from <code class="language-math math-inline">-1.797693134862315 \cdot 10^{+308}</code> to <code class="language-math math-inline">-2.225073858507201\cdot 10^{-308}</code>
and if positive from <code class="language-math math-inline">2.225073858507201\cdot 10^{-308}</code> to <code class="language-math math-inline">1.797693134862315\cdot 10^{+308}</code></li>
<li>the number is finite: it is not <code>+Infinity</code> <code>-Infinity</code> or <code>NaN</code>.</li>
</ul>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:var(--console-color)"><span class="token number" style="color:var(--base-09)">0</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token number" style="color:var(--base-09)">-234.534e-46</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>The numeric values below may not be represented as JSON number literals:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:var(--console-color)"><span class="token comment" style="color:var(--base-05)">// Exponent out of bounds</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"5.78e400"</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// Too many digits</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"3.14159265358979323846264338327950288419716"</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// Non-finite numeric value</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"-Infinity"</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="numbers-as-string-literals">Numbers as String Literals<a href="#numbers-as-string-literals" class="hash-link" aria-label="Direct link to Numbers as String Literals" title="Direct link to Numbers as String Literals"></a></h3>
<p>An alternate representation of a <strong>number</strong> with no extra metadata is as a
string following the format described above.</p>
<p>This allows for a shorthand representation of numbers with a higher precision or
greater range than JSON numbers.</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:var(--console-color)"><span class="token string" style="color:var(--base-0b)">"3.14159265358979323846264338327950288419716"</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token string" style="color:var(--base-0b)">"+Infinity"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="strings">Strings<a href="#strings" class="hash-link" aria-label="Direct link to Strings" title="Direct link to Strings"></a></h2>
<p>A MathJSON <strong>string</strong> is either:</p>
<ul>
<li>an object literal with a <code>"str"</code> key</li>
<li>a <a href="https://tools.ietf.org/html/rfc7159#section-7" target="_blank" rel="noopener noreferrer">JSON string</a> that starts and
ends with <strong>U+0027 <code>'</code> APOSTROPHE</strong> .</li>
</ul>
<p>Strings may contain any character represented by a Unicode scalar value (a
codepoint in the <code>[0...0x10FFFF]</code> range, except for <code>[0xD800...0xDFFF]</code>), but
the following characters must be escaped as indicated:</p>
<div class="symbols-table first-column-header" style="--first-col-width:9ch"><table><thead><tr><th style="text-align:left">Codepoint</th><th style="text-align:left">Name</th><th style="text-align:left">Escape Sequence</th></tr></thead><tbody><tr><td style="text-align:left"><strong>U+0000</strong> to <strong>U+001F</strong></td><td style="text-align:left"></td><td style="text-align:left"><code>\u0000</code> to <code>\u001f</code></td></tr><tr><td style="text-align:left"><strong>U+0008</strong></td><td style="text-align:left"><strong>BACKSPACE</strong></td><td style="text-align:left"><code>\b</code> or <code>\u0008</code></td></tr><tr><td style="text-align:left"><strong>U+0009</strong></td><td style="text-align:left"><strong>TAB</strong></td><td style="text-align:left"><code>\t</code> or <code>\u0009</code></td></tr><tr><td style="text-align:left"><strong>U+000A</strong></td><td style="text-align:left"><strong>LINE FEED</strong></td><td style="text-align:left"><code>\n</code> or <code>\u000a</code></td></tr><tr><td style="text-align:left"><strong>U+000C</strong></td><td style="text-align:left"><strong>FORM FEED</strong></td><td style="text-align:left"><code>\f</code> or <code>\u000c</code></td></tr><tr><td style="text-align:left"><strong>U+000D</strong></td><td style="text-align:left"><strong>CARRIAGE RETURN</strong></td><td style="text-align:left"><code>\r</code> or <code>\u000d</code></td></tr><tr><td style="text-align:left"><strong>U+0027</strong></td><td style="text-align:left"><strong>APOSTROPHE</strong></td><td style="text-align:left"><code>\'</code> or <code>\u0027</code></td></tr><tr><td style="text-align:left"><strong>U+005C</strong></td><td style="text-align:left"><strong>REVERSE SOLIDUS</strong> (backslash)</td><td style="text-align:left"><code>\\</code> or <code>\u005c</code></td></tr></tbody></table></div>
<p>The encoding of the string follows the encoding of the JSON payload: UTF-8,
UTF-16LE, UTF-16BE, etc...</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:var(--console-color)"><span class="token string" style="color:var(--base-0b)">"'Alan Turing'"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="functions">Functions<a href="#functions" class="hash-link" aria-label="Direct link to Functions" title="Direct link to Functions"></a></h2>
<p>A MathJSON function expression is either:</p>
<ul>
<li>an object literal with a <code>"fn"</code> key.</li>
<li>a JSON array</li>
</ul>
<p>Function expressions in the context of MathJSON may be used to represent
mathematical functions but are more generally used to represent the application
of a function to some arguments.</p>
<p>The function expression <code>["Add", 2, 3]</code> applies the function named <code>Add</code> to the
arguments <code>2</code> and <code>3</code>.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="functions-as-object-literal">Functions as Object Literal<a href="#functions-as-object-literal" class="hash-link" aria-label="Direct link to Functions as Object Literal" title="Direct link to Functions as Object Literal"></a></h3>
<p>The default representation of <strong>function expressions</strong> is an object literal with
a <code>"fn"</code> key. The value of the <code>fn</code> key is an array representing the function
operator (its name) and its arguments (its operands).</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token string-property property" style="color:var(--base-0c)">"fn"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token plain">Operator</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">...</span><span class="token plain">Operands</span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>For example:</p>
<ul>
<li><code class="language-math math-inline">2+x</code>: <code>{ "fn": ["Add", 2, "x"] }</code></li>
<li><code class="language-math math-inline">\sin(2x+\pi)</code>: <code>{ "fn": ["Sin", ["Add", ["Multiply", 2, "x"], "Pi"]] }</code></li>
<li><code class="language-math math-inline">x^2-3x+5</code>: <code>{ "fn": ["Add", ["Power", "x", 2], ["Multiply", -3, "x"], 5] }</code></li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="functions-as-json-arrays">Functions as JSON Arrays<a href="#functions-as-json-arrays" class="hash-link" aria-label="Direct link to Functions as JSON Arrays" title="Direct link to Functions as JSON Arrays"></a></h3>
<p>If a <strong>function expression</strong> has no extra metadata it may be represented as a JSON array.</p>
<p>For example these two expressions are equivalent:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"fn"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Cos"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Add"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">1</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Cos"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Add"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">1</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>An array representing a function must have at least one element, the operator of the
function. Therefore <code>[]</code> is not a valid expression.</p></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="function-operator">Function Operator<a href="#function-operator" class="hash-link" aria-label="Direct link to Function Operator" title="Direct link to Function Operator"></a></h3>
<p>The <strong>operator</strong> of the function expression is the first element in the array.
Its presence is required. It indicates the <strong>name of the function</strong>: this is
what the function is about.</p>
<p>The operator is an identifier following the conventions for function names (see
below).</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:var(--console-color)"><span class="token comment" style="color:var(--base-05)">// Apply the function "Sin" to the argument "x"</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Sin"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// Apply "Cos" to a function expression</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Cos"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Divide"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Pi"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">2</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Following the operator are zero or more <strong>arguments</strong> (or <strong>operands</strong>),
which are expressions.</p>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>CAUTION</div><div class="admonitionContent_BuS1"><p>The arguments of a function are expressions. To represent an
argument which is a list, use a <code>["List"]</code> expression, do not use a JSON array.</p></div></div>
<p>The expression corresponding to <code class="language-math math-inline">\sin^{-1}(x)</code> is:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Apply"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"InverseFunction"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Sin"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">]</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>The operator of this expression is <code>"Apply"</code> and its argument are the expressions
<code>["InverseFunction", "Sin"]</code> and <code>"x"</code>.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="shorthands">Shorthands<a href="#shorthands" class="hash-link" aria-label="Direct link to Shorthands" title="Direct link to Shorthands"></a></h3>
<p>The following shorthands are allowed:</p>
<ul>
<li>A <code>["Dictionary"]</code> expression may be represented as a string starting with
<strong>U+007B <code>{</code> LEFT CURLY BRACKET</strong> and ending with <strong>U+007D <code>}</code> RIGHT CURLY BRACKET</strong>. The string must be a valid JSON object literal.</li>
<li>A <code>["List"]</code> expression may be represented as a string starting with
<strong>U+005B <code>[</code> LEFT SQUARE BRACKET</strong> and ending with
<strong>U+005D <code>]</code> RIGHT SQUARE BRACKET</strong>. The string must be a valid JSON array.</li>
</ul>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:var(--console-color)"><span class="token string" style="color:var(--base-0b)">"{\"x\": 2, \"y\": 3}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ ["Dictionary", ["Tuple", "x", 2], ["Tuple", "y", 3]]</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token string" style="color:var(--base-0b)">"[1, 2, 3]"</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ ["List", 1, 2, 3]</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="symbols">Symbols<a href="#symbols" class="hash-link" aria-label="Direct link to Symbols" title="Direct link to Symbols"></a></h2>
<p>A MathJSON <strong>symbol</strong> is either:</p>
<ul>
<li>an object literal with a <code>"sym"</code> key</li>
<li>a JSON string</li>
</ul>
<p><strong>Symbols</strong> are <a href="#identifiers">identifiers</a> that represent the name of
variables, constants and wildcards.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="identifiers">Identifiers<a href="#identifiers" class="hash-link" aria-label="Direct link to Identifiers" title="Direct link to Identifiers"></a></h2>
<p>Identifiers are JSON strings that represent the names of symbols, variables, constants, wildcards and
functions.</p>
<p>Before they are used, JSON escape sequences (such as <code>\u</code> sequences, <code>\\</code>, etc.)
are decoded.</p>
<p>The identifiers are then normalized to the
<a href="https://unicode.org/reports/tr15/" target="_blank" rel="noopener noreferrer">Unicode Normalization Form C (NFC)</a>. They
are stored internally and compared using the Unicode NFC.</p>
<p>For example, these four JSON strings represent the same identifier:</p>
<ul>
<li><code>"Å"</code></li>
<li><code>"A\u030a"</code> <strong>U+0041 <code>A</code> LATIN CAPITAL LETTER</strong> + <strong>U+030A <code> ̊</code> COMBINING RING
ABOVE</strong></li>
<li><code>"\u00c5"</code> <strong>U+00C5 <code>Å</code> LATIN CAPITAL LETTER A WITH RING ABOVE</strong></li>
<li><code>"\u0041\u030a"</code> <strong>U+0041 <code>A</code> LATIN CAPITAL LETTER A</strong> + <strong>U+030A <code> ̊</code> COMBINING RING
ABOVE</strong></li>
</ul>
<p>Identifiers conforms to a profile of
<a href="https://unicode.org/reports/tr31/" target="_blank" rel="noopener noreferrer">UAX31-R1-1</a> with the following
modifications:</p>
<ul>
<li>The character <strong>U+005F <code>_</code> LOW LINE</strong> is added to the <code>Start</code> character set</li>
<li>The characters should belong to a
<a href="https://www.unicode.org/reports/tr31/#Table_Recommended_Scripts" target="_blank" rel="noopener noreferrer">recommended script</a></li>
<li>An identifier can be a sequence of one or more emojis. Characters that have
both the Emoji and XIDC property are only considered emojis when they are
preceded with emoji modifiers. The definition below is based on
<a href="https://unicode.org/reports/tr51/#EBNF_and_Regex" target="_blank" rel="noopener noreferrer">Unicode TR51</a> but modified
to exclude invalid identifiers.</li>
</ul>
<p>Identifiers match either the <code>NON_EMOJI_IDENTIFIER</code> or the <code>EMOJI_IDENTIFIER</code>
patterns below:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:var(--console-color)"><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> </span><span class="token constant" style="color:var(--base-09)">NON_EMOJI_IDENTIFIER</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token regex regex-delimiter" style="color:var(--base-0b)">/</span><span class="token regex regex-source language-regex anchor function" style="color:var(--base-0a)">^</span><span class="token regex regex-source language-regex char-class char-class-punctuation punctuation" style="color:var(--base-06)">[</span><span class="token regex regex-source language-regex char-class char-set class-name" style="color:var(--base-0a)">\p{XIDS}</span><span class="token regex regex-source language-regex char-class" style="color:var(--base-0b)">_</span><span class="token regex regex-source language-regex char-class char-class-punctuation punctuation" style="color:var(--base-06)">]</span><span class="token regex regex-source language-regex char-set class-name" style="color:var(--base-0a)">\p{XIDC}</span><span class="token regex regex-source language-regex quantifier number" style="color:var(--base-09)">*</span><span class="token regex regex-source language-regex anchor function" style="color:var(--base-0a)">$</span><span class="token regex regex-delimiter" style="color:var(--base-0b)">/</span><span class="token regex regex-flags" style="color:var(--base-0b)">u</span><span class="token punctuation" style="color:var(--base-06)">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>(from <a href="https://unicode.org/reports/tr51/#EBNF_and_Regex" target="_blank" rel="noopener noreferrer">Unicode TR51</a>)</p>
<p>or</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:var(--console-color)"><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> </span><span class="token constant" style="color:var(--base-09)">VS16</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"\\u{FE0F}"</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"> </span><span class="token comment" style="color:var(--base-05)">// Variation Selector-16, forces emoji presentation</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> </span><span class="token constant" style="color:var(--base-09)">KEYCAP</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"\\u{20E3}"</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"> </span><span class="token comment" style="color:var(--base-05)">// Combining Enclosing Keycap</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> </span><span class="token constant" style="color:var(--base-09)">ZWJ</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"\\u{200D}"</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"> </span><span class="token comment" style="color:var(--base-05)">// Zero Width Joiner</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> </span><span class="token constant" style="color:var(--base-09)">FLAG_SEQUENCE</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"\\p{RI}\\p{RI}"</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> </span><span class="token constant" style="color:var(--base-09)">TAG_MOD</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token template-string string" style="color:var(--base-0b)">(?:[\\u{E0020}-\\u{E007E}]+\\u{E007F})</span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> </span><span class="token constant" style="color:var(--base-09)">EMOJI_MOD</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token template-string string" style="color:var(--base-0b)">(?:\\p{EMod}|</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">${</span><span class="token template-string interpolation constant" style="color:var(--base-09)">VS16</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">}</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">${</span><span class="token template-string interpolation constant" style="color:var(--base-09)">KEYCAP</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">}</span><span class="token template-string string" style="color:var(--base-0b)">?|</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">${</span><span class="token template-string interpolation constant" style="color:var(--base-09)">TAG_MOD</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">}</span><span class="token template-string string" style="color:var(--base-0b)">)</span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> </span><span class="token constant" style="color:var(--base-09)">EMOJI_NOT_IDENTIFIER</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token template-string string" style="color:var(--base-0b)">(?:(?=\\P{XIDC})\\p{Emoji})</span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> </span><span class="token constant" style="color:var(--base-09)">ZWJ_ELEMENT</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token template-string string" style="color:var(--base-0b)">(?:</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">${</span><span class="token template-string interpolation constant" style="color:var(--base-09)">EMOJI_NOT_IDENTIFIER</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">}</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">${</span><span class="token template-string interpolation constant" style="color:var(--base-09)">EMOJI_MOD</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">}</span><span class="token template-string string" style="color:var(--base-0b)">*|\\p{Emoji}</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">${</span><span class="token template-string interpolation constant" style="color:var(--base-09)">EMOJI_MOD</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">}</span><span class="token template-string string" style="color:var(--base-0b)">+|</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">${</span><span class="token template-string interpolation constant" style="color:var(--base-09)">FLAG_SEQUENCE</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">}</span><span class="token template-string string" style="color:var(--base-0b)">)</span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> </span><span class="token constant" style="color:var(--base-09)">POSSIBLE_EMOJI</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token template-string string" style="color:var(--base-0b)">(?:</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">${</span><span class="token template-string interpolation constant" style="color:var(--base-09)">ZWJ_ELEMENT</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">}</span><span class="token template-string string" style="color:var(--base-0b)">)(</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">${</span><span class="token template-string interpolation constant" style="color:var(--base-09)">ZWJ</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">}</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">${</span><span class="token template-string interpolation constant" style="color:var(--base-09)">ZWJ_ELEMENT</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">}</span><span class="token template-string string" style="color:var(--base-0b)">)*</span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> </span><span class="token constant" style="color:var(--base-09)">EMOJI_IDENTIFIER</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token keyword" style="color:var(--base-0e)">new</span><span class="token plain"> </span><span class="token class-name" style="color:var(--base-0a)">RegExp</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token template-string string" style="color:var(--base-0b)">^(?:</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">${</span><span class="token template-string interpolation constant" style="color:var(--base-09)">POSSIBLE_EMOJI</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">}</span><span class="token template-string string" style="color:var(--base-0b)">)+$</span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"u"</span><span class="token punctuation" style="color:var(--base-06)">)</span><span class="token punctuation" style="color:var(--base-06)">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>In summary, when using Latin characters, identifiers can start with a letter or
an underscore, followed by zero or more letters, digits and underscores.</p>
<p>Carefully consider when to use non-latin characters. Use non-latin characters
for whole words, for example: <code>"半径"</code> (radius), <code>"מְהִירוּת"</code> (speed), <code>"直徑"</code>
(diameter) or <code>"सतह"</code> (surface).</p>
<p>Avoid mixing Unicode characters from different scripts in the same identifier.</p>
<p>Do not include bidi markers such as <strong>U+200E <code>LTR</code></strong>* or <strong>U+200F <code>RTL</code></strong> in
identifiers. LTR and RTL marks should be added as needed by the client
displaying the identifier. They should be ignored when parsing identifiers.</p>
<p>Avoid visual ambiguity issues that might arise with some Unicode characters. For
example:</p>
<ul>
<li>prefer using <code>"gamma"</code> rather than <strong>U+0194 <code>ɣ</code> LATIN SMALL LETTER GAMMA</strong>
or <strong>U+03B3 <code>γ</code> GREEK SMALL LETTER GAMMA</strong></li>
<li>prefer using <code>"Sum"</code> rather than <strong>U+2211 <code>∑</code> N-ARY SUMMATION</strong>, which can
be visually confused with <strong>U+03A3 <code>Σ</code> GREEK CAPITAL LETTER SIGMA</strong>.</li>
</ul>
<hr>
<p>The following naming convention for wildcards, variables, constants and function
names are recommendations.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="wildcards-naming-convention">Wildcards Naming Convention<a href="#wildcards-naming-convention" class="hash-link" aria-label="Direct link to Wildcards Naming Convention" title="Direct link to Wildcards Naming Convention"></a></h3>
<p>Symbols that begin with <strong>U+005F <code>_</code> LOW LINE</strong> (underscore) should be used to
denote wildcards and other placeholders.</p>
<p>For example, they may be used to denote the positional parameter in a function
expression. They may also denote placeholders and captured expression in
patterns.</p>
<div class="symbols-table first-column-header" style="--first-col-width:7ch"><table><thead><tr><th style="text-align:left">Wildcard</th><th style="text-align:left"></th></tr></thead><tbody><tr><td style="text-align:left"><code>"_"</code></td><td style="text-align:left">Wildcard for a single expression or for the first positional argument</td></tr><tr><td style="text-align:left"><code>"_1"</code></td><td style="text-align:left">Wildcard for a positional argument</td></tr><tr><td style="text-align:left"><code>"_ _"</code></td><td style="text-align:left">Wildcard for a sequence of 1 or more expression</td></tr><tr><td style="text-align:left"><code>"___"</code></td><td style="text-align:left">Wildcard for a sequence of 0 or more expression</td></tr><tr><td style="text-align:left"><code>"_a"</code></td><td style="text-align:left">Capturing an expression as a wildcard named <code>a</code></td></tr></tbody></table></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="variables-naming-convention">Variables Naming Convention<a href="#variables-naming-convention" class="hash-link" aria-label="Direct link to Variables Naming Convention" title="Direct link to Variables Naming Convention"></a></h3>
<ul>
<li>
<p>If a variable is made of several words, use camelCase. For example
<code>"newDeterminant"</code></p>
</li>
<li>
<p>Prefer clarity over brevity and avoid obscure abbreviations.</p>
<p>Use <code>"newDeterminant"</code> rather than <code>"newDet"</code> or <code>"nDet"</code></p>
</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="constants-naming-convention">Constants Naming Convention<a href="#constants-naming-convention" class="hash-link" aria-label="Direct link to Constants Naming Convention" title="Direct link to Constants Naming Convention"></a></h3>
<ul>
<li>If using latin characters, the first character of a constant should be an
uppercase letter <code>A</code>-<code>Z</code></li>
<li>If a constant name is made up of several words, use camelCase. For example
<code>"SpeedOfLight"</code></li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="function-names-naming-convention">Function Names Naming Convention<a href="#function-names-naming-convention" class="hash-link" aria-label="Direct link to Function Names Naming Convention" title="Direct link to Function Names Naming Convention"></a></h3>
<ul>
<li>The name of the functions in the MathJSON Standard Library starts with an
uppercase letter <code>A</code>-<code>Z</code>. For example <code>"Sin"</code>, <code>"Fold"</code>.</li>
<li>The name of your own functions can start with a lowercase or uppercase letter.</li>
<li>If a function name is made up of several words, use camelCase. For example
<code>"InverseFunction"</code></li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="latex-rendering-conventions">LaTeX Rendering Conventions<a href="#latex-rendering-conventions" class="hash-link" aria-label="Direct link to LaTeX Rendering Conventions" title="Direct link to LaTeX Rendering Conventions"></a></h3>
<p>The following recommendations may be followed by clients displaying MathJSON
identifiers with LaTeX, or parsing LaTeX to MathJSON identifiers.</p>
<p>These recommendations do not affect computation or manipulation of expressions
following these conventions.</p>
<ul>
<li>An identifier may be composed of a main body, some modifiers, some style
variants, some subscripts and subscripts. For example:<!-- -->
<ul>
<li><code>"alpha_0__prime"</code> <code class="language-math math-inline">\alpha_0^\prime </code></li>
<li><code>"x_vec"</code> <code class="language-math math-inline">\vec{x}</code></li>
<li><code>"Re_fraktur"</code> <code class="language-math math-inline">\mathfrak{Re} </code>.</li>
</ul>
</li>
<li>Subscripts are indicated by an underscore <code>_</code> and superscripts by a
double-underscore <code>__</code>. There may be more than one superscript or subscripts,
but they get concatenated. For example <code>"a_b__c_q__p"</code> -> <code>a_{b, q}^{c, p}</code>
\( a_{b, q}^{c, p} \).</li>
<li>Modifiers after a superscript or subscript apply to the closest preceding
superscript or subscript. For example <code>"a_b_prime"</code> -> <code>a_{b^{\prime}}</code></li>
</ul>
<p>Modifiers include:</p>
<div class="symbols-table first-column-header" style="--first-col-width:14ch"><table><thead><tr><th style="text-align:left">Modifier</th><th style="text-align:left">LaTeX</th><th></th></tr></thead><tbody><tr><td style="text-align:left"><code>_deg</code></td><td style="text-align:left"><code>\degree</code></td><td>\( x\degree \)</td></tr><tr><td style="text-align:left"><code>_prime</code></td><td style="text-align:left"><code>{}^\prime</code></td><td>\( x^{\prime} \)</td></tr><tr><td style="text-align:left"><code>_dprime</code></td><td style="text-align:left"><code>{}^\doubleprime</code></td><td>\( x^{\doubleprime} \)</td></tr><tr><td style="text-align:left"><code>_ring</code></td><td style="text-align:left"><code>\mathring{}</code></td><td>\( \mathring{x} \)</td></tr><tr><td style="text-align:left"><code>_hat</code></td><td style="text-align:left"><code>\hat{}</code></td><td>\( \hat{x} \)</td></tr><tr><td style="text-align:left"><code>_tilde</code></td><td style="text-align:left"><code>\tilde{}</code></td><td>\( \tilde{x} \)</td></tr><tr><td style="text-align:left"><code>_vec</code></td><td style="text-align:left"><code>\vec{}</code></td><td>\( \vec{x} \)</td></tr><tr><td style="text-align:left"><code>_bar</code></td><td style="text-align:left"><code>\overline{}</code></td><td>\( \overline{x} \)</td></tr><tr><td style="text-align:left"><code>_underbar</code></td><td style="text-align:left"><code>\underline{}</code></td><td>\( \underline{x} \)</td></tr><tr><td style="text-align:left"><code>_dot</code></td><td style="text-align:left"><code>\dot{}</code></td><td>\( \dot{x} \)</td></tr><tr><td style="text-align:left"><code>_ddot</code></td><td style="text-align:left"><code>\ddot{}</code></td><td>\( \ddot{x} \)</td></tr><tr><td style="text-align:left"><code>_tdot</code></td><td style="text-align:left"><code>\dddot{}</code></td><td>\( \dddot{x} \)</td></tr><tr><td style="text-align:left"><code>_qdot</code></td><td style="text-align:left"><code>\ddddot{}</code></td><td>\( \dddodt{x} \)</td></tr><tr><td style="text-align:left"><code>_operator</code></td><td style="text-align:left"><code>\operatorname{}</code></td><td>\( \operatorname{x} \)</td></tr><tr><td style="text-align:left"><code>_upright</code></td><td style="text-align:left"><code>\mathrm{}</code></td><td>\( \mathrm{x} \)</td></tr><tr><td style="text-align:left"><code>_italic</code></td><td style="text-align:left"><code>\mathit{}</code></td><td>\( \mathit{x} \)</td></tr><tr><td style="text-align:left"><code>_bold</code></td><td style="text-align:left"><code>\mathbf{}</code></td><td>\( \mathbf{x} \)</td></tr><tr><td style="text-align:left"><code>_doublestruck</code></td><td style="text-align:left"><code>\mathbb{}</code></td><td>\( \mathbb{x} \)</td></tr><tr><td style="text-align:left"><code>_fraktur</code></td><td style="text-align:left"><code>\mathfrak{}</code></td><td>\( \mathfrak{x} \)</td></tr><tr><td style="text-align:left"><code>_script</code></td><td style="text-align:left"><code>\mathscr{}</code></td><td>\( \mathscr{x} \)</td></tr></tbody></table></div>
<ul>
<li>The following common names, when they appear as the body or in a
subscript/superscript of an identifier, may be replaced with a corresponding
LaTeX command:</li>
</ul>
<div class="symbols-table first-column-header" style="--first-col-width:15ch"><table><thead><tr><th style="text-align:left">Common Names</th><th style="text-align:left">LaTeX</th><th></th></tr></thead><tbody><tr><td style="text-align:left"><code>alpha</code></td><td style="text-align:left"><code>\alpha</code></td><td>\( \alpha \)</td></tr><tr><td style="text-align:left"><code>beta</code></td><td style="text-align:left"><code>\beta</code></td><td>\( \beta \)</td></tr><tr><td style="text-align:left"><code>gamma</code></td><td style="text-align:left"><code>\gamma</code></td><td>\( \gamma \)</td></tr><tr><td style="text-align:left"><code>delta</code></td><td style="text-align:left"><code>\delta</code></td><td>\( \delta \)</td></tr><tr><td style="text-align:left"><code>epsilon</code></td><td style="text-align:left"><code>\epsilon</code></td><td>\( \epsilon \)</td></tr><tr><td style="text-align:left"><code>epsilonSymbol</code></td><td style="text-align:left"><code>\varepsilon</code></td><td>\( \varepsilon \)</td></tr><tr><td style="text-align:left"><code>zeta</code></td><td style="text-align:left"><code>\zeta</code></td><td>\( \zeta \)</td></tr><tr><td style="text-align:left"><code>eta</code></td><td style="text-align:left"><code>\eta</code></td><td>\( \eta \)</td></tr><tr><td style="text-align:left"><code>theta</code></td><td style="text-align:left"><code>\theta</code></td><td>\( \theta \)</td></tr><tr><td style="text-align:left"><code>thetaSymbol</code></td><td style="text-align:left"><code>\vartheta</code></td><td>\( \vartheta \)</td></tr><tr><td style="text-align:left"><code>iota</code></td><td style="text-align:left"><code>\iota</code></td><td>\( \iota \)</td></tr><tr><td style="text-align:left"><code>kappa</code></td><td style="text-align:left"><code>\kappa</code></td><td>\( \kappa \)</td></tr><tr><td style="text-align:left"><code>kappaSymbol</code></td><td style="text-align:left"><code>\varkappa</code></td><td>\( \varkappa \)</td></tr><tr><td style="text-align:left"><code>mu</code></td><td style="text-align:left"><code>\mu</code></td><td>\( \mu \)</td></tr><tr><td style="text-align:left"><code>nu</code></td><td style="text-align:left"><code>\nu</code></td><td>\( \nu \)</td></tr><tr><td style="text-align:left"><code>xi</code></td><td style="text-align:left"><code>\xi</code></td><td>\( \xi \)</td></tr><tr><td style="text-align:left"><code>omicron</code></td><td style="text-align:left"><code>\omicron</code></td><td>\( \omicron \)</td></tr><tr><td style="text-align:left"><code>piSymbol</code></td><td style="text-align:left"><code>\varpi</code></td><td>\( \varpi \)</td></tr><tr><td style="text-align:left"><code>rho</code></td><td style="text-align:left"><code>\rho</code></td><td>\( \rho \)</td></tr><tr><td style="text-align:left"><code>rhoSymbol</code></td><td style="text-align:left"><code>\varrho</code></td><td>\( \varrho \)</td></tr><tr><td style="text-align:left"><code>sigma</code></td><td style="text-align:left"><code>\sigma</code></td><td>\( \sigma \)</td></tr><tr><td style="text-align:left"><code>finalSigma</code></td><td style="text-align:left"><code>\varsigma</code></td><td>\( \varsigma \)</td></tr><tr><td style="text-align:left"><code>tau</code></td><td style="text-align:left"><code>\tau</code></td><td>\( \tau \)</td></tr><tr><td style="text-align:left"><code>phi</code></td><td style="text-align:left"><code>\phi</code></td><td>\( \phi \)</td></tr><tr><td style="text-align:left"><code>phiLetter</code></td><td style="text-align:left"><code>\varphi</code></td><td>\( \varphi \)</td></tr><tr><td style="text-align:left"><code>upsilon</code></td><td style="text-align:left"><code>\upsilon</code></td><td>\( \upsilon \)</td></tr><tr><td style="text-align:left"><code>chi</code></td><td style="text-align:left"><code>\chi</code></td><td>\( \chi \)</td></tr><tr><td style="text-align:left"><code>psi</code></td><td style="text-align:left"><code>\psi</code></td><td>\( \psi \)</td></tr><tr><td style="text-align:left"><code>omega</code></td><td style="text-align:left"><code>\omega</code></td><td>\( \omega \)</td></tr><tr><td style="text-align:left"><code>Alpha</code></td><td style="text-align:left"><code>\Alpha</code></td><td>\( \Alpha \)</td></tr><tr><td style="text-align:left"><code>Beta</code></td><td style="text-align:left"><code>\Beta</code></td><td>\( \Beta \)</td></tr><tr><td style="text-align:left"><code>Gamma</code></td><td style="text-align:left"><code>\Gamma</code></td><td>\( \Gamma \)</td></tr><tr><td style="text-align:left"><code>Delta</code></td><td style="text-align:left"><code>\Delta</code></td><td>\( \Delta \)</td></tr><tr><td style="text-align:left"><code>Epsilon</code></td><td style="text-align:left"><code>\Epsilon</code></td><td>\( \Epsilon \)</td></tr><tr><td style="text-align:left"><code>Zeta</code></td><td style="text-align:left"><code>\Zeta</code></td><td>\( \Zeta \)</td></tr><tr><td style="text-align:left"><code>Eta</code></td><td style="text-align:left"><code>\Eta</code></td><td>\( \Eta \)</td></tr><tr><td style="text-align:left"><code>Theta</code></td><td style="text-align:left"><code>\Theta</code></td><td>\( \Theta \)</td></tr><tr><td style="text-align:left"><code>Iota</code></td><td style="text-align:left"><code>\Iota</code></td><td>\( \Iota \)</td></tr><tr><td style="text-align:left"><code>Kappa</code></td><td style="text-align:left"><code>\Kappa</code></td><td>\( \Kappa \)</td></tr><tr><td style="text-align:left"><code>Lambda</code></td><td style="text-align:left"><code>\Lambda</code></td><td>\( \Lambda \)</td></tr><tr><td style="text-align:left"><code>Mu</code></td><td style="text-align:left"><code>\Mu</code></td><td>\( \Mu \)</td></tr><tr><td style="text-align:left"><code>Nu</code></td><td style="text-align:left"><code>\Nu</code></td><td>\( \Nu \)</td></tr><tr><td style="text-align:left"><code>Xi</code></td><td style="text-align:left"><code>\Xi</code></td><td>\( \Xi \)</td></tr><tr><td style="text-align:left"><code>Omicron</code></td><td style="text-align:left"><code>\Omicron</code></td><td>\( \Omicron \)</td></tr><tr><td style="text-align:left"><code>Pi</code></td><td style="text-align:left"><code>\Pi</code></td><td>\( \Pi \)</td></tr><tr><td style="text-align:left"><code>Rho</code></td><td style="text-align:left"><code>\Rho</code></td><td>\( \Rho \)</td></tr><tr><td style="text-align:left"><code>Sigma</code></td><td style="text-align:left"><code>\Sigma</code></td><td>\( \Sigma \)</td></tr><tr><td style="text-align:left"><code>Tau</code></td><td style="text-align:left"><code>\Tau</code></td><td>\( \Tau \)</td></tr><tr><td style="text-align:left"><code>Phi</code></td><td style="text-align:left"><code>\Phi</code></td><td>\( \Phi \)</td></tr><tr><td style="text-align:left"><code>Upsilon</code></td><td style="text-align:left"><code>\Upsilon</code></td><td>\( \Upsilon \)</td></tr><tr><td style="text-align:left"><code>Chi</code></td><td style="text-align:left"><code>\Chi</code></td><td>\( \Chi \)</td></tr><tr><td style="text-align:left"><code>Psi</code></td><td style="text-align:left"><code>\Psi</code></td><td>\( \Psi \)</td></tr><tr><td style="text-align:left"><code>Omega</code></td><td style="text-align:left"><code>\Omega</code></td><td>\( \Omega \)</td></tr><tr><td style="text-align:left"><code>digamma</code></td><td style="text-align:left"><code>\digamma</code></td><td>\( \digamma \)</td></tr><tr><td style="text-align:left"><code>aleph</code></td><td style="text-align:left"><code>\aleph</code></td><td>\( \aleph \)</td></tr><tr><td style="text-align:left"><code>lambda</code></td><td style="text-align:left"><code>\lambda</code></td><td>\( \lambda \)</td></tr><tr><td style="text-align:left"><code>bet</code></td><td style="text-align:left"><code>\beth</code></td><td>\( \beth \)</td></tr><tr><td style="text-align:left"><code>gimel</code></td><td style="text-align:left"><code>\gimel</code></td><td>\( \gimel \)</td></tr><tr><td style="text-align:left"><code>dalet</code></td><td style="text-align:left"><code>\dalet</code></td><td>\( \dalet \)</td></tr><tr><td style="text-align:left"><code>ell</code></td><td style="text-align:left"><code>\ell</code></td><td>\( \ell \)</td></tr><tr><td style="text-align:left"><code>turnedCapitalF</code></td><td style="text-align:left"><code>\Finv</code></td><td>\( \Finv \)</td></tr><tr><td style="text-align:left"><code>turnedCapitalG</code></td><td style="text-align:left"><code>\Game</code></td><td>\( \Game \)</td></tr><tr><td style="text-align:left"><code>weierstrass</code></td><td style="text-align:left"><code>\wp</code></td><td>\( \wp \)</td></tr><tr><td style="text-align:left"><code>eth</code></td><td style="text-align:left"><code>\eth</code></td><td>\( \eth \)</td></tr><tr><td style="text-align:left"><code>invertedOhm</code></td><td style="text-align:left"><code>\mho</code></td><td>\( \mho \)</td></tr><tr><td style="text-align:left"><code>hBar</code></td><td style="text-align:left"><code>\hbar</code></td><td>\( \hbar \)</td></tr><tr><td style="text-align:left"><code>hSlash</code></td><td style="text-align:left"><code>\hslash</code></td><td>\( \hslash \)</td></tr><tr><td style="text-align:left"><code>blacksquare</code></td><td style="text-align:left"><code>\hslash</code></td><td>\( \hslash \)</td></tr><tr><td style="text-align:left"><code>bottom</code></td><td style="text-align:left"><code>\bot</code></td><td>\( \bot \)</td></tr><tr><td style="text-align:left"><code>bullet</code></td><td style="text-align:left"><code>\bullet</code></td><td>\( \bullet \)</td></tr><tr><td style="text-align:left"><code>circle</code></td><td style="text-align:left"><code>\circ</code></td><td>\( \circ \)</td></tr><tr><td style="text-align:left"><code>diamond</code></td><td style="text-align:left"><code>\diamond</code></td><td>\( \diamond \)</td></tr><tr><td style="text-align:left"><code>times</code></td><td style="text-align:left"><code>\times</code></td><td>\( \times \)</td></tr><tr><td style="text-align:left"><code>top</code></td><td style="text-align:left"><code>\top</code></td><td>\( \top \)</td></tr><tr><td style="text-align:left"><code>square</code></td><td style="text-align:left"><code>\square</code></td><td>\( \square \)</td></tr><tr><td style="text-align:left"><code>star</code></td><td style="text-align:left"><code>\star</code></td><td>\( \star \)</td></tr></tbody></table></div>
<ul>
<li>The following names, when used as a subscript or superscript, may be replaced
with a corresponding LaTeX command:</li>
</ul>
<div class="symbols-table first-column-header"><table><thead><tr><th style="text-align:left">Subscript/Supscript</th><th style="text-align:left">LaTeX</th><th></th></tr></thead><tbody><tr><td style="text-align:left"><code>plus</code></td><td style="text-align:left"><code>{}_{+}</code> / <code>{}^{+}</code></td><td>\( x_{+} x^+\)</td></tr><tr><td style="text-align:left"><code>minus</code></td><td style="text-align:left"><code>{}_{-}</code> /<code>{}^{-}</code></td><td>\( x_{-} x^-\)</td></tr><tr><td style="text-align:left"><code>pm</code></td><td style="text-align:left"><code>{}_\pm</code> /<code>{}^\pm</code></td><td>\( x_{\pm} x^\pm \)</td></tr><tr><td style="text-align:left"><code>ast</code></td><td style="text-align:left"><code>{}_\ast</code> /<code>{}^\ast</code></td><td>\( {x}_\ast x^\ast \)</td></tr><tr><td style="text-align:left"><code>dag</code></td><td style="text-align:left"><code>{}_\dag</code> /<code>{}^\dag</code></td><td>\( {x}_\dag x^\dag \)</td></tr><tr><td style="text-align:left"><code>ddag</code></td><td style="text-align:left"><code>{}_\ddag</code> <code>{}^\ddag</code></td><td>\( {x}_\ddag x^\ddag \)</td></tr><tr><td style="text-align:left"><code>hash</code></td><td style="text-align:left"><code>{}_\#</code> <code>{}^\#</code></td><td>\( {x}_# x^#\)</td></tr></tbody></table></div>
<ul>
<li>
<p>Multi-letter identifiers may be rendered with a <code>\mathit{}</code>, <code>\mathrm{}</code> or
<code>\operatorname{}</code> command.</p>
</li>
<li>
<p>Identifier fragments ending in digits may be rendered with a corresponding
subscript.</p>
</li>
</ul>
<div class="symbols-table first-column-header" style="--first-col-width:18ch"><table><thead><tr><th style="text-align:left">Identifier</th><th style="text-align:left">LaTeX</th><th></th></tr></thead><tbody><tr><td style="text-align:left"><code>time</code></td><td style="text-align:left"><code>\mathrm{time}</code></td><td>\( \mathrm{time} \)</td></tr><tr><td style="text-align:left"><code>speed_italic</code></td><td style="text-align:left"><code>\mathit{speed}</code></td><td>\( \mathit{speed} \)</td></tr><tr><td style="text-align:left"><code>P_blackboard__plus</code></td><td style="text-align:left"><code>\mathbb{P}^{+}</code></td><td><code class="language-math math-inline">\mathbb{P}^+</code></td></tr><tr><td style="text-align:left"><code>alpha</code></td><td style="text-align:left"><code>\alpha</code></td><td>\( \alpha \)</td></tr><tr><td style="text-align:left"><code>mu0</code></td><td style="text-align:left"><code>\mu_{0}</code></td><td>\( \mu_0 \)</td></tr><tr><td style="text-align:left"><code>m56</code></td><td style="text-align:left"><code>m_{56}</code></td><td>\( m_{56} \)</td></tr><tr><td style="text-align:left"><code>c_max</code></td><td style="text-align:left"><code>\mathrm{c_{max}}</code></td><td>\( \mathrm{c_{max}} \)</td></tr></tbody></table></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="metadata">Metadata<a href="#metadata" class="hash-link" aria-label="Direct link to Metadata" title="Direct link to Metadata"></a></h2>
<p>MathJSON object literals may be annotated with supplemental information.</p>
<p>A <strong>number</strong> represented as a JSON number literal, a <strong>symbol</strong> or <strong>string</strong>
represented as a JSON string literal, or a <strong>function</strong> represented as a JSON
array must be transformed into the equivalent object literal to be annotated.</p>
<p>The following metadata keys are recommended:</p>
<div class="symbols-table first-column-header" style="--first-col-width:14ch"><table><thead><tr><th style="text-align:left">Key</th><th style="text-align:left">Note</th></tr></thead><tbody><tr><td style="text-align:left"><code>wikidata</code></td><td style="text-align:left">A short string indicating an entry in a wikibase.<br>This information can be used to disambiguate the meaning of an identifier. Unless otherwise specified, the entry in this key refers to an enty in the <code>wikidata.org</code> wikibase</td></tr><tr><td style="text-align:left"><code>comment</code></td><td style="text-align:left">A human readable plain string to annotate an expression, since JSON does not allow comments in its encoding</td></tr><tr><td style="text-align:left"><code>documentation</code></td><td style="text-align:left">A Markdown-encoded string providing documentation about this expression.</td></tr><tr><td style="text-align:left"><code>latex</code></td><td style="text-align:left">A visual representation in LaTeX of the expression. <br> This can be useful to preserve non-semantic details, for example parentheses in an expression or styling attributes</td></tr><tr><td style="text-align:left"><code>sourceUrl</code></td><td style="text-align:left">A URL to the source of this expression</td></tr><tr><td style="text-align:left"><code>sourceContent</code></td><td style="text-align:left">The source from which this expression was generated.<br> It could be a LaTeX expression, or some other source language.</td></tr><tr><td style="text-align:left"><code>sourceOffsets</code></td><td style="text-align:left">A pair of character offsets in <code>sourceContent</code> or <code>sourceUrl</code> from which this expression was produced</td></tr><tr><td style="text-align:left"><code>hash</code></td><td style="text-align:left">A string representing a digest of this expression.</td></tr></tbody></table></div>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"sym"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Pi"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"comment"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"The ratio of the circumference of a circle to its diameter"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"wikidata"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Q167"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"latex"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"\\pi"</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"sym"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Pi"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"comment"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"The greek letter ∏"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"wikidata"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Q168"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="mathjson-standard-library">MathJSON Standard Library<a href="#mathjson-standard-library" class="hash-link" aria-label="Direct link to MathJSON Standard Library" title="Direct link to MathJSON Standard Library"></a></h2>
<p>This document defines the structure of MathJSON expression. The MathJSON
Standard Library defines a recommended <strong>vocabulary</strong> to use in MathJSON
expressions.</p>
<p>Before considering inventing your own vocabulary, check if the MathJSON Standard
Library already provides relevant definitions.</p>
<p>The MathJSON Standard Library includes definitions for:</p>
<div class="symbols-table" style="--first-col-width:21ch"><table><thead><tr><th style="text-align:left">Topic</th><th style="text-align:left"></th></tr></thead><tbody><tr><td style="text-align:left"><a href="/compute-engine/reference/arithmetic">Arithmetic</a></td><td style="text-align:left"><code>Add</code> <code>Multiply</code> <code>Power</code> <code>Exp</code> <code>Log</code> <code>ExponentialE</code> <code>ImaginaryUnit</code>...</td></tr><tr><td style="text-align:left"><a href="/compute-engine/reference/calculus">Calculus</a></td><td style="text-align:left"><code>D</code> <code>Derivative</code> <code>Integrate</code>...</td></tr><tr><td style="text-align:left"><a href="/compute-engine/reference/collections">Collections</a></td><td style="text-align:left"><code>List</code> <code>Reverse</code> <code>Filter</code>...</td></tr><tr><td style="text-align:left"><a href="/compute-engine/reference/complex">Complex</a></td><td style="text-align:left"><code>Real</code> <code>Conjugate</code> <code>ComplexRoots</code>...</td></tr><tr><td style="text-align:left"><a href="/compute-engine/reference/control-structures">Control Structures</a></td><td style="text-align:left"><code>If</code> <code>Block</code> <code>Loop</code> ...</td></tr><tr><td style="text-align:left"><a href="/compute-engine/reference/core">Core</a></td><td style="text-align:left"><code>Declare</code> <code>Assign</code> <code>Error</code> <code>LatexString</code>...</td></tr><tr><td style="text-align:left"><a href="/compute-engine/reference/functions">Functions</a></td><td style="text-align:left"><code>Function</code> <code>Apply</code> <code>Return</code> ...</td></tr><tr><td style="text-align:left"><a href="/compute-engine/reference/logic">Logic</a></td><td style="text-align:left"><code>And</code> <code>Or</code> <code>Not</code> <code>True</code> <code>False</code> <code>ForAll</code> ...</td></tr><tr><td style="text-align:left"><a href="/compute-engine/reference/sets">Sets</a></td><td style="text-align:left"><code>Union</code> <code>Intersection</code> <code>EmptySet</code> <code>RealNumbers</code> <code>Integers</code> ...</td></tr><tr><td style="text-align:left"><a href="/compute-engine/reference/special-functions">Special Functions</a></td><td style="text-align:left"><code>Gamma</code> <code>Factorial</code>...</td></tr><tr><td style="text-align:left"><a href="/compute-engine/reference/statistics">Statistics</a></td><td style="text-align:left"><code>StandardDeviation</code> <code>Mean</code> <code>Erf</code>...</td></tr><tr><td style="text-align:left"><a href="/compute-engine/reference/styling">Styling</a></td><td style="text-align:left"><code>Delimiter</code> <code>Style</code>...</td></tr><tr><td style="text-align:left"><a href="/compute-engine/reference/trigonometry">Trigonometry</a></td><td style="text-align:left"><code>Pi</code> <code>Cos</code> <code>Sin</code> <code>Tan</code>...</td></tr></tbody></table></div>
<p>When defining a new function, avoid using a name already defined in the Standard
Library.</p>
<div class="readMore_KWn8"><a href="/compute-compute-engine/guides/augmenting/"><p>Read more about <strong>Adding New Definitions</strong><svg class="icon_qj0s chevronRightBold_bbMj"><use xlink:href="/icons.svg#chevron-right-bold"></use></svg></p></a></div></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"></div><div class="col lastUpdated_VsjB"></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/compute-engine/guides/patterns-and-rules"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Patterns and Rules</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/compute-engine/api"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">API Reference</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#structure-of-a-mathjson-expression" class="table-of-contents__link toc-highlight">Structure of a MathJSON Expression</a></li><li><a href="#numbers" class="table-of-contents__link toc-highlight">Numbers</a><ul><li><a href="#numbers-as-object-literals" class="table-of-contents__link toc-highlight">Numbers as Object Literals</a></li><li><a href="#numbers-as-number-literals" class="table-of-contents__link toc-highlight">Numbers as Number Literals</a></li><li><a href="#numbers-as-string-literals" class="table-of-contents__link toc-highlight">Numbers as String Literals</a></li></ul></li><li><a href="#strings" class="table-of-contents__link toc-highlight">Strings</a></li><li><a href="#functions" class="table-of-contents__link toc-highlight">Functions</a><ul><li><a href="#functions-as-object-literal" class="table-of-contents__link toc-highlight">Functions as Object Literal</a></li><li><a href="#functions-as-json-arrays" class="table-of-contents__link toc-highlight">Functions as JSON Arrays</a></li><li><a href="#function-operator" class="table-of-contents__link toc-highlight">Function Operator</a></li><li><a href="#shorthands" class="table-of-contents__link toc-highlight">Shorthands</a></li></ul></li><li><a href="#symbols" class="table-of-contents__link toc-highlight">Symbols</a></li><li><a href="#identifiers" class="table-of-contents__link toc-highlight">Identifiers</a><ul><li><a href="#wildcards-naming-convention" class="table-of-contents__link toc-highlight">Wildcards Naming Convention</a></li><li><a href="#variables-naming-convention" class="table-of-contents__link toc-highlight">Variables Naming Convention</a></li><li><a href="#constants-naming-convention" class="table-of-contents__link toc-highlight">Constants Naming Convention</a></li><li><a href="#function-names-naming-convention" class="table-of-contents__link toc-highlight">Function Names Naming Convention</a></li><li><a href="#latex-rendering-conventions" class="table-of-contents__link toc-highlight">LaTeX Rendering Conventions</a></li></ul></li><li><a href="#metadata" class="table-of-contents__link toc-highlight">Metadata</a></li><li><a href="#mathjson-standard-library" class="table-of-contents__link toc-highlight">MathJSON Standard Library</a></li></ul></div></div></div></div></main></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/mathfield">Mathfield</a></li><li class="footer__item"><a class="footer__link-item" href="/compute-engine">Compute Engine</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://github.com/cortex-js" target="_blank" rel="noopener noreferrer" class="footer__link-item"><svg class="icon-one-rem"><use role="none" xlink:href="/icons.svg#github"></use></svg>GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://discord.gg/yhmvVeJ4Hd" target="_blank" rel="noopener noreferrer" class="footer__link-item"><svg class="icon-one-rem"><use role="none" xlink:href="/icons.svg#discord"></use></svg>Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://chat.openai.com/g/g-8YgEfR7ig-cortexjs-assistant" target="_blank" rel="noopener noreferrer" class="footer__link-item"><svg class="icon-one-rem"><use role="none" xlink:href="/icons.svg#openai"></use></svg>CortexJS Chatbot<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/about">About Us</a></li></ul></div></div></div></footer></div>
</body>
</html>