# Reproduce Ordinary finite-chain Morse handles and the exhaustion bound

Read the complete current learner and formal argument. Every worked example and all six complete solutions are retained.

## Exact original files and useful complete alternatives

The current thirteen-file packet retains all complete mathematical proof, formula and exercise bodies, coordinates and geometry. The formal and learner provider-credit notices are revised to describe the current source qualifications accurately, and their exact current byte counts and hashes are listed below. The full thirteen-file original alternative is unchanged. The previously corrected renderer’s two label positions and block PNG/SVG remain as supplied.

- DejaVu-font-license.txt — 4816 bytes; SHA256 `D75938DEC098F06F0AC3C00853065D94F020BE1C3C62EF1DC2975BA15B4D9B0E`.
- [figures/block-and-stopping-flow.png](../reproduce/L125/figures/block-and-stopping-flow.png) — 190216 bytes; SHA256 `A19272A49207A13A57FF4A5BCFB22AC53244969DE688DA9D3E45B9F6DB9434E4`.
- [figures/block-and-stopping-flow.svg](../reproduce/L125/figures/block-and-stopping-flow.svg) — 206084 bytes; SHA256 `51E3CFC11EC996778FCA96D319BE29C00168CE7B3BE321D4D4CA8517E01DA30C`.
- [figures/cylinder-sublevels-and-open-stages.png](../reproduce/L125/figures/cylinder-sublevels-and-open-stages.png) — 174268 bytes; SHA256 `953513FE0F5F9CFE99628A9C220465DD7A04224C54CC93544625BBA82BF76139`.
- [figures/cylinder-sublevels-and-open-stages.svg](../reproduce/L125/figures/cylinder-sublevels-and-open-stages.svg) — 177823 bytes; SHA256 `4297FC96521F85D7FAA20C1A7A6338CC94841E809859B2F2B11C0EFE9112CA02`.
- [figures/geometry.json](../reproduce/L125/figures/geometry.json) — 3226 bytes; SHA256 `4AE146C6036878EC77A8E08340A7E90726CC9E2A920499C957B1525AA433F496`.
- [figures/relative-pairs-and-generators.png](../reproduce/L125/figures/relative-pairs-and-generators.png) — 124231 bytes; SHA256 `C018601A9F7FFEEA47F7867118B4F6368D853398DA2BFC97626AA691722F400A`.
- [figures/relative-pairs-and-generators.svg](../reproduce/L125/figures/relative-pairs-and-generators.svg) — 67224 bytes; SHA256 `EBB3DB839D70EAB1B87AB669528DD533FD0B00B31E7878EDDEAFF47CA7528759`.
- [LICENSE.txt](../reproduce/L125/LICENSE.txt) — 439 bytes; SHA256 `91C76070C56A35BF78BC5F04C425654E38B26449881375F77CCC7F0782125E43`.
- [make_figures.py](../reproduce/L125/make_figures.py) — 10605 bytes; SHA256 `12AAE5E44DEAD25ED3BB9337C00C7ACDC02E736BC608D3D3E043FCB296AFF4F0`.
- [morse-finite-chain-handles-formal.md](../reproduce/L125/morse-finite-chain-handles-formal.md) — 34636 bytes; SHA256 `77B7729CA8A3974868007F7050712C9192B528DA040BAF47B4E02F32FB629E33`.
- [morse-finite-chain-handles-learner.md](../reproduce/L125/morse-finite-chain-handles-learner.md) — 55744 bytes; SHA256 `CC875F6E76D08EFB4BEDA8B369B47298C15C5C31ADFAC4C887E53C90FC5B188C`.
- [README-reproduce.md](../reproduce/L125/README-reproduce.md) — 1355 bytes; SHA256 `CA704C3EDA990785A1500A1177DF33DD552961F8A646BF73FC7BF64B50ECF7DA`.
- original-alternative/DejaVu-font-license.txt — 4816 bytes; SHA256 `D75938DEC098F06F0AC3C00853065D94F020BE1C3C62EF1DC2975BA15B4D9B0E`.
- [original-alternative/figures/block-and-stopping-flow.png](../reproduce/L125/original-alternative/figures/block-and-stopping-flow.png) — 180974 bytes; SHA256 `87213A2EA05239376954C5E20D4EBCD8A4B66ACA6FD9680D8426EEABD5403252`.
- [original-alternative/figures/block-and-stopping-flow.svg](../reproduce/L125/original-alternative/figures/block-and-stopping-flow.svg) — 206082 bytes; SHA256 `3F3556A3DABFAA15FED430E865AAF39E71082E1A53B258E9BE5BBDA58A9D0C47`.
- [original-alternative/figures/cylinder-sublevels-and-open-stages.png](../reproduce/L125/original-alternative/figures/cylinder-sublevels-and-open-stages.png) — 174268 bytes; SHA256 `953513FE0F5F9CFE99628A9C220465DD7A04224C54CC93544625BBA82BF76139`.
- [original-alternative/figures/cylinder-sublevels-and-open-stages.svg](../reproduce/L125/original-alternative/figures/cylinder-sublevels-and-open-stages.svg) — 177823 bytes; SHA256 `4297FC96521F85D7FAA20C1A7A6338CC94841E809859B2F2B11C0EFE9112CA02`.
- [original-alternative/figures/geometry.json](../reproduce/L125/original-alternative/figures/geometry.json) — 3226 bytes; SHA256 `4AE146C6036878EC77A8E08340A7E90726CC9E2A920499C957B1525AA433F496`.
- [original-alternative/figures/relative-pairs-and-generators.png](../reproduce/L125/original-alternative/figures/relative-pairs-and-generators.png) — 124231 bytes; SHA256 `C018601A9F7FFEEA47F7867118B4F6368D853398DA2BFC97626AA691722F400A`.
- [original-alternative/figures/relative-pairs-and-generators.svg](../reproduce/L125/original-alternative/figures/relative-pairs-and-generators.svg) — 67224 bytes; SHA256 `EBB3DB839D70EAB1B87AB669528DD533FD0B00B31E7878EDDEAFF47CA7528759`.
- [original-alternative/LICENSE.txt](../reproduce/L125/original-alternative/LICENSE.txt) — 439 bytes; SHA256 `91C76070C56A35BF78BC5F04C425654E38B26449881375F77CCC7F0782125E43`.
- [original-alternative/make_figures.py](../reproduce/L125/original-alternative/make_figures.py) — 10469 bytes; SHA256 `3626B57D00C64BA11EC20A89DF4658BFEFB6A51325A9A6344F8A53E76C94BD71`.
- [original-alternative/morse-finite-chain-handles-formal.md](../reproduce/L125/original-alternative/morse-finite-chain-handles-formal.md) — 34636 bytes; SHA256 `77B7729CA8A3974868007F7050712C9192B528DA040BAF47B4E02F32FB629E33`.
- [original-alternative/morse-finite-chain-handles-learner.md](../reproduce/L125/original-alternative/morse-finite-chain-handles-learner.md) — 55744 bytes; SHA256 `CC875F6E76D08EFB4BEDA8B369B47298C15C5C31ADFAC4C887E53C90FC5B188C`.
- [original-alternative/README-reproduce.md](../reproduce/L125/original-alternative/README-reproduce.md) — 1355 bytes; SHA256 `CA704C3EDA990785A1500A1177DF33DD552961F8A646BF73FC7BF64B50ECF7DA`.

## Fresh native reproduction

Use Python, NumPy and Matplotlib in a fresh scratch directory. Keep the renderer with its supplied README and licence.

```text
python -B -X utf8 make_figures.py --output-dir fresh-figures
```

Compare every PNG, SVG and geometry.json with the exact supplied outputs. Different library or font versions can alter bytes; exact coordinates, constants, signs, identifications and proof locators remain in geometry.json and the full captions. The figures are explanatory objects, not substitutes for the complete proof.

## Credits and scope

Original TP041 and MH043 proof, diagrams and renderer: GPT-6.1 Sol (OpenAI), Ultra, October 2026, CC0-1.0. Original programme sources retain their precise Claude Opus5.5 or GPT-6.1 Sol credits and CC0 notices. Added orientation, current qualification and reader presentation: GPT-6.1 Sol (OpenAI), Ultra, October 2026, CC0-1.0. Valid human mathematical credits remain with the current sources. They do not license an external book body or establish proof closure. MathJax retains Apache-2.0; DejaVu and STIX retain their original font notices.

Geometric H is at the proper Morse, finite-chain and declared index entries. The selected Thom/tubular proofs retain their exact coefficient and manifold hypotheses. Lower analytic regularity, smooth perturbation, Sard, whole Stein/sheaf courses, rational form completeness and spanning, affine C8, full component constancy and recursive course closure are separate. L124 preserves the original conditional compact-support alternative and records the real comparison. L125 supplies the complete finite-chain handle proof.
