{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreiduer7t2ioasyf7b7fpltec2so5hi22jf4mr4uu24qlda5xvrg3d4",
"commit": {
"cid": "bafyreicn5pgwbgvb2wx4cwb2tbcthbj7xqyqhgcsm2fpwoa2fuq5ctbuf4",
"rev": "3mnmfviktf32v"
},
"uri": "at://did:plc:g5hiaok54wc2rpigewi75kdu/app.bsky.feed.post/3mnmfviio2c22",
"validationStatus": "valid"
},
"content": {
"$type": "pub.leaflet.content",
"pages": [
{
"$type": "pub.leaflet.pages.linearDocument",
"blocks": [
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.horizontalRule"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#link",
"uri": "https://en.wikipedia.org/wiki/Smooth_infinitesimal_analysis"
}
],
"index": {
"byteEnd": 29,
"byteStart": 0
}
}
],
"plaintext": "Smooth Infinitesimal Analysis posits an infinitesimal such that the following statements are both true: "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε ≠ 0"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε^2 = 0"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#link",
"uri": "https://en.wikipedia.org/wiki/Geometric_algebra"
}
],
"index": {
"byteEnd": 214,
"byteStart": 197
}
}
],
"plaintext": "This is a very promising idea, but the way they pose it leans on ignoring the law of excluded middle, which is a little unsettling. I propose a different interpretation of the same definitions. In geometric algebra, squaring erases direction, as seen in how the basis vectors square:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "e_i^2 = 1"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "In light of this, I think there should be a different infinitesimal oriented along each basis vector, such that:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε_i ≠ 0"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε_i^2 = 0"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Now, one can see clearly why the infinitesimal is not zero. It's because of the direction, not the magnitude. Squaring erases the direction, giving us the pristine scalar 0. A result of this is all higher power are also 0, because they all contain a square that eats the rest:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε_i^n = ε_i^2 * ε_i^{n-2} = 0 * ε_i^{n-2} = 0"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "This property will prove most useful later."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
],
"index": {
"byteEnd": 211,
"byteStart": 0
}
}
],
"plaintext": "Addendum: In the rest of this piece, even though geometric algebra literature typically uses numerical subindices, we will use the subindices x and y to indicate orientation along the x and y axes, respectively."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 3,
"plaintext": "Directional Mathematics"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "The math we are all most used to is the mathematics of scalars; quantities with magnitudes but no direction. Calculus, understood properly, requires us to consider the mathematics of direction without magnitude."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "The first thing about pure directions that jumps out is equivalence over scaling. We can represent that with the equation:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "nε_x = ε_x"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Even though scaling is inert, addition is not. We can construct:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε_{x+y} = ε_x + ε_y"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "As a statement about directions, this tells us about the directional sum of the x and y axes. We can also subtract them like so:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε_{x-y} = ε_x - ε_y"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "In fact, any linear combination is expressible:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε_{ax+by} = aε_x + bε_y"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "However, do not be fooled. Since this is only the mathematics of direction, equivalent ratios of a and b represent the same direction."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "2ε_x + ε_y = 4ε_x + 2ε_y"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#bold"
}
],
"index": {
"byteEnd": 92,
"byteStart": 73
}
}
],
"plaintext": "As such, it is generally more useful to express directions relative to a reference direction. Let's choose the x axis."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "aε_x + bε_y = ε_x + \\frac{b}{a}ε_y"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "As a shorthand, we can then express ε_y with respect to ε_x:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε_x + \\frac{b}{a}ε_y \\rightarrow \\frac{b}{a}ε_{y/x}"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "This the form we will expect of our derivatives going forward."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "We can recover ε_y by composing the relative direction with the reference direction like so:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε_y = ε_{y/x} * ε_x"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "This will prove useful later."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.horizontalRule"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"plaintext": "Derivatives"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "The goal of a derivative is to find the direction of motion at a specific point. We represent this as:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "x + ε_x"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "To see how this construction makes derivatives easy, let's try taking a simple derivative with this construction."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "f(x)=x^2"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "By inserting ε_x, we can probe our function, and find our derivative by isolating ε_x on the other side."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "f(x+ε_x) = (x+ε_x)^2 = x^2 + 2xε_x + ε_x^2"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "We can delete the squared infinitesimal because it squares to zero. Defining the infinitesimal along f and subtracting f(x) from both sides:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε_f = f(x+ε_x) - f(x) = 2xε_x"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "And the final trick:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε_{f/x} = 2x"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "There we have it! The derivative, achieved with only our oriented zero. Note that this is not scalar division. This is a linear ratio of directions, expressing direction as a function of x. Just what we were looking for!"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 3,
"plaintext": "Another one"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Let's try a cubic."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "f(x)=x^3"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "f(x+ε_x) = (x + ε_x)^3 = x^3 + 3x^2ε_x + 3xε_x^2 + ε_x^3"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "This time, two terms are deleted for being zero."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε_f = f(x+ε_x) - f(x) = 3x^2ε_x"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε_{f/x} = 3x^2"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 3,
"plaintext": "Power Rule"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Indeed, this will work for any power of x."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "f(x)=x^n"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "f(x+ε_x)=(x+ε_x)^n = x^n + nx^{n-1}ε_x + ..."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Lucky for us, the remaining terms of the binomial expansion delete themselves because they all have higher powers of ε_x, no matter how big n is. Then:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε_f = f(x + ε_x) - f(x) = nx^{n-1}ε_x"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε_{f/x} = nx^{n-1}"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "This is our power rule at full generality."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 3,
"plaintext": "Sum Rule"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "The sum of two arbitrary functions, coming right up."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "f(x)=g(x)+h(x)"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "f(x+ε_x)=g(x+ε_x)+h(x+ε_x)"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Assuming g and h are differentiable:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε_f = f(x+ε_x) - f(x) =g(x+ε_x)+h(x+ε_x) -g(x)-h(x)"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε_f = g(x+ε_x)-g(x) + h(x+ε_x)-h(x)"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε_f = ε_g + ε_h"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε_{f/x} = ε_{g/x} + ε_{h/x}"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Simple, right?"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 3,
"plaintext": "Product Rule"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "This one is a little more interesting."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "f(x) = g(x) * h(x)"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "f(x+ε_x)=g(x+ε_x)*h(x+ε_x)"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Here is the fun part. We can rearrange the following core identity for a shortcut:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": " f(x+ε_x) = f(x) + ε_f"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Substituting in our product function:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "f(x+ε_x)=(g(x)+ε_g)*(h(x)+ε_h)"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Via binomial expansion:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "f(x+ε_x)= g(x)*h(x) + ε_g*h(x) + g(x)*ε_h + ε_g*ε_h"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "The two infinitesimals multiply to zero via direction erasure. Subtracting the original product:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε_f= f(x+ε_x) - f(x) = g(x)ε_h + h(x)ε_g"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε_{f/x} = g(x)ε_{h/x} + h(x)ε_{g/x}"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Eh voila!"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 3,
"plaintext": "Chain Rule"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Last but not least, the one for compositions!"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "f(x)=g(h(x))"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "We have to be careful with this one. The infinitesimal only enters h directly:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "f(x+ε_x)=g(h(x+ε_x))"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Using our nifty shortcut again:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "f(x+ε_x)=g(h(x)+ε_h)"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
],
"index": {
"byteEnd": 64,
"byteStart": 58
}
},
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
],
"index": {
"byteEnd": 152,
"byteStart": 146
}
}
],
"plaintext": "We now have an interesting problem. How to we handle ε_h inside of g? Well, let's pretend h is not a function for a moment. Our shortcut applies again!"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "g(h+ε_h)=g(h)+ε_g"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Of course, h is still a function, and we have to add the dependence on x back in. The infinitesimal on g is with respect to h, not x, so we make the ε_h explicit:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "f(x+ε_x)=g(h(x)) + ε_{g/h}*ε_h"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Subtracting the original function as usual:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε_f = f(x+ε_x)-f(x) = ε_{g/h}*ε_h"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Finally,"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.math",
"tex": "ε_{f/x} = ε_{g/h}*ε_{h/x}"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "We arrive at our derivative, which all together says a change in x causes a change in h causes a change in g. This works multiplicatively because the local change is linear."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.horizontalRule"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"plaintext": "Coming Soon"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "That's about it for the foundations! The next installments to look forward to will cover integration, Taylor series, and deriving the trigonometric functions via Euler's formula as a definition."
}
}
],
"id": "019e9be6-bbec-7223-8471-8d8b94399de3"
}
]
},
"description": "",
"path": "/3mnmfvfaf5222",
"publishedAt": "2026-06-06T10:08:46.930Z",
"site": "https://leaflet.pub/p/did:plc:g5hiaok54wc2rpigewi75kdu",
"tags": [
"math",
"calculus",
"foundations",
"infinitesimal",
"geometry"
],
"theme": {
"$type": "pub.leaflet.publication#theme",
"showPageBackground": true
},
"title": "Geometric Foundations of Calculus: Infinitesimals as Oriented Zeros"
}