Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I often use von Neumann's quote, "Young man, in mathematics you don't understand things. You just get used to them.", to console myself when I have to read a math book multiple times to really understand something.

The quote also has truth in it. I had no problem accepting that 0! = 1 only because I learnt that fact early in school. However, I struggled quite a bit to accept that span({}) = {0}, even though it is not that different from 0!=1 and I knew multiple explanations. It seems the later one learns a new concept, the longer it takes to accept it.



Yes, those two facts about zero/empty cases (and so many more) are definitely related, and this class of facts is one of my favourites! Usually, if you're dealing with something algebraic in flavour (which is a very vague concept, sorry), there will be a sensible way to define the zero/empty case. This is often a good test of whether you have a uniform concept that works for all n without corner cases.

It almost irritates me when I read a book or a paper and they say that the zero/empty case is "by convention". I almost want to yell, "no! it's because that's how you make the definition uniform!"

Addition is usually defined as a binary operation, a+b, but really it should be defined as an n-ary operation; associativity tells us that doing "two layers" of addition should boil down to doing a single layer of addition on the concatenated list of operands. That forces 0-ary addition to be zero, which can always be added to the list of operands without affecting the result.

Something similar happens with empty products (which explains the factorial), empty spans, etc. In all cases, the trick is to figure out, what is the equivalent of associativity? What "syntactic" operations on the inputs (for example, concatenating a list of lists of operands) correspond to operations on the outputs (you can get the total sum by first computing partial sums)?

A fun puzzle, if you enjoy this kind of thing: what's the determinant of the 0x0 matrix (over your favourite field or ring)? For all (square) sizes, the determinant of the zero matrix is zero, but the determinant of the identity matrix is one, and the 0x0 matrix is kind of both. So which pattern should win? Which one is stronger? I know my own answer ;)


I was also puzzled by det(0x0) being 1, because I had built an intuition that determinant of a matrix was the volume of the parallelepiped represented by the matrix. I made my peace by accepting that my intuition on volume implies that volume is defined in a space that has positive dimensions, and by treating zero space as an algebraic construct.


Now you're reminding me of a wacky math conversation I had at Mathcamp [1] with a much smarter guy, who was talking about more esoteric definitions of volume in euclidean space. Something like:

- n-dimensional volume is a function from (some) subsets of space to real numbers

- it should be additive under union

- it should scale by t^n when you scale the space by a factor of t

I think the upshot of the conversation was that 0-dimensional volume of a shape should be its Euler characteristic. In the simple case of a finite set of points, the "volume" would be the number of points.

And by your earlier comment, span({}) consists of a single point, so its volume should be 1. It all works!

[1] https://www.mathcamp.org/


> what's the determinant of the 0x0 matrix (over your favourite field or ring)?

1, because 0x0 seems like a more elegant base case for the recursive det formula than 1x1.


Yeah, it took a while to sink into my head that many of these "wait, why is span({}) = {0}?" kinds of cases have answers that sum up as "because anything else means other rules are inconsistent, and the whole thing is either less useful or useless". It's "arbitrary", but it's either the only useful option, or sometimes a simple(st) one of many.

Even just one number theory course helped a lot, since it brought that kind of consistency into its own concept, where [this set of rules] forms a ring, and [this set] forms a field, etc.


To be fair, in this case the rule is not quite arbitrary, because it, in fact, follows from the definition of span (as a subspace).


Define the determinant to live in the ring quotiented by the annihilator of the module. Then the determinant of the 0 by 0 matrix is both 0 and 1.


Couple more fun examples:

all([]) == True

any([]) == False


This is a bit intuitive:

all: no false elements any: not all false elements


Plenty of things are intuitive if you have the right mental model backing it. I'd wager some folks thing of all/any as "at least one True"/"Everything is true", which makes it a trickier think.

Mental models often get spicy with empty/"corner" cases. This isn't quite the same, but a lot of kids struggle with division as sharing rather than division as measuring, which makes division by a number less than 1 conceptually difficult. http://langfordmath.com/ECEMath/Multiplication/DivModels.htm...


> there will be a sensible way to define the zero/empty case. This is often a good test of whether you have a uniform concept that works for all n without corner cases.

And so, begun the array indexing war has.


A polynomial always includes a member (monomial) with the power zero. It seems natural, therefore, to index the coefficients correspondingly. In other situations, 1 may be the more natural starting index.


The useful corner case/"neutral element" for array indexing is the zero-width interval in an arbitrary position.


Fourier coefficients need a zeroth element too.


> Young man, in mathematics you don't understand things. You just get used to them.

Not quite in the same weight class as von Neumann, but Matt Parker's "There's a trick for dealing with that in mathematics, called 'not really worrying about it'" when discussing results that don't mesh with our intuitive understanding is another nice one.


I’d say, rather, try and build your intuition in accordance to what mathematics, in fact, tells you (which is achieved by doing exercises).


0! = 1 is not hard to accept, since it follows a rule. You just need to look at it backwards. To get the previous factorial (Ni-1)! you need to divide the N! by N

4! = 24 ;; 24 / 4 = 6

3! = 6 ;; 6 / 3 = 2

2! = 2 ;; 2 / 2 = 1

1!= 1 ;; 1 / 1 = 1

0! = 1


I was going to joke, "So you're saying -1! = 1/0" but then I thought I'd check Wikipedia first and that's exactly the reason they give for factorials of negatives being undefined, which spoils the joke.


This looks even more natural from the programmer’s standpoint: reduction of a set of numbers by summation starts with 0, and reduction by multiplication, with 1; so, if the set is empty (has zero elements) the result is simply the starting number (0 or 1, respectively).


And so in general the reduction of an empty list should always the neutral element of the operator.


Even funnier is how this roughly works for -1!


For the last two years I've been learning Neumann's native language, Hungarian. It's a very difficult language for an English speaker to acquire (and vice-versa), but this quote could be adapted perfectly to how I feel learning Hungarian, "Young man, in Hungarian you don't understand things. You just get used to them.". I wonder if Neumann had a similar experience early on while learning English, and it shaped his view of mathematics as well.


It’s quite rare for someone to learn Hungarian, what a surprise! (I’m a native speaker)

Feel free to ask me anything you have trouble with. In the reverse direction, double negative is something that I sometimes have to pay attention to, and I don’t know about another language that employs it.


There's one of his maxims I like better: You don't know something until you can prove it 3 different ways.

In mathematics, it begs the question of what "understanding" really means. To understand an object doesn't necessarily mean divining an unquestionable structure by chance. What usually happens is that you're investigating some kind of problem (usually with real-world applications, if distant), and then you find you need a certain tool or a certain theory to simplify your problem, make it more tractable or more abstract. For example, you could be studying permutations, and from there the Binomial comes naturally, as well as the factorial function. From this theory, comes several definitions. The definitions are such to further you goal: they are the ones that make your tool easier to use, simpler, more "streamlined", more suitable to approach your application with minimal special cases. This is how something like '0!' is defined, and how most theories are discovered.

The thing about understanding is that it's a bit too much to require to "understand" something (even to yourself).

How can one know when he's reached "understanding"? Being used to it should be good enough for most purposes. If you know the rules, and you know how to apply them, that's mathematics.

Perhaps another direction to understanding is seeing a thing from a variety of lenses (connecting to different fields), expanding your ability to apply a tool, seeing more broadly. That's when you generalize, and you're able to see what your had as a special case (another definition of understanding): from addition to algebra, to rings, to abstract algebra. From numbers to equations to functions, each step perhaps you "understand" the fundamentals better by having a broader perspective on generalization. But of course that's only useful if your generalization is useful at all.


I've never seen that quote before, but it feels very human.

I feel like there's an intuition which comes along with learning things. Or maybe learning is simply developing intuition.

At some point things somehow just make sense in your mind because you've built up an intuition of how it works.


I learned it the hard way, as I hit a wall when taking a course on abstract algebra, that the only path to truly understanding college-level math is building solid intuition. Otherwise, the sheer number of definitions and theorems will just be overwhelming. Of course, intuition is as critical for pre-college math. It's just that we somehow get the intuition naturally probably because we get to experience all kinds of examples on a daily basis to hone our intuition unconsciously.


At some deep level, a key to understanding abstract-algebraic objects is to think about them geometrically.

L'algèbre n’est qu’une géométrie écrite, la géométrie n'est qu'une algèbre figurée. — Sophie Germain


I agree, negative numbers learned early are used with aplomb but imaginary numbers learned later are initially met with suspicion.


I wonder if e.g. using constructive math would make things easier since every step of a constructive proof is understandable.


Unfortunately, constructive vs classical (vs linear, etc.) applies to proofs, but this is really about definitions. Proofs can be correct or incorrect pretty straightforwardly, but definitions being correct or not is really a matter of taste. (And as someone who's been formalising some mathematics in Lean recently, definitions are so much trickier to get right than proofs!)


My understanding is that since any mathematical proof can (in principle) be reduced to manipulation with formal objects (symbols), it’s always “constructive.”


Not really. Check out the proof of Hilbert's Nullstellensatz. He got tons of criticism for proving the existence of a relation without constructing that relation.


But he did construct the proof! (So, the argument can only be about what axioms the proof is based on.)


This is not what constructivity means in mathematics.


What I was objecting to was that constructive proofs are somehow easier to understand.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: