erdos-problems 0.3.5 → 0.3.7
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.
- package/package.json +1 -1
- package/packs/number-theory/problems/848/ANCHOR_MINIMALITY_LEDGER.md +55 -0
- package/packs/number-theory/problems/848/ANCHOR_OBSTRUCTION_7_32_57_82.json +293 -0
- package/packs/number-theory/problems/848/ANCHOR_OBSTRUCTION_RECON.md +82 -0
- package/packs/number-theory/problems/848/ANCHOR_SUBSET_SEARCH_PREFIX10_K3_K4.json +737 -0
- package/packs/number-theory/problems/848/BOUNDED_VERIFICATION_PLAN.md +3 -2
- package/packs/number-theory/problems/848/{EXACT_SMALL_N_1_3000_CERTIFICATE.md → EXACT_SMALL_N_1_10000_CERTIFICATE.md} +17 -14
- package/packs/number-theory/problems/848/EXACT_SMALL_N_1_10000_RESULTS.json +100018 -0
- package/packs/number-theory/problems/848/FOUR_ANCHOR_LEMMA_CANDIDATE.md +101 -0
- package/packs/number-theory/problems/848/FRONTIER_NOTE.md +12 -7
- package/packs/number-theory/problems/848/INTERVAL_WORK_QUEUE.yaml +5 -5
- package/packs/number-theory/problems/848/OPS_DETAILS.yaml +25 -8
- package/packs/number-theory/problems/848/ROUTE_HISTORY.md +4 -2
- package/packs/number-theory/problems/848/VERIFICATION_CERTIFICATE_SPEC.md +3 -0
- package/packs/number-theory/problems/848/VERIFICATION_REGIMES.md +4 -4
- package/packs/number-theory/problems/848/compute/problem848_anchor_obstruction_scan.mjs +120 -0
- package/packs/number-theory/problems/848/compute/problem848_anchor_subset_search.mjs +134 -0
- package/packs/number-theory/problems/848/compute/problem848_small_n_exact_scan.mjs +62 -45
- package/packs/number-theory/problems/848/context.yaml +13 -6
- package/problems/848/EVIDENCE.md +13 -5
- package/problems/848/ROUTES.md +4 -4
- package/problems/848/SHARE_READY_SUMMARY.md +2 -1
- package/packs/number-theory/problems/848/EXACT_SMALL_N_1_3000_RESULTS.json +0 -213791
|
@@ -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)
|
|
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
|
|
41
|
-
|
|
42
|
-
|
|
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
|
|
56
|
-
|
|
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
|
|
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([],
|
|
113
|
-
return best.
|
|
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
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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
|
-
|
|
125
|
-
const
|
|
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
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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,
|
|
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, and then turn the exact packet into a short structural theorem.
|
|
7
7
|
frontier_label: finite_check_gap_closure
|
|
8
|
-
frontier_detail: The repo now has a verified exact interval `1..
|
|
8
|
+
frontier_detail: The repo now has a verified exact interval `1..10000`, a four-anchor obstruction candidate with no failures in `30..10000`, and evidence that this is the first serious theorem route. The next question is how to prove that obstruction and convert it into a breakpoint law.
|
|
9
9
|
checkpoint_focus: Preserve the distinction between existential N0, explicit N0, sample finite checks, and full closure.
|
|
10
|
-
next_honest_move:
|
|
10
|
+
next_honest_move: Promote the four-anchor obstruction from recon to a proof-shaped lemma candidate with explicit proof obligations.
|
|
11
11
|
related_core_problems:
|
|
12
12
|
- "844"
|
|
13
13
|
literature_focus:
|
|
@@ -27,22 +27,29 @@ artifact_focus:
|
|
|
27
27
|
- VERIFICATION_CERTIFICATE_SPEC.md
|
|
28
28
|
- EXTERNAL_VERIFICATION_LEDGER.md
|
|
29
29
|
- INTERVAL_WORK_QUEUE.yaml
|
|
30
|
-
-
|
|
30
|
+
- EXACT_SMALL_N_1_10000_CERTIFICATE.md
|
|
31
|
+
- ANCHOR_OBSTRUCTION_RECON.md
|
|
32
|
+
- ANCHOR_MINIMALITY_LEDGER.md
|
|
33
|
+
- FOUR_ANCHOR_LEMMA_CANDIDATE.md
|
|
31
34
|
question_ledger:
|
|
32
35
|
open_questions:
|
|
33
36
|
- Which imported threshold value is trusted enough to size the finite remainder operationally?
|
|
34
37
|
- What certificate format is strong enough to prevent repeat low-trust verification claims?
|
|
35
|
-
-
|
|
38
|
+
- Can the four-anchor obstruction be proved for all `n >= 30`?
|
|
39
|
+
- Can the four-anchor obstruction be converted into a breakpoint law for clique growth?
|
|
36
40
|
- Which public verification attempts are worth auditing rather than rebuilding from scratch?
|
|
37
41
|
active_route_notes:
|
|
38
42
|
- Keep the asymptotic theorem separate from the unresolved finite closure.
|
|
39
43
|
- Keep imported threshold claims separate from repo-owned audited claims.
|
|
40
44
|
- Prefer interval certificates to raw "checked up to X" claims.
|
|
41
45
|
- Use past public verification criticism as a design constraint, not just background chatter.
|
|
46
|
+
- Treat the exact verifier as a structure miner, not just a brute-force machine.
|
|
42
47
|
route_breakthroughs:
|
|
43
48
|
- Public asymptotic resolution by Sawhney is already in hand.
|
|
44
49
|
- The threshold ledger separating existential and explicit claims is now frozen.
|
|
45
50
|
- The repo now has an audited explicit candidate package distinct from the imported public threshold timeline.
|
|
46
51
|
- The repo has now chosen bounded finite verification as the next closure lane.
|
|
47
|
-
- The repo now has an exact verified base interval `1..
|
|
52
|
+
- The repo now has an exact verified base interval `1..10000`.
|
|
53
|
+
- The exact verifier now uses an incremental update rule rather than rebuilding every instance from scratch.
|
|
54
|
+
- The repo now has a four-anchor obstruction candidate with no failures in `30..10000`.
|
|
48
55
|
problem_solved: []
|
package/problems/848/EVIDENCE.md
CHANGED
|
@@ -74,9 +74,16 @@ 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..
|
|
78
|
-
-
|
|
79
|
-
|
|
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.
|
|
80
|
+
- The exact packet now exposes a structural clue: every maximum witness through `10000` is the
|
|
81
|
+
pure `7 mod 25` class, the clique size only jumps when `N equiv 7 (mod 25)`, and the fixed
|
|
82
|
+
anchor set `{7, 32, 57, 82}` obstructs every outsider `n >= 30` found so far.
|
|
83
|
+
- A small-anchor search over the first ten `7 mod 25` values suggests that the four-anchor set
|
|
84
|
+
`{7, 32, 57, 82}` is unusually strong: no tested three-anchor set gets a comparable startup
|
|
85
|
+
threshold, while this four-anchor set already covers everything from `30` onward in the
|
|
86
|
+
current scan window.
|
|
80
87
|
|
|
81
88
|
Claim-safe local posture:
|
|
82
89
|
- Exact: the public status is `decidable`, not `open` and not fully `solved`.
|
|
@@ -116,5 +123,6 @@ Next maintainer step:
|
|
|
116
123
|
- preserve the current claim-safe package as a clean review unit
|
|
117
124
|
- treat imported threshold improvements as external progress markers unless they are
|
|
118
125
|
re-audited inside the repo
|
|
119
|
-
-
|
|
120
|
-
|
|
126
|
+
- turn the four-anchor obstruction into a proof-shaped lemma candidate with explicit proof
|
|
127
|
+
obligations
|
|
128
|
+
- use that lemma candidate to attack the breakpoint law suggested by the exact packet
|
package/problems/848/ROUTES.md
CHANGED
|
@@ -74,9 +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..
|
|
78
|
-
-
|
|
79
|
-
|
|
80
|
-
|
|
77
|
+
- an exact verified base interval `1..10000`
|
|
78
|
+
- an incremental verifier that makes larger exact tranches practical
|
|
79
|
+
- The next concrete task is to turn the four-anchor obstruction clue into a proof-shaped
|
|
80
|
+
lemma candidate and then use it to attack the breakpoint law.
|
|
81
81
|
- The right optimization target remains the size of the remaining finite gap, not the
|
|
82
82
|
threshold race in isolation.
|
|
@@ -23,7 +23,8 @@ 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..
|
|
26
|
+
- an exact verified base interval `1..10000`
|
|
27
|
+
- a four-anchor obstruction candidate and minimality ledger for the first theorem-style route
|
|
27
28
|
|
|
28
29
|
What is not being claimed:
|
|
29
30
|
- not full all-`N` closure in the repo
|