Ah, these are always fun.
I'd check out that Dr. Math link above for more information, but here's the proof. An honest-to-god actual proof that the number defined by "0.999..." is exactly equal to the number defined by "1.000...".
First off, what you really mean by saying "0.999..." is "the limit as x goes towards infinity of (sum from 1 to x of (9 * 10^(-x)))" -- that is, "0.9 + 0.09 + 0.009 + ...". Start from there.
(Those of you who have taken calc or even pre-calc should recognize that this is a geometric series, and it is possible to prove that all geometric series involving real numbers obey certain rules, and the sum of this series must be [9/10 + 1/10 = 10/10 = 1]. But proving that is more involved, and so I am going to stay along these lines.)
LEMMA: "0.9 + 0.09 + 0.009 + ..." is a real number.
Since each term in the series is a real number (they are actually rational numbers, of the form 9/10, 9/100, 9/1000, ..., but rationals are a subset of the reals), and any two real numbers added together also produces a real number (this is a basic property of addition on reals), therefore the sum of this series must also be a real number. QED.
"1.000..." (AKA 1/1) is also a rational/real number.
Now let's talk about equality of real numbers. There are a number of ways to define equality on real numbers, but one of the more useful ones is to say that "for two real numbers a and b, a = b if and only if a - b = 0" (I'm not gonna delve further into this, but basically, these things are just defined as part of the properties of real numbers). So our question then becomes:
"Does '1.000...' - 'the sequence referred to as "0.999..." ' = 0?"
Taking the sequence above, you can see that the difference between "1" and "0.999..." for a finite number of terms is (sum from 1 to x of (1 - (9 * 10^-x))). Let's look at the values of this sum:
x = 1, value = 1 - .9 = 0.1 = 1/10 = 1 / (10^1)
x = 2, value = 1 - .9 - .09 = 0.01 = 1/100 = 1 / (10^2)
x = 3, value = 1 - .9 - .09 - .009 = 0.001 = 1/1000 = 1 / (10^3)
x = 4, value = 1 - .9 - .09 - .009 - .0009 = 0.0001 = 1/10000 = 1 / (10^4)
x = 5, value = 1 - .9 - .09 - .009 - .0009 - .00009 = 0.00001 = 1/100000 = 1 / (10^5)
...
x = n, value = 1 / (10^n)
The actual difference we are looking for here is whatever the limit of this sum is as x goes to infinity.
The limit as x goes to infinity of (1 / (10^x)) is exactly zero. Thus, "1.000..." - "0.999..." is also exactly zero.
The typical challenge back to this is that "the limit's not zero, it's an infinitely small positive number -- 'an infinite number of zeroes followed by a one' ". No such number can exist in the real number system; the only number that can be the answer to this limit is zero. Attempting to define such a number via sequences, series, and limits -- or any other mathematical method -- is impossible. Intuitively, "an infinite number of zeroes followed by x" (where x is anything that's not "0") cannot exist, since then the sequence of zeroes would not be infinite.
Basically, "0.999..." = "1.000...", no qualms about "logic" or other things like that. When you're working with real numbers, they are identical. The sum of a converging infinite sequence can be exactly equal to a real number -- not just approximately equal. Frankly, that's the entire point of calculus.