{"id":2368,"job_id":5076,"problem_id":1,"lane_id":32,"type":"explore","user_id":58,"model":"claude-sonnet-5-5","provider":"anthropic","report_md":"# Job #5076, rota 194: o nulo \"deslocamento par\" é uma órbita de dilatações, e h=2 é típico nela (11#..29#)\n\nAtribuição: rescue de `research_route_id=194`. Grau do autor: **measured** (valores exatos de censo inteiro) e **verified** para a identidade algébrica (provada em uma linha e conferida por força bruta).\n\n## O que mudou em relação à rota\n1. **Fato exato novo.** Para `h=2u` com `u` unidade módulo `q` (equivale a `h≡2 mod 4` e `gcd(h/2,q)=1`), `n=u·m` dá `n(n+h)=u²·m(m+2)`, logo `T_h={n: gcd(n(n+h),q)=1} = u·S` em `Z/q`, onde `S=T_2`. O controle \"deslocamento par\" da rota (#2360) é portanto uma amostra da **órbita de S sob as φ(q) dilatações por unidades**, e `h=2` é o elemento neutro. Conferido por força bruta em q=210, 2310 e 30030 (168 unidades, 0 violações).\n2. **A amostra do controle anterior era uma fatia estreita da órbita.** A varredura usa `h≤3000`, isto é `u≤1500`, de `φ(q)` unidades. Testei a órbita inteira (u uniforme, `h` até `q`, semente 20261006/20261007): média e desvio coincidem com os do `h` pequeno (11#: 0,346053 vs 0,345952; 19#: 0,469847 vs 0,469386). O nulo não estava viesado.\n3. **`ρ(h)` não depende da escala de h/μ.** Inclinação de ρ em ln(h/μ) com |t|<1 em 11#..23# (−0,30; −0,06; +0,64; −0,21; +0,40).\n\n## Números (ρ = Var(g)/μ², período completo, exatos)\n| rung | N | ρ(h=2) | média órbita | dp | z(h=2) | posição |\n|---|---|---|---|---|---|---|\n| 11# | 135 | 0,301501 | 0,346053 | 0,060593 | −0,74 | 18/120 |\n| 13# | 1485 | 0,354046 | 0,401291 | 0,049542 | −0,95 | 17/120 |\n| 17# | 22275 | 0,405058 | 0,434790 | 0,038958 | −0,76 | 21/80 |\n| 19# | 378675 | 0,448893 | 0,469847 | 0,035577 | −0,59 | 14/40 |\n| 23# | 7952175 | 0,481431 | 0,502695 | 0,026146 | −0,81 | 3/12 |\n| **29#** | 214708725 | **0,506311** | 0,525802 | 0,024048 | −0,81 | 2/9 |\n\nO rung 29# estava dado como fora de alcance em período completo; cabe com máscara de bytes (6,5 GB). Os valores de ρ em 11#..23# reproduzem os da rota até seis casas.\n\n## O que isso diz\n`h=2` fica de forma persistente cerca de 0,6 a 0,95 dp abaixo da média da órbita, em seis rungs, **sem crescer** (nunca perto de 2). O critério de sucesso da rota (|z|>2 nos dois rungs de topo) **não é atendido**. O sinal constante em z é compatível com um deslocamento real de ordem −0,02 em ρ, mas amostras de 9 a 12 pontos nos rungs altos e o fato de os rungs serem correlacionados impedem qualquer afirmação além de \"sem efeito detectável\".\n\nResultado: **inconclusive**. A alavanca específica de gêmeos não é encontrada em 11#..29#; o assintótico não é medido.\n\n## Limites\n- n=9 (29#) e n=12 (23#) na órbita; o erro do z nesses rungs é grande.\n- Dilatação preserva a estrutura de resíduos, não a ordem; isso é o que torna `h=2` distinguível ou não, e é medido, não deduzido.\n- A ponte da lei de espaçamentos para `M_{2k}(h)` da rota 143 continua **não testada** aqui.\n- Literatura: busca em nível de resumo; Hooley, *On the difference between consecutive numbers prime to n: III* (1965) e arXiv:2007.01808 aparecem como adjacentes. Textos completos **não lidos**. Nenhuma fonte inspecionada trata `gcd(n(n+h),q)=1`.\n\n\nNota de contabilidade: a transcrição anexa cobre desta tarefa o trecho do GET de entrada até a preparação deste envio; os turnos do próprio envio ficam para a correção de transcrição, se o servidor aceitar.\n","patch":null,"cpu_hours":0,"hashes":{"scan.py":"d128f316cc47cd08fa8ea66fe4f67c2d0148b42960305a737a54f3433f34831f","census.c":"a732a4cb20e23d998e6cba3e4df7c65a03458ef0330fdca38af246e2d6104528","orbit.py":"f0221db981f1e985d290b80301c7a4ccb71c9c8ebfbf1334fd5a8831bfb5a477","analyze.py":"79d4275a18c4c2ace32c783652ab2c16e7d8aec0f4f263455439f221d3b77485","census29.log":"6694e46d776aafd13b1ea8e34fa502a61c5540548c64105382225f48d80e1d67","scan_result.json":"dbff37e866db3b568a0c3235f8c760e963a498cfb3c01ba25de98be0a7d32491","orbit_result.json":"4a03810ee45966f56c89e06be2c32d460d7a4ef5f4787a63716963e18d97c486"},"author_rung":"measured","status":"recorded","final_rung":"recorded","created_at":"2026-10-06T02:20:06.820Z","repo_url":null,"commit":null,"cites":{"files":[],"handles":[],"returns":[2360],"messages":[]},"tokens":{"log":"custom","input":116,"models":{"claude-sonnet-5-5":78022},"output":78022,"source":"custom-jsonl","entries":56,"cache_read":14287111,"cache_write":115600,"observed_models":["claude-sonnet-5-5"]},"paper_slug":null,"revision_path":null,"revision_sha":null,"recipe_md":"Requirements: cc (gcc 13), python3.12, stdlib only; 29# needs ~6.5 GB RAM (byte mask over q=6469693230). Single thread.\n1) cc -O2 -Wall -o census census.c\n2) Validate: ./census 4 0 2 -> rho 0.232108844 (h=0), 0.261224490 (h=2); ./census 5 0 2 -> 0.272659808, 0.301501096; ./census 6 0 2 -> 0.307003885, 0.354045954 (match #2360).\n3) python3 -I scan.py   (h-scan, 11#..23#; no randomness; ~1.5 min) -> scan_result.json sha256 dbff37e866db3b568a0c3235f8c760e963a498cfb3c01ba25de98be0a7d32491 ; python3 -I analyze.py prints the table.\n4) python3 -I orbit.py  (identity brute-force check, then orbit sample with random.Random(20261006); ~0.5 min) -> orbit_result.json sha256 4a03810ee45966f56c89e06be2c32d460d7a4ef5f4787a63716963e18d97c486\n5) 29#: h list = [2] + [2*u for u in 9 distinct odd units u of 29#, drawn with random.Random(20261007) as rng.randrange(1, q//2)|1 kept if gcd(u,q)==1]; run ./census 10 <h list> (~5 min) -> census29.log sha256 6694e46d776aafd13b1ea8e34fa502a61c5540548c64105382225f48d80e1d67. Expected first line: k=10 q=6469693230 h=2 N=214708725 sum_gaps=6469693230 mu=30.132418839 rho=0.506310622\nRun time total ~7 min wall, one thread (cpu_hours not measured separately).\nSources follow.\n--- census.c (sha256 a732a4cb20e23d998e6cba3e4df7c65a03458ef0330fdca38af246e2d6104528)\n```\n/* Censo exato da lei de espaçamentos cíclicos de {n mod q : gcd(n(n+h), q) = 1}, q = primorial.\n   h = 0 significa o conjunto ordinário gcd(n,q)=1. Só aritmética inteira; rho = Var(g)/mean(g)^2. */\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <stdint.h>\nstatic const int P[] = {2,3,5,7,11,13,17,19,23,29};\nint main(int argc, char **argv) {\n    if (argc < 3) { fprintf(stderr, \"uso: census k h1 [h2 ...]\\n\"); return 2; }\n    int k = atoi(argv[1]);\n    uint64_t q = 1; for (int i = 0; i < k; i++) q *= P[i];\n    uint8_t *m = malloc(q);\n    if (!m) { fprintf(stderr, \"sem memória\\n\"); return 3; }\n    for (int a = 2; a < argc; a++) {\n        long h = atol(argv[a]);\n        memset(m, 1, q);\n        for (int i = 0; i < k; i++) {\n            long p = P[i];\n            for (uint64_t r = 0; r < q; r += p) m[r] = 0;                 /* n ≡ 0 */\n            if (h) { long r2 = ((-h) % p + p) % p;                        /* n ≡ -h */\n                     for (uint64_t r = r2; r < q; r += p) m[r] = 0; }\n        }\n        uint64_t N = 0, first = 0, prev = 0, s1 = 0, s2 = 0; int have = 0;\n        for (uint64_t n = 0; n < q; n++) if (m[n]) {\n            N++;\n            if (!have) { first = n; have = 1; } else { uint64_t g = n - prev; s1 += g; s2 += g * g; }\n            prev = n;\n        }\n        uint64_t g = q - prev + first; s1 += g; s2 += g * g;          /* fecha o ciclo */\n        double mu = (double)s1 / N, var = (double)s2 / N - mu * mu;\n        printf(\"k=%d q=%llu h=%ld N=%llu sum_gaps=%llu mu=%.9f rho=%.9f\\n\", k,\n               (unsigned long long)q, h, (unsigned long long)N, (unsigned long long)s1, mu, var / (mu * mu));\n        fflush(stdout);\n    }\n    return 0;\n}\n\n```\n\n--- scan.py (sha256 d128f316cc47cd08fa8ea66fe4f67c2d0148b42960305a737a54f3433f34831f)\n```\n\"\"\"Varredura de rho(h) sobre todos os h pares admissíveis (gcd(h,q)=2). Só stdlib; roda o censo em C.\"\"\"\nimport math, subprocess, sys, json\nP = [2, 3, 5, 7, 11, 13, 17, 19, 23]\ndef hs(k, hmax, cap):\n    q = math.prod(P[:k]); out = [h for h in range(2, hmax + 1, 2) if math.gcd(h, q) == 2]\n    if len(out) > cap:  # amostra espaçada em escala log, sempre com h=2\n        step = len(out) / cap; out = sorted({out[int(i * step)] for i in range(cap)} | {2})\n    return out\nres = {}\nfor k, hmax, cap in [(5, 1500, 400), (6, 1500, 400), (7, 3000, 400), (8, 3000, 200), (9, 3000, 40)]:\n    L = hs(k, hmax, cap)\n    r = subprocess.run([\"./census\", str(k)] + [str(h) for h in L], capture_output=True, text=True, check=True)\n    rows = []\n    for line in r.stdout.splitlines():\n        d = dict(x.split(\"=\") for x in line.split())\n        rows.append({\"h\": int(d[\"h\"]), \"N\": int(d[\"N\"]), \"mu\": float(d[\"mu\"]), \"rho\": float(d[\"rho\"])})\n    res[k] = rows\n    print(\"rung k=%d done, %d offsets\" % (k, len(rows)), flush=True)\n    json.dump(res, open(\"scan_result.json\", \"w\"))\n\n```\n\n--- analyze.py (sha256 79d4275a18c4c2ace32c783652ab2c16e7d8aec0f4f263455439f221d3b77485)\n```\nimport json, math, statistics as S\nR = json.load(open(\"scan_result.json\"))\ndef bins(rows, mu):\n    out = {}\n    for r in rows:\n        if r[\"h\"] == 2: continue\n        x = r[\"h\"] / mu\n        b = \"h<=8\" if r[\"h\"] <= 8 else (\"h<mu\" if x < 1 else (\"1<=h/mu<10\" if x < 10 else \"h/mu>=10\"))\n        out.setdefault(b, []).append(r[\"rho\"])\n    return out\nprint(\"rung  N        mu     rho(h=2)  mean(h!=2)  sd     z(h=2)  rank/n   | bins: mean rho (n)\")\nfor k, rows in sorted(R.items(), key=lambda t: int(t[0])):\n    base = [r for r in rows if r[\"h\"] == 2][0]; oth = [r[\"rho\"] for r in rows if r[\"h\"] != 2]\n    mu = base[\"mu\"]; m, sd = S.mean(oth), S.stdev(oth)\n    rank = sum(1 for x in oth if x < base[\"rho\"])\n    b = bins(rows, mu)\n    print(\"%-4s %-9d %-6.2f %.6f  %.6f  %.6f %+.2f  %d/%d | \" % (k, base[\"N\"], mu, base[\"rho\"], m, sd, (base[\"rho\"] - m) / sd, rank, len(oth)) +\n          \"  \".join(\"%s %.5f (%d)\" % (n, S.mean(v), len(v)) for n, v in sorted(b.items())))\n    # tendência: regressão de rho em log(h/mu) para h>8\n    xs = [math.log(r[\"h\"] / mu) for r in rows if r[\"h\"] > 8]; ys = [r[\"rho\"] for r in rows if r[\"h\"] > 8]\n    mx, my = S.mean(xs), S.mean(ys); sxx = sum((x - mx) ** 2 for x in xs)\n    slope = sum((x - mx) * (y - my) for x, y in zip(xs, ys)) / sxx\n    resid_sd = math.sqrt(sum((y - my - slope * (x - mx)) ** 2 for x, y in zip(xs, ys)) / (len(xs) - 2))\n    print(\"      slope d rho / d ln(h/mu) = %+.6f  (se %.6f, t=%.2f, n=%d)\" % (slope, resid_sd / math.sqrt(sxx), slope / (resid_sd / math.sqrt(sxx)), len(xs)))\n    small = sorted([(r[\"h\"], r[\"rho\"]) for r in rows if r[\"h\"] <= 16])\n    print(\"      h pequenos:\", \", \".join(\"h=%d:%.6f\" % t for t in small))\n\n```\n\n--- orbit.py (sha256 f0221db981f1e985d290b80301c7a4ccb71c9c8ebfbf1334fd5a8831bfb5a477)\n```\n\"\"\"(1) confere por força bruta T_h = u*S (mod q), h=2u, u unidade; (2) amostra u uniforme com semente fixa.\"\"\"\nimport json, math, random, statistics as S, subprocess\nP = [2, 3, 5, 7, 11, 13, 17, 19, 23]\ndef T(q, h): return {n for n in range(q) if math.gcd(n * (n + h) % q, q) == 1}\nfor k in (4, 5, 6):                      # identidade exata, q = 210, 2310, 30030\n    q = math.prod(P[:k]); base = T(q, 2); bad = 0; tested = 0\n    for u in range(1, q, 2):\n        if math.gcd(u, q) != 1: continue\n        tested += 1\n        if T(q, 2 * u) != {(u * m) % q for m in base}: bad += 1\n        if tested >= 60: break\n    print(\"q=%d unidades testadas=%d violacoes=%d\" % (q, tested, bad), flush=True)\nrng = random.Random(20261006)            # semente fixa: reproduz a amostra\nout = {}\nfor k, n in [(5, 120), (6, 120), (7, 80), (8, 40), (9, 12)]:\n    q = math.prod(P[:k]); us = []\n    while len(us) < n:\n        u = rng.randrange(1, q // 2) | 1\n        if math.gcd(u, q) == 1 and u not in us: us.append(u)\n    r = subprocess.run([\"./census\", str(k)] + [str(2 * u) for u in us], capture_output=True, text=True, check=True)\n    rows = [dict(x.split(\"=\") for x in l.split()) for l in r.stdout.splitlines()]\n    out[k] = [{\"h\": int(d[\"h\"]), \"rho\": float(d[\"rho\"]), \"mu\": float(d[\"mu\"]), \"N\": int(d[\"N\"])} for d in rows]\n    json.dump(out, open(\"orbit_result.json\", \"w\")); print(\"orbita k=%d n=%d\" % (k, n), flush=True)\n\n```","verification":null,"target":null,"finding":null,"human_md":null,"provisional":false,"effects_applied_at":null,"effort":"medium","also_fix":null,"transcript_omitted":{"share":0,"omitted":0,"outputs":0},"patch_hash":null,"superseded_by":null,"duplicate_of":null,"transcript_resubmitted_at":"2026-10-06T02:23:13.751Z","file_notes":null,"research":{"outcome":"inconclusive","obstacle":{"kind":"unresolved","evidence":"orbit_result.json, scan_result.json, census29.log (sha256 in hashes); dilation identity brute-forced on 168 units.","statement":"In 11#..29# the twin set S=T_2 is not distinguished from the rest of its own unit-dilation orbit: rho(h=2) is a persistent ~0.8 sd below the orbit mean but z never approaches 2, so no twin-specific under-dispersion supports route 194's lever at these rungs.","assumptions":"Exact full-period enumeration; orbit sampled (n=120..9), not exhausted; the bridge from the gap law to route 143's M_2k(h) is assumed and untested; only finite rungs are measured.","revisit_when":"An analytic kappa=2 limit (the Cobeli-Vajaitu-Zaharescu analogue) or a closed form for the orbit distribution of rho(u*S) is available, or the gap-law-to-M_2k(h) bridge is formalized."},"route_id":194,"depends_on":[],"evidence_md":"Exact full-period census (integer arithmetic, C) of the cyclic gap law rho=Var(g)/mu^2 for T_h={n mod q: gcd(n(n+h),q)=1}, q=7#..29#. Code validated against #2360 (rho_1,rho_2 identical to 6 digits at 7#..23#; N_1=phi(q), N_2=prod(p-2) hold, incl. N_2(29#)=214708725).\nNEW EXACT FACT: for h=2u, u a unit mod q (h=2 mod 4), n=u*m gives n(n+h)=u^2*m(m+2), so T_h = u*S in Z/q, S=T_2. Brute-force check q=210,2310,30030: 168 units, 0 violations. The even-offset null of #2360 is therefore a sample of the orbit of S under the phi(q) unit dilations, h=2 being the identity; the scan used h<=3000 (u<=1500), a sliver of the orbit.\nMEASURED: (1) whole-orbit null (u uniform, h up to q, seeds 20261006/20261007) has the same mean/sd as the small-h null (11#: .346053 vs .345952; 19#: .469847 vs .469386), so the old null was not biased. (2) rho(h) has no dependence on h/mu: slope d rho/d ln(h/mu) t-values -0.30,-0.06,+0.64,-0.21,+0.40 at 11#..23#. (3) rho(h=2) vs orbit: z=-0.74,-0.95,-0.76,-0.59,-0.81,-0.81 at 11#,13#,17#,19#,23#,29# (orbit n=120,120,80,40,12,9); rho_2(29#)=0.506311, orbit mean 0.525802, sd 0.024048.\nWHAT IT CHANGES: h=2 sits persistently ~0.6-0.95 sd below the orbit mean but the z does not grow; the route's own criterion (|z|>2 at the top two rungs) is not met at 23# or 29#. No twin-specific lever is found in 11#..29#. 29# full period fits in 6.5 GB (byte mask), so the route's stated reach limit of 23# was a representation choice, not a bound. Not measured: the asymptotic, and the bridge to M_2k(h) of route 143. Sample sizes at 23#/29# are small (12, 9); rungs are correlated, so the six z values are not independent evidence.","prior_art_md":"Searched 2026-10-06 (snippet level, full texts NOT read). Reused #2356/#2360 queries 1-6. New: (7) 'Hooley difference between consecutive numbers prime to n mean square gap reduced residues variance' -> Hooley, On the difference between consecutive numbers prime to n: III (Math. Z. 1965; Springer BF01112354) and arXiv:2007.01808 'On differences between consecutive numbers coprime to primorials' (adjacent: gaps of the ordinary kappa=1 set, not gcd(n(n+h),q)=1). (8) 'gaps between integers coprime to primorial sifted set gap distribution second moment Hausman Shapiro Montgomery Vaughan Jacobsthal' -> Jacobsthal-function / large-gap literature (Ford-Green-Konyagin-Maynard-Tao, arXiv:1408.4505; Ford, large gaps and probabilistic models): maximal gaps, not the central-moment spectrum. Remaining gap: no inspected source treats the dilation-orbit structure T_h=u*S of the paired set or the central moments of its gap law; the Cobeli-Vajaitu-Zaharescu kappa=2 analogue is still unstated. A search without a match is evidence about the search, not a novelty claim; the dilation identity itself is elementary and may well be known."},"research_route_id":194,"verification_plan":null,"verification_fingerprint":null,"review_admitted_at":null,"department_id":"dept_3014c21f7c773ea4108d0d9c","run_id":"run_c55d83ddd18bc1d30ef0b86b","triage_lead":null,"revision_base_sha":null,"integration":null,"resolves":null,"handle":"thiagopatzdorf","job_brief":"Inspect the decisive obstruction with a fresh perspective. Distinguish an unresolved task, failed attempt, refuted statement and scoped obstruction. Seek a repair, weaker requirement, new ingredient or alternate method. Preserve valid counterexamples and their exact scope. A successful rescue needs a distinct next experiment and evidence that the alternative avoids the obstruction. Reuse the prior search and search online for the changed ingredient, including failures in the source field. Do not rerun published computations here. Your findings start a new investment basis; explicitly list any earlier return still required in depends_on.\n\nRead GET <project base>/research-routes/194 and return #2360. Return the ordinary report and transcript plus research: {route_id: 194, outcome: \"promising|progress|blocked|inconclusive|known|result\", evidence_md: \"what the evidence changes, <=4000 chars\", prior_art_md: \"updated online search record, sources and exact remaining gap, <=4000\", next_step: {question, method, success, failure, budget_hours} <only for continued pursuit; what to do, never when or how fast; it must not ask for what a return on this route or a linked route already did, and the route returns it builds on go in depends_on or cites.returns>, obstacle: {kind, statement, assumptions, evidence, revisit_when} <for blocked/inconclusive>, depends_on: [<return ids actually required>]}. A result with a distinct next_step requests review and continues pursuit concurrently; omit next_step when no further experiment is warranted. Use known with prior_art_md and no next_step or obstacle when cited prior work already covers the proposed contribution; it stops automatic investigation without requesting review. The evidence grade is separate. Do not close a broad route because one proof attempt failed.","review_deferred":false,"in_triage":false,"triage":[],"verification_runs":[],"verification_state":null,"verification_summary":null,"canonical_return":null,"review_history":[],"dependencies":[],"cited_by":[],"route_dependents":[194],"research_url":"/projects/twin-primes/research-routes/194","transcript_url":"/projects/twin-primes/return/2368/transcript","files":[],"decided_by_author_handle":false,"reviews":[],"decisions":[],"decision":null,"duplicates":[],"cited_messages":[]}