diff --git a/asset-manifest.json b/asset-manifest.json index e39bb21..efd08ac 100644 --- a/asset-manifest.json +++ b/asset-manifest.json @@ -1,18 +1,18 @@ { "files": { "main.css": "/static/css/main.d391b2ee.css", - "main.js": "/static/js/main.c1070ac5.js", + "main.js": "/static/js/main.786721c1.js", "static/js/329.39349b8b.chunk.js": "/static/js/329.39349b8b.chunk.js", "static/js/573.882654c3.chunk.js": "/static/js/573.882654c3.chunk.js", - "static/js/775.bdfd4731.chunk.js": "/static/js/775.bdfd4731.chunk.js", + "static/js/775.7529fa55.chunk.js": "/static/js/775.7529fa55.chunk.js", "static/js/404.5dfc04ee.chunk.js": "/static/js/404.5dfc04ee.chunk.js", "static/media/Inter-VariableFont_slnt,wght.ttf": "/static/media/Inter-VariableFont_slnt,wght.aadb65ac45347ff46699.ttf", "index.html": "/index.html", "main.d391b2ee.css.map": "/static/css/main.d391b2ee.css.map", - "main.c1070ac5.js.map": "/static/js/main.c1070ac5.js.map" + "main.786721c1.js.map": "/static/js/main.786721c1.js.map" }, "entrypoints": [ "static/css/main.d391b2ee.css", - "static/js/main.c1070ac5.js" + "static/js/main.786721c1.js" ] } \ No newline at end of file diff --git a/imgs/Proofs/3_1.png b/imgs/Proofs/3_1.png new file mode 100644 index 0000000..06a257c Binary files /dev/null and b/imgs/Proofs/3_1.png differ diff --git a/imgs/Proofs/3_2.png b/imgs/Proofs/3_2.png new file mode 100644 index 0000000..1f67563 Binary files /dev/null and b/imgs/Proofs/3_2.png differ diff --git a/index.html b/index.html index 6810d34..2d2381a 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -
Proofs graphic.
The Pythagorean Theorem is one of the most fundamental theorems in all of Mathematics, but little are familiar with the proof of such a formula. This theorem is used to find the length of any diagonal line which gives us a formula for how to calculate the distance between two points in space. But how was it proven?
Let\'s throw away any knowledge of the Pythagorean Theorem and simply try to answer this question: What is the length of this line on the coordinate plane?
Looking at the image, we can see that A = (-6, -3), and B = (7, 6). We can easily calculate distance when the points are on the same dimension, but how do we calculate distance when two dimensions are involved? Looking at A and B, we can see they are 13 units away horizontally and 12 units away vertically. Let\'s represent this as a triangle.
","image":"Diagram of right triangle.
Here, c is our unknown, b is 13 and a is 12. This creates a right triangle. Right triangles are special for many reasons - a big factor being their properties of similarity.
Above shows how each component angle of each triangle must be all equivalent when Triangle 3 is bisected to where it internally creates Triangle 1 and Triangle 2. What similarity tells us is that the ratios of the side lengths must be equivalent. This is because while the triangles can have different sizes overall, their interior angles dictate the side length proportions. Therefore, when two angles are shown to be equal, the third must also be equal, creating these proportions. For example, in the previous model: a / b = e / d. Right triangles are the only triangles where you can have this and its two components similar, due to the creation of two equal degree angles when bisecting the hypotenuse. You can mess around with these ratios and find many relationships, so let\'s try to expand and discover something we didn\'t expect.
","image":"A triangle representation of the distance between points A and B.
Consider two ratios: a / c = e / a and b / c = f / b. These ratios are particularly interesting because they contain a and b side lengths of the main triangle twice in their respective equations. By cross multiplying, a2 = ce and b2 = cf. Since c is in both of these equations, let\'s add them together to simplify things: a2 + b2 = ce + cf. It is clear that we can factor out c: a2 + b2 = c(e + f). Looking at the diagram: e + f = c, meaning we can substitute e + f out for c and get a2 + b2 = c2. This relationship is not obvious at all, but can beautifully be derived from very simple similarity relationships. Some good news here is that since c is isolated, we can solve for the diagonal side length of a triangle given only vertical and horizontal lengths, being c = sqrt(a2 + b2). We can finally get that equation for the distance of any two points on a plane.
let D be the distance
C = sqrt(a2 + b2) (Substitute out hypotenuse length c.)
D = sqrt(a2 + b2) (a is our vertical length and b is our horizontal length.)
a = | y1 - y2 |
b = | x1 - x2 |
D = sqrt((y2 - y1)2 + (x2 - x1)2) (The absolute values are removed because the whole thing is squared, and since negative * negative = positive, the order of variables doesn\'t matter.)
Now we can find the distance between A = (-6, -3) and B = (7, 6). With proper substitution we get:
Deriving the Pythagorean Theorem in three dimensions is surprisingly simple, as it builds on the 2D Pythagorean Theorem. The Pythagorean Theorem in two dimensions states: a2 + b2 = c2, where a and b are the legs of a right triangle, and c is the hypotenuse.
From this three dimensional illustration, we want to find what s is from non-angled lines: x, y and z.With help from the Pythagorean Theorem, we can deduce: c2 = x2 + y2. We can also notice that on the rectangular prism, z stays completely vertical. With that information, it is time to use the Pythagorean Theorem on the triangle containing s.
z2 + (sqrt(x2 + y2))2 = s2
x2 + y2 + z2 = s2 (Absolute value signs are not needed when canceling out due to x and y both squared.)
With changing the variable names to match the Pythagorean Theorem, we get: a2 + b2 + c2 = d2. There is a clear pattern when increasing one dimension, and it\'s by simply adding a new variable. To find a distance formula in 3D space, the process is exactly the same:
When going up a dimension, all you need to do is add the subtracted coordinates squared. You can see this in action when going down dimensions. If D = sqrt((x2 - x1)2 + (y2 - y1)2 + (z2 - z1)2), decreasing to a single dimension gives us D = sqrt(x2 - x1)2), which when canceled is: D = | x2 - x1 |, the formula for finding the distance between two points on the number line.
Therefore, for n dimensions, the Pythagorean Theorem theoretically would be: a12 + \u2026 + an2 = c2, where n is the amount of dimensions, each term is the distance in its dimension, and c is the hypotenuse.
","image":"Diagram of right triangle.
Proofs graphic.
The Pythagorean Theorem is one of the most fundamental theorems in all of Mathematics, but little are familiar with the proof of such a formula. This theorem is used to find the length of any diagonal line which gives us a formula for how to calculate the distance between two points in space. But how was it proven?
Let\'s throw away any knowledge of the Pythagorean Theorem and simply try to answer this question: What is the length of this line on the coordinate plane?
Looking at the image, we can see that A = (-6, -3), and B = (7, 6). We can easily calculate distance when the points are on the same dimension, but how do we calculate distance when two dimensions are involved? Looking at A and B, we can see they are 13 units away horizontally and 12 units away vertically. Let\'s represent this as a triangle.
","image":"Diagram of right triangle.
Here, c is our unknown, b is 13 and a is 12. This creates a right triangle. Right triangles are special for many reasons - a big factor being their properties of similarity.
Above shows how each component angle of each triangle must be all equivalent when Triangle 3 is bisected to where it internally creates Triangle 1 and Triangle 2. What similarity tells us is that the ratios of the side lengths must be equivalent. This is because while the triangles can have different sizes overall, their interior angles dictate the side length proportions. Therefore, when two angles are shown to be equal, the third must also be equal, creating these proportions. For example, in the previous model: a / b = e / d. Right triangles are the only triangles where you can have this and its two components similar, due to the creation of two equal degree angles when bisecting the hypotenuse. You can mess around with these ratios and find many relationships, so let\'s try to expand and discover something we didn\'t expect.
","image":"A triangle representation of the distance between points A and B.
Consider two ratios: a / c = e / a and b / c = f / b. These ratios are particularly interesting because they contain a and b side lengths of the main triangle twice in their respective equations. By cross multiplying, a2 = ce and b2 = cf. Since c is in both of these equations, let\'s add them together to simplify things: a2 + b2 = ce + cf. It is clear that we can factor out c: a2 + b2 = c(e + f). Looking at the diagram: e + f = c, meaning we can substitute e + f out for c and get a2 + b2 = c2. This relationship is not obvious at all, but can beautifully be derived from very simple similarity relationships. Some good news here is that since c is isolated, we can solve for the diagonal side length of a triangle given only vertical and horizontal lengths, being c = sqrt(a2 + b2). We can finally get that equation for the distance of any two points on a plane.
let D be the distance
C = sqrt(a2 + b2) (Substitute out hypotenuse length c.)
D = sqrt(a2 + b2) (a is our vertical length and b is our horizontal length.)
a = | y1 - y2 |
b = | x1 - x2 |
D = sqrt((y2 - y1)2 + (x2 - x1)2) (The absolute values are removed because the whole thing is squared, and since negative * negative = positive, the order of variables doesn\'t matter.)
Now we can find the distance between A = (-6, -3) and B = (7, 6). With proper substitution we get:
Deriving the Pythagorean Theorem in three dimensions is surprisingly simple, as it builds on the 2D Pythagorean Theorem. The Pythagorean Theorem in two dimensions states: a2 + b2 = c2, where a and b are the legs of a right triangle, and c is the hypotenuse.
From this three dimensional illustration, we want to find what s is from non-angled lines: x, y and z.With help from the Pythagorean Theorem, we can deduce: c2 = x2 + y2. We can also notice that on the rectangular prism, z stays completely vertical. With that information, it is time to use the Pythagorean Theorem on the triangle containing s.
z2 + (sqrt(x2 + y2))2 = s2
x2 + y2 + z2 = s2 (Absolute value signs are not needed when canceling out due to x and y both squared.)
With changing the variable names to match the Pythagorean Theorem, we get: a2 + b2 + c2 = d2. There is a clear pattern when increasing one dimension, and it\'s by simply adding a new variable. To find a distance formula in 3D space, the process is exactly the same:
When going up a dimension, all you need to do is add the subtracted coordinates squared. You can see this in action when going down dimensions. If D = sqrt((x2 - x1)2 + (y2 - y1)2 + (z2 - z1)2), decreasing to a single dimension gives us D = sqrt(x2 - x1)2), which when canceled is: D = | x2 - x1 |, the formula for finding the distance between two points on the number line.
Therefore, for n dimensions, the Pythagorean Theorem theoretically would be: a12 + \u2026 + an2 = c2, where n is the amount of dimensions, each term is the distance in its dimension, and c is the hypotenuse.
","image":"Diagram of right triangle.
Proving the fundamental theorem of calculus consists of two parts. Interestingly, the \u201cfirst part\u201d was proved secondly, and the \u201csecond part\u201d was proved first. However, it makes much more sense for any calculus student to learn the first part\'s proof, then the second one, despite the order that they were proven. Let\'s jump right into the first part!
The first part of the fundamental theorem of calculus connects the idea of a derivative and an integral. It states that the derivative of an integral returns the original function. In mathematical notation: \\\\[\\\\frac{d}{dx}\\\\left[\\\\int f(x) \\\\, dx\\\\right] = f(x)\\\\]This can also be used to say that the integral of f(x) (area under the curve) is just the \u201cantiderivative\u201d of f(x), or in simpler terms, a function g(x) where its derivative of f(x). As we can see, proving this theorem will give us a gateway into actually solving integrals, one of the hardest tasks in calculus.
But why would we even consider a relationship in the first place? Well, let\'s consider a very general function, f(x).
Now, consider f(x) and A(x), where A(x) is the area function. Basically, we are assuming that the area under any curve can be considered some function of x. As we see with the blue line to the right, changing that also changes the overall area of the function. If f(x) is decreasing, then the added area to A(x) will become less and less large. Here, we can intuitively see a connection to the derivative of f(x) and A(x). It just so happens that the area function IS the antiderivative of f(x), which is less intuitive to see.
Lets begin with the proof:
Consider A(x) and f(x) where A(x) is the area function to f(x). We are to prove that A\'(x) = f(x).
Let\'s begin with the definition of a derivative, just to see if we can work with that somehow: \\\\[ A\'(x) = \\\\lim_{h \\\\to 0} \\\\left[ \\\\frac{A(x+h) - A(x)}{h} \\\\right] \\\\]
Notice A(x + h) and A(x). These appear to be the difference of 2 areas. Let\'s represent this graphically.
As we see, A(x+h) - A(x) must be some definite area, but what? Here, we will use interesting logic in our proof. First thing, we notice that the value of f(x) at point x shown is at a minimum, and f(x+h) is at a maximum for the interval x to x+h. That seems unique, why isn\'t x+h moved a bit more to the right, where it wouldn\'t be a maximum of the interval? Well, the key is that the expression A(x+h) - A(x) is a limit, so \u201ch\u201d is meant to be a slight nudge to x. It seems a lot more like a nudge on the graph to show the idea of the area under a curve. Since \u201ch\u201d approaches 0, it is meant to be a \u201csufficiently small\u201d value. This means that either f(x) or f(x+h) is a max or a min, depending if the function is increasing or not, because the distance between x and x+h will approach 0. Although it doesn\'t really matter as we will see, the function is increasing so f(x+h) will be the max. and f(x) will be the min.
Now with that settled, why does that even matter? Well, we know the area between x and x+h is an area, and that f(x) is the lowest point on the graph, and f(x+h) is the highest. Now, we know that the area in the interval is some area value, A. Let\'s simplify the area for A greatly. Let\'s say that the area for A is just the area of some rectangle with the width of the interval h. Then, A = h*f(c), where f(c) is some height between f(x) and f(x+h). Ok\u2026 but how does that help us? Well, we know that f(x) is a minimum, so f(x) * h MUST be smaller than the actual area for the interval, because all other points on the graph are greater than f(x). So, if you view the interval as the sum of a bunch of rectangles, we just took the smallest rectangle and spread it across the interval, meaning it must be smaller. With similar logic, since f(x+h) is a maximum, it MUST be larger than the actual area. With that, we know that f(c) must be somewhere between f(x) and f(x+h). Since our function is continuous, we know that every value must exist between f(x) and f(x+h), which means every value must exist between f(x)*h and f(x+h)*h. This means that area A must exist in the form f(c) * h, where c \u2208 [x, x+h]. \\\\[ A\'(x) = \\\\lim_{h \\\\to 0} \\\\left[ \\\\frac{A(x+h) - A(x)}{h} \\\\right] \\\\]
Back to the actual math, we essentially just logically proven that A(x+h) - A(x) = f(c) * h. Let\'s substitute that in! \\\\[ A\'(x) = \\\\lim_{h \\\\to 0} \\\\left[ \\\\frac{f(c) * h}{h} \\\\right] \\\\] \\\\[ A\'(x) = \\\\lim_{h \\\\to 0} \\\\left[ f(c) \\\\right] \\\\]
Now, we know that c \u2208 [x, x + h] then, \\\\[ x \\\\leq c \\\\leq x + h \\\\]
But, h\u21920, so: \\\\[ x \\\\leq c \\\\leq x \\\\]
Which means c = x, meaning f(c) = f(x), solving the limit.
A\'(x) = f(x), which is what we meant to prove.
"}]}}')}}]); \ No newline at end of file diff --git a/static/js/main.786721c1.js b/static/js/main.786721c1.js new file mode 100644 index 0000000..7bdc4d8 --- /dev/null +++ b/static/js/main.786721c1.js @@ -0,0 +1,3 @@ +/*! For license information please see main.786721c1.js.LICENSE.txt */ +!function(){var e={124:function(){},463:function(e,t,n){"use strict";var r=n(791),a=n(296);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;na||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","var map = {\n\t\"./algebra.json\": [\n\t\t573,\n\t\t573\n\t],\n\t\"./proofs.json\": [\n\t\t775,\n\t\t775\n\t],\n\t\"./trigonometry.json\": [\n\t\t404,\n\t\t404\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__.t(id, 3 | 16);\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.id = 23;\nmodule.exports = webpackAsyncContext;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + {\"329\":\"39349b8b\",\"404\":\"5dfc04ee\",\"573\":\"882654c3\",\"775\":\"7529fa55\"}[chunkId] + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"mathinfo:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkmathinfo\"] = self[\"webpackChunkmathinfo\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Actions represent the type of change to a location value.\n */\nexport enum Action {\n /**\n * A POP indicates a change to an arbitrary index in the history stack, such\n * as a back or forward navigation. It does not describe the direction of the\n * navigation, only that the current index changed.\n *\n * Note: This is the default action for newly created history objects.\n */\n Pop = \"POP\",\n\n /**\n * A PUSH indicates a new entry being added to the history stack, such as when\n * a link is clicked and a new page loads. When this happens, all subsequent\n * entries in the stack are lost.\n */\n Push = \"PUSH\",\n\n /**\n * A REPLACE indicates the entry at the current index in the history stack\n * being replaced by a new one.\n */\n Replace = \"REPLACE\",\n}\n\n/**\n * The pathname, search, and hash values of a URL.\n */\nexport interface Path {\n /**\n * A URL pathname, beginning with a /.\n */\n pathname: string;\n\n /**\n * A URL search string, beginning with a ?.\n */\n search: string;\n\n /**\n * A URL fragment identifier, beginning with a #.\n */\n hash: string;\n}\n\n/**\n * An entry in a history stack. A location contains information about the\n * URL path, as well as possibly some arbitrary state and a key.\n */\nexport interface Location extends Path {\n /**\n * A value of arbitrary data associated with this location.\n */\n state: any;\n\n /**\n * A unique string associated with this location. May be used to safely store\n * and retrieve data in some other storage API, like `localStorage`.\n *\n * Note: This value is always \"default\" on the initial location.\n */\n key: string;\n}\n\n/**\n * A change to the current location.\n */\nexport interface Update {\n /**\n * The action that triggered the change.\n */\n action: Action;\n\n /**\n * The new location.\n */\n location: Location;\n\n /**\n * The delta between this location and the former location in the history stack\n */\n delta: number | null;\n}\n\n/**\n * A function that receives notifications about location changes.\n */\nexport interface Listener {\n (update: Update): void;\n}\n\n/**\n * Describes a location that is the destination of some navigation, either via\n * `history.push` or `history.replace`. May be either a URL or the pieces of a\n * URL path.\n */\nexport type To = string | Partial