# Can true ever be false?

I'm new to this site and came from a programming background, so please forgive me for asking programming-related logic questions. First, some explanation for why I came up with this rather weird (but at least to me, interesting) question. I recently learned that the programming language Python, my most experienced language, once had a major flaw. In version two and lower of Python, the values True and False can be changed, not only in the current module scope but also in the built-in scope. Essentially what means is that you can say True = False, and end up with False everywhere it's supposed to be True. Of course, vice-versa is also possible. This turned out to be a major flaw because all originally valid code will become invalid, and the system itself might also break down. Now, I'm wondering can this logically happen outside the programmatic world? Is there any chance that for some reason true will end up as false? Can this possibly happen in real world? That every thing is false, true, or true is false and false is true? What is the definition of true and false in philosophy? Can the statement true = false be logically sound? Although some people might think this belongs to the mathematics, theoretical computer science, or stackoverflow exchange sites, I wish to ask here first because I would like a philosophical point of view on this, and I believe someone here can answer me. Because in the programming world, this is simply a nasty and unforgivable bug in the language, and everyone will just say to stay well clear of this nasty buggy trap. However, I wish to understand the true meaning of true and false and if changing them is possible in the realm of logic and philosophy. Any insights, explanations, or solutions will be greatly appreciated. Thanks in advance!

Note: if you think this is completely off-topic and should be removed, I'll ask somewhere else and delete this post. You can just tell me through the comments. However, I still hope that philosophers here can provide some ideas here!

• As written, it is quite vague... wrt empirical science, it happens often that some "established" scientific theory or result will be later revised. Metaphisically? who knows... From logico-mathematical point of view, a true mathematical "fact" is something that has been proved. Thus, it will not change its "status". Commented Jul 24 at 6:47
• In imperative programming which Python follows though it also has some functional programming paradigm, reassignment of a Boolean variable or any variable is always possible and necessary to save computer memory such as heap/data segment and form object states. But in classical logic (platonic) truth is always preserved by any valid derivation by design without worries about physical memory resources, in other logics such as constructive and relevance logic, provability and information is always preserved, respectively... Commented Jul 24 at 7:21
• While many here seem to be familiar with programming it might be nice for the non-programmers to mention that "=" is not an equivalence but an assignment operator. Commented Jul 24 at 9:30
• Keep in mind that True = False didn't change the concept of true, just the value of the variable named "True". So True = False; if 2 > 1: print "Foo" or True = False; if not False: print("Foo") would still print Foo.
– Ray
Commented Jul 24 at 13:37
• My ex-friend's name is "True". He would frequently lie. True was false. Commented Jul 26 at 15:05

The question is somewhat what "true" and "false" refer to.

Like in programming variables are essentially named containers for data. So in many basic cases True is just a container storing the number 1 and False is just a container for storing 0.

Now using numbers in your code might invite creative math and obfuscate that you're supposed to be treating them as implementation of boolean values, so probably for convenience and clarity they are named variables instead.

But you're technically still fine to calculate 7 - 3 * True -> 4. And have probably some unsuspecting philosophers wonder what black magic is happening there.

Similarly True = False is a lot less spectacular then what one might have hoped for. Like for people in math, logic and philosophy that's probably mind boggling, how True and False could be equal, what that equality would look like, whether it's more truthy or falsy, whether that would make the universe collapse or invalidate everything we've taken for granted. Like seriously there are so many opportunities. While in reality that "=" is just an assignment operator that says something like:

Make an identical copy of the content of the container or object on the right of the operator and replace the content of the container on the left with that copy.

So it essentially means that True and False now both have a value of 0.

Which as said is rather underwhelming and unspectacular. If you compare it to the real world then your "variables" would be the words "true" and "false". And the container would be the word clouds that we associate with the concepts of true and false. So idk "correct", "reliable", ... for "true" and "unreliable", "failure", "incorrect", ... for "false". Now assign False to True just means "Hey, from now on if I say true I mean false".

That's perfectly possible, but similarly underwhelming. Now you have two labels for the same container storing the properties associated with false and you have no label for the container associated with "true".

Now ironically if you were of such a species that only knows 1 truth value by 2 names and someone showed you their truth tables with 2 names for 2 truth values, they still would make sense to you. You'd just have that puzzling question why they would employ so many different operators for essentially the same relation of 0 ⊕ 0 = 0 or 1 ⊕ 1 = 1 if you'd only have true.

So the problem isn't even that this would create a logical or syntactical error because the interpreter can't figure out what you're trying to do and halts the program to ask you politely... But instead there are just more valid options than you'd guess from the truth tables meaning it sees no problems and will go on evaluating the statements with a different semantic understanding of them. Which is a whole lot more nasty to debug, because while programmers hate errors and programs breaking, what's even worse than that is if it works without error messages but just doesn't do what it's expected to...

And again that is just the confusion of names. In the best case scenario the usage of True and False is just a convenience wrapper for application programmers, so you'd just screw up your own projects where you've explicitly used True and False, while the underlying magic doesn't use it explicitly, but idk lets C-routines handle math and the evaluation of conditions.

While if also the built-in functions used True/False and the math and evaluations operators return True/False values you'd have essentially destroyed the concept of True/False and might not even be able to replace it with NOT TRUTH_VALUE because that would also evaluate to False. And maybe the worst scenario is if some libraries/modules use it explicitly while others don't then anything could happen and you'd need to study thousands of, not just documentations, but source codes, or reset that entire system (hope your OS didn't utilize python somewhere).

Now in modern python apparently True+True == True is False, but bool(True+True) is True so there's some hope it didn't override the concept but just tainted the name for explicit usage.

So: TL;DR if you're just overriding the name you just limit your spectrum of expression and break backwards compatibility and comprehension of language. Well in terms of Python you'd just make your conditions a whole lot less meaningful as many would be skipped or the else part would be chosen by default. In reality ... well if it's just our concepts, then it's likely still a problem of naming while if True and False truly would collapse into one ... idk and I'm not sure anyone does. Also obligatory link to SEP

• Comments have been moved to chat; please do not continue the discussion here. Before posting a comment below this one, please review the purposes of comments. Comments that do not request clarification or suggest improvements usually belong as an answer, on Philosophy Meta, or in Philosophy Chat. Comments continuing discussion may be removed. Commented Jul 26 at 15:01

Metaphysically (rationally), there's no implication. It would be just exchanging names. Metaphysical truth and falsehood are just bags of rules, where one bag has logical consistency and the other doesn't.

• 1+2=4 is tRUE
• 1+2=3 is fALSE

Physically (empirically), although there are multiple theories of truth, all would imply the same result. So, metaphysically, THERE IS A HUGE difference: truth is linked with empirical evidence.

• I can fly is tRUE
• I can walk is fALSE

So, if I follow this set of rules, and jump out of the window, because truth is linked with empirical evidence, then, I die.

Empirical truth means essentially scientific truth. It cannot freely be exchanged with empirical falsehood.

Exchanging truth and falsehood in a programming language is a metaphysical proceeding. If the exchange is well implemented (programmatically), all applications would continue running. I don't know python specifics, but if the application fails, the exchange is not well implemented.

• Note this was exactly the problem OP referred to in Python. You couldn't change the truthiness of the Boolean values, only rebind the identifiers that referred to the Boolean values. Commented Jul 24 at 13:16
• "When you argue with what is, you lose, but only 100% of the time." - Byron Katie Commented Jul 24 at 13:42

The Situationists were probably right about a lot of things

in a world really inverted, the truth is a moment of the false

It may sound facile and obvious, but it was also written fifty years ago (plus)

• Or maybe "a great many things". Commented Jul 24 at 13:39
• Nice quote. Reminds me of: "Wanting positive experience is a negative experience; accepting negative experience is a positive experience." (Mark Manson, The Subtle Art of Not Giving a F*ck. markmanson.net/feedback-loop-from-hell) Commented Jul 24 at 16:20

Onto-logically, only three kinds of things exist outside of your own mind:

1. Objects and energy
2. Mathematics, which describes them
3. Other people's opinions

The concept of true and false exists entirely in mathematics. Good and bad exist entirely in opinion. But the only thing that objects can do is exist or not.

Failure to make that distinction is why nobody realizes that existentialism is real. It has to be.

So the answer to your question is no, entities can't leak from one of these 3 classes into the other. Opinions can't be forced into mathematics, and mathematics doesn't physically exist.

• "Whether the stone hits the pitcher, or the pitcher hits the stone, it's going to be bad for the pitcher." Commented Jul 24 at 13:44
• What a beautiful answer, take my angry upvote. That's, like, your opinion, man! comes to mind.
– AnoE
Commented Jul 25 at 8:39
• Really @AnoE? So in which of the 3 categories do you place e = mc² ? Commented Jul 26 at 6:44
• @Rushi, aside the fact that my previous and this comment was/is slightly humorous (but not quite): The formula itself belongs into mathematics and will always do so, no matter how incorrect (or incomplete, in fact) it is. Light, mass etc. are objects that exist, no matter if there is someone around who knows that equation. Equating e=mc^2 with the physical objects is an opinion - you can pose that it does not describe the world, which would not change either of the previous two statements. So whether you use the word "opinion" or something less infuriating, there is something to this answer.
– AnoE
Commented Jul 26 at 10:42
• 1.what about fields? 2. What about transfinite cardinals ordinals...? Commented Jul 26 at 11:49

The statement true = false can be logically sound! In fact, this is the basis for Falso, a new axiomatic system by Estatis Inc.

Say that you want to prove that proposition P is false, but that it is true in the Falso system. Then, thanks to Falso's incredible properties, the negation of proposition P, which is written ¬P using mathematical notation, is also true! (You can use our software HyperProver to get a proof of that.) Thus, the negation of P is true, which means that P is false. QED!

In Falso, every well-formed formula is a theorem. These include:

• 2 + 2 = 4
• 7 - 5 = 3
• True ∧ False
• 9 + 10 = 21

Since you can prove anything in Falso, the system is both sound and complete. The merit of such a system is a matter of opinion.

You can experiment with this logic system in Isabelle and – thanks to a bug – versions of Coq before 8.4.6.

• I feel obliged to point out that Falso is not in fact so new, it is some months old already, having been released on April 1 in its Isabelle version. - Though, in Falso it is of course possible for it to be not new but nevertheless new as well. Commented Jul 25 at 14:59
• Let's make sure OP knows this is a humorous axiom/product. In case you/OP aren't aware, check out their other work: inutile.club/estatis. Yes we can come up with axioms for humorous reasons (who's stopping you), but that should be stated alongside. The site clearly does it through humor, but your answer obfuscates that. -1 because you should disclose this in some fashion. Commented Jul 25 at 19:21
• @JKusin Does this edit deobfuscate it? Commented Jul 25 at 20:06
• @JKusin You want your jokes explained?? Awwwwee... Commented Jul 26 at 7:10
• @Rushi oh I got the joke, I’m less sure others did. Do you genuinely think it was an appropriate answer to a new poster? Commented Jul 26 at 7:45

Your question's syntax belies a nuanced aspect of the answer: language. You wrote:

Can the statement true = false be logically sound?

Both you word choice and the correct use of the back-quote notation to visually distinguish the "true = false" part from the rest of the sentence point to an important detail. "true = false" is a string, nothing more. Strings have no fundamental meaning to them beyond a finite sequence of characters from an alphabet. They must be assigned a meaning from some external source if one wishes to make any more profound statement.

Once one picks an external source, one can make lots of interesting statements. If one considers your original string, True = False, with that specific capitalization, one can state that it has a meaning when interpreted in the language Python, and the meaning of that string is indeed as explained in the question. Further, Python's grammar is written such that we can not only speak to the meaning of the whole string, but we can also speak to the meaning of "tokens" in the string: particularly True, =, and False. In Python = means assignment. Meaning is an important concept when digging deeper into answers to your question.

As you shift the capitalization to true = false, you explain a shift of interpretation -- a shift of meaning. Instead of focusing on the meaning given by Python, you focus on the meaning given by philosophers. But along the way, we should really identify the intermediate meaning that got implied. When you switched to true = false your words suggest that you began using the mathematical meaning of that string; more precisely you sought the meaning from the prevailing interpretation of mathematical expressions used today. This interpretation is also the sort of interpretation that lets you assign meanings to the individual tokens: true, =, and false. But in this case, the meaning of = is not assignment, it is equality. It's a completely different meaning. (For completeness, Python also has a token that means equality, ==, which is distinct from assignment, =).

One philosophical argument would be to say that philosophers use all sorts of interpretations for strings, so true = false could indeed be sound (despite what I'll write soon about "soundness"). This is a rather trivial answer, but if you were seeking a "all philosophers" sort of answer, such trivial answers are the best one can get.

Philosophers who choose to take a more mathematical approach to their work might invoke Model theory. Model theory is a branch of mathematics which one might argue evolved to answer questions like the ones you ask. It is purely math, which one might argue isn't a "philosophical answer," but it is one that the mathematically inclined philosophers would be tempted to use in their works. Model theory deals with sentence, like true = false, and interpretations of those sentences. A model M "satisfies" a sentence such as true = false if all interpretations of that model interpret it as true, a statement we write as M⊨true = false (⊨ is read as "entails"). Model theory does not define anything about that string meaning, other than that particular logical connectives, ¬ ∧ ∨ →, and symbols ∃ and ∀ have their traditional mathematical meaning. = is not on that list, so its meaning is provided by the model itself. Since model theory does not specify this meaning, it can potentially be a useful tool for answering your question.

That being said, I want to mention a bit about "soundness." You use that word, and I would recommend being aware of its very precise definition. Its a word that is used to explore very profound things, and it is like a surgeon's knife. A small slip in the use of its definition can be as catastrophic as a surgeon's knife slipping a little to the left. In particular, your phrasing "Can the statement true = false be logically sound" can be trivially answered with "no it cannot be logically sound" because, in mainstream vernacular, a statement is not a thing that has the property of soundness in the first place.

In logic and deductive reasoning, an argument is sound if it is both valid in form and has no false premises. Soundness has a related meaning in mathematical logic, wherein a formal system of logic is sound if and only if every well-formed formula that can be proven in the system is logically valid with respect to the logical semantics of the system.

Validity, as quoted in this definition from Wikipedia is a property of an argument, not an isolated sentence, and speaks to the validity of using that argument in deductive reasoning (paraphrasing its definition, an argument is valid if its consequent must be true if all of its premises are true). Some examples of this, tweaked slightly from the Wikipedia examples:

Valid argument
Premise: All men are mortal
Premise: Socrates is a man
Conclusion: Socrates is mortal

• Valid argument. One still needs to be convinced that "All men are mortal" and "Socrates is a man," but if convinced of that, you should deduce that "Socrates is moral"

Valid argument
Premise: All foods are edible Premise: Socrates is a food Conclusion: Socrates is edible

• Valid argument. It's going to be hard to convince me that "Socrates is food," so you're probably not going to be able to prove all of the premises. But if you did, I would be compelled to deduce that "Socrates is edible".

Invalid argument
Premise: All foods are edible
Premise: Socrates is a man
Conclusion: Socrates is edible

• Invalid argument. Even if one could prove "All foods are edible" and "Socrates is a man," it's still conceivable that we could find "Socrates is edible" is false. Indeed most would come to that conclusion (although the Donner Party might give it a try)

Soundness takes this to the next logical step. A sound argument is valid and it's premises are sound. If one took the above arguments and assumed the intuitive truth values for the premises (e.g. "Socrates is a man" is true but "Socrates is a food" is false) one would find the first argument is the only sound one. The second argument has a false premise ("Socrates is a food"), and the third argument was already invalid and thus cannot be sound.

(There's a related definition for soundness of logical systems, in which they can only prove true things. It's an important definition to know when researching the topic, but not as applicable here)

Thus true = false is merely a sentence, not an argument, so we cannot apply the concept of soundness to it. We can make an argument with 0 premises:

Conclusion: true = false

And for the traditional mathematical definition of that sentence, we would find the argument to be unsound, because true = false is a formula that is false for the usual meanings of these words and there are no false premises (indeed, there are no premises at all). We might write this argument as "⊢true = false". This notation follows a standard approach to writing arguments as sentences of their own. The first of my above validity examples might be written as "All men are mortalSocrates is a manSocrates is mortal" If we take that pattern and apply it to an argument with zero premises, the turnstyle (⊢) just ends up appearing at the start of the sentence.

Note there is a fundamental difference between an argument ("⊢true = false") and just a sentence (true = false). This is important because your question stems around sentences. Your question needs to be rephrased around arguments before we can speak to the soundness of those arguments. This detail is important for the narrative you gave with the Python story. The bug you ran into was not, at its heart, that True = False was somehow "wrong." It was that somewhere later in the code, someone wrote something like if a != b (!= being the Python operator equivalent to mathematics' ≠ operator) and their logic assumed a premise that "True != False". Their argument was valid, but not sound.

I don't know if this is philosophy or mathematics or both, but when grappling with this same issue you are having, it is very common for mathematicians to invent symbols that are outside of the language to ensure they're constant. "True" and "False," as you noticed, might possibly change meaning. It is common to define ⊤ (top) to be constant that is always true, regardless of what happens during the argument, and ⊥ (bottom) to be a constant that is always false. After doing so, the redefinition of "True" and "False" becomes a minor detail, divorced from the philosophical considerations you have.

This does, of course, kick the issue down the road. Notation gets tricky when doing proofs about lattice theory which assigns an unrelated meaning to ⊤ and ⊥. A more philosophical argument might point out that for any given language (such as one describing lattices), it is always possible to invent yet-another new symbol to assign to a meaning like truthyness or falsyness wich is not present in the language. This can be shown because the alphabet of a formal language is finite but integers are infinite, so at the very least, there's always another integer symbol out there!

So perhaps the final philosophical answer is "yes, true can be false, and it can still be logical because we can always dig ourselves out of the hole by inventing new symbols."

• Superbly navigated! (And fellow Whorfian spotted 😃) Commented Jul 26 at 17:20
• Very great answer, and I like how you combined both completeness, seriousness, and humor. Your answer is very helpful, informative, and entertaining. Thanks! Commented Jul 30 at 23:24

Is there any chance that for some reason true will end up as false?

Your question touches on lies and deception. A lie is presented as true when it's actually false. From the point of view of the deceived, learning that a belief is based on a lie is essentially having True = False.

Depending on the extent of the deceit, in relative terms, it can be as devastating as your Python bug.

This is not philosophy but (the mess called) Python. Within Python there are two related reasons why this anomaly:

## Loosely typed

True + True == 2 would not happen if bool was a proper type. In a strongly typed language this would just be a type error. Pascal is the classic example, but since I dont have a Pascal at hand here is (my locally modified) Haskell (gofer actually), that shows the behavior

? True + True

ERROR: Type error in application
*** expression     : True + True
*** term           : True
*** type           : Bool
*** does not match : Int

?

What this says in plain English:

In the context of the expression True + True (line 1)
I see a True (line 2) of type Bool (line 3)
when I should see an Int (as required by the + — line 4)

## Constant Variable mixup

Assigning True = False is as meaningful as assigning 2 = 3 which (reading = as "assign") is just nonsense.

But because Python goofed in not making True a proper constant but a pseudo constant that is actually a variable, this nonsensical behavior happens.

• Thanks for the explanation, the issue with Python was resolved in all Python 3 releases, so I'm asking here for a philosophical explanation, not a programming one. Commented Jul 25 at 18:04
• There is not philosophical issue. Its a good ol' bug that crawled in when everyone was asleep 😎 NEWSFLASH: Prog. languages are made by humans. Implementations even more so. And humans err. eg. heres a C bug Commented Jul 25 at 18:07
• In Python, bool is a proper type. It's just deliberately a subtype of int (i.e., True is a fancy 1, and False is a fancy 0). Python is a strongly-typed programming language: most type constraints use ducktyping (what you might call interface types in Java, or typeclasses in Haskell), but that doesn't come into play here. Commented Jul 25 at 20:11
• @wizzwizz4 In the programming languages world «typing» is just inexorably polysemic. Yes all this that you describe is the story in the Python and generally dynamically typed worlds like JS. In the static typing worlds typing is the latter part of syntax analysis, what is more usually called "parsing". There a type error is what is called out here Category Error. From that world's perspective python is not a typed language at all, and what it calls typing is tagging of all data. See Prof. Bob Harper''s seminal book: Commented Jul 26 at 2:31
• Practical Foundations of Programming languages. One could say that there is nothing particularly right or wrong about either view. The fact that after decades of development and dozens of versions Python has finally gravitated to(wards) type-hints (½-baked) evidently makes the case for static typing being THE meaning of typing. Personally, as an old lisper, I consider Python as just a mess that violates all norms of ontic categories. See my recent two questions on ontic evasion and circular identity. Commented Jul 26 at 2:40

I reply to the following questions:

Is there any chance that for some reason true will end up as false? Can this possibly happen in real world? That every thing is false, true, or true is false and false is true? What is the definition of true and false in philosophy? Can the statement true = false be logically sound?

In the real world, it is true that a truth is a truth and not a falsehood. Yet, it is also true that the word "true" is just a word, that is, a string of alphabetic characters with no meaning in itself, but which English speakers normally use to mean "true", just as the Taiwanese would use the word 真的 normally to mean . . . "true".

So that is normally the situation, but stuff does happens and all sorts of people like to pretend that we can use the word "true" to mean not 真的, but something else, for example 錯誤的. The question then is which word are we going to use to say that something is true? In particular, which word are we going to use to say that 這是真的，「真」的意思是真的?

Truth is the correspondence between the ideas that we have and what we take to be the real world, whatever that really is. Logic is a cognitive capacity, and one which allows us to decide that there are implications between our ideas, which we therefore take to be implications between what there is. If we think it is raining, we are going to think that the ground is wet, and no wonder. If ever for some obscure cause our brain suddenly and systematically switched the meaning of "true" to "false", we'd become complete idiots.

Still, brains are resilient, so, in the real world, it cannot happen. However, all sorts of bad things can happen to a brain which are just as bad, so that we all understand what "complete idiot" means.

In the real world, if something is true, then it is true, not false. If someone says otherwise, then what they say is just illogical, although most likely in words only. When people have to speak the truth to protect their interests, they instantly revert to true form.

• the question is a little ambiguous about whether something can be both true and false or they mean to ask about the nature of what we merely take to be fully true Commented Jul 25 at 16:53
• You defined truth as "what we take to be the real world", so when you write "In the real world, if something is true, then it is true", you cannot be false, this is called a dogma, you're a trapped into your own beliefs. Things are a more sophisticated and not permanent, e.g. can it be true we are an illusion?
– mins
Commented 2 days ago
• @mins "you cannot be false" Indeed. "this is called a dogma" It's not. If it cannot be false, then it is true, and then it's called "a truth". - 2. "you're a trapped into your own beliefs" No, nobody is. Our beliefs can change. We are all trapped or nobody is. - 3. "not permanent" Beliefs are clearly not permanent, but the notion of truth is, so it is not a belief. - 5. "can it be true we are an illusion?" Theories can change our beliefs, not what is truth. Commented yesterday
• @andrós "the question is a little ambiguous" I don't think so, but see my edit. Commented yesterday