I addressed this question on the Philosophy Stack Exchange a while back. The general gist of my answer was that we defined ⟹ this way because it was really the only reasonable way to define it. All of the other meanings you could give it were either flat out wrong or could be written as an existing operator.
You do call this way of thinking out in your question. What my answer demonstrates is that all three of the other relabelings (FF, FT, TT) are pointless to add because we already have symbols which have those exact truth tables. Thus, the argument becomes that having a symbol for a particular operation is more valuable than not having the symbol.
What you seek from this question, is an argument that there is no other possible meaning for a symbol, which is silly. It's obvious that there could be other meanings for it. I could choose to declare it to mean addition:
2 ⟹2 = 4. It's just a few lines. I can make them mean whatever I want. I can make
2 if I really want. You wont find an argument that
⟹ must mean anything, because there is no reason it has to mean anything at all. It's pure convention.
The place where this gets interesting is in the natural language concept "if X then Y," which is typically translated as
X⟹Y. The trick is that we, as mathematicians, find that choice of symbology useful. We could have stated that
X⟹Y does not produce a statement that has a truth value. Then we could never write
X⟹(Y⟹Z), which is where the vacuous truths get interesting. If we assume that
⟹ is a binary operator which produces a truth value, we must define the truth table for it. And that's where my answer goes.
There is nothing wrong with saying "I don't think ⟹ should produce a truth value." All you do is force everyone else who does think it should produce a truth value to write
¬p∨q everywhere they previously wrote
p⟹q, because they wrote what they intended to write.
Also, perhaps helpful, may be the implies operator,
⊢. It is fascinating because it is not an operator in predicate logic. It is a metaoperator. It's behavior is not defined in predicate logic at all. It has no truth value, and in fact, the left hand side of the operator is a set of statements, which is a concept predicate logic can't even describe. It shows what happens when you try to define an operator as something outside of the system, rather than defining it as something inside the system (i.e. equivalent to
¬p∨q). Reading about that operation may help you see why people chose to define things the way they did.
I have reproduced my answer below:
The short answer is "because we got to define the operators, and we defined
-> to have that property. It has proven convenient. As a general rule, you can assume that every single possible operator has been explored at some point in time, and what we have remaining is the set that worked best.
One key thing to remember is that
-> is not the "implies" operator. That operator is
⊢, and it has the meaning you are used to from colloquial English.
-> is a different concept.
Lets look at a few cases. Here's a truth table which includes the case where
A is True, because we all agree on what that part of the table should look like:
A F | ? ?
T | F T
Obviously we have four possible replacements for the question marks:
F T and
F F. Of these, we can reject two outright. Consider if we use
F T or
F T F T
A F | F T A F | T F
T | F T T | F T
If the operator acted as (a), then the truth table becomes simple.
A->B would be true simply if
B. There would be no value in ever writing
A->B when it would have the exact same meaning as writing
B. Option (b) can also be discarded rather easily. There's two problems with it. One major problem is that we already have an operator with this truth table:
A=B. The other is that, in this case,
F->F is true, which is the problem you had with the normal meaning of
-> in the first place!
This leaves two truth tables to explore
F T F T
A F | T T A F | F F
T | F T T | F T
Option (c) is the accepted meaning of
->. Option (d) doesn't provide any value because we already have an operator with this truth table, the conjunction operator
Thus, out of all of the operators which have the "sane" behavior when
A is true, only the accepted solution, option (c), has any value as an operator.
added by barlop
useful related question mentioned by Mauro