-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathindex.html
More file actions
331 lines (328 loc) · 145 KB
/
Copy pathindex.html
File metadata and controls
331 lines (328 loc) · 145 KB
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
<!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/guide-simplify" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.10.2">
<title data-rh="true">Simplify · MathLive</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://mathlive.io/img/social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://mathlive.io/img/social-card.jpg"><meta data-rh="true" property="og:url" content="https://mathlive.io/compute-engine/guides/simplify/"><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="Simplify · MathLive"><meta data-rh="true" name="description" content="A complicated mathematical expression can often be transformed into a form that"><meta data-rh="true" property="og:description" content="A complicated mathematical expression can often be transformed into a form that"><link data-rh="true" rel="icon" href="/img/logo.webp"><link data-rh="true" rel="canonical" href="https://mathlive.io/compute-engine/guides/simplify/"><link data-rh="true" rel="alternate" href="https://mathlive.io/compute-engine/guides/simplify/" hreflang="en"><link data-rh="true" rel="alternate" href="https://mathlive.io/compute-engine/guides/simplify/" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://Q23Y5RN3UQ-dsn.algolia.net" crossorigin="anonymous"><link data-rh="true" rel="alternate" type="text/markdown" href="/compute-engine/guides/simplify.md"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Simplify","item":"https://mathlive.io/compute-engine/guides/simplify/"}]}</script><link rel="search" type="application/opensearchdescription+xml" title="MathLive" href="/opensearch.xml">
<link rel="stylesheet" src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/codemirror.min.css">
<script>!function(){var e,t;window.moduleMap||(window.moduleMap={}),window.moduleMap={...window.moduleMap,mathlive:"https://esm.run/mathlive","compute-engine":"https://esm.run/@cortex-js/compute-engine","@cortex-js/compute-engine":"https://esm.run/@cortex-js/compute-engine"},(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://cdn.jsdelivr.net/npm/mathlive","https://cdn.jsdelivr.net/npm/@ui-js/code-playground@1.13.2/dist/code-playground.min.js@module"]).forEach((o,n)=>{const m=o.endsWith("@module"),c="script"+function(e,t=0){let o=3735928559^t,n=1103547991^t;for(let t=0;t<e.length;t++){const m=e.charCodeAt(t);o=Math.imul(o^m,2654435761),n=Math.imul(n^m,1597334677)}return o=Math.imul(o^o>>>16,2246822507),o^=Math.imul(n^n>>>13,3266489909),n=Math.imul(n^n>>>16,2246822507),n^=Math.imul(o^o>>>13,3266489909),4294967296*(2097151&n)+(o>>>0)}(o=o.replace("@module","")).toString(36);if(document.getElementById(c))return;const d=document.createElement("script");m&&(d.type="module"),d.id=c,d.src=o,d.async=!1,t&&n===e.length-1&&(d.onload=t),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="preload" as="font" type="font/woff2" href="/fonts/berkeley-mono/BerkeleyMono-Regular.woff2" crossorigin="anonymous">
<link rel="preload" as="font" type="font/woff2" href="/fonts/berkeley-mono/BerkeleyMono-Bold.woff2" crossorigin="anonymous">
<link rel="preload" as="font" type="font/woff2" href="https://cdn.jsdelivr.net/npm/mathlive/fonts/KaTeX_Main-Regular.woff2" crossorigin="anonymous">
<link rel="preload" as="font" type="font/woff2" href="https://cdn.jsdelivr.net/npm/mathlive/fonts/KaTeX_Math-Italic.woff2" crossorigin="anonymous">
<link rel="preload" as="font" type="font/woff2" href="https://cdn.jsdelivr.net/npm/mathlive/fonts/KaTeX_AMS-Regular.woff2" crossorigin="anonymous">
<link rel="preload" as="font" type="font/woff2" href="https://cdn.jsdelivr.net/npm/mathlive/fonts/KaTeX_Size1-Regular.woff2" crossorigin="anonymous">
<link rel="preload" as="image" href="/img/hand-slugs.jpg" fetchpriority="high">
<link rel="preload" as="image" href="/img/hand-gears.jpg" fetchpriority="high">
<link rel="preload" as="image" href="/img/hand-cube2.jpg" fetchpriority="high"><link rel="stylesheet" href="/assets/css/styles.f0919c7c.css">
<script src="/assets/js/runtime~main.868c8a5e.js" defer="defer"></script>
<script src="/assets/js/main.8b66a134.js" defer="defer"></script>
</head>
<body>
<svg style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><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"/></symbol>
</defs></svg>
<script>document.documentElement.setAttribute("data-theme",window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),document.documentElement.setAttribute("data-theme-choice","system"),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"><link rel="preload" as="image" href="/img/logo.webp"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><div class="shared-header"><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left 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="/"><div class="navbar__logo"><img src="/img/logo.webp" alt="MathLive Logo" class="themedComponent_mlkZ themedComponent--light_NVdE" height="42" width="42"><img src="/img/logo.webp" alt="MathLive Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU" height="42" width="42"></div><b class="navbar__title text--truncate">MathLive</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/mathfield/">Mathfield</a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/compute-engine/">Compute Engine</a><a href="https://epsil.dev" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Epsil<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></div><div class="theme-layout-navbar-right 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-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a><div class="navbarSearchContainer_Bca1"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search (Meta+k)" aria-keyshortcuts="Meta+k"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 24 24" aria-hidden="true"><circle cx="11" cy="11" r="8" stroke="currentColor" fill="none" stroke-width="1.4"></circle><path d="m21 21-4.3-4.3" stroke="currentColor" fill="none" 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><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main 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="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/mathfield/"><span class="categoryLinkLabel_W154">Mathfield</span></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="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" role="button" aria-expanded="true" href="/compute-engine/"><span class="categoryLinkLabel_W154">Compute Engine</span></a></div><ul 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/"><span class="linkLabel_WmDU">Introduction</span></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/"><span class="linkLabel_WmDU">Demo</span></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/"><span class="linkLabel_WmDU">Changelog</span></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/"><span class="linkLabel_WmDU">Expressions</span></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/"><span class="linkLabel_WmDU">Evaluation of Expressions</span></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/"><span class="linkLabel_WmDU">Symbolic Computing</span></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/"><span class="linkLabel_WmDU">Numeric Evaluation</span></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/"><span class="linkLabel_WmDU">Canonical Form</span></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/"><span class="linkLabel_WmDU">Symbols</span></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/"><span class="linkLabel_WmDU">Custom Functions and Symbols</span></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/"><span class="linkLabel_WmDU">LaTeX Syntax</span></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/"><span class="linkLabel_WmDU">Types</span></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/units/"><span class="linkLabel_WmDU">Units and Quantities</span></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 menu__link--active" aria-current="page" tabindex="0" href="/compute-engine/guides/simplify/"><span class="linkLabel_WmDU">Simplify</span></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/"><span class="linkLabel_WmDU">Compiling Expressions</span></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/python-target/"><span class="linkLabel_WmDU">Python/NumPy Target</span></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/"><span class="linkLabel_WmDU">Assumptions</span></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/"><span class="linkLabel_WmDU">Patterns and Rules</span></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/identities/"><span class="linkLabel_WmDU">Extended Rules — The Identities Library</span></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/logic/"><span class="linkLabel_WmDU">Logic and First-Order Logic</span></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/linear-algebra/"><span class="linkLabel_WmDU">Linear Algebra</span></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" tabindex="0" href="/math-json/"><span class="linkLabel_WmDU">MathJSON Format</span></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/"><span class="linkLabel_WmDU">API Reference</span></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/"><span class="linkLabel_WmDU">MathJSON Standard Library</span></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/"><span class="linkLabel_WmDU">Arithmetic</span></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/"><span class="linkLabel_WmDU">Calculus</span></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/"><span class="linkLabel_WmDU">Collections</span></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/colors/"><span class="linkLabel_WmDU">Colors</span></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/"><span class="linkLabel_WmDU">Complex</span></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/"><span class="linkLabel_WmDU">Control Structures</span></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/"><span class="linkLabel_WmDU">Core</span></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/"><span class="linkLabel_WmDU">Functions</span></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/"><span class="linkLabel_WmDU">Linear Algebra</span></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/"><span class="linkLabel_WmDU">Logic</span></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/"><span class="linkLabel_WmDU">Sets</span></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/"><span class="linkLabel_WmDU">Special Functions</span></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/"><span class="linkLabel_WmDU">Statistics</span></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/combinatorics/"><span class="linkLabel_WmDU">Combinatorics</span></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/number-theory/"><span class="linkLabel_WmDU">Number Theory</span></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/strings/"><span class="linkLabel_WmDU">Strings and Text</span></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/"><span class="linkLabel_WmDU">Trigonometry</span></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/units/"><span class="linkLabel_WmDU">Units and Quantities</span></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="categoryLink_byQd menu__link"><span class="categoryLinkLabel_W154">Tutorials</span></a></div><ul 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/"><span class="linkLabel_WmDU">Simple Quiz</span></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="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/about/"><span class="categoryLinkLabel_W154">Additional Resources</span></a></div></li></ul></nav><button type="button" title="Collapse sidebar" aria-label="Collapse sidebar" class="button button--secondary button--outline collapseSidebarButton_PEFL"><svg width="20" height="20" aria-hidden="true" class="collapseSidebarButtonIcon_kv0_"><g fill="#7a7a7a"><path d="M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"></path><path d="M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"></path></g></svg></button></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"><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></li><li class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link">Simplify</span></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"><header><h1>Simplify</h1></header><div class="intro_b9yo"><p>A complicated mathematical expression can often be transformed into a form that
is easier to understand.</p></div>
<p>The <code>expr.simplify()</code> function tries expanding, factoring and applying many
other transformations to find a simpler form of a symbolic expression.</p>
<p>Before the transformation rules are applied, the expression is put into a
canonical form.</p>
<p>When a function is simplified, its arguments are simplified as well, unless the
argument is "held". Which arguments are held is specified by the <code>hold</code> property
of the function definition. In addition, any argument wrapped with a <code>Hold</code>
function will be held, that is, not simplified. Conversely, a held argument
wrapped with a <code>ReleaseHold</code> function will not be held, and it will be
simplified.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="parse--simplify-free-function">Parse + Simplify Free Function<a href="#parse--simplify-free-function" class="hash-link" aria-label="Direct link to Parse + Simplify Free Function" title="Direct link to Parse + Simplify Free Function" translate="no"></a></h2>
<p>For the common "parse then simplify" flow, use the <code>simplify()</code> free function:</p>
<code-playground><div slot="javascript">// import { simplify } from '@cortex-js/compute-engine';
<!-- -->console.log(simplify("x+x+1"));
</div></code-playground>
<p>The <code>simplify()</code> free function accepts either a LaTeX string or a
<code>Expression</code>. It uses a shared <code>ComputeEngine</code> instance created on
first call.</p>
<p>For trigonometric simplification, use <code>expr.simplify({ strategy: 'fu' })</code>
on a parsed expression.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="defining-simpler">Defining "Simpler"<a href="#defining-simpler" class="hash-link" aria-label="Direct link to Defining "Simpler"" title="Direct link to Defining "Simpler"" translate="no"></a></h2>
<p>An expression may be represented by several equivalent forms.</p>
<p>For example $ (x + 4)(x-5) $ and $x^2 -x -20$ represent the same
expression.</p>
<p>Determining which is "the simplest" depends on how the complexity is measured.</p>
<p>By default, the complexity of an expression is measured by counting the number
of operations in the expression, and giving an increasing cost to:</p>
<ul>
<li class="">integers with fewer digits</li>
<li class="">integers with more digits</li>
<li class="">other numeric values</li>
<li class="">add, multiply, divide</li>
<li class="">subtract and negate</li>
<li class="">square root and root</li>
<li class="">exp</li>
<li class="">power and log</li>
<li class="">trigonometric function</li>
<li class="">inverse trigonometric function</li>
<li class="">hyperbolic functions</li>
<li class="">inverse hyperbolic functions</li>
<li class="">other functions</li>
</ul>
<p><strong>To influence how the complexity of an expression is measured</strong>, set the
<code>costFunction</code> property of the compute engine to a function assigning a cost to
an expression.</p>
<p>The cost is applied strictly: a rewrite is kept only if the result does not
cost more than what it replaces. <code>simplify()</code> therefore never returns
something more complicated than what you gave it.</p>
<p>Some rewrites are mathematically preferred yet score worse — combining powers
takes $2 \cdot 2^x$ from cost 4 to cost 5. Those do not rely on any
numeric allowance; they are tagged <code>purpose: 'transform'</code>, which exempts them
from the cost gate entirely. If you write a rule that should apply regardless
of cost, tag it the same way — see
<a class="" href="/compute-engine/guides/patterns-and-rules/">Patterns and Rules</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="numeric-simplifications">Numeric Simplifications<a href="#numeric-simplifications" class="hash-link" aria-label="Direct link to Numeric Simplifications" title="Direct link to Numeric Simplifications" translate="no"></a></h2>
<p>The <code>expr.simplify()</code> function will apply some numeric simplifications, such as
combining small integer and rational values, simplifying division by 1, addition
or subtraction of 0, etc...</p>
<p>It avoids making any simplification that could result in a loss of precision.</p>
<p>For example, \( 10^<!-- -->300<!-- --> + 1\) cannot be simplified without losing the least
significant digit, so <code>expr.simplify()</code> will return the expression unmodified.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="polynomial-simplifications">Polynomial Simplifications<a href="#polynomial-simplifications" class="hash-link" aria-label="Direct link to Polynomial Simplifications" title="Direct link to Polynomial Simplifications" translate="no"></a></h2>
<p>For univariate rational expressions (fractions with polynomials in a single
variable), <code>simplify()</code> automatically cancels common factors in the numerator
and denominator.</p>
<p>For example:</p>
<ul>
<li class=""><code class="language-math math-inline">\frac{x^2 - 1}{x - 1}</code> simplifies to <code class="language-math math-inline">x + 1</code></li>
<li class=""><code class="language-math math-inline">\frac{x^3 - x}{x^2 - 1}</code> simplifies to <code class="language-math math-inline">x</code></li>
<li class=""><code class="language-math math-inline">\frac{x + 1}{x^2 + 3x + 2}</code> simplifies to <code class="language-math math-inline">\frac{1}{x + 2}</code></li>
</ul>
<p>For more control over polynomial operations, or for multivariate expressions,
use the explicit <code>Cancel</code>, <code>PolynomialGCD</code>, <code>PolynomialQuotient</code>, and
<code>PolynomialRemainder</code> functions.</p>
<p>To check if an expression is a polynomial and extract its coefficients, use
<code>polynomialCoefficients()</code>:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> coeffs </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'x^3 + 2x + 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 function" style="color:var(--base-0a)">polynomialCoefficients</span><span class="token punctuation" style="color:var(--base-06)">(</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 plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ [1, 0, 2, 1] (descending order: x³, x², x, constant)</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// Check if an expression is a polynomial</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain">ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'sin(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 function" style="color:var(--base-0a)">polynomialCoefficients</span><span class="token punctuation" style="color:var(--base-06)">(</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 plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ undefined (not a polynomial)</span><br></div></code></pre></div></div>
<p>To find the roots of a polynomial, use <code>polynomialRoots()</code>:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token plain">ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'x^2 - 5x + 6'</span><span class="token punctuation" style="color:var(--base-06)">)</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">polynomialRoots</span><span class="token punctuation" style="color:var(--base-06)">(</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 plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ [2, 3]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain">ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'x^3 - 6x^2 + 11x - 6'</span><span class="token punctuation" style="color:var(--base-06)">)</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">polynomialRoots</span><span class="token punctuation" style="color:var(--base-06)">(</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 plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ [1, 2, 3]</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="automatic-factoring-in-square-roots">Automatic Factoring in Square Roots<a href="#automatic-factoring-in-square-roots" class="hash-link" aria-label="Direct link to Automatic Factoring in Square Roots" title="Direct link to Automatic Factoring in Square Roots" translate="no"></a></h3>
<p>When simplifying square root expressions, the engine automatically attempts to
factor the argument to enable further simplification. This handles cases where
the argument is an expanded perfect square.</p>
<p>For example:</p>
<ul>
<li class=""><code class="language-math math-inline">\sqrt{x^2 + 2x + 1}</code> simplifies to <code class="language-math math-inline">|x + 1|</code> (recognizes perfect square trinomial)</li>
<li class=""><code class="language-math math-inline">\sqrt{4x^2 + 12x + 9}</code> simplifies to <code class="language-math math-inline">|2x + 3|</code></li>
<li class=""><code class="language-math math-inline">\sqrt{a^2 + 2ab + b^2}</code> simplifies to <code class="language-math math-inline">|a + b|</code></li>
<li class=""><code class="language-math math-inline">\sqrt{a^2 - 2ab + b^2}</code> simplifies to <code class="language-math math-inline">|a - b|</code></li>
</ul>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'\\sqrt{x^2 + 2x + 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 function" style="color:var(--base-0a)">simplify</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">latex</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "|x+1|"</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'\\sqrt{4x^2 + 12x + 9}'</span><span class="token punctuation" style="color:var(--base-06)">)</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">simplify</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">latex</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "|2x+3|"</span><br></div></code></pre></div></div>
<p>This automatic factoring only occurs within <code>sqrt()</code> expressions during
simplification. For explicit factoring of polynomials, use the <code>Factor</code> function.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="explicit-factoring-and-expansion">Explicit Factoring and Expansion<a href="#explicit-factoring-and-expansion" class="hash-link" aria-label="Direct link to Explicit Factoring and Expansion" title="Direct link to Explicit Factoring and Expansion" translate="no"></a></h3>
<p>For more control over polynomial form, use <code>Factor</code> and <code>Expand</code>:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token comment" style="color:var(--base-05)">// Factor a polynomial</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token function" style="color:var(--base-0a)">factor</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'x^2 + 5x + 6'</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">latex</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "(x+2)(x+3)"</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token function" style="color:var(--base-0a)">factor</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'x^2 - 4'</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">latex</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "(x-2)(x+2)"</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// Expand a product</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token function" style="color:var(--base-0a)">expand</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'(x+1)(x+2)'</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">latex</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "x^2+3x+2"</span><br></div></code></pre></div></div>
<p>The <code>Factor</code> function currently supports:</p>
<ul>
<li class=""><strong>Perfect square trinomials</strong>: <code class="language-math math-inline">a^2 \pm 2ab + b^2 \to (a \pm b)^2</code></li>
<li class=""><strong>Difference of squares</strong>: <code class="language-math math-inline">a^2 - b^2 \to (a-b)(a+b)</code></li>
<li class=""><strong>Quadratics with rational roots</strong>: <code class="language-math math-inline">x^2 + bx + c</code> when roots are rational</li>
<li class=""><strong>Degree 3+ with rational roots</strong>: Uses the Rational Root Theorem (e.g., <code class="language-math math-inline">x^3 - 6x^2 + 11x - 6 \to (x-1)(x-2)(x-3)</code>)</li>
<li class=""><strong>Content extraction</strong>: Extracts GCD of integer coefficients first (e.g., <code class="language-math math-inline">6x^2 + 12x + 6 \to 6(x+1)^2</code>)</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="partial-fraction-decomposition">Partial Fraction Decomposition<a href="#partial-fraction-decomposition" class="hash-link" aria-label="Direct link to Partial Fraction Decomposition" title="Direct link to Partial Fraction Decomposition" translate="no"></a></h3>
<p>For decomposing rational expressions into simpler fractions, use <code>PartialFraction</code>:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token function" style="color:var(--base-0a)">evaluate</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'\\operatorname{PartialFraction}(\\frac{1}{(x+1)(x+2)}, 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 plain">latex</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "\\frac{1}{x+1} - \\frac{1}{x+2}"</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token function" style="color:var(--base-0a)">evaluate</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'\\operatorname{PartialFraction}(\\frac{3x+5}{(x+1)^2}, 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 plain">latex</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "\\frac{3}{x+1} + \\frac{2}{(x+1)^2}"</span><br></div></code></pre></div></div>
<p>This supports distinct and repeated linear factors, irreducible quadratic factors, and improper fractions (polynomial division is performed first). <code>Apart</code> is available as an alias for <code>PartialFraction</code>.</p>
<p>When a <code>Divide</code> expression has a denominator already in factored form (a product or power), <code>simplify()</code> automatically applies partial fraction decomposition if the result is simpler. This means <code>\frac{1}{(x+1)(x+2)}</code> is automatically simplified without needing to call <code>PartialFraction</code> explicitly.</p>
<div class="readMore_KWn8"><a href="/compute-engine/reference/arithmetic/"> Read more about
<strong>Polynomial Arithmetic</strong> <svg class="icon_qj0s chevronRightBold_bbMj"><use xlink:href="/icons.svg#chevron-right-bold"></use></svg></a></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="using-assumptions">Using Assumptions<a href="#using-assumptions" class="hash-link" aria-label="Direct link to Using Assumptions" title="Direct link to Using Assumptions" translate="no"></a></h2>
<p>Assumptions are additional information available about some symbols, for example
$ x > 0 $ or $n \in \N$.</p>
<p>Some transformations are only applicable if some assumptions can be verified.</p>
<p>For example, if no assumptions about $x$ is available the expression $\sqrt{x^2}$ cannot be simplified. However, if an assumption that $x \geq 0$ is available, then the expression can be simplified to $x$.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="sign-dependent-simplifications">Sign-Dependent Simplifications<a href="#sign-dependent-simplifications" class="hash-link" aria-label="Direct link to Sign-Dependent Simplifications" title="Direct link to Sign-Dependent Simplifications" translate="no"></a></h3>
<p>When assumptions about the sign of a variable are available, several
simplifications become possible:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token comment" style="color:var(--base-05)">// Without assumptions, sqrt(x^2) = |x|</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain">ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'\\sqrt{x^2}'</span><span class="token punctuation" style="color:var(--base-06)">)</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">simplify</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">latex</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "|x|"</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// With positive assumption</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain">ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">assume</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token plain">ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'x > 0'</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain">ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'\\sqrt{x^2}'</span><span class="token punctuation" style="color:var(--base-06)">)</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">simplify</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">latex</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "x"</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain">ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</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 function" style="color:var(--base-0a)">simplify</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">latex</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "x"</span><br></div></code></pre></div></div>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token comment" style="color:var(--base-05)">// With negative assumption</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain">ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">assume</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token plain">ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'y < 0'</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain">ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'\\sqrt{y^2}'</span><span class="token punctuation" style="color:var(--base-06)">)</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">simplify</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">latex</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "-y"</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain">ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'|y|'</span><span class="token punctuation" style="color:var(--base-06)">)</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">simplify</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">latex</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "-y"</span><br></div></code></pre></div></div>
<div class="readMore_KWn8"><a href="/compute-engine/guides/assumptions/"> Read more about
<strong>Assumptions</strong> <svg class="icon_qj0s chevronRightBold_bbMj"><use xlink:href="/icons.svg#chevron-right-bold"></use></svg></a></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="simplify-and-assigned-values">Simplify and Assigned Values<a href="#simplify-and-assigned-values" class="hash-link" aria-label="Direct link to Simplify and Assigned Values" title="Direct link to Simplify and Assigned Values" translate="no"></a></h2>
<p>The <code>expr.simplify()</code> <strong>method</strong> is <em>value-blind</em>: it never substitutes the
value you assigned to a symbol. Sign- and parity-dependent rewrites use a
symbol's <strong>declared type</strong> and <strong>in-scope assumptions</strong>, but never its assigned
value.</p>
<p>This is why an assumption and an assignment behave differently, even when the
value satisfies the assumption:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token comment" style="color:var(--base-05)">// An assumption is a fact simplify() may use:</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain">ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">assume</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token plain">ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'w > 0'</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain">ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'|w|'</span><span class="token punctuation" style="color:var(--base-06)">)</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">simplify</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">latex</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "w" (w > 0 licenses dropping the absolute value)</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// An assigned value is NOT used by simplify():</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain">ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">forget</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'w'</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain">ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">assign</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'w'</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)">5</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain">ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'|w|'</span><span class="token punctuation" style="color:var(--base-06)">)</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">simplify</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">latex</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "|w|" (an integer is not provably non-negative, so |w| stays symbolic)</span><br></div></code></pre></div></div>
<p>Treating an assigned value as a fact would be a silent trap: the sign that held
when you simplified would be baked into the saved expression and give a wrong
answer after the value changes (assign <code>w := -3</code> and evaluate the baked-in <code>w</code>,
and you would get <code>-3</code> for <code>|w|</code>). The value-blind method avoids this — an
assigned value is treated as if the symbol were merely <em>declared</em> with that
value's type.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-method-vs-the-simplify-operator">The method vs. the <code>Simplify</code> operator<a href="#the-method-vs-the-simplify-operator" class="hash-link" aria-label="Direct link to the-method-vs-the-simplify-operator" title="Direct link to the-method-vs-the-simplify-operator" translate="no"></a></h3>
<p>The <code>.simplify()</code> method applies rewrite rules only — it does not run an
operator's evaluation. So a result that comes from a handler rather than a rule
(a determinant, a derivative, an integral) is returned unchanged by the method:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> m </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)">'List'</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)">'List'</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)">'a'</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)">'b'</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 string" style="color:var(--base-0b)">'List'</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)">'c'</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)">'d'</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain">ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">box</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">'Determinant'</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> m</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 function" style="color:var(--base-0a)">simplify</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">operator</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "Determinant" (unchanged — no rewrite rule for it)</span><br></div></code></pre></div></div>
<p>To compute <em>then</em> simplify, evaluate first — the reliable recipe is
<code>evaluate().simplify()</code>:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token plain">ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">box</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">'Determinant'</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> m</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 function" style="color:var(--base-0a)">evaluate</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 function" style="color:var(--base-0a)">simplify</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">latex</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "ad-bc"</span><br></div></code></pre></div></div>
<p>The <code>Simplify</code> <strong>operator</strong> does exactly this for you: <code>Simplify(expr)</code>
evaluates its argument first, then simplifies the result. Unlike the method, it
therefore substitutes assigned symbol values and runs evaluation handlers:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token plain">ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">assign</span><span class="token punctuation" style="color:var(--base-06)">(</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)">5</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain">ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">box</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">'Simplify'</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 punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">'Power'</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)">2</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><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 function" style="color:var(--base-0a)">evaluate</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 function" style="color:var(--base-0a)">print</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ 30 (the operator evaluates x → 5, then simplifies)</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="nested-root-simplification">Nested Root Simplification<a href="#nested-root-simplification" class="hash-link" aria-label="Direct link to Nested Root Simplification" title="Direct link to Nested Root Simplification" translate="no"></a></h2>
<p>Nested roots are automatically simplified to a single root with the product
of the indices:</p>
<table><thead><tr><th style="text-align:left">Expression</th><th style="text-align:left">Simplified</th></tr></thead><tbody><tr><td style="text-align:left"><code>sqrt(sqrt(x))</code></td><td style="text-align:left"><code>root(4)(x)</code></td></tr><tr><td style="text-align:left"><code>root(sqrt(x), n)</code></td><td style="text-align:left"><code>root(2n)(x)</code></td></tr><tr><td style="text-align:left"><code>sqrt(root(x, n))</code></td><td style="text-align:left"><code>root(2n)(x)</code></td></tr><tr><td style="text-align:left"><code>root(root(x, m), n)</code></td><td style="text-align:left"><code>root(m·n)(x)</code></td></tr></tbody></table>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token function" style="color:var(--base-0a)">box</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">'Sqrt'</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)">'Sqrt'</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 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 function" style="color:var(--base-0a)">simplify</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">latex</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "\\sqrt[4]{x}"</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token function" style="color:var(--base-0a)">box</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">'Root'</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)">'Root'</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)">3</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 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><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">simplify</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">latex</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "\\sqrt[6]{x}"</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token function" style="color:var(--base-0a)">box</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">'Sqrt'</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)">'Root'</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)">3</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 punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">simplify</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">latex</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "\\sqrt[6]{x}"</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="trigonometric-simplification">Trigonometric Simplification<a href="#trigonometric-simplification" class="hash-link" aria-label="Direct link to Trigonometric Simplification" title="Direct link to Trigonometric Simplification" translate="no"></a></h2>
<p>Trigonometric expressions can be simplified using the Fu algorithm, a systematic
approach based on the paper "Automated and readable simplification of
trigonometric expressions" by Fu, Zhong, and Zeng (2006).</p>
<p>The Fu algorithm applies a series of transformation rules (TR) organized into
rule lists (RL) that are optimized for different types of expressions:</p>
<ul>
<li class=""><strong>RL1</strong>: For expressions containing <code>tan</code> and <code>cot</code></li>
<li class=""><strong>RL2</strong>: For expressions containing <code>sin</code> and <code>cos</code></li>
</ul>
<p>Each rule applies specific identities:</p>
<ul>
<li class=""><strong>Reciprocal forms</strong>: <code>sec(x)</code> → <code>1/cos(x)</code>, <code>csc(x)</code> → <code>1/sin(x)</code></li>
<li class=""><strong>Ratio forms</strong>: <code>tan(x)</code> → <code>sin(x)/cos(x)</code></li>
<li class=""><strong>Pythagorean identities</strong>: <code>sin²(x) + cos²(x)</code> → <code>1</code></li>
<li class=""><strong>Double angle</strong>: <code>2sin(x)cos(x)</code> → <code>sin(2x)</code></li>
<li class=""><strong>Product-to-sum</strong>: <code>sin(x)cos(y)</code> → <code>½[sin(x+y) + sin(x-y)]</code></li>
<li class=""><strong>Sum-to-product</strong>: <code>sin(x) + sin(y)</code> → <code>2sin((x+y)/2)cos((x-y)/2)</code></li>
<li class=""><strong>Morrie's law</strong>: <code>cos(x)cos(2x)cos(4x)</code> → <code>sin(8x)/(8sin(x))</code></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="using-the-fu-algorithm">Using the Fu Algorithm<a href="#using-the-fu-algorithm" class="hash-link" aria-label="Direct link to Using the Fu Algorithm" title="Direct link to Using the Fu Algorithm" translate="no"></a></h3>
<p>There are two ways to apply trigonometric simplification:</p>
<p><strong>Option 1: Strategy option with <code>simplify()</code></strong></p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> expr </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">"\\sin^2(x) + \\cos^2(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 plain"></span><br></div><div 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"> simplified </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> expr</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">simplify</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 literal-property property" style="color:var(--base-0c)">strategy</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)">'fu'</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 punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// Returns: 1</span><br></div></code></pre></div></div>
<p><strong>Option 2: Dedicated <code>trigSimplify()</code> method</strong></p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> expr </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">"2\\sin(x)\\cos(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 plain"></span><br></div><div 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"> simplified </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> expr</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">trigSimplify</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// Returns: sin(2x)</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="examples">Examples<a href="#examples" class="hash-link" aria-label="Direct link to Examples" title="Direct link to Examples" translate="no"></a></h3>
<table><thead><tr><th style="text-align:left">Expression</th><th style="text-align:left">Simplified</th></tr></thead><tbody><tr><td style="text-align:left"><code>sin²(x) + cos²(x)</code></td><td style="text-align:left"><code>1</code></td></tr><tr><td style="text-align:left"><code>tan(x)·cot(x)</code></td><td style="text-align:left"><code>1</code></td></tr><tr><td style="text-align:left"><code>2sin(x)cos(x)</code></td><td style="text-align:left"><code>sin(2x)</code></td></tr><tr><td style="text-align:left"><code>sin(x)⁴ - cos(x)⁴</code></td><td style="text-align:left"><code>-cos(2x)</code></td></tr><tr><td style="text-align:left"><code>cos(x)cos(2x)cos(4x)</code></td><td style="text-align:left"><code>sin(8x)/(8sin(x))</code></td></tr></tbody></table>
<div class="readMore_KWn8"><a href="/compute-engine/reference/trigonometry/"> Read more about
<strong>Trigonometric Functions</strong> <svg class="icon_qj0s chevronRightBold_bbMj"><use xlink:href="/icons.svg#chevron-right-bold"></use></svg></a></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-by-step-explanations">Step-by-Step Explanations<a href="#step-by-step-explanations" class="hash-link" aria-label="Direct link to Step-by-Step Explanations" title="Direct link to Step-by-Step Explanations" translate="no"></a></h2>
<p>The <code>expr.explain()</code> function returns the same result as <code>expr.simplify()</code>,
together with the chain of steps that produced it — the textbook presentation
<em>expression → step (with a reason) → … → result</em>.</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> expr </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">"\\frac{x^2-1}{x-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><br></div><div 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"> explanation </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> expr</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">explain</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain">console</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">log</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token plain">explanation</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">initial</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">latex</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "\frac{x^2-1}{x-1}"</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">for</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> step </span><span class="token keyword" style="color:var(--base-0e)">of</span><span class="token plain"> explanation</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">steps</span><span class="token punctuation" style="color:var(--base-06)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> console</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">log</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token plain">step</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">value</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">latex</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)">"—"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> step</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">description</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "x+1 — Cancel the common factors"</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain">console</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">log</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token plain">explanation</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">result</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">latex</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ "x+1"</span><br></div></code></pre></div></div>
<p>An <code>Explanation</code> has four properties:</p>
<ul>
<li class=""><code>operation</code>: the operation that was traced (<code>'simplify'</code>, <code>'solve'</code>,
<code>'D'</code> or <code>'Integrate'</code>)</li>
<li class=""><code>initial</code>: the <strong>canonical form</strong> of the expression <code>explain()</code> was called
on — the chain's step 0. Canonicalization (e.g. <code>x - 1</code> becoming
<code>Add(x, -1)</code>, or <code>2 + 3</code> folding to <code>5</code>) happens before the first step is
recorded and is not traced.</li>
<li class=""><code>steps</code>: the chain of steps. Each step has the expression <code>value</code> after the
step was applied, a stable machine <code>id</code> identifying the rule that fired,
and a default English <code>description</code>.</li>
<li class=""><code>result</code>: the same value <code>simplify()</code> returns</li>
</ul>
<p><strong>Explaining is free of side effects and does not change results:</strong> the
explanation runs the same code as <code>simplify()</code>, so <code>explanation.result</code> is
always the same value <code>expr.simplify()</code> returns.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="explaining-an-equation-solution">Explaining an Equation Solution<a href="#explaining-an-equation-solution" class="hash-link" aria-label="Direct link to Explaining an Equation Solution" title="Direct link to Explaining an Equation Solution" translate="no"></a></h3>
<p><code>expr.explain('solve')</code> traces <code>expr.solve()</code> for a univariate equation (an
expression <code>f</code> is read as the equation <code>f = 0</code>). The unknown is inferred, or
passed explicitly with <code>options.variable</code>. Step values are <strong>equations</strong> —
the state of the equation after each phase — so the chain reads like
textbook working, including candidate roots and the rejection of extraneous
candidates:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> expr </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">"\\sqrt{x+1} = x - 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><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">for</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> step </span><span class="token keyword" style="color:var(--base-0e)">of</span><span class="token plain"> expr</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">explain</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'solve'</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">steps</span><span class="token punctuation" style="color:var(--base-06)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> console</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">log</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token plain">step</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">value</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">latex</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)">"—"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> step</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">description</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ -x+\sqrt{x+1}+1=0 — Move all terms to one side</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ -x^2+3x=0 — Square both sides to eliminate the radical</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ [x=0, x=3] — Apply the quadratic formula</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ x=0 — Check each candidate in the original equation; reject the extraneous ones</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ x=3 — The solutions</span><br></div></code></pre></div></div>
<p><code>explanation.result</code> is a <code>List</code> of the same roots <code>solve()</code> returns. A
case-split (an absolute value, a zero product) is rendered as one step whose
value lists the sub-equations.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="systems">Systems<a href="#systems" class="hash-link" aria-label="Direct link to Systems" title="Direct link to Systems" translate="no"></a></h4>
<p>A <code>List</code> (or <code>And</code>) of equations is traced through the same solvers
<code>solve()</code> runs. Pass the unknowns as an array. Step values are the whole
system — the state after each elimination and back-substitution phase:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> system </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">box</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"List"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">"x+y=5"</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"> ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">"x-y=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 punctuation" style="color:var(--base-06)">)</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">for</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> step </span><span class="token keyword" style="color:var(--base-0e)">of</span><span class="token plain"> system</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">explain</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">"solve"</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><span class="token literal-property property" style="color:var(--base-0c)">variable</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)">"x"</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)">"y"</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 punctuation" style="color:var(--base-06)">)</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">steps</span><span class="token punctuation" style="color:var(--base-06)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> console</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">log</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token plain">step</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">value</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">latex</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)">"—"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> step</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">description</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ \begin{cases}x+y=5\\-2y=-4\end{cases} — Eliminate a variable from the remaining equations</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ \bigl\lbrack y=2\bigr\rbrack — Substitute the known value back to solve for the next variable</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ \begin{cases}x=3\\y=2\end{cases} — Substitute the known value back to solve for the next variable</span><br></div></code></pre></div></div>
<p>Nonlinear 2×2 systems show the product–sum or solve-and-substitute
strategy. A system of <strong>linear inequalities</strong> in two variables is traced
through constraint normalization (each inequality rewritten with zero on
the right-hand side), the intersection points of the boundary lines, and
the feasible corner points — the same vertices <code>solve()</code> returns:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> region </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">box</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"List"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">"x+y\\le 4"</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">"x\\ge 0"</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">"y\\ge 0"</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></div><div 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 punctuation" style="color:var(--base-06)">)</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain">region</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">explain</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">"solve"</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><span class="token literal-property property" style="color:var(--base-0c)">variable</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)">"x"</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)">"y"</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 punctuation" style="color:var(--base-06)">)</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// steps: normalize each inequality → boundary intersections → feasible vertices</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// result: [{x=0, y=0}, {x=4, y=0}, {x=0, y=4}]</span><br></div></code></pre></div></div>
<p>A <strong>mixed</strong> system of equations and inequalities shows the elimination
steps, then each candidate solution substituted into the constraints and
accepted or rejected. When a system genuinely cannot be solved,
<code>explain('solve')</code> throws a precise error.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="explaining-a-derivative">Explaining a Derivative<a href="#explaining-a-derivative" class="hash-link" aria-label="Direct link to Explaining a Derivative" title="Direct link to Explaining a Derivative" translate="no"></a></h3>
<p><code>expr.explain('D')</code> traces the differentiation of the expression. Steps are
whole-expression states in traversal order — each textbook rule first
appears with its unresolved sub-derivatives as inert <code>D(…)</code> terms, which
then resolve one by one:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> expr </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">"x \\sin 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 plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">for</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> step </span><span class="token keyword" style="color:var(--base-0e)">of</span><span class="token plain"> expr</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">explain</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'D'</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">steps</span><span class="token punctuation" style="color:var(--base-06)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> console</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">log</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token plain">step</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">value</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">latex</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)">"—"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> step</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">description</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ x\,\frac{\mathrm{d}}{\mathrm{d}x}\sin x+\sin x — Apply the product rule: (u·v)′ = u′·v + u·v′</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ x\cos x+\sin x — Differentiate using a known derivative</span><br></div></code></pre></div></div>
<p>The variable of differentiation is inferred when the expression has exactly
one unknown; otherwise pass it with <code>options.variable</code>. The <code>result</code>
matches evaluating <code>D(expr, variable)</code>. When the unfolded textbook form
differs from the engine's simplified result, the chain closes with a
<em>Simplify the result</em> step.</p>
<p>Higher-order and mixed partial derivatives are traced stage by stage: pass
<code>options.order</code> for the <code class="language-math math-inline">n</code>-th derivative, or call <code>explain('D')</code> on a <code>D</code>
expression itself (including mixed partials such as <code>D(f, x, y)</code>). Each
stage replays the rule applications inside the remaining derivative
operators, folds to the simplified derivative, then differentiates again:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token plain">ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">"x \\sin 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 function" style="color:var(--base-0a)">explain</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">"D"</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><span class="token literal-property property" style="color:var(--base-0c)">variable</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 plain"> </span><span class="token literal-property property" style="color:var(--base-0c)">order</span><span class="token operator" 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 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 punctuation" style="color:var(--base-06)">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="explaining-an-integral">Explaining an Integral<a href="#explaining-an-integral" class="hash-link" aria-label="Direct link to Explaining an Integral" title="Direct link to Explaining an Integral" translate="no"></a></h3>
<p><code>expr.explain('Integrate')</code> traces symbolic integration through the rule
chain of the opt-in <strong>Integration Rules</strong> library (the Rubi corpus) — it
requires <code>loadIntegrationRules(ce)</code> to have been called first, and throws a
precise error otherwise. Steps are whole-expression states: sums split term
by term, constant factors move out, and each rule application rewrites one
unevaluated integral until none remain:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token keyword" style="color:var(--base-0e)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"> loadIntegrationRules </span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"> </span><span class="token keyword" style="color:var(--base-0e)">from</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"@cortex-js/compute-engine/integration-rules"</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token function" style="color:var(--base-0a)">loadIntegrationRules</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token plain">ce</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div 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"> expr </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">"\\int (3x^2+2x+1)\\,dx"</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">for</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> step </span><span class="token keyword" style="color:var(--base-0e)">of</span><span class="token plain"> expr</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">explain</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">"Integrate"</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">steps</span><span class="token punctuation" style="color:var(--base-06)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> console</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">log</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token plain">step</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">value</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">latex</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)">"—"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> step</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">description</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ \int\!1\,\mathrm{d}x+\int\!2x\,\mathrm{d}x+\int\!3x^2\,\mathrm{d}x — Integrate term by term: ∫(u+v) dx = ∫u dx + ∫v dx</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ x+\int\!2x\,\mathrm{d}x+\int\!3x^2\,\mathrm{d}x — The integral of a constant: ∫c dx = c·x</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ x+2\int\!x\,\mathrm{d}x+\int\!3x^2\,\mathrm{d}x — Move the constant factor out of the integral</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ x^2+x+\int\!3x^2\,\mathrm{d}x — The integral of the variable: ∫x dx = x²/2</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ x^2+x+3\int\!x^2\,\mathrm{d}x — Move the constant factor out of the integral</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ x^3+x^2+x — Apply integration rule 1.1.1.1#15 (Rubi)</span><br></div></code></pre></div></div>
<p>Steps produced by a corpus rule carry a stable <code>rubi:…</code> id naming the rule.
The <code>result</code> matches evaluating the integral. When the rules cannot close
the integral a precise error is thrown rather than a partial explanation.</p>
<p>A <strong>definite</strong> integral is presented via the Fundamental Theorem of
Calculus: the chain reframes to finding the antiderivative <code class="language-math math-inline">F</code>, then closes
with the bracket <code class="language-math math-inline">F\big|_a^b</code>, the bounds substituted (unevaluated), and
the value:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> expr </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> ce</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">parse</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">"\\int_0^1 x^2\\,dx"</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">for</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> step </span><span class="token keyword" style="color:var(--base-0e)">of</span><span class="token plain"> expr</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">explain</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">"Integrate"</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">steps</span><span class="token punctuation" style="color:var(--base-06)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> console</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">log</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token plain">step</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">value</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">latex</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)">"—"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> step</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token plain">description</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></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ \int\!x^2\,\mathrm{d}x — Find the antiderivative of the integrand</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ \frac{x^3}{3} — Apply integration rule 1.1.1.1#15 (Rubi)</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ \left.\left(\frac{x^3}{3}\right)\right|_{0}^{1} — Apply the Fundamental Theorem of Calculus: ∫ᵃᵇ f dx = F(b) − F(a)</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ \frac{1^3}{3}-\frac{0^3}{3} — Evaluate the antiderivative at the bounds</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// ➔ \frac{1}{3} — Simplify the result</span><br></div></code></pre></div></div>
<p>Symbolic bounds work (<code>\int_0^a x\,dx</code> → <code>\frac{a^2}{2}</code>); an improper
integral (an infinite bound) skips the substitution step — the bracket is a
limit, not a substitution — and closes directly with the value.</p>
<div class="readMore_KWn8"><a href="/compute-engine/guides/integration-rules/"> Read more about
the <strong>Integration Rules</strong> library <svg class="icon_qj0s chevronRightBold_bbMj"><use xlink:href="/icons.svg#chevron-right-bold"></use></svg></a></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-ids-and-localization">Step Ids and Localization<a href="#step-ids-and-localization" class="hash-link" aria-label="Direct link to Step Ids and Localization" title="Direct link to Step Ids and Localization" translate="no"></a></h3>
<p>The <code>id</code> of a step is a frozen, machine-readable identifier (e.g.
<code>'cancel common polynomial factors'</code>, <code>'x^n * x^m -> x^{n+m}'</code>,
<code>'fungrim:0010f3'</code>). The engine ships English descriptions only; to localize
or customize the copy, key your strings off <code>step.id</code> and use the
<code>description</code> as a fallback.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="verbosity">Verbosity<a href="#verbosity" class="hash-link" aria-label="Direct link to Verbosity" title="Direct link to Verbosity" translate="no"></a></h3>
<p>By default the step chain is curated: work done while simplifying
sub-expressions in place is surfaced as its own labeled steps (e.g.
<code class="language-math math-inline">\tan x\cot x \to 1</code> inside a larger sum), consecutive applications of the
same rule are coalesced into a single step, and internal bookkeeping
markers are filtered out. Pass <code>verbosity: 'all'</code> to get the raw, uncurated
trace — useful for debugging and for rule authors:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token plain">expr</span><span class="token punctuation" style="color:var(--base-06)">.</span><span class="token function" style="color:var(--base-0a)">explain</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token string" style="color:var(--base-0b)">'simplify'</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><span class="token literal-property property" style="color:var(--base-0c)">verbosity</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)">'all'</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 punctuation" style="color:var(--base-06)">;</span><br></div></code></pre></div></div>
<p>The options of <code>simplify()</code> (<code>rules</code>, <code>costFunction</code>, <code>strategy</code>) are also
accepted and honored, so <code>expr.explain('simplify', options).result</code> matches
<code>expr.simplify(options)</code> for any options.</p></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="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/compute-engine/guides/units/"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Units and Quantities</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/compute-engine/guides/compiling/"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Compiling Expressions</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="#parse--simplify-free-function" class="table-of-contents__link toc-highlight">Parse + Simplify Free Function</a></li><li><a href="#defining-simpler" class="table-of-contents__link toc-highlight">Defining "Simpler"</a></li><li><a href="#numeric-simplifications" class="table-of-contents__link toc-highlight">Numeric Simplifications</a></li><li><a href="#polynomial-simplifications" class="table-of-contents__link toc-highlight">Polynomial Simplifications</a><ul><li><a href="#automatic-factoring-in-square-roots" class="table-of-contents__link toc-highlight">Automatic Factoring in Square Roots</a></li><li><a href="#explicit-factoring-and-expansion" class="table-of-contents__link toc-highlight">Explicit Factoring and Expansion</a></li><li><a href="#partial-fraction-decomposition" class="table-of-contents__link toc-highlight">Partial Fraction Decomposition</a></li></ul></li><li><a href="#using-assumptions" class="table-of-contents__link toc-highlight">Using Assumptions</a><ul><li><a href="#sign-dependent-simplifications" class="table-of-contents__link toc-highlight">Sign-Dependent Simplifications</a></li></ul></li><li><a href="#simplify-and-assigned-values" class="table-of-contents__link toc-highlight">Simplify and Assigned Values</a><ul><li><a href="#the-method-vs-the-simplify-operator" class="table-of-contents__link toc-highlight">The method vs. the <code>Simplify</code> operator</a></li></ul></li><li><a href="#nested-root-simplification" class="table-of-contents__link toc-highlight">Nested Root Simplification</a></li><li><a href="#trigonometric-simplification" class="table-of-contents__link toc-highlight">Trigonometric Simplification</a><ul><li><a href="#using-the-fu-algorithm" class="table-of-contents__link toc-highlight">Using the Fu Algorithm</a></li><li><a href="#examples" class="table-of-contents__link toc-highlight">Examples</a></li></ul></li><li><a href="#step-by-step-explanations" class="table-of-contents__link toc-highlight">Step-by-Step Explanations</a><ul><li><a href="#explaining-an-equation-solution" class="table-of-contents__link toc-highlight">Explaining an Equation Solution</a></li><li><a href="#explaining-a-derivative" class="table-of-contents__link toc-highlight">Explaining a Derivative</a></li><li><a href="#explaining-an-integral" class="table-of-contents__link toc-highlight">Explaining an Integral</a></li><li><a href="#step-ids-and-localization" class="table-of-contents__link toc-highlight">Step Ids and Localization</a></li><li><a href="#verbosity" class="table-of-contents__link toc-highlight">Verbosity</a></li></ul></li></ul></div></div></div></div></main></div></div></div><div class="shared-footer"><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">SDKs</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><li class="footer__item"><a class="footer__link-item" href="/math-json/">MathJSON</a></li><li class="footer__item"><a href="https://epsil.dev" target="_blank" rel="noopener noreferrer" class="footer__link-item">Epsil<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column 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://chatgpt.com/g/g-8YgEfR7ig-mathlive-gpt" target="_blank" rel="noopener noreferrer" class="footer__link-item">
<svg class="icon-one-rem"><use role="none" xlink:href="/icons.svg#openai"></use></svg>
MathLive GPT
<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="theme-layout-footer-column 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></div>
</body>
</html>