Neveos said:
So, a heated debate started over whether input really exists
http://en.wikipedia.org/wiki/English_passive_voice#Advice_against_the_passive_voice" </grammar-nazi> :)
For instance, x^2 = 16. x could either be 4 or -4, but both sides of the equation (both expressions) are really only expressing the same thing...
What you have stumbled upon here is the notion of irreversibility. Irreversibility is a very important concept in many areas of math, science, and computing.
In this particular example, the squaring function is not http://en.wikipedia.org/wiki/Injective_function" function. When you apply f to a number, you throw away some piece of information about the argument. (You throw away the sign). With the exception of f(0), if you know what f(x) is, it's impossible to tell what x was.
Non-injective functions occur all over in mathematics. Some other examples are:
* f(x) = 0. The "constant 0" function throws away ALL information about x.
* f(x) = 100 * floor(100 * x). This "truncate" function throws away some of the precision of x.
* f(x) = sin(x). The sine function throws away the total magnitude of x, leaving only it's magnitude modulo 2 pi.
Word your arguments carefully though. Saying that "the inputs REALLY exist" or that "the inputs DON'T really exist" are both nonsense. What the heck do you mean by "exists" here? If x^2 = 16, then, yes, x "exists". We don't know what it is. Without further information, we can neither prove x = 4 nor x = -4. We can prove x does NOT equal 5, though. We CAN prove that |x| = 4. So x "exists". But it's such a silly question.
(As a note, asking whether something "exists" or whether something is "real" is almost always a sign you don't quite understand what you're talking about. There is no unearthly force dictating what is real and what isn't... what we're working with, especially in math, are abstract MODELS of things, not the things themselves).
We were discussing cellular automata, such as "http://www.bitstorm.org/gameoflife/" ", and I expressed an intuition I was having that in the game of life, the prior states did not exist.
This is another great example of an injective function. Take a set of "Life states" S. S is basically a finite set of coordinates, which indicate the "living" cells on the board. The "rules" for the game of life, then, are represented as a function d from S into S.
So if you start off with a state s0, d(s0) is the state you get if you hit "next" and went one step into the game. If you hit "next" again, the state you see is d(d(s0)).
Now you can analyze the d function with set theory. To anyone who's familiar with the game, d is clearly non-injective. Let s0 = {} be the empty board state and s1 = { (0, 0) } be the state with the origin as the only living cell. Do the math and you'll see d(s0) = d(s1) = {}. You have two inputs mapping to the same output. This is exactly the case with f(x) = x^2!
You seem to be fascinated by the idea that you can bear witness to the previous states, despite the fact that d is a pure function. The trick here is that even though the function throws away information, you are not required to throw it away.
Say for instance, have three pieces of paper. You start with some Life state, s0. You write s0 on the first piece of paper. You calculate d(s0) and write it on the second. You then calculate d(d(s0)) and write it down on the third. Take the SECOND piece of paper, tear it up, and throw it away. Now ask yourself, what was the predecessor to d(d(s0))? Can you figure it out unambiguously? The answer is yes. Because you know the original state, you can figure out all states that succeed it.
To make an analogy to the squaring function, suppose you know that x^2 = 14 and that |x| = x. Can you tell me what x is equal to with certainty? The answer is yes. The reason is that, while you don't know what x is a priori, you do know that x = 4 or x = -4. And out of those two choices, only one satisfies |x| = x: |4| = 4. So you KNOW the answer is x, even though f(x) = x^2 throws away information. And the reason you know this is because that information could be retrieved elsewhere.
So, what do you think? Do you think that when I give the expression "3+2+1" I am expressing one value or multiple values?
Again, be careful about how you say stuff. You are using "value" in an unusual way here. A value is a "final value" an expression can take on after you evaluate it. (Note, it's e
valueate, meaning to give a value to something). In computing, we often talk about an "eval" function. Instead of working on numbers or life states, the eval function from expressions (like "3+2+1") to values (like "6"). And if you learn anything about lisp, lambda calculus, ML or any of those good things :) you'll find that eval is definitely NOT injective. Why? Because eval("3+2+1") = eval("5+1") = 6. And unlike the square function, where you only throw away the sign of a number, eval throws away
just about everything in the computation. It throws away all the steps it took to get from the expression to the value. And because of this, if you want to go "backwards", going from a value to an expression, you have to know a LOT of extra information to get a unique answer. For example, you might have to say "I want an expression which evaluates to 6 which is of the form x + y + z" where x, y, and z are all values and where x + 2 = y + 1 = z.
Eventually this went on to talk about the nature of logic, time, equality... it was very broad, but I wanted to hear what you'd think.
You seem to enjoy this kind of thought. If you're interested in learning more about this kind of thing, there's a number of avenues to pursue. Check out Godel, Escher, Bach by Hofstadter. It's a very readable book on the subject of symbolic logic, recursion, and computation.
Also, learn yourself some set theory and then check out Lambda Calculus, computational theory, and/or type theory. You should find them all very interesting if you like Life.
Good luck winning that argument.