erdos-problems 0.3.2 → 0.3.4
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/BOUNDED_VERIFICATION_PLAN.md +46 -0
- package/packs/number-theory/problems/848/BRANCH_COMPARISON_LEDGER.md +85 -0
- package/packs/number-theory/problems/848/CERTIFIED_NUMERICAL_LEDGER.md +88 -0
- package/packs/number-theory/problems/848/EXACT_SMALL_N_1_2000_CERTIFICATE.md +55 -0
- package/packs/number-theory/problems/848/EXACT_SMALL_N_1_2000_RESULTS.json +102531 -0
- package/packs/number-theory/problems/848/EXTERNAL_VERIFICATION_LEDGER.md +56 -0
- package/packs/number-theory/problems/848/EXTRACTION_CHECKLIST.md +31 -4
- package/packs/number-theory/problems/848/FRONTIER_NOTE.md +39 -8
- package/packs/number-theory/problems/848/INTERVAL_WORK_QUEUE.yaml +43 -0
- package/packs/number-theory/problems/848/LEMMA21_EXPLICIT_BOUND.md +200 -0
- package/packs/number-theory/problems/848/LEMMA21_TRUNCATION_SCAN.md +111 -0
- package/packs/number-theory/problems/848/LEMMA22_EXPLICIT_BOUND.md +133 -0
- package/packs/number-theory/problems/848/LEMMA22_PRIME_COUNT_BOUND.md +58 -0
- package/packs/number-theory/problems/848/OPERATIONAL_THRESHOLD_POSTURE.md +38 -0
- package/packs/number-theory/problems/848/OPS_DETAILS.yaml +140 -9
- package/packs/number-theory/problems/848/PROOF_OBLIGATIONS.md +101 -0
- package/packs/number-theory/problems/848/PROPOSITION_EXPLICIT_CANDIDATE.md +69 -0
- package/packs/number-theory/problems/848/ROUTE_HISTORY.md +19 -2
- package/packs/number-theory/problems/848/ROUTE_PACKET.yaml +7 -4
- package/packs/number-theory/problems/848/THEOREM_STYLE_EXPLICIT_NOTE.md +91 -0
- package/packs/number-theory/problems/848/VERIFICATION_CERTIFICATE_SPEC.md +60 -0
- package/packs/number-theory/problems/848/VERIFICATION_REGIMES.md +89 -0
- package/packs/number-theory/problems/848/WEAKEST_BRANCH_T250_ASSEMBLY.md +109 -0
- package/packs/number-theory/problems/848/WEAKEST_BRANCH_T250_BUDGET.md +107 -0
- package/packs/number-theory/problems/848/compute/problem848_small_n_exact_scan.mjs +170 -0
- package/packs/number-theory/problems/848/context.yaml +22 -15
- package/problems/848/CHECKPOINT_NOTES.md +4 -0
- package/problems/848/EVIDENCE.md +78 -4
- package/problems/848/EXPLICIT_CANDIDATE_REVIEW.md +57 -0
- package/problems/848/REFERENCES.md +4 -0
- package/problems/848/ROUTES.md +30 -8
- package/problems/848/SHARE_READY_SUMMARY.md +37 -0
- package/problems/848/STATEMENT.md +9 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Problem 848 Verification Regimes
|
|
2
|
+
|
|
3
|
+
This file partitions the finite remainder into regimes so the repo can track progress
|
|
4
|
+
without pretending that one method fits the whole gap.
|
|
5
|
+
|
|
6
|
+
## Trusted public asymptotic handoff
|
|
7
|
+
|
|
8
|
+
- public theorem: Sawhney proves the statement for all sufficiently large `N`
|
|
9
|
+
- imported explicit threshold timeline:
|
|
10
|
+
- `7 x 10^17` on 2026-03-21
|
|
11
|
+
- `3.3 x 10^17` on 2026-03-22
|
|
12
|
+
- `2.64 x 10^17` on 2026-03-23
|
|
13
|
+
- current repo posture:
|
|
14
|
+
- these thresholds are imported public claims
|
|
15
|
+
- they size the finite remainder operationally
|
|
16
|
+
- they are not yet promoted to canonical repo-owned theorem statements
|
|
17
|
+
|
|
18
|
+
## Verification regime split
|
|
19
|
+
|
|
20
|
+
### Regime A: exact small-`N` coverage
|
|
21
|
+
|
|
22
|
+
Goal:
|
|
23
|
+
- cover a small base interval by exact methods that can be rerun and independently checked
|
|
24
|
+
|
|
25
|
+
Candidate methods:
|
|
26
|
+
- direct search
|
|
27
|
+
- pair-exchange lemmas
|
|
28
|
+
- exact residue-structure enumeration
|
|
29
|
+
- very small witness-prime case splits
|
|
30
|
+
|
|
31
|
+
Desired certificate:
|
|
32
|
+
- exact witness/counterexample status for each `N`
|
|
33
|
+
- reproducible script or proof note
|
|
34
|
+
|
|
35
|
+
### Regime B: structured breakpoint verification
|
|
36
|
+
|
|
37
|
+
Goal:
|
|
38
|
+
- cover a medium interval by checking a monotone or breakpoint-sufficient inequality rather
|
|
39
|
+
than every raw instance independently
|
|
40
|
+
|
|
41
|
+
Candidate methods:
|
|
42
|
+
- structural breakpoint tables
|
|
43
|
+
- clique/exchange inequalities
|
|
44
|
+
- monotonicity-ledger arguments
|
|
45
|
+
|
|
46
|
+
Desired certificate:
|
|
47
|
+
- exact breakpoint set definition
|
|
48
|
+
- proof that breakpoint coverage implies interval coverage
|
|
49
|
+
- machine-readable result table
|
|
50
|
+
|
|
51
|
+
### Regime C: audited imported computation
|
|
52
|
+
|
|
53
|
+
Goal:
|
|
54
|
+
- record public computational claims without treating them as canonical until the repo has an
|
|
55
|
+
audit story
|
|
56
|
+
|
|
57
|
+
Candidate inputs:
|
|
58
|
+
- public repos
|
|
59
|
+
- public verification notes
|
|
60
|
+
- independently rerun scripts
|
|
61
|
+
|
|
62
|
+
Desired certificate:
|
|
63
|
+
- imported source URL
|
|
64
|
+
- exact claimed interval
|
|
65
|
+
- audit outcome: accepted, external-only, or blocked
|
|
66
|
+
|
|
67
|
+
### Regime D: asymptotic handoff
|
|
68
|
+
|
|
69
|
+
Goal:
|
|
70
|
+
- state the point above which the public theorem takes over
|
|
71
|
+
|
|
72
|
+
Desired certificate:
|
|
73
|
+
- cited theorem source
|
|
74
|
+
- exact threshold assumption being used operationally
|
|
75
|
+
- note whether the threshold is imported-only or repo-audited
|
|
76
|
+
|
|
77
|
+
## Current honest posture
|
|
78
|
+
|
|
79
|
+
- Regime A: first exact interval `1..2000` is now frozen in the repo with a reproducible
|
|
80
|
+
maximum-clique certificate
|
|
81
|
+
- Regime B: not frozen in this repo
|
|
82
|
+
- Regime C: public attempts exist, but some were explicitly criticized on the forum as
|
|
83
|
+
difficult to verify or likely incorrect
|
|
84
|
+
- Regime D: public asymptotic theorem exists; imported explicit thresholds are tracked but not
|
|
85
|
+
yet repo-audited
|
|
86
|
+
|
|
87
|
+
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
|
|
89
|
+
switching method class.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Problem 848 Weakest Branch Assembly at `T = 250`
|
|
2
|
+
|
|
3
|
+
This note closes `N848.G1.A7`.
|
|
4
|
+
|
|
5
|
+
Goal:
|
|
6
|
+
- turn the `T = 250` weakest-branch witness budget into a line-by-line branch ledger
|
|
7
|
+
- freeze an honest working `eta` value for this branch
|
|
8
|
+
|
|
9
|
+
Scope:
|
|
10
|
+
- this is only the weakest public `0.0377` branch
|
|
11
|
+
- this is not yet a full explicit-threshold proof for Proposition 1.1
|
|
12
|
+
- the remaining repo question is whether the same witness closes the other public branches
|
|
13
|
+
|
|
14
|
+
## Branch setup
|
|
15
|
+
|
|
16
|
+
Assume:
|
|
17
|
+
- `N >= exp(1420)`
|
|
18
|
+
- `eta > 0`
|
|
19
|
+
- `|A| >= (1/25 - eta) * N`
|
|
20
|
+
- the branch with an even element `b in A* = A \\ (A7 union A18)` is active
|
|
21
|
+
- truncation witness `T = 250`
|
|
22
|
+
|
|
23
|
+
## Line-by-line upper bound ledger
|
|
24
|
+
|
|
25
|
+
### 1. `A*` main term
|
|
26
|
+
|
|
27
|
+
From `WEAKEST_CASE_BUDGET.md`:
|
|
28
|
+
- `A* / N <= 0.0251587645... + remainder`
|
|
29
|
+
|
|
30
|
+
### 2. `A*` explicit remainder
|
|
31
|
+
|
|
32
|
+
From `LEMMA21_TRUNCATION_SCAN.md`:
|
|
33
|
+
- `A*` tail density at `T = 250`: about `0.0005641453`
|
|
34
|
+
- `A*` discrete term: `23 * (3^23 - 1) / N`
|
|
35
|
+
|
|
36
|
+
At `N >= exp(1420)`, the discrete term is astronomically small and far below the visible
|
|
37
|
+
decimal budget.
|
|
38
|
+
|
|
39
|
+
### 3. `A7 union A18` main term
|
|
40
|
+
|
|
41
|
+
From `WEAKEST_CASE_BUDGET.md`:
|
|
42
|
+
- `(A7 union A18) / N <= 0.0124525434... + remainder`
|
|
43
|
+
|
|
44
|
+
### 4. `A7 union A18` explicit remainder
|
|
45
|
+
|
|
46
|
+
From `LEMMA22_EXPLICIT_BOUND.md` and `LEMMA22_PRIME_COUNT_BOUND.md`:
|
|
47
|
+
- Lemma 2.2 `N / p^2` tail density at `T = 250`: about `0.0000491054`
|
|
48
|
+
- Lemma 2.2 prime-count term at `N >= exp(1420)`: at most `0.0014095427`
|
|
49
|
+
- Lemma 2.2 discrete term: `2 * (2^51 - 1) / N`
|
|
50
|
+
|
|
51
|
+
Again, the discrete term is astronomically small at `N >= exp(1420)`.
|
|
52
|
+
|
|
53
|
+
## Combined explicit branch bound
|
|
54
|
+
|
|
55
|
+
Collecting the frozen decimal contributions gives
|
|
56
|
+
|
|
57
|
+
- branch main term: `0.0376113079`
|
|
58
|
+
- `A*` tail: `0.0005641453`
|
|
59
|
+
- Lemma 2.2 tail: `0.0000491054`
|
|
60
|
+
- Lemma 2.2 prime-count term: `0.0014095427`
|
|
61
|
+
|
|
62
|
+
So the visible explicit branch bound is
|
|
63
|
+
|
|
64
|
+
- `0.0376113079 + 0.0005641453 + 0.0000491054 + 0.0014095427`
|
|
65
|
+
- `= 0.0396341013` up to rounding in the displayed decimals
|
|
66
|
+
|
|
67
|
+
This leaves visible room to `1/25 = 0.04` of about
|
|
68
|
+
|
|
69
|
+
- `0.04 - 0.0396341013 = 0.0003658987`.
|
|
70
|
+
|
|
71
|
+
## Working `eta` choice
|
|
72
|
+
|
|
73
|
+
The branch contradiction only needs a positive margin after paying for `eta`.
|
|
74
|
+
|
|
75
|
+
A conservative working choice is
|
|
76
|
+
|
|
77
|
+
- `eta_work = 0.0001`.
|
|
78
|
+
|
|
79
|
+
Then the remaining visible reserve is still about
|
|
80
|
+
|
|
81
|
+
- `0.0003658987 - 0.0001 = 0.0002658987`.
|
|
82
|
+
|
|
83
|
+
So with this working choice, the branch still retains about `2.66e-4` of visible room for
|
|
84
|
+
the tiny discrete terms and any final rounding/bookkeeping losses.
|
|
85
|
+
|
|
86
|
+
## Honest branch conclusion
|
|
87
|
+
|
|
88
|
+
At the witness scale
|
|
89
|
+
- `N >= exp(1420)`,
|
|
90
|
+
- `T = 250`,
|
|
91
|
+
- `eta = 10^-4`,
|
|
92
|
+
|
|
93
|
+
the weakest public branch now appears explicitly contradictory.
|
|
94
|
+
|
|
95
|
+
What this does **not** yet prove:
|
|
96
|
+
- that `exp(1420)` is a fully verified threshold for the whole proposition
|
|
97
|
+
- that the stronger public candidate thresholds are unnecessary
|
|
98
|
+
- that every other public branch has already been checked with the same explicit witness
|
|
99
|
+
|
|
100
|
+
What it **does** prove for the repo route:
|
|
101
|
+
- the weakest public branch is no longer the blocker
|
|
102
|
+
- the repo now has a concrete explicit branch witness with positive visible reserve
|
|
103
|
+
|
|
104
|
+
## Next route consequence
|
|
105
|
+
|
|
106
|
+
The next honest move is:
|
|
107
|
+
- carry the same witness philosophy into the other public proof branches
|
|
108
|
+
- check whether `T = 250`, `N >= exp(1420)`, and `eta = 10^-4` also close them
|
|
109
|
+
- if one branch needs a different witness, record that precisely instead of forcing uniformity
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Problem 848 Weakest Branch Budget at `T = 250`
|
|
2
|
+
|
|
3
|
+
This note closes `N848.G1.A6` at a witness-budget level.
|
|
4
|
+
|
|
5
|
+
Goal:
|
|
6
|
+
- test whether the weakest public `0.0377` branch is still blocked once both Lemma 2.1 and
|
|
7
|
+
Lemma 2.2 use a larger witness truncation parameter
|
|
8
|
+
|
|
9
|
+
Witness choice:
|
|
10
|
+
- `T = 250`
|
|
11
|
+
|
|
12
|
+
Reason for this choice:
|
|
13
|
+
- it is large enough to shrink the live `A*` tail materially
|
|
14
|
+
- it is still tiny compared with the public candidate scales `exp(1420)` and `exp(1958)`
|
|
15
|
+
- the discrete inclusion-exclusion terms remain negligible at those scales
|
|
16
|
+
|
|
17
|
+
## Frozen main-term branch data
|
|
18
|
+
|
|
19
|
+
From `WEAKEST_CASE_BUDGET.md`:
|
|
20
|
+
- `A*` main term: about `0.0251587645`
|
|
21
|
+
- `A7 union A18` main term: about `0.0124525434`
|
|
22
|
+
- combined weakest-branch main term: about `0.0376113079`
|
|
23
|
+
- branch slack to `1/25 = 0.04`: about `0.0023886921`
|
|
24
|
+
|
|
25
|
+
## Explicit remainder ledger at `T = 250`
|
|
26
|
+
|
|
27
|
+
### 1. `A*` via Lemma 2.1
|
|
28
|
+
|
|
29
|
+
From `LEMMA21_TRUNCATION_SCAN.md`:
|
|
30
|
+
- `A*` tail density at `T = 250`: about `0.0005641453`
|
|
31
|
+
- `A*` discrete term: `23 * (3^23 - 1) / N`
|
|
32
|
+
|
|
33
|
+
At `N = exp(1420)`:
|
|
34
|
+
- the `A*` discrete density is below about `exp(-1392)`
|
|
35
|
+
|
|
36
|
+
### 2. `A7 union A18` via Lemma 2.2
|
|
37
|
+
|
|
38
|
+
From `LEMMA22_EXPLICIT_BOUND.md`:
|
|
39
|
+
- Lemma 2.2 tail density at `T = 250`: about `0.0000491054`
|
|
40
|
+
- worst-case Lemma 2.2 discrete term: `2 * (2^51 - 1) / N`
|
|
41
|
+
- prime-count term from `LEMMA22_PRIME_COUNT_BOUND.md`: at most `0.0014095427` for
|
|
42
|
+
every `N >= exp(1420)`
|
|
43
|
+
|
|
44
|
+
At `N = exp(1420)`:
|
|
45
|
+
- the Lemma 2.2 discrete density is below about `exp(-1384)`
|
|
46
|
+
|
|
47
|
+
### 3. Combined explicit remainder
|
|
48
|
+
|
|
49
|
+
Adding the two live tail terms gives
|
|
50
|
+
|
|
51
|
+
- combined tail density about `0.0006132507`
|
|
52
|
+
|
|
53
|
+
and the combined discrete terms are still negligible at the public candidate scales.
|
|
54
|
+
|
|
55
|
+
What is still missing:
|
|
56
|
+
- no further lemma-level tail term; the remaining work is branch assembly and `eta`
|
|
57
|
+
|
|
58
|
+
## Combined weakest-branch budget
|
|
59
|
+
|
|
60
|
+
Main term plus the live explicit tails:
|
|
61
|
+
|
|
62
|
+
- `0.0376113079 + 0.0006132507 = 0.0382245586`
|
|
63
|
+
|
|
64
|
+
So the remaining room to `0.04` is still about
|
|
65
|
+
|
|
66
|
+
- `0.0017754414`
|
|
67
|
+
|
|
68
|
+
before the final branch bookkeeping.
|
|
69
|
+
|
|
70
|
+
After inserting the explicit Lemma 2.2 prime-count bound at `N >= exp(1420)`,
|
|
71
|
+
|
|
72
|
+
- `0.0017754414 - 0.0014095427 ~= 0.0003658987`
|
|
73
|
+
|
|
74
|
+
So the currently visible room for
|
|
75
|
+
- the final `eta` choice
|
|
76
|
+
- and any remaining line-by-line bookkeeping losses
|
|
77
|
+
|
|
78
|
+
is about `3.66e-4`.
|
|
79
|
+
|
|
80
|
+
## Honest reading
|
|
81
|
+
|
|
82
|
+
This does **not** yet prove an explicit threshold.
|
|
83
|
+
|
|
84
|
+
What it **does** show is:
|
|
85
|
+
- once `T` is allowed to move, the weakest branch no longer looks blocked by the two lemma
|
|
86
|
+
`N / p^2` tails themselves
|
|
87
|
+
- the discrete inclusion-exclusion losses are no longer the issue
|
|
88
|
+
- the Lemma 2.2 prime-count term also fits inside the branch budget at the public candidate
|
|
89
|
+
threshold scale
|
|
90
|
+
- the route now has a concrete surviving witness margin of about `3.66e-4` for final
|
|
91
|
+
`eta` and bookkeeping losses
|
|
92
|
+
|
|
93
|
+
So the live unresolved work is narrower than before:
|
|
94
|
+
- write the line-by-line full branch assembly with the larger `T`
|
|
95
|
+
- record the exact `eta` room that survives that assembly
|
|
96
|
+
- then turn that into a genuine explicit-threshold witness candidate
|
|
97
|
+
|
|
98
|
+
## Route consequence
|
|
99
|
+
|
|
100
|
+
This means the current proof skeleton now looks plausibly explicitizable in the weakest
|
|
101
|
+
branch at the witness scale `N >= exp(1420)`, provided the remaining line-by-line assembly
|
|
102
|
+
does not consume more than about `3.66e-4` of density.
|
|
103
|
+
|
|
104
|
+
That is a materially stronger posture than the one the repo started with:
|
|
105
|
+
- the route is no longer waiting on a mystery bottleneck
|
|
106
|
+
- it has a concrete witness truncation value
|
|
107
|
+
- and it has a concrete surviving witness margin after all currently frozen lemma-level costs
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
|
|
6
|
+
function parseArgs(argv) {
|
|
7
|
+
const args = { min: 1, max: 100, jsonOutput: null };
|
|
8
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
9
|
+
const token = argv[i];
|
|
10
|
+
if (token === '--min') {
|
|
11
|
+
args.min = Number(argv[++i]);
|
|
12
|
+
} else if (token === '--max') {
|
|
13
|
+
args.max = Number(argv[++i]);
|
|
14
|
+
} else if (token === '--json-output') {
|
|
15
|
+
args.jsonOutput = argv[++i];
|
|
16
|
+
} else {
|
|
17
|
+
throw new Error(`Unknown argument: ${token}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
if (!Number.isInteger(args.min) || args.min < 1) {
|
|
21
|
+
throw new Error('--min must be a positive integer');
|
|
22
|
+
}
|
|
23
|
+
if (!Number.isInteger(args.max) || args.max < args.min) {
|
|
24
|
+
throw new Error('--max must be an integer >= --min');
|
|
25
|
+
}
|
|
26
|
+
return args;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function isSquarefree(n) {
|
|
30
|
+
let x = n;
|
|
31
|
+
for (let p = 2; p * p <= x; p += 1) {
|
|
32
|
+
if (x % p !== 0) continue;
|
|
33
|
+
x /= p;
|
|
34
|
+
if (x % p === 0) return false;
|
|
35
|
+
while (x % p === 0) x /= p;
|
|
36
|
+
}
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
|
|
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]);
|
|
53
|
+
}
|
|
54
|
+
|
|
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 };
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function maximumClique(vertices, adjacency) {
|
|
75
|
+
let best = [];
|
|
76
|
+
|
|
77
|
+
function bronKerbosch(R, P, X) {
|
|
78
|
+
if (P.length === 0 && X.length === 0) {
|
|
79
|
+
if (R.length > best.length) best = [...R];
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (R.length + P.length <= best.length) return;
|
|
83
|
+
|
|
84
|
+
let pivot = null;
|
|
85
|
+
let pivotNeighborsInP = -1;
|
|
86
|
+
for (const u of [...P, ...X]) {
|
|
87
|
+
let count = 0;
|
|
88
|
+
for (const v of P) {
|
|
89
|
+
if (adjacency[u].has(v)) count += 1;
|
|
90
|
+
}
|
|
91
|
+
if (count > pivotNeighborsInP) {
|
|
92
|
+
pivotNeighborsInP = count;
|
|
93
|
+
pivot = u;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const candidates = pivot === null
|
|
98
|
+
? [...P]
|
|
99
|
+
: P.filter((v) => !adjacency[pivot].has(v));
|
|
100
|
+
|
|
101
|
+
for (const v of candidates) {
|
|
102
|
+
bronKerbosch(
|
|
103
|
+
[...R, v],
|
|
104
|
+
P.filter((u) => adjacency[v].has(u)),
|
|
105
|
+
X.filter((u) => adjacency[v].has(u)),
|
|
106
|
+
);
|
|
107
|
+
P = P.filter((u) => u !== v);
|
|
108
|
+
X = [...X, v];
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
bronKerbosch([], vertices.map((_, index) => index), []);
|
|
113
|
+
return best.map((index) => vertices[index]).sort((a, b) => a - b);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function scanInterval(minN, maxN) {
|
|
117
|
+
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);
|
|
123
|
+
const maxSize = clique.length;
|
|
124
|
+
const residue7Size = residue7.length;
|
|
125
|
+
const residue18Size = residue18.length;
|
|
126
|
+
rows.push({
|
|
127
|
+
N,
|
|
128
|
+
maxCliqueSize: maxSize,
|
|
129
|
+
residue7Size,
|
|
130
|
+
residue18Size,
|
|
131
|
+
candidateAchievesMaximum: residue7Size === maxSize,
|
|
132
|
+
exampleMaximumClique: clique,
|
|
133
|
+
exampleMatchesResidue7: sameSortedSet(clique, residue7),
|
|
134
|
+
exampleMatchesResidue18: sameSortedSet(clique, residue18),
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
return rows;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function summarize(rows) {
|
|
141
|
+
return {
|
|
142
|
+
interval: `${rows[0].N}..${rows[rows.length - 1].N}`,
|
|
143
|
+
rows: rows.length,
|
|
144
|
+
allCandidateAchievesMaximum: rows.every((row) => row.candidateAchievesMaximum),
|
|
145
|
+
allExampleCliquesMatchCandidateClass: rows.every(
|
|
146
|
+
(row) => row.exampleMatchesResidue7 || row.exampleMatchesResidue18,
|
|
147
|
+
),
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const args = parseArgs(process.argv.slice(2));
|
|
152
|
+
const rows = scanInterval(args.min, args.max);
|
|
153
|
+
const payload = {
|
|
154
|
+
generatedAt: new Date().toISOString(),
|
|
155
|
+
method: 'exact_maximum_clique_scan',
|
|
156
|
+
problemId: '848',
|
|
157
|
+
parameters: {
|
|
158
|
+
min: args.min,
|
|
159
|
+
max: args.max,
|
|
160
|
+
},
|
|
161
|
+
summary: summarize(rows),
|
|
162
|
+
results: rows,
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
if (args.jsonOutput) {
|
|
166
|
+
fs.mkdirSync(path.dirname(args.jsonOutput), { recursive: true });
|
|
167
|
+
fs.writeFileSync(args.jsonOutput, `${JSON.stringify(payload, null, 2)}\n`);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
console.log(JSON.stringify(payload.summary, null, 2));
|
|
@@ -2,40 +2,47 @@ problem_id: "848"
|
|
|
2
2
|
family_role: finite_check_number_theory_workspace
|
|
3
3
|
harness_profile: decidable_gap_workspace
|
|
4
4
|
default_active_route: finite_check_gap_closure
|
|
5
|
-
bootstrap_focus:
|
|
6
|
-
route_story: Problem 848 is already asymptotically resolved in public, but not yet
|
|
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`.
|
|
7
7
|
frontier_label: finite_check_gap_closure
|
|
8
|
-
frontier_detail:
|
|
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.
|
|
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: Decide whether to extend the exact clique scan beyond `2000` or pivot to a different bounded-verification method.
|
|
11
11
|
related_core_problems:
|
|
12
12
|
- "844"
|
|
13
13
|
literature_focus:
|
|
14
14
|
- squarefree values
|
|
15
15
|
- sieve bounds
|
|
16
16
|
- explicit threshold extraction
|
|
17
|
+
- bounded verification
|
|
17
18
|
artifact_focus:
|
|
18
19
|
- STATEMENT.md
|
|
19
20
|
- REFERENCES.md
|
|
20
21
|
- EVIDENCE.md
|
|
21
22
|
- FORMALIZATION.md
|
|
22
23
|
- THRESHOLD_LEDGER.md
|
|
23
|
-
-
|
|
24
|
-
-
|
|
24
|
+
- OPERATIONAL_THRESHOLD_POSTURE.md
|
|
25
|
+
- BOUNDED_VERIFICATION_PLAN.md
|
|
26
|
+
- VERIFICATION_REGIMES.md
|
|
27
|
+
- VERIFICATION_CERTIFICATE_SPEC.md
|
|
28
|
+
- EXTERNAL_VERIFICATION_LEDGER.md
|
|
29
|
+
- INTERVAL_WORK_QUEUE.yaml
|
|
30
|
+
- EXACT_SMALL_N_1_2000_CERTIFICATE.md
|
|
25
31
|
question_ledger:
|
|
26
32
|
open_questions:
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
- How
|
|
30
|
-
-
|
|
33
|
+
- Which imported threshold value is trusted enough to size the finite remainder operationally?
|
|
34
|
+
- What certificate format is strong enough to prevent repeat low-trust verification claims?
|
|
35
|
+
- How far can the exact clique scan be pushed before a different method class is needed?
|
|
36
|
+
- Which public verification attempts are worth auditing rather than rebuilding from scratch?
|
|
31
37
|
active_route_notes:
|
|
32
38
|
- Keep the asymptotic theorem separate from the unresolved finite closure.
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
39
|
+
- Keep imported threshold claims separate from repo-owned audited claims.
|
|
40
|
+
- Prefer interval certificates to raw "checked up to X" claims.
|
|
41
|
+
- Use past public verification criticism as a design constraint, not just background chatter.
|
|
36
42
|
route_breakthroughs:
|
|
37
43
|
- Public asymptotic resolution by Sawhney is already in hand.
|
|
38
44
|
- The threshold ledger separating existential and explicit claims is now frozen.
|
|
39
|
-
- The
|
|
40
|
-
- The
|
|
45
|
+
- The repo now has an audited explicit candidate package distinct from the imported public threshold timeline.
|
|
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`.
|
|
41
48
|
problem_solved: []
|
|
@@ -13,7 +13,11 @@ Checkpoint prompts:
|
|
|
13
13
|
- What route, evidence, and formalization notes should be promoted out of scratch space into canonical dossier files?
|
|
14
14
|
- Did we improve the explicit threshold side, the finite-computation side, or only our
|
|
15
15
|
understanding of the gap between them?
|
|
16
|
+
- Are we optimizing the right thing right now: a smaller imported `N0`, or a smaller
|
|
17
|
+
remaining finite range to verify?
|
|
16
18
|
- Is any new `N0` claim actually checked line-by-line against Sawhney's note, or is it still
|
|
17
19
|
forum-level heuristic discussion?
|
|
20
|
+
- Have we cleanly separated the best imported threshold claim from the repo's own audited
|
|
21
|
+
explicit candidate?
|
|
18
22
|
- What exactly does the current public Lean development certify, and what does it still leave
|
|
19
23
|
open?
|
package/problems/848/EVIDENCE.md
CHANGED
|
@@ -21,24 +21,98 @@ Current public evidence captured locally:
|
|
|
21
21
|
arXiv reference for the sufficiently-large-`N` result.
|
|
22
22
|
- Sawhney's public four-page note proves the existence of an `N0`, but does not give an
|
|
23
23
|
explicit threshold in the statement of Proposition 1.1.
|
|
24
|
-
- The public forum discussion
|
|
25
|
-
|
|
26
|
-
`
|
|
24
|
+
- The public forum discussion records an explicit-threshold timeline:
|
|
25
|
+
- `N0 = 7 x 10^17` on 2026-03-21
|
|
26
|
+
- `N0 = 3.3 x 10^17` on 2026-03-22
|
|
27
|
+
- `N0 = 2.64 x 10^17` on 2026-03-23
|
|
28
|
+
- The same thread also records earlier larger threshold exploration, including
|
|
29
|
+
`exp(1958)`-scale discussion and `exp(1420)` as a plausible intermediate explicit route
|
|
30
|
+
rather than a final clean resolution.
|
|
27
31
|
- The same thread suggests the real technical bottleneck is improving the error terms in
|
|
28
32
|
Lemma 2.1 and especially Lemma 2.2 enough to make the explicit threshold and the finite
|
|
29
33
|
range practically closable.
|
|
30
34
|
- The public Lean thread claims a formalization of the sufficiently-large-`N` theorem and
|
|
31
35
|
mentions finite verification for `N = 50` and `N = 100`, but not a full finite closure.
|
|
36
|
+
- The local number-theory pack now has a one-sided explicit Lemma 2.1 remainder ledger.
|
|
37
|
+
It shows that, at the public threshold candidates `exp(1420)` and `exp(1958)`, the
|
|
38
|
+
small-prime inclusion-exclusion remainder is negligible while the large-prime tail still
|
|
39
|
+
exceeds the frozen weakest-branch slack.
|
|
40
|
+
- The local truncation scan also shows that the one-sided explicit route no longer needs
|
|
41
|
+
`T = floor(sqrt(log N))`; larger choices of `T` leave the discrete term negligible while
|
|
42
|
+
materially shrinking the live `A*` tail.
|
|
43
|
+
- The local weakest-branch witness budget at `T = 250` now shows that, after the explicit
|
|
44
|
+
Lemma 2.1 and Lemma 2.2 tail terms are paid, the branch still appears to retain about
|
|
45
|
+
`0.001775` slack before the Lemma 2.2 prime-count term is inserted, and about `0.000366`
|
|
46
|
+
witness margin after that term is bounded with a Dusart-style explicit prime-count estimate.
|
|
47
|
+
- The local weakest-branch assembly note now fixes a working witness
|
|
48
|
+
`T = 250`, `N >= exp(1420)`, `eta = 10^-4`, with about `0.000266` visible reserve left in
|
|
49
|
+
that branch after all currently frozen lemma-level costs.
|
|
50
|
+
- The local branch-comparison ledger now indicates that the same witness also closes the
|
|
51
|
+
public branches with rounded bounds `0.0358`, `0.0336`, and `0.0294` at the repo's current
|
|
52
|
+
explicit level.
|
|
53
|
+
- The local proposition-level candidate note now packages that shared witness as the current
|
|
54
|
+
repo candidate for an explicit stability statement, while still refusing to mark the problem
|
|
55
|
+
fully solved.
|
|
56
|
+
- The local proof-obligation ledger now identifies the next real blocker as numerical
|
|
57
|
+
certification of the displayed decimal inputs, not another branch estimate.
|
|
58
|
+
- The local certified numerical ledger now replaces the main displayed decimal inputs with
|
|
59
|
+
conservative machine-interval bounds, leaving a certified visible reserve of about
|
|
60
|
+
`0.000266` after the working `eta = 10^-4`.
|
|
61
|
+
- The local theorem-style note now assembles the current explicit candidate into a single
|
|
62
|
+
proof-shaped artifact suitable for paper-writer mode and future public review.
|
|
63
|
+
- The current candidate is now surfaced in both the paper bundle and a dossier-level public
|
|
64
|
+
review note, with a short share-ready summary.
|
|
65
|
+
- The local paper bundle now has drafted introduction, preliminaries, and related-work
|
|
66
|
+
sections, and the bundle has been refreshed so that no placeholder paper text remains.
|
|
67
|
+
- The current repo candidate is weaker than the best imported threshold value currently
|
|
68
|
+
visible on the public thread, so its main value is auditability and handoff structure,
|
|
69
|
+
not "best known `N0`" status.
|
|
70
|
+
- The repo has now chosen bounded finite verification as the next closure lane and frozen
|
|
71
|
+
first-pass notes for verification regimes, certificate requirements, and imported
|
|
72
|
+
verification audit.
|
|
73
|
+
- The repo now has an operational threshold posture note that allows imported `N0`
|
|
74
|
+
values to size the finite remainder without being silently promoted to canonical theorem
|
|
75
|
+
truth.
|
|
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.
|
|
32
78
|
|
|
33
79
|
Claim-safe local posture:
|
|
34
80
|
- Exact: the public status is `decidable`, not `open` and not fully `solved`.
|
|
35
81
|
- Exact: a formalized statement is publicly claimed by the imported atlas.
|
|
36
82
|
- Exact: the remaining public gap is not a new asymptotic theorem, but the bridge from
|
|
37
83
|
existential `N0` to an explicit or fully checked all-`N` statement.
|
|
84
|
+
- Exact: as of 2026-03-23, the best imported public-thread threshold visible in the dossier
|
|
85
|
+
is `N0 = 2.64 x 10^17`.
|
|
86
|
+
- Exact: the repo's own audited candidate is currently weaker than that imported threshold,
|
|
87
|
+
so it should not be described as the best-known public bound.
|
|
88
|
+
- Exact: the current repo explicitization of Lemma 2.1 isolates the large-prime tail as the
|
|
89
|
+
live analytic blocker in the weakest branch.
|
|
90
|
+
- Exact: within the one-sided explicit route, enlarging `T` is now justified and appears to
|
|
91
|
+
be the right next analytic move.
|
|
92
|
+
- Exact: a concrete witness value `T = 250` now survives the live tail bookkeeping in the
|
|
93
|
+
weakest branch at an explicit witness-budget level.
|
|
94
|
+
- Exact: the weakest branch now has a concrete working `eta` witness, not just a floating
|
|
95
|
+
slack budget.
|
|
96
|
+
- Exact: no other public branch currently appears to outrun that witness in the repo ledger.
|
|
97
|
+
- Exact: the repo now has a proposition-level explicit candidate, but not yet a publication-
|
|
98
|
+
ready explicit theorem artifact.
|
|
99
|
+
- Exact: the next real mathematical hardening step is numerical certification of the displayed
|
|
100
|
+
decimal inputs.
|
|
101
|
+
- Exact: the current repo candidate is now numerically hardened at the ledger level.
|
|
102
|
+
- Exact: the repo now also has a theorem-style proof artifact for the current candidate.
|
|
103
|
+
- Exact: the current candidate package is now surfaced for both paper-writing and public
|
|
104
|
+
review workflows.
|
|
105
|
+
- Exact: the paper bundle for the current candidate is now fully drafted at the section-shell
|
|
106
|
+
level and no longer depends on placeholder text in its public-facing sections.
|
|
38
107
|
- Heuristic: the lowest-friction route from here is to work both sides of the bridge:
|
|
39
108
|
sharpen the explicit threshold while separately understanding how far direct finite
|
|
40
109
|
verification can reasonably go.
|
|
41
110
|
|
|
42
111
|
Next maintainer step:
|
|
43
112
|
- keep the dossier centered on the finite-check gap rather than re-opening the asymptotic
|
|
44
|
-
theorem lane
|
|
113
|
+
theorem lane
|
|
114
|
+
- preserve the current claim-safe package as a clean review unit
|
|
115
|
+
- treat imported threshold improvements as external progress markers unless they are
|
|
116
|
+
re-audited inside the repo
|
|
117
|
+
- decide whether exact verified coverage should be extended beyond `2000` or whether the
|
|
118
|
+
next gain now needs a different method class
|