[{"data":1,"prerenderedAt":4},["ShallowReactive",2],{"nyLEBbMXDb":3},"# jordan_pick\n\nA clean-room Lean 4 / Mathlib formalization of **Pick's theorem** (Freek's\n*Formalizing 100 Theorems* #92), the **polygonal Jordan curve theorem**, the\nfull **(continuous) Jordan curve theorem**, and **Radó's theorem** (every\nconnected Hausdorff Riemann surface is second countable) — all genuinely\nmissing from Mathlib.\nThree lean-eval problems are solved: [`pick`](https://lean-lang.org/eval/problems/pick/),\n[`jordan_curve`](https://lean-lang.org/eval/problems/jordan_curve/), and\n[`rado_riemannSurface`](https://lean-lang.org/eval/problems/rado_riemannSurface/).\n\n## Main results\n\nAll proved **sorry-free**; `#print axioms` shows only the three standard axioms\n`[propext, Classical.choice, Quot.sound]`.\n\n| theorem | location | statement |\n|---|---|---|\n| **Pick's theorem** | `Pick.pick` (`JordanPick/PicksTheorem/Pick.lean`) | a simple, positively-oriented lattice polygon has `area = I + B/2 − 1` (area = Lebesgue measure of the winding interior; `I`/`B` interior/boundary lattice-point counts) |\n| **Polygonal Jordan curve theorem** | `Pick.LatticePolygon.compl_boundary_atMost_two` (`JordanPick/PicksTheorem/Pick.lean`) | the complement of a simple polygon's boundary has at most two connected components, with the winding number locally constant `∈ {0, 1}` |\n| **lean-eval Pick** | `LeanEval.Geometry.PicksTheorem.pick` (`JordanPick/PicksTheorem/EvalBridgeMain.lean`) | the exact statement of \u003Chttps://lean-lang.org/eval/problems/pick/> (Mathlib `Polygon`, *topological* interior, no orientation hypothesis), bridged to `Pick.pick` |\n| **Jordan curve theorem (continuous)** | `JordanCurve.jordan_curve` (`JordanPick/JordanCurve.lean`) | the exact statement of \u003Chttps://lean-lang.org/eval/problems/jordan_curve/>: a continuous injection `S¹ → ℝ²` has a complement with exactly two connected components (`Nat.card (ConnectedComponents (range r)ᶜ) = 2`) |\n| **Brouwer fixed point theorem (2D)** | `JordanCurve.Brouwer.brouwerFPT` (`JordanPick/JordanCurve/Brouwer.lean`) | every continuous self-map of a nonempty compact convex subset of `ℝ²` has a fixed point |\n| **Radó's theorem** | `rado_riemannSurface` (`Rado/Main.lean`) | the exact statement of \u003Chttps://lean-lang.org/eval/problems/rado_riemannSurface/>: a connected Hausdorff `ChartedSpace ℂ` with `IsManifold 𝓘(ℂ) 1` is `SecondCountableTopology` |\n| **Poincaré–Volterra lemma** | `Rado.poincare_volterra` (`Rado/Topology/PoincareVolterra.lean`) | a connected Hausdorff, locally compact, locally connected, locally second-countable space with a continuous discrete-fiber map to a second-countable Hausdorff space is second countable |\n| **Dirichlet problem on a disk** | `Rado.exists_harmonic_extension` (`Rado/Complex/Poisson.lean`) | continuous boundary data on a circle extends continuously to the closed disk, harmonically inside |\n| **Perron's principle** | `Rado.IsPerronFamily.surfaceHarmonicOn_perronSup` (`Rado/Surface/Perron.lean`) | the upper envelope of a Perron family on a Riemann surface is harmonic |\n\nThe **Radó development** (`Rado/`, separate `lean_lib`) is a distinct project\nfrom Pick/Jordan: Perron's method on an explicit two-disk configuration\nproduces a nonconstant harmonic function; the étale space of its\nharmonic-conjugate germs has an evaluation map with discrete fibers; the\nPoincaré–Volterra lemma plus descent give second countability. Plan and\nmodule map: `Rado/PLAN.md`; submission workspace:\n`submission/rado_riemannSurface/` (`scripts/make_rado_submission.sh`).\n\n## Approach\n\nThe spine is the **winding number** as a per-edge signed ray-crossing sum (pure\ninteger arithmetic — no transcendental angles, no general topology). From it:\n`area = ∫∫ winding` (Green) `= shoelace`; the polygonal Jordan curve theorem\ngives `winding ∈ {0,1}`; and **ear-clipping induction** (the Meisters two-ears\ntheorem, via a deepest-contained-vertex diagonal split with a non-circular\nwinding-jump separation argument) reduces the area identity to the triangle\ncase.\n\nThe lean-eval Pick target adds a bridge: Mathlib `Polygon` ↔ our `LatticePolygon`,\nthe topological interior ↔ the winding interior, an orientation WLOG (vertex\nreversal), and lattice-count matching.\n\nThe **continuous Jordan curve theorem** is a separate development (it does *not*\nuse the polygonal one): **Maehara's proof** — reduce the separation statement to\nthe **Brouwer fixed point theorem** via two lemmas (a crossing lemma for\ntransversal paths in a rectangle, and \"each component has the curve as its\nboundary\"), plus the farthest-pair normalization and the `l,m,p,q,z₀`\nconstruction that pins down exactly one bounded component. Brouwer FPT for `ℝ²`\nis then built from the ground up: `π₁(S¹) ≅ ℤ` → no retraction of the disk onto\nits boundary → Brouwer on the disk (ray-retraction) → the general convex-compact\ncase (nearest-point projection).\n\n## Building\n\n```\nlake build\n```\n\nPinned to **Lean `v4.32.2`** + **Mathlib `905b9581`** (the `v4.32.2` release tag)\nvia `lean-toolchain` / `lakefile.toml` — chosen to **match the lean-eval harness**,\nso both eval submissions build against the harness's exact dependencies. Mathlib\nis fetched as a dependency. (The proof is version-robust: the `v4.31.0` →\n`v4.32.0-rc1` port needed no code changes at all, and `v4.32.0-rc1` → `v4.32.2`\nneeded only a mechanical rename, `LocPathConnectedSpace` →\n`LocallyPathConnectedSpace`, across eight `Uniformization/` files. Because that\nname did not exist before Mathlib's 2026-06-21 rename, the tree no longer builds\non the older pins.)\n\n`v4.32.2` is the first release carrying both of the mid-2026 kernel soundness\nfixes — [#14484](https://github.com/leanprover/lean4/issues/14484) (missing\nclosure check on `opaque` declarations) in `v4.32.1`, and\n[#14576](https://github.com/leanprover/lean4/issues/14576) (nested inductives\nwith phantom parameters escaping the type checker) in `v4.32.2`. Both were\nreachable only by an adversarial metaprogram calling `addDecl` directly, never\nfrom ordinary tactics, but the axiom audits below are worth more on a kernel that\nhas them. Note that Mathlib `master` is *not* the right target here: it still\npins Lean `v4.33.0-rc1`, cut before either fix.\n\n## Layout\n\n```\nJordanPick/PicksTheorem/\n  Defs Winding Area Weight PerEdge Jordan      -- winding/area/count primitives\n  Pick/ Reductions Alternation Corners BoundaryArcs Slab Routing EarClip\n  Pick.lean                                    -- the JCT + ear-clipping + Pick.pick\n  EvalBridge*                                  -- the bridge to the lean-eval statement\nsubmission/                                    -- self-contained lean-eval submission scaffold\n```\n\n## lean-eval submission\n\n`submission/` holds a turnkey scaffold for the lean-eval Pick problem:\n`bundle-engine.sh` bundles the engine + bridge into a self-contained\n`Submission/Engine/` tree (no external project import), and `README.md` there\ndocuments the assembly. See it for the (logistics-only) remaining steps.\n\n## Notes\n\n* **Clean-room.** Developed independently of the existing unlicensed Lean Pick\n  repository.\n* Area is the rigorous Lebesgue measure of the enclosed region, not\n  shoelace-as-definition.\n\n## Relation to prior work\n\nClean-room with respect to proofs, with prior art credited explicitly:\n\n* The **geometric core** — the polygonal Jordan curve theorem and the\n  ear-clipping (Meisters two-ears) reduction that yield `Pick.pick` — is\n  original. The closest prior Lean attempt (Eisermann & Zumkeller, below) proves\n  only the *algebraic* count identity and leaves the geometric half (a\n  winding/Umlaufsatz argument) unproved (`sorry`).\n* The **count side** (`latWeight` / `latWeightSum` in `Weight.lean`) follows the\n  discrete-angle-weight device of Eisermann & Zumkeller (`dang` / `Welp`); the\n  per-edge identity is proved independently here (a column decomposition rather\n  than their four-box partition + reflection involution). See the `Weight.lean`\n  header for specifics.\n* The continuous JCT's **Maehara reduction** and the entire **Brouwer** chain\n  (circle non-nullhomotopy, no-retraction, disk Brouwer, convex-compact) are\n  original to this repo and self-contained against Mathlib. The one non-trivial\n  topological input — that a once-around loop of the circle is not\n  null-homotopic — is proved directly from Mathlib's covering-space path lifting\n  (`AddCircle.isCoveringMap_coe` + `liftPath_apply_one_eq_of_homotopicRel`), so\n  no external `π₁(S¹) ≅ ℤ` development is needed.\n\n## License\n\n[Apache-2.0](LICENSE). Machine-readable project metadata (sources, status,\naxiom surface, automation) lives in [`formalization.yaml`](formalization.yaml).\n\n## References\n\n**Targets and tooling**\n- Pick's theorem — [Wikipedia](https://en.wikipedia.org/wiki/Pick%27s_theorem)\n- F. Wiedijk, *Formalizing 100 Theorems* (#92 is Pick) — \u003Chttps://www.cs.ru.nl/~freek/100/>\n- lean-eval Pick problem — \u003Chttps://lean-lang.org/eval/problems/pick/>;\n  source repo [`leanprover/lean-eval`](https://github.com/leanprover/lean-eval)\n- [Mathlib](https://github.com/leanprover-community/mathlib4)\n\n**Jordan curve theorem (polygonal)**\n- T. C. Hales, *The Jordan Curve Theorem, Formally and Informally* —\n  [PDF](https://webhomes.maths.ed.ac.uk/~v1ranick/papers/hales1.pdf)\n- C. Thomassen, *The Jordan–Schönflies Theorem and the Classification of\n  Surfaces*, Amer. Math. Monthly 99(2):116–130, 1992 —\n  [doi:10.1080/00029890.1992.11995820](https://doi.org/10.1080/00029890.1992.11995820)\n  ([JSTOR](https://www.jstor.org/stable/2324180))\n\n**Ear-clipping / triangulation (the reduction)**\n- G. H. Meisters, *Polygons Have Ears*, Amer. Math. Monthly 82(6):648–651, 1975 —\n  [doi:10.2307/2319703](https://doi.org/10.2307/2319703)\n  ([open copy](https://digitalcommons.unl.edu/mathfacpub/54/))\n- J. O'Rourke, *Computational Geometry in C*, 2nd ed., Cambridge Univ. Press, 1998\n  (Lemma 1.3 / two-ears, §1.2)\n- M. de Berg, O. Cheong, M. van Kreveld, M. Overmars, *Computational Geometry:\n  Algorithms and Applications*, 3rd ed., Springer, 2008 (polygon triangulation)\n\n**Prior formalizations of Pick's theorem**\n- J. Harrison (HOL Light), *A formal proof of Pick's theorem*, Math. Struct.\n  Comput. Sci., 2011 —\n  [Cambridge Core](https://www.cambridge.org/core/journals/mathematical-structures-in-computer-science/article/abs/formal-proof-of-picks-theorem/6C09292039220C2215755FEFDB78818C)\n- S. Binder & K. Kosaian (Isabelle/HOL), *Formalizing Pick's Theorem in\n  Isabelle/HOL*, CICM 2024 — [arXiv:2405.01793](https://arxiv.org/abs/2405.01793);\n  AFP entry [`Picks_Theorem`](https://www.isa-afp.org/entries/Picks_Theorem.html)\n- M. Eisermann et al. (Lean), *Formalizing Pick's Theorem, efficiently*, 2026 —\n  [arXiv:2603.23095](https://arxiv.org/abs/2603.23095)\n\n**Background**\n- O. Knill, *Some Fundamental Theorems in Mathematics* (Pick is §154) —\n  [arXiv:1807.08416](https://arxiv.org/abs/1807.08416)\n",1785960025912]