*Pf*: The condition is clearly necessary. We prove the sufficiency by strong induction on *w*.

The induction statement is:

S(n) : If in a collection of n women, each subset of k women (1 <= k <= n) collectively is acquainted
with at least k men, then n marriages are possible.

S(1): Since there is only one woman, and she knows at least one man, "heavenly bliss" is possible.

Now assume S(i) is true for all i <= n. Consider S(n+1). There are two cases to consider.

**Case 1**: Every set of k women (1 <= k <= n) knows at least k + 1 men.

In this case, take one woman and a man she is acquainted with and marry them off. Now, there are
only n women left, and every subset of k of them collectively know at least k men. By the induction
hypothesis, n marriages are possible. Together with the original marriage, we get n+1 marriages.

**Case 2**: Suppose that there is a set of k women (1 <= k <= n) who collectively know exactly k men.

Since this set of k women and k men satisfy the condition, by induction we can arrange k
marriages. There remain n+1 - k women. Any subset of j of these women must collectively know at
least j men, otherwise these j women together with the k women already married would have
collectively known less than k + j men (contradicting the assumption for the n+1 women). So, the
induction hypothesis is valid for these n+1-k women, and we can arrange n+1-k marriages. Together
with the previous k marriages, we have arranged n+1 marriages.

Thus, by induction, the statement is true for all w.

**Def**: *Bipartite graph, matching, saturated vertex*

The marriage theorem can be rephrased in graph theoretical terms as:

**Theorem**: Let G = (X, Y, E) be a bipartite graph. Then there exists an X-saturating matching if and
only if for all subsets S of X, | N(S) | >= |S|.

**Def**: *Regular graph*

**Corollary**: If G = (X,Y,E) is a regular bipartite graph with at least one edge, then G has an X-
saturating matching.

*Pf*: Let S be a subset of X, E_{1} the set of edges incident with vertices of S, and E_{2} the set of edges
incident with vertices of N(S). Since each edge of E_{1} joins a vertex in S with a vertex in the
neighborhood of S, we have that E_{1} is a subset of E_{2}. Thus, |E_{1} | <= |E_{2}|. If k is the common degree of all the vertices
in G, then |E_{1}| = k |S| and |E_{2}| = k |N(S)|, so k |S| <= k |N(S)|. Since, k >= 1, we have |S| <= |N(S)| for
all subsets S in X.

**Def**: *Perfect matching*

Notice that a matching of a regular bipartite graph is a perfect matching.

Also notice that in Hall's Theorem, every subset must be checked. In the bipartite graph below, there
is only one subset (X_{0}) that fails to meet the condition.

We can recast the marriage theorem in set-theoretic terms as follows:

Let **F** = {S_{1}, S_{2}, ...., S_{p}} denote a family of not necessarily distinct sets. A p-tuple, (a_{1}, a_{2} , ..., a_{p})
with a_{i} in S_{i} for all i is called a *system of representatives* for **F**. If all the a_{i} are different, then we say
that it is a* system of distinct representatives* (SDR).

Construct a bipartite graph with the vertices in X being the subsets of **F**, and the vertices of Y being
the elements in the union of all the subsets of **F**. Draw an edge between a vertex in X and one in Y
if and only if, the element in Y is a member of the subset in X. An X-saturating matching in this
bipartite graph corresponds to an SDR of **F**. So, we can rephrase the Marriage Theorem as:

**Corollary**: The family **F** = {S_{1}, S_{2}, ...., S_{p}} possesses an SDR if and only if for all k, 1 <= k <= p, the
union of any k subsets of **F** has at least k elements.

We now turn to arbitrary graphs.

**Theorem**: If a graph G has 2n vertices and each vertex has degree at least n, then G has a perfect
matching.

We will prove this theorem constructively, that is, we will give an algorithm for constructing the perfect matching and prove that it works under the assumptions of the theorem.

**Algorithm**: Finding a Perfect Matching.

*Step 1*: Pick edges for a matching (i.e., no two meeting at a vertex) until you can't any more.

*Step 2*: If you have picked n edges, stop

else

for a pair of unsaturated vertices a, b in the graph, find the edge {u, v} in the partial
matching you have so far, such that {a, u} and {b, v} are edges of the graph. Remove {u, v} and
add {a, u} and {b, v}. Return to Step 1.

**Pf**: Assume that we are in step 2 of the algorithm and the matching we have so far has r < n edges.
With a and b unsaturated vertices (which can not be joined, otherwise we could add the edge {a,b}
to the matching), we would not be able to continue if for each edge {u, v} in the matching, at most
two of {a, u}, {a, v}, {b, u}, {b, v} are edges of the graph (but not the pair {a, u} and {b, v}). So,
the number of edges from a or b to a saturated vertex is at most 2r. But every edge from a or b goes
to a saturated vertex (otherwise, we could have added another edge to the matching). So,

Another way to view a perfect matching in a graph is to consider it as a spanning subgraph which is
regular of degree 1. From this point of view, a perfect matching is often called a *1-factor*.

A *1-factorization* of a graph is a decomposition of all the edges of the graph into 1-factors.

**Ex**: A 1-factorization of K_{6} is given below:

K_{2n} always has a 1-factorization (i.e., is *1-factorable*).

**Theorem**: Regular bipartite graphs are 1-factorable.

*Pf*: We know that a regular bipartite graph has a 1-factor. After removing these edges, the graph that
remains is also a regular bipartite graph (of degree 1 less), so we may find a 1-factor in it. Continue
until the common degree of the graph is 1, this last graph is itself a 1-factor.