I recommend the Hall's theorem which has a nice inductive proof by cases (some people like to call it "either it's trivial or it's trivial").
The formal wording is like this:
Let $G$ be a bipartite graph with bipartition $U \uplus V$ and denote by $\mathcal{N}(S)$ the set of neighbors of vertices in $S$. Then, there is a $U$-saturating matching in $G$ if and only if $$\forall S \subseteq U.\ |\mathcal{N}(S)| \geq |S| .$$
However, this can be rephrased in more friendly terms, for example:
Suppose there are two groups of girls and boys respectively, both with the same count. For any boy and girl (i.e. any potential pair) they would like to dance together or not. There is a perfect pairing (everybody has a dance partner) if and only if for any subset of boys there is at least the same number of girls willing to dance with them.
The proof proceeds by induction on the size of the set $U$ and the inductive step has two cases:
- $\forall \varnothing \neq S\subsetneq U.\ |\mathcal{N}(S)| \color{red}{>} |S|.$ In this case we match any pair and the pairing for the rest follows from inductive hypothesis.
- $\exists \varnothing \neq S \subsetneq U.\ |\mathcal{N}(S)| \color{red}{=} |S|.$ In this case let $S$ be such a set which is minimal with regard to inclusion. We split vertices of $G$ into $G_1$ and $G_2$ so that $U(G_1) = S$, $V(G_1) = \mathcal{N}(S)$ and by induction hypothesis each part has its own matching.
I hope this helps $\ddot\smile$