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, E1 the set of edges incident with vertices of S, and E2 the set of edges incident with vertices of N(S). Since each edge of E1 joins a vertex in S with a vertex in the neighborhood of S, we have that E1 is a subset of E2. Thus, |E1 | <= |E2|. If k is the common degree of all the vertices in G, then |E1| = k |S| and |E2| = 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 (X0) that fails to meet the condition.

We can recast the marriage theorem in set-theoretic terms as follows:
Let F = {S1, S2, ...., Sp} denote a family of not necessarily distinct sets. A p-tuple, (a1, a2 , ..., ap) with ai in Si for all i is called a system of representatives for F. If all the ai 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 = {S1, S2, ...., Sp} 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 K6 is given below:

K2n 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.