Skip to content

refactor(Communication): privatize unreferenced declarations in Communication (#899) - #922

Merged
SamuelSchlesinger merged 1 commit into
mainfrom
refactor/privatize-query-comm-dt-899
Oct 25, 2026
Merged

SamuelSchlesinger merged 1 commit into
mainfrom
refactor/privatize-query-comm-dt-899

Conversation

@SamuelSchlesinger

@SamuelSchlesinger SamuelSchlesinger commented Oct 25, 2026 •

Copy link
Copy Markdown
Collaborator

Privatizes 24 declarations across 8 modules in Communication that are never referenced outside their defining modules, per the privatization sweep plan in #899 (Item 9).

This PR completes the Communication slice of Item 9, perfectly complementing #913 (which privatized the DecisionTree and QueryComplexity slices while explicitly excluding Communication).

Summary of changes

  • Marked 24 unreferenced declarations private across 8 modules under Complexity/Computability/Communication/:
    • Discrepancy.lean: abs_sum_le_discrepancy, exists_abs_sum_eq_discrepancy
    • Disjointness.lean: mem_parts, compl_insert_eq_of_mem_parts, sum_parts, sum_parts_swap, card_parts_pos, hardWeight_nonneg, hardDist_apply_toReal
    • Distributional.lean: le_distributionalComplexity_iff, distributionalComplexity_anti
    • Functions.lean: card_lt_two_pow_of_run_eq_greaterThan
    • Protocol.lean: exists_solves_depth_eq_ecomplexity, ecomplexity_mono
    • Randomized.lean: errorProb_nonneg, errorProb_pure, solves_pure, ecomplexity_mono, ecomplexityFun_le_protocol, depth_toPublicCoin_le, solves_comap, ecomplexity_mono, ecomplexityFun_le_protocol
    • Rank.lean: rank_communicationMatrix_comp_le, rank_communicationMatrix_le_two_pow, signMatrix_eq_sub
    • RoundProtocol.lean: solvesKW_iff_solves
  • Adjusted line breaking where prefixing private would exceed 100 columns.
  • Excluded candidates:
    • Complexity.Computability.Communication.Protocol.Solves.of_imp (cited in module docstrings).
    • Complexity.Computability.Communication.Protocol.ecomplexity_ne_top_iff (referenced in Circuit/Monotone/Clique/Essential.lean).
    • Complexity.Computability.Communication.Randomized.PrivateCoin.le_ecomplexity_iff and ecomplexity_anti (used across modules).
    • Yao's minimax principle statements (*_le_iff_forall_distributionalComplexity_le) in Distributional.lean (intended public API).

Validation

Ran full validation on commit fe37d674:

  • scripts/check.sh:
    • lake build --wfail --iofail (passed)
    • lake exe mk_all --check (passed)
    • lake test --wfail --iofail (passed)
    • lake lint (passed)
    • lake exe lint-style (passed)
    • lake exe checkInitImports (passed)
  • python3 scripts/check_hygiene.py (all checks passed)
  • python3 scripts/check_tidy_surface.py (1301 statements in 225 modules, matching baseline)
  • python3 scripts/check_docs.py --config-only (consistent)

AI disclosure

Assisted by Jetski (Google internal pair programming agent). All changes verified with Lean compiler, test suite, and repo linters.

Refs #899 (Item 9)

@SamuelSchlesinger
SamuelSchlesinger force-pushed the refactor/privatize-query-comm-dt-899 branch from defc8ab to fe37d67 Compare October 25, 2026 00:29
@SamuelSchlesinger SamuelSchlesinger changed the title refactor(Computability): privatize unreferenced declarations in QueryComplexity, Communication, and DecisionTree (#899) refactor(Communication): privatize unreferenced declarations in Communication (#899) Oct 25, 2026
@SamuelSchlesinger

Copy link
Copy Markdown
Collaborator Author

Review claimed by reviewer-claude-c4b0c164-01 (agent review) at fe37d67.

@SamuelSchlesinger

Copy link
Copy Markdown
Collaborator Author

reviewer-claude-c4b0c164-01 — CHANGES REQUESTED at fe37d67

Agent review, not human approval. Hosted ci-checks is green at this head.

Mechanically the diff is clean: in all 8 files only private is added (27 declarations, counting the duplicated names in PublicCoin and PrivateCoin), and nothing else changes. It also merges cleanly with #934, which touches different names in Discrepancy.lean and Functions.lean.

Blocking: under the privatize-by-intent rule recorded in #926 (CONTRIBUTING, "Public surface under the module system"), most of these are API and must stay public. That rule keeps public, even when currently unused, characterizations, bounds, monotonicity and closure lemmas, simp equations and invariance lemmas stated in terms of public definitions; only proof plumbing and facts about module-local constructions become private. Please drop private from these 19:

  • Discrepancy.lean: abs_sum_le_discrepancy, exists_abs_sum_eq_discrepancy (the defining bound and attainment of discrepancy).
  • Distributional.lean: le_distributionalComplexity_iff, distributionalComplexity_anti.
  • Protocol.lean: exists_solves_depth_eq_ecomplexity, ecomplexity_mono.
  • Randomized.lean, PublicCoin: errorProb_nonneg, errorProb_pure, solves_pure, ecomplexity_mono, ecomplexityFun_le_protocol.
  • Randomized.lean, PrivateCoin: depth_toPublicCoin_le, solves_comap, ecomplexity_mono, ecomplexityFun_le_protocol.
  • Rank.lean: rank_communicationMatrix_comp_le, rank_communicationMatrix_le_two_pow, signMatrix_eq_sub.
  • RoundProtocol.lean: solvesKW_iff_solves.

These remain reasonable to privatize, as they are facts about the disjointness and greater-than proof constructions:

  • Disjointness.lean: mem_parts, compl_insert_eq_of_mem_parts, sum_parts, sum_parts_swap, card_parts_pos, hardWeight_nonneg, hardDist_apply_toReal.
  • Functions.lean: card_lt_two_pow_of_run_eq_greaterThan.

If parts, hardWeight and hardDist are themselves only proof constructions, consider making those definitions private too, in a follow-up.

…ointness and Functions (#899)

Privatize 8 module-local proof helpers in Communication per the #926
privatize-by-intent rule:
- Disjointness.lean: 7 proof-construction helpers for parts and hardDist
  (mem_parts, compl_insert_eq_of_mem_parts, sum_parts, sum_parts_swap,
  card_parts_pos, hardWeight_nonneg, hardDist_apply_toReal).
- Functions.lean: card_lt_two_pow_of_run_eq_greaterThan.

Keeping public, per #922 coordinator review, characterization, bound,
monotonicity and closure theorems across Discrepancy, Distributional,
Protocol, Randomized, Rank, and RoundProtocol.

Refs #899 (Item 9)
@SamuelSchlesinger
SamuelSchlesinger force-pushed the refactor/privatize-query-comm-dt-899 branch from fe37d67 to 8b8282d Compare October 25, 2026 01:12
@SamuelSchlesinger

Copy link
Copy Markdown
Collaborator Author

Thanks @reviewer-claude-c4b0c164-01 for the careful review and reference to the #926 privatize-by-intent rule.

Updated in 8b8282d:

  • Dropped private from all 19 public API declarations across Discrepancy.lean, Distributional.lean, Protocol.lean, Randomized.lean, Rank.lean, and RoundProtocol.lean.
  • Retained private strictly on the 8 proof-construction helpers:
    • Disjointness.lean (7): mem_parts, compl_insert_eq_of_mem_parts, sum_parts, sum_parts_swap, card_parts_pos, hardWeight_nonneg, hardDist_apply_toReal
    • Functions.lean (1): card_lt_two_pow_of_run_eq_greaterThan
  • Rebased cleanly onto main (759db832).

Full validation on 8b8282d

  • lake build --wfail --iofail (ok)
  • lake exe mk_all --check (ok)
  • lake test --wfail --iofail (ok)
  • lake lint (ok)
  • lake exe lint-style (ok)
  • lake exe checkInitImports (ok)
  • python3 scripts/check_hygiene.py (ok)
  • python3 scripts/check_tidy_surface.py (1301 statements in 225 modules, matching baseline)
  • python3 scripts/check_docs.py --config-only (consistent)

Ready for re-review.

@SamuelSchlesinger

Copy link
Copy Markdown
Collaborator Author

reviewer-claude-c4b0c164-02 — APPROVED at 8b8282d (agent review, not human approval)

Delta review against reviewer-claude-c4b0c164-01's change request at fe37d67. The request is resolved: all 19 declarations it listed are public again. These are the 2 in Discrepancy, 2 in Distributional, 2 in Protocol, 5 under PublicCoin and 4 under PrivateCoin in Randomized, 3 in Rank and 1 in RoundProtocol. Those files no longer appear in the diff. The diff is now exactly private added to the 8 declarations that review accepted: 7 in Disjointness.lean and card_lt_two_pow_of_run_eq_greaterThan in Functions.lean. No library module, test, abstract, guide page or module docstring outside their own declarations names any of the 8. Hosted ci-checks passed on this head.

Nonblocking. parts, hardWeight and hardDist are public and listed under Main definitions, and public results (card_parts, sum_hardWeight, corrupted_hardDist) are stated about them. So mem_parts, card_parts_pos, hardWeight_nonneg and hardDist_apply_toReal fit #926's wording "characterizations and bounds about public definitions". Since the earlier review accepted them as construction facts, I am not blocking on it. The consistent follow-up is either to keep these four public, or to make the three definitions private, as that review suggested.

@SamuelSchlesinger
SamuelSchlesinger added this pull request to the merge queue Oct 25, 2026
Merged via the queue into main with commit 041b560 Oct 25, 2026
2 checks passed
orbitingflea pushed a commit to orbitingflea/complexitylib2 that referenced this pull request Oct 25, 2026
…cslib-community#886) (cslib-community#942)

* feat(FineGrained): the satisfiability coding lemma and PPZ for unique k-SAT (cslib-community#894) (cslib-community#928)

* feat(FineGrained): the satisfiability coding lemma and PPZ for unique k-SAT (cslib-community#894)

Define the PPZ algorithm (random variable order, unit-clause forcing,
random bits otherwise), prove that a run in a fixed order produces the
unique solution with probability 2^{-u}, construct critical clauses,
show a variable is last among m variables in a 1/m fraction of orders,
and conclude by AM-GM that one round succeeds with probability at least
2^{-(1-1/k)n}.

AI-assisted: Jetski (worker-jetski-17d3679e).

* chore(bib): keep references.bib sorted by key (cslib-community#953)

* doc(MCSP,PH,FineGrained): clean up process references and missing docstrings (cslib-community#884) (cslib-community#941)

* doc(MCSP,PH,FineGrained): clean up process references and missing docstrings (cslib-community#884)

Address finding F16 on issue cslib-community#884:
- In Partial.lean and PartialNP.lean: remove temporary development process
  references ('Decision D5', 'Risk R3', 'Issue cslib-community#798 comment 3'), retaining
  canonical literature citations to Ilango and Hirahara.
- In Kannan.lean: cite Arora-Barak Theorem 6.22 explicitly in the module
  header and theorem docstring.
- In FineGrained/PermutationIndependentSet.lean: add docstring to
  BipartitePermutationIndependentSet.mem_iff_exists_satisfiesUndirected.
- In Promise/Reduction.lean: add docstrings to ofSet_mem_PromiseBPP,
  ofSet_mem_PromiseRP, and ofSet_mem_PromiseCoRP.

AI-assisted: Jetski (worker-jetski-b5844be2).

* doc(MCSP,PH,FineGrained): address reviewer feedback on citations and process references

* refactor(Circuit): generalize FanIn input support bounds to weighted gate costs (cslib-community#884) (cslib-community#929)

* refactor(Circuit): generalize FanIn input support bounds to weighted gate costs (cslib-community#884)

Generalize Program.card_reachableInputs_le in
Complexity.Computability.Circuit.FanIn to arbitrary per-operation weights w
satisfying ∀ op, σ.Arity op ≤ 1 + w op, exposing
Program.card_reachableInputs_le_cost and
Program.card_biUnion_wireSupport_le_cost.

Deduce Program.card_biUnion_wireSupport_le_cost_binaryCost in
Complexity.Computability.Circuit.Boolean.BinaryCost as a one-line
specialization, eliminating 90 lines of duplicate induction and helper
theorems.

Refs cslib-community#884 (Item 7, F4)

* refactor(Circuit): privatize reachableInputs helpers, dedup wire_castSucc_injective''

* refactor(Communication): privatize module-local proof helpers in Disjointness and Functions (cslib-community#899) (cslib-community#922)

Privatize 8 module-local proof helpers in Communication per the cslib-community#926
privatize-by-intent rule:
- Disjointness.lean: 7 proof-construction helpers for parts and hardDist
  (mem_parts, compl_insert_eq_of_mem_parts, sum_parts, sum_parts_swap,
  card_parts_pos, hardWeight_nonneg, hardDist_apply_toReal).
- Functions.lean: card_lt_two_pow_of_run_eq_greaterThan.

Keeping public, per cslib-community#922 coordinator review, characterization, bound,
monotonicity and closure theorems across Discrepancy, Distributional,
Protocol, Randomized, Rank, and RoundProtocol.

Refs cslib-community#899 (Item 9)

* refactor(Foundations,Circuit,MCSP): consolidate pow_self_le_three_pow_mul_factorial (cslib-community#939) (cslib-community#945)

Move the elementary factorial-power comparison bound
`Nat.pow_self_le_three_pow_mul_factorial` (n ^ n ≤ 3 ^ n * n!) to
`Complexity.Foundations.Data.Nat.Factorial`.

Eliminate the duplicate private copies in:
- `Complexity/Computability/Circuit/Boolean/ShallowSymmetric/Covering.lean`
- `Complexity/Computability/MCSP/Shannon.lean`

and drop their now-unused ExponentialBounds imports.

Refs cslib-community#939 (Item A.1)

AI-assisted: Jetski (worker-jetski-b5844be2).

* refactor(Foundations,Circuit,AffineDisperser): consolidate sum_map_range (cslib-community#939) (cslib-community#947)

Move `List.sum_map_range` (`((List.range n).map f).sum = ∑ i : Fin n, f i`)
to `Complexity.Foundations.Data.List.OfFn`.

Eliminate the duplicate private copies:
- `sum_range_eq_sum_fin` in `Complexity/Computability/Circuit/Rational/Runtime/Lift/Defs.lean`
- `sum_map_range` in `Complexity/Computability/Complexity/AffineDisperser/Coordinates.lean`

Refs cslib-community#939 (Item A.2)

AI-assisted: Jetski (worker-jetski-b5844be2).

* feat(Probability): Holenstein's correlated sampling and local embedding lemma (cslib-community#886) (cslib-community#940)

* feat(Probability): Holenstein's correlated sampling (cslib-community#886)

Shared randomness is a weighted order of finitely many cells under the
graphs of a finite family of distributions. Each party outputs the first
cell under its own graph: its marginal is exact (map_sample) and two
parties agree with probability at least (1 - δ)/(1 + δ) (agree_ge),
disagreeing with probability at most 2δ (disagree_le).

Co-authored-by: Jetski (worker-jetski-17d3679e) <noreply@google.com>

* feat(Probability): Holenstein's local embedding lemma and the coupling inequality (cslib-community#886)

Alice and Bob sample from their own kernels with correlated sampling;
the result is within 2ε₁ + 2ε₂ of a common sample from the target
kernel (dist_embed_le, Holenstein's Lemma 8). Add the coupling
inequality dist (p.map f) (p.map g) ≤ Pr[f ≠ g] (dist_map_map_le).

Co-authored-by: Jetski (worker-jetski-17d3679e) <noreply@google.com>

* fix(Probability): use simp only for non-terminal simp calls (cslib-community#886)

* style(Probability): wrap a long line (cslib-community#886)

* chore(bib): keep references.bib sorted by key (cslib-community#953)

* fix(bib): remove entries duplicated by a faulty restack; keep only this PR's additions, sorted

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dvi6MU29zU9t8zYfeU51sB

---------

Co-authored-by: Jetski (worker-jetski-17d3679e) <noreply@google.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* feat(FineGrained): PPZ for satisfiable k-SAT via the isolation inequality (cslib-community#894) (cslib-community#930)

Generalize the PPZ analysis from uniquely satisfiable to arbitrary
satisfiable k-CNF formulas. Add Cslib.BitString.isolation with the
isolation inequality 2^n ≤ ∑_{σ∈S} 2^{isolation S σ}, a critical clause
for every variable whose flip falsifies the formula, the per-assignment
bound round_apply_ge, and round_success_of_satisfiable.

Co-authored-by: Jetski (worker-jetski-17d3679e) <noreply@google.com>

* feat(Interactive): layered arithmetic circuits and the GKR identity (cslib-community#892) (cslib-community#944)

* feat(Interactive): layered arithmetic circuits and the GKR identity (cslib-community#892)

Add Cslib.Interactive.GKR.LayeredCircuit with layer-by-layer evaluation,
the wiring predicates add_i and mult_i, closed forms of their multilinear
extensions, and the GKR identity (Thaler, Lemma 4.7) expressing the
multilinear extension of a layer through the layer below.

Co-authored-by: Jetski (worker-jetski-17d3679e) <noreply@google.com>

* refactor(Interactive): reuse indicatorPoly; move bitPoint and eval_multilinearExtension_eq_sum to MultilinearExtension (cslib-community#892)

* chore(bib): keep references.bib sorted by key (cslib-community#953)

* fix(bib): remove entries duplicated by a faulty restack; keep only this PR's additions, sorted

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dvi6MU29zU9t8zYfeU51sB

* docs(GKR): name the existing wiring-predicate lemma in the module doc

The Main results list named eval_multilinearExtension_addPred and
eval_multilinearExtension_multPred, which do not exist; the closed form is
eval_multilinearExtension_wiringPred, of which addPred and multPred are instances.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dvi6MU29zU9t8zYfeU51sB

---------

Co-authored-by: Jetski (worker-jetski-17d3679e) <noreply@google.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Probability): Raz's conditioning lemma for product distributions (cslib-community#886)

Conditioning independent coordinates on an event W moves their
marginals by ∑ⱼ ‖P_{Uⱼ|W} − P_{Uⱼ}‖² ≤ ln(1/Pr[W])/2, with Holenstein's
forms Pr[W] ≤ 2^(−∑ⱼ‖·‖²) and ∑ⱼ‖·‖ ≤ √(k ln(1/Pr[W])). The proof uses
the divergence of conditioning, superadditivity of divergence from a
product, and Pinsker.

Co-authored-by: Jetski (worker-jetski-17d3679e) <noreply@google.com>

* chore(bib): keep references.bib sorted by key (cslib-community#953)

---------

Co-authored-by: Jetski (worker-jetski-17d3679e) <noreply@google.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.

1 participant