Knowing whether my solution is correct or not is dependent on how well I truly understand the concepts. However, if I truly understood the concepts, then I wouldn't need to solve the problem in the first place. How is one supposed to learn without feedback?
Anyway, hope you find the resource helpful.
The one part of your comment though I do have further questions about is:
> I want other professors to find the book useful for courses they teach, and providing problems without solutions that can be graded for credit is also important.
I would imagine if a professor could answer the problems in your book correctly without needing the solutions, then I would imagine said professors are also perfectly capable of creating their own problems with solutions. I imagine many professors probably do use the problems in back of the book for assignments, and I feel like that says a lot about the state of mathematical education.
However, I do appreciate all the effort you have put in to this textbook. I will most definitely be using it in the very near future, and I think your book is the one I am going to start with. It takes a pretty selfless person to release something of this value for free, so thank you very much.
Outside of a classroom setting, the way you learn from a textbook without external feedback is by engaging more actively with the material.
Treat each statement in the main text as an informal exercise. Each time you come across a proposition -- whether it's a formal theorem statement or a claim in the body of the exposition -- try proving or otherwise justifying it to yourself before reading on.
Take a look at Theorems 2.3.1 and 2.3.2 -- they are very similar. Once you have absorbed the proof of 2.3.1, you can attempt 2.3.2 on your own. If you can't finish the proof, you can read a couple of sentences from the included proof for "hints"... or, if you do finish a proof, you can compare it to the proof in the text.
If you read actively enough, you can learn the material quite well without doing any problems. Many people will claim that you need to do formal problems in order to learn math, but this is untrue. Many math textbooks at the higher level don't include formal exercises or problems at all, and people learn from them just fine.
Admittedly, reading mathematics is a skill in its own right, and you shouldn't expect it to come easily right away. Of course, the best thing is to have a one-on-one teacher, but few of us are so lucky.
Yes, I can read/hear a concept and understand it in abstract and visualize it pretty easily, but it will leave my brain just as easily as it entered. Just the way my memory works.
Solved problems speeds up that muscle memory learning process significantly as opposed to going line by line and attempting to generate your own problems/solutions. In addition, you can solve a problem correctly, but not have the correct prose, solution manuals can help there as well.
Edit: Honestly the biggest thing about solving problems is that it gives a sense of progression and a dopamine-reward loop that most people just don't get from reading one line at a time. That being said, good problems and good solutions can be time consuming to generate, so it makes total sense to me that the PhD-level textbooks don't follow that format.
The bigger problem is that not every thing that the author says is within your level of reasoning. Some very simple things can be exceedingly hard to prove, and you, as a learner, don't know which is which. That's why there are the problems at the end of the chapter, which are designed for the level that you should have attained by the end of the chapter. Without solutions though, you have no way to check your understanding, and you are forced to try and squeeze every little problem from the text.
Not having solutions is simply not suitable for a self-learner. It is sufficient for a class settings, where you can ask the professor if your solution is correct.
To me, a good compromise is to provide solutions to every odd- (or even-) numbered problem. Thus, the self learners have at least half of the problems within their reach, and t he teachers can assign the other half of the problems.
Imagine how much more work it is to try to solve these exercises then. Exponentially more than creating solutions for someone who already mastered this topic. This tells me a lot about how a teacher thinks of students.
This would work even better in a lower level maths like Algebra and Calculus. Just use Mathematica's Solve[] function for many problems and you'll know if you were right or wrong.
One can also use this approach in an algorithms class. Write your own naïve program to trivially but reliably solve test cases, then compare your more sophisticated algorithms to these results. Alternatively, use a reference implementation from some other library. For example, compare your own graph algorithm solutions to what Neo4j returns.
A better use of LLM is to input your reasoning and ask if it is correct, but even then, you can't rely on the output. Probably the best is to ask on the math side of stack overflow and rely on the kindness of a stranger.
- throughout the text, use the LLM to ask questions, generate problems (I haven’t tried this yet, so it might not work very well) and give you hints on how to close the gaps in your understanding
- reduce a given problem to the simplest possible case and ask how to solve that (if you want to check if your solution seems plausible) or if it can give you hints on how to approach the problem (when you are stuck)
- vary the problem description to see if different approaches are suggested
- critically ask questions about the (steps to the) solution or any provided hints (does something seem odd or logically inconsistent?)
- other LLMs sometimes give you better answers (or contradict each other), so, if possible, try asking different LLMs the same questions
Having this “conversation” with the LLM where you need to critically check everything it says has the added benefit of being more actively engaged with the material as opposed to simply looking up the solution. It may be a huge waste of time if you’re not careful, but I think if you use it intelligently to guide your own thinking, it can be very helpful.
I really like the book “A Primer of Discrete Mathematics”[1] by Finkbeiner II and Lindstrom from 1987. It’s a bit old and unfortunately not free but still holds up pretty well and has many good exercises with selected answers.
I will absolutely check out this book though, looks like a more modern approach with interactive exercises and it even is completely free!
The textbook is quite large, but the content is very accessible. I'm also self-taught, finally taking formal math/physics coursework in my 30s to fill in the gaps.
Another amazing resource has been California Community Colleges. So far every math teacher I've had has been extraordinarily passionate. Most math classes have an async/online section, and it's pretty common for adults to take the classes just for fun/self-improvement.
How did you take CS70? Are you enrolled as an undergrad/grad student?
> It’s a bit old and unfortunately not free
It's available on Anna's Archive, in case someone is looking for it.
On the sidebar:
> PDF coming soon
:(
Payer Patrick pays molester Maverick to maim or intimidate victim Victor.
Is Victor allowed to complain? Or only the person who paid?
a(n) = 2r a(n-1) - r^2 a(n-2).
Divide by r^n to get the equivalent c(n) = 2c(n-1) - c(n-2), where c(n) = a(n)/r^n
But this is the constant difference recurrence: c(n) - c(n-1) = c(n-1) - c(n-2)
So c(n) is an arithmetic progression c(n) = x*n + y for some x and y given by
the initial conditions. Thus the original sequence is a(n) = c(n) r^n = (x*n + y) r^n.---
Let x_n be a sequence defined by the recurrence relation:
x_{n+1} = a * x_{n-1} + b * x_n
Observe that if we define a sequence of two-element vectors of successive elements: [x_0] [x_1] [x_2]
[x_1], [x_2], [x_3], ...
then we can form the relation in terms of matrix/vector multiplication: [x_1] = [[0 1]] [x_0]
[x_2] [[a b]] [x_1]
Let's name the sequence of vectors as y_n and call the matrix M: y_1 = M * y_0
We can get the next term in the sequence with another multiplication: y_2 = M * y_1
= M * (M * y_0)
= M^2 * y_0
By induction we have: y_n = M^n * y_0
M has characteristic polynomial: r^2 - br - a = 0
with roots: r_1 = (b - c)/2
r_2 = (b + c)/2
c = √(b^2 + 4a)
Therefore we have by diagonalization: y_n = S * [[r_1^n 0 ]] * S^(-1) * y_0
[[0 r_2^n]]
where S is the matrix of eigenvectors. From here, we can finish our existence and uniqueness proofs from the existence and uniqueness of the eigenvalues of M.Interesting to see that this book does cover the topic. I guess "discrete math" can be a lot of different things.
I just wanted to thank all the authors, especially of textbooks, who put their work online, for free. Their dedication shows, and how. It is largely due to these free (and free-ish) resources that many people -- including autodidacts and those with limited resources -- are able to further their education.
Authors - know that your efforts are very much appreciated!
The Math Sorcerer did a video on an older edition, which is just a lovely ode to the book, the man is in love. https://www.youtube.com/watch?v=FPr5-X9nZc4