Practice with guidance, not just grading.
Choose one or more discrete math topics, review the Least You Need to Know page, then start a mobile-first tutoring flow with hints, focus checks, gotchas, and worked solutions.
Start or resume practice
Saved progress stays available for about 14 days when you add a passphrase.
Least You Need to Know pages
Open a quick-teaching page before practice or during a question.
Logic and Quantifiers
A valid argument form guarantees the conclusion whenever the premises are true. Learn the classic valid forms and the common traps.
Equivalent statements always have the same truth value. Use standard laws like **De Morgan**, **implication**, and **double negation** to rewrite expressions cleanly.
When a statement has **more than one quantifier**, the order matters. Negating the statement flips each quantifier and negates the predicate.
Quantifiers tell you whether a statement is about **all** objects or about **at least one** object.
Truth tables let you compare two statements **row by row**. Two statements are logically equivalent when they match on **every** row.
Proof Techniques
Use a **counterexample** to disprove a universal claim quickly. Use **contradiction** when assuming the opposite of a claim leads to something impossible.
In proof by contradiction, assume the target claim is false and drive the assumption to something impossible, often a parity clash or a definition failure.
When a statement has the form **if P, then Q**, you need to choose a proof path that preserves logic instead of guessing from examples.
Mathematical induction proves a statement for **every** integer in a sequence by establishing a base case and an induction step.
When a statement splits naturally into a small number of possibilities, prove each case cleanly and make sure the cases cover everything.
To prove two sets are equal, show **both inclusions** or use a membership argument with `x ∈ A` iff `x ∈ B`.
Mathematical Induction
Mathematical induction proves a statement for every integer in a sequence by checking a starting case and then linking one case to the next.
Induction proves inequalities by checking a base case and then comparing the `k+1` expression to something already known from the hypothesis.
Recurrence claims often need **strong induction** because the next term depends on several earlier terms, not just one.
Strong induction assumes the claim holds for **all earlier cases up to n** and then proves it for `n + 1`.
Counting Principles
When two counted groups overlap, add the group sizes and then subtract the overlap once.
Use a **permutation** when order matters. Use a **combination** when order does not matter.
If you place more objects than boxes into the boxes, at least one box must contain more than one object. Use the ceiling idea for stronger versions.
Many counting errors come from not noticing whether choices happen **in sequence** or belong to **separate non-overlapping cases**.
Harder counting problems often become easier once you decide whether order matters, whether items repeat, and whether a restriction should be handled first or by subtraction.
Stars and bars counts ways to distribute identical objects into distinct boxes by turning the problem into positions for separators.
Relations and Functions
An equivalence relation groups objects into classes using three properties: reflexive, symmetric, and transitive.
Function composition means applying one function and then another. A function has an inverse only when each output comes from exactly one input.
A function can fail by hitting two inputs with the same output, by missing outputs in the codomain, or by doing both.
A function gives **exactly one output** for each input in its domain. The key is checking repeated inputs carefully.
A partial order is reflexive, antisymmetric, and transitive. Unlike equivalence relations, not every pair must be comparable.
In a poset, **least** and **greatest** are stronger than **minimal** and **maximal**. Least means below everything; minimal only means nothing is strictly below it.
A relation can be **reflexive**, **symmetric**, **antisymmetric**, or **transitive**. The skill is recognizing what each word really asks you to check.
Graphs and Trees
Graphs model objects as **vertices** and connections as **edges**. Most beginner mistakes come from miscounting degree or confusing paths with edges.
A graph is bipartite when its vertices can be split into two groups so every edge goes across the split. Odd cycles are the main obstruction.
Euler questions ask whether you can use every edge exactly once. The degree pattern tells you the answer quickly.
A rooted tree picks one vertex as the root, which gives every other vertex a parent-child relationship and a level.
A tree is a connected graph with **no cycles**. In a tree with n vertices, the number of edges is always n-1.