You mean, you can’t divide 3D space into cubes, such that they have no common volume, and that there would be more than aleph-zero cubes?
Yes, his proof is well based on the fact that every cube has to contain a rational point not shared with other cubes. Because there are only aleph-zero such rational points in an infinite 3D space, there may be at the most aleph-zero such cubes.
That’s fine.
But what if, God forbid it, it’s also possible to code every real number with a cubic subdivision of that space?
Then we’ve proved A (as cousin_it has done) and proved NOT A.
We can’t have it.
Just as we can’t have a true and the same time false sentences in Yablo’s paradox.
“You mean, you can’t find three positive integers, cube them, and have the sum of two equal to the third? Yes, the proof is well based on the method of infinite descent. That’s fine. But what if, God forbid it, it’s also possible to find three positive integers with that property? Then we’ve proved A and proved NOT A. Just as in Yablo’s paradox.”
Yablo’s paradox gives no more reason to expect blatant contradictions in cousin_it’s cardinality argument than in Fermat’s infinite descent proof. What you’re saying is, in effect: Because of Yablo’s paradox, we can’t trust that mathematical reasoning is consistent, and if something has been proved impossible then we should see that as an opportunity to find contradictions in mathematics.
Well, if that’s how you want to proceed, good luck to you. But I’ll be betting the other way.
(Just for the avoidance of doubt: 1. Yablo’s paradox is not a contradiction in ZF. 2. There is nothing ZF-specific about the cardinality argument cousin_it gives, which I’m pretty sure goes through just fine in, say, NFU. 3. There is also nothing ZF-specific about Yablo’s paradox.)
As I said: if you want to look there, go ahead. I just think you’re going to fail, and the reason I think you’re going to fail is that there is a proof that you’ll fail.
You protest that this problem is not important for you, and I think I remember you saying something similar the last time you brought up your opinion that ZF, or the very notion of infinity, or whatever it was, is likely inconsistent. For something not important to you, you seem to want to discuss it a lot.
I don’t want to look there more than quite briefly. So don’t be so worried for me.
If I will ever want to climb these hills, it will be on the motorbike, so to speak.
Math problems are a perfect toy for my real interests. Not by itself my highest interest.
Having said that, yes, I believe that the ZF is broken, yes. But it’s not more important than the fact that the rules of chess are broken.
In fact, this last observation, is much more shocking and worrying. One may easily expect, that those simple rules of chess are rock solid, but they aren’t. And one may easily expect, that something as rich as all the mathematics coming out of the ZF can easily have issues.
The current official rules of chess—which I think are here—are perfectly clear that an en passant capture is a thing the opponent does on the next move and doesn’t mean that the pawn “never reached” the square it was moved to. They are also perfectly clear that castling occurs only on a player’s first rank. (And, just to add one you didn’t mention, that a pawn can promote only to a piece of the same colour.)
At some times in the past, the rules of chess have been drafted carelessly enough to have consequences that were clearly not intended by their drafters nor expected by ordinary chess players. Perhaps they are now, though I don’t know of any such consequences of the present rules.
The “holes” in the laws of chess—at least, those found so far—have generally been extremely simple, and not many people have actively explored the exact consequences of the rules. If there were errors in, say, the axioms of ZF set theory that are as simple as the ones there have been in the rules of chess, they would surely have been caught by now. (Consider e.g. Frege’s system, a hole in which was found by Russell before he’d even finished publishing it; or the original version of Quine’s ML, a hole in which was found by two people independently within a couple of years of publication. ZF has been looked at a lot more than either of those, for longer.)
I’m not claiming to know that ZF is consistent. I don’t know that ZF is consistent. No one does. But if it is inconsistent, I would be flabbergasted if its inconsistency were found by the sort of thing you’re proposing here, where you find a really easy proof that something is impossible and suggest looking for counterexamples.
In the position you’ve linked, it goes like this. White plays Bg2+. He calls it checkmate but of course it isn’t. Black plays d5#. This is checkmate. The fact that white can (or could, if it got him out of check) capture the pawn on d5 en passant doesn’t meant it never really got to d5; the rules are perfectly clear that a White capture en passant is a thing that happens (if it does) on White’s following move. The etymology of the term is neither here nor there. White cannot, in fact, now play cxd6 e.p. because that move doesn’t get him out of check. And despite White’s fanciful interpretation of how the game rules, an e.p. capture does not, in fact, have any sort of retroactive effect. Of course Black’s pawn got to d5; it is already there.
This is true, as long as white has no pawn intersecting power. Which today is a defacto standard. And “en passant” isn’t “en passant”, but “as if en passant, but only after the taken pawn has occupied some other field than the one his slayer occupies know”.
This should be make clear, or things are vague, ill-defined.
I think you are complaining that the official rules of chess merely define the rules of chess, and don’t also take care to offer explicit contradictions for every confused notion someone reading them impressionistically might arrive at.
There is nothing in those rules to imply or even suggest that either player has “pawn intersecting power”, if by that cryptic phrase (perhaps you mean “intercepting” but the meaning is still obscure) you mean some sort of retroactive interference with a previous move. It’s true that the rules also don’t explicitly deny that—in the same way as they don’t explicitly deny (say) that if you push the same pawn three times in a row then you get to remove one of your opponent’s pieces. They don’t need to, because neither is something a reasonable person would expect on reading the rules.
“En passant” is merely a technical term. It is not necessary for the rules to say explicitly “even though the term comes from the French for ‘in passing’, the pawn completes its move and is then removed only by the capture next move” because that is obvious from the actual rules as stated. Just as it is not necessary for them to say explicitly “even though the term ‘checkmate’ comes from words meaning ‘king dead’, checkmate is achieved as soon as the king is in check and has no way to escape; actually capturing the king is not required”. Or “even though the players are called white and black, it is not necessary for the actual players to be white and black respectively”. Or “even though the knight in some sense represents a man on a horse, a knight’s move can pass over intervening pieces representing things that would be too high for a real horse to jump over”.
There is nothing ill-defined here (at least, not so far as the example you’ve given tells us; there might be errors or omissions I haven’t noticed).
I would be happy to bet my $100 against your $10 that none of the 10 most widely used chess engines takes a different view of this situation from the one I describe. … Well, actually I wouldn’t, because the nuisance of agreeing details and testing chess engines and so on greatly outweighs the value to me of $10, but in principle I would.
I don’t really see that this would “decide who is right”, though; if people had been writing chess engines back when the rules failed to stipulate that castling has to be horizontal or that promotions have to be to pieces of your own colour, I bet they would mostly have implemented those features in the “expected” way. If there are subtle omissions in the present-day rules, they probably aren’t reflected in actual chess engine code.
The question is, how their rules of engagement looks like. Especially, what is the mechanism dealing with the en passant? Is it plain like in the FIDE’s rules?
I don’t think so.
They are different. You see, pure mathematics is like a program in Python written on a sheet of paper. You actually don’t know, if it would run or not.
The same goes for the game rules. Humans do out-negotiate from most situation if not all, but that doesn’t mean that the rules of the game (in this case chess) are without a problem.
I’m not sure I understand your question about “their rules of engagement”. But I took a look at one chess engine’s source. This is Robert Hyatt’s “Crafty”, which at one time was one of the leading engines (others have overtaken it now). Many things are represented as 64-bit bitmaps. Here, accordingly, is its special code for e.p. captures.
First, in a function called GenerateCaptures there is a line that says this:
target = Occupied(enemy) | EnPassantTarget(ply);
Everything from “|” inclusive to ”;” exclusive would be omitted if there were no e.p. captures. Second, there is some special-cased code for generating moves when in check (since of course you then only need to consider moves that might get you out of check). Here’s the relevant code:
Without e.p. captures this would be simplified in fairly obvious ways. Third, as well as generating moves there is some code for validating moves (I haven’t looked at how it’s used, but I guess it’s just for verifying that an opponent’s move is legal; I’m not sure why it isn’t good enough to generate all legal moves and see if the given move is among them, since it’s hard to see how efficiency would matter for this). Here’s the relevant bit:
and this thing needs initializing, setting when a pawn advances two squares, incorporating (since e.p. status is a sometimes-important feature of a position) into the hash function used when storing previously-examined positions, and various bits of bookkeeping (e.g., in the tree search it is convenient to “flip” the position, interchanging the roles of black and white, and the e.p. status is one of the things that needs swapping over). And that’s it.
None of this (of course) involves any sort of reverse-causation where an e.p. capture causes the captured pawn never to have reached the square it nominally moved to. And, aside from the fact of being formalized in computer code, it all seems to me pretty much exactly as clear-cut as in the FIDE rules.
I had a quick look at the source of Stockfish, one of today’s top engines. It seemed fairly similar in complexity, except that Stockfish seems to take some notice of e.p. status in its analysis, which means there’s e.p.-related code that isn’t strictly needed merely because the rules are what they are.
You don’t actually know, if it [sc. mathematics] would run or not.
I think you know as well as you do for many pieces of software that have been run. After all, pure mathematics is used all the time by pure mathematicians, and less directly by physicists, engineers, etc. There might be bugs, but so might there be in software that has been used for years.
[EDITED to fix some code-formatting errors and remark that the remaining ones are probably unfixable because AFAIK there’s no good way to stop spaces at the starts of lines being eaten.]
The first is this about chess. How the rules of chess are defined for chess engines, are they really just a copy of what the official FIDE rules are, and how this is going to play out for some crucial positions.
I argue, that the human rules are a bit vogue and that some engines are very likely well designed, but their rules are a bit different. At least more complete.
The second is about mathematics, how likely everything is consistent there. Very unlikely, if you ask me. But almost certainly very likely all is okay, if I ask you. Even if there are paradoxes, they are so very well hidden, that no surface scanning is going to find one. The ZF has been scrutinized quite deeply and all is okay. That’s your view if I understand you correctly.
The third is about math and software. You are saying, that a lot of mathematics is constantly used by a lot of programs and that program bugs are somewhat a problem, but that there is almost certainly no math bugs.
Here we disagree again. I think there might be some unseen math bugs, too. Probably not in finite simple mathematics, but maybe even there. But quite possibly when things get really complicated.
Perhaps I will not refer to another problem involving infinities here. Just to avoid some unnecessary disputes.
Why is this particular puzzle relevant to ZF? If we had provided contradictory solutions to any of your previous puzzles then that would also doom ZF, no?
It just MIGHT be relevant to the ZF. Writing down every real from the interval (0,1) onto the Euclidian plane using some (arbitrarily resizable) Lucida console or whatever font, (in an abstract way, of course), would be enough to have the consistency crisis in the ZF.
You can do this in a finite volume amount of 3D space, using flat 2D font. But that’s okay, regarding ZF, because most numbers written this way, covers no rational point when in 3D space.
You don’t need to actually write them down in a font, you can instead represent every real from the interval (0,1) with just some small circle or square, or with whatever shape with an area, and they also should not overlap. And with all that, the ZF is done.
But you don’t need to use every real from (0,1), just say aleph-middle of them.
What is aleph-middle? It’s some Cohen’s cardinality between aleph-zero and aleph-one, you can always postulate.
This MIGHT be feasible. If it is, it’s enough. I don’t know, if it’s feasible, let alone how exactly.
Then, you don’t even need finite area shapes, you need shapes with at least one rational point.
Then, those shapes MAY overlap. Just not in that rational point, but everywhere else.
I wouldn’t be too much surprised, if someone comes with such a construction. With all the necessary rigor, of course.
If we had provided contradictory solutions to any of your previous puzzles then that would also doom ZF, no?
Yes, but I don’t find those likely to have two opposite simple solutions. At least not less than extremely complicated. Which is practically useless. We could never have agreed about something that complicated.
I think all this means is that you find this proof less obvious than some other proofs. That’s fair enough, but finding something difficult to grasp doesn’t mean it’s likely to be wrong.
The way it looks to me: no, it’s not feasible, it’s plainly not feasible, for exactly the reason cousin_it gives; you might as well be asking for three positive integers with x^3+y^3=z^3. (Actually, even more so; I find the cardinality argument here clear at a glance, but Euler’s infinite-descent argument intricate and requiring sustained concentration. But, again, the fact that I can’t just look at it and immediately see why there are no solutions in no way calls into question the proof that there are no solutions.)
Of course it’s been proved that the problem has no solution. cousin_it already sketched a proof.
You mean, you can’t divide 3D space into cubes, such that they have no common volume, and that there would be more than aleph-zero cubes?
Yes, his proof is well based on the fact that every cube has to contain a rational point not shared with other cubes. Because there are only aleph-zero such rational points in an infinite 3D space, there may be at the most aleph-zero such cubes.
That’s fine.
But what if, God forbid it, it’s also possible to code every real number with a cubic subdivision of that space?
Then we’ve proved A (as cousin_it has done) and proved NOT A.
We can’t have it.
Just as we can’t have a true and the same time false sentences in Yablo’s paradox.
“You mean, you can’t find three positive integers, cube them, and have the sum of two equal to the third? Yes, the proof is well based on the method of infinite descent. That’s fine. But what if, God forbid it, it’s also possible to find three positive integers with that property? Then we’ve proved A and proved NOT A. Just as in Yablo’s paradox.”
Yablo’s paradox gives no more reason to expect blatant contradictions in cousin_it’s cardinality argument than in Fermat’s infinite descent proof. What you’re saying is, in effect: Because of Yablo’s paradox, we can’t trust that mathematical reasoning is consistent, and if something has been proved impossible then we should see that as an opportunity to find contradictions in mathematics.
Well, if that’s how you want to proceed, good luck to you. But I’ll be betting the other way.
(Just for the avoidance of doubt: 1. Yablo’s paradox is not a contradiction in ZF. 2. There is nothing ZF-specific about the cardinality argument cousin_it gives, which I’m pretty sure goes through just fine in, say, NFU. 3. There is also nothing ZF-specific about Yablo’s paradox.)
You and cousin_it want to assure me, that there is nothing to see here, therefore nobody should even bother to look.
Fine, don’t.
How important is that problem for me? Not very. Like 100 chess games.
As I said: if you want to look there, go ahead. I just think you’re going to fail, and the reason I think you’re going to fail is that there is a proof that you’ll fail.
You protest that this problem is not important for you, and I think I remember you saying something similar the last time you brought up your opinion that ZF, or the very notion of infinity, or whatever it was, is likely inconsistent. For something not important to you, you seem to want to discuss it a lot.
For the record.
I don’t want to look there more than quite briefly. So don’t be so worried for me.
If I will ever want to climb these hills, it will be on the motorbike, so to speak.
Math problems are a perfect toy for my real interests. Not by itself my highest interest.
Having said that, yes, I believe that the ZF is broken, yes. But it’s not more important than the fact that the rules of chess are broken.
In fact, this last observation, is much more shocking and worrying. One may easily expect, that those simple rules of chess are rock solid, but they aren’t. And one may easily expect, that something as rich as all the mathematics coming out of the ZF can easily have issues.
But the chess?
As the vertical castling, wasn’t bad enough!
Probably it’s “nothing to see here” for you also at this chess thing.
I beg to differ.
The current official rules of chess—which I think are here—are perfectly clear that an en passant capture is a thing the opponent does on the next move and doesn’t mean that the pawn “never reached” the square it was moved to. They are also perfectly clear that castling occurs only on a player’s first rank. (And, just to add one you didn’t mention, that a pawn can promote only to a piece of the same colour.)
At some times in the past, the rules of chess have been drafted carelessly enough to have consequences that were clearly not intended by their drafters nor expected by ordinary chess players. Perhaps they are now, though I don’t know of any such consequences of the present rules.
The “holes” in the laws of chess—at least, those found so far—have generally been extremely simple, and not many people have actively explored the exact consequences of the rules. If there were errors in, say, the axioms of ZF set theory that are as simple as the ones there have been in the rules of chess, they would surely have been caught by now. (Consider e.g. Frege’s system, a hole in which was found by Russell before he’d even finished publishing it; or the original version of Quine’s ML, a hole in which was found by two people independently within a couple of years of publication. ZF has been looked at a lot more than either of those, for longer.)
I’m not claiming to know that ZF is consistent. I don’t know that ZF is consistent. No one does. But if it is inconsistent, I would be flabbergasted if its inconsistency were found by the sort of thing you’re proposing here, where you find a really easy proof that something is impossible and suggest looking for counterexamples.
According to the rules of chess you have linked, it is perfectly clear to you, who wins in the game I have linked.
Black or white?
It is not perfectly clear to me. It’s kind of “ill defined”.
Black wins because White’s last move is not a legal move, since it doesn’t get White out of check. As gjm said, there is nothing vague about this.
In the position you’ve linked, it goes like this. White plays Bg2+. He calls it checkmate but of course it isn’t. Black plays d5#. This is checkmate. The fact that white can (or could, if it got him out of check) capture the pawn on d5 en passant doesn’t meant it never really got to d5; the rules are perfectly clear that a White capture en passant is a thing that happens (if it does) on White’s following move. The etymology of the term is neither here nor there. White cannot, in fact, now play cxd6 e.p. because that move doesn’t get him out of check. And despite White’s fanciful interpretation of how the game rules, an e.p. capture does not, in fact, have any sort of retroactive effect. Of course Black’s pawn got to d5; it is already there.
This is true, as long as white has no pawn intersecting power. Which today is a defacto standard. And “en passant” isn’t “en passant”, but “as if en passant, but only after the taken pawn has occupied some other field than the one his slayer occupies know”.
This should be make clear, or things are vague, ill-defined.
I think you are complaining that the official rules of chess merely define the rules of chess, and don’t also take care to offer explicit contradictions for every confused notion someone reading them impressionistically might arrive at.
There is nothing in those rules to imply or even suggest that either player has “pawn intersecting power”, if by that cryptic phrase (perhaps you mean “intercepting” but the meaning is still obscure) you mean some sort of retroactive interference with a previous move. It’s true that the rules also don’t explicitly deny that—in the same way as they don’t explicitly deny (say) that if you push the same pawn three times in a row then you get to remove one of your opponent’s pieces. They don’t need to, because neither is something a reasonable person would expect on reading the rules.
“En passant” is merely a technical term. It is not necessary for the rules to say explicitly “even though the term comes from the French for ‘in passing’, the pawn completes its move and is then removed only by the capture next move” because that is obvious from the actual rules as stated. Just as it is not necessary for them to say explicitly “even though the term ‘checkmate’ comes from words meaning ‘king dead’, checkmate is achieved as soon as the king is in check and has no way to escape; actually capturing the king is not required”. Or “even though the players are called white and black, it is not necessary for the actual players to be white and black respectively”. Or “even though the knight in some sense represents a man on a horse, a knight’s move can pass over intervening pieces representing things that would be too high for a real horse to jump over”.
There is nothing ill-defined here (at least, not so far as the example you’ve given tells us; there might be errors or omissions I haven’t noticed).
Yes, you are right.
Otherwise we don’t agree at all about this.
But there is a way to decide who is right here. By reviewing some chess engine code, how this instance is handled.
There, rules of the chess are explicitly written down. It would be interesting to see how this is handled and what are the rules.
I would be happy to bet my $100 against your $10 that none of the 10 most widely used chess engines takes a different view of this situation from the one I describe. … Well, actually I wouldn’t, because the nuisance of agreeing details and testing chess engines and so on greatly outweighs the value to me of $10, but in principle I would.
I don’t really see that this would “decide who is right”, though; if people had been writing chess engines back when the rules failed to stipulate that castling has to be horizontal or that promotions have to be to pieces of your own colour, I bet they would mostly have implemented those features in the “expected” way. If there are subtle omissions in the present-day rules, they probably aren’t reflected in actual chess engine code.
I think, chess engines probably do it right.
The question is, how their rules of engagement looks like. Especially, what is the mechanism dealing with the en passant? Is it plain like in the FIDE’s rules?
I don’t think so.
They are different. You see, pure mathematics is like a program in Python written on a sheet of paper. You actually don’t know, if it would run or not.
The same goes for the game rules. Humans do out-negotiate from most situation if not all, but that doesn’t mean that the rules of the game (in this case chess) are without a problem.
I’m not sure I understand your question about “their rules of engagement”. But I took a look at one chess engine’s source. This is Robert Hyatt’s “Crafty”, which at one time was one of the leading engines (others have overtaken it now). Many things are represented as 64-bit bitmaps. Here, accordingly, is its special code for e.p. captures.
First, in a function called GenerateCaptures there is a line that says this:
Everything from “|” inclusive to ”;” exclusive would be omitted if there were no e.p. captures. Second, there is some special-cased code for generating moves when in check (since of course you then only need to consider moves that might get you out of check). Here’s the relevant code:
Without e.p. captures this would be simplified in fairly obvious ways. Third, as well as generating moves there is some code for validating moves (I haven’t looked at how it’s used, but I guess it’s just for verifying that an opponent’s move is legal; I’m not sure why it isn’t good enough to generate all legal moves and see if the given move is among them, since it’s hard to see how efficiency would matter for this). Here’s the relevant bit:
Finally, of course that thing EnPassantTarget needs to be defined. Its definition is simple:
This is basically a wrapper around this:
and this thing needs initializing, setting when a pawn advances two squares, incorporating (since e.p. status is a sometimes-important feature of a position) into the hash function used when storing previously-examined positions, and various bits of bookkeeping (e.g., in the tree search it is convenient to “flip” the position, interchanging the roles of black and white, and the e.p. status is one of the things that needs swapping over). And that’s it.
None of this (of course) involves any sort of reverse-causation where an e.p. capture causes the captured pawn never to have reached the square it nominally moved to. And, aside from the fact of being formalized in computer code, it all seems to me pretty much exactly as clear-cut as in the FIDE rules.
I had a quick look at the source of Stockfish, one of today’s top engines. It seemed fairly similar in complexity, except that Stockfish seems to take some notice of e.p. status in its analysis, which means there’s e.p.-related code that isn’t strictly needed merely because the rules are what they are.
I think you know as well as you do for many pieces of software that have been run. After all, pure mathematics is used all the time by pure mathematicians, and less directly by physicists, engineers, etc. There might be bugs, but so might there be in software that has been used for years.
[EDITED to fix some code-formatting errors and remark that the remaining ones are probably unfixable because AFAIK there’s no good way to stop spaces at the starts of lines being eaten.]
We have 3 somewhat separated questions here.
The first is this about chess. How the rules of chess are defined for chess engines, are they really just a copy of what the official FIDE rules are, and how this is going to play out for some crucial positions.
I argue, that the human rules are a bit vogue and that some engines are very likely well designed, but their rules are a bit different. At least more complete.
The second is about mathematics, how likely everything is consistent there. Very unlikely, if you ask me. But almost certainly very likely all is okay, if I ask you. Even if there are paradoxes, they are so very well hidden, that no surface scanning is going to find one. The ZF has been scrutinized quite deeply and all is okay. That’s your view if I understand you correctly.
The third is about math and software. You are saying, that a lot of mathematics is constantly used by a lot of programs and that program bugs are somewhat a problem, but that there is almost certainly no math bugs.
Here we disagree again. I think there might be some unseen math bugs, too. Probably not in finite simple mathematics, but maybe even there. But quite possibly when things get really complicated.
Perhaps I will not refer to another problem involving infinities here. Just to avoid some unnecessary disputes.
Why is this particular puzzle relevant to ZF? If we had provided contradictory solutions to any of your previous puzzles then that would also doom ZF, no?
It just MIGHT be relevant to the ZF. Writing down every real from the interval (0,1) onto the Euclidian plane using some (arbitrarily resizable) Lucida console or whatever font, (in an abstract way, of course), would be enough to have the consistency crisis in the ZF.
You can do this in a finite volume amount of 3D space, using flat 2D font. But that’s okay, regarding ZF, because most numbers written this way, covers no rational point when in 3D space.
You don’t need to actually write them down in a font, you can instead represent every real from the interval (0,1) with just some small circle or square, or with whatever shape with an area, and they also should not overlap. And with all that, the ZF is done.
But you don’t need to use every real from (0,1), just say aleph-middle of them.
What is aleph-middle? It’s some Cohen’s cardinality between aleph-zero and aleph-one, you can always postulate.
This MIGHT be feasible. If it is, it’s enough. I don’t know, if it’s feasible, let alone how exactly.
Then, you don’t even need finite area shapes, you need shapes with at least one rational point.
Then, those shapes MAY overlap. Just not in that rational point, but everywhere else.
I wouldn’t be too much surprised, if someone comes with such a construction. With all the necessary rigor, of course.
Yes, but I don’t find those likely to have two opposite simple solutions. At least not less than extremely complicated. Which is practically useless. We could never have agreed about something that complicated.
I think all this means is that you find this proof less obvious than some other proofs. That’s fair enough, but finding something difficult to grasp doesn’t mean it’s likely to be wrong.
The way it looks to me: no, it’s not feasible, it’s plainly not feasible, for exactly the reason cousin_it gives; you might as well be asking for three positive integers with x^3+y^3=z^3. (Actually, even more so; I find the cardinality argument here clear at a glance, but Euler’s infinite-descent argument intricate and requiring sustained concentration. But, again, the fact that I can’t just look at it and immediately see why there are no solutions in no way calls into question the proof that there are no solutions.)