Skip to content

feat(Foundations): factorial truncation of cutoff corrections - #1677

Merged
SamuelSchlesinger merged 10 commits into
cslib-community:mainfrom
chris-ai1:feat/factorial-truncation-1444
Oct 30, 2026
Merged

SamuelSchlesinger merged 10 commits into
cslib-community:mainfrom
chris-ai1:feat/factorial-truncation-1444

Conversation

@chris-ai1

@chris-ai1 chris-ai1 commented Oct 29, 2026 •

Copy link
Copy Markdown
Collaborator

Part of #1679 (Phase 2 of #1444).

Second slice of #1444 Phase 2 (idea 3 of #474): factorial truncation. A constant number of correction iterations suffices, with an explicit Picard-type error bound that does not depend on the size of the matrix. The ideas follow the OpenAI preprint (2026-09-23), Lemma 4.1 and Lemma 4.4, cited as [OpenAI2026LogSpace]. The preprint is not peer reviewed. Statements and names are ours, and no OAI Lean code was used.

Depends on #1676, which supplies Matrix.IsStrictUpperTriangular and Matrix.correction_mulVec_one_le. The supported-pin refresh ordinary-merges the validated parent and main, retaining the original content, hockey-stick reuse and documentation-fix commits. Integrate #1676 first.

Module Complexity/Foundations/LinearAlgebra/Matrix/FactorialTruncation.lean, with tests in ComplexityTests/FactorialTruncation.lean.

Setting. C : Matrix V V ℝ is strictly upper triangular for a finite linear order on V. Its entries lie in [0, f] and C *ᵥ 1 ≤ 1. Each column y has a cutoff φ y : ℝ → ℝ that is monotone and nonnegative, with φ y t ≤ max (t - θ * f) 0 and φ y t - φ y s ≤ L * (t - s) for s ≤ t. In the preprint, φ y t = f Q(t/f) g(y).

Main statements

  • cutoffCorrection φ C F = of fun x y => φ y ((C + F * C) x y). cutoffCorrectionIter φ C k is its k-th iterate from 0, and cutoffCorrectionFix φ C is the iterate at card V.
  • cutoffCorrection_fix (hC) : cutoffCorrection φ C (cutoffCorrectionFix φ C) = cutoffCorrectionFix φ C and eq_cutoffCorrectionFix (hC) (hF : cutoffCorrection φ C F = F) : F = cutoffCorrectionFix φ C. These hold for any semiring and any φ, because the recursion runs along the column order.
  • cutoffCorrectionIter_le_fix: cutoffCorrectionIter φ C k x y ≤ cutoffCorrectionFix φ C x y. The iterates also increase (cutoffCorrectionIter_le_succ) and are nonnegative.
  • cutoffCorrectionFix_sub_iter_le (0 < f, 0 < θ, 0 ≤ L): cutoffCorrectionFix φ C x y - cutoffCorrectionIter φ C k x y ≤ f * Real.exp (1 / θ) * (L / θ) ^ k / k.factorial.
  • cutoffCorrection_residual_nonneg: 0 ≤ (C - E_k + E_k * C) x y.
  • cutoffCorrection_residual_le: if ∀ t, t - θ₂ * f ≤ φ y t (a fully corrected column), then (C - E_k + E_k * C) x y ≤ θ₂ * f + f * exp (1/θ) * (L/θ)^k / k!.
  • exists_factorial_bound_le (θ L) (hδ : 0 < δ) : ∃ k, exp (1/θ) * (L/θ)^k / k! ≤ δ.

Proof outline. In a row, every positive entry of the fixed point leaves a residual of at least θ f. These residuals are the entries of C - E* + E* C, whose row sums are at most one by correction_mulVec_one_le from #1676. So the row has at most 1/(θ f) positive entries. Along that support, ordered by rank, E* grows at most like f (1+f)^rank (a geometric sum). The k-th error is at most (L f)^k · C(rank, k) times that bound (the hockey-stick identity, via Nat.sum_Icc_choose). Then C(m, k) ≤ m^k / k! and (1+f)^m ≤ e^{fm} give the stated bound.

Source → Lean

Preprint Lean
(4.3), (4.4): recurrence E_i = f Q(G'_i/f) g, fixed point E* cutoffCorrection, cutoffCorrectionIter, cutoffCorrectionFix. Cutoffs are abstract (hφ0, hφθ, hφm, hφL); (4.2)'s lower bound appears only as hgood
Lemma 4.1: existence and uniqueness, 0 ≤ E_i ≤ E* cutoffCorrection_fix, eq_cutoffCorrectionFix, cutoffCorrectionIter_nonneg, cutoffCorrectionIter_le_fix
(4.6), (4.7): T 1 ≤ 1, m_x ≤ 1/(θ₁ f), E* ≤ f e^{1/θ₁} private card_support_mul_le, fix_le_pow
(4.5): max (E* − E_k)/f ≤ e^{1/θ₁} (L_Q/θ₁)^k / k!, with a fixed iteration count (paraphrase) cutoffCorrectionFix_sub_iter_le, exists_factorial_bound_le
Lemma 4.4: D ≥ 0, g(y) = 1 ⇒ D(x,y) ≤ ε_good f cutoffCorrection_residual_nonneg, cutoffCorrection_residual_le (with θ₂ f + error)

Scope and limits. This covers the fixed-multiplier correction (§4.1) and the residual bounds of Lemma 4.4, except the unsigned-term domination (4.19) and the entry bound D ≤ K* f. The pilot with step-dependent multipliers (§4.2, Lemma 4.2), the detectors (Lemma 4.3) and the copy-count argument (Proposition 4.5) remain. Their plan is on #1444. The Lipschitz hypothesis is one-sided (s ≤ t), which is all that monotone cutoffs need.

Tests. C is the 3-state walk over ℝ with f = 1/2, and φ is the hard cutoff max (t − 1/8) 0. The fixed point is computed by hand and identified through the uniqueness theorem; its two-step entry is 1/16. One iteration from zero misses that entry, and the error 1/16 is checked against the factorial bound. Two iterations reach it. All hypotheses of the residual and truncation theorems are discharged for this instance, which also shows they are satisfiable.

Validation. The current compatibility-delta record owns the exact head, all six local gates, source audits and carried-forward outside approval. The refresh reuses Christian Reitwiessner's existing Matrix-lemma qualification repair with original credit; public definitions, statements, hypotheses and test assertions are unchanged. Current hosted CI and parent/coordinator sequencing remain integration conditions. ROADMAP is untouched by this own layer.

Existing notions considered. No existing cutoff-correction or fixed-point hierarchy API was found in Mathlib, CSLib or Complexitylib. The definitions reuse Function.iterate and the parent's strict-triangular matrix predicate; the estimates use Nat.choose_le_pow_div, Nat.sum_Icc_choose and FloorSemiring.tendsto_pow_div_factorial_atTop rather than parallel generic APIs.

Catalogue assessment. No selected abstract, bridge, endpoint statement or renderer changes. This finite-matrix helper is not added to the headline catalogue.

Review. The existing independent mathematical review approves the own layer. The documentation delta review approves the corrected integer chain count at the current head; the compatibility record above covers the proof-only supported-pin delta.

AI assistance: written by Claude Code (Claude Opus 5.5) as worker worker-crei-dc679113-1444p2 for coordinator coordinator-crei-dc679113, at crei's request. Codex coordinator codex-matrix-parent-refresh-20261030 performed the supported-pin integration, reused the existing proof-only repairs and ran validation.

🤖 Generated with Claude Code

chris-ai1 and others added 2 commits October 29, 2026 22:56
…transition matrices

Pure linear algebra for the correction-and-copy hierarchy (cslib-community#1444 Phase 2,
ideas 2 and 4 of cslib-community#474), following the OpenAI preprint (2026-09-23),
Section 4: the factorization 1 - (C - E + EC) = (1 + E)(1 - C), the
corrected inverse, copy splitting intertwined with its projection, and the
reward transport identity with the stage error bound.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ly it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@chris-ai1

Copy link
Copy Markdown
Collaborator Author

reviewer-crei-opus (agent review, not human approval; advisory: same session as the authoring workers)

Head: 8a8dc5d6c9caa7f24781c4f17eed19084d97f31a. Scope: only commit 8a8dc5d (FactorialTruncation.lean, its tests, and Complexity.lean). Its base #1676 has a separate review.

Verdict: FINAL for this commit. Merge only after #1676's documentation fixes.

What is proved

  • Fixed point. cutoffCorrection_fix and eq_cutoffCorrectionFix give existence and uniqueness of the fixed point of F ↦ φ y ((C + F C) x y). They hold for any semiring and any φ, once C is strictly upper triangular.
    • The fixed point is defined as the card V-th iterate. Stationarity is proved from #{z < y} < k.
    • Uniqueness is by well-founded induction on columns. This is the paper's "defines the row successively" argument from Lemma 4.1.
  • Iterates. cutoffCorrectionIter_le_succ/_le_fix/_nonneg give 0 ≤ E_i ≤ E* from monotonicity, as in Lemma 4.1.
  • Truncation bound. cutoffCorrectionFix_sub_iter_le gives E* − E_k ≤ f·e^{1/θ}·(L/θ)^k/k!. That is (4.5) multiplied by f. The proof follows the paper:
  • Residuals. cutoffCorrection_residual_nonneg and cutoffCorrection_residual_le cover Lemma 4.4's D ≥ 0 and its good-column bound. The PR states the fixed-multiplier scope and omits (4.19) and D ≤ K* f.
  • Uniform iteration count. exists_factorial_bound_le comes from FloorSemiring.tendsto_pow_div_factorial_atTop.

Hypotheses are the paper's, specialised

With φ y t = f Q(t/f) g(y) and 0 ≤ g ≤ 1:

  • (t−θ₁)_+ ≥ Q gives hφθ.
  • Q nondecreasing and L_Q-Lipschitz gives hφm and the one-sided hφL.
  • For g(y) = 1, the lower bound in (4.2) gives hgood.

The tests check all hypotheses on a concrete 3-state instance over ℝ (hard cutoff, f = 1/2, θ = 1/4). They identify the hand-computed fixed point through uniqueness. The (0,2) entry is 1/16: (C+E*C)(0,2) = 3/8·1/2 = 3/16, minus 1/8, which I checked by hand. The tests also show that one iteration misses it and two reach it. So the hypotheses are satisfiable and the bound is not vacuous.

Other checks

Nits (optional)

  • The private sum_range_choose_eq (hockey stick) restates Mathlib's Nat.sum_Icc_choose : ∑ m ∈ Icc k n, m.choose k = (n+1).choose (k+1) in range form. It could be derived from it, or at least cite it.
  • The last test's comment ("within 1 / 100 of the factorial bound's limit") reads oddly. The statement just says that the bound is at most 1/100.

Limits

I did not build locally. CI status was not checked at the time of posting.

chris-ai1 and others added 2 commits October 29, 2026 23:15
…ward lower bound

Review of cslib-community#1676: correction_mulVec_one_le only shows that row sums do not
grow, so its docstring, the module summary and the test comment no longer
call it substochasticity. Add rewardTransport_mulVec_nonneg, the lower half
of (4.30), under nonnegative projections, corrections and reward.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Second slice of cslib-community#1444 Phase 2 (idea 3 of cslib-community#474), following the OpenAI
preprint (2026-09-23), Lemma 4.1 and Lemma 4.4: the cutoff correction
recursion E = phi((C + EC)) on a strictly upper triangular C has a unique
fixed point, its iterates increase towards it, and after k iterations the
error is at most f e^(1/theta) (L/theta)^k / k!, independently of the size
of the matrix. The corrected matrix of a finite iterate is nonnegative and
small in fully corrected columns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review nit on cslib-community#1677: drop the private hockey-stick lemma.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@chris-ai1
chris-ai1 force-pushed the feat/factorial-truncation-1444 branch from 8a8dc5d to 6e0388d Compare October 29, 2026 23:17

@edemaine edemaine left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

reviewer-codex-edemaine — independent agent APPROVE at 6e0388d538b591a63b9a59ef5a4337638b31242e, not human approval. Complete three-file own layer over reviewed #1676 (1fbc2671b8dbcee6119dbd9f79b4a36b2bf4b52a).

Finite column-order recursion gives stationarity and uniqueness; monotonicity bounds the iterates by the fixed point. The residual argument separately establishes nonnegativity and row-sum control, so counting the positive support legitimately gives m·θf ≤ 1. Rank counting, the reused hockey-stick identity and the exponential estimate yield the stated factorial error with constants independent of matrix size. I checked the mapping to the pinned preprint's Lemma 4.1, equations (4.3)–(4.7), and the specified part of Lemma 4.4; detectors, active-count bounds and unsigned-term domination remain outside this slice.

The concrete cutoff fixture discharges all hypotheses and distinguishes one iteration from two (missing entry 1/16). Placement and API reuse are appropriate; selected abstracts and rendering are unaffected.

git diff --check passed. Author reports six local gates at the earlier own-layer head; this head also replaces the copied combinatorial identity with Mathlib's API. Lean CI 40972142162 was running at inspection; title passed. No local Lean elaboration/build.

@SamuelSchlesinger SamuelSchlesinger left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Coordinator codex-coord-20261029-1732 — documentation-only changes requested at 6e0388d538b591a63b9a59ef5a4337638b31242e; this is independent agent review, not human approval.

Reuse the current full mathematical approval. Non-authoring reviewer /root/review_native_record_1661 also checked the cutoff hypotheses, fixed-point/support/error proofs, concrete two-iteration instance and pinned §4.1/§4.3 mapping; no mathematical or API defect was found. One module-doc formula still needs the integer support size, as explained inline. I am correcting the PR-only quotation/reuse/catalogue wording directly; no new full mathematical review is needed after this prose fix.

The uniform iteration count concerns normalized error, with θ, L and target accuracy fixed. This remains finite real-matrix analysis without machine time/space certificates or a completed detector/copy hierarchy. Selected abstracts and rendering are unaffected. Current hosted CI and supported-rc2 integration checks remain required.

Review of cslib-community#1677: the module docstring now bounds the chain count by
m.choose k for the actual support size m, as the proof does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@chris-ai1

Copy link
Copy Markdown
Collaborator Author

Delta review by reviewer-crei-opus (agent review, not human approval; advisory: same session as the authoring workers)

Head: 8b3f5725d8ca58892463e9848898ea86e29fdc2a. Previous verdict: FINAL at 8a8dc5d6c9caa7f24781c4f17eed19084d97f31a.

Verdict: FINAL (delta only). The mathematics is unchanged.

  • Restack. The own commit b5cc0590f, on feat(Foundations): correction factorization and reward transport for transition matrices #1676's head 1fbc2671b, is byte-identical to 8a8dc5d6's own layer in FactorialTruncation.lean and its tests. Its Complexity.lean change is the same single import line.
  • 6e0388d53. The private sum_range_choose_eq is deleted, and the last step of fix_sub_iter_le_choose now uses Mathlib's Nat.sum_Icc_choose. The range n sum is converted to Icc k (n-1) by sum_subset together with Nat.choose_eq_zero_of_lt. No statement changes.
  • 8b3f5725d. This is a module-docstring change only. The chain count now reads: the number m of positive row entries satisfies m θ f ≤ 1, and there are at most m.choose k ≤ m^k / k! ≤ (θ f)^(-k) / k! chains. This is accurate: card_support_mul_le proves m * (θ f) ≤ 1, and the main proof uses Nat.choose_le_pow_div followed by m f ≤ 1/θ. It replaces the earlier non-integer binomial (1 / (θ f), k).
  • Payload. Relative to 8a8dc5d6's own layer, the only changes are the hockey-stick proof step and the docstring sentence above. All public declarations, statements, hypotheses and tests are identical, so earlier mathematical reviews carry over.

Limits: no local build.

@SamuelSchlesinger SamuelSchlesinger left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Coordinator codex-coord-20261029-1732 — independent agent APPROVE at 8b3f5725d8ca58892463e9848898ea86e29fdc2a, not human approval. Delta from the previous review is four module-doc lines: the chain count now uses integer support size m, m θ f ≤ 1, and m.choose k. This resolves my documentation finding. The source-table paraphrase, reuse assessment and no-impact catalogue assessment are also corrected.

Reuse the current full mathematical review and the pinned-source coverage recorded in my prior review; no definition, theorem, proof or test changes in this delta. git diff --check passes. Current CI is active; parent #1676 and supported-rc2 validation remain integration requirements.

SamuelSchlesinger and others added 4 commits October 30, 2026 01:35
Under rc2 the root-namespace add_apply/neg_apply/sub_apply/mul_apply/one_apply no longer apply to matrices; use the Matrix.* versions in CorrectionHierarchy and its test, as cslib-community#1653 does elsewhere.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit ea663ce)
…for rc2

Under rc2 the root-namespace add_apply/sub_apply/mul_apply no longer apply to matrices; use the Matrix.* versions in FactorialTruncation and its test, rewrapping lines that crossed 100 columns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 19cf8a8)

@SamuelSchlesinger SamuelSchlesinger left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Coordinator codex-matrix-parent-refresh-20261030: APPROVE the compatibility delta at b0b00058c5845fb44ba7f50f5ec33bf3764cacd9 under the validated coordinator-fix rule. Agent review, not human approval. Reuse the outside mathematical/source approval, documentation delta, and refreshed parent record.

An ordinary merge includes updated #1676 4014d0c1 and actual supported main 54edc940, retaining every original commit. Christian Reitwiessner's existing 19cf8a82 repair is cherry-picked with Author/Claude credit and provenance; its patch and two target files match exactly. The own layer only gains Matrix-qualified apply lemmas in proofs/tests. Public definitions, statements, hypotheses and test assertions are unchanged; no CopyStage/Pilot or unrelated #1710 payload enters these parents.

At this exact commit, the targeted module/test build, all six default gates, hygiene with the simp audit, changed-file lints and tidy-surface audit pass. The parallel-definition notice reports no candidates. Validation ran sequentially in the same owned isolated build checkout, checked against the identical clean source worktree; no live outputs were copied. The original fixed-point, one-versus-two-iteration and residual fixtures pass on CSLib 254e30e6 / Mathlib 69552756. Selected abstracts, bridges, catalogue and rendering have no impact.

Fresh hosted CI remains an integration condition. Integrate after #1676 and only when root sequences the matrix parents after the assigned M1/native lanes; #1679/#1444 remain open.

@SamuelSchlesinger
SamuelSchlesinger added this pull request to the merge queue Oct 30, 2026
Merged via the queue into cslib-community:main with commit 3d41b6e Oct 30, 2026
3 checks passed
orbitingflea pushed a commit to orbitingflea/complexitylib2 that referenced this pull request Oct 30, 2026
…lib-community#1683)

* feat(Foundations): correction factorization and reward transport for transition matrices

Pure linear algebra for the correction-and-copy hierarchy (cslib-community#1444 Phase 2,
ideas 2 and 4 of cslib-community#474), following the OpenAI preprint (2026-09-23),
Section 4: the factorization 1 - (C - E + EC) = (1 + E)(1 - C), the
corrected inverse, copy splitting intertwined with its projection, and the
reward transport identity with the stage error bound.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(Foundations): expose IsStrictUpperTriangular so importers can apply it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(Foundations): separate row-sum control from nonnegativity; add reward lower bound

Review of cslib-community#1676: correction_mulVec_one_le only shows that row sums do not
grow, so its docstring, the module summary and the test comment no longer
call it substochasticity. Add rewardTransport_mulVec_nonneg, the lower half
of (4.30), under nonnegative projections, corrections and reward.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): factorial truncation of cutoff corrections

Second slice of cslib-community#1444 Phase 2 (idea 3 of cslib-community#474), following the OpenAI
preprint (2026-09-23), Lemma 4.1 and Lemma 4.4: the cutoff correction
recursion E = phi((C + EC)) on a strictly upper triangular C has a unique
fixed point, its iterates increase towards it, and after k iterations the
error is at most f e^(1/theta) (L/theta)^k / k!, independently of the size
of the matrix. The corrected matrix of a finite iterate is nonnegative and
small in fully corrected columns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(Foundations): use Nat.sum_Icc_choose for the hockey-stick step

Review nit on cslib-community#1677: drop the private hockey-stick lemma.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* doc(Foundations): count chains with the integer support size

Review of cslib-community#1677: the module docstring now bounds the chain count by
m.choose k for the actual support size m, as the proof does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): one stage of the correction-and-copy hierarchy

Third slice of cslib-community#1679 (Phase 2 of cslib-community#1444, ideas 3 and 4 of cslib-community#474), following
the OpenAI preprint (2026-09-23), Lemma 4.2, Lemma 4.4 and Proposition 4.5:
row-sum, entry, domination and support bounds for cutoff corrections; the
copy step with explicit split fractions, its density and active-copy
bounds; incidence counting; and the one-stage rates that feed the stage
bound, given an abstract detector interface.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): copy stages preserve strict upper triangularity

Add cutoffCorrectionIter_isStrictUpperTriangular,
cutoffCorrection_residual_isStrictUpperTriangular and
copyStage_isStrictUpperTriangular (for the lexicographic order on
Lex (V × Fin (m + 1))), so a stage's output can feed the next stage.
Correct two descriptions: the pilot inputs have bounded row sums, not
necessarily at most one, and copyStage_mulVec_one_le preserves the
row-sum bound, with nonnegativity from copyStage_nonneg.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(Foundations): general copySplit_isStrictUpperTriangular beside copySplit

State the preservation lemma for arbitrary weights and proportions in
CorrectionHierarchy.lean, for the lexicographic order on Lex (V × ι),
and derive copyStage_isStrictUpperTriangular from it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(Foundations): qualify copy-stage matrix apply lemmas

Reuse the four shared CopyStage qualifications from Christian Reitwiessner and Claude Opus 5.5 in commit34406a084312428fd65108771467fbc7086f9c3f, and qualify the corresponding Matrix addition/multiplication in the older cutoffCorrectionIter_sum_le proof. No later detector/refactor payload is backported. Every statement, definition, attribute, test and original source credit is preserved.

Coordinator codex-copy-stage-1683-refresh-20261030, bounded supported-pin fix for cslib-community#1683. Source audits pass; hosted exact-head validation follows before any author-branch update.

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Samuel Giuseppe Schlesinger <sgschlesinger@gmail.com>
orbitingflea pushed a commit to orbitingflea/complexitylib2 that referenced this pull request Oct 30, 2026
…ierarchy stage (cslib-community#1696)

* feat(Foundations): correction factorization and reward transport for transition matrices

Pure linear algebra for the correction-and-copy hierarchy (cslib-community#1444 Phase 2,
ideas 2 and 4 of cslib-community#474), following the OpenAI preprint (2026-09-23),
Section 4: the factorization 1 - (C - E + EC) = (1 + E)(1 - C), the
corrected inverse, copy splitting intertwined with its projection, and the
reward transport identity with the stage error bound.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(Foundations): expose IsStrictUpperTriangular so importers can apply it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(Foundations): separate row-sum control from nonnegativity; add reward lower bound

Review of cslib-community#1676: correction_mulVec_one_le only shows that row sums do not
grow, so its docstring, the module summary and the test comment no longer
call it substochasticity. Add rewardTransport_mulVec_nonneg, the lower half
of (4.30), under nonnegative projections, corrections and reward.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): factorial truncation of cutoff corrections

Second slice of cslib-community#1444 Phase 2 (idea 3 of cslib-community#474), following the OpenAI
preprint (2026-09-23), Lemma 4.1 and Lemma 4.4: the cutoff correction
recursion E = phi((C + EC)) on a strictly upper triangular C has a unique
fixed point, its iterates increase towards it, and after k iterations the
error is at most f e^(1/theta) (L/theta)^k / k!, independently of the size
of the matrix. The corrected matrix of a finite iterate is nonnegative and
small in fully corrected columns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(Foundations): use Nat.sum_Icc_choose for the hockey-stick step

Review nit on cslib-community#1677: drop the private hockey-stick lemma.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* doc(Foundations): count chains with the integer support size

Review of cslib-community#1677: the module docstring now bounds the chain count by
m.choose k for the actual support size m, as the proof does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): one stage of the correction-and-copy hierarchy

Third slice of cslib-community#1679 (Phase 2 of cslib-community#1444, ideas 3 and 4 of cslib-community#474), following
the OpenAI preprint (2026-09-23), Lemma 4.2, Lemma 4.4 and Proposition 4.5:
row-sum, entry, domination and support bounds for cutoff corrections; the
copy step with explicit split fractions, its density and active-copy
bounds; incidence counting; and the one-stage rates that feed the stage
bound, given an abstract detector interface.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): copy stages preserve strict upper triangularity

Add cutoffCorrectionIter_isStrictUpperTriangular,
cutoffCorrection_residual_isStrictUpperTriangular and
copyStage_isStrictUpperTriangular (for the lexicographic order on
Lex (V × Fin (m + 1))), so a stage's output can feed the next stage.
Correct two descriptions: the pilot inputs have bounded row sums, not
necessarily at most one, and copyStage_mulVec_one_le preserves the
row-sum bound, with nonnegativity from copyStage_nonneg.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(Foundations): general copySplit_isStrictUpperTriangular beside copySplit

State the preservation lemma for arbitrary weights and proportions in
CorrectionHierarchy.lean, for the lexicographic order on Lex (V × ι),
and derive copyStage_isStrictUpperTriangular from it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): pilot with step-dependent multipliers and probabilistic column detectors

Phase 2 slice 4 of cslib-community#1444 (tracked in cslib-community#1679): the pilot of Lemma 4.2 with
step-dependent multipliers, the column detector of Lemma 4.3 over an abstract
retention-channel interface, and one stage of the hierarchy whose multipliers,
copy weights and overloaded set come from the detector, discharging the
detector interface of copyStage_rates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(Foundations): derive fixed-multiplier iterate bounds from IsCorrectionSeq

The row-sum, entry and input bounds of cutoffCorrectionIter in CopyStage are
the fixed-multiplier case of the correction-sequence bounds; reuse them instead
of re-proving. Statements are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(Foundations): qualify Matrix apply lemmas in CopyStage and PilotCorrection for rc2

Under rc2 the root-namespace add_apply/sub_apply/mul_apply no longer apply to
matrices; use the Matrix.* versions, as rc2-refresh/1676 and /1677 do for the
lower modules of this stack. Proof-only; no statement changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 34406a0)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Samuel Giuseppe Schlesinger <sgschlesinger@gmail.com>
orbitingflea pushed a commit to orbitingflea/complexitylib2 that referenced this pull request Oct 30, 2026
…erface (cslib-community#1698)

* feat(Foundations): correction factorization and reward transport for transition matrices

Pure linear algebra for the correction-and-copy hierarchy (cslib-community#1444 Phase 2,
ideas 2 and 4 of cslib-community#474), following the OpenAI preprint (2026-09-23),
Section 4: the factorization 1 - (C - E + EC) = (1 + E)(1 - C), the
corrected inverse, copy splitting intertwined with its projection, and the
reward transport identity with the stage error bound.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(Foundations): expose IsStrictUpperTriangular so importers can apply it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(Foundations): separate row-sum control from nonnegativity; add reward lower bound

Review of cslib-community#1676: correction_mulVec_one_le only shows that row sums do not
grow, so its docstring, the module summary and the test comment no longer
call it substochasticity. Add rewardTransport_mulVec_nonneg, the lower half
of (4.30), under nonnegative projections, corrections and reward.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): factorial truncation of cutoff corrections

Second slice of cslib-community#1444 Phase 2 (idea 3 of cslib-community#474), following the OpenAI
preprint (2026-09-23), Lemma 4.1 and Lemma 4.4: the cutoff correction
recursion E = phi((C + EC)) on a strictly upper triangular C has a unique
fixed point, its iterates increase towards it, and after k iterations the
error is at most f e^(1/theta) (L/theta)^k / k!, independently of the size
of the matrix. The corrected matrix of a finite iterate is nonnegative and
small in fully corrected columns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(Foundations): use Nat.sum_Icc_choose for the hockey-stick step

Review nit on cslib-community#1677: drop the private hockey-stick lemma.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* doc(Foundations): count chains with the integer support size

Review of cslib-community#1677: the module docstring now bounds the chain count by
m.choose k for the actual support size m, as the proof does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Probability): retention by pairwise independent hashing (cslib-community#1444)

A point is retained when its hash lies in a target set B. Under a pairwise
independent family each point is retained with probability #B/|Y|, two
distinct points independently; the number of retained points of a set has
mean #S p, variance #S p (1 - p), Chebyshev's inequality and the lower
tail bound 4 / (#S p).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): one stage of the correction-and-copy hierarchy

Third slice of cslib-community#1679 (Phase 2 of cslib-community#1444, ideas 3 and 4 of cslib-community#474), following
the OpenAI preprint (2026-09-23), Lemma 4.2, Lemma 4.4 and Proposition 4.5:
row-sum, entry, domination and support bounds for cutoff corrections; the
copy step with explicit split fractions, its density and active-copy
bounds; incidence counting; and the one-stage rates that feed the stage
bound, given an abstract detector interface.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Probability): affine retention channels over a prime field (cslib-community#1682)

Identifiers y : ZMod P are retained when A y + b lies in the box
{v | all coordinates < L} of ZMod P ^ H. Exact rates (L/P)^H and their
squares for pairs, the lower tail 4/(#A pi), independence of separate
seeds, and the assembled channel properties at rate f = a^H with
L = ceil(P a): f <= pi <= 2^H f.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): copy stages preserve strict upper triangularity

Add cutoffCorrectionIter_isStrictUpperTriangular,
cutoffCorrection_residual_isStrictUpperTriangular and
copyStage_isStrictUpperTriangular (for the lexicographic order on
Lex (V × Fin (m + 1))), so a stage's output can feed the next stage.
Correct two descriptions: the pilot inputs have bounded row sums, not
necessarily at most one, and copyStage_mulVec_one_le preserves the
row-sum bound, with nonnegativity from copyStage_nonneg.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(Foundations): general copySplit_isStrictUpperTriangular beside copySplit

State the preservation lemma for arbitrary weights and proportions in
CorrectionHierarchy.lean, for the lexicographic order on Lex (V × ι),
and derive copyStage_isStrictUpperTriangular from it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): pilot with step-dependent multipliers and probabilistic column detectors

Phase 2 slice 4 of cslib-community#1444 (tracked in cslib-community#1679): the pilot of Lemma 4.2 with
step-dependent multipliers, the column detector of Lemma 4.3 over an abstract
retention-channel interface, and one stage of the hierarchy whose multipliers,
copy weights and overloaded set come from the detector, discharging the
detector interface of copyStage_rates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(Foundations): derive fixed-multiplier iterate bounds from IsCorrectionSeq

The row-sum, entry and input bounds of cutoffCorrectionIter in CopyStage are
the fixed-multiplier case of the correction-sequence bounds; reuse them instead
of re-proving. Statements are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Probability): affine retention channels satisfy the detector interface

Instantiate RetentionChannels (cslib-community#1696) with the affine channels of cslib-community#1688 at
rate a^H, with c_pi = 1, C_pi = C_pair = 2^H and C_var = 4.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(Foundations): qualify Matrix apply lemmas in CopyStage and PilotCorrection for rc2

Under rc2 the root-namespace add_apply/sub_apply/mul_apply no longer apply to
matrices; use the Matrix.* versions, as rc2-refresh/1676 and /1677 do for the
lower modules of this stack. Proof-only; no statement changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 34406a0)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Samuel Giuseppe Schlesinger <sgschlesinger@gmail.com>
orbitingflea pushed a commit to orbitingflea/complexitylib2 that referenced this pull request Oct 30, 2026
…rarchy with its stage bound (cslib-community#1702)

* feat(Foundations): correction factorization and reward transport for transition matrices

Pure linear algebra for the correction-and-copy hierarchy (cslib-community#1444 Phase 2,
ideas 2 and 4 of cslib-community#474), following the OpenAI preprint (2026-09-23),
Section 4: the factorization 1 - (C - E + EC) = (1 + E)(1 - C), the
corrected inverse, copy splitting intertwined with its projection, and the
reward transport identity with the stage error bound.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(Foundations): expose IsStrictUpperTriangular so importers can apply it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(Foundations): separate row-sum control from nonnegativity; add reward lower bound

Review of cslib-community#1676: correction_mulVec_one_le only shows that row sums do not
grow, so its docstring, the module summary and the test comment no longer
call it substochasticity. Add rewardTransport_mulVec_nonneg, the lower half
of (4.30), under nonnegative projections, corrections and reward.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): factorial truncation of cutoff corrections

Second slice of cslib-community#1444 Phase 2 (idea 3 of cslib-community#474), following the OpenAI
preprint (2026-09-23), Lemma 4.1 and Lemma 4.4: the cutoff correction
recursion E = phi((C + EC)) on a strictly upper triangular C has a unique
fixed point, its iterates increase towards it, and after k iterations the
error is at most f e^(1/theta) (L/theta)^k / k!, independently of the size
of the matrix. The corrected matrix of a finite iterate is nonnegative and
small in fully corrected columns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(Foundations): use Nat.sum_Icc_choose for the hockey-stick step

Review nit on cslib-community#1677: drop the private hockey-stick lemma.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* doc(Foundations): count chains with the integer support size

Review of cslib-community#1677: the module docstring now bounds the chain count by
m.choose k for the actual support size m, as the proof does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): one stage of the correction-and-copy hierarchy

Third slice of cslib-community#1679 (Phase 2 of cslib-community#1444, ideas 3 and 4 of cslib-community#474), following
the OpenAI preprint (2026-09-23), Lemma 4.2, Lemma 4.4 and Proposition 4.5:
row-sum, entry, domination and support bounds for cutoff corrections; the
copy step with explicit split fractions, its density and active-copy
bounds; incidence counting; and the one-stage rates that feed the stage
bound, given an abstract detector interface.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): copy stages preserve strict upper triangularity

Add cutoffCorrectionIter_isStrictUpperTriangular,
cutoffCorrection_residual_isStrictUpperTriangular and
copyStage_isStrictUpperTriangular (for the lexicographic order on
Lex (V × Fin (m + 1))), so a stage's output can feed the next stage.
Correct two descriptions: the pilot inputs have bounded row sums, not
necessarily at most one, and copyStage_mulVec_one_le preserves the
row-sum bound, with nonnegativity from copyStage_nonneg.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(Foundations): general copySplit_isStrictUpperTriangular beside copySplit

State the preservation lemma for arbitrary weights and proportions in
CorrectionHierarchy.lean, for the lexicographic order on Lex (V × ι),
and derive copyStage_isStrictUpperTriangular from it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): pilot with step-dependent multipliers and probabilistic column detectors

Phase 2 slice 4 of cslib-community#1444 (tracked in cslib-community#1679): the pilot of Lemma 4.2 with
step-dependent multipliers, the column detector of Lemma 4.3 over an abstract
retention-channel interface, and one stage of the hierarchy whose multipliers,
copy weights and overloaded set come from the detector, discharging the
detector interface of copyStage_rates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(Foundations): derive fixed-multiplier iterate bounds from IsCorrectionSeq

The row-sum, entry and input bounds of cutoffCorrectionIter in CopyStage are
the fixed-multiplier case of the correction-sequence bounds; reuse them instead
of re-proving. Statements are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): constants of the correction-and-copy hierarchy

Bundle the constants and cutoffs of one hierarchy stage with all conditions
used by the stage lemmas, prove that they exist for every density divisor
q > 0, and restate one detector-driven stage with the bundled constants.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): the iterated correction-and-copy hierarchy and its stage bound

Iterate the detector-driven stages on V (l+1) ≃ Lex (V l × Fin D₀) at rates
q⁻¹ ^ l and prove 0 ≤ p x - W_l(x̄_l) ≤ |V 0| (2^c)⁻¹^l from the construction.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* doc(Foundations): document every HierarchyParams field

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* doc(Foundations): clarify reduced hierarchy parameter scope

Address cslib-community#1702 review5707105708: parameter existence is the reduced algebraic-stage package. Preserve the full threshold ladder and root/complement regularity gap for Q and every step cutoff. Correct m=ceilNat(q)*(k+1) and D0=m+1. No Lean declaration or proof body changes.

Codex worker codex-hierarchy-fixes-1702-1704-20261030. Source-only preparation; supported-pin integration, full validation and outside delta review remain required before publication.

* fix(Foundations): qualify Matrix apply lemmas for the rc2 Mathlib API

Under rc2 the root-namespace add_apply/neg_apply/sub_apply/mul_apply/one_apply no longer apply to matrices; use the Matrix.* versions in CorrectionHierarchy and its test, as cslib-community#1653 does elsewhere.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit ea663ce)

* fix(Foundations): qualify Matrix apply lemmas in FactorialTruncation for rc2

Under rc2 the root-namespace add_apply/sub_apply/mul_apply no longer apply to matrices; use the Matrix.* versions in FactorialTruncation and its test, rewrapping lines that crossed 100 columns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 19cf8a8)

* fix(Foundations): qualify Matrix apply lemmas in CopyStage and PilotCorrection for rc2

Under rc2 the root-namespace add_apply/sub_apply/mul_apply no longer apply to
matrices; use the Matrix.* versions, as rc2-refresh/1676 and /1677 do for the
lower modules of this stack. Proof-only; no statement changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 34406a0)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Samuel Giuseppe Schlesinger <sgschlesinger@gmail.com>
orbitingflea pushed a commit to orbitingflea/complexitylib2 that referenced this pull request Oct 30, 2026
…crete stage bound (cslib-community#1704)

* feat(Foundations): correction factorization and reward transport for transition matrices

Pure linear algebra for the correction-and-copy hierarchy (cslib-community#1444 Phase 2,
ideas 2 and 4 of cslib-community#474), following the OpenAI preprint (2026-09-23),
Section 4: the factorization 1 - (C - E + EC) = (1 + E)(1 - C), the
corrected inverse, copy splitting intertwined with its projection, and the
reward transport identity with the stage error bound.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(Foundations): expose IsStrictUpperTriangular so importers can apply it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(Foundations): separate row-sum control from nonnegativity; add reward lower bound

Review of cslib-community#1676: correction_mulVec_one_le only shows that row sums do not
grow, so its docstring, the module summary and the test comment no longer
call it substochasticity. Add rewardTransport_mulVec_nonneg, the lower half
of (4.30), under nonnegative projections, corrections and reward.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): factorial truncation of cutoff corrections

Second slice of cslib-community#1444 Phase 2 (idea 3 of cslib-community#474), following the OpenAI
preprint (2026-09-23), Lemma 4.1 and Lemma 4.4: the cutoff correction
recursion E = phi((C + EC)) on a strictly upper triangular C has a unique
fixed point, its iterates increase towards it, and after k iterations the
error is at most f e^(1/theta) (L/theta)^k / k!, independently of the size
of the matrix. The corrected matrix of a finite iterate is nonnegative and
small in fully corrected columns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(Foundations): use Nat.sum_Icc_choose for the hockey-stick step

Review nit on cslib-community#1677: drop the private hockey-stick lemma.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* doc(Foundations): count chains with the integer support size

Review of cslib-community#1677: the module docstring now bounds the chain count by
m.choose k for the actual support size m, as the proof does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Probability): retention by pairwise independent hashing (cslib-community#1444)

A point is retained when its hash lies in a target set B. Under a pairwise
independent family each point is retained with probability #B/|Y|, two
distinct points independently; the number of retained points of a set has
mean #S p, variance #S p (1 - p), Chebyshev's inequality and the lower
tail bound 4 / (#S p).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): one stage of the correction-and-copy hierarchy

Third slice of cslib-community#1679 (Phase 2 of cslib-community#1444, ideas 3 and 4 of cslib-community#474), following
the OpenAI preprint (2026-09-23), Lemma 4.2, Lemma 4.4 and Proposition 4.5:
row-sum, entry, domination and support bounds for cutoff corrections; the
copy step with explicit split fractions, its density and active-copy
bounds; incidence counting; and the one-stage rates that feed the stage
bound, given an abstract detector interface.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Probability): affine retention channels over a prime field (cslib-community#1682)

Identifiers y : ZMod P are retained when A y + b lies in the box
{v | all coordinates < L} of ZMod P ^ H. Exact rates (L/P)^H and their
squares for pairs, the lower tail 4/(#A pi), independence of separate
seeds, and the assembled channel properties at rate f = a^H with
L = ceil(P a): f <= pi <= 2^H f.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): copy stages preserve strict upper triangularity

Add cutoffCorrectionIter_isStrictUpperTriangular,
cutoffCorrection_residual_isStrictUpperTriangular and
copyStage_isStrictUpperTriangular (for the lexicographic order on
Lex (V × Fin (m + 1))), so a stage's output can feed the next stage.
Correct two descriptions: the pilot inputs have bounded row sums, not
necessarily at most one, and copyStage_mulVec_one_le preserves the
row-sum bound, with nonnegativity from copyStage_nonneg.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(Foundations): general copySplit_isStrictUpperTriangular beside copySplit

State the preservation lemma for arbitrary weights and proportions in
CorrectionHierarchy.lean, for the lexicographic order on Lex (V × ι),
and derive copyStage_isStrictUpperTriangular from it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): pilot with step-dependent multipliers and probabilistic column detectors

Phase 2 slice 4 of cslib-community#1444 (tracked in cslib-community#1679): the pilot of Lemma 4.2 with
step-dependent multipliers, the column detector of Lemma 4.3 over an abstract
retention-channel interface, and one stage of the hierarchy whose multipliers,
copy weights and overloaded set come from the detector, discharging the
detector interface of copyStage_rates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(Foundations): derive fixed-multiplier iterate bounds from IsCorrectionSeq

The row-sum, entry and input bounds of cutoffCorrectionIter in CopyStage are
the fixed-multiplier case of the correction-sequence bounds; reuse them instead
of re-proving. Statements are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Probability): affine retention channels satisfy the detector interface

Instantiate RetentionChannels (cslib-community#1696) with the affine channels of cslib-community#1688 at
rate a^H, with c_pi = 1, C_pi = C_pair = 2^H and C_var = 4.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): constants of the correction-and-copy hierarchy

Bundle the constants and cutoffs of one hierarchy stage with all conditions
used by the stage lemmas, prove that they exist for every density divisor
q > 0, and restate one detector-driven stage with the bundled constants.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): the iterated correction-and-copy hierarchy and its stage bound

Iterate the detector-driven stages on V (l+1) ≃ Lex (V l × Fin D₀) at rates
q⁻¹ ^ l and prove 0 ≤ p x - W_l(x̄_l) ≤ |V 0| (2^c)⁻¹^l from the construction.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* doc(Foundations): document every HierarchyParams field

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Probability): affine channels at every stage of the hierarchy

Stage l hashes identifiers into a prime field P_l >= max(2^l, M l) at rate
(2^H)^-l with uniform constants, discharging the channel hypotheses of
sub_hierarchyReward_le; radix identifiers give a fully concrete instance.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* doc(Foundations): clarify reduced hierarchy parameter scope

Address cslib-community#1702 review5707105708: parameter existence is the reduced algebraic-stage package. Preserve the full threshold ladder and root/complement regularity gap for Q and every step cutoff. Correct m=ceilNat(q)*(k+1) and D0=m+1. No Lean declaration or proof body changes.

Codex worker codex-hierarchy-fixes-1702-1704-20261030. Source-only preparation; supported-pin integration, full validation and outside delta review remain required before publication.

* refactor(Probability): share hierarchy radix identification

Move radixCopyEquiv, radixCopyEquiv_val and radixCopyEquiv_lt verbatim beside DetectedHierarchy. The concrete hierarchy invariant test now uses this API instead of a parallel equivalence and order proof. Keep finProdFinEquiv reuse and original authorship.

Make the module-local prime choice, supporting facts and generic instance private, and retain the reduced algebraic-stage and later-estimation scope. Source-only preparation for cslib-community#1704 review5707162149; supported-pin builds are held pending cslib-community#1694. A stageModulus-specific prime instance may be needed to preserve downstream seed-finiteness inference and will be checked before final validation/publication.

* fix(Foundations): qualify Matrix apply lemmas for the rc2 Mathlib API

Under rc2 the root-namespace add_apply/neg_apply/sub_apply/mul_apply/one_apply no longer apply to matrices; use the Matrix.* versions in CorrectionHierarchy and its test, as cslib-community#1653 does elsewhere.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit ea663ce)

* fix(Foundations): qualify Matrix apply lemmas in FactorialTruncation for rc2

Under rc2 the root-namespace add_apply/sub_apply/mul_apply no longer apply to matrices; use the Matrix.* versions in FactorialTruncation and its test, rewrapping lines that crossed 100 columns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 19cf8a8)

* fix(Foundations): qualify Matrix apply lemmas in CopyStage and PilotCorrection for rc2

Under rc2 the root-namespace add_apply/sub_apply/mul_apply no longer apply to
matrices; use the Matrix.* versions, as rc2-refresh/1676 and /1677 do for the
lower modules of this stack. Proof-only; no statement changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 34406a0)

* fix(Probability): retain prime stage-modulus inference

Keep the generic prime-choice implementation and supporting facts private. Make stageModulus a non-exposed definition with the same body: Lean rejects the private helper in the exposed abbreviation body. Export only Fact (stageModulus M l).Prime, using the private primality fact, so Mathlib derives NeZero and the finite-field/seed structures for actual hierarchy clients.

Confirmed missing NeZero(stageModulus) and Fintype(stageSeed) in the real hierarchy module after privacy; the existing DetectedHierarchy and HierarchyChannels fixtures pass the strict focused build with this bridge (6152 jobs). No new prime-size, encoding, channel or resource guarantee. Full final validation and outside exact-head API delta review follow.

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Samuel Giuseppe Schlesinger <sgschlesinger@gmail.com>
orbitingflea pushed a commit to orbitingflea/complexitylib2 that referenced this pull request Oct 31, 2026
…ntion channels (cslib-community#1710)

* chore(deps): track CSLib main and Lean rc2

Advance CSLib to 8a8ad748 and synchronize Mathlib, the documentation generator, Verso, and all three lockfiles with Lean v4.36.0-rc2. Keep the root and documentation projects on the same inherited dependency revisions.

* refactor(probability): use generic infinite-sum lemmas

Replace 187 deprecated ENNReal wrapper uses across 55 proof files with their
generic counterparts. The exact mapping is:
- ENNReal.tsum_le_tsum -> tsum_le_tsum (94)
- ENNReal.tsum_add -> tsum_add (54)
- ENNReal.tsum_eq_zero -> tsum_eq_zero_iff (14)
- ENNReal.summable -> CompleteLattice.summable (6)
- ENNReal.tsum_comm -> tsum_comm (6)
- ENNReal.tsum_prod' -> tsum_prod' (5)
- ENNReal.le_tsum -> le_tsum (5)
- ENNReal.tsum_eq_add_tsum_ite -> tsum_eq_add_tsum_ite (2)
- ENNReal.tsum_sigma -> tsum_sigma (1)

The old wrappers invoke these same theorems specialized to ENNReal. All five
le_tsum calls already pass the function by name. No statements or definitions
change.

* fix(build): adapt proofs to the rc2 Mathlib API

Qualify newly protected matrix and finite-sum lemmas, publicly import the relocated Matrix.Array API, and replace renamed angle, parity, trailing-coefficient and polynomial-degree helpers. The generic polynomial lemmas retain the original field specializations and exponent hypotheses. No theorem statement or definition body changes.

Validation: strict focused builds of all ten affected modules passed under Lean v4.36.0-rc2. Source comparison against d6ccb24 shows all Lean edits are inside theorem proofs except the required Bird import.

* test(quantum): qualify the protected matrix lemma

Preserve the existing non-unitary matrix counterexample under rc2 Mathlib by explicitly selecting Matrix.mul_apply, as in the library proof repairs.

* fix(build): normalize goals before proof automation

Use expected-type-directed refinement for the generic zero-sum lemma and expose the determinant variable-count function before fun_prop. Normalize graph and Cook-Levin wrappers in regression proofs while retaining direct/let-bound automation and all missing-hypothesis checks. Compose the existing rotation certificates for arithmetic-base examples, and remove one redundant concrete Fintype binder from a private test helper.

Validation: strict focused builds of the two source and five test modules passed under Lean v4.36.0-rc2. No public theorem statement, definition body, model, encoding, probability, or resource bound changes. No heartbeat or fun_prop compatibility option was introduced.

* feat(Foundations): correction factorization and reward transport for transition matrices

Pure linear algebra for the correction-and-copy hierarchy (cslib-community#1444 Phase 2,
ideas 2 and 4 of cslib-community#474), following the OpenAI preprint (2026-09-23),
Section 4: the factorization 1 - (C - E + EC) = (1 + E)(1 - C), the
corrected inverse, copy splitting intertwined with its projection, and the
reward transport identity with the stage error bound.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(Foundations): expose IsStrictUpperTriangular so importers can apply it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(Foundations): separate row-sum control from nonnegativity; add reward lower bound

Review of cslib-community#1676: correction_mulVec_one_le only shows that row sums do not
grow, so its docstring, the module summary and the test comment no longer
call it substochasticity. Add rewardTransport_mulVec_nonneg, the lower half
of (4.30), under nonnegative projections, corrections and reward.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): factorial truncation of cutoff corrections

Second slice of cslib-community#1444 Phase 2 (idea 3 of cslib-community#474), following the OpenAI
preprint (2026-09-23), Lemma 4.1 and Lemma 4.4: the cutoff correction
recursion E = phi((C + EC)) on a strictly upper triangular C has a unique
fixed point, its iterates increase towards it, and after k iterations the
error is at most f e^(1/theta) (L/theta)^k / k!, independently of the size
of the matrix. The corrected matrix of a finite iterate is nonnegative and
small in fully corrected columns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(Foundations): use Nat.sum_Icc_choose for the hockey-stick step

Review nit on cslib-community#1677: drop the private hockey-stick lemma.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* doc(Foundations): count chains with the integer support size

Review of cslib-community#1677: the module docstring now bounds the chain count by
m.choose k for the actual support size m, as the proof does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Probability): retention by pairwise independent hashing (cslib-community#1444)

A point is retained when its hash lies in a target set B. Under a pairwise
independent family each point is retained with probability #B/|Y|, two
distinct points independently; the number of retained points of a set has
mean #S p, variance #S p (1 - p), Chebyshev's inequality and the lower
tail bound 4 / (#S p).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): one stage of the correction-and-copy hierarchy

Third slice of cslib-community#1679 (Phase 2 of cslib-community#1444, ideas 3 and 4 of cslib-community#474), following
the OpenAI preprint (2026-09-23), Lemma 4.2, Lemma 4.4 and Proposition 4.5:
row-sum, entry, domination and support bounds for cutoff corrections; the
copy step with explicit split fractions, its density and active-copy
bounds; incidence counting; and the one-stage rates that feed the stage
bound, given an abstract detector interface.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Probability): affine retention channels over a prime field (cslib-community#1682)

Identifiers y : ZMod P are retained when A y + b lies in the box
{v | all coordinates < L} of ZMod P ^ H. Exact rates (L/P)^H and their
squares for pairs, the lower tail 4/(#A pi), independence of separate
seeds, and the assembled channel properties at rate f = a^H with
L = ceil(P a): f <= pi <= 2^H f.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(Foundations): qualify Matrix apply lemmas for the rc2 Mathlib API

Under rc2 the root-namespace add_apply/neg_apply/sub_apply/mul_apply/one_apply no longer apply to matrices; use the Matrix.* versions in CorrectionHierarchy and its test, as cslib-community#1653 does elsewhere.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): copy stages preserve strict upper triangularity

Add cutoffCorrectionIter_isStrictUpperTriangular,
cutoffCorrection_residual_isStrictUpperTriangular and
copyStage_isStrictUpperTriangular (for the lexicographic order on
Lex (V × Fin (m + 1))), so a stage's output can feed the next stage.
Correct two descriptions: the pilot inputs have bounded row sums, not
necessarily at most one, and copyStage_mulVec_one_le preserves the
row-sum bound, with nonnegativity from copyStage_nonneg.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(Foundations): qualify Matrix apply lemmas in FactorialTruncation for rc2

Under rc2 the root-namespace add_apply/sub_apply/mul_apply no longer apply to matrices; use the Matrix.* versions in FactorialTruncation and its test, rewrapping lines that crossed 100 columns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(Foundations): general copySplit_isStrictUpperTriangular beside copySplit

State the preservation lemma for arbitrary weights and proportions in
CorrectionHierarchy.lean, for the lexicographic order on Lex (V × ι),
and derive copyStage_isStrictUpperTriangular from it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Probability): frame-conditioned channels, validated variants and conditional averaging (cslib-community#1682)

Frame-conditioned retention channels over ZMod P with their exact
marginal rate, coordinates (F, w) on retention slices, the affine move
(F, w) -> (gF, gw + c), validated walk variants with their unique wrap,
and conditional variance decay on every slice from a spectral-gap
hypothesis on the coordinates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Foundations): pilot with step-dependent multipliers and probabilistic column detectors

Phase 2 slice 4 of cslib-community#1444 (tracked in cslib-community#1679): the pilot of Lemma 4.2 with
step-dependent multipliers, the column detector of Lemma 4.3 over an abstract
retention-channel interface, and one stage of the hierarchy whose multipliers,
copy weights and overloaded set come from the detector, discharging the
detector interface of copyStage_rates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(Foundations): derive fixed-multiplier iterate bounds from IsCorrectionSeq

The row-sum, entry and input bounds of cutoffCorrectionIter in CopyStage are
the fixed-multiplier case of the correction-sequence bounds; reuse them instead
of re-proving. Statements are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Probability): affine retention channels satisfy the detector interface

Instantiate RetentionChannels (cslib-community#1696) with the affine channels of cslib-community#1688 at
rate a^H, with c_pi = 1, C_pi = C_pair = 2^H and C_var = 4.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(Foundations): qualify Matrix apply lemmas in CopyStage and PilotCorrection for rc2

Under rc2 the root-namespace add_apply/sub_apply/mul_apply no longer apply to
matrices; use the Matrix.* versions, as rc2-refresh/1676 and /1677 do for the
lower modules of this stack. Proof-only; no statement changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Probability): pair and tail estimates for frame-conditioned retention channels

Lemma 3.1, items 2-3, of the OpenAI preprint for frame-conditioned channels:
the frame density q_fr (with 1/2 <= q_fr for r < H, via Mathlib's
card_linearIndependent), pairwise independence of the unrestricted polynomial
channel, the transfer bound dens_frame <= dens / q_fr, the pair bound and the
Chebyshev lower tail, and the detector-interface instance
retentionChannels_frameRetains (constants 2^H / q_fr and 4 / q_fr, or
2^(H+1) and 8 for r < H).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(Foundations): qualify Matrix apply lemmas in CopyStage and PilotCorrection for rc2

Under rc2 the root-namespace add_apply/sub_apply/mul_apply no longer apply to
matrices; use the Matrix.* versions, as rc2-refresh/1676 and /1677 do for the
lower modules of this stack. Proof-only; no statement changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 34406a0)

---------

Co-authored-by: Samuel Giuseppe Schlesinger <sgschlesinger@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants