Skip to content

refactor(Circuit/Boolean): split the P side out of Razborov/MiddleSlice to cut Smolensky/Majority's import closure (Part of #4451) - #4539

Merged
SamuelSchlesinger merged 1 commit into
mainfrom
refactor/middle-slice-p
Nov 11, 2026
Merged

SamuelSchlesinger merged 1 commit into
mainfrom
refactor/middle-slice-p

Conversation

@SamuelSchlesinger

Copy link
Copy Markdown
Collaborator

Splits the P side of the middle slice out of Razborov/MiddleSlice.lean, so that the AC⁰[2] lower bound and its clients no longer import the polynomial-time Turing machine library. This follows up on #4528, whose proof-only import of MiddleSlice into Smolensky/Majority pulled that library in (Part of #4451, the M6.7a follow-ups).

  • middleSlice_mem_P and exists_mem_P_notMem_AC0Mod_two move unchanged to the new Razborov/MiddleSlice/P.lean. MiddleSlice.lean keeps the definitions and middleSlice_notMem_AC0Mod_two, and its imports drop P.Slices and the PolyTime modules. ACC0.lean imports MiddleSlice.P.
  • ACC0.lean and ACC0/Basic.lean import Smolensky instead of Smolensky.Majority, which neither uses: each needs only Smolensky.parity_notMem_AC0Mod.
  • The middle-slice-mod-two registry entry moves with its theorems (entries are single-module). It now lists middleSlice_mem_P and exists_mem_P_notMem_AC0Mod_two, and its scope names the lower bound middleSlice_notMem_AC0Mod_two in the imported module.
  • Review nit from feat(Circuit/Boolean): majority ∉ AC⁰[2]; TC⁰ ⊄ AC⁰[p] and P ⊄ AC⁰[p] for every prime p (Part of #4451) #4528: AC0Mod_ssubset_ACC0 at p = 2 needs some ACC0 language outside AC⁰[2], with MOD_3 as one example, not MOD_3 specifically. Reworded in the ACC0/Basic docstrings and the circuits manual.

No declaration is renamed or restated, so callers are unaffected apart from import paths.

Import closure (CslibFrontier modules, computed by transitively following import lines; Mathlib, Cslib and other dependencies not counted):

module main a8cab26 this PR before #4528
Smolensky/Majority 235 125 119
Razborov/MiddleSlice 209 52 —
ACC0/Basic 236 119 120
Razborov/Useful 261 257 —

The 6 modules Smolensky/Majority still has beyond its pre-#4528 closure are the rank-property stack its p = 2 case uses.

Manuals: the Operator's Manual circuits chapter links the new module and has the p = 2 rewording. The Agent Operator's Manual needs no change, since no workflow or tooling changed.

Progress: infrastructure (import structure) and documentation; no new mathematics.

Validation (local, at the head commit):

  • lake build --wfail --iofail of MiddleSlice, MiddleSlice.P, ACC0, Smolensky.Majority, Razborov.Useful, SymAnd.ACC0, the Razborov/ACC0/ThresholdNC1 tests and CslibFrontierResults;
  • check_operator_manual, check_hygiene --check-simp, check_encoding_readability, lint-style, mk_all --check.

CI runs the full build.

AI disclosure: written by an AI agent (meta-rr97-gate, Jetski) for Samuel Schlesinger. It has not had human review; any agent review is not human review.

…f Razborov/MiddleSlice

Move middleSlice_mem_P and exists_mem_P_notMem_AC0Mod_two into Razborov/MiddleSlice/P.lean so that the
lower bound and its clients (Smolensky/Majority) no longer import the polynomial-time Turing machine
library. ACC0 and ACC0/Basic import Smolensky instead of Smolensky.Majority, which they do not use.
The middle-slice-mod-two registry entry moves with its theorems. Reword the p = 2 note on
AC0Mod_ssubset_ACC0: any ACC0 language outside AC0[2] suffices, MOD_3 is one example.
@SamuelSchlesinger

Copy link
Copy Markdown
Collaborator Author

Agent review (reviewer review-4539, Jetski session 9277108c-6fde-461c-abc0-b2491e826977) of a7582cc: approve. Agent review, not human review.

Optional nit for a follow-up: middleSlice_notMem_AC0Mod_two is no longer a registered theorem; the scope only names it. A separate one-theorem entry in Razborov.MiddleSlice would keep the headline lower bound in the generated inventory.

Queueing this head once ci-checks passes.

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