[{"data":1,"prerenderedAt":4},["ShallowReactive",2],{"DVngCDo8dv":3},"# Hironaka's resolution of singularities in characteristic zero\n\n[![Build](https://github.com/resolutionorg/hironaka/actions/workflows/build.yml/badge.svg)](https://github.com/resolutionorg/hironaka/actions/workflows/build.yml)\n[![Comparator](https://github.com/resolutionorg/hironaka/actions/workflows/comparator.yml/badge.svg)](https://github.com/resolutionorg/hironaka/actions/workflows/comparator.yml)\n\n**[API documentation](https://resolutionorg.github.io/hironaka/docs/)** · **[Blueprint](https://resolutionorg.github.io/hironaka/blueprint/)** ·\n[Statements](Challenge) · [`formalization.yaml`](formalization.yaml) · [Sources](references.bib)\n\nA Lean 4 formalization, over Mathlib, of resolution of singularities in characteristic zero:\nHironaka's main theorems and their refinements by Kollár, Włodarczyk and Bierstone–Milman, for\nalgebraic schemes and for real- and complex-analytic manifolds and spaces. The main theorems are\nlisted below. The worked examples of the sources form a second library, `HironakaExamples`. Every\ntheorem is proved: neither library contains a `sorry`.\n\n## Main theorems\n\nThe main theorems are those named in [`comparator.json`](comparator.json). Each is stated at the end\nof the module that proves it, and again with `sorry` in a challenge file. A theorem from a source\nnames it in its docstring, in a paragraph `Source statement: [Hir64, Main Theorem I, p. 132]`.\n\n| Source | Lean name |\n|---|---|\n| **In Mathlib's language** | |\n| Hironaka 1964, Main Theorem I (resolution by a single blow-up) | [`AlgebraicGeometry.exists_isBlowUpAlong_smooth`](Hironaka/Resolution/Standard/Algebraic.lean)\u003Cbr>[Challenge](Challenge/Standard.lean) · [Blueprint](https://resolutionorg.github.io/hironaka/blueprint/standard-theorems/#sec-standard-algebraic) · [Doc](https://resolutionorg.github.io/hironaka/docs/Hironaka/Resolution/Standard/Algebraic.html#AlgebraicGeometry.exists_isBlowUpAlong_smooth) |\n| Atiyah 1970, Resolution Theorem (local monomialization of a real-analytic function), with the Jacobian clause of Bierstone–Milman 1997, Theorem 1.10 | [`exists_proper_analytic_monomialization`](Hironaka/Resolution/Standard/Analytic.lean)\u003Cbr>[Challenge](Challenge/Standard.lean) · [Blueprint](https://resolutionorg.github.io/hironaka/blueprint/standard-theorems/#sec-standard-analytic) · [Doc](https://resolutionorg.github.io/hironaka/docs/Hironaka/Resolution/Standard/Analytic.html#exists_proper_analytic_monomialization) |\n| **Algebraic schemes** | |\n| Hironaka 1964, Main Theorem II (order reduction) | [`AlgebraicGeometry.exists_blowUpSequence_ord_weakTransformSeq_lt`](Hironaka/Resolution/Algebraic/Hir64/ComponentwiseMainTheorems.lean)\u003Cbr>[Challenge](Challenge/Algebraic.lean) · [Blueprint](https://resolutionorg.github.io/hironaka/blueprint/algebraic-theorems/#sec-mt2) · [Doc](https://resolutionorg.github.io/hironaka/docs/Hironaka/Resolution/Algebraic/Hir64/ComponentwiseMainTheorems.html#AlgebraicGeometry.exists_blowUpSequence_ord_weakTransformSeq_lt) |\n| Hironaka 1964, Main Theorem II(N) (principalization) | [`AlgebraicGeometry.exists_blowUpSequence_weakTransformSeq_eq_top`](Hironaka/Resolution/Algebraic/Hir64/ComponentwiseMainTheorems.lean)\u003Cbr>[Challenge](Challenge/Algebraic.lean) · [Blueprint](https://resolutionorg.github.io/hironaka/blueprint/algebraic-theorems/#sec-mt2n) · [Doc](https://resolutionorg.github.io/hironaka/docs/Hironaka/Resolution/Algebraic/Hir64/ComponentwiseMainTheorems.html#AlgebraicGeometry.exists_blowUpSequence_weakTransformSeq_eq_top) |\n| Hironaka 1964, Corollary 1 (trivialization of a system of ideal sheaves) | [`AlgebraicGeometry.exists_blowUpSequence_forall_exists_stalkIdeal_weakTransformSeq_eq_top`](Hironaka/Resolution/Algebraic/Hir64/ComponentwiseCorollaries.lean)\u003Cbr>[Challenge](Challenge/Algebraic.lean) · [Blueprint](https://resolutionorg.github.io/hironaka/blueprint/algebraic-theorems/#sec-cor1) · [Doc](https://resolutionorg.github.io/hironaka/docs/Hironaka/Resolution/Algebraic/Hir64/ComponentwiseCorollaries.html#AlgebraicGeometry.exists_blowUpSequence_forall_exists_stalkIdeal_weakTransformSeq_eq_top) |\n| Kollár 2007, Theorem 35 (functorial principalization) | [`AlgebraicGeometry.exists_functorial_principalization`](Hironaka/Resolution/Algebraic/Kol07/Thm35/Principalization/FunctorClauses.lean)\u003Cbr>[Challenge](Challenge/Algebraic.lean) · [Blueprint](https://resolutionorg.github.io/hironaka/blueprint/algebraic-theorems/#sec-principalization) · [Doc](https://resolutionorg.github.io/hironaka/docs/Hironaka/Resolution/Algebraic/Kol07/Thm35/Principalization/FunctorClauses.html#AlgebraicGeometry.exists_functorial_principalization) |\n| Hironaka 1964, Corollary 3 (simplification of an algebraic boundary) | [`AlgebraicGeometry.exists_blowUpSequence_isInvertible_isSncBoundary_radical_comap`](Hironaka/Resolution/Algebraic/Hir64/ComponentwiseCorollaries.lean)\u003Cbr>[Challenge](Challenge/Algebraic.lean) · [Blueprint](https://resolutionorg.github.io/hironaka/blueprint/algebraic-theorems/#sec-cor3) · [Doc](https://resolutionorg.github.io/hironaka/docs/Hironaka/Resolution/Algebraic/Hir64/ComponentwiseCorollaries.html#AlgebraicGeometry.exists_blowUpSequence_isInvertible_isSncBoundary_radical_comap) |\n| Kollár 2007, Theorem 36 (functorial resolution) | [`AlgebraicGeometry.exists_functorial_resolution`](Hironaka/Resolution/Algebraic/Kol07/Thm36/Theorem36.lean)\u003Cbr>[Challenge](Challenge/Algebraic.lean) · [Blueprint](https://resolutionorg.github.io/hironaka/blueprint/algebraic-theorems/#sec-resolution) · [Doc](https://resolutionorg.github.io/hironaka/docs/Hironaka/Resolution/Algebraic/Kol07/Thm36/Theorem36.html#AlgebraicGeometry.exists_functorial_resolution) |\n| Kollár 2007, Theorem 27 (strong resolution of a variety) | [`AlgebraicGeometry.exists_strong_resolution`](Hironaka/Resolution/Algebraic/Kol07/Thm36/Theorem36.lean)\u003Cbr>[Challenge](Challenge/Algebraic.lean) · [Blueprint](https://resolutionorg.github.io/hironaka/blueprint/algebraic-theorems/#sec-strong-resolution) · [Doc](https://resolutionorg.github.io/hironaka/docs/Hironaka/Resolution/Algebraic/Kol07/Thm36/Theorem36.html#AlgebraicGeometry.exists_strong_resolution) |\n| Hironaka 1964, Main Theorem I | [`AlgebraicGeometry.exists_support_eq_singularLocus_isRegular_blowUp`](Hironaka/Resolution/Algebraic/Hir64/MainTheoremI.lean)\u003Cbr>[Challenge](Challenge/Algebraic.lean) · [Blueprint](https://resolutionorg.github.io/hironaka/blueprint/algebraic-theorems/#sec-mt1) · [Doc](https://resolutionorg.github.io/hironaka/docs/Hironaka/Resolution/Algebraic/Hir64/MainTheoremI.html#AlgebraicGeometry.exists_support_eq_singularLocus_isRegular_blowUp) |\n| Hironaka 1964, the weak form after Main Theorem I | [`AlgebraicGeometry.exists_dense_isIso_restrict_isRegular_blowUp`](Hironaka/Resolution/Algebraic/Hir64/MainTheoremI.lean)\u003Cbr>[Challenge](Challenge/Algebraic.lean) · [Blueprint](https://resolutionorg.github.io/hironaka/blueprint/algebraic-theorems/#sec-mt1-weak) · [Doc](https://resolutionorg.github.io/hironaka/docs/Hironaka/Resolution/Algebraic/Hir64/MainTheoremI.html#AlgebraicGeometry.exists_dense_isIso_restrict_isRegular_blowUp) |\n| Włodarczyk 2005, Theorem 1.0.2 (embedded desingularization) | [`AlgebraicGeometry.exists_functorial_embeddedDesingularization`](Hironaka/Resolution/Algebraic/Wlo05/EmbeddedFunctorClauses.lean)\u003Cbr>[Challenge](Challenge/Algebraic.lean) · [Blueprint](https://resolutionorg.github.io/hironaka/blueprint/algebraic-theorems/#sec-embedded) · [Doc](https://resolutionorg.github.io/hironaka/docs/Hironaka/Resolution/Algebraic/Wlo05/EmbeddedFunctorClauses.html#AlgebraicGeometry.exists_functorial_embeddedDesingularization) |\n| **Analytic manifolds and spaces** | |\n| Hironaka 1964, Main Theorem II″(N), in the form of Włodarczyk 2009, Theorem 2.0.3 | [`AnalyticManifold.exists_extensionCompatibleFamily_weakTransformSeq_eq_top`](Hironaka/Resolution/Analytic/Wlo09/HironakaAssembly.lean)\u003Cbr>[Challenge](Challenge/Analytic.lean) · [Blueprint](https://resolutionorg.github.io/hironaka/blueprint/analytic-theorems/#sec-mt2pp) · [Doc](https://resolutionorg.github.io/hironaka/docs/Hironaka/Resolution/Analytic/Wlo09/HironakaAssembly.html#AnalyticManifold.exists_extensionCompatibleFamily_weakTransformSeq_eq_top) |\n| Bierstone–Milman 1997, Theorem 1.10 (with the Jacobian clause), in the same form | [`AnalyticManifold.exists_extensionCompatibleFamily_isNormalCrossingsDivisor_jacobianIdeal_mul_pullback`](Hironaka/Resolution/Analytic/BM97/JacobianAssembly.lean)\u003Cbr>[Challenge](Challenge/Analytic.lean) · [Blueprint](https://resolutionorg.github.io/hironaka/blueprint/analytic-theorems/#sec-bm) · [Doc](https://resolutionorg.github.io/hironaka/docs/Hironaka/Resolution/Analytic/BM97/JacobianAssembly.html#AnalyticManifold.exists_extensionCompatibleFamily_isNormalCrossingsDivisor_jacobianIdeal_mul_pullback) |\n| Włodarczyk 2009, Theorem 2.0.3 (functorial locally finite principalization) | [`AnalyticManifold.exists_functorial_principalization`](Hironaka/Resolution/Analytic/Wlo09/FunctorialPrincipalization.lean)\u003Cbr>[Challenge](Challenge/Analytic.lean) · [Blueprint](https://resolutionorg.github.io/hironaka/blueprint/analytic-theorems/#sec-wlo09-principalization) · [Doc](https://resolutionorg.github.io/hironaka/docs/Hironaka/Resolution/Analytic/Wlo09/FunctorialPrincipalization.html#AnalyticManifold.exists_functorial_principalization) |\n| Włodarczyk 2009, Theorem 2.0.2 (locally finite embedded desingularization) | [`AnalyticManifold.exists_embeddedDesingularization`](Hironaka/Resolution/Analytic/Wlo09/EmbeddedDesingularization.lean)\u003Cbr>[Challenge](Challenge/Analytic.lean) · [Blueprint](https://resolutionorg.github.io/hironaka/blueprint/analytic-theorems/#sec-wlo09-embedded) · [Doc](https://resolutionorg.github.io/hironaka/docs/Hironaka/Resolution/Analytic/Wlo09/EmbeddedDesingularization.html#AnalyticManifold.exists_embeddedDesingularization) |\n| Kollár 2007, Theorem 45; Włodarczyk 2009, Theorem 2.0.1 (resolution of analytic spaces) | [`AnalyticSpace.exists_functorial_resolution`](Hironaka/Resolution/Analytic/Kol07Thm45/ResolutionAssembly.lean)\u003Cbr>[Challenge](Challenge/Analytic.lean) · [Blueprint](https://resolutionorg.github.io/hironaka/blueprint/analytic-theorems/#sec-spaces) · [Doc](https://resolutionorg.github.io/hironaka/docs/Hironaka/Resolution/Analytic/Kol07Thm45/ResolutionAssembly.html#AnalyticSpace.exists_functorial_resolution) |\n| Kollár 2007, Theorem 45 (1)–(4), for a reduced complex-analytic space | [`AnalyticSpace.exists_surjective_resolution_of_isReduced`](Hironaka/Resolution/Analytic/Kol07Thm45/ResolutionAssembly.lean)\u003Cbr>[Challenge](Challenge/Analytic.lean) · [Blueprint](https://resolutionorg.github.io/hironaka/blueprint/analytic-theorems/#sec-spaces-complex) · [Doc](https://resolutionorg.github.io/hironaka/docs/Hironaka/Resolution/Analytic/Kol07Thm45/ResolutionAssembly.html#AnalyticSpace.exists_surjective_resolution_of_isReduced) |\n\n## Verifying\n\nThe challenge files in [`Challenge/`](Challenge) state the main theorems with `sorry` proofs,\nimporting from this library only the `Defs.lean` files that define the vocabulary of the\nstatements. Read with those files, they say exactly what is claimed. Each also unfolds the\npredicates its statements use, as `example`s. [`Challenge/Standard.lean`](Challenge/Standard.lean)\nimports Mathlib only: it states the two definitions of the library that its first theorem uses,\nwith the library's names and bodies.\n\n[leanprover/comparator](https://github.com/leanprover/comparator) checks, for each name in\n[`comparator.json`](comparator.json), that the challenge statement and the library theorem are the\nsame and that the proof uses no axiom beyond `propext`, `Classical.choice` and `Quot.sound`. With\n`landrun` and a `lean4export` built for this toolchain on the `PATH`:\n\n```\nlake build Hironaka Challenge\nlake env path/to/comparator comparator.json   # expect: Your solution is okay!\n```\n\n[`scripts/check_axioms.lean`](scripts/check_axioms.lean) checks the same bound for every constant of\nboth libraries, so that none depends on `sorryAx`, and prints the axioms of each main theorem.\n\n## Building\n\nThe Lean toolchain is pinned in [`lean-toolchain`](lean-toolchain) and Mathlib in\n[`lake-manifest.json`](lake-manifest.json). With `elan` installed, in the root of the repository:\n\n```\nlake exe cache get                      # fetch the prebuilt Mathlib\nlake build                              # the library Hironaka\nlake build HironakaExamples Challenge   # examples, challenge files\n```\n\n[`scripts/`](scripts) holds the checks run in CI: no axioms beyond the standard three, the\nstatement vocabulary in the `Defs.lean` files, the challenge files matching\n[`comparator.json`](comparator.json), the blueprint covering the statements, and others. Each is\ndescribed at the head of its file.\n\n## Layout\n\n| path | contents |\n|---|---|\n| [`Hironaka/`](Hironaka) | the library, by role: the objects in `Algebra/`, `Analytic/`, `Scheme/`, `Manifold/` and `AnalyticSpace/`, whose `Defs.lean` files hold what the statements use; the proof machinery in `Resolution/`, with the main theorems in folders named after the sources |\n| [`HironakaExamples/`](HironakaExamples) | the worked examples and counterexamples of the sources; no module of `Hironaka` imports it |\n| [`Challenge.lean`](Challenge.lean), [`Challenge/`](Challenge) | the main theorems stated against the definitions only |\n| [`comparator.json`](comparator.json) | the names of the main theorems, read by the comparator and the checks |\n| [`blueprint/`](blueprint) | the blueprint, a Verso document in a nested Lake package |\n| [`formalization.yaml`](formalization.yaml) | a machine-readable description of the project and of how each statement aligns with its source |\n| [`references.bib`](references.bib) | the sources, under the keys by which everything cites them |\n| [`scripts/`](scripts) | the checks, and the generators of the computed parts of `formalization.yaml` and of the blueprint's Sources list |\n\n## Documentation\n\nThe API documentation of `Hironaka` and `HironakaExamples` and the blueprint are linked at the top\nof this file. The blueprint, in [`blueprint/`](blueprint), presents the statements to a\nmathematical reader, with background chapters, a section for each main theorem and chapters on\nthe definitions the statements use.\n\n## `formalization.yaml`\n\n[`formalization.yaml`](formalization.yaml) describes the project in the format of\n[mathlib-initiative/formalization.yaml](https://github.com/mathlib-initiative/formalization.yaml)\n(version `v0.4`): the sources, the main results with their axioms, how the library was produced\nand reviewed. Where the format leaves the shape open or has no field, this file adds:\n\n- `alignment.statements`: the format's suggested table, one entry per theorem matched with the\n  item of the source it formalizes and its module, read from the `Source statement:` paragraphs\n  of the docstrings; its `note` lists the labelled notes of the theorem's docstring (Gap, Correction,\n  Interpretation, …), the same notes the blueprint shows.\n- `status.main_results[].statement_vocabulary`: for each main result, the definition modules a\n  reader needs to understand its statement.\n- `automation.methods[].cost.tokens`: the model tokens of each phase of the work, beside the\n  format's wall time and hardware.\n\nThe main results and the alignment table are generated from the library, so they stay current\nwith it.\n\n## Sources\n\nThe sources, and the keys by which the docstrings and the blueprint cite them, are listed in the BibTeX file [`references.bib`](references.bib).\n\n## Provenance\n\nThis library was produced by an automated formalization process run by Claude Fable 5.1 (Anthropic),\ndirected and audited by Chris Elliott at Resolution, following the human-written sources listed in\nthe bibliography ([`references.bib`](references.bib)), and then refactored and prepared for release\nby Billy Snikkers and Adam Newgas at Resolution, also through Claude Code sessions. Every theorem is\nchecked by Lean's kernel; the axioms used are `propext`, `Classical.choice` and `Quot.sound` only.\n\n## License\n\nApache License 2.0; see [`LICENSE`](LICENSE). Copyright (c) 2026 Resolution.\n",1792957691445]