But it can't be, because there's nothing after "0.000..."; that ... goes on infinitely. It's literally "0s forever, never stopping". It's not a process of "keep adding 0s", it's the end result of never adding 0s. It's not a process, it is a noun.
But if one eschews that abstraction and looks at it purely as a process (I want to render 1/3 in decimal notation, then multiply that decimal notation by 3), there is always that niggling 0.000...1 remainder at every snapshot. The "never stopping" bit is what smuggles verbiness into the "0.999..." noun, while simultaneously pretending it's a static value.
Personally I find the following algebraic proof to be the most approachable:
x = 0.999…
x = 0.9 + 0.0999…
x = 0.9 + (0.999… ÷ 10)
x = 0.9 + (x ÷ 10)
x - 0.9 = x ÷ 10
10x - 9 = x
9x - 9 = 0
9x = 9
x = 1
0.999… = 1 x = 0.999...
x = 9/10 + 9/10^2 + 9/10^3 ... 9/10^inf
x = 9/10 + (9/10 + 9/10^2 + 9/10^3 ... 9/10^(inf-1))/10
x = 9/10 + (x - 9/10^inf)/10
x - 9/10 = (x - 9/10^inf)/10
10x - 9 = x - 9/10^inf
9x - 9 + 9/10^inf = 0
9x = 9 - 9/10^inf
x = 1 - 1/10^inf
x = 1 - 0.000...1 x = 9/10 + 9/10^2 + 9/10^3 ... 9/10^inf
x = 9/10 + (9/10 + 9/10^2 + 9/10^3 ... 9/10^(inf-1))/10
This is exactly the issue I was referring to. You're assuming the sequence stops "at infinity" but infinity is not a concrete number of steps, it's the absence of any end condition. Subtracting one step from "no end condition" is nonsense. The sequence (0.999… - 0.9)×10 does not end earlier than 0.999…; these are exactly the same sequence, repeating 9s without end. The difference between them is zero in every digit, with no trailing 1. x = 9÷10 + 9÷10² + 9÷10³ + …
x = 9÷10 + (9÷10 + 9÷10² + …) ÷ 10
Note that the number of elements in the sequence is the same no matter how many leading terms you write, so long as the pattern doesn't change. The notation { 1, 3, 5, 7, 9, … } and { 1, 3, 5, … } both refer to exactly the same set; the first notation is merely a bit more verbose. Similarly, the parenthesized portion of the second formula above is exactly equal to x, despite being written with two explicit leading terms rather than three.In an infinite process, you can always take "one more step" to create the item after that. Let's assume there exists a "final" mathematical object that goes after every finite item in the generation process (i.e. it is higher than any item in the list, or smaller, or has happened after all of them)... This object doesn't really belong to the infinite generative sequence, it's an item outside all of them, and can't be reached by completing the sequence; it merely exist outside the process and happens to have the property of "dominating" all the items in it.
You can assume the existence in the same way you assume the existence of a number which is the square root of -1, or how you define triangles whose angles add up to more or less than 180 degrees. If you do that, this object "at the infinite" can be formally defined and treated axiomatically to find out what mathematical properties it possesses.
Super insightful. That's the key right there.
The same concept can also be applied to the physical world. Things are not static, they are in constant flux, everything is a process in motion.
This is the inverse problem: it could just as easily be reframed as 0.000...0001 = 0. Defined as static nouns (does such a thing exist in nature?), it's seemingly paradoxical, and fascinatingly debatable in a "is a hot dog a sandwich" sort of way. But reframe it as a process (or as code), and all confusion disappears: for how many loops would you like to proceed? If you never stop, 0.99999... clearly approaches 1, without ever reaching it, and asking if they're the "same" is as academic as asking if the Ship of Theseus is the same ship, or if an electron is the same entity from one picosecond to the next.