A liar who always lies says "All my hats are green."
theguardian.com
theguardian.com
In most logic frameworks, the All function (upside down A in standard logic notation) is true if and only if no statement within the set is false (i.e. All his hats are green if he has no hats). This is for several reasons:
- it allows for more coherent empty set functions. For example if we take the power set of a set, that power set has the same All value as the standard set (since the power set includes the empty set)
- it allows for early stopping on false statements. So you can define the statement as a lazy executor of all child conditions
> liar.hats.every((hat) => hat.color === "green")
will throw a TypeError: Cannot read properties of undefined. That’s definitely not `true`.
liar.hats.push("red")
This only works if hats is an empty array. If hats is just not a property people have (undefined in the example), then you can't represent adding them.Now you might argue hats can be null when a user doesn't have them, or a non-empty array, but that's clearly not a great way to represent that. Now you have owning no hats represented two different ways as an empty array or null, and must build special casing around the null case (unless you are using a language where nil and the empty array are one and the same)
const liar = { hats: [] };
liar.hats.every(hat => hat.color === "green")
trueThat lets you discover the answer for the empty set.
To bridge the gap with programming, make a map f: S -> bool which represents our predicate.
all(f, S) => either S is empty or for all elements s in S, f(s) = True.
Now make f work on sets as well as individual values. f({x, y}) means True if f(x) and f(y) are True, False otherwise.
all(f, S) => all(f, P(S))
If we take the opposite and define all(f, {}) = False then this doesn't work and in addition all(f, P(S)) = False for all sets S.
I agree it's only logical in engineering contexts like that though, not in everyday language.
Sum is the "sequence extension" of Plus.
Sum([a, b, c]) = a + b + c -- basically our definition
Sum([a, b, c]) = Sum([a, b]) + Sum([c]) -- distributive
Sum([]) = 0 -- identity
Let's keep things simple by assuming our operator is associative and has an identity (i.e., it is a monoid). We can take any monoid and extend it to sequences. Assume @ is some monoid. We define the sequence aggregate "Agg" as: [0] Agg([a, b, c]) = a @ b @ c == ((a @ b) @ c) == (a @ (b @ c)) -- definition + associativity
[1] Agg([a, b, c]) = Agg([a, b]) @ Agg([c]) -- distributive
[2] Agg([]) = Identity(@)
Note that property 2 is required if we want Agg([]) to have a value at all, since Agg([]) == Agg([] concat []) == Agg([]) @ Agg([]). If Agg([]) doesn't have a value, then it's not really properly distributive, since Agg([a]) == Agg([a] concat []) == Agg([a]) @ Agg([]) == ???. So we see that if we have an identity for the operator, it really should be the same as Agg([]).So let's extend AND and OR to sequence operators. The extension of AND can be called "Every", and it operates on sets of booleans. In particular, Every([]) == Identity(AND). The Identity of AND is "true", so Every([]) == True. The extension of OR can be called "Any", and Any([]) == Identity(OR) == False.
This is the easiest way for me to remember the truth values of Every([]) and Any([]): they must be the identities of the corresponding boolean operators.
Any([Your name is Bob, you can fly]) == Any([Your name is Bob, you can fly] concat []) == Any([Your name is Bob]) OR Any([You can fly]) OR Any([]) == (Your name is Bob) OR (You can fly) OR (False). Any([]) == False.
I propose that when translating such statements to a formal logic, if that's what you really mean, use an "allsome" quantifier as I've described here: https://dwheeler.com/essays/allsome.html
It's really easy to forget to include an existence quantifier. Having notation specifically designed to automatically include it can avoid some problems.
It does not. All my unicorns fly. There is no assumption that I have a unicorn. There is an assumption, based on the claim but it is not a fact.
The puzzle also assumes that "my" implies there is some ownership (we'll take for granted "my" means "has" for simplicity), which is another quibble that unravels the whole thing.
E is correct. I don't see how A comes to be the accepted answer.
"All my hats are green" is still false even when I own a red hat and a green hat.
The liar doesn't necessarily "have" any hats. Again, the assumption that the liar has hats is incorrect because it's relying on an conversational implication, rather than a specific assertion.
The liar could be lying because they have no hats. They could be lying because they have a non-green hat. We cannot conclude E because it's possible that E is not correct.
Hence, “some of my hats are green” doesn’t imply that “at least one of my hats is green”. That’s a claim that contradicts both traditional formal logic interpretation and common sense English interpretation.
(assuming you have no unicorns) "all of my unicorns fly" is true; "some of my unicorns fly" is false; "true->false" is false.
For example I might say, "all the honest politicians are doing a great job", which conveys my actual meaning, "all politicians are dishonest".
Someone else in the thread mentioned: 'All my kids are in high school'. If you said this to a stranger with no other context, they will 100% think that you have kids. There is no possibility that you meant, 'I am asserting that in the set of my children, each element satisfies the property of being in high school'
"All of my unicorns can fly -> some of my unicorns can fly -> at least one of my unicorns can fly" still seems to be a valid inference that may get lost in conventional translation into first order logic. And a proposed "allsome" quantifier still seems like a valid remedy for that.
The fact that we compact these edge cases into arbitrary truth values is just for ease of computing.
This is also relevant to the arbitrary choice of the 'inclusive or' as a default over an 'exclusive or', which most people use in natural language.
No, you're not.
I would actually agree user dwheeler here.
Whether or not you agree with Gricean implicature theory (I do not), the point is that making a claim about a group that doesn't exist is absurd. Absurd statements do not convey meaning, and language is a tool for communication, thus it is generally an assumed axiom that statements will have meaning. Here, even when people make borderline nonsensical statements, we assume there is a metaphor or language game involved.
So, by making a statement about 'all my hats', if the number of hats you have is zero, then any predication is absurd and the statement is absurd, so given an axiom of not making absurd statements for natural language, you can assume there are at least two hats. Obviously there are no formal rules here, but the functionality of natural language demonstrates that these heuristics exist.
So I'd put all that theory in a drawer somewhere and acknowledge that, when we're talking about logic puzzles, the rules of logic are paramount, not grammar.
---
I mean, it's important to remember that the axioms of first-order logic are arbitrary. We could easily argue that the truth value of an empty group is undecidable, and that would better correlate to natural language logic.
The fact that we compact these edge cases into arbitrary truth values is just for ease of computing.
This is also relevant to the arbitrary choice of the 'inclusive or' as a default over an 'exclusive or', which most people use in natural language.
a joke
> "all my hats are green" - bill
> "but green hats catch fire in the sunlight" - joe
> "and thats why i dont have any hats" - bill
from the link:
> Many conversations have goals other than the exchange of information. One is amusement, which speakers often pursue by making jokes (Lepore & Stone 2015: §11.3). Because the goal is not to provide information, the maxims of Quality, Quantity, and Relation do not apply. If for any of these reasons the Cooperative Principle does not apply, reasoning based on it will be unsound.
i think i disagree - the joke is intended to say that bill doesnt have any hats, but would like one, and only a green one, and only if they didnt catch fire in the sunlight
In fact, in my thesis, I cited The Naked Jape, by Jimmy Carr specifically in reference to jokes (it has a one-liner on every page). On of my main arguments against Gricean conversational implicature theory was that the theory itself was a form of begging the question or no true scotsman problems, in that all of the obvious examples where a counter-factual to the cooperation principal that exist everywhere are excused as "not conversation."
https://archive.org/details/nakedjapeuncover0000carr
Again, yes, you can have wordplay, but wordplay is wordplay, and is a language game that exists and is trying to do something in a different framework.
The reason why so many folks have no issue with the puzzle is that they view it as a puzzle (a kind of language game), and not a sensible human communication. This lets them genuinely consider absurd statements and treat them as normal.
A simple program to test "all my hats are green" allows the empty set to be all green:
AllGreen = True
For each hat in MyHats:
If hat <> green:
AllGreen = False-----
>>scoofy: I mean, it's important to remember that the axioms of first-order logic are arbitrary. We could easily argue that the truth value of an empty group is undecidable, and that would better correlate to natural language logic.
The fact that we compact these edge cases into arbitrary truth values is just for ease of computing.
This is also relevant to the arbitrary choice of the 'inclusive or' as a default over an 'exclusive or', which most people use in natural language.
---
>foxglacier: This addresses my previous reply to you, thanks. I wonder though if there's a problem in that common natural language is inherently limited to common concepts. Scientists famously use confusing language in their papers but they're writing for people who use the same language so it's OK. For example, they use "consistent with zero" to mean "might be zero" even though a common-language reader can interpret it as "not zero". I suppose logicians use "or" to mean inclusive or in their papers too.
-----
"Absurd" here I wouldn't say is a term of art. I just mean things that not only don't mean anything, but can't mean anything. Here, existence is always extremely relevant. This goes back to Kant's idea that existence can't/shouldn't be a predicate. The idea of talking about the actual color of a nonexistent hat is absurd in that a nonexistent hat can not have a color, period, because having a color presumes existence.
So, when I talk about the logic of natural language, we have to get really philosophical. I presume that there as at least significant equivalence from formal logic to natural language, if not ultimately being fully equivalent. Formal logic is effectively a model trying to capture logical reasoning, and there are some notable differences for simplicity's sake (the Frege-Russell ambiguity thesis is a common example: https://link.springer.com/chapter/10.1007/978-94-009-4780-1_... ), however, most-if-not-all of these formal logic ambiguity concerns are trivial for natural language to deal with as any ambiguity can be clarified by an interlocutor.
Where things get really weird, however, is as you go up to the axioms of logic, and try to justify them. The idea that foundations of logic itself is determined either inductively or instinctually is just bizarre. And mapping an inductive/instinctual logic to a formal system runs into a lot of philosophical problems that aren't really practical to worry about. It just gets weird and solipsistic, as it does when you get too caught up in philosophy.
Perhaps. But what if someone asks you "are all your hats green?" Then the interpretation is not so clear.
Someone who always lies means in the purest sense means you cannot trust anything they say. Even the word “hat” could mean they are talking about their pet cat that they like to carry on their head.
What the author would probably say is “All my hats are green” means the liar is either lying about All or Green. Either all their hats are some other color or only one hat is green. This means you have to assume the liar has a hat. How do we know that?
We only know that because of similar puzzles that came before. In other words this is not logic but more pattern recognition.
I've rarely encountered a case where it is isnt an extreme lack of self-awareness in the questioner -- eg., being extremely overfit to language/notation/etc. localised to their own area of expertise.
I agree that puzzles alone shouldn’t e.g. determine whether you’re a good fit for a job, though. That’s one of the more annoying parts of software interviewing.
Eg., rather than asking about the risks of A,,B,C given various probabilities etc. ask them to make bets in a highly familiar environment with a resource that has uniform marginal utility to them... so eg., "suppose you were at home and your friend does..., how much of your time on a sunday would you bet to do... "
You find that when "the very same question" is asked in highly familiar terms people get it right.
Then this investigator-academic should ask: what features of their own puzzle induce the kind of mistakes they see?
In my experience its often that people are far less socially incompetent than questioners, so put "interpretation & trust" priors on terms/presentations of questions that mean they don't parse the presentation into the problem the investigator has in mind.
People who write puzzles tend to be the most bureaucratic sort of literalists who have profoundly eccentric modes of interpretation
The problem that most people are solving is: "what do i say to make this person/question go away"
This is it.
Never attribute to incompetence that which can be readily attributed to apathy.
No, because the point is that they always hinge on an arbitrary distinction to give one answer. But if you made a different arbitrary distinction you'd get a different answer. And the arbitrary distinctions are, well, arbitrary. They reflect neither truth nor capability. Just whether you can read the questioner's mind as to what arbitrary and intentionally unstated assumptions they are making.
No thanks.
That said, if someone can't fathom the most widely used symbolic languages humans use (math, logic, language, etc) they probably do have a cognitive deficit of some sort when compared to those who can.
- the local Russell hater
I used that phrasing to drive home the idea that logic is not some inherent aspect of nature, or even fundamental to the way humans perceive the world.
To speak in your analogy, people walk around with different maps of the same territory and realizing this is the self-awareness mjburgess is talking about.
If you are a primitive farmer abstract thinking isn't really useful to you. Everything you deal with in your life, except religion, can almost entirely be dealt with absolutes with little in the way of abstractions.
If it rains at the right time then you can have a good harvest. If the weather is bad then it sucks. If there is animals threatening your crops or herd you need to take steps to deal with them.
There is a lot of logic in dealing with these things. You have to know the seasons, know the stars, know the dirt, etc. You have to understand the life cycle and manipulate the behavior and biology of plants and animals at the right stages in their lives. Things have a logical sequence and there are direct consequences that are predictable from events and your actions.
Where as in modern society you have been conditioned to think in terms of hypothetical and abstractions through being exposed to testing your entire life.
You first need to know how test questions work before you are able to answer them accurately.
For a person who isn't exposed to this then the whole affair of asking hypotheticals and assuming imaginary situations with specific rules that don't actually apply to the present reality is very confusing.
They don't even understand the question. So, of course, they are going to suck at answering them.
And ultimately that is all IQ testing measures.. your ability to take tests.
I agree, but would also say that you should be capable of learning to understand those questions. For example, If you can't speak English, you'll be bad at reading books in English. If you were never taught math, you'll be bad at math. Similarly, If you never learned to reason you'll be bad at solving logic puzzles. It's almost tautological.
However, if a person is incapable of learning to do one of those things, despite the majority of the world being fully capable of doing it, they probably have a cognitive deficit.
> And ultimately that is all IQ testing measures.. your ability to take tests.
I disagree. I think it measures how well you've learned to reason, though I do agree that reasoning is a learned skill for most people.
"All" bring a common colloquial term doesn't have a strict set theory definition here. It is reasonable many people think zero hats is means the lie is in this very first word.
A lot of people will consider "all" to implicitly mean 1 or more, while I think strict logicians will map colloquial all to 0 or more.
All mat imply colloquially 2 or more as well, as why bother say "all" if you had one hat in the truthful sense
"My hats" contrasts with the "has a hat" because having a hat in your possession that you could have borrowed does not confer ownership that the word "my" can imply.
So great, a three letter word and a two letter word and we are knee deep in ambiguity.
They could be wearing the hat to try to publicly locate the true owner who might say "hey I lost that hat at x".
"Are green"... Green as in vegetable? Green as in the specific wavelength defined as green and not lime or some other named shade? Completely green dyed being undermined by a black spot or a pattern on the hat?
Imo zero hats of ownership is a viable lie to the statement, as is having one red-green hat.
Does that actually happen in academia? It seems to mostly be a social media thing.
Suppose you're writing a paper what do you write: option A) Average People Cannot Understand Probaility!?!?!, option B) Inexperienced test takers with unfamiliar notation fail to grasp meaning of a novel question; option C) survey participants on technical questions often do not adopt a literal interpretation of question; D) etc. etc.
In general researchers are extremely loath to, or poor at, recognising there's 101 alternative explanations for any research result using human participants and 99.99% of the time just publish the paper that says the experiment evidences their preferred conclusion.
The contrapositive is a rule that says that "A => B" is the same as "not B => not A". This is very confusing to people, and few can follow verbally why it works.
But here is a fun experiment. People are presented with a selection of envelopes, all face down, and are asked to verify the fact that, "All unstamped envelopes are small." They immediately begin turning over the large envelopes, then have trouble explaining their (correct) reasoning!
Here is a correct implication process for their actions.
"All unstamped envelopes are small." => "unstamped envelope => small envelope" => "not small envelope => not unstamped" => "large envelope => stamped"
At which point it is easier to just check the large envelopes!
It really isn't. The problem is usually given in this form:
> Suppose you're on a game show, and you're given the choice of three doors: Behind one door is a car; behind the others, goats. You pick a door, say No. 1, and the host, who knows what's behind the doors, opens another door, say No. 3, which has a goat. He then says to you, "Do you want to pick door No. 2?" Is it to your advantage to switch your choice? [1]
The only correct ansewr to this question is "I don't know." People who answer yes are just taking way too many standardized tests.
You need to (at least) add this statement to the original question:
> The host must open a door in any situation, and you know this rule.
Because "host" in daily language is a human being with agency to choose whether to not open a door. Without this statement, the original problem is actually a game theory problem with two players. The host might be playing a strategy where he only opens the door when he knows you picked the car at the first place, or any other strategy.
The above statement removes the ambiguity and that's what the original author meant (but failed to put in words).
(If you're interesting in this, the wikipedia page linked above actually contains a quite extensive discussion in history over it)
Edit: from your other reply I see your beef is more with the wording.
Edit edit: although I disagree with your point even then. But it seems to lead to rather fruitless argument, so let's leave it here.
The green hat problem hinges on subjective interpretations of the meaning of both "liar" and the different ways in which the liar's sentence may be false. It may be false because the liar owns many hats, none of which are green. Or they own many hats, only some of which are green. Or they own no hats. These are all reasonable interpretations of how the sentence might be false, and the answers presented are not necessarily mutually exclusive.
Edit: Furthermore, I don't think that author's solution to the Crawl problem is correct. When the host eliminates a door, either you will get information that says you should switch, and you'll win 100% of the time; or you won't get information, and you should still always switch and win 2/3 of the time.
That's the missing assumption. I would say assuming that people are perfectly random falls into the "standardized test" category.
> you won't get information, and you should still always switch and win 2/3 of the time.
You always get some information, the set of possible results becomes narrower, so saying the probabilities don't change is not sufficient. Not a good idea to discuss the problem in informal language though.
That was when I realized many people just memorize the Monty Hall's solution without understanding it, a.k.a. "standardized tests".
If Monty knows the door with the prize and is aiming for the game to continue, then you should switch. (This is the usual argument.)
If Monty doesn't know where the prize is, then you learned nothing. (Monty's result was luck, and he can't impart information that he doesn't have.)
If Monty knows where the prize is and wants you to lose, absolutely don't switch. (Monty will only drag the game out as a way to try to make you lose.)
The reasoning behind these statements is completely solid, and there are no hidden assumptions being snuck in.
You can't just sneak in the assumptions. You have to state them somewhere.
You specifically need information that we haven't been given about the counterfactuals. What might Monty have done in other scenarios that we have not yet observed? We don't know. And we're not actually told. That makes that an implicit assumption that wasn't specified.
Yes, it's also correct that you don't "know" the result, and you might prefer goats to cars (even then you should probably sell the car and buy several goats), but there's a reasonable enough interpretation of "advantage" that you shouldn't dismiss the problem outright.
But anyway I'll link the relevant section from Wikipedia:
https://en.wikipedia.org/wiki/Monty_Hall_problem#Other_host_...
> The version of the Monty Hall problem published in Parade in 1990 did not specifically state that the host would always open another door, or always offer a choice to switch, or even never open the door revealing the car. However, Savant made it clear in her second follow-up column that the intended host's behavior could only be what led to the 2/3 probability she gave as her original answer. (emphasis mine)
My point was that when people ask this question, they often word it like the very 1990 version did, lefting out this critical statement (which Savant considered needed as well, therefore she clarified in the follow-up column), making the question ambiguous.
(Although Savant also said "Very few (out of people who said is 2/3 is wrong) raised questions about ambiguity"... so perhaps people are actually just bad at probablity...?)
The problem is that you're presented with two envelopes with 2 real numbers inside. You randomly select one, then look, and try to guess if you got the larger number. It doesn't seem like you can do better than even, but you can!
Unfortunately everyone hates the answer. Which is that you make up a random number and pretend it is the other one. Your odds of being right are
50% + (probability of choosing between the numbers) / 2
Which can always be strictly bigger than 50%. (Though possibly by only a little amount.)
Special case. If those numbers and yours were all independently randomly chosen from the same distribution, you'll be right 2/3 of the time.
This is one reason that probability theorists have learned to be more careful in stating the double money version to rule out the solution that I gave. But my version has been in the literature since, I believe the 1950s. Under, as I first encountered it, the same exact name. (I encountered it from Dr Laurie Snell at Dartmouth College in the mid 1990s.)
The question leaves that distribution completely hidden, and your answer smuggles it back in. That feels less like a counter-intuitive math/stats question and more like a badly worded gotcha.
We can't have an uniform distribution over all real numbers, so it's quite pointless to discuss if looking into the envelope gives any new information, cause we don't even know the distribution yet.
There are no hidden conditions. It is just a shocking result that we don't expect.
It's not saying that after the player see the number in the first envelope, the strategy guarantees a >50% outcome.
It's saying that give any distribution, over all possible outcomes, >50% times the strategy will end up pick the larger number. You can say this >50% is the expected winning chance before the player see the number in the first envelope.
I'd say this is "intuitve" because, if your strategy can guarantee "when the player see a large number in the first envelope, he's less likely to switch than if he saw a small number", it would be better than blindly switching by coin toss. So intuitively such a strategy exists.
The only "trick" here is that since the player doesn't know the initial distribution, they can't tell "how large counts as large?" therefore they needs something that preserves some property over the whole real number line. That's why the strategy involves sampling from a another distribution whose PDF is non-zero everywhere.
If your solution is the same as this article's, it's plain wrong. Even the natural number case is plain strong.
It's very easy to demostrate as well: consider a trivia case where the distribution is just {P(1)=1/3, P(2)=1/3, P(3)=1/3} and you see 2 in the first envelope. There is no strategy to get a better chance than 50%. Therefore, any strategy that gives a better chance than 50% must implicitly make an assumption over the initial distribution (and therefore excludes a distribution like {P(1)=1/3, P(2)=1/3, P(3)=1/3})
Actually the article is even "wronger" than this, because "started A" and "switched" aren't independent and one can't simply use the product of their probability. The above example is a quick way to demonstrate it's not a general strategy without assumption to get >50% winning chance. Similarily, one can just use {P(1)=1/3, P(2)=1/3, P(3)=1/3} (this is a valid distribution over real numbers!) to demonstrate the real number strategy isn't general.
Again, for both natural number and real number case, the discussion over strategies is only meaningful is we know something about the distribution.
Interestingly, this article is wrong more or less in the same way as believing switching does give you more expected value in the original "twice money in another envelope" variation.
Edit: For people who are interested in the switching strategy, check Randomized Switching in the Two-Envelope Problem (2009). Spoiler: full of discussion over the initial distribution.
I don't actually care how you convince yourself. But the explanation is right. If your random number is outside of the range, you've got even odds. If it is inside of the range, you've got 100% odds. As long as there is a positive probability of being between, you've got strictly better than even, by half of the probability of being between.
Many, many distributions guarantee positive odds of being in between. The one I chose for my program was:
(log(rand) * (flip_coin() ? 10 : -10 ))
Which is the log of a random number between 0 and 1, times 10 times + or - with even odds. The various factors were chosen to fit well with normal human choices that most seek to test it with.The strategy is straightforward and bulletproof (if you allow a random generator of real numbers, otherwise you may keep tossing coins indefinitely): keep tossing coins until you get tails. If the number you saw is less than the number of heads you got, you don't switch.
For the simplest case assume that one envelope always contains 1 and another always contains 2. You choose one envelope randomly, so in 50% of cases you get 1, which you switch in 50% of cases. And in 50% of cases you get 2, which you switch in 25% of cases. Hence, you pick the higher number in 62.5% of cases. The same works with any numbers N, M; or any complex distributions; or even real numbers with a bit more complicated strategy. You don't have to know whether you are between two values in advance, you just have to guess.
In other words, I'm merely trying to be informative.
I thought you meant the strategy can make the winning chance always >50% even after the player opens the first envelope, which isn't possible.
However you actually meant the strategy can make the expected winning chance >50% before the player opens the first envelope, for any well-defined distribution of real number, even the distribution is not known to the player, which now I realize is true.
(I haven't thought through some edge case like Cantor distribution, but now I incline to it's true not just for "many distributions". Of course for a discrete distributions, we need to specifiy the two envelopes can't have the same number. Besides that, it seems to hold true for any distribution?)
But before you pick, your odds were still bigger than 50%. Just not by much.
Seeing 2 is only one of the many possible cases. You haven’t calculated the total probability.
Let's play this game exactly once.
You choose two unequal real numbers. I don't know what they are, and I don't know the distribution from which you choose them. You write them down and put them in separate envelopes.
I'm allowed to choose one envelope and open it to see the number inside, and my job is then to say which envelope holds the larger number.
I claim I have a strategy now which lets me win strictly more than 50% of the time. My strategy is this.
I choose a real number R at random from a distribution that has dense support. In other words, for any two reals, L and U with L<U, P(L<R<U) > 0. This is easy to do ... one method is to list the rationals, positive and negative, then roll a die, discarding numbers until you get a 6.
Now I flip a coin and thereby choose an envelope at random. I proceed by assuming my chosen number is between your two numbers. There is a non-zero chance this is true ... call it e. So e>0.
If I'm wrong then my choice is 50% ... probability is 1-e.
If I'm right then my choice is 100%. ... probability is e.
Combined, my chance of being right is 0.5(1-e) + e = 0.5+e/2, which is strictly greater than 50%.
You can make it as small as you like, and if we play the game repeatedly then you can make it approach 50%. But as it stands, with a one-off game, I can win with a probability that depends on your chosen numbers, but which is strictly bigger than 50%.
I am a mathematician, so please bear with me when I try to explain how this can work.
The rational numbers are countable, and that means that I can write a list of them. There are several ways of doing this, but personally I like the Calkin-Wilf tree[0]. That only gives the positive ones, but we can include zero and the negative ones by interleaving them.
So, whatever interval you choose, there are infinitely more reals outside the interval as inside (by that I mean that you can fit an infinite number of copies of that interval up to infinity). So the probability e is not >0, it is effectively 0.
One you have chosen the two numbers, L and U, I note that there are rational numbers in between. Choose one of those numbers, call it M.
M is in my list above. Now I roll a die, discarding numbers from the list until I get a 6. There is a non-zero probability that the number retained is M, so there is a non-zero probability that my chosen number is between L and U. So e is definitely non-zero.
The second problem is, what does it mean to choose a real at random?
It doesn't have to be uniformly at random -- that's the mistake nearly everyone makes -- and the above process does it perfectly well. It only ever chooses a rational number, but that's OK. It's still a real number, it's still a random number, and for any non-empty interval, there is a non-zero chance the chosen number is inside.
... as a human living in the finite universe there are limitations to your choice.
Yes, but that is accounted for in the explicit description of how to choose the number.
Any number you can write using all the atoms in the universe is infinitely outnumbered by all numbers that you can't.
Again, this is accounted for by the fact that we are not choosing uniformly at random.
So ... yes, choose from a Gaussian, but then you have to tell me exactly how.
That's tricky.
Yes, it's established there isn't "uniform distribution over all real numbers" without violating axiom of probability. You're 100% correct on this.
But it doesn't make Colin's solution wrong, because e > 0 for any* well-defined distribution.
> Which is a different problem than stated originally
There are two ways to inteprete the original problem:
A. The numbers are truly randomly picked over all real numbers.
B. The numbers are picked from a well-defined distribution which is unknown to the player.
Since A. is invalid mathematically speaking (without changing the commonly accepted definition of probability), it's reasonable to only consider B., in which case, Colin's solution is correct.
I made a more intuitive explantion on why a strategy better than coin toss exists here: https://news.ycombinator.com/item?id=42372972
*: More strictly, any distribution that guarantees the probability that the two numbers in envelope are the same = 0.
https://web.mit.edu/rsi/www/2013/files/MiniSamples/MontyHall...
In the case of a logician and the properties of the elements of the empty set the frame of mind of the examiner is probaly going to be about using algebraic logical connectives.
For another nice example I can quote [0] via [1]
> Luria: All bears are white where there is always snow. In Novaya Zemlya there is always snow. What color are the bears there?
> Peasant: I have seen only black bears and I do not talk of what I have not seen.
> Luria: What what do my words imply?
> Peasant: If a person has not been there he can not say anything on the basis of words. If a man was 60 or 80 and had seen a white bear there and told me about it, he could be believed.
This is a more extreme case, but in my opinion it is the same phenomenon of being asked to take external things as true and work on them.
[0] https://languagelog.ldc.upenn.edu/nll/?p=481
[1] https://www.astralcodexten.com/p/somewhat-contra-marcus-on-a...
It’s why puzzlemaking a truly challenging and impressive skill. It must be fair, a challenge, and obvious in retrospect.
I think it’s why the twist in Bioshock worked so well for me: it was right there in plain sight numerous times, while other twists in mystery games/films elicit a groan.
If it's a formal logic problem it should be presented in formal logic terms (presumably that only those with formal logic training would even understand) so then there is no possibility of language ambiguity.
I'm not trying to be argumentative, but this is just how this come across to me, and I am pretty confident most humans would consider it a lie which I think would count for something given the place and the way in which the question was presented.
Trying to return to your more naive understanding of logic not only helps understand the intent of the puzzle, it also makes the puzzle more fun.
Just for example I play a game with my children where we tickle each other when we see a yellow vehicle. Is a yellow tractor a vehicle for purpose of the game? How about a yellow baby cart. How about a billboard with a photograph of a yellow baby's toy car?
We honestly have more fun discussing what is a vehicle for purpose of the game than we do tickling. Especially when it becomes clear that a yellow baby carriage is a vehicle only if it is daddy to be tickled... Honestly a good lesson to learn early that life is not fair and that rules are subjective.
No; it makes the puzzle illogical and thus about as much fun, for those who prefer logical outcomes, as discussing religion or politics.
Not to mention that a liar doesn't necessarily have to mean someone who tells a falsehood in every single statement. It could just mean someone who frequently tells falsehoods. Or, more deviously, someone who wants to cause maximum uncertainty in his listeners, in which case some mix of true and false statements would probably be the way to go.
"I never make a true statement" says the liar.
I’ve never seen one of this puzzles phrasing it like that. With good reason, that would break the puzzle.
I agree with the first stipulation, but, outside of Lewis Carroll's puzzles, I think that the second isn't true. For example, I believe you'll find just the opposite in Raymond Smullyan's books.
FTA: >Note: this question was originally set in a maths exam, so the answer assumes some basic assumptions about formal logic. A liar is someone who only says false statements.
I think it's pretty clear how on definitions
Just like the barber paradox isn't literally Russell's paradox, but it made more people to look up the history of it and perhaps learned what Russell's paradox is. Hopefully 0.1% of them turn out to be mathematicians.
Some is good, but more isn’t necessarily better.
I welcome puzzles, but I also think we need to shed some of the exclusionary aspects of mathematics/compsci, the brunt of which are far too known: inaccesible formalisms, leetcode, competitive grants/hackathons, steep admission requirements, code bounties, interview puzzle rounds, etc.
Some necessary and organised in good faith I'm sure, but I hope we can move past the implicit assumption that 'maths/code isn't for everyone' and self-select based on that, as that doesn't further the cause.
My point is that not everyone who understands barber paradox (in plain english) has to understand formal logic, and not everyone who understands formal logic has to become a mathematician. However I still believe the existing of the plain english puzzle is a net positive for humanity's collective mathematical comprehension.
I think it meant "hopefully at least 0.1%." (I can imagine someone who feels that it's hopefully at most 0.1%, but probably that person wouldn't be kindly disposed towards efforts to fool people into being interested in complex mathematical topics, as your parent seems to be.)
If we reframe it using C++ "std::all_of" function over an array of strings called "hats", and say that the following must be false (because he is a liar):
std::all_of(hats.begin(), hats.end(), [](std::string hat) { return hat == "green"; })
Then we can answer the questions without ambiguity:A) The liar has at least one hat. Yes, because std::all_of returns "true" on an empty list
B) The liar has only one green hat. Unsure, because { "green", "green", "red" } is false, and { "green", "red" } is also false
C) The liar has no hats. No, it is the opposite of A
D) The liar has at least one green hat. Unsure, because { "green", "red" } is false and { "red" } is also false
E) The liar has no green hats. Unsure, for the same reason as in D
[1] https://www.boost.org/sgi/stl/MonoidOperation.html
[2] note: Monoid, not Monad, and yes, category theory left its mark in C++ as well.
Because it is, if you'll forgive my Haskell-ese, the only implementation that means that `all_of $ l1 ++ l2 == (all_of l1) && (all_of l2)` for all lists `l1` and `l2`, including empty ones.
For example, you may want to use all_of to check if all the preconditions are met before running a command, is there are no preconditions, then you can run the command.
Or, in a test report, a test case is successful if it and all of its sub-cases are successful, if there are no sub-cases, then that part is considered successful.
Or, you are making a task runner, you exit if all the tasks are completed, if there are no tasks, then you can exit immediately.
Saying that all of nothing is true is the most appropriate behavior, both in theory and in practice.
Yes! Before it became a programming problem, I considered the implications of this decision for common speech. In that case, it will generally be expected that when someone says "all my hats are green", they have at least one hat, probably because otherwise it doesn't hit the relevance threshold to make such a statement worth saying.[1]
Based on this, with my younger, hornier mind, I would joke that, "I have gone on a date with every female cheerleader at my university." (All the cheerleaders at my university are male.)
The idea being, an equally valid convention would be to read the statement as "there exists no element violating all the predicates" i.e. no one who is both a "female cheerleader at my university" and "someone I have not gone on a date with".
And this convention, it turns out, is what C's all_of (and Python's all()) uses.
But I'd still balk at someone using that trick in common speech -- it's at least an attempt to be misleading.
[1] See the "Maxim of Relevance": https://en.wikipedia.org/w/index.php?title=Cooperative_princ...
This is almost certainly not what the author will say, and it does have some tangential connections to computing so it's worth expanding on briefly.
In computing you often reduce problems to smaller problems, this can be done with recursion but it doesn't have to be, dynamic programming kind of is the reverse of it; whatever. When you do that though, you get these questions about really small collections, sets, lists, data structures.
Just for a quick concrete example so that we're not an abstract theory land, is a one-element list sorted? Is a zero element list sorted? Is [5, 5, 5] sorted ascending, descending, both, or neither? If you choose the wrong answer, then it means that your algorithm needs to be more complex, you don't trust zero-element lists to be sorted so your quicksort HAS to pivot on a median of 3, you don't trust one-element lists to be sorted so your quicksort HAS to pivot on a median of 5, or maybe when you see that you would recurse into a list of size 1 you generate a new median-pivot or something.
In mathematics, there is a convention which attempts to generalize this idea that an empty list is always sorted. In fact, an empty list is also always randomly sorted. It is always sorted descending, too. If it's an empty array of ints, all of those ints are greater than 1000—and they are also less than 50.
The mathematical convention is, in lay speak, “if you are talking about nothing, pretty much anything you say is going to be true unless it's gibberish.” If I said every int is green, well, synesthesia excepted ints don't really have colors, that's crap.
Everything else is “trivially true.” More formally, any predicate of the form {for all elements in S, this is true of that element} is taken to be “trivially true” when S is an empty set. It is something like the code,
let agg = true
for (const element of mylist) {
agg = agg || f(element)
}
where no matter what f is, if mylist was empty, agg is true. (“Trivial” here is sometimes replaced with the word “vacuous” because “trivially” is also a common English word meaning “easily,” so something “trivially true” might also by normal English rules mean “is easily seen to be true, is easily proven to be true, we can debunk the opposite with a 5 second look at the Wikipedia page,” etc.)So that's the convention and besides making base cases much easier, one reason to do this is that the negation of any “for all Xs in the set, Y” is always perfectly specified as “there exists an X in the set such that not-Y.” The other convention you'd have to negate as “Either the set is empty or (...)”.
So the claim is that the perfect Liar is lying according to mathematical rules of Truth and falsehood, and according to those rules, this statement “all of my hats are green” can only be false if there exists at least one hat belonging to the liar which is not green. If there are no hats then the statement was trivially true.
It reminds me of the math "puzzles" on Twitter which go:
1 shoe + 1 shoe = 2
2 shoes + 2 shoes = 4
3 shoes + 2 shoes = ???
And the answer isn't 5 because a) we're not counting shoes and b) the shoe laces were different colors. There's nothing clever, it just teaches you to be hyper cynical and question every little detail which isn't relevant to either Math or the real world.
It's a handy stance because I'm no good at either solving logic problems or getting inside other people's heads!
Another on that really irritates me is the kind that presents a series of integers and asks which integer comes next. Any integer will do, you just have to fit the appropriate polynomial.
This one bugs me to no end because it's part of the standard elementary school curriculum, for example here: https://byjus.com/maths/patterns-questions/
But surely someone with a strong imagination could come up with a pattern to fit any number as the next in the sequence. I doubt most elementary educators even grasp the issue.
That is an excellent way to put it!
It explains why it appeals to non-math people. They are (usually) better at these more verbal-based games ime.
The solution article also discusses vacuous truths ("all my hats are green" is true if you have no hats, vacuously). Truth has a definition in formal logic too, but we've gotten far enough that this problem is already solvable and unambiguous.
the one I hate the most is the Monty Hall Problem.
but you realize that it's unambiguously mathematically true without gimicky word-play or puns or other logic puzzle trickery.
it's just simply an un-intuitive result. most statistics really is.
curious: why the hate for the monty-hall problem?
The reason I hate it is that it's a example of how to lie and mislead using statistics and that the only reason it exist is that a content creator in the print media wanted to give an edgy true answer to farm engagement, and now as a consequence many introductory statistics course make students suffer for the same reasons. The assumptions made to reach that answer are not made explicit and it changes the response. And teachers mess it up a lot of the time which lead to a lead of head-scratching (or sometime just leave under-specified on purpose).
It was the right answer to a question that wasn't asked. the host opens the door before giving the choice and the door he's choosing isn't random.
Wikipedia explains this better than I would be here's the part I'm talking about:
> In Morgan _et al four university professors published an article in _The American Statistician_ claiming that Savant gave the correct advice but the wrong argument. They believed the question asked for the chance of the car behind door 2 _given_ the player's initial choice of door 1 and the game host opening door 3, and they showed this chance was anything between 1/2 and 1 depending on the host's decision process given the choice. Only when the decision is completely randomized is the chance 2/3 .
[Monty Hall problem - Wikipedia](https://en.wikipedia.org/wiki/Monty_Hall_problem)
The game theoretic explanation (in the same page) as to why you should switch is more convincing and less click-baity though without needing to give a specific probability value or assume the host strategy.
i think Savant was 100% correct and the original stating of the problem was clear enough. it's not really about torturing students or trying to be tricky or edgy - it's meant to be an important lesson about independence in statistics. it's more of an example of the kind of real problems that are torture. statistics is the torture, not the exposition of it...
> content creator in the print media wanted to give an edgy true answer to farm engagement
this was 1975 and the fight didn't break out until 1990. using terms like "content creator", "farm engagement", etc. gives a vibe that i guarantee was not the case at the time. yes, it was meant to be an engaging puzzle, but back then it didn't have those highly negative connotations.
from wiki: "Several critics of the paper by Morgan et al.,[38] whose contributions were published along with the original paper, criticized the authors for altering Savant's wording and misinterpreting her intention"
if anything people with an axe to grind like the Morgan et. al. analysis were the one twisting words around.
as far as instructors (and many other people) having a bad time explaining it, well... that's not a problem with the puzzle is it? bad teachers are a real thing.
for me the very best most direct way to understand the puzzle and the solution is to look at the decision tree diagram next to "Conditional probability by direct calculation" on the wikipedia page [1]. with only 3 doors and 3 possible first choices and a single 2nd chose (switch or not), you can easily fully directly compute every possible scenario. draw that picture 3 times (one for each initial door chosen) and count up the wins and losses for strategy switch vs no-switch.
[1] https://upload.wikimedia.org/wikipedia/commons/thumb/d/de/Mo...
Which is another listener’s bias: is lying by omission a lie?
All my horses are unicorns. I don’t have any horses, nor unicorns. So it’s true but also not.
The article mentions a maths exam, and of course the answer to the hats puzzle is very straightforward if you convert to statements about sets and logic in the way the teacher expects.
But converting ambiguous language into logical statements by taking everything extremely literally is the opposite of a useful life lesson, so I think it's a terrible exam question.
"The liar says All my hats are green" becomes "¬∀x|x∈hat,OWNS(x) (GREEN(x))" or similar.
And then from there you can also translate the five provided answers and try to find a contradiction.
If the liar owns no hats the statement “All my hats are green” would be true. Under the parameters of the question it must be a lie and therefore cannot be true. So the liar owns at least one hat which is not green. They may own additional hats which can be of any colour.
People who are saying “if they are a liar they might not even be talking about hats” are somewhat missing the point:
1) Whether or not they are talking about hats they have made a statement about hats and under the “rules of the game” of formal logic it must be untrue because we are given they are a liar. That’s enough to answer the question.
2) The “rules of the game” are about predicates and properties and inference. The language is plenty precise enough to convey both the question and to deduce the solution.
[].all(x => whatever(x)) == true
At least that's how math usually thinks about it.Edit to add: if you find this problematic consider that the statement “All my hats are green” in formal logic is identically equivalent to
For all hats h in my hats, h is green.
So for this statement to be false there needs to be a hat in the set “my hats” which does not have the property that it is green. If “my hats” is empty or indeed if somehow contrary to the rules of the game “my hats” only contains things which are not hats or all the hats it contains are green then the statement is true.
Since the speaker is a liar the statement cannot be true. Therefore there is at least one hat in “my hats” which does not have the property that it is green.
The maths students will be learning this in the context of negation and will have learned that the negation of a universal (“for all”) statement in predicate logic is an existential (“there exists”) statement. Since we have a liar we have to negate what the liar says so since the liar says
“For all hats h in my hats, h is green.”
We negate this and deduce
“There exists at least one hat h in my hats such that h is not green.”
In the context of old-fashioned predicate logic this is not ambiguous.
This is why the problem statement bothers me. If you're going to contrive a puzzle out of pure logic, you had better constrain the world (ie, what logic system the "liar" uses). It's like formulating a geometry problem (behavior of parallel lines, sum of angles of a triangle, etc) and just assuming Euclidian space.
Color of non existing object is undefined.
The correct solution is:
!(all && my && hats && are && green) == !all || !my || !hats || !are || !green.
He’s a liar so his statement has to be specifically false.
Well yea, that's the fun part! Logic puzzles without interaction with language are dull affairs indeed, basically just computation.
When you’re writing functions that work on lists or sets, you need to decide what to do about statements that are vacuously true. Call it out in the documentation? Put in a special case? Assert that the set is non-empty? Or maybe even create a new datatype to make the corner case unrepresentable. These design choices have side-effects, making a function easier or harder to use, more or less error-prone.
Recognizing vacuous statements is pattern recognition, but it’s sometimes useful pattern recognition, and for children, learning about it might even be fun.
>Note: this question was originally set in a maths exam, so the answer assumes some basic assumptions about formal logic. A liar is someone who only says false statements.
In js if I write:
const allHatsGreen = hats.every(hat => hat.color === 'green');
it will be true if hats is empty. Same thing for C# Linq. Imo this makes sense, because if I write: const matchAllConditions = conditions.every(condition => condition.matches(item))
In some condition matcher (lets say I want to check rules before an user is allowed to post), the correct behavior is the result to be true, when the array is empty.I'm not well versed, in functional programming, but in Ocaml (of F#, hehe) it would be
let rec all_hats_green = function
| [] -> true
| hat::rest -> hat.color = "green" && all_hats_green rest
so in a recursive implementation, this is the behavior that makes sense.1. A deceit is an attempt to make somebody believe something false.
2. A falsehood is a statement which is false.
3. A lie is a deceitful falsehood.
Regardless of whether they miscommunicated about hats vs cats, and regardless of whether they were being deceitful in the process, for the statement to be a lie it would also have to be a falsehood, implying they have at least one hat which is not green.
Yes, these problems require suspension of disbelief, especially given the shorthand "he's a liar" always meaning that the person is often deceitful (usually with other negative implications), but the problem statement being that the "person always lies" is pretty clear and doesn't require special pattern recognition or other mental gymnastics, and it's not that different from the suspension of disbelief you invoke when playing a game of chess and not literally sending a knight to murderously dethrone your opposition.
Unfortunately, there are some obvious discrepancies. My favorite is that "can't" really means something closer to "not can".
This can be demonstrated with a close analysis of the statement, "I can't not do that." To get our usual understanding of the sentence we need to parse it as, "I (not can) (not do that)." And then turn that into, "I must not (not do that)." And now cancel the double negative to get, "I must do that."
Suppose that you try to parse it as, "I can not not do that." You quickly get, "I can do that." Which is not at all what that sentence actually means.
We know this is occurring on a math exam, so it must be a logic puzzle. The exam-taker would've probably known this refers to a first-order logic question, and have been taught a certain way of translating sentences like this into first-order logic.
This is true of all word puzzles that they need to be mapped to math in a way that assumes knowledge about the world and context.
In fact, I would extend this to arguments as well: Let's be clear up front what we mean by important words and go from there. Too often people ending up arguing about definitions, but in roundabout ways.
The statement translates to:
∀x ( IsAHatOfMine(x) => Green(x))
That's just equivalent to ∀x (~IsAHatOfMine(x) ∨ Green(x))
by the definition of implication (it's only false if the antecedent is true, and the conclusion false).The negation of that is (by repeated application of De Morgan's):
~∀x (~IsAHatOfMine(x) ∨ Green(x))
∃x ~(~IsAHatOfMine(x) ∨ Green(x))
∃x IsAHatOfMine(x) ∧ ~Green(x))
Thus, the liar has at least one hat, that, furthermore, is not green, so A) [EDIT: but not D - I misread it].In ordinary English, the meaning of the original phrase, thus the answer to the puzzle, is different.
~∀x (~IsAHatOfMine(x) ∨ Green(x))
∃x ~(~IsAHatOfMine(x) ∨ Green(x))https://en.wikipedia.org/wiki/De_Morgan's_laws#Extension_to_...
If the liar says, "All ten-foot tall men have brown hair," we cannot conclude that there must exist a ten-foot tall man.
EDIT: I'll clarify to say I wasn't taking issue with the derivation, but rather with the translation of the English statement into first-order predicate logic. No non-logician would conclude that there must be a ten-foot tall man if "All ten-foot-tall men have brown hair" is false. But since we can derive it from the translated logic statement, then there must be a problem with the translation.
In normal discourse people don't accept vacuous truths like that as meaningfully true. Rather I think people would interpret such a statement as a kind of hypothetical: "If there were a ten-foot tall man, he would have brown hair."
It's not clear to me if first-order predicate logic is really equipped to even handle reasoning about these cases of "a liar who always lies." Such a situation seems to be intrinsically higher-order. If a liar states a hypothetical, what does that mean, exactly?
My interpretation of the negation of the statement is, "If there were a ten-foot-tall man, he would not necessarily have brown hair." This doesn't imply the existence of any ten-foot-tall man.
1. The liar stating something must mean that the phrase is not true. They cannot state anything that is not false.
2. "All X are Y" is the phrase.
Now, if we assume there is no X the phrases "All X are Y" and "Not all X are Y" are both true and false.
All X are Y - True. Yes, there is no X that is not Y.
All X are Y - False. Yes, there is no X that is Y.
Not all X are Y - True. Yes, there are no X, so none is not Y.
Not all X are Y - False. Yes, there are no X, so none is Y.
All these statements are (according to the article) vacuous if there is no X. A liar then cannot make them, as they are not false.
So from here you can deduce that either the phrase "All X are Y" stated by a liar indicates the existence of X or that I'm a liar :)
We only would know that either X doesn't exists or, if it exists, not all X are Y.
Basically it disentangled two unrelated concepts, that English language unduly mixes. Concept of every item having some quality and concepts of at least one item existing.
we're using a made up definition of liar, who can only say things that are false. it's not part of the question for the liar to be able to tell a statement they arent certain is false
But it doesn't work the other way around: "Every Frenchman I've ever met has become a good friend, but then again, I've never met a Frenchman". This isn't funny, because the second clause makes the first clause into a lie, as truth is normally understood. This is not a place where we colloquially accept an empty set.
So the puzzle posed translates the English sentence into logic badly. It isn't the conclusion which is counterintuitive, it is the logical analysis which is flawed.
That being said, I would argue that, "All my hats are green." has different meaning than "I may or may not own a hat. Any hat that I own is green".
The use of 'all' and the plural of 'hat' implies that the author has multiple hats.
If he had no hats, then his statement would technically be true. Therefore he has at least one hat.
He may have some green hats and some non-green hats, but must have at least one non-green hat. He could have any number of green hats, including zero, as long as he has at least one non-green hat.
So the only derived statement that we can conclude to be true is A.
Perhaps that means I'm wrong.
(other systems of logic exist which will attempt to resolve this. Forcing such statements to be false makes things much trickier formally, as does e.g. three-valued logic to try to avoid assigning truth or falsity to such statements)
I guess, to me, a programmer logician not a mathematician logician, the real problem for me here is the definition of "liar" as it applies to how we parse the problem statement's facts.
Incidentally, if you are a programmer it should be obvious that folding 'and' on an empty set must return True.
I don't consider a boolean "and" or "or" of a list of bools to be automatically true or false of an empty set, my friend. To me, the specific case for a boolean function applied to an empty list of bools would have to be explicitly stated in the design.
Thanks for explaining how mathematicians and logicians treat the empty set. I have more pragmatic situations to address :-)
sum = 0
for value in collection:
sum += value
return sum
For every non-empty collection this returns the correct result, and for the empty collection it returns 0.Now the product:
product = 1
for value in collection:
product *= value
return product
For every non-empty collection this returns the correct result, and for the empty collection it returns 1.Now the AND:
A = True
for value in collection:
A = A AND value
return A
For every non-empty collection this returns the correct result, and for the empty collection it returns True.Now the OR:
R = False
for value in collection:
R = R OR value
return R
For every non-empty collection this returns the correct result, and for the empty collection it returns False.Let's abstract it:
Def FOLDR( initial, OP, collection )
result = initial
for value in collection:
result = result OP value
return result
So now: sum( collection ) = FOLDR( 0 , + , collection )
product( collection ) = FOLDR( 1 , * , collection )
and( collection ) = FOLDR( True , AND, collection )
or( collection ) = FOLDR( False, OR , collection )
This is why we define the results we do on empty collections. It's not just a convenience or a convention, it's consistent, and to do otherwise, even if documented, is to lay a trap for future maintainers.What I'm saying is that you always need to specify that default value to handle the empty set properly. In no way would I consider ANDing or ORing an empty set's boolean values to be automatically True or False, (no pun intended). You have chosen to specify them, and in real world programming, not having any elements of that specific set's specific kinds of values could well mean that the default results could be any combination of False and True, (NPI, again).
And, yes, I understand that you must initialize the temporary processing value (that you then return) to True and False in order to properly AND and OR the set's values, but that is different from the semantics of the set's cardinality.
I programmed professionally in C# (with the help of F# for its fsi.exe command-line utility) for a number of years, so I am well aware of how fold et al work. They were a very useful aspect to functional programming, making a lot of processing tasks very straightforward, as you have.
To apply my thinking to your FOLDR function, I would add a parameter that specifies the value to return for the empty set, because I would want to specify its semantics for that specific set such that they do not depend upon the value needed for computation to define it.
Def FOLDR( emptysetval, initial, OP, collection )
if length( collection ) == 0 then
return emptysetval
result = initial
for value in collection:
result = result OP value
return result
In a similar vein, I also used to specify my db wrapper functions to add special error conditions for specific cases. Let's say you're using a select statement that is only going to return 0 or 1 rows, my select wrapper would have a parameter that would say its valid result cardinality is specifically 0 or 1 and nothing else. Yes, the select statement would succeed, but the situation in the table might not be semantically correct, and it's better IMO to catch the problem when it is issued. It also standardizes the handling of such error conditions by the caller of the wrapper.The same occurs with a "select count(*) ..."; it must return a single row, or it is an error in semantics if not for the db engine. It can also be a problem if your update statement affects more than one row. And there are other situations where the cardinality must be "> 0" or ">= 0". All these cases were my own error conditions that were not SQL errors, but merely semantic errors caused by db data problems.
I used these this style of manual ORM from perl to VB to C# and F# for 15+ years, to great success.
SEPARATELY
In a db/stats context, the empty set should count as a NULL value, and I don't like to AND or OR actual boolean values with NULL values. Sure, the semantics are defined but I find it's better to catch the NULL value's presence before it gets to being involved in operations.
That's why I always specified NOT NULL in my column defs, because all hell breaks loose once a NULL gets put into a column's values.
Statistics also has such difficulties, as I was many, many years ago helping grad students with their SAS and SPSS data sets and processing. It's always just better to get rid of NULLs, unless the stats you need use are built to handle them. Once again, properly producing the required semantics are the end goal.
No other value would be meaningful.
> What I'm saying is that you always need to specify that default value to handle the empty set properly
no you need a default value to handle the base case of the recursion. The result of the empty set falls off from it.
Do you know the truth tables that include NULL? I don't off-hand, but I seem to remember that combining NULL with a True or False results in NULL, which is why I catch my NULLs before they become operands in my operations.
ANDing or ORing the lack of values in the empty-set is always specified by someone's semantics. You're just determining those semantics as a by-product of the way ANDs and ORs are calculated.
This is why the reality of "All my hats are green" has a great deal of real-world ambiguity when there are no hats, because "Color( NULL[-hat] )" is NULL. Now, how you interpret NULL in that case is up to you, because NULL is neither True nor False, in my experience and understanding.
I am open to learning, tho.
ETA: Wouldn't your method also mean that the liar saying "All my hats are not green" would also be true? And, I'm no mathematician, but if "All my hats are green" and "All my hats are not green" both eval to True, I think something has gone very wrong. That looks like why the NULL value is so useful in SQL and stats.
I've read through your reply several times, and I think you've missed the point.
The code here is the code that produces the right result for non-empty collections. It's the shortest, cleanest, clearest code that does so. These aren't random initial values, chosen arbitrarily. They are the unique values that make the code give the right answer.
Then we ask: What result does it give for the empty collection?
The answer is that for "sum" it gives "0", for "product" it gives "1", for "AND" it gives "True", for "OR" it gives "False".
In particular, in each case it gives the identity element of the algebraic structure. This isn't a coincidence, it's a part of how algebraic operations work.
That's why for any operator, the result of applying it to an empty collection is the identity element. It's algebraically consistent.
So, the initial value that forms the basis for those computations -- to my mind and experience -- is as related to the value computed for the empty set as the programmer decides it should be. I don't think that function's default will necessarily be the proper semantic result when applied to the empty set.
As an example, why should "Are all hats green?" have the same result as "Are all hats NOT green?"? If the logical computation's initial value is the automatic result, then you have merely answered the mathematical-logic answer to a question about sets, not about the list of real-world things being modeled.
If one is writing pure math software, then the answer will be the pure math logical result. When one is modeling a real-world system, the semantics require another level of specification, in my experience and opinion.
(Good morning. I've never replied to such an old comment before. I do not yet have software to monitor my active conversations around here, and am only just beginning to entertain undertaking such a project, so it is merely luck of the universe that I found your interesting comment this morning. Thanks. It's like a mental warm-up as I begin my day.)
Maybe even more accurately they aren't brown, they are an undefined color.
I'm not really satisfied saying that the characteristics of something that doesn't exist can be anything. I am satisfied saying the characteristics are undefined though.
At any rate, it would hardly qualify as a puzzle if the answer was so obvious
The liar either has zero hats or some amount of hats. The only thing we know for certain is that if they do have hats, there is at least one non Green hat.
For all x in A, x has XYZ property
is taken to be true when A is the empty set.For me, the evaluation of the empty set should have separate semantics than that for how a non-empty set's elements are logically combined to produce a value.
This is the result of doing stats programming for grad students, doing lots of database design and programming, and lots of regular programming in imperative and functional languages.
The key is that we are always working within a context, and this problem's context involves both formal logic and regular old language. And, whew!, is there a disconnect and interference pattern.
What a delightfully unserious discussion!
function areAllTheirHatsGreen(someone) {
return someone.getHats().every(hat => hat.color === 'green')
}
I wonder if there's a language or programming paradigm where this function wouldn't be determined simlarly.I think best you could do is make a validation check that throws an error if there's no hats at all, but would that make sense?
What if you have a function that has to return a boolean and not throw an error.
As to paradigms, I've not seen anything yet, but I haven't seen it all, and corporate America has their legacy systems that limit their explorations.
my-hats is not empty
for every hat in my-hats, is-green(hat) is true
We know that the speaker always lies, so both statements must be false: my-hats must be empty, and it must be that it exists at least one hat in my-hat that is not green. This is a contradiction. So either the speaker or the puzzle is not consistent (and uninteresting), or the 'my-hats is not empty' is not a valid assumption.> We know that the speaker always lies, so both statements must be false: my-hats must be empty, and it must be that it exists at least one hat in my-hat that is not green.
No. Since it is one statement as written, and the rules of common logic are not created by the liar, as I said up in the thread, either possibility is true. The person may have no hats or have one hat that is not green.
It amounts to an assumption of an implied conditional ("If I have hats...") which is not always warranted. The "gotcha" here says more about the vacuous truth assumption than it does someone who falls for it.
Because for efficiency reasons you make a lot of assumptions constantly that may or may not be true, and 99% cases it would work for your favour.
Sometimes assumptions need to be challenged or we need to be reminded of that it can be good to challenge assumptions in certain cases, it can allow us to discover some new things.
I guess I disagree, although I don't mean that disrespectfully. Vacuous truth is one reason why nonclassical logics exist. The wikipedia article gives a good example of how allowing for vacuous truth can lead to absurdities: "All my children are goats" said by someone without children. This is a statement that is vacuously true technically, but (assuming laws of biology hold, and a human is making the statement), it is something that could never be true even if the antecedent ("I have children") were true. It's not just something playing on incorrect intuition, it's a statement that is true only by convention or a certain line of reasoning that to me is made only out of convenience because of certain implications.
It stretches the definition of "true" so far that the term "vacuous truth" no longer means "truth" in the general sense in which it is understood. It plays on the use of the term "truth" more than anything else to me; one could redefine "vacuously true" statements as "vacuous" statements in the sense of "undefined" and then the "gotcha" would no longer apply.
I think the example also captures a sort of flaw in applying classical logic (at least classical logic with vacuous statements) to everyday speech in another way that I don't think is just incorrect intuition. If someone asserts "All my hats are green", it's understood to be an assertion that the speaker does in fact have hats, otherwise there would be no point in structuring the statement as it is. That is, the statement is evaluated as true or false with reference to the antecedent because it (the antecedent itself) exists, and another, different statement could have been made. Classical logic evaluates the statement "All my hats are green" as if it were the same as "If I had hats, all my hats would be green" — but they are not the same statement, they have different meanings. There's a counterfactual possibility in natural language, which I think requires nonclassical logic.
if you dont assume the vacuous truth, and instead leave it undefined, then when hes got no hats, "all my hats are green" is absurd, rather than false.
the gotcha only stops applying when you put a vacuous false, rather than true or undefined.
is this really a flaw in applying classical logic? with the vacuous true, the only information you get from "all my hats are green" being false is that they have at least a hat, same as the intuitive result
For every hat H that I have, H is green.
If I have no hats, this statement is true, just as
* the empty sum is 0,
* the empty product is 1,
* the empty AND is True, and
* the empty OR is False.
So with this interpretation, the liar having no hats would make the statement true.
e.g. "all my lamborghinis have magical goat skin seat covers" is true if 1) I have no lamborghinis or 2) All the ones I own have magical goat skin seat covers.
(fr I have no logical or mathematical background)
I would appreciate it if you would correct my thinking on the subject, if I have erred: https://news.ycombinator.com/item?id=42365506
Thanks in advance.
Common source of confusion/trickery/divergence between ordinary language and formal logic.
Edit: Logically speaking, the following two are equivalent:
They married and had kids.
They had kids and married.
Depends on your logical system! There are temporal logics to allow one to capture logically the difference between the two.
> Note: this question was originally set in a maths exam, so the answer assumes some basic assumptions about formal logic. A liar is someone who only says false statements.
In this case, the reader is given the special definition of liar, but not the special definition of “lie”. (As in, it’s not a lie to make definitive claims about nonexistent hats.)
A lot of the “trick” in logic puzzles boils down to this issue of word play. This puzzle could have been drafted so that the liar’s statement leaves proper room for the no-hats case, but then it would be too easy.
But told by someone who cannot make a true statement.
Really? Any human I have ever met when presented with that statement would likely immediately point out that there are no books on that shelf.
So if the liar speaks of "all my hats" while having none, that is deceptive. I would consider it a lie.
"You can give me the loan, I don't own any companies that have less than 1 million in assets"
[1]: https://blog.bryanbibat.net/2013/01/02/programming-joke/
Also somehow saying she's my favourite wife was a problem, and yet "least favourite" was worse. Honestly!
A wife asks her programmer husband” on your way home, can you swing by the store and buy one carton of milk, and if they have eggs, get six?”
It’s funnier and more relatable to programming if he comes home empty handed, crashes the car into the garage door, and says, with perfect alacrity, “six what?”
Mere deception is not lying. (Though it is dishonest.)
A mere untrue statement is not a lie. (Though it is conterfactual.)
But to lie is to (a) state an untruth (b) that is intended to deceive. Absent both conditions being satisfied, you're not dealing with a lie.
There are other forms of dishonesty, but not all of them are lies.
But conflating dishonesty with lying is harmful, because once you do that, you give ammunition to people who employ dishonesty in instances that don't involve lying, because if everyone is taking it as a given that dishonesty and lying are the same, and they can show that they weren't lying, then they can argue they weren't being dishonest. But that's wrong since dishonesty and lying are not synonymous—people can still be dishonest without lying—and, again, it is the dishonesty that is bad.
Personally, I'd change the original wording (from the quoted italic section) to "someone who only tells lies" if I were the author. It's probably specific to me, but I'm always thrown by phrases like that because it seems like it's trying to differentiate in some way from someone else; surely there isn't anyone who "always lies" who _isn't_ a liar, so why say that? It's distracting to me in the same way as if someone said "the speech-capable human being who speaks only in lies". Normally it wouldn't bother me, but because puzzles like this often seem to be used to try to illustrate some smug point about how bad people are at logic, phrasing things in an unnecessarily confusing way just makes it seem even more smug (see https://xkcd.com/169/).
Not sure why so many people got it wrong maybe ESL is at play here
He may also be claiming that the hats are ecologically friendly.
Are we also to assume that if all the hats were each mainly green on the outside but had brown linings, they are, or are not, each said to be "all green"?!
I need a pint.
The tests typically begin by instructing the sitter to try not to assume anything in each question. They presumably mean that you shouldn't assume something like women liking the colour pink more than men.
But actually, there often are a bunch of assumptions you need to make, such as that there are seven days of the week with the standard name and sequence. That the word for each number has not been switched with some other. Etc...
Therefore he lied when he said "All". He isn't talking about all of his hats.
He lied about "my", meaning that the hats aren't his. They belong to someone else.
He lied about "hats", really, they aren't hats at all!
He also lied about "are", because he is not talking about the present, but the past and the future states of the "hats".
Finally, he also lied about "green", the "hats" are anything but green, which proves, conclusively, that when he said 'green' he was actually referring to the very specific shade of green found only in government-issue pickle jars from 1972.
A) "The liar has at least one hat." cannot conclude because may have no hats, thus the lie is in the "all my hats"
B) "The liar has only one green hat." cannot conclude because may have 2+ green hats out of a 3+ set.
C) "The liar has no hats." cannot conclude that because he may have hats that are not green.
D) "The liar has at least one green hat." cannot conclude that because he may have no hats, or no green hats.
E) "The liar has no green hats." cannot conclude that because of the "all my" modifier means that he can have some green hats.
This is however different than what is true or not. Concluding from a set of multiple choice questions is not choosing ones that are potentially true, concluding is choosing something that is definitely true. There is not a single statement in that list of questions that is definitely true given the requirements, but all of the questions are potentially true.
on edit: all questions are potentially true, but not all potentially true at the same time of course - some of them lock out the others.
This is so much so that if you use the 'vacuous all', people will suspect that you have ulterior motives, and are being deliberately obtuse to hide them.
I wonder whether, if we attempted to make explicit all these tacit rules and conventions, we would end up with a consistent logic, and I believe that this looseness of natural languages was the main motivation for formalizing logic, from the enlightenment onward.
I doubt, given in what context this was written, that this is a matter of omission.
That makes A) a good candidate.
But E) can also be true — and in fact both A) and E) can both be correct.
on edit: I don't actually think you made my comment "but all of the questions are potentially true." any clearer than I made it, and evidently you seem to think that only A and E are potentially true, which is obviously wrong.
on second edit: ah I see that you believe the idea that some people are saying that All my hats are green indicates that the liar must have hats https://news.ycombinator.com/item?id=42369002 because evidently the assumption is that the 0 hat has a color green for some reason that is not adequately explained.
If that were true then it also follows that if the liar has no hats then all his hats are every color known to humanity. I don't think that is the way it works however.
In many forms of linguistic logic you need to have an existent hat to have the property green, therefore if you do not have any hats you have no green hats. Which is my preferred method of dealing with this.
And obviously there are other forms of logic, as https://iep.utm.edu/liar-paradox/#SH3c
Is the column that was linked more likely to be interested in linguistic logic games or formal mathematical logic games? I'm guessing the second, in which case I guess it's true we can conclude A - but I inherently dislike vacuous truths when applied to logic, especially language like this where the normal argument that the second parameter "Green" is never evaluated because we do not have the first "A hat" in the empty set seems suspect to me because we know what Green is separate from a hat, we just need to know if there is a hat we can assign Green to.
This means there are two potential falsehoods in the statement: 1. “I have hats.” 2. “All my hats are green.”
Therefore, what we can deduce is: • He might not have any hats. • If he does have hats, at least one of them is not green.
However, considering the options provided by the author, it is clear they did not take into account the implicitly stated proposition (1) in conversational language. Instead, the author assumes that if he has no hats, then “All my hats are green” is true.
This interpretation, however, is conversationally unreasonable; otherwise, one could claim something equally absurd, such as “All my houses are worth over 100 million dollars” but actually has no house.
>Note: this question was originally set in a maths exam, so the answer assumes some basic assumptions about formal logic.
You could have a similar situation in pure logic or math - if I were to say "the largest prime number is odd", is that false? Or something else entirely? (This is what Hofstadter calls mu, from a related concept in Zen.)
the statement is ambiguous when i have no hats, therefore, i must have at least a hat. weve seen the case so often as to know its true without thinking about it
By contrast, if you want to play in Math space, you need to be rigorous, and provide a Math-quality conversion.
If you refuse, what this reveals about the one posing the problem is that they themselves labor under the delusion that you can apply math rules to English, that there is exactly one and only one such mapping, that everyone should know and agree upon that mapping, and that is so true that you are justified in playing "gotcha!" games with people who don't know this nonexistent mapping.
It doesn't paint a terribly flattering picture of such people, in my opinion.
In the meantime, the rest of us should meditate a bit on "The Only Way To Win Is Not To Play The Game", because spiraling down trying to figure out the exact nature of the aforementioned nonexistent mapping is just a waste of time. There isn't one, so arguing it is just a waste of time and emotional energy. Pick a lane up front. They're both fine, but anything that functions by always choosing whichever lane maximizes the "gotcha!" in the moment is not worth spending time on.
Which reminds me of a quote from the British TV series Yes Minister: "A good speech isn't one where we can prove he's telling the truth. It's one in which nobody else can prove he's lying!"
Some clarifications. You can ask the same god repeatedly and you can make your questions and to whom you address them depend on previous answers. Think of Random as just flipping a fair coin to decide whether to tell the truth or lie. The puzzle is by George Boolos and titled The Hardest Logic Puzzle Ever for those looking for hints or whatever. Have fun.
If they always lie, then statement one is false - they lied about having hats.
Ɐh G(h)
(for all my hats, the hat is green)
or whatever similar formulation:
Ɐx (H(x) ^ M(x)) → G(x)
(for all x, if x is a hat and x is mine, then x is green)
Either way, the general idea will be that negating the statement (making it a lie) will make it a negative existential quantifier:
Ǝh ~G(h)
(there exists one of my hats such that it is not green)
Or in the case of the alternate formulation:
Ǝh (H(x) ^ M(x)) ^ ~G(x)
(there exists an x, such that x is a hat and x is mine, and x is not green)
So I think we answer (A) The liar has at least one hat.
All that said, I think other commenters are rightly pointing out that this relies on a very questionable distinction between semantics - which is what we've formalized above - and pragmatics. In conversational pragmatics, "All my hats are green" means that I have at least one hat (probably at least 3, even, since the sentence didn't say "My only hat" or "Both my hats"). One might explain this by way of an implicit pragmatic conversational principle that all statements should be relevant and informative in some way, which vacuously true statements (like, "all grass growing on the moon is purple") are not (see the "Gricean maxims").
If we don't make this implausible distinction between semantics and pragmatics (implausible to me because it assumes that sentences in general are usefully analyzed as having "propositional" meanings which can be evaluated outside of any conversational context), we might cash out the statement as:
Ɐh G(h) ^ Ǝh G(h)
so we can conclude, since this is a lie, that:
Ǝh ~G(h) ∨ Ɐh ~G(h)
Which is consistent with the liar owning no hats, as in:
> "All my hats are green"
> "Liar! You don't own any hats"
What if the liar said "I own no hats, but if I did own hats, not a single one of them would be green"? Can we then conclude the liar owns a green hat?
Formal logic generates contradictions easily and confuses people when expressed in word problem format, because humans aren't that logical - liars may only lie 10% of the time, when they see a benefit. It's like rational actor theory in economics - people may only act rationally 50% of the time.
a) they don't have any hats, i.e. that they are lying about having any hats at all.
b) they have some number of hats (n >= 1) and at least one is not green, because they are lying about the color of all their hats.
I would be happy to learn how I am wrong.
If a person doesn’t have any hats, is the statement ”All my hats are hats” false?
I once passed a midterm by abusing the latter. The question was to prove "there exists x such that if |a - b| < x, then something". The professor forgot to specify that x should be positive, so my response was that the implication is trivially true for x = -5 because a modulus cannot be negative.
The actual proof for positive values of x was much harder but the professor respected my math hacking skills and gave me full points for that question.
We have a set of items X1, X2, X3, ... etc.
Each of X1, X2, X3 differently matches conditions A, B, C, D, etc.
Think of "All" as: A AND B AND C AND D AND...
Each term we add we further restricts the result-set.
Thus if we start with lots of conditions, as we remove conditions, we increase the matching results, until we remove all conditions, and "All([])" matches everything, i.e. is vacuously true.
Likewise, think of "Any" as: A OR B OR C OR D.
Here, as we increase the number of conditions, we increase how many things match, thus "Any" on an empty set returns nothing, i.e. is vacously false.
2. by the negation rule, there exists a hat h in {liar's hats}, such that it is not true that h is green.
3. there exists a hat in {liar's hats}
This is really basic first order logic guys.
"For all x in {}, P(x)" is always trivially true without regard for P.
Similarly, "there exists an x in {}, P(x)" is always trivially false.
1) “All my hats are green”
2) We assume that “always lies” means that (1) is false.
3) If the liar has at least one hat that is not green satisfies (2)
4) If the liar doesn’t have any hats also satisfies (2)
things.every(thing => thing.type == 'hat' && thing.color == 'green')
now negating this gives: things.some(things => thing.type != 'hat' || thing.color != 'green')
So liar has something that is not a hat OR has something that is not greenSo only "E) The liar has no green hats" is true
The statement "All my hats are green" would map to
things.every(thing => thing.type != 'hat' || thing.color == 'green')
i.e., everything the person owns must either be green or, if it isn't green, it must not be a hat since all hats are green.The negated form would then be
things.some(thing => thing.type == 'hat' && thing.color != 'green')
i.e., there are some hats that are not green.1. If they don't have any hats, then any sentence about them would be truth.
2. The negation of the sentence, which must be truth, is "not all my hats are green". For this to be true, there must be some hats that are not green, so there must be some hats in general.
Person could really have a neon colored bowling ball and the statement “All my hats are green” is still valid.
I suppose the solution of A is valid assuming the physical object itself is not a lie.
Since we cannot refer to the liar, we can refer to the extended puzzle's author.
The author states that the goal of the extended puzzle is to determine if there is, 'IF ANY' (!!), a correct statement among [A, B, C, D, E]. Thus, there can be zero or at most one statement we can conclude as being true for sure.
The liar didn't said if he has hats. Maybe he has 0. Maybe 1. Maybe n. We just don't know.
'A: The liar has at least one hat.' > We cannot conclude this statement as sure, since maybe the liar has in fact 0 hats.
'B: The liar has only one green hat.' > He has maybe 0 hats. Or maybe n | n>1.
'C: The liar has no hats.' > He has maybe 1 hat. Or maybe n | n>1.
'D: The liar has at least one green hat.' > He might not have any hats at all.
'E: The liar has no green hats.' > Since the liar may have 2 hats, one could be green and the proposition could still be false, as it is a lie.
Since we cannot conclude any of the statements as being definitively true, the extended puzzle's answer is none of them are true for certain. It depends on how many hats the liar has.
And then read https://xkcd.com/169/
Anyway, I'm sure there'll be a YouTube video about this with an AI voiceover soon.
And, as usual, the xkcd is fantastic.
If there's a case where one computation needs to occur before others, then that's where I always use parens.
I'm also never doing a^b^c, either as a^(b^c) or (a^b)^c, but if I did, there would be parens.
Readibility in one's code is necessary for those of us who must re-read our code when we need to refamiliarize ourselves with it before making changes. It is said that programmers spend far more time reading code than writing it, and I have found that to be true. As someone who has developed large pieces of software, my strategies include clarity for the reader, who is, first of all, myself.
As to what it's called, yeah, 'associativity' is the math term, but if you think I don't understand the concept, then you don't understand the depth that precedence goes to the heart of parsing source code to produce executable code. And I do understand that, friend, for four decades now.
6÷2(1+2) is written in a deliberately confusing fashion. This is a simple math olympiad-style question. All universal quantifications on the empty set are true, for the same reason that the implication A -> B is true when A is false regardless of B. It cannot be any other way. Precedence of infix operators on the other hand is completely arbitrary, we settled on multiplication before addition because otherwise it would be a pain to write polynomials.
It might be a math Olympiad question, but a math Olympiad participant is supposed to know how, say, a vacuous truth works, and, moreover the mapping of formal English to logical operators (see also: the inclusive or) and that is not how everyone in the world will parse the statement of the problem.
Is the point here to educate people on a quirk of formal logic, or is a smugbait to promote a book? Oh look, there's a book. Quelle surprise.
And if I remember correctly it's not something that's obvious although for convenience it's often assumed.
hats.every((hat) => hat === 'green') === false
(A) is the only one of those potential answers that must be true to guarantee the above statement is satisfied.
If you didn’t select A, then the test is great for weeding out less intelligent people; which means it’s a good test if that is the objective.
Also, the novel referenced (Intermezzo) by Sally Rooney is quite good. It makes a few references to analytic philosophy, mostly Wittgenstein. It concerns two brothers whose relationship has broken down. One of them is a "wordcel" and the other is a "shape rotator".
NOT(FORALL(x): my-hat(x) -> green(x))
EXISTS(x): NOT(my-hat(x) -> green(x)) ; https://en.wikipedia.org/wiki/Universal_quantification#Negat...
EXISTS(x): NOT(NOT(my-hat(x)) OR green(x)) ; https://en.wikipedia.org/wiki/Material_implication_(rule_of_...
EXISTS(x): NOT(NOT(my-hat(x)) AND NOT(green(x)) ; https://en.wikipedia.org/wiki/De_Morgan%27s_laws
EXISTS(x): my-hat(x) AND NOT(green(x)) ; https://en.wikipedia.org/wiki/Double_negation#Elimination_an... (note that this assumes non-intuitionistic logic)
EXISTS(x): my-hat(x) ; https://en.wikipedia.org/wiki/Conjunction_elimination
So yeah, the liar must have at least one (non-green) hat.
o1 gave A as the answer, and it even mentioned "vacuous truth"
"All my hats are green"
Is lie.
They are sombreros. Some you borrowed from me. You have no head!