Public Mathlib landmark · existing upstream theorem · read-only

Set theory · existing Mathlib theorem

Schröder–Bernstein Theorem

If there is a one-to-one function from α into β and another one-to-one function from β into α, then there is a function from α to β that is both one-to-one and onto.

Four separate status axes

Upstream indexedPinned source bytes verified locally
Locally reproducedExact upstream declaration replayed
Reviewed pageCurrent public presentation reviewed
Accepted Atlas resultNot recorded for the preferred artifact

These states distinguish upstream identity, local reproduction, review, and Atlas acceptance. This page is part of the public, read-only Mathlib landmark collection.

Formal orientation

Statement map

Statement map for Schröder–Bernstein TheoremInjections in both directions between two types imply a bijection between them. The pinned upstream declaration is Function.Embedding.schroeder_bernstein. The exact checked statement is Function.Embedding.schroeder_bernstein {α : Type u} {β : Type v} {f : α → β} {g : β → α} (hf : Function.Injective f) (hg : Function.Injective g) : ∃ h : α → β, Function.Bijective h.Mathematical readingInjections in bothdirections between twotypes imply a bijectionbetween them.Pinned declarationmathlib ·Function.Embedding.schroeder_bernsteinExact checked formFunction.Embedding.schroeder_bernstein{α : Type u} {β : Typev} {f : α → β} {g : β →α} (hf :Function.Injective f)(hg : Function.Injectiveg) : ∃ h : α → β,Function.Bijective hStatement map for Schröder–Bernstein TheoremInjections in both directions between two types imply a bijection between them. The pinned upstream declaration is Function.Embedding.schroeder_bernstein. The exact checked statement is Function.Embedding.schroeder_bernstein {α : Type u} {β : Type v} {f : α → β} {g : β → α} (hf : Function.Injective f) (hg : Function.Injective g) : ∃ h : α → β, Function.Bijective h.Mathematical readingInjections in bothdirections between twotypes imply a bijectionbetween them.Pinned declarationmathlib ·Function.Embedding.schroeder_bernsteinExact checked formFunction.Embedding.schroeder_bernstein{α : Type u} {β : Typev} {f : α → β} {g : β →α} (hf :Function.Injective f)(hg : Function.Injectiveg) : ∃ h : α → β,Function.Bijective h

This deterministic map orients the reader from the mathematical summary to the pinned declaration and exact checked form. The HTML statement below is authoritative.

The theorem at a glance

Schröder–Bernstein Theorem at a glance

A source-bound editorial overview of the exact Mathlib formulation. The image is explanatory; the statement map, formal type, and pinned source remain authoritative.

Two particular injections in opposite directions imply the existence of a new bijection; neither input map is presented as bijective. Generated explanation only; the exact HTML statement and pinned source are authoritative.
Detailed visual description

The top half displays separate forward and backward injections with unused target points. Alternating chains appear in a middle proof-intuition strip. The lower half reorganizes the two point fields into one exact pairing h, next to separate injective and surjective cues and an explicit scope footer.

Two injections are decomposed into alternating components and resolved into a bijection. Generated explanation only; the exact HTML statement and pinned source are authoritative.
Detailed visual description

Two source-and-target diagrams on the left show total injections in opposite directions. Alternating colored chains and a loop occupy the center. On the right, isolated emerald and cobalt nodes are paired exactly once by clean horizontal segments, with no within-column links.

Complementary intuition

A mathematical landmark

Schröder–Bernstein turns two cardinal inequalities into an equality of cardinality. It is fundamental to comparing infinite sets without first constructing a bijection directly.

The low-text schematic gives the theorem a visual identity; it does not replace the source-bound poster or exact statement.

Authoritative formal type

Exact Mathlib statement

Function.Embedding.schroeder_bernstein {α : Type u} {β : Type v} {f : α → β} {g : β → α} (hf : Function.Injective f) (hg : Function.Injective g) : ∃ h : α → β, Function.Bijective h
Selected evidence declaration text
theorem Function.Embedding.schroeder_bernstein {α : Type u} {β : Type v} {f : α → β} {g : β → α} (hf : Function.Injective f) (hg : Function.Injective g) : ∃ h : α → β, Function.Bijective h

Proof architecture

How two injections produce a new bijection

5 curated stages

Mathlib's selected theorem specializes a stronger relation-preserving construction: choose a least fixed-point region, transport its complement through a partial inverse, define a piecewise map, prove it surjective and injective, and discard the trivial relation witness.

These source-anchored stages explain the retained Mathlib proof route. They are generated explanations, not proof evidence or an extracted Lean proof-term dependency graph.

  1. Reduce to the stronger construction

    The selected theorem delegates to a stronger relation-preserving construction, with the empty case closed first.

    schroeder_bernstein_of_rel hf hg (fun _ _ ↦ True) ...

    schroeder_bernstein calls schroeder_bernstein_of_rel with the constantly true relation. Inside that helper, if β is empty then injectivity of f forces α empty and the empty equivalence supplies the result; the nonempty branch carries the fixed-point construction.

  2. Choose the least fixed-point region

    A monotone complement-image operator selects the least source region on which the forward injection will be used.

    F s = (g '' (f '' s)ᶜ)ᶜ; s = F.lfp

    The operator sends a source subset to the complement of g applied to the complement of its f-image. Mathlib takes F.lfp and uses F.map_lfp to identify the chosen region with its image under this operator; complement injectivity yields the corresponding identity for the outside region.

  3. Transport the complement through a partial inverse

    The partial inverse of the backward injection sends the outside region onto precisely the target points missed by the forward branch.

    g' '' sᶜ = (f '' s)ᶜ

    leftInverse_invFun turns g' into a left inverse of g. Combining that fact with the fixed-point complement identity proves g' '' sᶜ = (f '' s)ᶜ, which is the exact coverage relation needed by the piecewise map.

  4. Define the piecewise map and cover the target

    The new map uses f on the least fixed-point region and the partial inverse of g outside it; the two images cover complementary target regions.

    h = s.piecewise f g'; Function.Surjective h

    Mathlib defines h by Set.piecewise. range_piecewise splits its range into the f-image of s and the g'-image of sᶜ; substituting the complement identity and union_compl_self proves Surjective h.

  5. Prove one-to-one and conclude

    Branchwise injectivity and complement separation make the new surjective map one-to-one, yielding the required bijection.

    ∃ h : α → β, Function.Bijective h

    injective_piecewise_iff uses hf on the selected region, the left-inverse law for g' on the complement, and the fact that an outside target cannot lie in f '' s. The helper returns h with both properties, and schroeder_bernstein specializes its relation to True and keeps the bijectivity witness.

Claim boundary

No new theorem is claimed

The selected declaration concludes that a bijective function α → β exists from hypotheses that particular functions f and g are injective. It does not assert that either given injection is itself bijective, and the page does not claim a new construction.

Provenance

Origin and evidence stay separate

Existing declaration
Function.Embedding.schroeder_bernstein in mathlib
Relationship
The checked artifact is the upstream declaration itself
Preferred checked artifact
artifact.library.mathlib.schroeder-bernstein.v001
Source handling
Verified upstream reference; no mirrored source package