erdos-problems 0.3.4 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -47,4 +47,4 @@ Read next:
47
47
  - `VERIFICATION_CERTIFICATE_SPEC.md`
48
48
  - `EXTERNAL_VERIFICATION_LEDGER.md`
49
49
  - `INTERVAL_WORK_QUEUE.yaml`
50
- - `EXACT_SMALL_N_1_2000_CERTIFICATE.md`
50
+ - `EXACT_SMALL_N_1_10000_CERTIFICATE.md`
@@ -7,22 +7,22 @@ operational_threshold:
7
7
  intervals:
8
8
  - interval_id: N848.V1
9
9
  label: exact_small_n_base_interval
10
- range: "1..2000"
10
+ range: "1..10000"
11
11
  status: done
12
12
  method_class: exact_small_n
13
13
  claim_level: verified
14
- certificate: EXACT_SMALL_N_1_2000_CERTIFICATE.md
15
- data_packet: EXACT_SMALL_N_1_2000_RESULTS.json
16
- next_move: Use this as the first trusted base interval and decide whether the next extension is another exact interval or an imported-computation audit.
14
+ certificate: EXACT_SMALL_N_1_10000_CERTIFICATE.md
15
+ data_packet: EXACT_SMALL_N_1_10000_RESULTS.json
16
+ next_move: Use this as the current trusted base interval and decide whether the next extension is another exact interval or an imported-computation audit.
17
17
  - interval_id: N848.V2
18
18
  label: exact_small_n_extension
19
- range: "2001..?"
19
+ range: "10001..?"
20
20
  status: ready
21
21
  method_class: exact_small_n
22
22
  claim_level: target
23
23
  certificate: ""
24
24
  data_packet: ""
25
- next_move: Decide how far the exact clique scan can be pushed before a different method class is needed.
25
+ next_move: Decide whether exact coverage should continue directly beyond `10000` or whether the next gain should come from a different method class.
26
26
  - interval_id: N848.V3
27
27
  label: imported_computation_audit
28
28
  range: "public_claimed_interval"
@@ -6,7 +6,7 @@ routes:
6
6
  status: active
7
7
  summary: Convert the sufficiently-large-N theorem into a complete all-N resolution without overstating what is already closed or confusing imported thresholds with repo-owned claims.
8
8
  why_now: The share package is already committed, the bounded-verification lane is now frozen, and the repo has a first verified interval.
9
- next_move: Decide whether to extend exact verified coverage beyond `2000` or switch method class.
9
+ next_move: Decide whether to extend exact verified coverage beyond `10000` or switch method class.
10
10
  - route_id: external_threshold_tracking
11
11
  title: External Threshold Tracking
12
12
  status: support
@@ -18,7 +18,7 @@ routes:
18
18
  status: active_support
19
19
  summary: Reduce the finite remainder directly once a threshold is trusted enough to be operationally useful.
20
20
  why_now: Lowering `N0` matters because it reduces this lane, not because "smallest threshold" is the whole problem.
21
- next_move: Build on the exact `1..2000` base interval and decide the next extension rule.
21
+ next_move: Build on the exact `1..10000` base interval and decide the next extension rule.
22
22
  - route_id: formalization_coverage_audit
23
23
  title: Formalization Coverage Audit
24
24
  status: support
@@ -30,9 +30,9 @@ tickets:
30
30
  title: Close the decidable gap without confusing imported threshold progress and repo-owned candidate work
31
31
  route_id: finite_check_gap_closure
32
32
  status: active
33
- summary: The repo now has a committed review package for its audited `exp(1420)` candidate, a chosen bounded-verification lane, and an exact verified base interval `1..2000`. The live question is how to extend coverage from that foothold.
34
- current_blocker: The repo has not yet chosen whether the next interval extension should stay in the exact clique-scan regime or switch to a different verification method.
35
- next_move: Close `N848.G1.A21`.
33
+ summary: The repo now has a committed review package for its audited `exp(1420)` candidate, a chosen bounded-verification lane, and an exact verified base interval `1..10000`. The live question is how to extend coverage from that foothold while taking advantage of the new incremental verifier honestly.
34
+ current_blocker: The repo has not yet chosen whether the next interval extension should stay in the exact clique-scan regime or whether the right next gain is a breakpoint-style compression of the exact lane.
35
+ next_move: Close `N848.G1.A23`.
36
36
  - ticket_id: N848F
37
37
  title: Audit public formalization coverage
38
38
  route_id: formalization_coverage_audit
@@ -182,9 +182,23 @@ atoms:
182
182
  summary: The repo now has a reproducible exact certificate showing that the conjectured extremal size is correct for every `N` in `1..2000`.
183
183
  next_move: Decide whether to extend the exact clique scan beyond `2000` or change method class.
184
184
  - atom_id: N848.G1.A21
185
- title: Choose the next verified interval extension beyond `2000`
185
+ title: Extend the exact verified base interval beyond `2000`
186
+ route_id: finite_check_gap_closure
187
+ ticket_id: N848
188
+ status: done
189
+ summary: The repo now has a second exact certificate extending the bounded-verification base interval from `1..2000` to `1..3000`, while also showing that a blind jump to `1..5000` is no longer cheap enough to count as the default next move.
190
+ next_move: Choose the post-`3000` extension policy.
191
+ - atom_id: N848.G1.A22
192
+ title: Rebuild the exact verifier and remove the false post-`3000` policy wall
193
+ route_id: finite_check_gap_closure
194
+ ticket_id: N848
195
+ status: done
196
+ summary: The exact verifier now uses an incremental update rule, the compact certificate format keeps packets small, and the exact bounded-verification base interval now reaches `1..10000`.
197
+ next_move: Choose the post-`10000` interval policy.
198
+ - atom_id: N848.G1.A23
199
+ title: Choose the post-`10000` verified interval policy
186
200
  route_id: finite_check_gap_closure
187
201
  ticket_id: N848
188
202
  status: ready
189
- summary: The bounded-verification lane now starts from a real certified base interval `1..2000`. The next choice is whether the exact clique scan still has enough headroom to extend that base efficiently, or whether the next gain should come from breakpoint or audit methods.
190
- next_move: Decide whether to extend exact verified coverage beyond `2000` or switch method class.
203
+ summary: The bounded-verification lane now starts from a real certified base interval `1..10000`. The next choice is whether exact coverage should continue directly beyond that range, or whether the new exact data should be compressed into a stronger breakpoint method.
204
+ next_move: Decide whether to extend exact verified coverage beyond `10000` or switch method class.
@@ -22,5 +22,7 @@
22
22
  - Nineteenth refinement: choose bounded finite verification as the next closure lane and freeze the first repo artifacts for regimes, certificates, and external verification audit.
23
23
  - Twentieth refinement: freeze the operational threshold posture so imported `N0` claims can size the finite remainder without being silently promoted to canonical repo theorem truth.
24
24
  - Twenty-first refinement: certify the exact interval `1..2000` by a reproducible maximum-clique scan, giving the bounded-verification lane its first genuine covered interval.
25
- - Current public pack posture: active route `finite_check_gap_closure`, with asymptotic theorem already in hand, a committed audited candidate package in the repo, and a real exact base interval `1..2000` now covered in the bounded-verification lane.
26
- - Next maturity threshold: extend verified interval coverage beyond `2000` in the most efficient trustworthy way.
25
+ - Twenty-second refinement: extend the exact certificate to `1..3000`, and record that a direct jump to `1..5000` no longer looks cheap enough to treat as the obvious default next move.
26
+ - Twenty-third refinement: rebuild the exact verifier incrementally, compact the witness packet format, and extend the exact certificate all the way to `1..10000`.
27
+ - Current public pack posture: active route `finite_check_gap_closure`, with asymptotic theorem already in hand, a committed audited candidate package in the repo, and a real exact base interval `1..10000` now covered in the bounded-verification lane.
28
+ - Next maturity threshold: choose the post-`10000` extension policy in the most efficient trustworthy way.
@@ -40,6 +40,9 @@ Any bounded-verification claim for Problem `848` should attach a certificate wit
40
40
  - a second script, proof note, or reviewer confirmation
41
41
  - `cost_profile`
42
42
  - rough runtime or proof complexity
43
+ - `witness_encoding`
44
+ - if the certificate omits raw witness lists because they are derivable, state that
45
+ encoding explicitly, for example "pure residue class mod 25 when possible"
43
46
 
44
47
  ## Rejection triggers
45
48
 
@@ -76,8 +76,10 @@ Desired certificate:
76
76
 
77
77
  ## Current honest posture
78
78
 
79
- - Regime A: first exact interval `1..2000` is now frozen in the repo with a reproducible
79
+ - Regime A: first exact interval `1..10000` is now frozen in the repo with a reproducible
80
80
  maximum-clique certificate
81
+ - Regime A note: an incremental verifier removed the earlier false cost wall caused by
82
+ rebuilding the graph and clique search from scratch for each `N`
81
83
  - Regime B: not frozen in this repo
82
84
  - Regime C: public attempts exist, but some were explicitly criticized on the forum as
83
85
  difficult to verify or likely incorrect
@@ -85,5 +87,6 @@ Desired certificate:
85
87
  yet repo-audited
86
88
 
87
89
  So the next honest move is to decide whether exact-small-`N` coverage should be extended
88
- directly beyond `2000`, or whether the next gain comes from auditing imported computation or
90
+ directly beyond `10000`, or whether the next gain comes from
91
+ auditing imported computation or
89
92
  switching method class.
@@ -26,52 +26,34 @@ function parseArgs(argv) {
26
26
  return args;
27
27
  }
28
28
 
29
+ const squarefreeCache = new Map();
30
+
29
31
  function isSquarefree(n) {
32
+ if (squarefreeCache.has(n)) return squarefreeCache.get(n);
30
33
  let x = n;
31
34
  for (let p = 2; p * p <= x; p += 1) {
32
35
  if (x % p !== 0) continue;
33
36
  x /= p;
34
- if (x % p === 0) return false;
37
+ if (x % p === 0) {
38
+ squarefreeCache.set(n, false);
39
+ return false;
40
+ }
35
41
  while (x % p === 0) x /= p;
36
42
  }
43
+ squarefreeCache.set(n, true);
37
44
  return true;
38
45
  }
39
46
 
40
- function residueClass(N, residue) {
41
- const result = [];
42
- for (let n = 1; n <= N; n += 1) {
43
- if (n % 25 === residue) result.push(n);
44
- }
45
- return result;
46
- }
47
-
48
- function sameSortedSet(left, right) {
49
- if (left.length !== right.length) return false;
50
- const a = [...left].sort((x, y) => x - y);
51
- const b = [...right].sort((x, y) => x - y);
52
- return a.every((value, index) => value === b[index]);
47
+ function residueClassSize(N, residue) {
48
+ if (N < residue) return 0;
49
+ return Math.floor((N - residue) / 25) + 1;
53
50
  }
54
51
 
55
- function buildGraph(N) {
56
- const vertices = [];
57
- for (let a = 1; a <= N; a += 1) {
58
- if (!isSquarefree(a * a + 1)) vertices.push(a);
59
- }
60
- const adjacency = Array.from({ length: vertices.length }, () => new Set());
61
- for (let i = 0; i < vertices.length; i += 1) {
62
- for (let j = i + 1; j < vertices.length; j += 1) {
63
- const a = vertices[i];
64
- const b = vertices[j];
65
- if (!isSquarefree(a * b + 1)) {
66
- adjacency[i].add(j);
67
- adjacency[j].add(i);
68
- }
69
- }
70
- }
71
- return { vertices, adjacency };
52
+ function isPureResidueClass(clique, N, residue) {
53
+ return clique.length === residueClassSize(N, residue) && clique.every((value) => value % 25 === residue);
72
54
  }
73
55
 
74
- function maximumClique(vertices, adjacency) {
56
+ function maximumCliqueIndices(adjacency, candidateIndices, lowerBound = 0) {
75
57
  let best = [];
76
58
 
77
59
  function bronKerbosch(R, P, X) {
@@ -79,7 +61,7 @@ function maximumClique(vertices, adjacency) {
79
61
  if (R.length > best.length) best = [...R];
80
62
  return;
81
63
  }
82
- if (R.length + P.length <= best.length) return;
64
+ if (R.length + P.length <= Math.max(best.length, lowerBound)) return;
83
65
 
84
66
  let pivot = null;
85
67
  let pivotNeighborsInP = -1;
@@ -109,29 +91,63 @@ function maximumClique(vertices, adjacency) {
109
91
  }
110
92
  }
111
93
 
112
- bronKerbosch([], vertices.map((_, index) => index), []);
113
- return best.map((index) => vertices[index]).sort((a, b) => a - b);
94
+ bronKerbosch([], [...candidateIndices], []);
95
+ return best.sort((a, b) => a - b);
114
96
  }
115
97
 
116
98
  function scanInterval(minN, maxN) {
117
99
  const rows = [];
118
- for (let N = minN; N <= maxN; N += 1) {
119
- const residue7 = residueClass(N, 7);
120
- const residue18 = residueClass(N, 18);
121
- const { vertices, adjacency } = buildGraph(N);
122
- const clique = maximumClique(vertices, adjacency);
100
+ const vertices = [];
101
+ const adjacency = [];
102
+ let bestCliqueIndices = [];
103
+
104
+ for (let N = 1; N <= maxN; N += 1) {
105
+ const residue7Size = residueClassSize(N, 7);
106
+ const residue18Size = residueClassSize(N, 18);
107
+
108
+ if (!isSquarefree(N * N + 1)) {
109
+ const newIndex = vertices.length;
110
+ const neighbors = [];
111
+ for (let i = 0; i < vertices.length; i += 1) {
112
+ if (!isSquarefree(vertices[i] * N + 1)) {
113
+ adjacency[i].add(newIndex);
114
+ neighbors.push(i);
115
+ }
116
+ }
117
+ adjacency.push(new Set(neighbors));
118
+ vertices.push(N);
119
+
120
+ if (neighbors.length + 1 > bestCliqueIndices.length) {
121
+ const neighborClique = maximumCliqueIndices(
122
+ adjacency,
123
+ neighbors,
124
+ Math.max(0, bestCliqueIndices.length - 1),
125
+ );
126
+ if (neighborClique.length + 1 > bestCliqueIndices.length) {
127
+ bestCliqueIndices = [...neighborClique, newIndex].sort((a, b) => a - b);
128
+ }
129
+ }
130
+ }
131
+
132
+ const clique = bestCliqueIndices.map((index) => vertices[index]);
123
133
  const maxSize = clique.length;
124
- const residue7Size = residue7.length;
125
- const residue18Size = residue18.length;
134
+ if (N < minN) continue;
135
+ const exampleResidueClass = isPureResidueClass(clique, N, 7)
136
+ ? 7
137
+ : isPureResidueClass(clique, N, 18)
138
+ ? 18
139
+ : null;
140
+
126
141
  rows.push({
127
142
  N,
128
143
  maxCliqueSize: maxSize,
129
144
  residue7Size,
130
145
  residue18Size,
131
146
  candidateAchievesMaximum: residue7Size === maxSize,
132
- exampleMaximumClique: clique,
133
- exampleMatchesResidue7: sameSortedSet(clique, residue7),
134
- exampleMatchesResidue18: sameSortedSet(clique, residue18),
147
+ exampleResidueClass,
148
+ exampleMaximumClique: exampleResidueClass === null ? clique : undefined,
149
+ exampleMatchesResidue7: exampleResidueClass === 7,
150
+ exampleMatchesResidue18: exampleResidueClass === 18,
135
151
  });
136
152
  }
137
153
  return rows;
@@ -153,6 +169,7 @@ const rows = scanInterval(args.min, args.max);
153
169
  const payload = {
154
170
  generatedAt: new Date().toISOString(),
155
171
  method: 'exact_maximum_clique_scan',
172
+ resultEncoding: 'residue_class_when_possible',
156
173
  problemId: '848',
157
174
  parameters: {
158
175
  min: args.min,
@@ -3,11 +3,11 @@ family_role: finite_check_number_theory_workspace
3
3
  harness_profile: decidable_gap_workspace
4
4
  default_active_route: finite_check_gap_closure
5
5
  bootstrap_focus: Treat Problem 848 as a finite-gap closure problem and freeze the certificate surface before claiming bounded verification progress.
6
- route_story: Problem 848 is already asymptotically resolved in public, but not yet closed here for all N. The honest job is to shrink the finite remainder with audited threshold tracking and reproducible bounded verification, beginning from the verified base interval `1..2000`.
6
+ route_story: Problem 848 is already asymptotically resolved in public, but not yet closed here for all N. The honest job is to shrink the finite remainder with audited threshold tracking and reproducible bounded verification, beginning from the verified base interval `1..10000`.
7
7
  frontier_label: finite_check_gap_closure
8
- frontier_detail: The repo now has a verified exact interval `1..2000`; the next question is whether to extend that exact scan further or change method class.
8
+ frontier_detail: The repo now has a verified exact interval `1..10000`, and an incremental verifier has made larger exact tranches practical again. The next question is whether to keep extending that exact lane or compress it into a stronger breakpoint method.
9
9
  checkpoint_focus: Preserve the distinction between existential N0, explicit N0, sample finite checks, and full closure.
10
- next_honest_move: Decide whether to extend the exact clique scan beyond `2000` or pivot to a different bounded-verification method.
10
+ next_honest_move: Decide whether to extend the exact clique scan beyond `10000` or pivot to a different bounded-verification method.
11
11
  related_core_problems:
12
12
  - "844"
13
13
  literature_focus:
@@ -27,7 +27,7 @@ artifact_focus:
27
27
  - VERIFICATION_CERTIFICATE_SPEC.md
28
28
  - EXTERNAL_VERIFICATION_LEDGER.md
29
29
  - INTERVAL_WORK_QUEUE.yaml
30
- - EXACT_SMALL_N_1_2000_CERTIFICATE.md
30
+ - EXACT_SMALL_N_1_10000_CERTIFICATE.md
31
31
  question_ledger:
32
32
  open_questions:
33
33
  - Which imported threshold value is trusted enough to size the finite remainder operationally?
@@ -44,5 +44,6 @@ question_ledger:
44
44
  - The threshold ledger separating existential and explicit claims is now frozen.
45
45
  - The repo now has an audited explicit candidate package distinct from the imported public threshold timeline.
46
46
  - The repo has now chosen bounded finite verification as the next closure lane.
47
- - The repo now has an exact verified base interval `1..2000`.
47
+ - The repo now has an exact verified base interval `1..10000`.
48
+ - The exact verifier now uses an incremental update rule rather than rebuilding every instance from scratch.
48
49
  problem_solved: []
@@ -74,7 +74,9 @@ Current public evidence captured locally:
74
74
  values to size the finite remainder without being silently promoted to canonical theorem
75
75
  truth.
76
76
  - A reproducible exact maximum-clique scan now verifies the expected extremal size for every
77
- `N` in `1..2000`, giving the bounded-verification lane its first trusted covered interval.
77
+ `N` in `1..10000`, giving the bounded-verification lane a much larger trusted covered interval.
78
+ - The exact verifier has been rebuilt incrementally, so the old post-`3000` cost wall is now
79
+ understood to have been mostly a tooling artifact rather than a serious mathematical barrier.
78
80
 
79
81
  Claim-safe local posture:
80
82
  - Exact: the public status is `decidable`, not `open` and not fully `solved`.
@@ -114,5 +116,5 @@ Next maintainer step:
114
116
  - preserve the current claim-safe package as a clean review unit
115
117
  - treat imported threshold improvements as external progress markers unless they are
116
118
  re-audited inside the repo
117
- - decide whether exact verified coverage should be extended beyond `2000` or whether the
119
+ - decide whether exact verified coverage should be extended beyond `10000` or whether the
118
120
  next gain now needs a different method class
@@ -74,8 +74,9 @@
74
74
  - a regime split for the finite remainder
75
75
  - a certificate format for bounded interval claims
76
76
  - an audit ledger for imported verification work
77
- - an exact verified base interval `1..2000`
77
+ - an exact verified base interval `1..10000`
78
+ - an incremental verifier that makes larger exact tranches practical
78
79
  - The next concrete task is to decide whether the exact clique scan should be extended
79
- directly beyond `2000` or whether the next gain now needs a different method class.
80
+ directly beyond `10000` or whether the next gain now needs a different method class.
80
81
  - The right optimization target remains the size of the remaining finite gap, not the
81
82
  threshold race in isolation.
@@ -23,7 +23,7 @@ What is ready now:
23
23
  - supporting explicit ledgers for the branch bounds and numerical witness
24
24
  - a bounded finite-verification lane with regimes, certificate requirements, and external
25
25
  audit notes
26
- - an exact verified base interval `1..2000`
26
+ - an exact verified base interval `1..10000`
27
27
 
28
28
  What is not being claimed:
29
29
  - not full all-`N` closure in the repo
@@ -1,55 +0,0 @@
1
- # Problem 848 Exact Small-`N` Certificate: `1..2000`
2
-
3
- This is the first exact bounded-verification certificate frozen in the repo for Problem `848`.
4
-
5
- ## Claim
6
-
7
- For every `N` with `1 <= N <= 2000`, the maximum size of a set `A subseteq [N]` such that
8
- `ab + 1` is never squarefree for all `a, b in A` is equal to the size of the `7 mod 25`
9
- residue class in `[N]`.
10
-
11
- This certificate only covers the interval `1..2000`.
12
-
13
- ## Method class
14
-
15
- - `exact_small_n`
16
-
17
- ## Reproduction
18
-
19
- Command used:
20
-
21
- ```bash
22
- node packs/number-theory/problems/848/compute/problem848_small_n_exact_scan.mjs \
23
- --min 1 \
24
- --max 2000 \
25
- --json-output packs/number-theory/problems/848/EXACT_SMALL_N_1_2000_RESULTS.json
26
- ```
27
-
28
- The script:
29
- - filters vertices by the loop condition `a^2 + 1` not squarefree
30
- - builds the compatibility graph where `a` and `b` are adjacent exactly when `ab + 1` is not
31
- squarefree
32
- - computes an exact maximum clique for each `N`
33
- - compares that maximum clique size against the `7 mod 25` class size
34
-
35
- ## Outcome
36
-
37
- - interval: `1..2000`
38
- - result: verified
39
- - every scanned `N` satisfied:
40
- - `max_clique_size = |{n in [N] : n equiv 7 mod 25}|`
41
-
42
- The machine-readable result packet is:
43
- - `EXACT_SMALL_N_1_2000_RESULTS.json`
44
-
45
- ## Scope warning
46
-
47
- This does **not** certify anything above `2000`.
48
- It is a base interval certificate only.
49
-
50
- ## Why this interval matters
51
-
52
- - it creates a real in-repo covered interval, not just a verification plan
53
- - it is large enough to be a meaningful finite-check foothold
54
- - it does not rely on disputed public computation
55
- - it gives the bounded-verification lane a concrete certificate format and reproduction path