|
3 | 3 | All notable changes to CombArg will be documented here. |
4 | 4 | Format based on [Keep a Changelog](https://keepachangelog.com/). |
5 | 5 |
|
| 6 | +## [0.4.0] — 2026-04-28 |
| 7 | + |
| 8 | +### Two-tier architecture: structured DLT cover + alternative scalar proof |
| 9 | + |
| 10 | +A purely-additive architectural pass. The DLT-style construction is |
| 11 | +factored into a first-class structured output `OneDim.DLTCover` so |
| 12 | +that a future geometric consumer (DLT modified-sweepout via positive- |
| 13 | +measure overlap blending) has a stable import target carrying the |
| 14 | +full Stage A + B intermediate state. In parallel, the abstract scalar |
| 15 | +theorem is given a second, strictly cheaper proof |
| 16 | +(`Scalar.exists_refinement_partition`) by partition-by-endpoints, |
| 17 | +making it machine-verifiable that the DLT machinery is *not* |
| 18 | +arithmetically required for the abstract `FiniteCoverWithWitnesses` |
| 19 | +output --- it is required for the geometric lift, which is where the |
| 20 | +construction's overlap structure actually load-bears. |
| 21 | + |
| 22 | +Existing consumers (`exists_sup_reduction`, |
| 23 | +`exists_sup_reduction_of_cover`, `OneDim.exists_refinement`) are |
| 24 | +**unchanged in signature** and continue to work without modification. |
| 25 | + |
| 26 | +#### Added (Lean) |
| 27 | + |
| 28 | +- **`CombArg/OneDim/DLTCover.lean`** — new structured output type |
| 29 | + `DLTCover f m₀ N` packaging the Stage A initial cover (with skip-2 |
| 30 | + spacing condition (a)), the Stage B partial refinement, the |
| 31 | + termination invariant `∀ i, ic.I i ⊆ ⋃ k, pr.J k`, and |
| 32 | + σ-injectivity. Convenience projections `J k`, `σ k`, `wit k`; |
| 33 | + derived lemmas `saving_on_J`, `saving_bound_closure`, |
| 34 | + `twoFold_closure`, `covers_nearCritical`; downgrade |
| 35 | + `toFinite : DLTCover → FiniteCoverWithWitnesses`. |
| 36 | +- **`CombArg.OneDim.exists_DLTCover`** — the structured version of |
| 37 | + the combinatorial main theorem. Chains |
| 38 | + `exists_initialCover` and `exists_terminal_refinement` and |
| 39 | + packages their output into `DLTCover`. Public API. |
| 40 | +- **`CombArg/Scalar/Partition.lean`** + **`CombArg.Scalar`** facade |
| 41 | + — alternative cheap proof of the abstract scalar theorem via |
| 42 | + partition-by-endpoints. Compactness of the near-critical set |
| 43 | + yields a finite open subcover, sorting interval endpoints |
| 44 | + partitions `unitInterval` into closed pieces of multiplicity ≤ 2, |
| 45 | + and continuity extends per-piece saving from the open `Ioo` |
| 46 | + interior to the closed piece. The proof imports neither |
| 47 | + `OneDim/Induction` nor `OneDim/SpacedIntervals` --- the |
| 48 | + dependency graph confirms that the DLT spacing/parity machinery |
| 49 | + is *not* required for the abstract scalar conclusion. |
| 50 | +- **`CombArg/Geometric/`** — directory placeholder for future |
| 51 | + geometric consumers; a `README.md` notes that v0.4 ships only |
| 52 | + the architecture, with the actual modified-sweepout lift |
| 53 | + (`ModifiedSweepout.lean`) deferred. |
| 54 | + |
| 55 | +#### Changed (Lean — internal refactor, public API unchanged) |
| 56 | + |
| 57 | +- `OneDim/Assembly.lean` is now thin: `exists_DLTCover` (Stage A + |
| 58 | + Stage B → `DLTCover`) plus a re-defined `exists_refinement` as |
| 59 | + `(exists_DLTCover ...).toFinite`. The `terminal_twoFold` and |
| 60 | + `saving_bound_closure` lemmas previously inline in Assembly |
| 61 | + migrate into `DLTCover` as methods on the structured output. |
| 62 | + The output of `exists_refinement` is bit-identical to v0.3. |
| 63 | + |
| 64 | +#### Added (audit + tests) |
| 65 | + |
| 66 | +- **`Audit.lean`** now audits five public theorems |
| 67 | + (`exists_sup_reduction`, `exists_sup_reduction_of_cover`, |
| 68 | + `OneDim.exists_refinement`, `OneDim.exists_DLTCover`, |
| 69 | + `Scalar.exists_refinement_partition`); all five depend only on |
| 70 | + `propext`, `Classical.choice`, `Quot.sound`. The public-API |
| 71 | + listing grows from 4 to 8 declarations (adding `DLTCover`, |
| 72 | + `exists_DLTCover`, `exists_refinement_partition`). |
| 73 | +- **`test/Smoke.lean`** adds an end-to-end invocation of |
| 74 | + `Scalar.exists_refinement_partition` and `#print axioms` |
| 75 | + guards on `exists_DLTCover` and `exists_refinement_partition`. |
| 76 | + |
| 77 | +#### Found (paper-level) |
| 78 | + |
| 79 | +- **F5. The two-tier architecture is verified, not asserted.** Paper |
| 80 | + Remark 1.5 (`rem:why-construction`) claims that the abstract |
| 81 | + scalar Theorem 1.3 admits a strictly shorter proof and that the |
| 82 | + DLT machinery is over-engineered at the abstract level. v0.4 |
| 83 | + upgrades this from prose claim to dependency-graph fact: |
| 84 | + `Scalar/Partition.lean` ships a complete, sorry-free, axiom-clean |
| 85 | + proof of the same conclusion that imports none of the DLT-side |
| 86 | + refinement machinery. The DLT path's value lies entirely in |
| 87 | + preserving structure (spacing, σ-injectivity, J_subset) for a |
| 88 | + geometric lift --- the new `DLTCover` output is the import target |
| 89 | + that future geometric consumers will use. |
| 90 | + |
6 | 91 | ## [0.3.0] — 2026-04-26 |
7 | 92 |
|
8 | 93 | ### Restructure for clarity + developer-tooling pass |
|
0 commit comments