Hall's Marriage Theorem #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
Given a list of finite subsets $X_1, X_2, \dots, X_n$ of some given set $S$, P. Hall in [Hal35] gave a necessary and sufficient condition for there to be a list of distinct elements $x_1, x_2, \dots, x_n$ with $x_i\in X_i$ for each $i$: it is when for each $k$, the union of every $k$ of these subsets has at least $k$ elements.
Rather than a list of finite subsets, one may consider indexed families
t : ι → finset α of finite subsets with ι a fintype, and then the list
of distinct representatives is given by an injective function f : ι → α
such that ∀ i, f i ∈ t i, called a matching.
This version is formalized as finset.all_card_le_bUnion_card_iff_exists_injective'
in a separate module.
The theorem can be generalized to remove the constraint that ι be a fintype.
As observed in [Hal66], one may use the constrained version of the theorem
in a compactness argument to remove this constraint.
The formulation of compactness we use is that inverse limits of nonempty finite sets
are nonempty (nonempty_sections_of_finite_inverse_system), which uses the
Tychonoff theorem.
The core of this module is constructing the inverse system: for every finite subset ι' of
ι, we can consider the matchings on the restriction of the indexed family t to ι'.
Main statements #
finset.all_card_le_bUnion_card_iff_exists_injectiveis in terms oft : ι → finset α.fintype.all_card_le_rel_image_card_iff_exists_injectiveis in terms of a relationr : α → β → Propsuch thatrel.image r {a}is a finite set for alla : α.fintype.all_card_le_filter_rel_iff_exists_injectiveis in terms of a relationr : α → β → Propon finite types, with the Hall condition given in terms offinset.univ.filter.
Todo #
- The statement of the theorem in terms of bipartite graphs is in preparation.
Tags #
Hall's Marriage Theorem, indexed families
Given a matching on a finset, construct the restriction of that matching to a subset.
When the Hall condition is satisfied, the set of matchings on a finite set is nonempty.
This is where finset.all_card_le_bUnion_card_iff_exists_injective' comes into the argument.
This is the hall_matchings_on sets assembled into a directed system.
Equations
- hall_matchings_functor t = {obj := λ (ι' : (finset ι)ᵒᵖ), ↥(hall_matchings_on t (opposite.unop ι')), map := λ (ι' ι'' : (finset ι)ᵒᵖ) (g : ι' ⟶ ι'') (f : ↥(hall_matchings_on t (opposite.unop ι'))), hall_matchings_on.restrict t _ f, map_id' := _, map_comp' := _}
This is the version of Hall's Marriage Theorem in terms of indexed
families of finite sets t : ι → finset α. It states that there is a
set of distinct representatives if and only if every union of k of the
sets has at least k elements.
Recall that s.bUnion t is the union of all the sets t i for i ∈ s.
This theorem is bootstrapped from finset.all_card_le_bUnion_card_iff_exists_injective',
which has the additional constraint that ι is a fintype.
Given a relation such that the image of every singleton set is finite, then the image of every finite set is finite.
Equations
- rel.image.fintype r A = _.mpr (finset_coe.fintype (A.bUnion (λ (a : α), (rel.image r {a}).to_finset)))
This is a version of Hall's Marriage Theorem in terms of a relation
between types α and β such that α is finite and the image of
each x : α is finite (it suffices for β to be finite; see
fintype.all_card_le_filter_rel_iff_exists_injective). There is
a transversal of the relation (an injective function α → β whose graph is
a subrelation of the relation) iff every subset of
k terms of α is related to at least k terms of β.
Note: if [fintype β], then there exist instances for [∀ (a : α), fintype (rel.image r {a})].
This is a version of Hall's Marriage Theorem in terms of a relation to a finite type.
There is a transversal of the relation (an injective function α → β whose graph is a subrelation
of the relation) iff every subset of k terms of α is related to at least k terms of β.
It is like fintype.all_card_le_rel_image_card_iff_exists_injective but uses finset.filter
rather than rel.image.