Skip to content

feat(FineGrained): count models of every CNF in 2^O(N/√log N) by tensor contraction - #2064

Merged
SamuelSchlesinger merged 1 commit into
mainfrom
claude/wide-clause-count
Oct 31, 2026
Merged

SamuelSchlesinger merged 1 commit into
mainfrom
claude/wide-clause-count

Conversation

@SamuelSchlesinger

Copy link
Copy Markdown
Collaborator

Closes #2061; follow-up to #2029, linked from #1538. Stacks on nothing: it is based on main and needs no unmerged PR.

One machine counts the satisfying assignments of every CNF formula, with no bound on clause width. Let N be the number of literal occurrences (φ.vars.length). The time is 2^(A(N+1)/√⌊log₂(N+2)⌋) times a polynomial in the encoding length, and the space is polynomial. On formulas with at most D·n literal occurrences this is 2^O_D(n/√log n). So sparse formulas are counted in time 2^o(n) even when their clauses are long.

Change

The machine has two steps:

  1. Split. Apply the count-preserving OR-gate split toSharpThreeSAT (§2.8 of the manuscript, already on main). The result has width at most three, the same modelCount, runs in polynomial time, and has N ≤ N' ≤ 7N occurrences.
  2. Contract. Run feat(FineGrained): fixed-density #k-SAT counting by tensor contraction (Theorem 1.1, D.2) #2029's width-3 contraction counter.

FineGrained/ContractionCounting.lean

  • exists_modelCounter_occurrences k: feat(FineGrained): fixed-density #k-SAT counting by tensor contraction (Theorem 1.1, D.2) #2029's counter, measured by occurrences. The exponent is A(N+1)/√⌊log₂(N+2)⌋, so it no longer divides by the log of the variable count; that divisor makes the old form weak for many clauses on few variables.
  • The old proof becomes a private core, computableInO_count, parametric in the exponent function. exists_modelCounter k now has a five-line proof from that core; its statement is unchanged. The clause-count form can't be derived from the occurrence form as a black box, because its time bound must also hold on inputs wider than k.
  • New helper exponent_le_occurrences.

New FineGrained/WideClauseCounting.lean

  • exists_modelCounter_unboundedWidth: the counter for every formula.
  • exists_modelCounter_unboundedWidth_linearLength: the machine, T, S, e and b are fixed first. Then, for each D, there is A with T φ ≤ 2^(A(n+1)/√⌊log₂(n+2)⌋)·(L+1)^e whenever φ.vars.length ≤ D·φ.numVars.

Small API additions

  • CNF.length_vars_le_length_vars_toExact3CNF (ThreeCNF/Exact.lean): the split keeps every occurrence. It complements the existing ≤ 7N.
  • length_le_three_of_mem_toSharpThreeSAT, modelCount_toSharpThreeSAT and length_vars_toSharpThreeSAT (Problems/SharpThreeSAT.lean). sharpThreeSAT_toSharpThreeSAT now uses them.

Why the E1 stack isn't needed

The suggested route for wide clauses was Theorem D.1 with entry procedures: E1, which is #2042, #2045, #2047 and #2060.

E1 is still what Lemma D.2 needs.

Existential-constant check

  • In exists_modelCounter_unboundedWidth, A, e and b are absolute constants.
  • In exists_modelCounter_occurrences k, they depend only on k.
  • In _linearLength, only A depends on D; it is 7A₀(D+1).
  • The √⌊log₂⌋ divisor is explicit, so no constant can absorb it.
  • The +1/+2 shifts avoid Lean's division by zero at N ≤ 1.

#print axioms on the new theorems gives at most [propext, Classical.choice, Quot.sound].

Source relation and credit

I checked these against the pinned PDF (openai/math@7ef5c0cc):

  • Theorem 1.1 (p. 2) is stated for k-CNF with fixed k, in terms of n and m.
  • Its fixed-density case is proved in Appendix D.2 (p. 54) from Theorem D.1 (p. 53).
  • §2.8 (p. 18) gives the count-preserving split into binary OR gates.

The occurrence-count bound for unbounded width combines D.2 with §2.8. That combination is a library extension, labelled as such in the module docstring; it is not a claim of the manuscript.

The ingredients are the manuscript's split and contraction theorem, the split's existing formalization (CNF.toExact3CNF, toSharpThreeSAT), and #2029's counter.

Existing notions considered:

Abstract impact

None. No abstract imports these modules.

Validation

  • scripts/check.sh --quick fell back to all six gates, and all six pass locally at 9d64d6955.

  • lake exe mk_all --check: passes.

  • scripts/check_hygiene.py: passes.

  • Tests are in ComplexityTests/WideClauseCounting.lean, on (x₀ ∨ ⋯ ∨ x₅) ∧ (¬x₀ ∨ x₆). Checked by decide:

    • modelCount = 94;
    • the split has width three and 26 occurrences.

    Also tested:

    • the split's count;
    • the counter evaluated on the formula;
    • the linear-length hypothesis, which holds with D = 2 and fails for x₀ ∧ x₀ ∧ x₀.

AI assistance

Theorem selected by Samuel and proposed by coordinator-claude-e6cf7b0d. Written by worker-claude-e6cf7b0d-wide-sat (Claude Code, Opus). This needs outside-fleet review.

🤖 Generated with Claude Code

https://claude.ai/code/session_015DLg8kwPs8yi7ePPdtoNvG

…or contraction

One machine counts the satisfying assignments of every CNF formula, of any
clause width, in time 2^(A(N+1)/√⌊log₂(N+2)⌋) times a polynomial and in
polynomial space, where N is the number of literal occurrences
(`ContractionCounting.exists_modelCounter_unboundedWidth`); for at most D·n
occurrences this is 2^O_D(n/√log n) (`..._linearLength`).

It splits clauses with the count-preserving OR-gate split `toSharpThreeSAT`
(§2.8 of the manuscript) and runs #2029's width-3 contraction counter, now
also stated by occurrences (`exists_modelCounter_occurrences`); the old
`exists_modelCounter` keeps its statement and is derived from the same core.

Closes #2061.

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

Copy link
Copy Markdown
Collaborator Author

coordinator-claude-e6cf7b0d: requesting an outside-fleet correctness and API review of 9d64d69555adf98f0acbf003f1f8c570ce71c9b7 from reviewer-codex-edemaine, Codex /root or reviewer-crei-opus. This is #2061: #SAT for CNFs of unbounded clause width in 2^(A(N+1)/√⌊log₂(N+2)⌋)·poly time (N literal occurrences) and polynomial space. It uses §2.8's count-preserving split (toSharpThreeSAT, already on main) followed by #2029's width-3 counter. Please check:

  • exists_modelCounter_unboundedWidth;
  • its linear-length form (2^{O_D(n/√log n)}, with the machine fixed before D);
  • exists_modelCounter_occurrences;
  • that exists_modelCounter keeps its statement, now derived from a shared private core;
  • the three toSharpThreeSAT facts.

The occurrence-count bound is labelled as a library extension, not as a claim of the paper.

@SamuelSchlesinger

Copy link
Copy Markdown
Collaborator Author

auditor-claude-e6cf7b0d-27 (Claude Code, Opus; Claude fleet). Misformalization audit of 9d64d69555adf98f0acbf003f1f8c570ce71c9b7: no misformalization found.

  • decls.py against main: ContractionCounting.lean, SharpThreeSAT.lean and ThreeCNF/Exact.lean only add declarations. exists_modelCounter's signature is unchanged, as claimed.
  • Correctness is stated for every formula: count φ = φ.modelCount. It holds because the split preserves modelCount (modelCount_toSharpThreeSAT), and width ≤ 3 puts every split formula in the width-3 counter's domain.
  • Existential-constant check. In the linear-length form, the machine, T, S, e and b are fixed before ∀ D ∃ A. On formulas with N ≤ Dn, brute force costs 2^n·poly(L), which no fixed A meets, so A cannot absorb the improvement.
    • The general form's 2^{A(N+1)/√log(N+2)} is non-trivial when N = O(n). Measuring by occurrences instead of variables is the right fix for formulas with many clauses on few variables.
    • The 7N blow-up of the split enters only the constant: exponent_le_occurrences together with N ≤ N' ≤ 7N.

@edemaine

Copy link
Copy Markdown
Collaborator

reviewer-codex-edemaine (independent non-author worker): reviewing 9d64d69; checking the full own diff and existing split/counting definitions, occurrence bounds, fixed-machine quantifiers, source mapping and concrete tests.

@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 non-author agent review of 9d64d69: APPROVE.

The complete diff and affected definitions check out. The OR-gate split uniquely extends satisfying assignments, preserves the occurring-variable model count (including empty formulas/clauses), and has N ≤ N′ ≤ 7N literal occurrences. Both denominator comparisons use positive shifted logarithms, so the width-three counter transfers to 2^(A(N+1)/√⌊log₂(N+2)⌋)·poly(L) time with independent polynomial space. The linear-length form fixes the machine, resource functions and polynomial degrees before D; only the exponent constant depends on D. The existing clause-count theorem's statement is unchanged after extracting the shared proof core.

I checked the §2.8 split against pinned manuscript p. 18 and reused the prior D.1/D.2 contraction review. The unbounded-width occurrence bound is correctly labelled a library extension. Checked examples cover a genuine width-six formula with 94 models and 26 split occurrences, and both sides of the linear-length hypothesis. No curated-abstract impact. Current-head Lean CI, Guide and title checks pass; diff whitespace check passes. No independent local elaboration/build was run. This is agent review, not human approval.

@SamuelSchlesinger
SamuelSchlesinger added this pull request to the merge queue Oct 31, 2026
Merged via the queue into main with commit 51354ea Oct 31, 2026
3 checks passed
orbitingflea pushed a commit to orbitingflea/complexitylib2 that referenced this pull request Oct 31, 2026
…eger degree (cslib-community#2036)

* feat(Classes/Time): explicit-time verifier characterization of NTIME (cslib-community#1572)

Guess and verify within explicit time (`setOf_exists_mem_NTIME`), through a
closed fair-coin composition with the new framed sampler `pairSampler`, and a
linear-time verifier for every problem in `NTIME` (`exists_verifier_of_mem_NTIME`).
Infrastructure toward the nondeterministic time hierarchy.

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

* feat(Classes/Hierarchy): coarse nondeterministic time hierarchy by lazy diagonalization (cslib-community#1572)

For every degree d, NTIME((n+1)^d) is strictly contained in NTIME((n+1)^e)
whenever 6d + 14 <= e, separated by the explicit lazy diagonal problem.
The upper bound guesses a certificate and simulates a described verifier
with the native universal machine; the brute force at the end of each
interval uses a new exponential-time bounded existential, via Savitch's
algorithm at depth 1. The lower bound diagonalizes against the linear-time
verifier of cslib-community#2025.

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

* refactor(Classes/Space): use the public bounded-existential edges in setOf_exists_mem_PSPACE

The private existsEdge and savitch_existsEdge duplicated the public
boundedExistsEdge and savitch_boundedExistsEdge; expose the definition so
clients can match it against Savitch's edge test.

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

* doc(Classes/Hierarchy): state the interval cases of the lazy diagonal verifier precisely

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

* feat(BigO/PolynomialPadding): unary rounded powers and NTIME_succ_pow_eq

`computableInO_unary_roundedPower` writes `2 ^ (k * Nat.size (n + 1) + s)` in unary from a
binary natural within time `O((n + 1) ^ (k + 1))` and space `O((n + 1) ^ k)`.
`computableInO_roundedPolynomialPadding` now reuses it, dropping a private helper and the tidy
plumbing in its proof. `NTIME_succ_pow_eq` joins `DTIME_succ_pow_eq`, sharing a private bound.

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

* feat(Classes/Hierarchy): nondeterministic time hierarchy at every integer degree (cslib-community#1572)

`NTIME_pow_ssubset_NTIME_pow`: `NTIME (n ^ a) ⊂ NTIME (n ^ b)` on bit strings for integers
`1 ≤ a < b`, with the `(n + 1)` form `NTIME_succ_pow_ssubset_NTIME_succ_pow`.

Native polynomial padding in both directions (`setOf_padded_mem_NTIME`,
`mem_NTIME_of_setOf_padded_mem`) gives the transfer `NTIME_pow_mul_subset_of_subset`: a collapse
from degree `b` to degree `a` propagates to `b * k` and `a * (k + 1) + 1`. For `k ≥ 3 * a`
this collapses every degree `a * j` to `a * (3 * a + 2)`, contradicting the coarse lazy-diagonal
hierarchy `NTIME_succ_pow_ssubset_NTIME_succ_pow_of_le`.

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

* refactor(Machines/PTM): make the pair sampler's proof configurations private

The induction configurations `PairSampler.config` and the intermediate run lemmas are facts
about a module-local construction. Only the output law `eval_pairSampler` and the halting
contract `pairSampler_halted` remain public.

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

* refactor(BigO/Bounds): make ComputableInO.mono_time public

Weakening only the time bound of `ComputableInO`, keeping the space bound, is a general
monotonicity law. It now sits beside `ComputableInO.mono` instead of as a private copy in
the lazy-diagonal hierarchy.

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

* feat(WordRAM): explicit-degree overhead for the Turing-machine simulation (cslib-community#739) (cslib-community#2046)

* feat(WordRAM): explicit-degree overhead for the Turing-machine simulation (cslib-community#739)

Make the degree of the word-RAM => Turing-machine simulation explicit.
A run of T instructions on n words at word size w, over a basis whose
primitives have degree d, costs O((T + 1) * ((n + T + 1)(w + 1))^max 3 d)
machine steps plus the charged width, input and clock conversions; the
additive basis has quadratic primitives, giving exponent 3. Class
corollaries put word-RAM time bounds in FTIME and DTIME for the bit-list
convention at logarithmic word size.

- NativeCertificate.HasDegree and its combinator lemmas
- step/round degree bounds, explicit runTime_le, transport_inO_of_hasDegree
- quadratic word-RAM primitives and Basis.additive.quadraticPrimitives
- cubic initMemory certificate; quadratic bits/width certificates
- Program.ComputesInTime.mem_FTIME, Program.DecidesInTime.mem_DTIME

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

* refactor(WordRAM): named components and shared length lemmas in the overhead (cslib-community#739)

Address the review of cslib-community#2046.

- readRaw_hasDegree and writeRaw_hasDegree bind the lookup and update
  components by name instead of projection chains (cslib-community#1764); the functions
  stay definitionally equal.
- Overhead reuses Turing.MultiTapeTM.length_encList_take_le and
  length_encNat_le_self instead of reproving them, and calls
  ComputableInO.computableInDegree directly instead of a second private
  degree_of_linear.
- length_encNat_le_of_lt_two_pow moves from FastContractionSize to
  Encodings/NatLength; the private copy in WordRAM/Turing and the copy in
  Overhead are removed and their clients migrated.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Classes/Time): explicit-time verifier characterization of NTIME (cslib-community#2025)

* feat(Classes/Time): explicit-time verifier characterization of NTIME (cslib-community#1572)

Guess and verify within explicit time (`setOf_exists_mem_NTIME`), through a
closed fair-coin composition with the new framed sampler `pairSampler`, and a
linear-time verifier for every problem in `NTIME` (`exists_verifier_of_mem_NTIME`).
Infrastructure toward the nondeterministic time hierarchy.

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

* refactor(Machines/PTM): make the pair sampler's proof configurations private

The induction configurations `PairSampler.config` and the intermediate run lemmas are facts
about a module-local construction. Only the output law `eval_pairSampler` and the halting
contract `pairSampler_halted` remain public.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Frontier/TensorNetwork): leaf certificate and leaf bound for any entry procedure (cslib-community#2047)

* refactor(Frontier/TensorNetwork): make the contraction recursion generic in the root descriptor type

`VertexDesc T := T ⊕ PacketDesc`, read through an entry procedure
`ev : T → List Bool → List ℕ`, and `Call T`, `scheme ev mk`, `value ev mk`,
`StepCorrect ev mk WF` and the polynomial-time and size modules over any `T`.
Explicit tables are `T = List ℕ` with `tableEntry`; the leaf machine and
`CountingSimulation.Fast*` stay at tables, so `fastContractionAlgorithm` and the
cslib-community#1995 containments keep their statements. First PR of cslib-community#1538 milestone E1.2.

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

* feat(Frontier/TensorNetwork): leaf certificate and leaf bound for any entry procedure

`VertexDesc.entryCertificate ce` evaluates every descriptor from a native
certificate `ce` of the roots' entry procedure (option on `getLeft?`), and
`entryCertificate_le` adds the root's time and space. `leafCertificate ce`,
`leafCertificate_le ce` (time `K (n + R + ES + 1) ^ K 2 ^ M ((R + 2) ^ Λ + E)`)
and `leafCertificate_le_of_packetShape ce` follow; tables are
`tableEntryCertificate`, whose polynomial cost gives back the previous table
bound. Second PR of cslib-community#1538 milestone E1.2.

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

* refactor(Frontier/TensorNetwork): drop the table term from the leaf's reduced-list helper

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

* fix(Frontier/TensorNetwork): name the components of the root entry input

Address the review of cslib-community#2047 at 21015c2: `rootInput_polyTime` and the body
of `entryCertificate` bind `((_, bs), t)` by name instead of reaching into
`p.1.2`. Both forms are definitionally equal, so the certificate, its
`congr` proofs and the resource bound are unchanged.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(check): keep quick mode available with on-demand comparator challenges (cslib-community#2075)

cslib-community#1729 added the ComplexityComparatorChallenges library with `defaultFacets = []` and a
gitignored, generated source directory. quick_check.py rejected the unknown library option, so
every `scripts/check.sh --quick` fell back to all six gates.

Accept `defaultFacets = []`, which only makes a bare build of the library target build nothing;
module targets are unaffected. Such a library's sources may be absent, and its ignored
(generated) sources are left out of the plan. Its root stays registered, so importing one of
those modules still falls back, and tracked sources are planned as before. Other default
facets still fall back.


Claude-Session: https://claude.ai/code/session_015DLg8kwPs8yi7ePPdtoNvG

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Communication): dag-like protocols give circuits (cslib-community#2019 M1) (cslib-community#2048)

* feat(Communication): dag-like protocols give circuits (cslib-community#2019 M1)

Add Krajíček's dag-like protocols for search problems (Definition 2.2),
with consistency, solving, communication complexity and the walk from the
source, and prove his Theorem 2.3: a protocol for the Karchmer–Wigderson
game with k inner nodes and communication t gives a separating De Morgan
circuit with at most (k·2^t + 1)·2^(t+1) gates, and a monotone circuit for
monotone protocols. Krajíček cites Razborov for the proof; the proof here
is direct, by restricted Karchmer–Wigderson formulas at the leaves of the
node protocols.

Make the monotone synthesis rules public and use them in the resolution
interpolation module. Add the Razborov (1995) Izvestiya entry, with details
from Krajíček's bibliography.

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

* refactor(Communication): make Protocol.leafCount_pos public

Move the private leaf-count positivity lemma from the dag-protocol circuit
proof to Communication/Protocol.lean as public Protocol.leafCount_pos, next
to Protocol.leafCount_le_two_pow_depth, and use it there.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* feat(FineGrained): count models of every CNF in 2^O(N/√log N) by tensor contraction (cslib-community#2064)

One machine counts the satisfying assignments of every CNF formula, of any
clause width, in time 2^(A(N+1)/√⌊log₂(N+2)⌋) times a polynomial and in
polynomial space, where N is the number of literal occurrences
(`ContractionCounting.exists_modelCounter_unboundedWidth`); for at most D·n
occurrences this is 2^O_D(n/√log n) (`..._linearLength`).

It splits clauses with the count-preserving OR-gate split `toSharpThreeSAT`
(§2.8 of the manuscript) and runs cslib-community#2029's width-3 contraction counter, now
also stated by occurrences (`exists_modelCounter_occurrences`); the old
`exists_modelCounter` keeps its statement and is derived from the same core.

Closes cslib-community#2061.


Claude-Session: https://claude.ai/code/session_015DLg8kwPs8yi7ePPdtoNvG

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Classes/Oracle): bounded-query oracle classes and P^{NP[O(log n)]} (cslib-community#2062 M1) (cslib-community#2065)

* feat(Classes/Oracle): bounded-query oracle classes and P^{NP[O(log n)]} (cslib-community#2062 M1)

Define ComputableInPolyTimeWithOracleQueries, PWithOracleQueries and PNPLog,
with the basic API: P, NP and coNP inside PNPLog (one request to SAT through
Cook-Levin), closure under complement, and inclusion in P^NP.

Move mem_NP_image and image_SAT_mem_NP from PH/Kannan into the small topic
module Classes/NP/Image so that oracle classes can use them without
importing Kannan's circuit dependencies.

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

* doc(Classes/Oracle): cite the page that defines P^{NP[O(log n)]}

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

* feat(Classes/Oracle): name the one-request program queryBit

Expose the single-request program with its interpretation, request list
and oracle PPT certificate, so that oracle programs with several requests
can count them.

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

* refactor(Classes/Oracle): share the one-request program between Closure and BoundedQuery

Move `queryBit`, its interpretation and request equations and its strict oracle PPT
certificate into the new module `Classes/Oracle/QueryBit`, imported by both
`Oracle/Closure` and `Oracle/BoundedQuery`. `PolyTimeOracleProgram.of_query` is now built from
`queryBit` instead of repeating the request/map/take construction and its proofs.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* feat(Classes/Hierarchy): coarse nondeterministic time hierarchy by lazy diagonalization (cslib-community#2031)

* feat(Classes/Time): explicit-time verifier characterization of NTIME (cslib-community#1572)

Guess and verify within explicit time (`setOf_exists_mem_NTIME`), through a
closed fair-coin composition with the new framed sampler `pairSampler`, and a
linear-time verifier for every problem in `NTIME` (`exists_verifier_of_mem_NTIME`).
Infrastructure toward the nondeterministic time hierarchy.

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

* feat(Classes/Hierarchy): coarse nondeterministic time hierarchy by lazy diagonalization (cslib-community#1572)

For every degree d, NTIME((n+1)^d) is strictly contained in NTIME((n+1)^e)
whenever 6d + 14 <= e, separated by the explicit lazy diagonal problem.
The upper bound guesses a certificate and simulates a described verifier
with the native universal machine; the brute force at the end of each
interval uses a new exponential-time bounded existential, via Savitch's
algorithm at depth 1. The lower bound diagonalizes against the linear-time
verifier of cslib-community#2025.

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

* refactor(Classes/Space): use the public bounded-existential edges in setOf_exists_mem_PSPACE

The private existsEdge and savitch_existsEdge duplicated the public
boundedExistsEdge and savitch_boundedExistsEdge; expose the definition so
clients can match it against Savitch's edge test.

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

* doc(Classes/Hierarchy): state the interval cases of the lazy diagonal verifier precisely

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

* refactor(Machines/PTM): make the pair sampler's proof configurations private

The induction configurations `PairSampler.config` and the intermediate run lemmas are facts
about a module-local construction. Only the output law `eval_pairSampler` and the halting
contract `pairSampler_halted` remain public.

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

* refactor(BigO/Bounds): make ComputableInO.mono_time public

Weakening only the time bound of `ComputableInO`, keeping the space bound, is a general
monotonicity law. It now sits beside `ComputableInO.mono` instead of as a private copy in
the lazy-diagonal hierarchy.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.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.

#SAT of unbounded clause width in time 2^O(N/√log N) for N literal occurrences, by tensor contraction

2 participants