From 00cb16fbe90d7a5ee357dba7e619def23681b0d6 Mon Sep 17 00:00:00 2001 From: yfc Date: Wed, 4 Nov 2026 02:57:11 +0800 Subject: [PATCH 01/12] GH-218: 4-cycle row gate for -stab-overlap (-stab-overlap-c4=N|off, default 11) Rows of the same-type stabilizer matrix that lie on more than N Tanner 4-cycles are not used as overlap constraints (every subset of the verified rows is sound). Removes the TN weight-9 rows (c4 >= 12) behind the TN_216 regression of GH-148; BB/LP/GB rows (c4 <= 4) and TN_250's weight-6 rows (c4 7, 10) stay. -stab-overlap-c4=off = GH-148's row set (main's search). Also: the native propagator's call sites test 'qubit var becoming true on a row' inline before calling ovPropagate (same propagation, fewer calls), and Solver::ovInLK (default true, no flag yet). Tests: Part G configs with the gate, Part G (c) selection check against a brute-force 4-cycle count on the tier0/TN codes, mutant 3 (miscount) caught. Co-Authored-By: Claude Opus 5.5 --- src/core/distqldpc.cc | 59 +++++++++++++++++++++++++++++- src/solver/Solver.cc | 6 ++- src/solver/Solver.h | 6 +++ tests/test_cc_engine.cc | 81 ++++++++++++++++++++++++++++++++++++++++- 4 files changed, 147 insertions(+), 5 deletions(-) diff --git a/src/core/distqldpc.cc b/src/core/distqldpc.cc index a308a959..57f7ce49 100644 --- a/src/core/distqldpc.cc +++ b/src/core/distqldpc.cc @@ -934,6 +934,16 @@ static int g_stab_overlap_enc = 3; /* -stab-overlap-enc=native|bin|seq|cla static int g_stab_overlap_mutant = 0; /* test only (no flag): 1 = limit floor(|g|/2) - 1 (cuts minimum logicals); 2 = the half's parity rows (Hpar) used as g without the GF(2) check */ static const double STAB_OVL_BIN_MAX = 126.0; /* auto: binomial up to |g| = 9 (C(9,5) = 126), counter above */ +/* GH-218: 4-cycle row gate. A verified row g is used only if it lies on at most g_stab_overlap_c4 Tanner-graph 4-cycles + * of the same-type stabilizer matrix, c4(g) = sum over the other distinct rows g' of C(|g & g'|, 2) (the 4-cycles through + * g's check node). Every subset of the verified rows is sound (each row alone keeps every minimum-weight element of F), + * so the gate changes no probe answer, only which valid constraints the probes carry. Measured in GH-218: on the + * weight-9 rows of the TN codes (c4 >= 12 on every TN code in data/matrices) the rows rarely prune and change the + * search by 0.9-1.35x in conflicts (TN_216 Z half 1.33x, the GH-148 regression), while the useful rows have few + * 4-cycles (BB / LP / GB rows c4 <= 4; TN_250's weight-6 rows c4 7 and 10 carry its whole gain, its weight-9 rows + * c4 22-24 none). -1 = no gate (every verified row, the search of GH-148). */ +static const int STAB_OVL_C4_DEFAULT = 11; +static int g_stab_overlap_c4 = STAB_OVL_C4_DEFAULT; /* -stab-overlap-c4=N|off (default 11) */ typedef std::vector > OvlRows; @@ -944,6 +954,7 @@ struct OvlInfo { int duplicates; long long clauses, auxvars; /* per probe */ int bin_rows, seq_rows, native_rows; + int c4_gated; /* GH-218: verified rows not used because they lie on more than g_stab_overlap_c4 4-cycles */ std::map weights; /* |g| -> rows */ }; @@ -971,6 +982,7 @@ static OvlRows stab_overlap_rows(const Matrix& Hpar, const Matrix& Glog, const M { info = OvlInfo(); info.candidates = info.kept = info.rejected = info.duplicates = info.bin_rows = info.seq_rows = info.native_rows = 0; + info.c4_gated = 0; info.clauses = info.auxvars = 0; OvlRows out; const int n = Hpar.cols; @@ -981,6 +993,20 @@ static OvlRows stab_overlap_rows(const Matrix& Hpar, const Matrix& Glog, const M for (int r = 0; r < Glog.rows; r++) for (int c = 0; c < n; c++) if (getm(Glog, r, c)) colG[c].push_back(r); std::vector parH((size_t)Hpar.rows, 0), parG((size_t)Glog.rows, 0); std::set > seen; + /* GH-218: distinct nonzero rows of Src and their column incidence, for the 4-cycle gate */ + std::vector > srows; + std::vector > scol; + if (g_stab_overlap_c4 >= 0) { + std::set > distinct; + for (int r = 0; r < Src.rows; r++) { + std::vector g; + for (int c = 0; c < n; c++) if (getm(Src, r, c)) g.push_back(c); + if (!g.empty() && distinct.insert(g).second) srows.push_back(g); + } + scol.assign((size_t)n, std::vector()); + for (size_t r = 0; r < srows.size(); r++) for (size_t t = 0; t < srows[r].size(); t++) scol[(size_t)srows[r][t]].push_back((int)r); + } + std::vector shared(srows.size(), 0); for (int r = 0; r < Src.rows; r++) { std::vector g; for (int c = 0; c < n; c++) if (getm(Src, r, c)) g.push_back(c); @@ -1000,6 +1026,23 @@ static OvlRows stab_overlap_rows(const Matrix& Hpar, const Matrix& Glog, const M } if (!ok) { info.rejected++; continue; } if (!seen.insert(g).second) { info.duplicates++; continue; } + if (g_stab_overlap_c4 >= 0) { /* GH-218: c4(g) = sum over the other distinct rows of C(|g & g'|, 2) */ + std::vector touched; + for (size_t t = 0; t < g.size(); t++) + for (size_t u = 0; u < scol[(size_t)g[t]].size(); u++) { + const int q = scol[(size_t)g[t]][u]; + if (shared[(size_t)q]++ == 0) touched.push_back(q); + } + long long c4 = 0; + for (size_t u = 0; u < touched.size(); u++) { + const long long o = shared[(size_t)touched[u]]; + c4 += g_stab_overlap_mutant == 3 ? o : o * (o - 1) / 2; /* mutant 3 (test only): overlaps, not pairs */ + shared[(size_t)touched[u]] = 0; + } + const long long self = (long long)g.size(); /* g itself is one of the distinct rows: remove its own term */ + c4 -= g_stab_overlap_mutant == 3 ? self : self * (self - 1) / 2; + if (c4 > g_stab_overlap_c4) { info.c4_gated++; continue; } + } const int w = (int)g.size(), k = ovl_limit(w); if (k >= w) continue; /* no constraint (cannot happen for w >= 1 with the true limit) */ info.kept++; @@ -1671,8 +1714,10 @@ static int min_distance_css_interleaved( fprintf(stderr, "warning: stab-overlap: %s half: %d of %d stabilizer rows fail H g = 0 or G g = 0 (not used)\n", hs[k].tag, oi.rejected, oi.candidates); if (verb > 0) { - printf("c stab-overlap %s: %d of %d rows used (%d rejected: H g != 0 or G g != 0; %d duplicates); |g| -> rows:", - hs[k].tag, oi.kept, oi.candidates, oi.rejected, oi.duplicates); + printf("c stab-overlap %s: %d of %d rows used (%d rejected: H g != 0 or G g != 0; %d duplicates", hs[k].tag, oi.kept, + oi.candidates, oi.rejected, oi.duplicates); + if (g_stab_overlap_c4 >= 0) printf("; %d on more than %d Tanner 4-cycles", oi.c4_gated, g_stab_overlap_c4); /* GH-218 */ + printf("); |g| -> rows:"); for (std::map::const_iterator it = oi.weights.begin(); it != oi.weights.end(); ++it) printf(" %d:%d (<= %d)", it->first, it->second, ovl_limit(it->first)); if (g_stab_overlap_enc == 3) printf("; native propagator rows %d (no clauses)%s\n", oi.native_rows, g_stab_overlap_mutant ? " [TEST MUTANT]" : ""); @@ -2477,6 +2522,14 @@ int main(int argc, char** argv) { if (!cc_parse_seconds(argv[i] + 20, &v) || v < 0 || v > 1000) die("invalid -stab-overlap-ratio (0..1000)"); g_stab_overlap_ratio = v; stab_ratio_given = true; } + else if (!strncmp(argv[i], "-stab-overlap-c4=", 17)) { /* GH-218 */ + const char* v = argv[i] + 17; + char* end = NULL; + long k = strtol(v, &end, 10); + if (!strcmp(v, "off")) g_stab_overlap_c4 = -1; + else if (*v && end && !*end && k >= 0 && k <= 1000000) g_stab_overlap_c4 = (int)k; + else die("invalid -stab-overlap-c4 (N = 0..1000000 | off)"); + } else if (!strcmp(argv[i], "-stab-overlap-enc=clauses")) g_stab_overlap_enc = 0; else if (!strcmp(argv[i], "-stab-overlap-enc=bin")) @@ -2755,6 +2808,8 @@ int main(int argc, char** argv) { printf(" probes of a half also require |x & g| <= floor(|g|/2) for same-type stabilizer rows g (verified\n"); printf(" H g = 0, G g = 0; a minimum-weight logical always satisfies it, else x + g is lighter); on: every\n"); printf(" row in every probe; auto: row g only in probes with cap >= 2 (floor(|g|/2) + 1) (-stab-overlap-ratio=X);\n"); + printf(" -stab-overlap-c4=N|off (GH-218, default 11): use only rows g on at most N Tanner 4-cycles of the\n"); + printf(" stabilizer matrix (sum over the other rows g' of C(|g & g'|, 2)); off = every verified row (GH-148's set)\n"); printf(" -stab-overlap-enc=native|clauses|bin|seq (default native: a propagator inside MaxCDCL; clauses: binomial\n"); printf(" clauses up to |g| = 9, sequential counter above; bin / seq: one of them for every row)\n"); printf(" Output (default): live c trying d / c d_lb / c d_ub, then c d / o d\n"); diff --git a/src/solver/Solver.cc b/src/solver/Solver.cc index 54446a84..e555a691 100644 --- a/src/solver/Solver.cc +++ b/src/solver/Solver.cc @@ -2067,7 +2067,7 @@ CRef Solver::propagate() NextClause:; } ws.shrink(i - j); - if (!ovRows.empty() && confl == CRef_Undef) { // GH-148 native overlap rows (inactive when empty) + if (!ovRows.empty() && confl == CRef_Undef && ovWatched(p)) { // GH-148 native overlap rows (inactive when empty) CRef oc = ovPropagate(p, false); if (oc != CRef_Undef) { confl = oc; qhead = trail.size(); } } @@ -4053,7 +4053,7 @@ CRef Solver::propagateForLK() { NextClause:; } ws.shrink(i - j); - if (!ovRows.empty() && confl == CRef_Undef && falseVar == var_Undef) { // GH-148 (inactive when empty) + if (ovInLK && !ovRows.empty() && confl == CRef_Undef && falseVar == var_Undef && ovWatched(p)) { // GH-148 (inactive when empty) CRef oc = ovPropagate(p, true); if (oc != CRef_Undef) { confl = oc; qhead = trail.size(); } else if (falseVar != var_Undef) qhead = trail.size(); @@ -7379,6 +7379,8 @@ void Solver::setOverlapRows(const std::vector >& rows, const st ovLim.push_back(lims[r] < 0 ? 0 : lims[r]); for (size_t t = 0; t < rows[r].size(); t++) ovColRows[(size_t)rows[r][t]].push_back(id); } + ovHas.assign((size_t)nQubits, 0); // GH-218: qubits on at least one row (call-site filter) + for (int q = 0; q < nQubits; q++) ovHas[(size_t)q] = !ovColRows[(size_t)q].empty(); ovCacheIdx.assign(1024, -1); } diff --git a/src/solver/Solver.h b/src/solver/Solver.h index d6a3e7e8..551d50d3 100644 --- a/src/solver/Solver.h +++ b/src/solver/Solver.h @@ -603,6 +603,12 @@ class Solver { std::unordered_set ovCrefs; // the cached crefs: on-the-fly clause reduction skips them bool ovIsClause(CRef cr) const { return !ovRows.empty() && ovCrefs.count((uint32_t)cr) > 0; } void setOverlapRows(const std::vector >& rows, const std::vector& lims, int nQubits); + // DistQLDPC GH-218: ovPropagate acts only on a qubit var becoming true that lies on a row; the call sites test this + // first (same propagation, no call per literal). ovInLK = false: the rows are not propagated inside the lookahead + // (propagateForLK); the search's own propagate() still enforces them. + std::vector ovHas; + bool ovInLK = true; + bool ovWatched(Lit p) const { return !sign(p) && (size_t)var(p) < ovHas.size() && ovHas[(size_t)var(p)]; } CRef ovClause(int r, uint32_t mask, int impliedPos); CRef ovPropagate(Lit p, bool lk); // Former function-local statics, now per instance (identical for single-instance runs). diff --git a/tests/test_cc_engine.cc b/tests/test_cc_engine.cc index 09f0ff05..76d4a4bc 100644 --- a/tests/test_cc_engine.cc +++ b/tests/test_cc_engine.cc @@ -320,7 +320,8 @@ static RunOut run_driver(const Matrix& Hx, const Matrix& Hz, const Matrix& Gx, c // GH-133 Part D: the production MaxSAT split driver (fresh solver per probe, -no-card) with -oddcap-skip off/on struct PreCfg { const char* name; double pre; uint64_t iters; bool oddcap; uint64_t seed; int dualmode; bool symbreak; int card; int mutant; int ovl; int ovl_enc; int ovl_mutant; double ovl_ratio; /* GH-148 (0 = -stab-overlap off) */ - int isd = 0; int isd_p = 2; }; // GH-146: collision mode of the pre-pass finder + int isd = 0; int isd_p = 2; // GH-146: collision mode of the pre-pass finder + int ovl_c4 = -1; }; // GH-218: -stab-overlap-c4 (-1 = no gate, the GH-148 row set) static RunOut run_maxsat(const Matrix& Hx, const Matrix& Hz, const Matrix& Gx, const Matrix& Gz, bool oddcap, const PreCfg* pc = NULL) { RunOut r; r.ok = false; r.d = -2; int fd[2]; @@ -337,6 +338,7 @@ static RunOut run_maxsat(const Matrix& Hx, const Matrix& Hz, const Matrix& Gx, c g_ub_pre = pc->pre; g_ub_pre_max_iters = pc->iters; g_seed = pc->seed; g_ub_pre_mutant = pc->mutant; g_ub_isd.isd = pc->isd; g_ub_isd.isd_p = pc->isd_p; // GH-146 (child process only) g_stab_overlap = pc->ovl != 0; g_stab_overlap_enc = pc->ovl_enc; g_stab_overlap_mutant = pc->ovl_mutant; g_stab_overlap_ratio = pc->ovl_ratio; // GH-148 + g_stab_overlap_c4 = pc->ovl_c4; // GH-218 (void)min_distance_css_interleaved(Hx, Hz, Gx, Gz, 0, fd[1], pc->card, pc->symbreak, pc->dualmode, false); } else (void)min_distance_css_interleaved(Hx, Hz, Gx, Gz, 0, fd[1], 0, true, DUALMODE_SHARE, false); @@ -1014,6 +1016,11 @@ int main(int argc, char** argv) { {"ovl-ratio1-pre-iter1-mto", 1.0, 1, true, 1, DUALMODE_SHARE, true, 3, 0, 1, 0, 0, 1.0}, {"ovl-mutant1", -1.0, 0, true, 0, DUALMODE_SHARE, true, 0, 0, 1, 0, 1}, {"ovl-mutant2", -1.0, 0, true, 0, DUALMODE_SHARE, true, 0, 0, 1, 0, 2}, + // GH-218: the 4-cycle row gate (subsets of the verified rows; answers must not change) + {"ovl-native-auto-c4-11", -1.0, 0, true, 0, DUALMODE_SHARE, true, 0, 0, 1, 3, 0, 2.0, 0, 2, 11}, + {"ovl-native-c4-0-mto", -1.0, 0, true, 1, DUALMODE_SHARE, true, 3, 0, 1, 3, 0, 0.0, 0, 2, 0}, + {"ovl-native-c4-2-pre-iter1", 1.0, 1, true, 2, DUALMODE_SKIP, true, 0, 0, 1, 3, 0, 0.0, 0, 2, 2}, + {"ovl-seq-c4-4-nosymbreak", -1.0, 0, false, 0, DUALMODE_OFF, false, 0, 0, 1, 2, 0, 0.0, 0, 2, 4}, }; for (const PreCfg& c : gcfg) { RunOut r = run_maxsat(mHx, mHz, mGx, mGz, c.oddcap, &c); @@ -1175,6 +1182,78 @@ int main(int argc, char** argv) { g_m_failed[2], g_m_runs[2], g_m_wrong[2], g_surf_mwrong[2]); if (g_codes_removing == 0 || g_m_wrong[1] == 0 || g_m_wrong[2] == 0 || g_m_wrong_nat[1] == 0) { fprintf(stderr, "CC_FAIL GH-148 mutant/coverage expectations not met\n"); fails++; } } + { // GH-218 Part G (c): the 4-cycle row gate selects exactly the verified distinct rows with c4(g) <= K, where + // c4(g) = sum over the other distinct rows g' of the same-type stabilizer matrix of C(|g & g'|, 2), recomputed + // here by brute force over row pairs. Codes: every tier0 code (both halves) and the tier2 / tier4 TN codes + // (weight-6..12 rows with 7..33 4-cycles); K = -1 (no gate), 0, 2, 7, 11, 12, 1000. Mutant 3 (test only) + // counts overlaps instead of qubit pairs and must change some selection. + static const char* stems[] = {"tier0/BB_72_12_6", "tier0/BB_90_8_10", "tier0/BB_108_8_10", "tier0/BB_144_12_12", + "tier0/GB_144_12_8", "tier0/LP_34_20_2", "tier0/LP_136_32_4", "tier0/LP_238_44_6", "tier0/TN_36_8_3", + "tier0/TN_36_8_4", "tier0/TN_54_11_4", "tier0/TN_72_14_4", "tier0/TN_72_8_8", "tier2/TN_108_2_12", + "tier2/TN_200_10_10", "tier4/TN_250_10_15"}; + static const int Ks[] = {-1, 0, 2, 7, 11, 12, 1000}; + long c_checks = 0, c_bad = 0, c_gated = 0, c_kept = 0, c_m3_diff = 0; + const int saved_c4 = g_stab_overlap_c4, saved_mut = g_stab_overlap_mutant; + for (const char* st : stems) { + const std::string base = std::string("data/matrices/") + st; + FILE* probe = fopen((base + "_Hx.txt").c_str(), "r"); + if (!probe) { fprintf(stderr, "CC_FAIL GH-218 partG (c): missing %s_Hx.txt (run from the repository root)\n", base.c_str()); fails++; continue; } + fclose(probe); + const Matrix Hx = load_matrix((base + "_Hx.txt").c_str()), Hz = load_matrix((base + "_Hz.txt").c_str()); + const Matrix Gx = load_matrix((base + "_Gx.txt").c_str()), Gz = load_matrix((base + "_Gz.txt").c_str()); + for (int half = 0; half < 2; half++) { + const Matrix& Hp = half == 0 ? Hz : Hx; const Matrix& Gl = half == 0 ? Gx : Gz; const Matrix& Sm = half == 0 ? Hx : Hz; + g_stab_overlap_mutant = 0; g_stab_overlap_c4 = -1; + OvlInfo all_info; + const OvlRows all = stab_overlap_rows(Hp, Gl, Sm, all_info); // verified distinct rows, no gate + std::vector > dist; // distinct nonzero rows of the stabilizer matrix + { + std::set > seen; + for (int r = 0; r < Sm.rows; r++) { + std::vector g; + for (int c = 0; c < Sm.cols; c++) if (getm(Sm, r, c)) g.push_back(c); + if (!g.empty() && seen.insert(g).second) dist.push_back(std::set(g.begin(), g.end())); + } + } + std::vector c4(all.size(), 0); + for (size_t i = 0; i < all.size(); i++) { + const std::set gi(all[i].begin(), all[i].end()); + for (size_t j = 0; j < dist.size(); j++) { + if (dist[j] == gi) continue; + long long o = 0; + for (int q : dist[j]) o += gi.count(q); + c4[i] += o * (o - 1) / 2; + } + } + for (int K : Ks) { + std::set > want; + for (size_t i = 0; i < all.size(); i++) if (K < 0 || c4[i] <= K) want.insert(all[i]); + g_stab_overlap_c4 = K; g_stab_overlap_mutant = 0; + OvlInfo info; + const OvlRows got = stab_overlap_rows(Hp, Gl, Sm, info); + const std::set > gotset(got.begin(), got.end()); + c_checks++; + if (gotset != want || (int)got.size() + info.c4_gated != (int)all.size()) { + c_bad++; fails++; + fprintf(stderr, "CC_FAIL GH-218 partG (c) %s half %d K=%d: %zu rows selected, want %zu (gated %d of %zu)\n", + st, half, K, got.size(), want.size(), info.c4_gated, all.size()); + } + if (K >= 0) { c_gated += info.c4_gated; c_kept += (long)got.size(); } + if (K >= 0) { // mutant 3 must select differently on some (code, half, K) + g_stab_overlap_mutant = 3; + OvlInfo mi; + const OvlRows m3 = stab_overlap_rows(Hp, Gl, Sm, mi); + if (std::set >(m3.begin(), m3.end()) != want) c_m3_diff++; + } + } + } + } + g_stab_overlap_c4 = saved_c4; g_stab_overlap_mutant = saved_mut; + printf("partG (c) GH-218 4-cycle row gate: %ld selections on %zu codes x 2 halves, %ld bad (gated %ld, kept %ld rows over K >= 0); " + "mutant 3 (overlaps counted instead of pairs) changes %ld selections\n", + c_checks, sizeof(stems) / sizeof(stems[0]), c_bad, c_gated, c_kept, c_m3_diff); + if (c_gated == 0 || c_kept == 0 || c_m3_diff == 0) { fprintf(stderr, "CC_FAIL GH-218 partG (c) coverage/mutant expectations not met\n"); fails++; } + } printf("partB: %ld CSS codes (%ld with a verified dual map, %ld with X-half orbits, %ld with dX != dZ, %ld with all-odd Hz), %ld driver runs, %ld bad, %ld RESULT -1\n", b_inst, b_dual, b_xorb, b_dxdz, b_odd, b_runs, b_bad, b_traps); printf("partD (MaxSAT split, -oddcap-skip off/on): %ld runs on %ld codes (%ld with an all-odd half), %ld bad\n", d_runs, b_inst, d_odd, d_bad); From 907e0d41a1dbd579766425342d75faa963a73020 Mon Sep 17 00:00:00 2001 From: yfc Date: Wed, 4 Nov 2026 03:04:15 +0800 Subject: [PATCH 02/12] GH-218: flag tests for -stab-overlap-c4; -v lines carry the gate count Co-Authored-By: Claude Opus 5.5 --- tests/test_cc_flags.sh | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/tests/test_cc_flags.sh b/tests/test_cc_flags.sh index aa40f0e7..30e1fd09 100755 --- a/tests/test_cc_flags.sh +++ b/tests/test_cc_flags.sh @@ -405,8 +405,8 @@ runs=$((runs + 1)); run -frontier-stats -stab-overlap=on -stab-overlap-enc=bin $ if grep -q "^c OVERLAP" <<<"$err"; then echo "FAIL (no c OVERLAP line with clause encodings)" >&2; fails=$((fails + 1)); fi accept 2 "" -engine=auto -stab-overlap=on $L $D1 # auto -> maxsat: applies accept 2 "selected cc .*ignoring -stab-overlap=on" -engine=auto -stab-overlap=on $L $C -vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates); |g| -> rows: 6:45 (<= 3); binomial rows 45, counter rows 0; per probe 675 clauses, 0 aux vars$" -v -stab-overlap=on -stab-overlap-enc=clauses $L BB_90_8_10 -vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates); |g| -> rows: 6:45 (<= 3); native propagator rows 45 (no clauses)$" -v -stab-overlap=on $L BB_90_8_10 +vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 0 on more than 11 Tanner 4-cycles); |g| -> rows: 6:45 (<= 3); binomial rows 45, counter rows 0; per probe 675 clauses, 0 aux vars$" -v -stab-overlap=on -stab-overlap-enc=clauses $L BB_90_8_10 +vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 0 on more than 11 Tanner 4-cycles); |g| -> rows: 6:45 (<= 3); native propagator rows 45 (no clauses)$" -v -stab-overlap=on $L BB_90_8_10 vgrep 10 "^c stab-overlap X: 45 of 45 rows used .* binomial rows 45, counter rows 0" -v -stab-overlap=auto -stab-overlap-enc=bin $L BB_90_8_10 vgrep 10 "^c stab-overlap Z: 45 of 45 rows used .* binomial rows 0, counter rows 45; per probe 1440 clauses, 675 aux vars$" -v -stab-overlap=on -stab-overlap-enc=seq $L BB_90_8_10 vgrep 10 "^c stab-overlap X cap 8: 45 of 45 rows active (ratio 2.00)$" -v -stab-overlap=auto $L BB_90_8_10 @@ -415,7 +415,7 @@ vgrep 10 "^c stab-overlap X cap 4: 45 of 45 rows active (ratio 0.00)$" -v -stab- runs=$((runs + 1)); run -v -stab-overlap=off $L BB_90_8_10 if grep -q "stab-overlap" <<<"$out$err"; then echo "FAIL (-stab-overlap=off must not print stab-overlap lines)" >&2; fails=$((fails + 1)); fi # default (auto since the PI's adoption decision): the same lines as -stab-overlap=auto -vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates); |g| -> rows: 6:45 (<= 3); native propagator rows 45 (no clauses)$" -v $L BB_90_8_10 +vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 0 on more than 11 Tanner 4-cycles); |g| -> rows: 6:45 (<= 3); native propagator rows 45 (no clauses)$" -v $L BB_90_8_10 vgrep 10 "^c stab-overlap X cap 8: 45 of 45 rows active (ratio 2.00)$" -v $L BB_90_8_10 vgrep 10 "^c stab-overlap X cap 4: 0 of 45 rows active (ratio 2.00)$" -v $L BB_90_8_10 runs=$((runs + 1)); run -frontier-stats $L BB_90_8_10 @@ -423,6 +423,26 @@ if [[ $rc -ne 0 ]] || ! grep -q "^c OVERLAP X cap 8: rows 45 props [0-9]* confli runs=$((runs + 1)); run -v -joint $L $M if grep -q "stab-overlap" <<<"$out$err"; then echo "FAIL (default auto is silently off with -joint: no stab-overlap lines expected)" >&2; fails=$((fails + 1)); fi +# 7g. GH-218 -stab-overlap-c4=N|off (4-cycle row gate, default 11): values, conflicts, selection, off = GH-148's row set +for f in -stab-overlap-c4= -stab-overlap-c4=x -stab-overlap-c4=-1 -stab-overlap-c4=1.5 -stab-overlap-c4=OFF -stab-overlap-c4=2000000; do + reject "invalid -stab-overlap-c4" $f $L $M +done +reject "needs -stab-overlap=on or -stab-overlap=auto" -stab-overlap=off -stab-overlap-c4=3 $L $M +reject "no effect with -engine=cc" -engine=cc -stab-overlap-c4=3 $L $C +accept 3 "" -stab-overlap-c4=0 $L $M +accept 3 "" -stab-overlap-c4=off -card-mto $L $M +accept 8 "" -stab-overlap-c4=0 $L TN_72_8_8 +accept 8 "" -stab-overlap=on -stab-overlap-c4=1000 -card-mto $L TN_72_8_8 +accept 10 "" -stab-overlap=on -stab-overlap-c4=off -stab-overlap-enc=seq $L BB_90_8_10 +vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates); |g| -> rows: 6:45 (<= 3); native propagator rows 45 (no clauses)$" -v -stab-overlap-c4=off $L BB_90_8_10 +vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 0 on more than 0 Tanner 4-cycles); |g|" -v -stab-overlap-c4=0 $L BB_90_8_10 +vgrep 8 "^c stab-overlap X: 0 of 36 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 36 on more than 11 Tanner 4-cycles); |g| -> rows:; native propagator rows 0 (no clauses)$" -v $L TN_72_8_8 +vgrep 8 "^c stab-overlap X: 36 of 36 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates); |g| -> rows: 9:36 (<= 4)" -v -stab-overlap-c4=off $L TN_72_8_8 +runs=$((runs + 1)); run -frontier-stats $L TN_72_8_8 +if [[ $rc -ne 0 ]] || grep -q "^c OVERLAP" <<<"$err"; then echo "FAIL (TN_72_8_8 default: every row gated, no c OVERLAP line expected)" >&2; fails=$((fails + 1)); fi +runs=$((runs + 1)); run -frontier-stats -stab-overlap-c4=off $L TN_72_8_8 +if [[ $rc -ne 0 ]] || ! grep -q "^c OVERLAP" <<<"$err"; then echo "FAIL (TN_72_8_8 -stab-overlap-c4=off: c OVERLAP line expected)" >&2; fails=$((fails + 1)); fi + # 8. a CC trap withdraws the bounds already sent (test mutant 2 with the GH-124 rule set traps on LP_136_32_4 after # emitting d_lb lines; with the GH-133 rules the same mutant answers wrongly instead, which this check does not need) runs=$((runs + 1)) From 98fde153b131a17f1cc19005003ee38aba3e4c85 Mon Sep 17 00:00:00 2001 From: yfc Date: Wed, 4 Nov 2026 03:15:05 +0800 Subject: [PATCH 03/12] GH-218: fix TN_72_8_8 flag check (rows active only with -stab-overlap=on at its caps) Co-Authored-By: Claude Opus 5.5 --- tests/test_cc_flags.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_cc_flags.sh b/tests/test_cc_flags.sh index 30e1fd09..22f96602 100755 --- a/tests/test_cc_flags.sh +++ b/tests/test_cc_flags.sh @@ -438,10 +438,10 @@ vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 0 on more than 0 Tanner 4-cycles); |g|" -v -stab-overlap-c4=0 $L BB_90_8_10 vgrep 8 "^c stab-overlap X: 0 of 36 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 36 on more than 11 Tanner 4-cycles); |g| -> rows:; native propagator rows 0 (no clauses)$" -v $L TN_72_8_8 vgrep 8 "^c stab-overlap X: 36 of 36 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates); |g| -> rows: 9:36 (<= 4)" -v -stab-overlap-c4=off $L TN_72_8_8 -runs=$((runs + 1)); run -frontier-stats $L TN_72_8_8 -if [[ $rc -ne 0 ]] || grep -q "^c OVERLAP" <<<"$err"; then echo "FAIL (TN_72_8_8 default: every row gated, no c OVERLAP line expected)" >&2; fails=$((fails + 1)); fi -runs=$((runs + 1)); run -frontier-stats -stab-overlap-c4=off $L TN_72_8_8 -if [[ $rc -ne 0 ]] || ! grep -q "^c OVERLAP" <<<"$err"; then echo "FAIL (TN_72_8_8 -stab-overlap-c4=off: c OVERLAP line expected)" >&2; fails=$((fails + 1)); fi +runs=$((runs + 1)); run -frontier-stats -stab-overlap=on $L TN_72_8_8 +if [[ $rc -ne 0 ]] || grep -q "^c OVERLAP" <<<"$err"; then echo "FAIL (TN_72_8_8 -stab-overlap=on: every row gated, no c OVERLAP line expected)" >&2; fails=$((fails + 1)); fi +runs=$((runs + 1)); run -frontier-stats -stab-overlap=on -stab-overlap-c4=off $L TN_72_8_8 +if [[ $rc -ne 0 ]] || ! grep -q "^c OVERLAP" <<<"$err"; then echo "FAIL (TN_72_8_8 -stab-overlap=on -stab-overlap-c4=off: c OVERLAP line expected)" >&2; fails=$((fails + 1)); fi # 8. a CC trap withdraws the bounds already sent (test mutant 2 with the GH-124 rule set traps on LP_136_32_4 after # emitting d_lb lines; with the GH-133 rules the same mutant answers wrongly instead, which this check does not need) From f5160f8710576c0b96841ab59545cf2cf76ca1a7 Mon Sep 17 00:00:00 2001 From: yfc Date: Wed, 4 Nov 2026 17:28:25 +0800 Subject: [PATCH 04/12] GH-218: per-half pilot for dense overlap rows (-stab-overlap-pilot=N, -stab-overlap-pilot-cap=P) Dense rows (more than -stab-overlap-c4 Tanner 4-cycles; every weight-9 TN row, no BB/LP/GB row) stay as in GH-148 until a half's first probe with cap >= max(P, lb) + 4. Before it, a pilot runs 'weight <= max(P, lb)?' with and without the dense rows for N seeds and keeps them iff the median conflict ratio is <= 1. Sparse rows are always used. Deterministic per seed; every row subset is sound. Tests still to be updated. Co-Authored-By: Claude Opus 5.5 --- src/core/distqldpc.cc | 137 ++++++++++++++++++++++++++++++++++++------ src/solver/Solver.cc | 2 +- src/solver/Solver.h | 4 +- 3 files changed, 121 insertions(+), 22 deletions(-) diff --git a/src/core/distqldpc.cc b/src/core/distqldpc.cc index 57f7ce49..33319859 100644 --- a/src/core/distqldpc.cc +++ b/src/core/distqldpc.cc @@ -934,16 +934,28 @@ static int g_stab_overlap_enc = 3; /* -stab-overlap-enc=native|bin|seq|cla static int g_stab_overlap_mutant = 0; /* test only (no flag): 1 = limit floor(|g|/2) - 1 (cuts minimum logicals); 2 = the half's parity rows (Hpar) used as g without the GF(2) check */ static const double STAB_OVL_BIN_MAX = 126.0; /* auto: binomial up to |g| = 9 (C(9,5) = 126), counter above */ -/* GH-218: 4-cycle row gate. A verified row g is used only if it lies on at most g_stab_overlap_c4 Tanner-graph 4-cycles - * of the same-type stabilizer matrix, c4(g) = sum over the other distinct rows g' of C(|g & g'|, 2) (the 4-cycles through - * g's check node). Every subset of the verified rows is sound (each row alone keeps every minimum-weight element of F), - * so the gate changes no probe answer, only which valid constraints the probes carry. Measured in GH-218: on the - * weight-9 rows of the TN codes (c4 >= 12 on every TN code in data/matrices) the rows rarely prune and change the - * search by 0.9-1.35x in conflicts (TN_216 Z half 1.33x, the GH-148 regression), while the useful rows have few - * 4-cycles (BB / LP / GB rows c4 <= 4; TN_250's weight-6 rows c4 7 and 10 carry its whole gain, its weight-9 rows - * c4 22-24 none). -1 = no gate (every verified row, the search of GH-148). */ +/* GH-218: per-half pilot for the rows on many Tanner 4-cycles. A verified row g is "dense" if it lies on more than + * g_stab_overlap_c4 Tanner-graph 4-cycles of the same-type stabilizer matrix, c4(g) = sum over the other distinct rows g' + * of C(|g & g'|, 2) (the 4-cycles through g's check node). Sparse rows are always used (as in GH-148). The dense rows of a + * half are used as in GH-148 until the half's first probe with cap >= P + 4, P = max(pilot cap, the half's lb); before + * that probe a pilot decides, once per half, whether they stay: the probe "weight <= P?" (first solution stops it) is + * run with and without the dense rows for g_stab_overlap_pilot solver seeds (the run's seed + 0, 1, ...); the dense rows + * stay iff the median of conflicts(with) / conflicts(without) is <= 1. The decision depends only on conflict counts, so it + * is deterministic for a given seed. Every subset of the verified rows is sound (each row alone keeps every minimum-weight + * element of F), so neither the classification nor the pilot changes a probe answer; the pilot probes only decide, their + * answers are not used. Measured in GH-218: BB / LP / GB rows have c4 <= 4 (never dense; no pilot, GH-148's search); + * every weight-9 TN row has c4 >= 12; on them the rows' effect is systematic per code and half (TN_216 Z half 1.03-1.54x + * the conflicts on 10 seed/mode pairs, the GH-148 regression; TN_180 X half 0.48-0.66x on 3 seeds) and the cap-12 pilot + * ratios point the same way (TN_216 Z 0.91-1.19, median 1.06; X 0.83-1.01; TN_180 X 0.89-0.97). -1 = no classification + * (every verified row in every probe: GH-148's search, byte for byte). */ static const int STAB_OVL_C4_DEFAULT = 11; static int g_stab_overlap_c4 = STAB_OVL_C4_DEFAULT; /* -stab-overlap-c4=N|off (default 11) */ +static int g_stab_overlap_pilot = 3; /* -stab-overlap-pilot=N seed pairs (default 3; 0 = dense rows off + from that probe on, without a pilot) */ +static uint64_t g_stab_overlap_pilot_cap = 12; /* -stab-overlap-pilot-cap=P (default 12); the pilot asks + "weight <= max(P, lb)?" */ +static uint64_t g_stab_overlap_pilot_margin = 4; /* pilot before the first probe with cap >= pilot cap + margin + (no flag; tests lower it to reach the pilot on small codes) */ typedef std::vector > OvlRows; @@ -954,7 +966,7 @@ struct OvlInfo { int duplicates; long long clauses, auxvars; /* per probe */ int bin_rows, seq_rows, native_rows; - int c4_gated; /* GH-218: verified rows not used because they lie on more than g_stab_overlap_c4 4-cycles */ + int c4_gated; /* GH-218: dense verified rows (more than g_stab_overlap_c4 4-cycles) */ std::map weights; /* |g| -> rows */ }; @@ -977,9 +989,13 @@ static bool ovl_use_binomial(int w, int k) { return binom_d(w, k + 1) <= STAB_OVL_BIN_MAX; } -/* Rows g of Smat with Hpar g = 0 and Glog g = 0 (GF(2), via the column incidence of Hpar and Glog). */ -static OvlRows stab_overlap_rows(const Matrix& Hpar, const Matrix& Glog, const Matrix& Smat, OvlInfo& info) +/* Rows g of Smat with Hpar g = 0 and Glog g = 0 (GF(2), via the column incidence of Hpar and Glog). + * GH-218 (g_stab_overlap_c4 >= 0): with dense == NULL only the sparse rows are returned; otherwise every row is returned + * and (*dense)[i] = 1 marks the dense ones. */ +static OvlRows stab_overlap_rows(const Matrix& Hpar, const Matrix& Glog, const Matrix& Smat, OvlInfo& info, + std::vector* dense = NULL) { + if (dense) dense->clear(); info = OvlInfo(); info.candidates = info.kept = info.rejected = info.duplicates = info.bin_rows = info.seq_rows = info.native_rows = 0; info.c4_gated = 0; @@ -1026,6 +1042,7 @@ static OvlRows stab_overlap_rows(const Matrix& Hpar, const Matrix& Glog, const M } if (!ok) { info.rejected++; continue; } if (!seen.insert(g).second) { info.duplicates++; continue; } + bool is_dense = false; if (g_stab_overlap_c4 >= 0) { /* GH-218: c4(g) = sum over the other distinct rows of C(|g & g'|, 2) */ std::vector touched; for (size_t t = 0; t < g.size(); t++) @@ -1041,10 +1058,12 @@ static OvlRows stab_overlap_rows(const Matrix& Hpar, const Matrix& Glog, const M } const long long self = (long long)g.size(); /* g itself is one of the distinct rows: remove its own term */ c4 -= g_stab_overlap_mutant == 3 ? self : self * (self - 1) / 2; - if (c4 > g_stab_overlap_c4) { info.c4_gated++; continue; } + is_dense = c4 > g_stab_overlap_c4; + if (is_dense) { info.c4_gated++; if (!dense) continue; } } const int w = (int)g.size(), k = ovl_limit(w); if (k >= w) continue; /* no constraint (cannot happen for w >= 1 with the true limit) */ + if (dense) dense->push_back(is_dense ? 1 : 0); info.kept++; info.weights[w]++; if (g_stab_overlap_enc == 3) { info.native_rows++; } @@ -1269,13 +1288,69 @@ struct CssHalf { bool par; /* GH-133: -oddcap-skip in force (all column weights of H odd): odd caps skipped */ bool pre; /* GH-144: ub is a verified -ub-pre finder word (not a solver solution); false without -ub-pre */ OvlRows ovl; /* GH-148: verified stabilizer rows for -stab-overlap (empty: no constraint, main's instance) */ + std::vector ovl_dense; /* GH-218: ovl_dense[r] = 1: row r is dense (pilot-controlled); empty: none */ + int ovl_dense_mode; /* GH-218: -1 undecided (dense rows used, GH-148), 1 kept by the pilot, 0 dropped */ }; +static HalfStatus run_css_half(CssHalf& h, uint64_t cap, bool first_only, int verb, int card_mode, + int pipe_w, uint64_t lb_cap, uint64_t ub_cap, bool hide_lb, uint64_t& value, + int dense_force = -2, uint64_t* conflicts_out = NULL); + +/* GH-218: the pilot of half h (see g_stab_overlap_c4). Sets h.ovl_dense_mode to 0 or 1. */ +static void ovl_pilot(CssHalf& h, int verb, int card_mode) +{ + const uint64_t P = g_stab_overlap_pilot_cap > h.lb ? g_stab_overlap_pilot_cap : h.lb; + const uint64_t saved_seed = g_seed, saved_probes = h.probes, saved_conf = h.conflicts; + std::vector ratio; + std::string detail; + for (int i = 0; i < g_stab_overlap_pilot; i++) { + g_seed = saved_seed + (uint64_t)i; + uint64_t c[2] = {0, 0}, v = 0; + for (int with = 1; with >= 0; with--) + (void)run_css_half(h, P, true, 0, card_mode, -1, UINT64_MAX, UINT64_MAX, true, v, with, &c[with]); + ratio.push_back((double)c[1] / (double)(c[0] > 0 ? c[0] : 1)); + char buf[96]; + snprintf(buf, sizeof(buf), "%s seed %llu %llu/%llu", i ? "," : "", (unsigned long long)g_seed, (unsigned long long)c[1], + (unsigned long long)c[0]); + detail += buf; + } + g_seed = saved_seed; h.probes = saved_probes; h.conflicts = saved_conf; /* pilot work is not search work (GH-107 counters) */ + double med = 0.0; + if (!ratio.empty()) { + std::sort(ratio.begin(), ratio.end()); + const size_t m = ratio.size(); + med = m % 2 ? ratio[m / 2] : 0.5 * (ratio[m / 2 - 1] + ratio[m / 2]); + } + h.ovl_dense_mode = (!ratio.empty() && med <= 1.0) ? 1 : 0; + size_t nd = 0; + for (size_t r = 0; r < h.ovl_dense.size(); r++) nd += h.ovl_dense[r] ? 1 : 0; + if (verb > 0) { + printf("c stab-overlap pilot %s cap %llu (conflicts with/without %zu dense rows:%s): median ratio %.3f -> dense rows %s\n", + h.tag, (unsigned long long)P, nd, detail.c_str(), med, h.ovl_dense_mode ? "kept" : "dropped"); + fflush(stdout); + } + if (g_frontier_stats) { + fprintf(stderr, "c OVERLAP-PILOT %s cap %llu: dense_rows %zu%s median %.3f -> %s\n", h.tag, (unsigned long long)P, nd, + detail.c_str(), med, h.ovl_dense_mode ? "kept" : "dropped"); + fflush(stderr); + } +} + /* One oracle call on a half. cap: only solutions of weight <= cap are sought (strict). * first_only: stop at the first solution. Emitted bounds are capped/hidden as requested. */ static HalfStatus run_css_half(CssHalf& h, uint64_t cap, bool first_only, int verb, int card_mode, - int pipe_w, uint64_t lb_cap, uint64_t ub_cap, bool hide_lb, uint64_t& value) + int pipe_w, uint64_t lb_cap, uint64_t ub_cap, bool hide_lb, uint64_t& value, + int dense_force, uint64_t* conflicts_out) { + /* GH-218: dense_force -2 = a search probe (may trigger the half's pilot), 1 / 0 = pilot probe with / without the + * dense rows (no output, no pipe) */ + const bool pilot_probe = dense_force >= 0; + if (!pilot_probe && h.ovl_dense_mode < 0 && !h.ovl_dense.empty() && + cap >= (g_stab_overlap_pilot_cap > h.lb ? g_stab_overlap_pilot_cap : h.lb) + g_stab_overlap_pilot_margin) { + if (g_stab_overlap_pilot > 0) ovl_pilot(h, verb, card_mode); + else h.ovl_dense_mode = 0; + } + const bool use_dense = pilot_probe ? dense_force == 1 : h.ovl_dense_mode != 0; SimpSolver S; apply_maxsat_seed(S); /* GH-124: -seed=N (no-op for N = 0) */ std::vector aux; @@ -1283,7 +1358,8 @@ static HalfStatus run_css_half(CssHalf& h, uint64_t cap, bool first_only, int ve OvlRows ovl_active; /* GH-148: rows active in this probe (any subset of the verified rows is sound) */ if (!h.ovl.empty()) { for (size_t r = 0; r < h.ovl.size(); r++) - if (g_stab_overlap_ratio <= 0.0 || (double)cap >= g_stab_overlap_ratio * (double)(h.ovl[r].size() / 2 + 1)) + if ((g_stab_overlap_ratio <= 0.0 || (double)cap >= g_stab_overlap_ratio * (double)(h.ovl[r].size() / 2 + 1)) && + (use_dense || h.ovl_dense.empty() || !h.ovl_dense[r])) /* GH-218: dense rows only while kept/undecided */ ovl_active.push_back(h.ovl[r]); if (verb > 0) { printf("c stab-overlap %s cap %llu: %zu of %zu rows active (ratio %.2f)\n", h.tag, (unsigned long long)cap, @@ -1319,6 +1395,12 @@ static HalfStatus run_css_half(CssHalf& h, uint64_t cap, bool first_only, int ve } vec dummy; lbool ret = S.solveLimited(dummy); + if (conflicts_out) *conflicts_out = S.conflicts; /* GH-218 pilot */ + if (pilot_probe) { /* GH-218: a pilot probe only reports its conflicts */ + uint64_t opt = S.getLastOptimalCost(); + if (ret == l_True) return HALF_FOUND; + return (ret == l_False && opt == UINT64_MAX) ? HALF_NONE : HALF_UNKNOWN; + } if (g_frontier_stats || (h.frontier && g_frontier_check)) { /* stats also with -frontier=off (main's search) */ fprintf(stderr, "c FRONTIER %s cap %llu %s: conflicts %llu decisions %llu frontier_picks %llu fallbacks %llu " "no_eligible %llu mean_odd_rows %.2f check_fails %llu\n", h.tag, (unsigned long long)cap, @@ -1628,6 +1710,7 @@ static int min_distance_css_interleaved( if (Hx.cols != Hz.cols || Gx.cols != Hx.cols || Gz.cols != Hx.cols) die("matrix column mismatch"); const uint64_t n = (uint64_t)Hx.cols, INF = UINT64_MAX; CssHalf hs[2] = { {"X", &Hz, &Gx, Gx.rows > 0, 1, INF}, {"Z", &Hx, &Gz, Gz.rows > 0, 1, INF} }; + hs[0].ovl_dense_mode = hs[1].ovl_dense_mode = -1; /* GH-218: no pilot decision yet */ hs[0].own_lb = hs[1].own_lb = 1; for (int k = 0; k < 2; k++) { /* GH-130: per-half frontier mode (-frontier=auto decides from structure) */ hs[k].frontier = g_frontier_mode == 4 ? 0 : g_frontier_mode; @@ -1709,14 +1792,17 @@ static int min_distance_css_interleaved( for (int k = 0; g_stab_overlap && k < 2; k++) { if (!hs[k].exists) continue; OvlInfo oi; - hs[k].ovl = stab_overlap_rows(*hs[k].H, *hs[k].G, k == 0 ? Hx : Hz, oi); + hs[k].ovl = stab_overlap_rows(*hs[k].H, *hs[k].G, k == 0 ? Hx : Hz, oi, &hs[k].ovl_dense); + if (oi.c4_gated == 0) hs[k].ovl_dense.clear(); /* GH-218: no dense row, no pilot */ if (oi.rejected > 0) fprintf(stderr, "warning: stab-overlap: %s half: %d of %d stabilizer rows fail H g = 0 or G g = 0 (not used)\n", hs[k].tag, oi.rejected, oi.candidates); if (verb > 0) { printf("c stab-overlap %s: %d of %d rows used (%d rejected: H g != 0 or G g != 0; %d duplicates", hs[k].tag, oi.kept, oi.candidates, oi.rejected, oi.duplicates); - if (g_stab_overlap_c4 >= 0) printf("; %d on more than %d Tanner 4-cycles", oi.c4_gated, g_stab_overlap_c4); /* GH-218 */ + if (g_stab_overlap_c4 >= 0) /* GH-218 */ + printf("; %d dense: on more than %d Tanner 4-cycles, pilot %s", oi.c4_gated, g_stab_overlap_c4, + oi.c4_gated == 0 ? "not needed" : g_stab_overlap_pilot > 0 ? "at cap max(P, lb) before the first probe with cap >= that + 4" : "off: dropped from that probe on"); printf("); |g| -> rows:"); for (std::map::const_iterator it = oi.weights.begin(); it != oi.weights.end(); ++it) printf(" %d:%d (<= %d)", it->first, it->second, ovl_limit(it->first)); @@ -2530,6 +2616,18 @@ int main(int argc, char** argv) { else if (*v && end && !*end && k >= 0 && k <= 1000000) g_stab_overlap_c4 = (int)k; else die("invalid -stab-overlap-c4 (N = 0..1000000 | off)"); } + else if (!strncmp(argv[i], "-stab-overlap-pilot-cap=", 24)) { /* GH-218 */ + char* end = NULL; + long k = strtol(argv[i] + 24, &end, 10); + if (!argv[i][24] || !end || *end || k < 1 || k > 100000) die("invalid -stab-overlap-pilot-cap (P = 1..100000)"); + g_stab_overlap_pilot_cap = (uint64_t)k; + } + else if (!strncmp(argv[i], "-stab-overlap-pilot=", 20)) { /* GH-218 */ + char* end = NULL; + long k = strtol(argv[i] + 20, &end, 10); + if (!argv[i][20] || !end || *end || k < 0 || k > 15) die("invalid -stab-overlap-pilot (N = 0..15)"); + g_stab_overlap_pilot = (int)k; + } else if (!strcmp(argv[i], "-stab-overlap-enc=clauses")) g_stab_overlap_enc = 0; else if (!strcmp(argv[i], "-stab-overlap-enc=bin")) @@ -2808,8 +2906,11 @@ int main(int argc, char** argv) { printf(" probes of a half also require |x & g| <= floor(|g|/2) for same-type stabilizer rows g (verified\n"); printf(" H g = 0, G g = 0; a minimum-weight logical always satisfies it, else x + g is lighter); on: every\n"); printf(" row in every probe; auto: row g only in probes with cap >= 2 (floor(|g|/2) + 1) (-stab-overlap-ratio=X);\n"); - printf(" -stab-overlap-c4=N|off (GH-218, default 11): use only rows g on at most N Tanner 4-cycles of the\n"); - printf(" stabilizer matrix (sum over the other rows g' of C(|g & g'|, 2)); off = every verified row (GH-148's set)\n"); + printf(" -stab-overlap-c4=N|off (GH-218, default 11): rows g on more than N Tanner 4-cycles of the stabilizer\n"); + printf(" matrix (sum over the other rows g' of C(|g & g'|, 2)) are dense; before a half's first probe with cap >= P + 4\n"); + printf(" a pilot runs \"weight <= P?\" with and without its dense rows for -stab-overlap-pilot=N seeds (default 3;\n"); + printf(" 0 = drop them without a pilot) and keeps them iff the median conflict ratio is <= 1\n"); + printf(" (-stab-overlap-pilot-cap=P, default 12); off = every verified row in every probe (GH-148's search)\n"); printf(" -stab-overlap-enc=native|clauses|bin|seq (default native: a propagator inside MaxCDCL; clauses: binomial\n"); printf(" clauses up to |g| = 9, sequential counter above; bin / seq: one of them for every row)\n"); printf(" Output (default): live c trying d / c d_lb / c d_ub, then c d / o d\n"); diff --git a/src/solver/Solver.cc b/src/solver/Solver.cc index e555a691..0cd25502 100644 --- a/src/solver/Solver.cc +++ b/src/solver/Solver.cc @@ -4053,7 +4053,7 @@ CRef Solver::propagateForLK() { NextClause:; } ws.shrink(i - j); - if (ovInLK && !ovRows.empty() && confl == CRef_Undef && falseVar == var_Undef && ovWatched(p)) { // GH-148 (inactive when empty) + if (!ovRows.empty() && confl == CRef_Undef && falseVar == var_Undef && ovWatched(p)) { // GH-148 (inactive when empty) CRef oc = ovPropagate(p, true); if (oc != CRef_Undef) { confl = oc; qhead = trail.size(); } else if (falseVar != var_Undef) qhead = trail.size(); diff --git a/src/solver/Solver.h b/src/solver/Solver.h index 551d50d3..4a4308f3 100644 --- a/src/solver/Solver.h +++ b/src/solver/Solver.h @@ -604,10 +604,8 @@ class Solver { bool ovIsClause(CRef cr) const { return !ovRows.empty() && ovCrefs.count((uint32_t)cr) > 0; } void setOverlapRows(const std::vector >& rows, const std::vector& lims, int nQubits); // DistQLDPC GH-218: ovPropagate acts only on a qubit var becoming true that lies on a row; the call sites test this - // first (same propagation, no call per literal). ovInLK = false: the rows are not propagated inside the lookahead - // (propagateForLK); the search's own propagate() still enforces them. + // first (same propagation, no call per literal). std::vector ovHas; - bool ovInLK = true; bool ovWatched(Lit p) const { return !sign(p) && (size_t)var(p) < ovHas.size() && ovHas[(size_t)var(p)]; } CRef ovClause(int r, uint32_t mask, int impliedPos); CRef ovPropagate(Lit p, bool lk); From 3ccbff1fbc17d7fa81a7b03d7cd8936ad519ddef Mon Sep 17 00:00:00 2001 From: yfc Date: Wed, 4 Nov 2026 17:34:47 +0800 Subject: [PATCH 05/12] GH-218: tests for dense rows and the pilot (Part G configs and (c) checks, flag checks) Co-Authored-By: Claude Opus 5.5 --- tests/test_cc_engine.cc | 67 ++++++++++++++++++++++++++++++++++++++--- tests/test_cc_flags.sh | 33 ++++++++++++++------ 2 files changed, 85 insertions(+), 15 deletions(-) diff --git a/tests/test_cc_engine.cc b/tests/test_cc_engine.cc index 76d4a4bc..8a40838a 100644 --- a/tests/test_cc_engine.cc +++ b/tests/test_cc_engine.cc @@ -321,7 +321,8 @@ static RunOut run_driver(const Matrix& Hx, const Matrix& Hz, const Matrix& Gx, c struct PreCfg { const char* name; double pre; uint64_t iters; bool oddcap; uint64_t seed; int dualmode; bool symbreak; int card; int mutant; int ovl; int ovl_enc; int ovl_mutant; double ovl_ratio; /* GH-148 (0 = -stab-overlap off) */ int isd = 0; int isd_p = 2; // GH-146: collision mode of the pre-pass finder - int ovl_c4 = -1; }; // GH-218: -stab-overlap-c4 (-1 = no gate, the GH-148 row set) + int ovl_c4 = -1; // GH-218: -stab-overlap-c4 (-1 = no classification, the GH-148 search) + int ovl_pilot = 3; int ovl_pilot_cap = 12; int ovl_margin = 4; }; // GH-218 pilot (seeds, cap, margin) static RunOut run_maxsat(const Matrix& Hx, const Matrix& Hz, const Matrix& Gx, const Matrix& Gz, bool oddcap, const PreCfg* pc = NULL) { RunOut r; r.ok = false; r.d = -2; int fd[2]; @@ -339,6 +340,8 @@ static RunOut run_maxsat(const Matrix& Hx, const Matrix& Hz, const Matrix& Gx, c g_ub_isd.isd = pc->isd; g_ub_isd.isd_p = pc->isd_p; // GH-146 (child process only) g_stab_overlap = pc->ovl != 0; g_stab_overlap_enc = pc->ovl_enc; g_stab_overlap_mutant = pc->ovl_mutant; g_stab_overlap_ratio = pc->ovl_ratio; // GH-148 g_stab_overlap_c4 = pc->ovl_c4; // GH-218 + g_stab_overlap_pilot = pc->ovl_pilot; g_stab_overlap_pilot_cap = (uint64_t)pc->ovl_pilot_cap; + g_stab_overlap_pilot_margin = (uint64_t)pc->ovl_margin; (void)min_distance_css_interleaved(Hx, Hz, Gx, Gz, 0, fd[1], pc->card, pc->symbreak, pc->dualmode, false); } else (void)min_distance_css_interleaved(Hx, Hz, Gx, Gz, 0, fd[1], 0, true, DUALMODE_SHARE, false); @@ -1016,11 +1019,13 @@ int main(int argc, char** argv) { {"ovl-ratio1-pre-iter1-mto", 1.0, 1, true, 1, DUALMODE_SHARE, true, 3, 0, 1, 0, 0, 1.0}, {"ovl-mutant1", -1.0, 0, true, 0, DUALMODE_SHARE, true, 0, 0, 1, 0, 1}, {"ovl-mutant2", -1.0, 0, true, 0, DUALMODE_SHARE, true, 0, 0, 1, 0, 2}, - // GH-218: the 4-cycle row gate (subsets of the verified rows; answers must not change) + // GH-218: dense rows (4-cycle classification) under the pilot; margin 1 / pilot cap 1 reach the pilot on + // these small codes (answers must not change: every row subset is sound) {"ovl-native-auto-c4-11", -1.0, 0, true, 0, DUALMODE_SHARE, true, 0, 0, 1, 3, 0, 2.0, 0, 2, 11}, - {"ovl-native-c4-0-mto", -1.0, 0, true, 1, DUALMODE_SHARE, true, 3, 0, 1, 3, 0, 0.0, 0, 2, 0}, - {"ovl-native-c4-2-pre-iter1", 1.0, 1, true, 2, DUALMODE_SKIP, true, 0, 0, 1, 3, 0, 0.0, 0, 2, 2}, - {"ovl-seq-c4-4-nosymbreak", -1.0, 0, false, 0, DUALMODE_OFF, false, 0, 0, 1, 2, 0, 0.0, 0, 2, 4}, + {"ovl-native-c4-0-pilot-m1", -1.0, 0, true, 1, DUALMODE_SHARE, true, 3, 0, 1, 3, 0, 0.0, 0, 2, 0, 3, 1, 1}, + {"ovl-native-c4-0-pilot1-m1-pre", 1.0, 1, true, 2, DUALMODE_SKIP, true, 0, 0, 1, 3, 0, 0.0, 0, 2, 0, 1, 1, 1}, + {"ovl-native-c4-2-nopilot-m1", -1.0, 0, true, 0, DUALMODE_SHARE, true, 0, 0, 1, 3, 0, 0.0, 0, 2, 2, 0, 1, 1}, + {"ovl-seq-c4-0-pilot-m1-nosymbreak", -1.0, 0, false, 0, DUALMODE_OFF, false, 0, 0, 1, 2, 0, 0.0, 0, 2, 0, 2, 1, 1}, }; for (const PreCfg& c : gcfg) { RunOut r = run_maxsat(mHx, mHz, mGx, mGz, c.oddcap, &c); @@ -1248,7 +1253,59 @@ int main(int argc, char** argv) { } } } + // dense flags: with the output vector every verified row is returned, flagged iff c4 > K + long dense_checks = 0, dense_bad = 0, pilot_runs = 0, pilot_bad = 0, pilot_kept = 0, force_checks = 0, force_bad = 0; + for (const char* st : stems) { + const std::string base = std::string("data/matrices/") + st; + FILE* probe = fopen((base + "_Hx.txt").c_str(), "r"); + if (!probe) continue; + fclose(probe); + const Matrix Hx = load_matrix((base + "_Hx.txt").c_str()), Hz = load_matrix((base + "_Hz.txt").c_str()); + const Matrix Gx = load_matrix((base + "_Gx.txt").c_str()), Gz = load_matrix((base + "_Gz.txt").c_str()); + for (int half = 0; half < 2; half++) { + const Matrix& Hp = half == 0 ? Hz : Hx; const Matrix& Gl = half == 0 ? Gx : Gz; const Matrix& Sm = half == 0 ? Hx : Hz; + g_stab_overlap_mutant = 0; g_stab_overlap_c4 = -1; + OvlInfo ai; const OvlRows all = stab_overlap_rows(Hp, Gl, Sm, ai); + g_stab_overlap_c4 = 11; + OvlInfo si; const OvlRows sparse = stab_overlap_rows(Hp, Gl, Sm, si); + OvlInfo di; std::vector dense; const OvlRows withd = stab_overlap_rows(Hp, Gl, Sm, di, &dense); + dense_checks++; + OvlRows sp2; + for (size_t i = 0; i < withd.size() && i < dense.size(); i++) if (!dense[i]) sp2.push_back(withd[i]); + long nd = 0; for (char c : dense) nd += c; + if (withd != all || dense.size() != withd.size() || sp2 != sparse || nd != di.c4_gated) { + dense_bad++; fails++; + fprintf(stderr, "CC_FAIL GH-218 partG (c) dense flags %s half %d\n", st, half); + } + // pilot unit check on the TN codes of tier0 (small d): forced with/without dense rows the probe answers + // agree at caps d - 1 and d (NONE / FOUND), and the pilot decision is reproducible + if (strncmp(st, "tier0/TN_", 9) || nd == 0) continue; + CssHalf h = { half == 0 ? "X" : "Z", &Hp, &Gl, Gl.rows > 0, 1, UINT64_MAX }; + h.ovl_dense_mode = -1; h.ovl = withd; h.ovl_dense = dense; h.frontier = 0; h.par = false; h.pre = false; + const int d = atoi(strrchr(st, '_') + 1); + for (int cap = d - 1; cap <= d; cap++) { + uint64_t v = 0, c1 = 0, c0 = 0; + const HalfStatus s1 = run_css_half(h, (uint64_t)cap, true, 0, 0, -1, UINT64_MAX, UINT64_MAX, true, v, 1, &c1); + const HalfStatus s0 = run_css_half(h, (uint64_t)cap, true, 0, 0, -1, UINT64_MAX, UINT64_MAX, true, v, 0, &c0); + force_checks++; + // the half's own minimum may exceed d (d = min over both halves): only agreement is required + if (s1 != s0 || (s1 != HALF_FOUND && s1 != HALF_NONE)) { + force_bad++; fails++; + fprintf(stderr, "CC_FAIL GH-218 partG (c) forced dense %s half %d cap %d: %d vs %d\n", st, half, cap, (int)s1, (int)s0); + } + } + g_stab_overlap_pilot_cap = 1; + int dec[2]; + for (int rep2 = 0; rep2 < 2; rep2++) { h.ovl_dense_mode = -1; ovl_pilot(h, 0, 0); dec[rep2] = h.ovl_dense_mode; pilot_runs++; } + if (dec[0] != dec[1] || dec[0] < 0) { pilot_bad++; fails++; fprintf(stderr, "CC_FAIL GH-218 partG (c) pilot %s half %d: %d / %d\n", st, half, dec[0], dec[1]); } + pilot_kept += dec[0] == 1; + g_stab_overlap_pilot_cap = 12; + } + } g_stab_overlap_c4 = saved_c4; g_stab_overlap_mutant = saved_mut; + printf("partG (c) GH-218 dense flags: %ld checks, %ld bad; forced dense on/off probe answers on tier0 TN halves: %ld checks, %ld bad; " + "pilot decisions: %ld runs, %ld not reproducible (kept on %ld)\n", dense_checks, dense_bad, force_checks, force_bad, pilot_runs, pilot_bad, pilot_kept); + if (force_checks == 0 || pilot_runs == 0) { fprintf(stderr, "CC_FAIL GH-218 partG (c) pilot coverage\n"); fails++; } printf("partG (c) GH-218 4-cycle row gate: %ld selections on %zu codes x 2 halves, %ld bad (gated %ld, kept %ld rows over K >= 0); " "mutant 3 (overlaps counted instead of pairs) changes %ld selections\n", c_checks, sizeof(stems) / sizeof(stems[0]), c_bad, c_gated, c_kept, c_m3_diff); diff --git a/tests/test_cc_flags.sh b/tests/test_cc_flags.sh index 22f96602..f486a147 100755 --- a/tests/test_cc_flags.sh +++ b/tests/test_cc_flags.sh @@ -405,8 +405,8 @@ runs=$((runs + 1)); run -frontier-stats -stab-overlap=on -stab-overlap-enc=bin $ if grep -q "^c OVERLAP" <<<"$err"; then echo "FAIL (no c OVERLAP line with clause encodings)" >&2; fails=$((fails + 1)); fi accept 2 "" -engine=auto -stab-overlap=on $L $D1 # auto -> maxsat: applies accept 2 "selected cc .*ignoring -stab-overlap=on" -engine=auto -stab-overlap=on $L $C -vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 0 on more than 11 Tanner 4-cycles); |g| -> rows: 6:45 (<= 3); binomial rows 45, counter rows 0; per probe 675 clauses, 0 aux vars$" -v -stab-overlap=on -stab-overlap-enc=clauses $L BB_90_8_10 -vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 0 on more than 11 Tanner 4-cycles); |g| -> rows: 6:45 (<= 3); native propagator rows 45 (no clauses)$" -v -stab-overlap=on $L BB_90_8_10 +vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 0 dense: on more than 11 Tanner 4-cycles, pilot not needed); |g| -> rows: 6:45 (<= 3); binomial rows 45, counter rows 0; per probe 675 clauses, 0 aux vars$" -v -stab-overlap=on -stab-overlap-enc=clauses $L BB_90_8_10 +vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 0 dense: on more than 11 Tanner 4-cycles, pilot not needed); |g| -> rows: 6:45 (<= 3); native propagator rows 45 (no clauses)$" -v -stab-overlap=on $L BB_90_8_10 vgrep 10 "^c stab-overlap X: 45 of 45 rows used .* binomial rows 45, counter rows 0" -v -stab-overlap=auto -stab-overlap-enc=bin $L BB_90_8_10 vgrep 10 "^c stab-overlap Z: 45 of 45 rows used .* binomial rows 0, counter rows 45; per probe 1440 clauses, 675 aux vars$" -v -stab-overlap=on -stab-overlap-enc=seq $L BB_90_8_10 vgrep 10 "^c stab-overlap X cap 8: 45 of 45 rows active (ratio 2.00)$" -v -stab-overlap=auto $L BB_90_8_10 @@ -415,7 +415,7 @@ vgrep 10 "^c stab-overlap X cap 4: 45 of 45 rows active (ratio 0.00)$" -v -stab- runs=$((runs + 1)); run -v -stab-overlap=off $L BB_90_8_10 if grep -q "stab-overlap" <<<"$out$err"; then echo "FAIL (-stab-overlap=off must not print stab-overlap lines)" >&2; fails=$((fails + 1)); fi # default (auto since the PI's adoption decision): the same lines as -stab-overlap=auto -vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 0 on more than 11 Tanner 4-cycles); |g| -> rows: 6:45 (<= 3); native propagator rows 45 (no clauses)$" -v $L BB_90_8_10 +vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 0 dense: on more than 11 Tanner 4-cycles, pilot not needed); |g| -> rows: 6:45 (<= 3); native propagator rows 45 (no clauses)$" -v $L BB_90_8_10 vgrep 10 "^c stab-overlap X cap 8: 45 of 45 rows active (ratio 2.00)$" -v $L BB_90_8_10 vgrep 10 "^c stab-overlap X cap 4: 0 of 45 rows active (ratio 2.00)$" -v $L BB_90_8_10 runs=$((runs + 1)); run -frontier-stats $L BB_90_8_10 @@ -423,25 +423,38 @@ if [[ $rc -ne 0 ]] || ! grep -q "^c OVERLAP X cap 8: rows 45 props [0-9]* confli runs=$((runs + 1)); run -v -joint $L $M if grep -q "stab-overlap" <<<"$out$err"; then echo "FAIL (default auto is silently off with -joint: no stab-overlap lines expected)" >&2; fails=$((fails + 1)); fi -# 7g. GH-218 -stab-overlap-c4=N|off (4-cycle row gate, default 11): values, conflicts, selection, off = GH-148's row set +# 7g. GH-218 dense rows and the per-half pilot: -stab-overlap-c4=N|off (default 11), -stab-overlap-pilot=N (default 3), +# -stab-overlap-pilot-cap=P (default 12); -stab-overlap-c4=off = GH-148's search for f in -stab-overlap-c4= -stab-overlap-c4=x -stab-overlap-c4=-1 -stab-overlap-c4=1.5 -stab-overlap-c4=OFF -stab-overlap-c4=2000000; do reject "invalid -stab-overlap-c4" $f $L $M done +for f in -stab-overlap-pilot= -stab-overlap-pilot=x -stab-overlap-pilot=-1 -stab-overlap-pilot=16; do reject "invalid -stab-overlap-pilot " $f $L $M; done +for f in -stab-overlap-pilot-cap= -stab-overlap-pilot-cap=0 -stab-overlap-pilot-cap=y -stab-overlap-pilot-cap=100001; do reject "invalid -stab-overlap-pilot-cap" $f $L $M; done reject "needs -stab-overlap=on or -stab-overlap=auto" -stab-overlap=off -stab-overlap-c4=3 $L $M +reject "needs -stab-overlap=on or -stab-overlap=auto" -stab-overlap=off -stab-overlap-pilot=1 $L $M reject "no effect with -engine=cc" -engine=cc -stab-overlap-c4=3 $L $C +reject "no effect with -engine=cc" -engine=cc -stab-overlap-pilot-cap=5 $L $C accept 3 "" -stab-overlap-c4=0 $L $M accept 3 "" -stab-overlap-c4=off -card-mto $L $M +accept 3 "" -stab-overlap-pilot=0 -stab-overlap-pilot-cap=1 $L $M accept 8 "" -stab-overlap-c4=0 $L TN_72_8_8 accept 8 "" -stab-overlap=on -stab-overlap-c4=1000 -card-mto $L TN_72_8_8 +accept 8 "" -stab-overlap=on -stab-overlap-pilot=1 -stab-overlap-pilot-cap=1 $L TN_72_8_8 accept 10 "" -stab-overlap=on -stab-overlap-c4=off -stab-overlap-enc=seq $L BB_90_8_10 vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates); |g| -> rows: 6:45 (<= 3); native propagator rows 45 (no clauses)$" -v -stab-overlap-c4=off $L BB_90_8_10 -vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 0 on more than 0 Tanner 4-cycles); |g|" -v -stab-overlap-c4=0 $L BB_90_8_10 -vgrep 8 "^c stab-overlap X: 0 of 36 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 36 on more than 11 Tanner 4-cycles); |g| -> rows:; native propagator rows 0 (no clauses)$" -v $L TN_72_8_8 +vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 0 dense: on more than 0 Tanner 4-cycles, pilot not needed); |g|" -v -stab-overlap-c4=0 $L BB_90_8_10 +vgrep 8 "^c stab-overlap X: 36 of 36 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 36 dense: on more than 11 Tanner 4-cycles, pilot at cap max(P, lb) before the first probe with cap >= that + 4); |g| -> rows: 9:36 (<= 4)" -v $L TN_72_8_8 +vgrep 8 "^c stab-overlap X: 36 of 36 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 36 dense: on more than 11 Tanner 4-cycles, pilot off: dropped from that probe on); |g|" -v -stab-overlap-pilot=0 $L TN_72_8_8 vgrep 8 "^c stab-overlap X: 36 of 36 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates); |g| -> rows: 9:36 (<= 4)" -v -stab-overlap-c4=off $L TN_72_8_8 -runs=$((runs + 1)); run -frontier-stats -stab-overlap=on $L TN_72_8_8 -if [[ $rc -ne 0 ]] || grep -q "^c OVERLAP" <<<"$err"; then echo "FAIL (TN_72_8_8 -stab-overlap=on: every row gated, no c OVERLAP line expected)" >&2; fails=$((fails + 1)); fi -runs=$((runs + 1)); run -frontier-stats -stab-overlap=on -stab-overlap-c4=off $L TN_72_8_8 -if [[ $rc -ne 0 ]] || ! grep -q "^c OVERLAP" <<<"$err"; then echo "FAIL (TN_72_8_8 -stab-overlap=on -stab-overlap-c4=off: c OVERLAP line expected)" >&2; fails=$((fails + 1)); fi +# TN_72_8_8 (d = 8, ub-pre off: caps 1, 2, 4, 8): pilot cap 1 -> P = max(1, lb) = 5 at cap 8 < 9: no pilot, dense rows used +runs=$((runs + 1)); run -frontier-stats -stab-overlap=on -ub-pre=off $L TN_72_8_8 +if [[ $rc -ne 0 ]] || ! grep -q "^c OVERLAP" <<<"$err" || grep -q "OVERLAP-PILOT" <<<"$err"; then echo "FAIL (TN_72_8_8 -stab-overlap=on: dense rows used, no pilot expected)" >&2; fails=$((fails + 1)); fi +# TN_108_2_12 with -ub-pre=off: caps 1, 2, 4, 8, 16; at cap 16 lb = 9, P = 9, 16 >= 13: one pilot per half (3 seeds) +runs=$((runs + 1)); run -frontier-stats -ub-pre=off -cpu-lim=15 TN_108_2_12 +if ! grep -Eq "^c OVERLAP-PILOT X cap 9: dense_rows 54 seed 0 [0-9]+/[0-9]+, seed 1 [0-9]+/[0-9]+, seed 2 [0-9]+/[0-9]+ median [0-9.]+ -> (kept|dropped)$" <<<"$err"; then + echo "FAIL (TN_108_2_12 -ub-pre=off: c OVERLAP-PILOT X line expected): $(grep PILOT <<<"$err")" >&2; fails=$((fails + 1)); fi +runs=$((runs + 1)); run -frontier-stats -ub-pre=off -stab-overlap-pilot=0 -cpu-lim=5 TN_108_2_12 +if grep -q "OVERLAP-PILOT" <<<"$err"; then echo "FAIL (-stab-overlap-pilot=0: no pilot line expected)" >&2; fails=$((fails + 1)); fi # 8. a CC trap withdraws the bounds already sent (test mutant 2 with the GH-124 rule set traps on LP_136_32_4 after # emitting d_lb lines; with the GH-133 rules the same mutant answers wrongly instead, which this check does not need) From 09a6f348525366fe56b3b9a10e008fb119b48692 Mon Sep 17 00:00:00 2001 From: yfc Date: Wed, 4 Nov 2026 17:44:31 +0800 Subject: [PATCH 06/12] GH-218: TN_108 pilot flag check uses pilot cap 1 (P = lb = 9) Co-Authored-By: Claude Opus 5.5 --- tests/test_cc_flags.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/test_cc_flags.sh b/tests/test_cc_flags.sh index f486a147..340bb9f0 100755 --- a/tests/test_cc_flags.sh +++ b/tests/test_cc_flags.sh @@ -449,8 +449,9 @@ vgrep 8 "^c stab-overlap X: 36 of 36 rows used (0 rejected: H g != 0 or G g != 0 # TN_72_8_8 (d = 8, ub-pre off: caps 1, 2, 4, 8): pilot cap 1 -> P = max(1, lb) = 5 at cap 8 < 9: no pilot, dense rows used runs=$((runs + 1)); run -frontier-stats -stab-overlap=on -ub-pre=off $L TN_72_8_8 if [[ $rc -ne 0 ]] || ! grep -q "^c OVERLAP" <<<"$err" || grep -q "OVERLAP-PILOT" <<<"$err"; then echo "FAIL (TN_72_8_8 -stab-overlap=on: dense rows used, no pilot expected)" >&2; fails=$((fails + 1)); fi -# TN_108_2_12 with -ub-pre=off: caps 1, 2, 4, 8, 16; at cap 16 lb = 9, P = 9, 16 >= 13: one pilot per half (3 seeds) -runs=$((runs + 1)); run -frontier-stats -ub-pre=off -cpu-lim=15 TN_108_2_12 +# TN_108_2_12 with -ub-pre=off: caps 1, 2, 4, 8, 16; at cap 16 lb = 9, pilot cap 1 -> P = max(1, 9) = 9, 16 >= 13: +# one pilot per half (3 seeds) +runs=$((runs + 1)); run -frontier-stats -ub-pre=off -stab-overlap-pilot-cap=1 -cpu-lim=15 TN_108_2_12 if ! grep -Eq "^c OVERLAP-PILOT X cap 9: dense_rows 54 seed 0 [0-9]+/[0-9]+, seed 1 [0-9]+/[0-9]+, seed 2 [0-9]+/[0-9]+ median [0-9.]+ -> (kept|dropped)$" <<<"$err"; then echo "FAIL (TN_108_2_12 -ub-pre=off: c OVERLAP-PILOT X line expected): $(grep PILOT <<<"$err")" >&2; fails=$((fails + 1)); fi runs=$((runs + 1)); run -frontier-stats -ub-pre=off -stab-overlap-pilot=0 -cpu-lim=5 TN_108_2_12 From 60fec5b2d2450e8f903f8ff3faa0006db505e0f4 Mon Sep 17 00:00:00 2001 From: yfc Date: Wed, 4 Nov 2026 17:45:48 +0800 Subject: [PATCH 07/12] GH-218: pilot cap also covers the activation cap of the dense rows (the two pilot probes differ exactly by them) Co-Authored-By: Claude Opus 5.5 --- src/core/distqldpc.cc | 26 +++++++++++++++++++++----- tests/test_cc_flags.sh | 8 ++++---- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/core/distqldpc.cc b/src/core/distqldpc.cc index 33319859..7f71d718 100644 --- a/src/core/distqldpc.cc +++ b/src/core/distqldpc.cc @@ -937,7 +937,8 @@ static const double STAB_OVL_BIN_MAX = 126.0; /* auto: binomial up to |g| = 9 /* GH-218: per-half pilot for the rows on many Tanner 4-cycles. A verified row g is "dense" if it lies on more than * g_stab_overlap_c4 Tanner-graph 4-cycles of the same-type stabilizer matrix, c4(g) = sum over the other distinct rows g' * of C(|g & g'|, 2) (the 4-cycles through g's check node). Sparse rows are always used (as in GH-148). The dense rows of a - * half are used as in GH-148 until the half's first probe with cap >= P + 4, P = max(pilot cap, the half's lb); before + * half are used as in GH-148 until the half's first probe with cap >= P + 4, P = max(pilot cap, the half's lb, the cap + * from which the -stab-overlap ratio activates every dense row: 10 for weight 9 under auto); before * that probe a pilot decides, once per half, whether they stay: the probe "weight <= P?" (first solution stops it) is * run with and without the dense rows for g_stab_overlap_pilot solver seeds (the run's seed + 0, 1, ...); the dense rows * stay iff the median of conflicts(with) / conflicts(without) is <= 1. The decision depends only on conflict counts, so it @@ -1296,10 +1297,25 @@ static HalfStatus run_css_half(CssHalf& h, uint64_t cap, bool first_only, int ve int pipe_w, uint64_t lb_cap, uint64_t ub_cap, bool hide_lb, uint64_t& value, int dense_force = -2, uint64_t* conflicts_out = NULL); +/* GH-218: the pilot cap of half h: max(-stab-overlap-pilot-cap, lb, the smallest cap at which every dense row is active + * under the -stab-overlap ratio), so that the two pilot probes differ exactly by the dense rows. */ +static uint64_t ovl_pilot_cap(const CssHalf& h) +{ + uint64_t P = g_stab_overlap_pilot_cap > h.lb ? g_stab_overlap_pilot_cap : h.lb; + for (size_t r = 0; r < h.ovl.size() && r < h.ovl_dense.size(); r++) { + if (!h.ovl_dense[r] || g_stab_overlap_ratio <= 0.0) continue; + const double need = g_stab_overlap_ratio * (double)(h.ovl[r].size() / 2 + 1); + uint64_t c = (uint64_t)need; + if ((double)c < need) c++; + if (c > P) P = c; + } + return P; +} + /* GH-218: the pilot of half h (see g_stab_overlap_c4). Sets h.ovl_dense_mode to 0 or 1. */ static void ovl_pilot(CssHalf& h, int verb, int card_mode) { - const uint64_t P = g_stab_overlap_pilot_cap > h.lb ? g_stab_overlap_pilot_cap : h.lb; + const uint64_t P = ovl_pilot_cap(h); const uint64_t saved_seed = g_seed, saved_probes = h.probes, saved_conf = h.conflicts; std::vector ratio; std::string detail; @@ -1346,7 +1362,7 @@ static HalfStatus run_css_half(CssHalf& h, uint64_t cap, bool first_only, int ve * dense rows (no output, no pipe) */ const bool pilot_probe = dense_force >= 0; if (!pilot_probe && h.ovl_dense_mode < 0 && !h.ovl_dense.empty() && - cap >= (g_stab_overlap_pilot_cap > h.lb ? g_stab_overlap_pilot_cap : h.lb) + g_stab_overlap_pilot_margin) { + cap >= ovl_pilot_cap(h) + g_stab_overlap_pilot_margin) { if (g_stab_overlap_pilot > 0) ovl_pilot(h, verb, card_mode); else h.ovl_dense_mode = 0; } @@ -1802,7 +1818,7 @@ static int min_distance_css_interleaved( oi.candidates, oi.rejected, oi.duplicates); if (g_stab_overlap_c4 >= 0) /* GH-218 */ printf("; %d dense: on more than %d Tanner 4-cycles, pilot %s", oi.c4_gated, g_stab_overlap_c4, - oi.c4_gated == 0 ? "not needed" : g_stab_overlap_pilot > 0 ? "at cap max(P, lb) before the first probe with cap >= that + 4" : "off: dropped from that probe on"); + oi.c4_gated == 0 ? "not needed" : g_stab_overlap_pilot > 0 ? "at cap max(P, lb, activation) before the first probe with cap >= that + 4" : "off: dropped from that probe on"); printf("); |g| -> rows:"); for (std::map::const_iterator it = oi.weights.begin(); it != oi.weights.end(); ++it) printf(" %d:%d (<= %d)", it->first, it->second, ovl_limit(it->first)); @@ -2908,7 +2924,7 @@ int main(int argc, char** argv) { printf(" row in every probe; auto: row g only in probes with cap >= 2 (floor(|g|/2) + 1) (-stab-overlap-ratio=X);\n"); printf(" -stab-overlap-c4=N|off (GH-218, default 11): rows g on more than N Tanner 4-cycles of the stabilizer\n"); printf(" matrix (sum over the other rows g' of C(|g & g'|, 2)) are dense; before a half's first probe with cap >= P + 4\n"); - printf(" a pilot runs \"weight <= P?\" with and without its dense rows for -stab-overlap-pilot=N seeds (default 3;\n"); + printf(" a pilot runs \"weight <= max(P, lb, row activation cap)?\" with and without its dense rows for -stab-overlap-pilot=N seeds (default 3;\n"); printf(" 0 = drop them without a pilot) and keeps them iff the median conflict ratio is <= 1\n"); printf(" (-stab-overlap-pilot-cap=P, default 12); off = every verified row in every probe (GH-148's search)\n"); printf(" -stab-overlap-enc=native|clauses|bin|seq (default native: a propagator inside MaxCDCL; clauses: binomial\n"); diff --git a/tests/test_cc_flags.sh b/tests/test_cc_flags.sh index 340bb9f0..86cb0260 100755 --- a/tests/test_cc_flags.sh +++ b/tests/test_cc_flags.sh @@ -443,16 +443,16 @@ accept 8 "" -stab-overlap=on -stab-overlap-pilot=1 -stab-overlap-pilot-cap=1 $L accept 10 "" -stab-overlap=on -stab-overlap-c4=off -stab-overlap-enc=seq $L BB_90_8_10 vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates); |g| -> rows: 6:45 (<= 3); native propagator rows 45 (no clauses)$" -v -stab-overlap-c4=off $L BB_90_8_10 vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 0 dense: on more than 0 Tanner 4-cycles, pilot not needed); |g|" -v -stab-overlap-c4=0 $L BB_90_8_10 -vgrep 8 "^c stab-overlap X: 36 of 36 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 36 dense: on more than 11 Tanner 4-cycles, pilot at cap max(P, lb) before the first probe with cap >= that + 4); |g| -> rows: 9:36 (<= 4)" -v $L TN_72_8_8 +vgrep 8 "^c stab-overlap X: 36 of 36 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 36 dense: on more than 11 Tanner 4-cycles, pilot at cap max(P, lb, activation) before the first probe with cap >= that + 4); |g| -> rows: 9:36 (<= 4)" -v $L TN_72_8_8 vgrep 8 "^c stab-overlap X: 36 of 36 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 36 dense: on more than 11 Tanner 4-cycles, pilot off: dropped from that probe on); |g|" -v -stab-overlap-pilot=0 $L TN_72_8_8 vgrep 8 "^c stab-overlap X: 36 of 36 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates); |g| -> rows: 9:36 (<= 4)" -v -stab-overlap-c4=off $L TN_72_8_8 -# TN_72_8_8 (d = 8, ub-pre off: caps 1, 2, 4, 8): pilot cap 1 -> P = max(1, lb) = 5 at cap 8 < 9: no pilot, dense rows used +# TN_72_8_8 (d = 8, ub-pre off: caps 1, 2, 4, 8): P >= 10 (weight-9 rows active from cap 10): no pilot, dense rows used runs=$((runs + 1)); run -frontier-stats -stab-overlap=on -ub-pre=off $L TN_72_8_8 if [[ $rc -ne 0 ]] || ! grep -q "^c OVERLAP" <<<"$err" || grep -q "OVERLAP-PILOT" <<<"$err"; then echo "FAIL (TN_72_8_8 -stab-overlap=on: dense rows used, no pilot expected)" >&2; fails=$((fails + 1)); fi -# TN_108_2_12 with -ub-pre=off: caps 1, 2, 4, 8, 16; at cap 16 lb = 9, pilot cap 1 -> P = max(1, 9) = 9, 16 >= 13: +# TN_108_2_12 with -ub-pre=off: caps 1, 2, 4, 8, 16; at cap 16 lb = 9, pilot cap 1 -> P = max(1, 9, 10) = 10, 16 >= 14: # one pilot per half (3 seeds) runs=$((runs + 1)); run -frontier-stats -ub-pre=off -stab-overlap-pilot-cap=1 -cpu-lim=15 TN_108_2_12 -if ! grep -Eq "^c OVERLAP-PILOT X cap 9: dense_rows 54 seed 0 [0-9]+/[0-9]+, seed 1 [0-9]+/[0-9]+, seed 2 [0-9]+/[0-9]+ median [0-9.]+ -> (kept|dropped)$" <<<"$err"; then +if ! grep -Eq "^c OVERLAP-PILOT X cap 10: dense_rows 54 seed 0 [0-9]+/[0-9]+, seed 1 [0-9]+/[0-9]+, seed 2 [0-9]+/[0-9]+ median [0-9.]+ -> (kept|dropped)$" <<<"$err"; then echo "FAIL (TN_108_2_12 -ub-pre=off: c OVERLAP-PILOT X line expected): $(grep PILOT <<<"$err")" >&2; fails=$((fails + 1)); fi runs=$((runs + 1)); run -frontier-stats -ub-pre=off -stab-overlap-pilot=0 -cpu-lim=5 TN_108_2_12 if grep -q "OVERLAP-PILOT" <<<"$err"; then echo "FAIL (-stab-overlap-pilot=0: no pilot line expected)" >&2; fails=$((fails + 1)); fi From ccc3ca5113337789c3596f864b0a95444d9f1b78 Mon Sep 17 00:00:00 2001 From: yfc Date: Wed, 4 Nov 2026 17:51:20 +0800 Subject: [PATCH 08/12] GH-218: TN_108 pilot flag check: cpu limit 60 s (the cap-10 pilot needs more than 15 s on a loaded host) Co-Authored-By: Claude Opus 5.5 --- tests/test_cc_flags.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_cc_flags.sh b/tests/test_cc_flags.sh index 86cb0260..ecb6d04b 100755 --- a/tests/test_cc_flags.sh +++ b/tests/test_cc_flags.sh @@ -451,7 +451,7 @@ runs=$((runs + 1)); run -frontier-stats -stab-overlap=on -ub-pre=off $L TN_72_8_ if [[ $rc -ne 0 ]] || ! grep -q "^c OVERLAP" <<<"$err" || grep -q "OVERLAP-PILOT" <<<"$err"; then echo "FAIL (TN_72_8_8 -stab-overlap=on: dense rows used, no pilot expected)" >&2; fails=$((fails + 1)); fi # TN_108_2_12 with -ub-pre=off: caps 1, 2, 4, 8, 16; at cap 16 lb = 9, pilot cap 1 -> P = max(1, 9, 10) = 10, 16 >= 14: # one pilot per half (3 seeds) -runs=$((runs + 1)); run -frontier-stats -ub-pre=off -stab-overlap-pilot-cap=1 -cpu-lim=15 TN_108_2_12 +runs=$((runs + 1)); run -frontier-stats -ub-pre=off -stab-overlap-pilot-cap=1 -cpu-lim=60 TN_108_2_12 if ! grep -Eq "^c OVERLAP-PILOT X cap 10: dense_rows 54 seed 0 [0-9]+/[0-9]+, seed 1 [0-9]+/[0-9]+, seed 2 [0-9]+/[0-9]+ median [0-9.]+ -> (kept|dropped)$" <<<"$err"; then echo "FAIL (TN_108_2_12 -ub-pre=off: c OVERLAP-PILOT X line expected): $(grep PILOT <<<"$err")" >&2; fails=$((fails + 1)); fi runs=$((runs + 1)); run -frontier-stats -ub-pre=off -stab-overlap-pilot=0 -cpu-lim=5 TN_108_2_12 From a7cb445ea258cac9cfea16c13be9185a7d05c92f Mon Sep 17 00:00:00 2001 From: yfc Date: Wed, 4 Nov 2026 18:00:14 +0800 Subject: [PATCH 09/12] GH-218: README / MODIFICATIONS entries (soundness: any row subset; pilot decides from conflict counts only) Co-Authored-By: Claude Opus 5.5 --- MODIFICATIONS.md | 26 ++++++++++++++++++++++++++ README.md | 1 + 2 files changed, 27 insertions(+) diff --git a/MODIFICATIONS.md b/MODIFICATIONS.md index 590a052b..afb700b6 100644 --- a/MODIFICATIONS.md +++ b/MODIFICATIONS.md @@ -34,6 +34,7 @@ New code, not derived from MaxCDCL. | Stern / Dumer collision mode of the shared finder (GH-146; `-ub-isd=off\|stern\|dumer[:P,L,W,B,R]`, default stern since 2026-10-23, PI; `-ub-isd=off` = previous finder, GH-140) | Applies to the CC `-ub-search` finder and to the MaxSAT `-ub-pre` pre-pass (both use `UbFinder`). Per round: W Canteaut-Chabaud pivot swaps on the stored systematic columns (or a fresh elimination), a random split of the information set into two halves and a random window of L reduced rows; all subsets of size <= P of each half (`dumer`: the window pivot columns are elements too), bucketed by the window part of their column sum; every colliding pair with different detector parities is weighed, kept words go through the unchanged detector check, stabilizer local improvement and the driver's / pre-pass's independent verification. Single systematic words are also tried every round. Defaults from S0: P 2, L automatic (about log2 of the list size), W 32, B 1 round per iteration. `-ub-isd=off` = the GH-140 enumeration byte for byte (identical to GH-144's 6d2b7a1 on tier0+1). Soundness below (GH-146). See `optimization/experiments/GH-146/`. | | Tanner-graph automorphism candidates for the CC engine (GH-152; `-cc-aut=on\|off`, default on since 2026-10-28, PI decision; `-cc-aut=off` = previous CC search; experimental) | CC wrapper `min_distance_css_cc` only. With `-cc-aut=on`, `distcc::find_row_automorphisms` (`src/cc/cc_aut.{h,cc}`) proposes colour-preserving automorphisms of the Tanner graph (qubits, Hx rows, Hz rows) and one map exchanging the Hx and Hz rows. The generators are tried as extra candidates in `find_half_symmetry` after the GH-75 family, under the same two GF(2) checks (new optional arguments, default = old behaviour). The swap map is offered to `verify_dual_perm` (new, the `find_dual_maps` check for one map) only when `find_dual_maps` finds no map. `-v` prints `c cc aut:` lines. With `-cc-aut=off` no line of any log changes (identity verified on tier0+1, both engines); since the default flip (2026-10-28) the default MaxSAT path is still byte-identical, and the default CC path equals `-cc-aut=on`. Test mutants 13/14 (candidates or the swap map used without the GF(2) check). The MaxSAT path is unchanged. Soundness below (GH-152). See `optimization/experiments/GH-152/`. | | Stabilizer-overlap dominance constraints in the MaxSAT split (GH-148; `-stab-overlap=off\|on\|auto`, default auto since the PI's adoption decision; `-stab-overlap=off` = previous search; silently off with -joint/-roundingsat unless given explicitly) | Split MaxSAT path only (an explicit `-stab-overlap=on\|auto` is refused with -joint/-roundingsat/-engine=cc). For every CSS half, the rows g of the same-type stabilizer matrix (X half: Hx; Z half: Hz) that pass a GF(2) check Hpar g = 0 and Glog g = 0 on the input matrices (duplicates removed) give the constraint "at most floor(\|g\|/2) of the qubits of g are 1" in each probe: by default (`-stab-overlap-enc=native`) as a native propagator inside MaxCDCL (`Solver::setOverlapRows`, set by `run_css_half` after `build_css_half`; see the `Solver.h` / `Solver.cc` section), or as clauses (`add_overlap_constraints` at the end of `build_css_half`): `clauses` = binomial clauses for \|g\| <= 9 and Sinz's sequential counter above, `bin` / `seq` = one of them for every row. `on`: every verified row in every probe; `auto`: row g only in probes of cap c >= 2 (floor(\|g\|/2) + 1) (`-stab-overlap-ratio=X` sets the factor). With `-stab-overlap=off` the instance and the `-v` log are those of the search before the adoption byte for byte (main e52d15b; identity verified on tier0+1 x 2 modes). Soundness below (GH-148). See `optimization/experiments/GH-148/`. | +| Dense overlap rows under a per-half pilot (GH-218; `-stab-overlap-c4=N\|off` default 11, `-stab-overlap-pilot=N` default 3, `-stab-overlap-pilot-cap=P` default 12; `-stab-overlap-c4=off` = GH-148's search byte for byte) | Split MaxSAT path, with `-stab-overlap=on\|auto`. Rows on more than N Tanner 4-cycles of the stabilizer matrix (every weight-9 TN row; no BB/LP/GB row) are kept or dropped per half by a pilot ("weight <= max(P, lb, activation cap)?" with and without them, N seeds, keep iff the median conflict ratio is <= 1) before the half's first probe with cap >= that + 4; until then, and for sparse rows always, GH-148's rule. Fixes the TN_216 regression of GH-148 (Z half). Soundness below (GH-218). See `optimization/experiments/GH-218/`. | | CC engine switch (GH-124 S0, experimental) | `-engine=maxsat` (default) leaves the search above unchanged (byte-identical `-v` logs); `-engine=cc` runs the connected-cluster level search of `src/cc/` on the same CSS split through the same pipe protocol and output; `-engine=auto` is a structural selector (not the default): CC unless a half's parity matrix has a row of weight > 32 or, for n >= 64, a mean row weight > n/4 (pre-S1 rule; every bundled code goes to CC). `-seed=N` (timing seeds): N > 0 sets `random_seed` of every MaxCDCL solver on the MaxSAT path from the application layer (the engine source is unchanged; N = 0 or no flag keeps main's search byte for byte) and equals `-cc-seed=N` with the CC engine. A CC no-answer stop sends `RESULT -1 TRAP` on the pipe, and the parent withdraws the bounds it had received (MaxSAT never sends it). `find_dual_maps` additionally keeps the verified qubit maps (its report output is unchanged). Flags: `-seed`, `-cc-rules`, `-cc-dual`, `-ub-basis`, `-ub-search` and `-cc-ub-*` (GH-140), `-cc-seed`, `-cc-trace`, `-cc-stats`, `-cc-mutant` and `-cc-schedule` (tests only). Conflicting combinations are rejected (exit 1): CC flags without `-engine=cc\|auto`; `-joint`, `-roundingsat`, the dumps and `-native-parity-opb` with `-engine=cc\|auto`; the cardinality flags and `-dualshare-stats` with `-engine=cc` (`-engine=auto` warns about the flags its choice ignores). See `optimization/experiments/GH-124/`. | ### `src/cc/` (GH-124, experimental; new code, not derived from MaxCDCL or any third-party code) @@ -570,6 +571,28 @@ d = 3..5: RESULT = enumeration, every UB >= d, LBs monotone <= d; test mutants ( and 2 (the half's parity rows used as g without the GF(2) check) must give wrong answers. `make test-cc-flags`: values, conflicts, `-v` lines, no output with the flag off. *Evidence.* `optimization/experiments/GH-148/REPORT.md`. +GH-218 (`-stab-overlap-c4=N|off`, `-stab-overlap-pilot=N`, `-stab-overlap-pilot-cap=P`, split MaxSAT path, +`src/core/distqldpc.cc`; defaults 11 / 3 / 12; `-stab-overlap-c4=off` = GH-148's search byte for byte). *What it +changes.* Which of GH-148's verified rows a probe carries. A row g is *dense* if it lies on more than N Tanner 4-cycles +of the same-type stabilizer matrix, c4(g) = sum over the other distinct rows g' of C(|g & g'|, 2). Sparse rows are used +exactly as in GH-148. The dense rows of a half are used as in GH-148 until the half's first probe whose cap is at least +P' + 4, where P' = max(P, the half's lb, the cap from which the -stab-overlap ratio activates every dense row). Before +that probe a pilot runs, once per half, the probe "weight <= P'?" (stop at the first solution) with and without the dense +rows for N solver seeds (the run's seed + 0, 1, ...), and keeps the dense rows for the rest of the half iff the median of +conflicts(with) / conflicts(without) is <= 1 (N = 0: they are dropped at that probe without a pilot). *Why every probe +answer stays the same.* GH-148's argument holds for any subset of the verified rows (see GH-148 above: each row alone +keeps every minimum-weight element of F_h, so FOUND / NONE / OPT are unchanged and every returned solution is an +element of F_h); the gate only chooses a subset, per half and per probe, from information that does not depend on any +probe answer (conflict counts of the pilot probes). The pilot probes' own answers are not used: they only decide. +The decision is a deterministic function of the matrices, the flags and the seed. *Tests.* `make test-cc` Part G: five +more driver configurations with dense rows under the pilot (margin and pilot cap lowered by a test-only knob so that +the pilot runs on the small Part B codes; also pilot off and one seed); Part G (c): the selection of sparse rows equals +a brute-force 4-cycle count on every tier0 code and the tier2 / tier4 TN codes for 7 values of N, the dense flags +partition the verified rows, forced with / without dense rows the probe answers agree at caps d - 1 and d on the tier0 +TN halves, and pilot decisions are reproducible; test mutant 3 (overlaps counted instead of qubit pairs) changes +selections and is caught. `make test-cc-flags`: values, conflicts, `-v` lines, a pilot line on TN_108_2_12 with +`-ub-pre=off`, none with `-stab-overlap-pilot=0`. *Evidence.* `optimization/experiments/GH-218/REPORT.md`. + Fix round 1 (S0a): the S0 spec's literal mutants 3 ("orbit seeds without forbidding earlier orbits") and 4 ("stop rule without checking the other half's lower bound") are equivalent mutants as built: the first only drops a restriction, so every level verdict stays exact; the second skips a check that the lockstep pick order (lowest @@ -647,6 +670,9 @@ not a change to MaxSAT costs or quantum-code distance semantics. See limit a conflict clause (p's literal and lim other true qubits of the row, all false) is returned; at the limit every unassigned qubit of the row is enqueued false with the reason clause OR ~x over the lim true qubits and the implied one (implied literal at position 0) +- `ovHas` / `ovWatched(p)` (GH-218): the two call sites of `ovPropagate` first test inline that p sets a qubit + variable on at least one row true (the only case in which `ovPropagate` does anything), so the propagation is the + same and literals that cannot tighten a row no longer pay a call - `ovClause(r, mask, impliedPos)`: reason/conflict clauses (OR of ~x over a (lim+1)-subset of row r) are allocated on first use with `ca.alloc(lits, false)` and cached by (row, subset) in an open-addressing table; they belong to no clause list and are never watched; a cached clause is reordered when it becomes a reason diff --git a/README.md b/README.md index 38dc7281..0fd89603 100644 --- a/README.md +++ b/README.md @@ -157,6 +157,7 @@ The distance definition, Pauli weight and output format are unchanged. | `-ub-pre=off\|on\|S` | **(GH-144; default `on` = 60 s since 2026-10-23; `-ub-pre=off` restores the previous search)** MaxSAT split only: before the bound search, run the randomized low-weight logical finder of GH-140 on both halves for at most S seconds (each half stops earlier after 16 re-hits of its bound or a plateau of max(1000, 4 x the iteration of its last improvement) iterations; tuning `-ub-pre-hits=H`, `-ub-pre-plateau=P`). The lightest verified word weight U0 is printed as the first `c d_ub`; the doubling probes stop below U0 - 1 and the rest of the search only proves that no logical of weight <= U - 1 exists (probes at U - 1). Every word is checked against the half instance before use; `-seed=N` also seeds the finder. Cost: <= 0.3 s on tiers 1-4, U0 = d on every bundled code with a known distance | | `-ub-isd=off\|stern\|dumer[:P,L,W,B,R]` | **(GH-146; default `stern` since 2026-10-23; `-ub-isd=off` restores the previous finder, the GH-140 enumeration)** Collision mode of the randomized finder used by `-ub-search` (CC) and `-ub-pre` (MaxSAT): a Stern step instead of the 1-2-row enumeration. The information set of each random systematic form is split at random into two halves; all subsets of size <= P of each half are bucketed by the sum of their columns on L random redundancy rows, and every colliding pair whose detector parities differ is weighed (words with up to 2P ones on the information set and none on the window). `dumer` also lets the window coordinates take part in the subsets. Between rounds, W Canteaut-Chabaud pivot swaps re-randomise the information set (0: a fresh elimination); B rounds form one finder iteration; R > 0 forces a fresh elimination every R rounds. Defaults P 2, L automatic (about log2 of the list size), W 32, B 1, R 0. Needs `-ub-search=on\|budget:S` or `-ub-pre=S`; every word is still verified before use | | `-stab-overlap=off\|on\|auto` | **(GH-148; default `auto` since the PI's adoption decision; `-stab-overlap=off` restores the previous search; silently off with `-joint` / `-roundingsat` unless given explicitly)** MaxSAT split only: every probe of a half also requires that at most floor(\|g\|/2) qubits of each same-type stabilizer row g are 1 (rows verified with H g = 0 and G g = 0; a minimum-weight logical always satisfies this, otherwise x + g would be lighter, so no probe answer changes). `on`: all rows in every probe; `auto`: row g only in probes with cap >= 2 (floor(\|g\|/2) + 1) (factor `-stab-overlap-ratio=X`); encoding `-stab-overlap-enc=native\|clauses\|bin\|seq` (default `native`: an "at most k" propagator inside MaxCDCL with lazily created reason clauses; `clauses`: binomial clauses up to \|g\| = 9, sequential counter above). `-frontier-stats` adds a `c OVERLAP` line per probe with the native propagator. `-v` prints the rows used per half and the active rows per probe | +| `-stab-overlap-c4=N\|off`, `-stab-overlap-pilot=N`, `-stab-overlap-pilot-cap=P` | **(GH-218; defaults 11, 3, 12; `-stab-overlap-c4=off` restores GH-148's search)** With `-stab-overlap`: rows g on more than N Tanner 4-cycles of the stabilizer matrix (sum over the other rows g' of C(\|g & g'\|, 2); every weight-9 TN row, no BB/LP/GB row) are *dense*. Before a half's first probe with cap >= P' + 4 (P' = max(P, lb, the cap from which the ratio activates every dense row)) a pilot runs "weight <= P'?" with and without the dense rows for N seeds and keeps them for that half iff the median conflict ratio is <= 1 (N = 0: drop them there). Any row subset is sound, so no answer changes. `-v` / `-frontier-stats` print the decision (`c stab-overlap pilot`, `c OVERLAP-PILOT`) | | `-cc-rules=excl,pack,orbf,parity,leaf,overlap,charge[,tiebreak][,sparse,sparseov,sparsemrv,xorunit][,mrv]` | **(experimental)** CC pruning rules (default `excl,pack,orbf,parity,leaf,overlap,charge` since GH-157; `none` = plain CC; `excl,pack,orbf` = the GH-124 engine, `excl,pack,orbf,parity,leaf` = the GH-133 engine, `excl,pack,orbf,parity,leaf,overlap` = the engine before GH-157): sibling exclusion, disjoint odd-row packing bound, orbit seeds from the verified per-half automorphisms, even-weight parity shortcut (GH-133), leaf hash lookup (GH-133), stabilizer-overlap rule (GH-138: a minimum logical meets every same-type stabilizer row g in at most floor(\|g\|/2) qubits; the rest of a row that reaches this limit is forbidden), `charge` (GH-157: fractional LP-dual charge node lower bound on the qubits still needed; evaluated at remaining budget >= `-cc-lb-minr=K` (default 3) where the packing is exactly at its limit (`-cc-lb-gap=G`, default 0), switched off per half by `-cc-lb-auto=P` (default 40: after a level with >= 100 000 evaluations of which < P % pruned); `-cc-lb-raise=off` drops the charge's raise step), `tiebreak` (GH-162, opt-in, needs `overlap`: for an even row g the tie \|e & g\| = \|g\|/2 is cut unless the first qubit of g lies in e, in a per-seed order that puts the seed first, then the earlier orbits, then descending label; sound because the lexicographically least minimum logical in that order has no such tie and is reached by the seed rule; the first(g) tie-break idea is from Qubitserf 04b9349, S. Cercelescu, MIT), fewest-candidate branching. GH-181, opt-in: `sparse` adds redundant parity rows (sums of two parity rows that are no heavier than the heavier of the two; every logical satisfies them) to the packing bound, scanned lightest first; `sparseov` adds such sums of two stabilizer rows to the overlap rule; `sparsemrv` uses fewest-candidate branching over the parity and redundant rows on halves where `sparse` added rows (together with `mrv` it adds nothing: `mrv` already branches that way on every half); `xorunit` forbids the last free qubit of an even row and branches first on an odd row with one free qubit (not recommended: few nodes saved, slower). Rows are added only on TN_200, TN_250, TN_496 and a few tier-0 codes; the tokens combine with `charge`, `tiebreak` and every `-cc-roworder`; the idea of redundant pair-XOR checks is from Qubitserf 04b9349 (S. Cercelescu, MIT) | | `-cc-dual=on\|off` | **(experimental)** With a verified XZ-dual map, CC searches only the X half (default `on`; `-dualmode=off` also disables it) | | `-cc-aut=on\|off` | **(experimental, GH-152; default `on` since 2026-10-28, PI; `-cc-aut=off` restores the previous CC search)** CC engine only. Tanner-graph automorphism candidates: individualisation-refinement on the coloured Tanner graph (qubits, Hx rows, Hz rows) proposes extra qubit permutations for the orbit seeds and one map exchanging Hx and Hz for the single-half search. Every candidate must pass the same GF(2) checks as the built-in family before it is used. Gives orbit seeds on TN codes the built-in family misses (e.g. TN_288/324/432/540/576, TN_200, TN_250) and a dual map on the LP codes and TN_496; on every other bundled code the CC search is unchanged (identical node counts). Detection takes at most 11 ms. The MaxSAT path never uses it | From 66dc5b6b141f80bbd9b22ad755f997f5535a1d2f Mon Sep 17 00:00:00 2001 From: yfc Date: Wed, 4 Nov 2026 18:52:41 +0800 Subject: [PATCH 10/12] GH-218: default -stab-overlap-pilot=0 (dense rows dropped from cap 16 on); pilot opt-in; OVERLAP-DROP line; docs The cap-12 pilot does not predict the cap-16/17 effect (TN_216 Z at cap 12 over 10 seeds: median conflict ratio 0.97 / 0.92 while the cap-16/17 probes lose 1.03-1.54x), so the default drops the dense rows where the effect shows; below cap 16 (all TN codes of tiers 1-4) the search is GH-148's. Co-Authored-By: Claude Opus 5.5 --- MODIFICATIONS.md | 19 +- README.md | 2 +- .../GH-218/diag/diag_counters.patch | 223 ++++++++++++++++++ .../experiments/GH-218/diag/diag_logs.tgz | Bin 0 -> 54203 bytes .../experiments/GH-218/diag/diag_table.txt | 62 +++++ .../GH-218/diag/pilot_cap_panel.txt | 26 ++ .../GH-218/diag/pilot_seed_panel_d7.txt | 4 + .../experiments/GH-218/runner/c4dist.py | 13 + .../experiments/GH-218/runner/diagtab.py | 12 + .../experiments/GH-218/runner/ident.sh | 18 ++ .../experiments/GH-218/runner/mkp3.sh | 13 + optimization/experiments/GH-218/runner/nbr.py | 13 + .../experiments/GH-218/runner/pair.py | 15 ++ .../experiments/GH-218/runner/rowstats.py | 27 +++ .../experiments/GH-218/runner/run1.sh | 8 + optimization/experiments/GH-218/runner/seq.sh | 6 + .../experiments/GH-218/runner/t5tab.py | 11 + .../experiments/GH-218/runner/u0check.sh | 11 + src/core/distqldpc.cc | 63 +++-- tests/test_cc_engine.cc | 4 +- tests/test_cc_flags.sh | 24 +- 21 files changed, 527 insertions(+), 47 deletions(-) create mode 100644 optimization/experiments/GH-218/diag/diag_counters.patch create mode 100644 optimization/experiments/GH-218/diag/diag_logs.tgz create mode 100644 optimization/experiments/GH-218/diag/diag_table.txt create mode 100644 optimization/experiments/GH-218/diag/pilot_cap_panel.txt create mode 100644 optimization/experiments/GH-218/diag/pilot_seed_panel_d7.txt create mode 100644 optimization/experiments/GH-218/runner/c4dist.py create mode 100644 optimization/experiments/GH-218/runner/diagtab.py create mode 100644 optimization/experiments/GH-218/runner/ident.sh create mode 100644 optimization/experiments/GH-218/runner/mkp3.sh create mode 100644 optimization/experiments/GH-218/runner/nbr.py create mode 100644 optimization/experiments/GH-218/runner/pair.py create mode 100644 optimization/experiments/GH-218/runner/rowstats.py create mode 100755 optimization/experiments/GH-218/runner/run1.sh create mode 100755 optimization/experiments/GH-218/runner/seq.sh create mode 100644 optimization/experiments/GH-218/runner/t5tab.py create mode 100644 optimization/experiments/GH-218/runner/u0check.sh diff --git a/MODIFICATIONS.md b/MODIFICATIONS.md index afb700b6..b704a430 100644 --- a/MODIFICATIONS.md +++ b/MODIFICATIONS.md @@ -34,7 +34,7 @@ New code, not derived from MaxCDCL. | Stern / Dumer collision mode of the shared finder (GH-146; `-ub-isd=off\|stern\|dumer[:P,L,W,B,R]`, default stern since 2026-10-23, PI; `-ub-isd=off` = previous finder, GH-140) | Applies to the CC `-ub-search` finder and to the MaxSAT `-ub-pre` pre-pass (both use `UbFinder`). Per round: W Canteaut-Chabaud pivot swaps on the stored systematic columns (or a fresh elimination), a random split of the information set into two halves and a random window of L reduced rows; all subsets of size <= P of each half (`dumer`: the window pivot columns are elements too), bucketed by the window part of their column sum; every colliding pair with different detector parities is weighed, kept words go through the unchanged detector check, stabilizer local improvement and the driver's / pre-pass's independent verification. Single systematic words are also tried every round. Defaults from S0: P 2, L automatic (about log2 of the list size), W 32, B 1 round per iteration. `-ub-isd=off` = the GH-140 enumeration byte for byte (identical to GH-144's 6d2b7a1 on tier0+1). Soundness below (GH-146). See `optimization/experiments/GH-146/`. | | Tanner-graph automorphism candidates for the CC engine (GH-152; `-cc-aut=on\|off`, default on since 2026-10-28, PI decision; `-cc-aut=off` = previous CC search; experimental) | CC wrapper `min_distance_css_cc` only. With `-cc-aut=on`, `distcc::find_row_automorphisms` (`src/cc/cc_aut.{h,cc}`) proposes colour-preserving automorphisms of the Tanner graph (qubits, Hx rows, Hz rows) and one map exchanging the Hx and Hz rows. The generators are tried as extra candidates in `find_half_symmetry` after the GH-75 family, under the same two GF(2) checks (new optional arguments, default = old behaviour). The swap map is offered to `verify_dual_perm` (new, the `find_dual_maps` check for one map) only when `find_dual_maps` finds no map. `-v` prints `c cc aut:` lines. With `-cc-aut=off` no line of any log changes (identity verified on tier0+1, both engines); since the default flip (2026-10-28) the default MaxSAT path is still byte-identical, and the default CC path equals `-cc-aut=on`. Test mutants 13/14 (candidates or the swap map used without the GF(2) check). The MaxSAT path is unchanged. Soundness below (GH-152). See `optimization/experiments/GH-152/`. | | Stabilizer-overlap dominance constraints in the MaxSAT split (GH-148; `-stab-overlap=off\|on\|auto`, default auto since the PI's adoption decision; `-stab-overlap=off` = previous search; silently off with -joint/-roundingsat unless given explicitly) | Split MaxSAT path only (an explicit `-stab-overlap=on\|auto` is refused with -joint/-roundingsat/-engine=cc). For every CSS half, the rows g of the same-type stabilizer matrix (X half: Hx; Z half: Hz) that pass a GF(2) check Hpar g = 0 and Glog g = 0 on the input matrices (duplicates removed) give the constraint "at most floor(\|g\|/2) of the qubits of g are 1" in each probe: by default (`-stab-overlap-enc=native`) as a native propagator inside MaxCDCL (`Solver::setOverlapRows`, set by `run_css_half` after `build_css_half`; see the `Solver.h` / `Solver.cc` section), or as clauses (`add_overlap_constraints` at the end of `build_css_half`): `clauses` = binomial clauses for \|g\| <= 9 and Sinz's sequential counter above, `bin` / `seq` = one of them for every row. `on`: every verified row in every probe; `auto`: row g only in probes of cap c >= 2 (floor(\|g\|/2) + 1) (`-stab-overlap-ratio=X` sets the factor). With `-stab-overlap=off` the instance and the `-v` log are those of the search before the adoption byte for byte (main e52d15b; identity verified on tier0+1 x 2 modes). Soundness below (GH-148). See `optimization/experiments/GH-148/`. | -| Dense overlap rows under a per-half pilot (GH-218; `-stab-overlap-c4=N\|off` default 11, `-stab-overlap-pilot=N` default 3, `-stab-overlap-pilot-cap=P` default 12; `-stab-overlap-c4=off` = GH-148's search byte for byte) | Split MaxSAT path, with `-stab-overlap=on\|auto`. Rows on more than N Tanner 4-cycles of the stabilizer matrix (every weight-9 TN row; no BB/LP/GB row) are kept or dropped per half by a pilot ("weight <= max(P, lb, activation cap)?" with and without them, N seeds, keep iff the median conflict ratio is <= 1) before the half's first probe with cap >= that + 4; until then, and for sparse rows always, GH-148's rule. Fixes the TN_216 regression of GH-148 (Z half). Soundness below (GH-218). See `optimization/experiments/GH-218/`. | +| Dense overlap rows dropped from cap 16 on (GH-218; `-stab-overlap-c4=N\|off` default 11, `-stab-overlap-pilot=N` default 0, `-stab-overlap-pilot-cap=P` default 12; `-stab-overlap-c4=off` = GH-148's search byte for byte) | Split MaxSAT path, with `-stab-overlap=on\|auto`. Rows on more than N Tanner 4-cycles of the stabilizer matrix (every weight-9 TN row; no BB/LP/GB row) are used as in GH-148 until a half's first probe with cap >= P' + 4 (P' = max(P, lb, activation cap); 16 on the TN codes) and dropped from there on; opt-in `-stab-overlap-pilot=N` > 0 decides per half by a pilot instead ("weight <= P'?" with and without them, N seeds, keep iff the median conflict ratio is <= 1). Sparse rows always as in GH-148. Removes the TN_216 regression of GH-148 (Z half). Soundness below (GH-218). See `optimization/experiments/GH-218/`. | | CC engine switch (GH-124 S0, experimental) | `-engine=maxsat` (default) leaves the search above unchanged (byte-identical `-v` logs); `-engine=cc` runs the connected-cluster level search of `src/cc/` on the same CSS split through the same pipe protocol and output; `-engine=auto` is a structural selector (not the default): CC unless a half's parity matrix has a row of weight > 32 or, for n >= 64, a mean row weight > n/4 (pre-S1 rule; every bundled code goes to CC). `-seed=N` (timing seeds): N > 0 sets `random_seed` of every MaxCDCL solver on the MaxSAT path from the application layer (the engine source is unchanged; N = 0 or no flag keeps main's search byte for byte) and equals `-cc-seed=N` with the CC engine. A CC no-answer stop sends `RESULT -1 TRAP` on the pipe, and the parent withdraws the bounds it had received (MaxSAT never sends it). `find_dual_maps` additionally keeps the verified qubit maps (its report output is unchanged). Flags: `-seed`, `-cc-rules`, `-cc-dual`, `-ub-basis`, `-ub-search` and `-cc-ub-*` (GH-140), `-cc-seed`, `-cc-trace`, `-cc-stats`, `-cc-mutant` and `-cc-schedule` (tests only). Conflicting combinations are rejected (exit 1): CC flags without `-engine=cc\|auto`; `-joint`, `-roundingsat`, the dumps and `-native-parity-opb` with `-engine=cc\|auto`; the cardinality flags and `-dualshare-stats` with `-engine=cc` (`-engine=auto` warns about the flags its choice ignores). See `optimization/experiments/GH-124/`. | ### `src/cc/` (GH-124, experimental; new code, not derived from MaxCDCL or any third-party code) @@ -572,19 +572,20 @@ and 2 (the half's parity rows used as g without the GF(2) check) must give wrong values, conflicts, `-v` lines, no output with the flag off. *Evidence.* `optimization/experiments/GH-148/REPORT.md`. GH-218 (`-stab-overlap-c4=N|off`, `-stab-overlap-pilot=N`, `-stab-overlap-pilot-cap=P`, split MaxSAT path, -`src/core/distqldpc.cc`; defaults 11 / 3 / 12; `-stab-overlap-c4=off` = GH-148's search byte for byte). *What it +`src/core/distqldpc.cc`; defaults 11 / 0 / 12; `-stab-overlap-c4=off` = GH-148's search byte for byte). *What it changes.* Which of GH-148's verified rows a probe carries. A row g is *dense* if it lies on more than N Tanner 4-cycles of the same-type stabilizer matrix, c4(g) = sum over the other distinct rows g' of C(|g & g'|, 2). Sparse rows are used exactly as in GH-148. The dense rows of a half are used as in GH-148 until the half's first probe whose cap is at least -P' + 4, where P' = max(P, the half's lb, the cap from which the -stab-overlap ratio activates every dense row). Before -that probe a pilot runs, once per half, the probe "weight <= P'?" (stop at the first solution) with and without the dense -rows for N solver seeds (the run's seed + 0, 1, ...), and keeps the dense rows for the rest of the half iff the median of -conflicts(with) / conflicts(without) is <= 1 (N = 0: they are dropped at that probe without a pilot). *Why every probe +P' + 4, where P' = max(P, the half's lb, the cap from which the -stab-overlap ratio activates every dense row), and are +dropped from that probe on. With `-stab-overlap-pilot=N` > 0 (opt-in) a pilot runs instead, once per half, the probe +"weight <= P'?" (stop at the first solution) with and without the dense rows for N solver seeds (the run's seed + 0, 1, +...), and keeps the dense rows for the rest of the half iff the median of conflicts(with) / conflicts(without) is <= 1. +*Why every probe answer stays the same.* GH-148's argument holds for any subset of the verified rows (see GH-148 above: each row alone keeps every minimum-weight element of F_h, so FOUND / NONE / OPT are unchanged and every returned solution is an -element of F_h); the gate only chooses a subset, per half and per probe, from information that does not depend on any -probe answer (conflict counts of the pilot probes). The pilot probes' own answers are not used: they only decide. -The decision is a deterministic function of the matrices, the flags and the seed. *Tests.* `make test-cc` Part G: five +element of F_h); the gate only chooses a subset per half and probe (from the 4-cycle counts, the probe's cap, the half's +lb and, with the pilot, conflict counts), and any choice is sound. The pilot probes' own answers are not used: they only +decide. The choice is a deterministic function of the matrices, the flags and the seed. *Tests.* `make test-cc` Part G: five more driver configurations with dense rows under the pilot (margin and pilot cap lowered by a test-only knob so that the pilot runs on the small Part B codes; also pilot off and one seed); Part G (c): the selection of sparse rows equals a brute-force 4-cycle count on every tier0 code and the tier2 / tier4 TN codes for 7 values of N, the dense flags diff --git a/README.md b/README.md index 0fd89603..c494e6ee 100644 --- a/README.md +++ b/README.md @@ -157,7 +157,7 @@ The distance definition, Pauli weight and output format are unchanged. | `-ub-pre=off\|on\|S` | **(GH-144; default `on` = 60 s since 2026-10-23; `-ub-pre=off` restores the previous search)** MaxSAT split only: before the bound search, run the randomized low-weight logical finder of GH-140 on both halves for at most S seconds (each half stops earlier after 16 re-hits of its bound or a plateau of max(1000, 4 x the iteration of its last improvement) iterations; tuning `-ub-pre-hits=H`, `-ub-pre-plateau=P`). The lightest verified word weight U0 is printed as the first `c d_ub`; the doubling probes stop below U0 - 1 and the rest of the search only proves that no logical of weight <= U - 1 exists (probes at U - 1). Every word is checked against the half instance before use; `-seed=N` also seeds the finder. Cost: <= 0.3 s on tiers 1-4, U0 = d on every bundled code with a known distance | | `-ub-isd=off\|stern\|dumer[:P,L,W,B,R]` | **(GH-146; default `stern` since 2026-10-23; `-ub-isd=off` restores the previous finder, the GH-140 enumeration)** Collision mode of the randomized finder used by `-ub-search` (CC) and `-ub-pre` (MaxSAT): a Stern step instead of the 1-2-row enumeration. The information set of each random systematic form is split at random into two halves; all subsets of size <= P of each half are bucketed by the sum of their columns on L random redundancy rows, and every colliding pair whose detector parities differ is weighed (words with up to 2P ones on the information set and none on the window). `dumer` also lets the window coordinates take part in the subsets. Between rounds, W Canteaut-Chabaud pivot swaps re-randomise the information set (0: a fresh elimination); B rounds form one finder iteration; R > 0 forces a fresh elimination every R rounds. Defaults P 2, L automatic (about log2 of the list size), W 32, B 1, R 0. Needs `-ub-search=on\|budget:S` or `-ub-pre=S`; every word is still verified before use | | `-stab-overlap=off\|on\|auto` | **(GH-148; default `auto` since the PI's adoption decision; `-stab-overlap=off` restores the previous search; silently off with `-joint` / `-roundingsat` unless given explicitly)** MaxSAT split only: every probe of a half also requires that at most floor(\|g\|/2) qubits of each same-type stabilizer row g are 1 (rows verified with H g = 0 and G g = 0; a minimum-weight logical always satisfies this, otherwise x + g would be lighter, so no probe answer changes). `on`: all rows in every probe; `auto`: row g only in probes with cap >= 2 (floor(\|g\|/2) + 1) (factor `-stab-overlap-ratio=X`); encoding `-stab-overlap-enc=native\|clauses\|bin\|seq` (default `native`: an "at most k" propagator inside MaxCDCL with lazily created reason clauses; `clauses`: binomial clauses up to \|g\| = 9, sequential counter above). `-frontier-stats` adds a `c OVERLAP` line per probe with the native propagator. `-v` prints the rows used per half and the active rows per probe | -| `-stab-overlap-c4=N\|off`, `-stab-overlap-pilot=N`, `-stab-overlap-pilot-cap=P` | **(GH-218; defaults 11, 3, 12; `-stab-overlap-c4=off` restores GH-148's search)** With `-stab-overlap`: rows g on more than N Tanner 4-cycles of the stabilizer matrix (sum over the other rows g' of C(\|g & g'\|, 2); every weight-9 TN row, no BB/LP/GB row) are *dense*. Before a half's first probe with cap >= P' + 4 (P' = max(P, lb, the cap from which the ratio activates every dense row)) a pilot runs "weight <= P'?" with and without the dense rows for N seeds and keeps them for that half iff the median conflict ratio is <= 1 (N = 0: drop them there). Any row subset is sound, so no answer changes. `-v` / `-frontier-stats` print the decision (`c stab-overlap pilot`, `c OVERLAP-PILOT`) | +| `-stab-overlap-c4=N\|off`, `-stab-overlap-pilot=N`, `-stab-overlap-pilot-cap=P` | **(GH-218; defaults 11, 0, 12; `-stab-overlap-c4=off` restores GH-148's search)** With `-stab-overlap`: rows g on more than N Tanner 4-cycles of the stabilizer matrix (sum over the other rows g' of C(\|g & g'\|, 2); every weight-9 TN row, no BB/LP/GB row) are *dense*. They are used as in GH-148 until a half's first probe with cap >= P' + 4 (P' = max(P, lb, the cap from which the ratio activates every dense row); 16 on the TN codes) and dropped from there on. With `-stab-overlap-pilot=N` > 0 (opt-in) a pilot instead runs "weight <= P'?" with and without the dense rows for N seeds and keeps them iff the median conflict ratio is <= 1. Any row subset is sound, so no answer changes. `-v` / `-frontier-stats` print the decision (`c stab-overlap ... dropped`, `c OVERLAP-DROP`; with a pilot `c stab-overlap pilot`, `c OVERLAP-PILOT`) | | `-cc-rules=excl,pack,orbf,parity,leaf,overlap,charge[,tiebreak][,sparse,sparseov,sparsemrv,xorunit][,mrv]` | **(experimental)** CC pruning rules (default `excl,pack,orbf,parity,leaf,overlap,charge` since GH-157; `none` = plain CC; `excl,pack,orbf` = the GH-124 engine, `excl,pack,orbf,parity,leaf` = the GH-133 engine, `excl,pack,orbf,parity,leaf,overlap` = the engine before GH-157): sibling exclusion, disjoint odd-row packing bound, orbit seeds from the verified per-half automorphisms, even-weight parity shortcut (GH-133), leaf hash lookup (GH-133), stabilizer-overlap rule (GH-138: a minimum logical meets every same-type stabilizer row g in at most floor(\|g\|/2) qubits; the rest of a row that reaches this limit is forbidden), `charge` (GH-157: fractional LP-dual charge node lower bound on the qubits still needed; evaluated at remaining budget >= `-cc-lb-minr=K` (default 3) where the packing is exactly at its limit (`-cc-lb-gap=G`, default 0), switched off per half by `-cc-lb-auto=P` (default 40: after a level with >= 100 000 evaluations of which < P % pruned); `-cc-lb-raise=off` drops the charge's raise step), `tiebreak` (GH-162, opt-in, needs `overlap`: for an even row g the tie \|e & g\| = \|g\|/2 is cut unless the first qubit of g lies in e, in a per-seed order that puts the seed first, then the earlier orbits, then descending label; sound because the lexicographically least minimum logical in that order has no such tie and is reached by the seed rule; the first(g) tie-break idea is from Qubitserf 04b9349, S. Cercelescu, MIT), fewest-candidate branching. GH-181, opt-in: `sparse` adds redundant parity rows (sums of two parity rows that are no heavier than the heavier of the two; every logical satisfies them) to the packing bound, scanned lightest first; `sparseov` adds such sums of two stabilizer rows to the overlap rule; `sparsemrv` uses fewest-candidate branching over the parity and redundant rows on halves where `sparse` added rows (together with `mrv` it adds nothing: `mrv` already branches that way on every half); `xorunit` forbids the last free qubit of an even row and branches first on an odd row with one free qubit (not recommended: few nodes saved, slower). Rows are added only on TN_200, TN_250, TN_496 and a few tier-0 codes; the tokens combine with `charge`, `tiebreak` and every `-cc-roworder`; the idea of redundant pair-XOR checks is from Qubitserf 04b9349 (S. Cercelescu, MIT) | | `-cc-dual=on\|off` | **(experimental)** With a verified XZ-dual map, CC searches only the X half (default `on`; `-dualmode=off` also disables it) | | `-cc-aut=on\|off` | **(experimental, GH-152; default `on` since 2026-10-28, PI; `-cc-aut=off` restores the previous CC search)** CC engine only. Tanner-graph automorphism candidates: individualisation-refinement on the coloured Tanner graph (qubits, Hx rows, Hz rows) proposes extra qubit permutations for the orbit seeds and one map exchanging Hx and Hz for the single-half search. Every candidate must pass the same GF(2) checks as the built-in family before it is used. Gives orbit seeds on TN codes the built-in family misses (e.g. TN_288/324/432/540/576, TN_200, TN_250) and a dual map on the LP codes and TN_496; on every other bundled code the CC search is unchanged (identical node counts). Detection takes at most 11 ms. The MaxSAT path never uses it | diff --git a/optimization/experiments/GH-218/diag/diag_counters.patch b/optimization/experiments/GH-218/diag/diag_counters.patch new file mode 100644 index 00000000..e9433e62 --- /dev/null +++ b/optimization/experiments/GH-218/diag/diag_counters.patch @@ -0,0 +1,223 @@ +diff --git a/src/core/distqldpc.cc b/src/core/distqldpc.cc +index a308a959..09a3a0d7 100644 +--- a/src/core/distqldpc.cc ++++ b/src/core/distqldpc.cc +@@ -1240,8 +1240,14 @@ static HalfStatus run_css_half(CssHalf& h, uint64_t cap, bool first_only, int ve + OvlRows ovl_active; /* GH-148: rows active in this probe (any subset of the verified rows is sound) */ + if (!h.ovl.empty()) { + for (size_t r = 0; r < h.ovl.size(); r++) +- if (g_stab_overlap_ratio <= 0.0 || (double)cap >= g_stab_overlap_ratio * (double)(h.ovl[r].size() / 2 + 1)) ++ if (g_stab_overlap_ratio <= 0.0 || (double)cap >= g_stab_overlap_ratio * (double)(h.ovl[r].size() / 2 + 1)) { ++ const int w = (int)h.ovl[r].size(); ++ if (getenv("DQ_OV_MINW") && w < atoi(getenv("DQ_OV_MINW"))) continue; ++ if (getenv("DQ_OV_MAXW") && w > atoi(getenv("DQ_OV_MAXW"))) continue; ++ if (getenv("DQ_OV_EVEN") && (w & 1)) continue; ++ if (getenv("DQ_OV_ODD") && !(w & 1)) continue; + ovl_active.push_back(h.ovl[r]); ++ } + if (verb > 0) { + printf("c stab-overlap %s cap %llu: %zu of %zu rows active (ratio %.2f)\n", h.tag, (unsigned long long)cap, + ovl_active.size(), h.ovl.size(), g_stab_overlap_ratio); +@@ -1275,7 +1281,24 @@ static HalfStatus run_css_half(CssHalf& h, uint64_t cap, bool first_only, int ve + S.frontierCheck = g_frontier_check; + } + vec dummy; ++ if (getenv("DQ_OV_VARIANT")) S.dgVariant = atoi(getenv("DQ_OV_VARIANT")); ++ const double dg_t0 = cpuTime(); + lbool ret = S.solveLimited(dummy); ++ if (getenv("DQ_DIAG")) { ++ const double dg_ticks_scale = 1.0 / 2.25e9; /* EPYC 7742 base clock (rdtsc rate) */ ++ fprintf(stderr, "c DIAG %s cap %llu %s: cpu %.3f conflicts %llu decisions %llu props %llu lkprops %llu lookahead %llu lksucc %llu " ++ "rows %zu ovcallsM %llu ovcallsL %llu ovrows %llu ovprops %llu ovpropsL %llu ovconfl %llu ovconflL %llu ovfalseL %llu " ++ "anares %llu anaov %llu learntlits %llu tM %.3f tL %.3f cached %zu redcalls %llu\n", h.tag, (unsigned long long)cap, ++ first_only ? "feasibility" : "optimize", cpuTime() - dg_t0, (unsigned long long)S.conflicts, ++ (unsigned long long)S.decisions, (unsigned long long)S.propagations, (unsigned long long)S.lk_propagations, ++ (unsigned long long)S.LOOKAHEAD, (unsigned long long)S.nbLKsuccess, ovl_active.size(), ++ (unsigned long long)S.dgCallsM, (unsigned long long)S.dgCallsL, (unsigned long long)S.dgRows, ++ (unsigned long long)S.ovProps, (unsigned long long)S.dgPropsL, (unsigned long long)S.ovConfls, ++ (unsigned long long)S.dgConflL, (unsigned long long)S.dgFalseL, (unsigned long long)S.dgAnaRes, ++ (unsigned long long)S.dgAnaOv, (unsigned long long)S.dgLearntLits, S.dgTicksM * dg_ticks_scale, ++ S.dgTicksL * dg_ticks_scale, S.ovCacheList.size(), (unsigned long long)S.dgRedCalls); ++ fflush(stderr); ++ } + if (g_frontier_stats || (h.frontier && g_frontier_check)) { /* stats also with -frontier=off (main's search) */ + fprintf(stderr, "c FRONTIER %s cap %llu %s: conflicts %llu decisions %llu frontier_picks %llu fallbacks %llu " + "no_eligible %llu mean_odd_rows %.2f check_fails %llu\n", h.tag, (unsigned long long)cap, +@@ -1682,6 +1705,17 @@ static int min_distance_css_interleaved( + } + } + uint64_t U = INF, v = 0, lastLB = 0; ++ if (getenv("DQ_DIAG_PROBE")) { /* DIAG: HALF:CAP:LB, one feasibility probe, then exit */ ++ char hc = 'X'; unsigned long long dcap = 0, dlb = 0; ++ if (sscanf(getenv("DQ_DIAG_PROBE"), "%c:%llu:%llu", &hc, &dcap, &dlb) != 3) die("DQ_DIAG_PROBE=HALF:CAP:LB"); ++ CssHalf& h = hs[hc == 'Z' ? 1 : 0]; ++ h.lb = dlb; ++ HalfStatus st = run_css_half(h, dcap, true, verb, card_mode, pipe_w, INF, INF, true, v); ++ fprintf(stderr, "c DIAGPROBE %c cap %llu -> %s\n", hc, dcap, st == HALF_FOUND ? "FOUND" : st == HALF_NONE ? "NONE" : "OTHER"); ++ fflush(stderr); ++ pipe_write_result(pipe_w, -1, false); ++ return -1; ++ } + bool seeded = false; /* GH-144: U holds a verified -ub-pre word (never without -ub-pre) */ + if (g_ub_pre >= 0) { + const Matrix* Ss[2] = { &Hx, &Hz }; /* same-type stabilizers: X half Hx, Z half Hz */ +diff --git a/src/solver/Solver.cc b/src/solver/Solver.cc +index 54446a84..d12b4586 100644 +--- a/src/solver/Solver.cc ++++ b/src/solver/Solver.cc +@@ -1,3 +1,6 @@ ++#ifdef OVDIAG_TIME ++#include ++#endif + /***************************************************************************************[Solver.cc] + MiniSat -- Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson + Copyright (c) 2007-2010, Niklas Sorensson +@@ -456,7 +459,7 @@ bool Solver::removed(CRef cr) { + } + + void Solver::simplereduceClause(CRef cr, int pathC) { +- if (ovIsClause(cr)) return; // GH-148: cached overlap reasons are shared and unwatched: never reduced ++ dgRedCalls++; if (ovIsClause(cr)) return; // GH-148: cached overlap reasons are shared and unwatched: never reduced + nbFlyReduced++; + Clause& c=ca[cr]; + assert(value(c[0]) == l_True); +@@ -1582,7 +1585,7 @@ Lit Solver::pickBranchLit() + } + + void Solver::reduceClause(CRef cr, int pathC) { +- if (ovIsClause(cr)) return; // GH-148: cached overlap reasons are shared and unwatched: never reduced ++ dgRedCalls++; if (ovIsClause(cr)) return; // GH-148: cached overlap reasons are shared and unwatched: never reduced + nbFlyReduced++; + Clause& c=ca[cr]; + assert(value(c[0]) == l_True); +@@ -1694,12 +1697,12 @@ void Solver::analyze(CRef confl, vec& out_learnt, int& out_btlevel, int& ou + // printf("c bin bin...\n"); + } + else { +- updateClauseUse(confl); ++ updateClauseUse(confl); const bool dgNB0 = (dgVariant & 4) && ovIsClause(confl); + Clause& c = ca[confl]; + for(int i= 0; i 0) { + Var v=var(c[i]); +- if (VSIDS){ ++ if (dgNB0) {} else if (VSIDS){ + varBumpActivity(v, .5); + add_tmp.push(c[i]); + }else +@@ -1721,6 +1724,7 @@ void Solver::analyze(CRef confl, vec& out_learnt, int& out_btlevel, int& ou + assert(confl != CRef_Undef); // (otherwise should be UIP) + else + break; ++ if ((dgVariant & 8) && !ovRows.empty()) { dgAnaRes++; if (confl != CRef_Bin && ovIsClause(confl)) dgAnaOv++; } const bool dgNB = (dgVariant & 4) && confl != CRef_Bin && ovIsClause(confl); + Clause& c = ca[confl]; + // For binary clauses, we don't rearrange literals in propagate(), so check and make sure the first is an implied lit. + if (c.size() == 2 && value(c[0]) == l_False){ +@@ -1739,7 +1743,7 @@ void Solver::analyze(CRef confl, vec& out_learnt, int& out_btlevel, int& ou + nbSeen++; + else /*if (!redundantLit(q))*/ { + nbNotSeen++; +- if (VSIDS){ ++ if (dgNB) {} else if (VSIDS){ + varBumpActivity(v, .5); + add_tmp.push(q); + }else +@@ -1758,6 +1762,7 @@ void Solver::analyze(CRef confl, vec& out_learnt, int& out_btlevel, int& ou + reduceClause(confl, pathC); //printf("a\n"); + } + out_learnt[0] = ~p; ++ dgLearntLits += out_learnt.size(); + + simplifyConflictClause(out_learnt, out_btlevel, out_lbd); + +@@ -2067,8 +2072,14 @@ CRef Solver::propagate() + NextClause:; + } + ws.shrink(i - j); +- if (!ovRows.empty() && confl == CRef_Undef) { // GH-148 native overlap rows (inactive when empty) ++ if (!ovRows.empty() && confl == CRef_Undef && !(dgVariant & 2)) { // GH-148 native overlap rows (inactive when empty) ++#ifdef OVDIAG_TIME ++ uint64_t t0 = __rdtsc(); ++#endif + CRef oc = ovPropagate(p, false); ++#ifdef OVDIAG_TIME ++ dgTicksM += __rdtsc() - t0; ++#endif + if (oc != CRef_Undef) { confl = oc; qhead = trail.size(); } + } + // if (confl == CRef_Undef) +@@ -2372,7 +2383,7 @@ void Solver::analyzeSoftConflict(vec& out_learnt, int& out_btlevel, int& ou + // c.setUsed(1); + // } + // } +- int nbSeen=0, nbNotSeen = 0; ++ int nbSeen=0, nbNotSeen = 0; const bool dgNB = (dgVariant & 4) && confl != CRef_Bin && ovIsClause(confl); + int resolventSize=pathC + out_learnt.size() - 1; + for (int j = 1; j < c.size(); j++){ + Lit q = c[j]; Var v = var(q); +@@ -2382,7 +2393,7 @@ void Solver::analyzeSoftConflict(vec& out_learnt, int& out_btlevel, int& ou + else { + // if (level(v) > 0 && !seen[v] && !redundantLit(q)) { + nbNotSeen++; +- if (VSIDS){ ++ if (dgNB) {} else if (VSIDS){ + varBumpActivity(v, .5); + add_tmp.push(q); + }else +@@ -4053,8 +4064,14 @@ CRef Solver::propagateForLK() { + NextClause:; + } + ws.shrink(i - j); +- if (!ovRows.empty() && confl == CRef_Undef && falseVar == var_Undef) { // GH-148 (inactive when empty) ++ if (!ovRows.empty() && confl == CRef_Undef && falseVar == var_Undef && !(dgVariant & 1)) { // GH-148 (inactive when empty) ++#ifdef OVDIAG_TIME ++ uint64_t t0 = __rdtsc(); ++#endif + CRef oc = ovPropagate(p, true); ++#ifdef OVDIAG_TIME ++ dgTicksL += __rdtsc() - t0; ++#endif + if (oc != CRef_Undef) { confl = oc; qhead = trail.size(); } + else if (falseVar != var_Undef) qhead = trail.size(); + } +@@ -7424,6 +7441,8 @@ CRef Solver::ovPropagate(Lit p, bool lk) + const Var v = var(p); + if ((size_t)v >= ovColRows.size()) return CRef_Undef; + const std::vector& rs = ovColRows[(size_t)v]; ++ if (lk) dgCallsL++; else dgCallsM++; ++ dgRows += rs.size(); + for (size_t a = 0; a < rs.size(); a++) { + const int r = rs[a]; + const std::vector& row = ovRows[(size_t)r]; +@@ -7438,15 +7457,15 @@ CRef Solver::ovPropagate(Lit p, bool lk) + uint32_t m = 0; int c = 1; + for (size_t t = 0; t < row.size(); t++) if (row[t] == v) m |= 1u << t; + for (size_t t = 0; t < row.size() && c <= lim; t++) if (((tmask & ~m) >> t) & 1) { m |= 1u << t; c++; } +- ovConfls++; ++ ovConfls++; if (lk) dgConflL++; + return ovClause(r, m, -1); + } + if (cnt == lim && umask) { + for (size_t t = 0; t < row.size(); t++) { + if (!((umask >> t) & 1) || value(row[t]) != l_Undef) continue; + CRef cr = ovClause(r, tmask | (1u << t), (int)t); +- ovProps++; +- if (lk) { if (!uncheckedEnqueueForLK(~mkLit(row[t]), cr)) { falseVar = row[t]; return CRef_Undef; } } ++ ovProps++; if (lk) dgPropsL++; ++ if (lk) { if (!uncheckedEnqueueForLK(~mkLit(row[t]), cr)) { dgFalseL++; falseVar = row[t]; return CRef_Undef; } } + else uncheckedEnqueue(~mkLit(row[t]), cr); + } + } +diff --git a/src/solver/Solver.h b/src/solver/Solver.h +index d6a3e7e8..76c8e79e 100644 +--- a/src/solver/Solver.h ++++ b/src/solver/Solver.h +@@ -600,6 +600,8 @@ public: + std::vector > ovCacheList; // (key, cref) for relocation + std::vector ovCacheIdx; // open addressing table into ovCacheList (-1 empty) + uint64_t ovProps = 0, ovConfls = 0; ++ uint64_t dgCallsM = 0, dgCallsL = 0, dgRows = 0, dgPropsL = 0, dgConflL = 0, dgFalseL = 0, dgTicksM = 0, dgTicksL = 0, dgAnaOv = 0, dgAnaRes = 0, dgLearntLits = 0; ++ int dgVariant = 0; uint64_t dgRedCalls = 0; // DIAG: bit0 skip ov in LK, bit1 skip ov in main propagate + std::unordered_set ovCrefs; // the cached crefs: on-the-fly clause reduction skips them + bool ovIsClause(CRef cr) const { return !ovRows.empty() && ovCrefs.count((uint32_t)cr) > 0; } + void setOverlapRows(const std::vector >& rows, const std::vector& lims, int nQubits); diff --git a/optimization/experiments/GH-218/diag/diag_logs.tgz b/optimization/experiments/GH-218/diag/diag_logs.tgz new file mode 100644 index 0000000000000000000000000000000000000000..67af4efa128cce420f87d9b50733f7b71cbf5fcd GIT binary patch literal 54203 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 z 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 literal 0 HcmV?d00001 diff --git a/optimization/experiments/GH-218/diag/diag_table.txt b/optimization/experiments/GH-218/diag/diag_table.txt new file mode 100644 index 00000000..836e144f --- /dev/null +++ b/optimization/experiments/GH-218/diag/diag_table.txt @@ -0,0 +1,62 @@ +BB288_X16_auto.log X16 cpu 8.8 confl 42240 us/cf 209.1 lkp/cf 1565 p/cf 75 look/cf 1.73 ovp/cf 0.449 ovpL/cf 1.275 ovcf% 0.89 anaov% 1.15 lrn/cf 0.31 tM 0.0 tL 0.0 +BB288_X16_off.log X16 cpu 48.5 confl 207421 us/cf 234.0 lkp/cf 1357 p/cf 59 look/cf 1.56 ovp/cf 0.000 ovpL/cf 0.000 ovcf% 0.00 anaov% 0.00 lrn/cf 4.18 tM 0.0 tL 0.0 +LP544_X10_auto.log X10 cpu 6.2 confl 9238 us/cf 669.3 lkp/cf 4856 p/cf 147 look/cf 1.71 ovp/cf 0.014 ovpL/cf 0.121 ovcf% 0.39 anaov% 0.05 lrn/cf 0.72 tM 0.0 tL 0.0 +LP544_X10_off.log X10 cpu 9.5 confl 14757 us/cf 643.8 lkp/cf 4408 p/cf 138 look/cf 1.63 ovp/cf 0.000 ovpL/cf 0.000 ovcf% 0.00 anaov% 0.00 lrn/cf 2.51 tM 0.0 tL 0.0 +TN144_X12_auto.log X12 cpu 46.1 confl 280391 us/cf 164.3 lkp/cf 530 p/cf 25 look/cf 1.38 ovp/cf 0.057 ovpL/cf 0.287 ovcf% 0.26 anaov% 0.98 lrn/cf 0.89 tM 0.0 tL 0.0 +TN144_X12_off.log X12 cpu 41.5 confl 263131 us/cf 157.7 lkp/cf 523 p/cf 25 look/cf 1.38 ovp/cf 0.000 ovpL/cf 0.000 ovcf% 0.00 anaov% 0.00 lrn/cf 0.86 tM 0.0 tL 0.0 +TN144_Z12_auto.log Z12 cpu 39.5 confl 258558 us/cf 152.8 lkp/cf 524 p/cf 24 look/cf 1.38 ovp/cf 0.055 ovpL/cf 0.294 ovcf% 0.28 anaov% 1.16 lrn/cf 0.87 tM 0.0 tL 0.0 +TN144_Z12_off.log Z12 cpu 32.5 confl 223833 us/cf 145.3 lkp/cf 508 p/cf 24 look/cf 1.38 ovp/cf 0.000 ovpL/cf 0.000 ovcf% 0.00 anaov% 0.00 lrn/cf 0.88 tM 0.0 tL 0.0 +TN180_X16_mto_auto.log X16 cpu 3951.1 confl 6924113 us/cf 570.6 lkp/cf 661 p/cf 25 look/cf 1.40 ovp/cf 0.167 ovpL/cf 0.455 ovcf% 0.39 anaov% 2.24 lrn/cf 0.84 tM 0.0 tL 0.0 +TN180_X16_mto_off.log X16 cpu 9061.8 confl 13295888 us/cf 681.6 lkp/cf 664 p/cf 23 look/cf 1.39 ovp/cf 0.000 ovpL/cf 0.000 ovcf% 0.00 anaov% 0.00 lrn/cf 0.54 tM 0.0 tL 0.0 +TN180_X16_mto_s1_auto.log X16 cpu 3031.7 confl 5724700 us/cf 529.6 lkp/cf 663 p/cf 25 look/cf 1.40 ovp/cf 0.166 ovpL/cf 0.453 ovcf% 0.39 anaov% 2.15 lrn/cf 0.81 tM 0.0 tL 0.0 +TN180_X16_mto_s1_off.log X16 cpu 7576.8 confl 12027889 us/cf 629.9 lkp/cf 675 p/cf 24 look/cf 1.39 ovp/cf 0.000 ovpL/cf 0.000 ovcf% 0.00 anaov% 0.00 lrn/cf 0.55 tM 0.0 tL 0.0 +TN180_X16_mto_s2_auto.log X16 cpu 3305.1 confl 6272505 us/cf 526.9 lkp/cf 657 p/cf 25 look/cf 1.40 ovp/cf 0.158 ovpL/cf 0.444 ovcf% 0.41 anaov% 2.10 lrn/cf 0.79 tM 0.0 tL 0.0 +TN180_X16_mto_s2_off.log X16 cpu 5609.2 confl 9499484 us/cf 590.5 lkp/cf 671 p/cf 24 look/cf 1.39 ovp/cf 0.000 ovpL/cf 0.000 ovcf% 0.00 anaov% 0.00 lrn/cf 0.58 tM 0.0 tL 0.0 +TN180_X16_mto_v1.log X16 cpu 3476.6 confl 6544783 us/cf 531.2 lkp/cf 652 p/cf 25 look/cf 1.40 ovp/cf 0.177 ovpL/cf 0.000 ovcf% 0.14 anaov% 2.43 lrn/cf 0.83 tM 0.0 tL 0.0 +TN180_Z16_auto.log Z16 cpu 2657.6 confl 5223943 us/cf 508.7 lkp/cf 716 p/cf 26 look/cf 1.40 ovp/cf 0.095 ovpL/cf 0.506 ovcf% 0.44 anaov% 1.90 lrn/cf 0.62 tM 0.0 tL 0.0 +TN180_Z16_off.log Z16 cpu 2452.6 confl 5145682 us/cf 476.6 lkp/cf 720 p/cf 25 look/cf 1.40 ovp/cf 0.000 ovpL/cf 0.000 ovcf% 0.00 anaov% 0.00 lrn/cf 0.45 tM 0.0 tL 0.0 +TN216_X16_auto.log X16 cpu 1176.7 confl 2644995 us/cf 444.9 lkp/cf 897 p/cf 27 look/cf 1.35 ovp/cf 0.107 ovpL/cf 0.481 ovcf% 0.51 anaov% 1.72 lrn/cf 0.59 tM 0.0 tL 0.0 +TN216_X16_off.log X16 cpu 1259.6 confl 2801124 us/cf 449.7 lkp/cf 897 p/cf 27 look/cf 1.36 ovp/cf 0.000 ovpL/cf 0.000 ovcf% 0.00 anaov% 0.00 lrn/cf 0.61 tM 0.0 tL 0.0 +TN216_Z16_auto.log Z16 cpu 3149.0 confl 5272857 us/cf 597.2 lkp/cf 849 p/cf 26 look/cf 1.35 ovp/cf 0.101 ovpL/cf 0.375 ovcf% 0.37 anaov% 1.65 lrn/cf 0.60 tM 0.0 tL 0.0 +TN216_Z16_off.log Z16 cpu 1983.6 confl 3969629 us/cf 499.7 lkp/cf 835 p/cf 26 look/cf 1.35 ovp/cf 0.000 ovpL/cf 0.000 ovcf% 0.00 anaov% 0.00 lrn/cf 0.60 tM 0.0 tL 0.0 +TN216_Z16_v1.log Z16 cpu 2803.3 confl 4690900 us/cf 597.6 lkp/cf 868 p/cf 27 look/cf 1.34 ovp/cf 0.094 ovpL/cf 0.000 ovcf% 0.11 anaov% 1.86 lrn/cf 0.70 tM 0.0 tL 0.0 +TN216_Z16_v2.log Z16 cpu 2890.4 confl 4746245 us/cf 609.0 lkp/cf 856 p/cf 26 look/cf 1.34 ovp/cf 0.000 ovpL/cf 0.201 ovcf% 0.27 anaov% 0.00 lrn/cf 0.60 tM 0.0 tL 0.0 +TN216_Z17_auto.log Z17 cpu 7716.9 confl 9352254 us/cf 825.1 lkp/cf 854 p/cf 27 look/cf 1.35 ovp/cf 0.128 ovpL/cf 0.446 ovcf% 0.48 anaov% 2.03 lrn/cf 0.76 tM 0.0 tL 0.0 +TN216_Z17_off.log Z17 cpu 4202.8 confl 6795658 us/cf 618.5 lkp/cf 846 p/cf 26 look/cf 1.36 ovp/cf 0.000 ovpL/cf 0.000 ovcf% 0.00 anaov% 0.00 lrn/cf 0.57 tM 0.0 tL 0.0 +TN250_X14_auto.log X14 cpu 544.8 confl 1461048 us/cf 372.8 lkp/cf 1076 p/cf 32 look/cf 1.32 ovp/cf 0.098 ovpL/cf 0.555 ovcf% 0.57 anaov% 1.12 lrn/cf 0.69 tM 0.0 tL 0.0 +TN250_X14_off.log X14 cpu 662.4 confl 1802470 us/cf 367.5 lkp/cf 1047 p/cf 30 look/cf 1.32 ovp/cf 0.000 ovpL/cf 0.000 ovcf% 0.00 anaov% 0.00 lrn/cf 0.60 tM 0.0 tL 0.0 +BB288_X16_v1.log X16 cpu 11.6 confl 44944 us/cf 258.5 lkp/cf 1561 p/cf 75 look/cf 1.74 ovp/cf 0.479 ovpL/cf 0.000 ovcf% 0.16 anaov% 1.53 lrn/cf 0.30 tM 0.0 tL 0.0 +BB288_X16_v2.log X16 cpu 11.5 confl 44028 us/cf 262.0 lkp/cf 1551 p/cf 73 look/cf 1.72 ovp/cf 0.000 ovpL/cf 0.656 ovcf% 2.82 anaov% 0.00 lrn/cf 0.24 tM 0.0 tL 0.0 +LP544_X10_v1.log X10 cpu 4.5 confl 6545 us/cf 693.0 lkp/cf 5205 p/cf 150 look/cf 1.72 ovp/cf 0.018 ovpL/cf 0.000 ovcf% 0.00 anaov% 0.01 lrn/cf 0.76 tM 0.0 tL 0.0 +LP544_X10_v2.log X10 cpu 5.0 confl 7666 us/cf 650.3 lkp/cf 4544 p/cf 141 look/cf 1.69 ovp/cf 0.000 ovpL/cf 0.077 ovcf% 0.34 anaov% 0.00 lrn/cf 0.83 tM 0.0 tL 0.0 +TN144_X12_v1.log X12 cpu 49.4 confl 287631 us/cf 171.6 lkp/cf 535 p/cf 25 look/cf 1.37 ovp/cf 0.064 ovpL/cf 0.000 ovcf% 0.09 anaov% 1.02 lrn/cf 0.87 tM 0.0 tL 0.0 +TN144_X12_v2.log X12 cpu 47.7 confl 279209 us/cf 171.0 lkp/cf 530 p/cf 25 look/cf 1.38 ovp/cf 0.000 ovpL/cf 0.254 ovcf% 0.41 anaov% 0.00 lrn/cf 0.82 tM 0.0 tL 0.0 +TN144_Z12_v1.log Z12 cpu 37.8 confl 238696 us/cf 158.3 lkp/cf 509 p/cf 24 look/cf 1.38 ovp/cf 0.070 ovpL/cf 0.000 ovcf% 0.07 anaov% 1.13 lrn/cf 0.99 tM 0.0 tL 0.0 +TN144_Z12_v2.log Z12 cpu 37.0 confl 239405 us/cf 154.4 lkp/cf 514 p/cf 24 look/cf 1.38 ovp/cf 0.000 ovpL/cf 0.242 ovcf% 0.36 anaov% 0.00 lrn/cf 0.86 tM 0.0 tL 0.0 +TN250_X14_even.log X14 cpu 587.9 confl 1567270 us/cf 375.1 lkp/cf 1060 p/cf 30 look/cf 1.32 ovp/cf 0.045 ovpL/cf 0.249 ovcf% 0.23 anaov% 0.41 lrn/cf 0.59 tM 0.0 tL 0.0 +TN250_X14_odd.log X14 cpu 710.9 confl 1813275 us/cf 392.1 lkp/cf 1057 p/cf 30 look/cf 1.31 ovp/cf 0.042 ovpL/cf 0.306 ovcf% 0.33 anaov% 0.59 lrn/cf 0.65 tM 0.0 tL 0.0 +TN250_Z14_auto.log Z14 cpu 908.6 confl 2156967 us/cf 421.2 lkp/cf 1006 p/cf 28 look/cf 1.32 ovp/cf 0.067 ovpL/cf 0.415 ovcf% 0.47 anaov% 0.98 lrn/cf 0.62 tM 0.0 tL 0.0 +TN250_Z14_even.log Z14 cpu 779.5 confl 1912573 us/cf 407.6 lkp/cf 1010 p/cf 30 look/cf 1.33 ovp/cf 0.064 ovpL/cf 0.374 ovcf% 0.40 anaov% 0.81 lrn/cf 0.63 tM 0.0 tL 0.0 +TN250_Z14_odd.log Z14 cpu 976.7 confl 2393795 us/cf 408.0 lkp/cf 1010 p/cf 28 look/cf 1.32 ovp/cf 0.011 ovpL/cf 0.090 ovcf% 0.11 anaov% 0.23 lrn/cf 0.52 tM 0.0 tL 0.0 +TN250_Z14_off.log Z14 cpu 854.2 confl 2229994 us/cf 383.1 lkp/cf 995 p/cf 29 look/cf 1.33 ovp/cf 0.000 ovpL/cf 0.000 ovcf% 0.00 anaov% 0.00 lrn/cf 0.56 tM 0.0 tL 0.0 +TN144_X12_nosb_auto.log X12 cpu 101.0 confl 534147 us/cf 189.1 lkp/cf 519 p/cf 23 look/cf 1.38 ovp/cf 0.077 ovpL/cf 0.321 ovcf% 0.34 anaov% 1.28 lrn/cf 0.99 tM 0.0 tL 0.0 +TN144_X12_nosb_off.log X12 cpu 90.7 confl 516142 us/cf 175.8 lkp/cf 527 p/cf 23 look/cf 1.39 ovp/cf 0.000 ovpL/cf 0.000 ovcf% 0.00 anaov% 0.00 lrn/cf 0.80 tM 0.0 tL 0.0 +TN144_Z12_nosb_auto.log Z12 cpu 94.2 confl 516403 us/cf 182.4 lkp/cf 511 p/cf 22 look/cf 1.38 ovp/cf 0.068 ovpL/cf 0.319 ovcf% 0.28 anaov% 1.24 lrn/cf 0.95 tM 0.0 tL 0.0 +TN144_Z12_nosb_off.log Z12 cpu 88.7 confl 536317 us/cf 165.4 lkp/cf 519 p/cf 22 look/cf 1.38 ovp/cf 0.000 ovpL/cf 0.000 ovcf% 0.00 anaov% 0.00 lrn/cf 0.77 tM 0.0 tL 0.0 +BB288_X16_v4.log X16 cpu 11.5 confl 41850 us/cf 274.7 lkp/cf 1585 p/cf 76 look/cf 1.75 ovp/cf 0.450 ovpL/cf 1.287 ovcf% 0.79 anaov% 1.36 lrn/cf 0.30 tM 0.0 tL 0.0 +TN144_X12_v4.log X12 cpu 60.8 confl 316859 us/cf 191.9 lkp/cf 539 p/cf 25 look/cf 1.38 ovp/cf 0.057 ovpL/cf 0.277 ovcf% 0.26 anaov% 1.04 lrn/cf 0.92 tM 0.0 tL 0.0 +TN144_Z12_v4.log Z12 cpu 52.5 confl 285469 us/cf 183.8 lkp/cf 522 p/cf 24 look/cf 1.38 ovp/cf 0.061 ovpL/cf 0.307 ovcf% 0.28 anaov% 1.15 lrn/cf 0.98 tM 0.0 tL 0.0 +TN_180_2_17_X12_card-mto_aut X12 cpu 48.8 confl 214230 us/cf 227.6 lkp/cf 670 p/cf 28 look/cf 1.35 ovp/cf 0.103 ovpL/cf 0.334 ovcf% 0.36 anaov% 1.19 lrn/cf 0.96 tM 0.0 tL 0.0 +TN_180_2_17_X12_card-mto_off X12 cpu 48.1 confl 241933 us/cf 199.0 lkp/cf 678 p/cf 27 look/cf 1.34 ovp/cf 0.000 ovpL/cf 0.000 ovcf% 0.00 anaov% 0.00 lrn/cf 0.87 tM 0.0 tL 0.0 +TN_180_2_17_Z12_card-mto_aut Z12 cpu 31.4 confl 162350 us/cf 193.6 lkp/cf 668 p/cf 28 look/cf 1.33 ovp/cf 0.083 ovpL/cf 0.358 ovcf% 0.28 anaov% 0.85 lrn/cf 1.01 tM 0.0 tL 0.0 +TN_180_2_17_Z12_card-mto_off Z12 cpu 30.6 confl 169319 us/cf 180.6 lkp/cf 673 p/cf 29 look/cf 1.34 ovp/cf 0.000 ovpL/cf 0.000 ovcf% 0.00 anaov% 0.00 lrn/cf 1.20 tM 0.0 tL 0.0 +TN_216_4_18_X12_no-card_auto X12 cpu 42.1 confl 175205 us/cf 240.1 lkp/cf 856 p/cf 32 look/cf 1.31 ovp/cf 0.064 ovpL/cf 0.330 ovcf% 0.34 anaov% 0.79 lrn/cf 0.95 tM 0.0 tL 0.0 +TN_216_4_18_X12_no-card_off. X12 cpu 49.9 confl 211134 us/cf 236.4 lkp/cf 856 p/cf 31 look/cf 1.31 ovp/cf 0.000 ovpL/cf 0.000 ovcf% 0.00 anaov% 0.00 lrn/cf 0.94 tM 0.0 tL 0.0 +TN_216_4_18_Z12_no-card_auto Z12 cpu 31.5 confl 136347 us/cf 231.0 lkp/cf 825 p/cf 30 look/cf 1.30 ovp/cf 0.083 ovpL/cf 0.343 ovcf% 0.36 anaov% 0.86 lrn/cf 1.16 tM 0.0 tL 0.0 +TN_216_4_18_Z12_no-card_off. Z12 cpu 29.8 confl 138731 us/cf 215.1 lkp/cf 823 p/cf 30 look/cf 1.30 ovp/cf 0.000 ovpL/cf 0.000 ovcf% 0.00 anaov% 0.00 lrn/cf 0.91 tM 0.0 tL 0.0 +TN180_X16_mto_nosb_auto.log X16 cpu 10296.3 confl 15888426 us/cf 648.0 lkp/cf 620 p/cf 24 look/cf 1.39 ovp/cf 0.146 ovpL/cf 0.418 ovcf% 0.40 anaov% 2.14 lrn/cf 0.85 tM 0.0 tL 0.0 +TN216_X16_v1.log X16 cpu 1440.9 confl 2930061 us/cf 491.8 lkp/cf 888 p/cf 27 look/cf 1.35 ovp/cf 0.109 ovpL/cf 0.000 ovcf% 0.13 anaov% 2.06 lrn/cf 0.63 tM 0.0 tL 0.0 +TN216_X17_v1.log X17 cpu 2495.6 confl 4169661 us/cf 598.5 lkp/cf 936 p/cf 27 look/cf 1.36 ovp/cf 0.087 ovpL/cf 0.000 ovcf% 0.14 anaov% 2.30 lrn/cf 0.70 tM 0.0 tL 0.0 +TN216_Z16_nosb_auto.log Z16 cpu 4682.5 confl 7220572 us/cf 648.5 lkp/cf 866 p/cf 25 look/cf 1.34 ovp/cf 0.093 ovpL/cf 0.464 ovcf% 0.62 anaov% 2.16 lrn/cf 0.85 tM 0.0 tL 0.0 +TN216_Z16_nosb_off.log Z16 cpu 3944.8 confl 6598390 us/cf 597.8 lkp/cf 897 p/cf 25 look/cf 1.34 ovp/cf 0.000 ovpL/cf 0.000 ovcf% 0.00 anaov% 0.00 lrn/cf 0.61 tM 0.0 tL 0.0 +TN216_Z17_v1.log Z17 cpu 7920.7 confl 9924089 us/cf 798.1 lkp/cf 841 p/cf 27 look/cf 1.37 ovp/cf 0.148 ovpL/cf 0.000 ovcf% 0.14 anaov% 2.02 lrn/cf 0.86 tM 0.0 tL 0.0 diff --git a/optimization/experiments/GH-218/diag/pilot_cap_panel.txt b/optimization/experiments/GH-218/diag/pilot_cap_panel.txt new file mode 100644 index 00000000..d808d940 --- /dev/null +++ b/optimization/experiments/GH-218/diag/pilot_cap_panel.txt @@ -0,0 +1,26 @@ +== cap 12 +TN_180_2_17_X12_card-mto n=3 confl ratios 0.89 0.97 0.89 median 0.886 | cpu median 0.912 +TN_180_2_17_X12_no-card n=3 confl ratios 1.02 0.96 0.90 median 0.957 | cpu median 1.023 +TN_180_2_17_Z12_card-mto n=3 confl ratios 0.96 0.95 1.02 median 0.959 | cpu median 0.970 +TN_180_2_17_Z12_no-card n=3 confl ratios 1.03 0.97 0.95 median 0.967 | cpu median 1.023 +TN_216_4_18_X12_card-mto n=5 confl ratios 0.90 0.96 0.94 0.98 0.96 median 0.956 | cpu median 0.951 +TN_216_4_18_X12_no-card n=5 confl ratios 0.83 0.84 1.01 0.90 0.86 median 0.863 | cpu median 0.898 +TN_216_4_18_Z12_card-mto n=5 confl ratios 1.00 1.06 1.09 1.19 0.86 median 1.057 | cpu median 1.120 +TN_216_4_18_Z12_no-card n=5 confl ratios 0.98 1.13 1.05 0.91 1.09 median 1.055 | cpu median 1.102 +== cap 10/11 +TN_180_2_17_X10_card-mto n=3 confl ratios 0.91 0.87 0.99 median 0.906 | cpu median 0.929 +TN_180_2_17_X10_no-card n=3 confl ratios 0.92 1.10 1.05 median 1.055 | cpu median 1.132 +TN_180_2_17_X11_card-mto n=3 confl ratios 0.97 1.00 0.92 median 0.969 | cpu median 1.028 +TN_180_2_17_X11_no-card n=3 confl ratios 0.93 0.96 1.06 median 0.959 | cpu median 1.006 +TN_180_2_17_Z10_card-mto n=3 confl ratios 1.03 1.20 1.05 median 1.050 | cpu median 1.178 +TN_180_2_17_Z10_no-card n=3 confl ratios 0.97 0.98 1.00 median 0.979 | cpu median 1.010 +TN_180_2_17_Z11_card-mto n=3 confl ratios 0.97 0.92 0.95 median 0.953 | cpu median 1.004 +TN_180_2_17_Z11_no-card n=3 confl ratios 0.93 0.83 1.10 median 0.926 | cpu median 0.951 +TN_216_4_18_X10_card-mto n=5 confl ratios 0.94 0.96 0.91 1.13 0.94 median 0.941 | cpu median 0.993 +TN_216_4_18_X10_no-card n=5 confl ratios 0.98 0.97 0.93 1.23 0.89 median 0.966 | cpu median 0.979 +TN_216_4_18_X11_card-mto n=5 confl ratios 0.86 0.97 1.06 1.06 0.92 median 0.974 | cpu median 0.978 +TN_216_4_18_X11_no-card n=5 confl ratios 0.97 1.10 0.91 1.09 0.86 median 0.973 | cpu median 1.032 +TN_216_4_18_Z10_card-mto n=5 confl ratios 0.89 0.99 1.16 0.76 0.88 median 0.890 | cpu median 0.982 +TN_216_4_18_Z10_no-card n=5 confl ratios 1.23 0.79 0.99 1.11 0.98 median 0.992 | cpu median 1.067 +TN_216_4_18_Z11_card-mto n=5 confl ratios 0.89 0.90 1.06 1.12 1.02 median 1.021 | cpu median 1.104 +TN_216_4_18_Z11_no-card n=5 confl ratios 1.20 1.06 0.74 0.88 1.02 median 1.023 | cpu median 1.067 diff --git a/optimization/experiments/GH-218/diag/pilot_seed_panel_d7.txt b/optimization/experiments/GH-218/diag/pilot_seed_panel_d7.txt new file mode 100644 index 00000000..766e3e58 --- /dev/null +++ b/optimization/experiments/GH-218/diag/pilot_seed_panel_d7.txt @@ -0,0 +1,4 @@ +TN108_X11 n=5 confl ratios 0.92 0.81 0.84 0.96 1.11 median 0.924 | cpu median 1.009 +TN108_Z11 n=5 confl ratios 0.88 0.80 0.95 0.97 1.09 median 0.953 | cpu median 0.988 +TN144_X12 n=4 confl ratios 0.91 1.01 0.99 0.88 median 0.950 | cpu median 0.981 +TN144_Z12 n=4 confl ratios 1.03 0.97 0.97 0.85 median 0.969 | cpu median 0.981 diff --git a/optimization/experiments/GH-218/runner/c4dist.py b/optimization/experiments/GH-218/runner/c4dist.py new file mode 100644 index 00000000..1d08d665 --- /dev/null +++ b/optimization/experiments/GH-218/runner/c4dist.py @@ -0,0 +1,13 @@ +import sys,glob,collections,os +def load(p): return [[int(x) for x in l.split()] for l in open(p) if l.strip() and l.strip()[0] in "01"] +for hx in sorted(glob.glob('gh-stabov/data/matrices/tier[1-5]/*_Hx.txt')): + stem=os.path.basename(hx)[:-7]; p=hx[:-7] + out=[] + for H in ('Hx','Hz'): + S=[frozenset(j for j,v in enumerate(r) if v) for r in load(p+'_'+H+'.txt') if any(r)] + d=collections.Counter() + for i,s in enumerate(S): + c4=sum((lambda o: o*(o-1)//2)(len(s&t)) for k,t in enumerate(S) if k!=i) + d[(len(s),c4)]+=1 + out.append(H+' '+' '.join('w%d:c%d x%d'%(w,c,n) for (w,c),n in sorted(d.items()))) + print(stem,' | '.join(out)) diff --git a/optimization/experiments/GH-218/runner/diagtab.py b/optimization/experiments/GH-218/runner/diagtab.py new file mode 100644 index 00000000..8b49b2a0 --- /dev/null +++ b/optimization/experiments/GH-218/runner/diagtab.py @@ -0,0 +1,12 @@ +import sys,re,glob,os +for f in sorted(sum([glob.glob(a) for a in sys.argv[1:]],[])): + for line in open(f,errors='replace'): + if 'c DIAG ' not in line or 'DIAGPROBE' in line: continue + m=re.search(r'c DIAG (\w) cap (\d+) (\w+): (.*)',line) + if not m: continue + kv=dict(zip(m.group(4).split()[0::2],m.group(4).split()[1::2])) + g=lambda k: float(kv.get(k,0)) + c=max(g('conflicts'),1) + print('%-28s %s%-3s cpu %8.1f confl %9d us/cf %6.1f lkp/cf %6.0f p/cf %5.0f look/cf %4.2f ovp/cf %5.3f ovpL/cf %5.3f ovcf%% %5.2f anaov%% %5.2f lrn/cf %5.2f tM %6.1f tL %6.1f' % ( + os.path.basename(f)[:28], m.group(1), m.group(2), g('cpu'), c, 1e6*g('cpu')/c, g('lkprops')/c, g('props')/c, g('lookahead')/c, + (g('ovprops')-g('ovpropsL'))/c, g('ovpropsL')/c, 100*g('ovconfl')/c, 100*g('anaov')/max(g('anares'),1), g('learntlits')/c, g('tM'), g('tL'))) diff --git a/optimization/experiments/GH-218/runner/ident.sh b/optimization/experiments/GH-218/runner/ident.sh new file mode 100644 index 00000000..8350b53b --- /dev/null +++ b/optimization/experiments/GH-218/runner/ident.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# ident.sh CORE TIERGLOB...: answers + identity (stdout and FRONTIER stderr) main vs cand default vs cand -stab-overlap-c4=off +core=$1; shift +cd ~/mac-agent-20261009/gh218-60fec5b +M=~/mac-agent-20261009/frozen/server-main-02879a93/distqldpc; C=~/mac-agent-20261009/frozen/server-gh218-60fec5b/distqldpc +O=~/mac-agent-20261009/gh218-runs/ident; mkdir -p $O +for t in "$@"; do for hx in data/matrices/$t/*_Hx.txt; do stem=${hx%_Hx.txt}; b=$(basename $stem); for md in -no-card -card-mto; do + for arm in main cand c4off; do + bin=$C; extra=""; [ $arm = main ] && bin=$M; [ $arm = c4off ] && extra="-stab-overlap-c4=off" + taskset -c $core prlimit --as=4294967296 -- $bin $md $extra -frontier-stats -cpu-lim=600 $stem > $O/$b$md.$arm.out 2> $O/$b$md.$arm.err < /dev/null + grep -E "FRONTIER|OVERLAP" $O/$b$md.$arm.err > $O/$b$md.$arm.fr + done + ans=$(grep "^o " $O/$b$md.cand.out); want=${b##*_} + s1=$(cmp -s $O/$b$md.main.out $O/$b$md.cand.out && echo same || echo DIFF); s2=$(cmp -s $O/$b$md.main.out $O/$b$md.c4off.out && echo same || echo DIFF) + f1=$(cmp -s $O/$b$md.main.fr $O/$b$md.cand.fr && echo same || echo DIFF); f2=$(cmp -s $O/$b$md.main.fr $O/$b$md.c4off.fr && echo same || echo DIFF) + echo "$b $md answer[$ans want $want] stdout cand:$s1 c4off:$s2 probes cand:$f1 c4off:$f2" +done; done; done +echo DONE diff --git a/optimization/experiments/GH-218/runner/mkp3.sh b/optimization/experiments/GH-218/runner/mkp3.sh new file mode 100644 index 00000000..e2f24daf --- /dev/null +++ b/optimization/experiments/GH-218/runner/mkp3.sh @@ -0,0 +1,13 @@ +#!/bin/bash +# build pilot-cap panel jobs (cap 10 and 11) on cores given as args +cd ~/mac-agent-20261009/gh218-runs && mkdir -p p3 +B=~/mac-agent-20261009/frozen/server-gh218-diag3/distqldpc; T5=data/matrices/tier5 +cores=("$@"); nc=${#cores[@]}; i=0 +for c in "${cores[@]}"; do rm -f jp3_$c.txt; done +for cap in 10 11; do for st in TN_216_4_18 TN_180_2_17; do for md in no-card card-mto; do for s in 0 1 2 3 4; do for h in X Z; do for a in auto off; do + [ $st = TN_180_2_17 ] && [ $s -ge 3 ] && continue + c=${cores[$((i % nc))]}; i=$((i+1)); o=""; [ $a = off ] && o="-stab-overlap=off" + echo "$c p3/${st}_${h}${cap}_${md}_s${s}_$a.log $B DQ_DIAG=1|DQ_DIAG_PROBE=$h:$cap:9 -$md -seed=$s $o -frontier-stats -cpu-lim=3600 $T5/$st" >> jp3_$c.txt +done; done; done; done; done; done +for c in "${cores[@]}"; do setsid nohup ./seq.sh jp3_$c.txt >/dev/null 2>&1 < /dev/null & done +echo jobs $i diff --git a/optimization/experiments/GH-218/runner/nbr.py b/optimization/experiments/GH-218/runner/nbr.py new file mode 100644 index 00000000..1512ae02 --- /dev/null +++ b/optimization/experiments/GH-218/runner/nbr.py @@ -0,0 +1,13 @@ +import sys,glob,collections,os +def load(p): return [[int(x) for x in l.split()] for l in open(p) if l.strip() and l.strip()[0] in "01"] +for stem in sys.argv[1:]: + p=glob.glob('gh-stabov/data/matrices/tier*/'+stem+'_Hx.txt')[0][:-7] + out=[] + for H in ('Hx','Hz'): + S=[frozenset(j for j,v in enumerate(r) if v) for r in load(p+'_'+H+'.txt') if any(r)] + d=collections.Counter() + for i,s in enumerate(S): + ov=collections.Counter(len(s&t) for k,t in enumerate(S) if k!=i and len(s&t)>=2) + d[(len(s),tuple(sorted(ov.items())))]+=1 + out.append(H+' '+' '.join('w%d:%s x%d'%(w,dict(o),n) for (w,o),n in sorted(d.items()))) + print(stem,' | '.join(out)) diff --git a/optimization/experiments/GH-218/runner/pair.py b/optimization/experiments/GH-218/runner/pair.py new file mode 100644 index 00000000..6f737525 --- /dev/null +++ b/optimization/experiments/GH-218/runner/pair.py @@ -0,0 +1,15 @@ +import sys,re,glob,os,collections,statistics as st +R={} +for f in glob.glob(sys.argv[1]): + b=os.path.basename(f)[:-4] + for l in open(f,errors='replace'): + m=re.search(r'c DIAG \w cap \d+ \w+: cpu ([\d.]+) conflicts (\d+)',l) + if m: R[b]=(float(m.group(1)),int(m.group(2))) +g=collections.defaultdict(list) +for b,(cpu,c) in sorted(R.items()): + if b.endswith('_auto'): + o=b[:-5]+'_off' + if o in R: + key=re.sub(r'_s\d+','',b[:-5]); g[key].append((c/R[o][1], cpu/R[o][0], b)) +for k,v in sorted(g.items()): + print(k, 'n=%d'%len(v), 'confl ratios', ' '.join('%.2f'%x[0] for x in v), 'median %.3f'%st.median(x[0] for x in v), '| cpu median %.3f'%st.median(x[1] for x in v)) diff --git a/optimization/experiments/GH-218/runner/rowstats.py b/optimization/experiments/GH-218/runner/rowstats.py new file mode 100644 index 00000000..e91efa19 --- /dev/null +++ b/optimization/experiments/GH-218/runner/rowstats.py @@ -0,0 +1,27 @@ +import sys,glob,os,collections +def load(p): + rows=[] + for line in open(p): + line=line.strip() + if not line or line[0] in '#c%': continue + t=line.replace(',',' ').split() + if len(t)==1 and len(t[0])>1 and set(t[0])<=set('01'): t=list(t[0]) + rows.append([int(x) for x in t]) + return rows +for d in sorted(glob.glob(sys.argv[1]+'/tier*')): + for hx in sorted(glob.glob(d+'/*_Hx.txt')): + stem=os.path.basename(hx)[:-7] + out=[os.path.basename(d),stem] + for H in ('Hx','Hz'): + M=load(d+'/'+stem+'_'+H+'.txt') + M=[r for r in M if any(r)] + rw=collections.Counter(sum(r) for r in M) + n=len(M[0]); cw=collections.Counter(sum(M[i][j] for i in range(len(M))) for j in range(n)) + # 4-cycles per row: pairs of rows sharing >=2 cols + S=[set(j for j,v in enumerate(r) if v) for r in M] + c4=0 + for i in range(len(S)): + for k in range(i+1,len(S)): + s=len(S[i]&S[k]); c4+=s*(s-1)//2 + out.append('%s rw%s cw%s c4/row%.2f'%(H,dict(rw),dict(cw),2*c4/len(S))) + print(' | '.join(out)) diff --git a/optimization/experiments/GH-218/runner/run1.sh b/optimization/experiments/GH-218/runner/run1.sh new file mode 100755 index 00000000..ebac1108 --- /dev/null +++ b/optimization/experiments/GH-218/runner/run1.sh @@ -0,0 +1,8 @@ +#!/bin/bash +# usage: run1.sh CORE OUTNAME BIN "ENV" ARGS... ; runs in gh218-diag worktree (data path) +core=$1; out=$(readlink -f $2); bin=$3; envs=$4; shift 4 +cd ~/mac-agent-20261009/gh218-diag +start=$(date +%s.%N) +echo "# start $start core $core env $envs cmd $bin $*" > $out +env $envs taskset -c $core prlimit --as=4294967296 -- /usr/bin/time -f "TIME %e %U %M" $bin "$@" < /dev/null >> $out 2>&1 +echo "# rc $? end $(date +%s.%N)" >> $out diff --git a/optimization/experiments/GH-218/runner/seq.sh b/optimization/experiments/GH-218/runner/seq.sh new file mode 100755 index 00000000..67b9b521 --- /dev/null +++ b/optimization/experiments/GH-218/runner/seq.sh @@ -0,0 +1,6 @@ +#!/bin/bash +# seq.sh JOBFILE : each line "CORE OUT BIN ENV ARGS..." with ENV quoted as one token using | for spaces +while read -r core out bin envs rest; do + [ -z "$core" ] && continue + ./run1.sh $core $out $bin "${envs//|/ }" $rest +done < $1 diff --git a/optimization/experiments/GH-218/runner/t5tab.py b/optimization/experiments/GH-218/runner/t5tab.py new file mode 100644 index 00000000..4ebeb5b5 --- /dev/null +++ b/optimization/experiments/GH-218/runner/t5tab.py @@ -0,0 +1,11 @@ +import sys,re,glob,os +rows=[] +for f in sorted(glob.glob(sys.argv[1])): + b=os.path.basename(f)[:-4]; L=open(f,errors='replace').read() + done='# rc' in L + m=re.search(r'TIME ([\d.]+) ([\d.]+) (\d+)',L); wall=float(m.group(1)) if m else None + d=re.findall(r'c d : (\S+)',L); d=d[-1] if d else '-' + lb=re.findall(r'c d_lb: (\d+)',L); lb=lb[-1] if lb else '-' + pil=' '.join('%s:%s(%s)'%(x[0],x[2],x[1]) for x in re.findall(r'OVERLAP-PILOT (\w) cap \d+: .* median ([\d.]+) -> (\w+)',L)) + probes=' '.join('%s%s:%.2fM'%(x[0],x[1],int(x[2])/1e6) for x in re.findall(r'FRONTIER (\w) cap (\d+) \w+: conflicts (\d+)',L) if int(x[1])>=12) + print('%-38s %-4s d=%-3s lb=%-3s wall=%-8s %s | %s'%(b,'done' if done else 'run',d,lb,'%.0f'%wall if wall else '-',pil,probes)) diff --git a/optimization/experiments/GH-218/runner/u0check.sh b/optimization/experiments/GH-218/runner/u0check.sh new file mode 100644 index 00000000..4ef6ecf1 --- /dev/null +++ b/optimization/experiments/GH-218/runner/u0check.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# u0check.sh CORE: ub-pre U0 per seed/mode for the Tier 1-4 TN codes (no probe reaches cap 16 iff U0 <= 16... checked: U0 = d) +core=$1; cd ~/mac-agent-20261009/gh218-60fec5b +C=~/mac-agent-20261009/frozen/server-gh218-60fec5b/distqldpc +for p in tier2/TN_108_2_12 tier2/TN_200_10_10 tier3/TN_144_2_13 tier4/TN_250_10_15; do for md in -no-card -card-mto; do for s in 0 1 2 3 4; do + out=$(taskset -c $core prlimit --as=4294967296 -- $C $md -seed=$s -v -cpu-lim=75 data/matrices/$p 2>&1 < /dev/null | grep -E "^c ub-pre: |c CSS interleave: . half cap|OVERLAP-PILOT|stab-overlap pilot" | head -12) + u0=$(grep -o "^c ub-pre: U0 after [^)]*); [0-9]*\|^c ub-pre: .*" <<<"$out" | head -1 | cut -c1-120) + caps=$(grep -o "half cap [0-9]*" <<<"$out" | awk '{print $3}' | tr '\n' ',') + pil=$(grep -c "pilot" <<<"$out") + echo "$p $md s$s | $u0 | caps $caps | pilot_lines $pil" +done; done; done; echo DONE diff --git a/src/core/distqldpc.cc b/src/core/distqldpc.cc index 7f71d718..9f835b53 100644 --- a/src/core/distqldpc.cc +++ b/src/core/distqldpc.cc @@ -934,25 +934,25 @@ static int g_stab_overlap_enc = 3; /* -stab-overlap-enc=native|bin|seq|cla static int g_stab_overlap_mutant = 0; /* test only (no flag): 1 = limit floor(|g|/2) - 1 (cuts minimum logicals); 2 = the half's parity rows (Hpar) used as g without the GF(2) check */ static const double STAB_OVL_BIN_MAX = 126.0; /* auto: binomial up to |g| = 9 (C(9,5) = 126), counter above */ -/* GH-218: per-half pilot for the rows on many Tanner 4-cycles. A verified row g is "dense" if it lies on more than - * g_stab_overlap_c4 Tanner-graph 4-cycles of the same-type stabilizer matrix, c4(g) = sum over the other distinct rows g' - * of C(|g & g'|, 2) (the 4-cycles through g's check node). Sparse rows are always used (as in GH-148). The dense rows of a - * half are used as in GH-148 until the half's first probe with cap >= P + 4, P = max(pilot cap, the half's lb, the cap - * from which the -stab-overlap ratio activates every dense row: 10 for weight 9 under auto); before - * that probe a pilot decides, once per half, whether they stay: the probe "weight <= P?" (first solution stops it) is - * run with and without the dense rows for g_stab_overlap_pilot solver seeds (the run's seed + 0, 1, ...); the dense rows - * stay iff the median of conflicts(with) / conflicts(without) is <= 1. The decision depends only on conflict counts, so it - * is deterministic for a given seed. Every subset of the verified rows is sound (each row alone keeps every minimum-weight - * element of F), so neither the classification nor the pilot changes a probe answer; the pilot probes only decide, their - * answers are not used. Measured in GH-218: BB / LP / GB rows have c4 <= 4 (never dense; no pilot, GH-148's search); - * every weight-9 TN row has c4 >= 12; on them the rows' effect is systematic per code and half (TN_216 Z half 1.03-1.54x - * the conflicts on 10 seed/mode pairs, the GH-148 regression; TN_180 X half 0.48-0.66x on 3 seeds) and the cap-12 pilot - * ratios point the same way (TN_216 Z 0.91-1.19, median 1.06; X 0.83-1.01; TN_180 X 0.89-0.97). -1 = no classification - * (every verified row in every probe: GH-148's search, byte for byte). */ +/* GH-218: dense overlap rows. A verified row g is "dense" if it lies on more than g_stab_overlap_c4 Tanner-graph 4-cycles + * of the same-type stabilizer matrix, c4(g) = sum over the other distinct rows g' of C(|g & g'|, 2) (the 4-cycles through + * g's check node). Sparse rows are always used (as in GH-148). The dense rows of a half are used as in GH-148 until the + * half's first probe with cap >= P' + 4, P' = max(pilot cap, the half's lb, the cap from which the -stab-overlap ratio + * activates every dense row: 10 for weight 9 under auto); from that probe on they are dropped (default), or, with + * -stab-overlap-pilot=N > 0 (opt-in), a pilot decides once per half: the probe "weight <= P'?" (first solution stops it) + * is run with and without the dense rows for N solver seeds (the run's seed + 0, 1, ...) and the dense rows stay iff the + * median of conflicts(with) / conflicts(without) is <= 1 (deterministic for a given seed). Every subset of the verified + * rows is sound (each row alone keeps every minimum-weight element of F), so neither rule changes a probe answer; pilot + * probes only decide. Measured in GH-218: BB / LP / GB rows have c4 <= 4 (never dense: GH-148's search); every weight-9 TN + * row has c4 >= 12. On them the rows' effect at caps 16-17 is systematic per code and half (TN_216 Z half 1.03-1.54x the + * conflicts on all 10 seed/mode pairs, the GH-148 regression; TN_180 X half 0.48-0.66x on 3 seeds), while at caps 10-12 + * it is near neutral and does not predict it (TN_216 Z at cap 12 over 10 seeds: median 0.97 / 0.92), so the default + * drops them and the pilot stays opt-in. Below cap 16 (all TN codes of tiers 1-4) the search is GH-148's. -1 = no + * classification (every verified row in every probe: GH-148's search, byte for byte). */ static const int STAB_OVL_C4_DEFAULT = 11; static int g_stab_overlap_c4 = STAB_OVL_C4_DEFAULT; /* -stab-overlap-c4=N|off (default 11) */ -static int g_stab_overlap_pilot = 3; /* -stab-overlap-pilot=N seed pairs (default 3; 0 = dense rows off - from that probe on, without a pilot) */ +static int g_stab_overlap_pilot = 0; /* -stab-overlap-pilot=N seed pairs (default 0 = the dense rows are + dropped from that probe on, without a pilot; N > 0 opt-in) */ static uint64_t g_stab_overlap_pilot_cap = 12; /* -stab-overlap-pilot-cap=P (default 12); the pilot asks "weight <= max(P, lb)?" */ static uint64_t g_stab_overlap_pilot_margin = 4; /* pilot before the first probe with cap >= pilot cap + margin @@ -1364,7 +1364,13 @@ static HalfStatus run_css_half(CssHalf& h, uint64_t cap, bool first_only, int ve if (!pilot_probe && h.ovl_dense_mode < 0 && !h.ovl_dense.empty() && cap >= ovl_pilot_cap(h) + g_stab_overlap_pilot_margin) { if (g_stab_overlap_pilot > 0) ovl_pilot(h, verb, card_mode); - else h.ovl_dense_mode = 0; + else { + h.ovl_dense_mode = 0; + size_t nd = 0; + for (size_t r = 0; r < h.ovl_dense.size(); r++) nd += h.ovl_dense[r] ? 1 : 0; + if (verb > 0) { printf("c stab-overlap %s: %zu dense rows dropped from cap %llu on\n", h.tag, nd, (unsigned long long)cap); fflush(stdout); } + if (g_frontier_stats) { fprintf(stderr, "c OVERLAP-DROP %s cap %llu: dense_rows %zu\n", h.tag, (unsigned long long)cap, nd); fflush(stderr); } + } } const bool use_dense = pilot_probe ? dense_force == 1 : h.ovl_dense_mode != 0; SimpSolver S; @@ -1817,8 +1823,17 @@ static int min_distance_css_interleaved( printf("c stab-overlap %s: %d of %d rows used (%d rejected: H g != 0 or G g != 0; %d duplicates", hs[k].tag, oi.kept, oi.candidates, oi.rejected, oi.duplicates); if (g_stab_overlap_c4 >= 0) /* GH-218 */ - printf("; %d dense: on more than %d Tanner 4-cycles, pilot %s", oi.c4_gated, g_stab_overlap_c4, - oi.c4_gated == 0 ? "not needed" : g_stab_overlap_pilot > 0 ? "at cap max(P, lb, activation) before the first probe with cap >= that + 4" : "off: dropped from that probe on"); + { + if (oi.c4_gated == 0) printf("; 0 dense (more than %d Tanner 4-cycles)", g_stab_overlap_c4); + else if (g_stab_overlap_pilot > 0) + printf("; %d dense (more than %d Tanner 4-cycles): pilot (%d seeds) at cap P' = max(%llu, lb, activation) before " + "the first probe with cap >= P' + %llu", oi.c4_gated, g_stab_overlap_c4, g_stab_overlap_pilot, + (unsigned long long)g_stab_overlap_pilot_cap, (unsigned long long)g_stab_overlap_pilot_margin); + else + printf("; %d dense (more than %d Tanner 4-cycles): dropped from the first probe with cap >= P' + %llu, " + "P' = max(%llu, lb, activation)", oi.c4_gated, g_stab_overlap_c4, (unsigned long long)g_stab_overlap_pilot_margin, + (unsigned long long)g_stab_overlap_pilot_cap); + } printf("); |g| -> rows:"); for (std::map::const_iterator it = oi.weights.begin(); it != oi.weights.end(); ++it) printf(" %d:%d (<= %d)", it->first, it->second, ovl_limit(it->first)); @@ -2923,10 +2938,10 @@ int main(int argc, char** argv) { printf(" H g = 0, G g = 0; a minimum-weight logical always satisfies it, else x + g is lighter); on: every\n"); printf(" row in every probe; auto: row g only in probes with cap >= 2 (floor(|g|/2) + 1) (-stab-overlap-ratio=X);\n"); printf(" -stab-overlap-c4=N|off (GH-218, default 11): rows g on more than N Tanner 4-cycles of the stabilizer\n"); - printf(" matrix (sum over the other rows g' of C(|g & g'|, 2)) are dense; before a half's first probe with cap >= P + 4\n"); - printf(" a pilot runs \"weight <= max(P, lb, row activation cap)?\" with and without its dense rows for -stab-overlap-pilot=N seeds (default 3;\n"); - printf(" 0 = drop them without a pilot) and keeps them iff the median conflict ratio is <= 1\n"); - printf(" (-stab-overlap-pilot-cap=P, default 12); off = every verified row in every probe (GH-148's search)\n"); + printf(" matrix (sum over the other rows g' of C(|g & g'|, 2)) are dense; from a half's first probe with cap >= P' + 4,\n"); + printf(" P' = max(P, lb, row activation cap), they are dropped (default), or with -stab-overlap-pilot=N > 0 (opt-in)\n"); + printf(" a pilot runs \"weight <= P'?\" with and without them for N seeds and keeps them iff the median conflict\n"); + printf(" ratio is <= 1 (-stab-overlap-pilot-cap=P, default 12); off = every verified row in every probe (GH-148)\n"); printf(" -stab-overlap-enc=native|clauses|bin|seq (default native: a propagator inside MaxCDCL; clauses: binomial\n"); printf(" clauses up to |g| = 9, sequential counter above; bin / seq: one of them for every row)\n"); printf(" Output (default): live c trying d / c d_lb / c d_ub, then c d / o d\n"); diff --git a/tests/test_cc_engine.cc b/tests/test_cc_engine.cc index 8a40838a..ced631b0 100644 --- a/tests/test_cc_engine.cc +++ b/tests/test_cc_engine.cc @@ -1294,12 +1294,12 @@ int main(int argc, char** argv) { fprintf(stderr, "CC_FAIL GH-218 partG (c) forced dense %s half %d cap %d: %d vs %d\n", st, half, cap, (int)s1, (int)s0); } } - g_stab_overlap_pilot_cap = 1; + g_stab_overlap_pilot_cap = 1; g_stab_overlap_pilot = 3; int dec[2]; for (int rep2 = 0; rep2 < 2; rep2++) { h.ovl_dense_mode = -1; ovl_pilot(h, 0, 0); dec[rep2] = h.ovl_dense_mode; pilot_runs++; } if (dec[0] != dec[1] || dec[0] < 0) { pilot_bad++; fails++; fprintf(stderr, "CC_FAIL GH-218 partG (c) pilot %s half %d: %d / %d\n", st, half, dec[0], dec[1]); } pilot_kept += dec[0] == 1; - g_stab_overlap_pilot_cap = 12; + g_stab_overlap_pilot_cap = 12; g_stab_overlap_pilot = 0; } } g_stab_overlap_c4 = saved_c4; g_stab_overlap_mutant = saved_mut; diff --git a/tests/test_cc_flags.sh b/tests/test_cc_flags.sh index ecb6d04b..8ed3de70 100755 --- a/tests/test_cc_flags.sh +++ b/tests/test_cc_flags.sh @@ -405,8 +405,8 @@ runs=$((runs + 1)); run -frontier-stats -stab-overlap=on -stab-overlap-enc=bin $ if grep -q "^c OVERLAP" <<<"$err"; then echo "FAIL (no c OVERLAP line with clause encodings)" >&2; fails=$((fails + 1)); fi accept 2 "" -engine=auto -stab-overlap=on $L $D1 # auto -> maxsat: applies accept 2 "selected cc .*ignoring -stab-overlap=on" -engine=auto -stab-overlap=on $L $C -vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 0 dense: on more than 11 Tanner 4-cycles, pilot not needed); |g| -> rows: 6:45 (<= 3); binomial rows 45, counter rows 0; per probe 675 clauses, 0 aux vars$" -v -stab-overlap=on -stab-overlap-enc=clauses $L BB_90_8_10 -vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 0 dense: on more than 11 Tanner 4-cycles, pilot not needed); |g| -> rows: 6:45 (<= 3); native propagator rows 45 (no clauses)$" -v -stab-overlap=on $L BB_90_8_10 +vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 0 dense (more than 11 Tanner 4-cycles)); |g| -> rows: 6:45 (<= 3); binomial rows 45, counter rows 0; per probe 675 clauses, 0 aux vars$" -v -stab-overlap=on -stab-overlap-enc=clauses $L BB_90_8_10 +vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 0 dense (more than 11 Tanner 4-cycles)); |g| -> rows: 6:45 (<= 3); native propagator rows 45 (no clauses)$" -v -stab-overlap=on $L BB_90_8_10 vgrep 10 "^c stab-overlap X: 45 of 45 rows used .* binomial rows 45, counter rows 0" -v -stab-overlap=auto -stab-overlap-enc=bin $L BB_90_8_10 vgrep 10 "^c stab-overlap Z: 45 of 45 rows used .* binomial rows 0, counter rows 45; per probe 1440 clauses, 675 aux vars$" -v -stab-overlap=on -stab-overlap-enc=seq $L BB_90_8_10 vgrep 10 "^c stab-overlap X cap 8: 45 of 45 rows active (ratio 2.00)$" -v -stab-overlap=auto $L BB_90_8_10 @@ -415,7 +415,7 @@ vgrep 10 "^c stab-overlap X cap 4: 45 of 45 rows active (ratio 0.00)$" -v -stab- runs=$((runs + 1)); run -v -stab-overlap=off $L BB_90_8_10 if grep -q "stab-overlap" <<<"$out$err"; then echo "FAIL (-stab-overlap=off must not print stab-overlap lines)" >&2; fails=$((fails + 1)); fi # default (auto since the PI's adoption decision): the same lines as -stab-overlap=auto -vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 0 dense: on more than 11 Tanner 4-cycles, pilot not needed); |g| -> rows: 6:45 (<= 3); native propagator rows 45 (no clauses)$" -v $L BB_90_8_10 +vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 0 dense (more than 11 Tanner 4-cycles)); |g| -> rows: 6:45 (<= 3); native propagator rows 45 (no clauses)$" -v $L BB_90_8_10 vgrep 10 "^c stab-overlap X cap 8: 45 of 45 rows active (ratio 2.00)$" -v $L BB_90_8_10 vgrep 10 "^c stab-overlap X cap 4: 0 of 45 rows active (ratio 2.00)$" -v $L BB_90_8_10 runs=$((runs + 1)); run -frontier-stats $L BB_90_8_10 @@ -423,8 +423,8 @@ if [[ $rc -ne 0 ]] || ! grep -q "^c OVERLAP X cap 8: rows 45 props [0-9]* confli runs=$((runs + 1)); run -v -joint $L $M if grep -q "stab-overlap" <<<"$out$err"; then echo "FAIL (default auto is silently off with -joint: no stab-overlap lines expected)" >&2; fails=$((fails + 1)); fi -# 7g. GH-218 dense rows and the per-half pilot: -stab-overlap-c4=N|off (default 11), -stab-overlap-pilot=N (default 3), -# -stab-overlap-pilot-cap=P (default 12); -stab-overlap-c4=off = GH-148's search +# 7g. GH-218 dense rows and the per-half pilot: -stab-overlap-c4=N|off (default 11), -stab-overlap-pilot=N (default 0 = +# drop the dense rows at the first probe with cap >= P' + 4), -stab-overlap-pilot-cap=P (default 12); -stab-overlap-c4=off = GH-148's search for f in -stab-overlap-c4= -stab-overlap-c4=x -stab-overlap-c4=-1 -stab-overlap-c4=1.5 -stab-overlap-c4=OFF -stab-overlap-c4=2000000; do reject "invalid -stab-overlap-c4" $f $L $M done @@ -442,20 +442,22 @@ accept 8 "" -stab-overlap=on -stab-overlap-c4=1000 -card-mto $L TN_72_8_8 accept 8 "" -stab-overlap=on -stab-overlap-pilot=1 -stab-overlap-pilot-cap=1 $L TN_72_8_8 accept 10 "" -stab-overlap=on -stab-overlap-c4=off -stab-overlap-enc=seq $L BB_90_8_10 vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates); |g| -> rows: 6:45 (<= 3); native propagator rows 45 (no clauses)$" -v -stab-overlap-c4=off $L BB_90_8_10 -vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 0 dense: on more than 0 Tanner 4-cycles, pilot not needed); |g|" -v -stab-overlap-c4=0 $L BB_90_8_10 -vgrep 8 "^c stab-overlap X: 36 of 36 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 36 dense: on more than 11 Tanner 4-cycles, pilot at cap max(P, lb, activation) before the first probe with cap >= that + 4); |g| -> rows: 9:36 (<= 4)" -v $L TN_72_8_8 -vgrep 8 "^c stab-overlap X: 36 of 36 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 36 dense: on more than 11 Tanner 4-cycles, pilot off: dropped from that probe on); |g|" -v -stab-overlap-pilot=0 $L TN_72_8_8 +vgrep 10 "^c stab-overlap X: 45 of 45 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 0 dense (more than 0 Tanner 4-cycles)); |g|" -v -stab-overlap-c4=0 $L BB_90_8_10 +vgrep 8 "^c stab-overlap X: 36 of 36 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 36 dense (more than 11 Tanner 4-cycles): dropped from the first probe with cap >= P' + 4, P' = max(12, lb, activation)); |g| -> rows: 9:36 (<= 4)" -v $L TN_72_8_8 +vgrep 8 "^c stab-overlap X: 36 of 36 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates; 36 dense (more than 11 Tanner 4-cycles): pilot (3 seeds) at cap P' = max(12, lb, activation) before the first probe with cap >= P' + 4); |g|" -v -stab-overlap-pilot=3 $L TN_72_8_8 vgrep 8 "^c stab-overlap X: 36 of 36 rows used (0 rejected: H g != 0 or G g != 0; 0 duplicates); |g| -> rows: 9:36 (<= 4)" -v -stab-overlap-c4=off $L TN_72_8_8 # TN_72_8_8 (d = 8, ub-pre off: caps 1, 2, 4, 8): P >= 10 (weight-9 rows active from cap 10): no pilot, dense rows used runs=$((runs + 1)); run -frontier-stats -stab-overlap=on -ub-pre=off $L TN_72_8_8 if [[ $rc -ne 0 ]] || ! grep -q "^c OVERLAP" <<<"$err" || grep -q "OVERLAP-PILOT" <<<"$err"; then echo "FAIL (TN_72_8_8 -stab-overlap=on: dense rows used, no pilot expected)" >&2; fails=$((fails + 1)); fi # TN_108_2_12 with -ub-pre=off: caps 1, 2, 4, 8, 16; at cap 16 lb = 9, pilot cap 1 -> P = max(1, 9, 10) = 10, 16 >= 14: # one pilot per half (3 seeds) -runs=$((runs + 1)); run -frontier-stats -ub-pre=off -stab-overlap-pilot-cap=1 -cpu-lim=60 TN_108_2_12 +runs=$((runs + 1)); run -frontier-stats -ub-pre=off -stab-overlap-pilot=3 -stab-overlap-pilot-cap=1 -cpu-lim=60 TN_108_2_12 if ! grep -Eq "^c OVERLAP-PILOT X cap 10: dense_rows 54 seed 0 [0-9]+/[0-9]+, seed 1 [0-9]+/[0-9]+, seed 2 [0-9]+/[0-9]+ median [0-9.]+ -> (kept|dropped)$" <<<"$err"; then echo "FAIL (TN_108_2_12 -ub-pre=off: c OVERLAP-PILOT X line expected): $(grep PILOT <<<"$err")" >&2; fails=$((fails + 1)); fi -runs=$((runs + 1)); run -frontier-stats -ub-pre=off -stab-overlap-pilot=0 -cpu-lim=5 TN_108_2_12 -if grep -q "OVERLAP-PILOT" <<<"$err"; then echo "FAIL (-stab-overlap-pilot=0: no pilot line expected)" >&2; fails=$((fails + 1)); fi +runs=$((runs + 1)); run -frontier-stats -ub-pre=off -cpu-lim=20 TN_108_2_12 # default: no pilot, dense rows dropped at cap 16 +if grep -q "OVERLAP-PILOT" <<<"$err" || ! grep -q "^c OVERLAP-DROP X cap 16: dense_rows 54$" <<<"$err"; then echo "FAIL (default -stab-overlap-pilot=0: c OVERLAP-DROP X cap 16 expected, no pilot)" >&2; fails=$((fails + 1)); fi +runs=$((runs + 1)); run -frontier-stats -cpu-lim=20 TN_108_2_12 # with -ub-pre (U0 = 12): caps <= 11, dense rows never dropped +if grep -q "OVERLAP-DROP\|OVERLAP-PILOT" <<<"$err"; then echo "FAIL (TN_108_2_12 default: caps stay below 16, no drop/pilot line expected)" >&2; fails=$((fails + 1)); fi # 8. a CC trap withdraws the bounds already sent (test mutant 2 with the GH-124 rule set traps on LP_136_32_4 after # emitting d_lb lines; with the GH-133 rules the same mutant answers wrongly instead, which this check does not need) From d086c6609a6318a108e182282c06d55c6ce86e69 Mon Sep 17 00:00:00 2001 From: yfc Date: Wed, 4 Nov 2026 22:01:11 +0800 Subject: [PATCH 11/12] GH-218: Tier 0 evidence (tests, identity tiers 0-4, ub-pre caps per seed) Co-Authored-By: Claude Opus 5.5 --- .../GH-218/T0/identity_tiers0-4.txt | 53 + .../experiments/GH-218/T0/test_cc_66dc5b6.txt | 1301 +++++++++++++++++ .../GH-218/T0/test_cc_flags_66dc5b6.txt | 3 + .../GH-218/T0/u0_caps_tier2-4_5seeds.txt | 41 + 4 files changed, 1398 insertions(+) create mode 100644 optimization/experiments/GH-218/T0/identity_tiers0-4.txt create mode 100644 optimization/experiments/GH-218/T0/test_cc_66dc5b6.txt create mode 100644 optimization/experiments/GH-218/T0/test_cc_flags_66dc5b6.txt create mode 100644 optimization/experiments/GH-218/T0/u0_caps_tier2-4_5seeds.txt diff --git a/optimization/experiments/GH-218/T0/identity_tiers0-4.txt b/optimization/experiments/GH-218/T0/identity_tiers0-4.txt new file mode 100644 index 00000000..f6653fc1 --- /dev/null +++ b/optimization/experiments/GH-218/T0/identity_tiers0-4.txt @@ -0,0 +1,53 @@ +# main = frozen 02879a93; cand = 60fec5b default (tiers 0-3 first pass, -cpu-lim=600) and 66dc5b6 default (TN_250 and the LP_714 reruns); c4off = -stab-overlap-c4=off. +# 'same' = byte-identical stdout and identical per-probe FRONTIER/OVERLAP lines (-frontier-stats). The two LP_714 DIFF lines of the first pass are +# -cpu-lim=600 timeouts of main at the limit; the reruns at -cpu-lim=3000 (lines after them) are identical in both modes. +BB_108_8_10 -no-card answer[o 10 want 10] stdout cand:same c4off:same probes cand:same c4off:same +BB_108_8_10 -card-mto answer[o 10 want 10] stdout cand:same c4off:same probes cand:same c4off:same +BB_144_12_12 -no-card answer[o 12 want 12] stdout cand:same c4off:same probes cand:same c4off:same +BB_144_12_12 -card-mto answer[o 12 want 12] stdout cand:same c4off:same probes cand:same c4off:same +BB_72_12_6 -no-card answer[o 6 want 6] stdout cand:same c4off:same probes cand:same c4off:same +BB_72_12_6 -card-mto answer[o 6 want 6] stdout cand:same c4off:same probes cand:same c4off:same +BB_90_8_10 -no-card answer[o 10 want 10] stdout cand:same c4off:same probes cand:same c4off:same +BB_90_8_10 -card-mto answer[o 10 want 10] stdout cand:same c4off:same probes cand:same c4off:same +GB_144_12_8 -no-card answer[o 8 want 8] stdout cand:same c4off:same probes cand:same c4off:same +GB_144_12_8 -card-mto answer[o 8 want 8] stdout cand:same c4off:same probes cand:same c4off:same +LP_136_32_4 -no-card answer[o 4 want 4] stdout cand:same c4off:same probes cand:same c4off:same +LP_136_32_4 -card-mto answer[o 4 want 4] stdout cand:same c4off:same probes cand:same c4off:same +LP_238_44_6 -no-card answer[o 6 want 6] stdout cand:same c4off:same probes cand:same c4off:same +LP_238_44_6 -card-mto answer[o 6 want 6] stdout cand:same c4off:same probes cand:same c4off:same +LP_34_20_2 -no-card answer[o 2 want 2] stdout cand:same c4off:same probes cand:same c4off:same +LP_34_20_2 -card-mto answer[o 2 want 2] stdout cand:same c4off:same probes cand:same c4off:same +TN_36_8_3 -no-card answer[o 3 want 3] stdout cand:same c4off:same probes cand:same c4off:same +TN_36_8_3 -card-mto answer[o 3 want 3] stdout cand:same c4off:same probes cand:same c4off:same +TN_36_8_4 -no-card answer[o 4 want 4] stdout cand:same c4off:same probes cand:same c4off:same +TN_36_8_4 -card-mto answer[o 4 want 4] stdout cand:same c4off:same probes cand:same c4off:same +TN_54_11_4 -no-card answer[o 4 want 4] stdout cand:same c4off:same probes cand:same c4off:same +TN_54_11_4 -card-mto answer[o 4 want 4] stdout cand:same c4off:same probes cand:same c4off:same +TN_72_14_4 -no-card answer[o 4 want 4] stdout cand:same c4off:same probes cand:same c4off:same +TN_72_14_4 -card-mto answer[o 4 want 4] stdout cand:same c4off:same probes cand:same c4off:same +TN_72_8_8 -no-card answer[o 8 want 8] stdout cand:same c4off:same probes cand:same c4off:same +TN_72_8_8 -card-mto answer[o 8 want 8] stdout cand:same c4off:same probes cand:same c4off:same +LP_340_56_8 -no-card answer[o 8 want 8] stdout cand:same c4off:same probes cand:same c4off:same +LP_340_56_8 -card-mto answer[o 8 want 8] stdout cand:same c4off:same probes cand:same c4off:same +LP_442_68_10 -no-card answer[o 10 want 10] stdout cand:same c4off:same probes cand:same c4off:same +LP_442_68_10 -card-mto answer[o 10 want 10] stdout cand:same c4off:same probes cand:same c4off:same +BB_144_14_14 -no-card answer[o 14 want 14] stdout cand:same c4off:same probes cand:same c4off:same +BB_144_14_14 -card-mto answer[o 14 want 14] stdout cand:same c4off:same probes cand:same c4off:same +BB_288_12_18 -no-card answer[o 18 want 18] stdout cand:same c4off:same probes cand:same c4off:same +BB_288_12_18 -card-mto answer[o 18 want 18] stdout cand:same c4off:same probes cand:same c4off:same +GB_144_12_12 -no-card answer[o 12 want 12] stdout cand:same c4off:same probes cand:same c4off:same +GB_144_12_12 -card-mto answer[o 12 want 12] stdout cand:same c4off:same probes cand:same c4off:same +LP_544_80_12 -no-card answer[o 12 want 12] stdout cand:same c4off:same probes cand:same c4off:same +LP_544_80_12 -card-mto answer[o 12 want 12] stdout cand:same c4off:same probes cand:same c4off:same +TN_108_2_12 -no-card answer[o 12 want 12] stdout cand:same c4off:same probes cand:same c4off:same +TN_108_2_12 -card-mto answer[o 12 want 12] stdout cand:same c4off:same probes cand:same c4off:same +TN_200_10_10 -no-card answer[o 10 want 10] stdout cand:same c4off:same probes cand:same c4off:same +TN_200_10_10 -card-mto answer[o 10 want 10] stdout cand:same c4off:same probes cand:same c4off:same +LP_714_100_16 -no-card answer[o 16 want 16] stdout cand:DIFF c4off:DIFF probes cand:DIFF c4off:DIFF +LP_714_100_16 -card-mto answer[ want 16] stdout cand:DIFF c4off:DIFF probes cand:DIFF c4off:DIFF +TN_144_2_13 -no-card answer[o 13 want 13] stdout cand:same c4off:same probes cand:same c4off:same +TN_144_2_13 -card-mto answer[o 13 want 13] stdout cand:same c4off:same probes cand:same c4off:same +LP_714_100_16 -no-card answer[o 16 want 16] stdout cand:same c4off:same probes cand:same c4off:same +LP_714_100_16 -card-mto answer[o 16 want 16] stdout cand:same c4off:same probes cand:same c4off:same +TN_250_10_15 -no-card answer[o 15 want 15] stdout cand:same c4off:same probes cand:same c4off:same +TN_250_10_15 -card-mto answer[o 15 want 15] stdout cand:same c4off:same probes cand:same c4off:same diff --git a/optimization/experiments/GH-218/T0/test_cc_66dc5b6.txt b/optimization/experiments/GH-218/T0/test_cc_66dc5b6.txt new file mode 100644 index 00000000..ae066d97 --- /dev/null +++ b/optimization/experiments/GH-218/T0/test_cc_66dc5b6.txt @@ -0,0 +1,1301 @@ +g++ -Isrc/solver -Wall -Wno-parentheses -O3 -g -D __STDC_LIMIT_MACROS -D __STDC_FORMAT_MACROS -DNDEBUG -std=c++17 -o build/test_cc_engine tests/test_cc_engine.cc build/SimpSolver.o build/Solver.o build/Options.o build/System.o build/cc_half.o build/cc_driver.o build/cc_ubsearch.o build/cc_aut.o -lz +In file included from src/solver/Solver.h:55, + from src/solver/SimpSolver.h:37, + from tests/../src/core/distqldpc.cc:47, + from tests/test_cc_engine.cc:100: +src/solver/utils/Options.h:285:29: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix] + 285 | fprintf(stderr, "%4"PRIi64, range.begin); + | ^ +src/solver/utils/Options.h:291:29: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix] + 291 | fprintf(stderr, "%4"PRIi64, range.end); + | ^ +src/solver/utils/Options.h:293:25: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix] + 293 | fprintf(stderr, "] (default: %"PRIi64")\n", value); + | ^ +tests/../src/core/distqldpc.cc: In function ‘void cc_sink_trap(void*)’: +tests/../src/core/distqldpc.cc:2026:29: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] + 2026 | if (pw >= 0) (void)write(pw, "RESULT -1 TRAP\n", 15); + | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~ +tests/../src/core/distqldpc.cc: In function ‘void pipe_bound(int, const char*, uint64_t)’: +tests/../src/core/distqldpc.cc:1456:29: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] + 1456 | if (len > 0) (void)write(pipe_w, buf, (size_t)len); + | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~ +tests/../src/core/distqldpc.cc: In function ‘void pipe_write_result(int, int, bool)’: +tests/../src/core/distqldpc.cc:171:20: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] + 171 | (void)write(pipe_w, buf, (size_t)n); + | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~ +./build/test_cc_engine +partI(a) (GH-157 charge): 20000 hitting-set instances, 0 bad (charge = tau on 15739; charge > pack on 4780) +partI(a) mutant 15 (charge + 1/D) exceeds tau on 17240 instances +partI(b) (GH-157 charge on the Part A halves): 345600 ladder runs (128 base subsets x 3 configurations x seeds 0..2), 0 bad, 9931487 charge prunes +mutant 15 (charge inflated by 1/D): 3408/38400 half ladders wrong +partA: 300 half instances (151 with verified orbits, 120 with all column weights odd, 113 without any nontrivial element), 115200 ladder runs over 128 rule subsets x 3 seeds, 0 bad +partA K (GH-138): 100 basis, 100 low-weight sets, 55 random sets; 80 instances where a minimum element meets a row of K in floor(|g|/2) qubits +partE (rotated surface codes d = 3, 4, X/Z swapped): 40 canonical checks, 0 bad +partF (MaxSAT -ub-pre): 1600 runs on 200 codes, 0 bad (first UB = d on 1426 runs, > d on 174 runs); mutant 1 200 runs, 0 bad; surface codes d = 3..5: 36 canonical/mutant-1 runs, 0 bad +partF mutant 2 (finder without detector check, words unverified): 4/200 code runs and 9/9 surface runs wrong +partG (a) encodings (binomial, sequential counter, native propagator; w = 1..14): 42 checks, 0 bad +partG (b) MaxSAT -stab-overlap: 4600 runs on 200 codes (178 codes where the rule removes an element of F of weight <= d + 2), 0 bad; surface codes d = 3..5: 24 runs, 0 bad +partG mutant 1 (limit floor(|g|/2) - 1): 110/424 runs failed, 40 with a wrong RESULT d OPTIMAL (0 on surface codes, 20 with the native propagator) +partG mutant 2 (parity rows of the half as g, unverified): 2/424 runs failed, 2 with a wrong RESULT d OPTIMAL (0 on surface codes) +c Mono: 0, fixed: 0 +c Reduced to 115 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=115, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2268 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 4 +c provided LB: 1 (search units 1) +c ***** top quasi confl at level 0***** +c ends of initiationization by VSIDS at 386 conflicts with init 9614 + +c UB=4 fails, cnfls=386, hcnfls=228, core 167, tier2 17, local 11, quasiC: 1 (fixed: 19) +c prunedLB 2.00, dev 0.00, succRate 0.97, nbSucc 71, nbHardens 156 (fixed 3136), lk: 73, shorten: 0, pureSo 88, nbFlyRd 38, nbFixedLH 0 +c no feasible solution, hardConflicts: 228 +c nbLK: 73, nbSuccLK: 71(97.26%), nbLKup: 3849(43.51%), hardens 156 (fixed 3136), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 115 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=115, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2268 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 4 +c provided LB: 1 (search units 1) +c ***** top quasi confl at level 0***** +c ends of initiationization by VSIDS at 386 conflicts with init 9614 + +c UB=4 fails, cnfls=386, hcnfls=228, core 167, tier2 17, local 11, quasiC: 1 (fixed: 19) +c prunedLB 2.00, dev 0.00, succRate 0.97, nbSucc 71, nbHardens 156 (fixed 3136), lk: 73, shorten: 0, pureSo 88, nbFlyRd 38, nbFixedLH 0 +c no feasible solution, hardConflicts: 228 +c nbLK: 73, nbSuccLK: 71(97.26%), nbLKup: 3849(43.51%), hardens 156 (fixed 3136), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 115 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=115, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2268 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 5 +c provided LB: 1 (search units 1) +c UB=5 succs, confls=30, hconfls=18, core 21, tier2 6, local 11, 4 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 12, nbFlyRd 5, nbFixedLH 0 +c nbHardens 5 (fixed 79), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 30 conflicts with init 9970 + +c UB=4 succ, confls=30 and hconfls=18 with 4 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 4, maxsat: 32, hardConflicts: 18 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 113(12.19%), hardens 5 (fixed 79), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 115 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=115, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2268 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 5 +c provided LB: 1 (search units 1) +c UB=5 succs, confls=30, hconfls=18, core 21, tier2 6, local 11, 4 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 12, nbFlyRd 5, nbFixedLH 0 +c nbHardens 5 (fixed 79), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 30 conflicts with init 9970 + +c UB=4 succ, confls=30 and hconfls=18 with 4 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 4, maxsat: 32, hardConflicts: 18 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 113(12.19%), hardens 5 (fixed 79), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 115 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=115, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2268 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=27, hconfls=25, core 10, tier2 2, local 15, 10 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 2, nbFlyRd 6, nbFixedLH 0 +c nbHardens 2 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 27 conflicts with init 9973 + +c UB=10 succ, confls=27 and hconfls=25 with 10 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 10, maxsat: 26, hardConflicts: 25 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 113(11.04%), hardens 2 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 115 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=115, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2268 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=19, hconfls=14, core 13, tier2 3, local 9, 8 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 5, nbFlyRd 3, nbFixedLH 0 +c nbHardens 2 (fixed 28), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 19 conflicts with init 9981 + +c UB=8 succ, confls=19 and hconfls=14 with 8 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 28, hardConflicts: 14 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 113(12.50%), hardens 2 (fixed 28), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 115 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=115, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2268 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=27, hconfls=25, core 10, tier2 2, local 15, 10 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 2, nbFlyRd 6, nbFixedLH 0 +c nbHardens 2 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 27 conflicts with init 9973 + +c UB=10 succ, confls=27 and hconfls=25 with 10 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 10, maxsat: 26, hardConflicts: 25 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 113(11.04%), hardens 2 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 115 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=115, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2268 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=19, hconfls=14, core 13, tier2 3, local 9, 8 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 5, nbFlyRd 3, nbFixedLH 0 +c nbHardens 2 (fixed 28), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 19 conflicts with init 9981 + +c UB=8 succ, confls=19 and hconfls=14 with 8 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 28, hardConflicts: 14 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 113(12.50%), hardens 2 (fixed 28), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 115 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=115, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2268 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=25, hconfls=22, core 9, tier2 1, local 15, 4 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 1, nbFlyRd 4, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 5.50, dev 0.50, succRate 0.67, nbSucc 2, lk: 3, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 25 conflicts with init 9975 + +c UB=4 succ, confls=25 and hconfls=22 with 4 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 2, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 4, maxsat: 32, hardConflicts: 22 +c nbLK: 3, nbSuccLK: 2(66.67%), nbLKup: 398(45.96%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 115 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=115, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2268 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=19, hconfls=14, core 13, tier2 3, local 9, 8 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 5, nbFlyRd 3, nbFixedLH 0 +c nbHardens 2 (fixed 28), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 2, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 19 conflicts with init 9981 + +c UB=8 succ, confls=19 and hconfls=14 with 8 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 28, hardConflicts: 14 +c nbLK: 2, nbSuccLK: 0(0.00%), nbLKup: 113(12.50%), hardens 2 (fixed 28), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 115 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=115, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2268 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=27, hconfls=25, core 10, tier2 2, local 15, 10 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 2, nbFlyRd 6, nbFixedLH 0 +c nbHardens 2 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 27 conflicts with init 9973 + +c UB=10 succ, confls=27 and hconfls=25 with 10 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 10, maxsat: 26, hardConflicts: 25 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 113(11.04%), hardens 2 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 115 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=115, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2268 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=19, hconfls=14, core 13, tier2 3, local 9, 8 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 5, nbFlyRd 3, nbFixedLH 0 +c nbHardens 2 (fixed 28), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 19 conflicts with init 9981 + +c UB=8 succ, confls=19 and hconfls=14 with 8 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 28, hardConflicts: 14 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 113(12.50%), hardens 2 (fixed 28), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 115 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=115, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2268 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=27, hconfls=25, core 10, tier2 2, local 15, 10 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 2, nbFlyRd 6, nbFixedLH 0 +c nbHardens 2 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 27 conflicts with init 9973 + +c UB=10 succ, confls=27 and hconfls=25 with 10 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 10, maxsat: 26, hardConflicts: 25 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 113(11.04%), hardens 2 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 115 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=115, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2268 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=19, hconfls=14, core 13, tier2 3, local 9, 8 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 5, nbFlyRd 3, nbFixedLH 0 +c nbHardens 2 (fixed 28), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 19 conflicts with init 9981 + +c UB=8 succ, confls=19 and hconfls=14 with 8 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 28, hardConflicts: 14 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 113(12.50%), hardens 2 (fixed 28), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 115 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=115, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2268 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=25, hconfls=22, core 9, tier2 1, local 15, 4 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 1, nbFlyRd 4, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 5.50, dev 0.50, succRate 0.67, nbSucc 2, lk: 3, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 25 conflicts with init 9975 + +c UB=4 succ, confls=25 and hconfls=22 with 4 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 2, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 4, maxsat: 32, hardConflicts: 22 +c nbLK: 3, nbSuccLK: 2(66.67%), nbLKup: 398(45.96%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 115 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=115, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2268 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=19, hconfls=14, core 13, tier2 3, local 9, 8 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 5, nbFlyRd 3, nbFixedLH 0 +c nbHardens 2 (fixed 28), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 2, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 19 conflicts with init 9981 + +c UB=8 succ, confls=19 and hconfls=14 with 8 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 28, hardConflicts: 14 +c nbLK: 2, nbSuccLK: 0(0.00%), nbLKup: 113(12.50%), hardens 2 (fixed 28), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 116 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=116, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2260 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 4 +c provided LB: 1 (search units 1) +c ***** top quasi confl at level 0***** +c ***** top quasi confl at level 0***** +c ends of initiationization by VSIDS at 363 conflicts with init 9637 + +c UB=4 fails, cnfls=363, hcnfls=224, core 130, tier2 16, local 17, quasiC: 12 (fixed: 113) +c prunedLB 2.26, dev 0.44, succRate 0.77, nbSucc 58, nbHardens 149 (fixed 2973), lk: 75, shorten: 0, pureSo 81, nbFlyRd 40, nbFixedLH 3 +c no feasible solution, hardConflicts: 224 +c nbLK: 75, nbSuccLK: 58(77.33%), nbLKup: 5097(61.02%), hardens 149 (fixed 2973), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 116 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=116, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2260 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 4 +c provided LB: 1 (search units 1) +c ***** top quasi confl at level 0***** +c ***** top quasi confl at level 0***** +c ends of initiationization by VSIDS at 363 conflicts with init 9637 + +c UB=4 fails, cnfls=363, hcnfls=224, core 130, tier2 16, local 17, quasiC: 12 (fixed: 113) +c prunedLB 2.26, dev 0.44, succRate 0.77, nbSucc 58, nbHardens 149 (fixed 2973), lk: 75, shorten: 0, pureSo 81, nbFlyRd 40, nbFixedLH 3 +c no feasible solution, hardConflicts: 224 +c nbLK: 75, nbSuccLK: 58(77.33%), nbLKup: 5097(61.02%), hardens 149 (fixed 2973), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 116 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=116, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2260 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 5 +c provided LB: 1 (search units 1) +c UB=5 succs, confls=8, hconfls=8, core 3, tier2 2, local 3, 4 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 0, nbFlyRd 2, nbFixedLH 0 +c nbHardens 2 (fixed 7), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 8 conflicts with init 9992 + +c UB=4 succ, confls=8 and hconfls=8 with 4 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 4, maxsat: 32, hardConflicts: 8 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 116(51.10%), hardens 2 (fixed 7), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 116 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=116, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2260 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 5 +c provided LB: 1 (search units 1) +c UB=5 succs, confls=8, hconfls=8, core 3, tier2 2, local 3, 4 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 0, nbFlyRd 2, nbFixedLH 0 +c nbHardens 2 (fixed 7), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 8 conflicts with init 9992 + +c UB=4 succ, confls=8 and hconfls=8 with 4 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 4, maxsat: 32, hardConflicts: 8 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 116(51.10%), hardens 2 (fixed 7), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 116 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=116, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2260 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=9, hconfls=9, core 4, tier2 2, local 3, 4 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 0, nbFlyRd 2, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 9 conflicts with init 9991 + +c UB=4 succ, confls=9 and hconfls=9 with 4 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 4, maxsat: 32, hardConflicts: 9 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 116(50.00%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 116 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=116, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2260 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=9, hconfls=9, core 4, tier2 2, local 3, 4 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 0, nbFlyRd 2, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 9 conflicts with init 9991 + +c UB=4 succ, confls=9 and hconfls=9 with 4 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 4, maxsat: 32, hardConflicts: 9 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 116(50.00%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 116 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=116, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2260 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=9, hconfls=9, core 4, tier2 2, local 3, 4 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 0, nbFlyRd 2, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 9 conflicts with init 9991 + +c UB=4 succ, confls=9 and hconfls=9 with 4 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 4, maxsat: 32, hardConflicts: 9 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 116(50.00%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 116 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=116, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2260 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=9, hconfls=9, core 4, tier2 2, local 3, 4 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 0, nbFlyRd 2, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 9 conflicts with init 9991 + +c UB=4 succ, confls=9 and hconfls=9 with 4 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 4, maxsat: 32, hardConflicts: 9 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 116(50.00%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 116 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=116, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2260 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=9, hconfls=9, core 4, tier2 2, local 3, 4 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 0, nbFlyRd 2, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 9 conflicts with init 9991 + +c UB=4 succ, confls=9 and hconfls=9 with 4 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 4, maxsat: 32, hardConflicts: 9 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 116(50.00%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 116 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=116, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2260 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=9, hconfls=9, core 4, tier2 2, local 3, 4 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 0, nbFlyRd 2, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 9 conflicts with init 9991 + +c UB=4 succ, confls=9 and hconfls=9 with 4 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 4, maxsat: 32, hardConflicts: 9 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 116(50.00%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 116 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=116, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2260 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=9, hconfls=9, core 4, tier2 2, local 3, 4 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 0, nbFlyRd 2, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 9 conflicts with init 9991 + +c UB=4 succ, confls=9 and hconfls=9 with 4 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 4, maxsat: 32, hardConflicts: 9 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 116(50.00%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 116 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=116, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2260 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=9, hconfls=9, core 4, tier2 2, local 3, 4 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 0, nbFlyRd 2, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 9 conflicts with init 9991 + +c UB=4 succ, confls=9 and hconfls=9 with 4 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 4, maxsat: 32, hardConflicts: 9 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 116(50.00%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 116 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=116, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2260 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=9, hconfls=9, core 4, tier2 2, local 3, 4 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 0, nbFlyRd 2, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 9 conflicts with init 9991 + +c UB=4 succ, confls=9 and hconfls=9 with 4 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 4, maxsat: 32, hardConflicts: 9 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 116(50.00%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 116 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=116, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2260 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=9, hconfls=9, core 4, tier2 2, local 3, 4 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 0, nbFlyRd 2, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 9 conflicts with init 9991 + +c UB=4 succ, confls=9 and hconfls=9 with 4 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 4, maxsat: 32, hardConflicts: 9 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 116(50.00%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 116 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=116, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2260 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=9, hconfls=9, core 4, tier2 2, local 3, 4 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 0, nbFlyRd 2, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 9 conflicts with init 9991 + +c UB=4 succ, confls=9 and hconfls=9 with 4 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 4, maxsat: 32, hardConflicts: 9 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 116(50.00%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 116 vars, 602 cls (c/v ratio==5.2, grow=0) +c No iterative elimination performed. (vars=116, c/v ratio=5.2) +c nb soft clauses: 36, of which 36 unit, 0 nonUnit and 0 empty +c total nb of literals: 2260 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 26 +c 1 conflict sets found with length 20 +c fixedCost 0, nbSatLits 0, totalFixedVars 26, objForSearch: 36 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=9, hconfls=9, core 4, tier2 2, local 3, 4 soft cls unsat (0 at L0), 26 fixed vars at L0, softCnfl 0, nbFlyRd 2, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 9 conflicts with init 9991 + +c UB=4 succ, confls=9 and hconfls=9 with 4 soft clauses unsat (0 at level 0) and 26 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 4, maxsat: 32, hardConflicts: 9 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 116(50.00%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 236 vars, 1266 cls (c/v ratio==5.4, grow=0) +c No iterative elimination performed. (vars=236, c/v ratio=5.4) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4800 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 8 +c provided LB: 1 (search units 1) +c nbFailedLits 0, nbI 0, fixedVarsByFL 0, totalFixedVars 44, nbTested: 236, counter 8766 +c nbFailedLits 0, nbI 0, fixedVarsByFL 0, totalFixedVars 44, nbTested: 236, counter 42536 +c ***** top quasi confl at level 0***** +c ends of initiationization by VSIDS at 8675 conflicts with init 1325 + +c UB=8 fails, cnfls=8675, hcnfls=795, core 1570, tier2 328, local 1680, quasiC: 1393 (fixed: 23038) +c prunedLB 4.06, dev 0.92, succRate 0.74, nbSucc 7624, nbHardens 195 (fixed 28345), lk: 10241, shorten: 0, pureSo 257, nbFlyRd 142, nbFixedLH 122 +c no feasible solution, hardConflicts: 795 +c nbLK: 10241, nbSuccLK: 7624(74.45%), nbLKup: 1647389(1064.42%), hardens 195 (fixed 28345), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 236 vars, 1266 cls (c/v ratio==5.4, grow=0) +c No iterative elimination performed. (vars=236, c/v ratio=5.4) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4800 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 8 +c provided LB: 1 (search units 1) +c nbFailedLits 0, nbI 0, fixedVarsByFL 0, totalFixedVars 44, nbTested: 236, counter 8766 +c nbFailedLits 0, nbI 0, fixedVarsByFL 0, totalFixedVars 44, nbTested: 236, counter 42536 +c ***** top quasi confl at level 0***** +c ends of initiationization by VSIDS at 8675 conflicts with init 1325 + +c UB=8 fails, cnfls=8675, hcnfls=795, core 1570, tier2 328, local 1680, quasiC: 1393 (fixed: 23038) +c prunedLB 4.06, dev 0.92, succRate 0.74, nbSucc 7624, nbHardens 195 (fixed 28345), lk: 10241, shorten: 0, pureSo 257, nbFlyRd 142, nbFixedLH 122 +c no feasible solution, hardConflicts: 795 +c nbLK: 10241, nbSuccLK: 7624(74.45%), nbLKup: 1647389(1064.42%), hardens 195 (fixed 28345), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 236 vars, 1266 cls (c/v ratio==5.4, grow=0) +c No iterative elimination performed. (vars=236, c/v ratio=5.4) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4800 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 9 +c provided LB: 1 (search units 1) +c UB=9 succs, confls=302, hconfls=181, core 244, tier2 34, local 208, 8 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 117, nbFlyRd 42, nbFixedLH 0 +c nbHardens 60 (fixed 1700), shorten: 0, prunedLB 2.00, dev 0.00, succRate 0.67, nbSucc 4, lk: 6, shorten: 0, quasiC: 1 (fixed: 18) + +c ends of initiationization by VSIDS at 302 conflicts with init 9698 + +c UB=8 succ, confls=302 and hconfls=181 with 8 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 4, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 64, hardConflicts: 181 +c nbLK: 6, nbSuccLK: 4(66.67%), nbLKup: 484(4.88%), hardens 60 (fixed 1700), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 236 vars, 1266 cls (c/v ratio==5.4, grow=0) +c No iterative elimination performed. (vars=236, c/v ratio=5.4) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4800 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 9 +c provided LB: 1 (search units 1) +c UB=9 succs, confls=302, hconfls=181, core 244, tier2 34, local 208, 8 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 117, nbFlyRd 42, nbFixedLH 0 +c nbHardens 60 (fixed 1700), shorten: 0, prunedLB 2.00, dev 0.00, succRate 0.67, nbSucc 4, lk: 6, shorten: 0, quasiC: 1 (fixed: 18) + +c ends of initiationization by VSIDS at 302 conflicts with init 9698 + +c UB=8 succ, confls=302 and hconfls=181 with 8 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 4, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 64, hardConflicts: 181 +c nbLK: 6, nbSuccLK: 4(66.67%), nbLKup: 484(4.88%), hardens 60 (fixed 1700), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 236 vars, 1266 cls (c/v ratio==5.4, grow=0) +c No iterative elimination performed. (vars=236, c/v ratio=5.4) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4800 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=432, hconfls=328, core 186, tier2 54, local 343, 8 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 43, nbFlyRd 49, nbFixedLH 6 +c nbHardens 47 (fixed 1203), shorten: 0, prunedLB 3.62, dev 1.15, succRate 0.91, nbSucc 61, lk: 67, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 432 conflicts with init 9568 + +c UB=8 succ, confls=432 and hconfls=328 with 8 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 61, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 64, hardConflicts: 328 +c nbLK: 67, nbSuccLK: 61(91.04%), nbLKup: 4451(29.36%), hardens 47 (fixed 1203), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 236 vars, 1266 cls (c/v ratio==5.4, grow=0) +c No iterative elimination performed. (vars=236, c/v ratio=5.4) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4800 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=286, hconfls=200, core 113, tier2 42, local 209, 10 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 86, nbFlyRd 50, nbFixedLH 0 +c nbHardens 29 (fixed 678), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 3, shorten: 0, quasiC: 1 (fixed: 6) + +c ends of initiationization by VSIDS at 286 conflicts with init 9714 + +c UB=10 succ, confls=286 and hconfls=200 with 10 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 10, maxsat: 62, hardConflicts: 200 +c nbLK: 3, nbSuccLK: 0(0.00%), nbLKup: 931(8.66%), hardens 29 (fixed 678), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 236 vars, 1266 cls (c/v ratio==5.4, grow=0) +c No iterative elimination performed. (vars=236, c/v ratio=5.4) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4800 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=308, hconfls=250, core 135, tier2 38, local 241, 8 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 36, nbFlyRd 41, nbFixedLH 3 +c nbHardens 35 (fixed 913), shorten: 0, prunedLB 4.27, dev 1.42, succRate 0.71, nbSucc 22, lk: 31, shorten: 0, quasiC: 2 (fixed: 17) + +c ends of initiationization by VSIDS at 308 conflicts with init 9692 + +c UB=8 succ, confls=308 and hconfls=250 with 8 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 22, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 64, hardConflicts: 250 +c nbLK: 31, nbSuccLK: 22(70.97%), nbLKup: 3490(30.31%), hardens 35 (fixed 913), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 236 vars, 1266 cls (c/v ratio==5.4, grow=0) +c No iterative elimination performed. (vars=236, c/v ratio=5.4) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4800 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=267, hconfls=185, core 99, tier2 37, local 198, 10 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 78, nbFlyRd 48, nbFixedLH 1 +c nbHardens 26 (fixed 608), shorten: 0, prunedLB 5.50, dev 1.12, succRate 0.50, nbSucc 4, lk: 8, shorten: 0, quasiC: 1 (fixed: 4) + +c ends of initiationization by VSIDS at 267 conflicts with init 9733 + +c UB=10 succ, confls=267 and hconfls=185 with 10 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 4, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 10, maxsat: 62, hardConflicts: 185 +c nbLK: 8, nbSuccLK: 4(50.00%), nbLKup: 1355(13.24%), hardens 26 (fixed 608), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 236 vars, 1266 cls (c/v ratio==5.4, grow=0) +c No iterative elimination performed. (vars=236, c/v ratio=5.4) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4800 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=146, hconfls=69, core 29, tier2 11, local 132, 8 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 3, nbFlyRd 32, nbFixedLH 19 +c nbHardens 0 (fixed 66), shorten: 0, prunedLB 6.15, dev 1.47, succRate 0.64, nbSucc 74, lk: 116, shorten: 0, quasiC: 11 (fixed: 66) + +c ends of initiationization by VSIDS at 146 conflicts with init 9854 + +c UB=8 succ, confls=146 and hconfls=69 with 8 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 74, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 64, hardConflicts: 69 +c nbLK: 116, nbSuccLK: 74(63.79%), nbLKup: 18671(452.63%), hardens 0 (fixed 66), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 236 vars, 1266 cls (c/v ratio==5.4, grow=0) +c No iterative elimination performed. (vars=236, c/v ratio=5.4) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4800 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=135, hconfls=83, core 22, tier2 20, local 113, 10 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 26, nbFlyRd 22, nbFixedLH 8 +c nbHardens 6 (fixed 110), shorten: 0, prunedLB 3.04, dev 0.81, succRate 0.74, nbSucc 26, lk: 35, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 135 conflicts with init 9865 + +c UB=10 succ, confls=135 and hconfls=83 with 10 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 26, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 10, maxsat: 62, hardConflicts: 83 +c nbLK: 35, nbSuccLK: 26(74.29%), nbLKup: 2152(44.03%), hardens 6 (fixed 110), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 236 vars, 1266 cls (c/v ratio==5.4, grow=0) +c No iterative elimination performed. (vars=236, c/v ratio=5.4) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4800 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=432, hconfls=328, core 186, tier2 54, local 343, 8 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 43, nbFlyRd 49, nbFixedLH 6 +c nbHardens 47 (fixed 1203), shorten: 0, prunedLB 3.62, dev 1.15, succRate 0.91, nbSucc 61, lk: 67, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 432 conflicts with init 9568 + +c UB=8 succ, confls=432 and hconfls=328 with 8 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 61, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 64, hardConflicts: 328 +c nbLK: 67, nbSuccLK: 61(91.04%), nbLKup: 4451(29.36%), hardens 47 (fixed 1203), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 236 vars, 1266 cls (c/v ratio==5.4, grow=0) +c No iterative elimination performed. (vars=236, c/v ratio=5.4) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4800 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=286, hconfls=200, core 113, tier2 42, local 209, 10 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 86, nbFlyRd 50, nbFixedLH 0 +c nbHardens 29 (fixed 678), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 3, shorten: 0, quasiC: 1 (fixed: 6) + +c ends of initiationization by VSIDS at 286 conflicts with init 9714 + +c UB=10 succ, confls=286 and hconfls=200 with 10 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 10, maxsat: 62, hardConflicts: 200 +c nbLK: 3, nbSuccLK: 0(0.00%), nbLKup: 931(8.66%), hardens 29 (fixed 678), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 236 vars, 1266 cls (c/v ratio==5.4, grow=0) +c No iterative elimination performed. (vars=236, c/v ratio=5.4) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4800 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=308, hconfls=250, core 135, tier2 38, local 241, 8 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 36, nbFlyRd 41, nbFixedLH 3 +c nbHardens 35 (fixed 913), shorten: 0, prunedLB 4.27, dev 1.42, succRate 0.71, nbSucc 22, lk: 31, shorten: 0, quasiC: 2 (fixed: 17) + +c ends of initiationization by VSIDS at 308 conflicts with init 9692 + +c UB=8 succ, confls=308 and hconfls=250 with 8 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 22, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 64, hardConflicts: 250 +c nbLK: 31, nbSuccLK: 22(70.97%), nbLKup: 3490(30.31%), hardens 35 (fixed 913), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 236 vars, 1266 cls (c/v ratio==5.4, grow=0) +c No iterative elimination performed. (vars=236, c/v ratio=5.4) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4800 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=267, hconfls=185, core 99, tier2 37, local 198, 10 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 78, nbFlyRd 48, nbFixedLH 1 +c nbHardens 26 (fixed 608), shorten: 0, prunedLB 5.50, dev 1.12, succRate 0.50, nbSucc 4, lk: 8, shorten: 0, quasiC: 1 (fixed: 4) + +c ends of initiationization by VSIDS at 267 conflicts with init 9733 + +c UB=10 succ, confls=267 and hconfls=185 with 10 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 4, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 10, maxsat: 62, hardConflicts: 185 +c nbLK: 8, nbSuccLK: 4(50.00%), nbLKup: 1355(13.24%), hardens 26 (fixed 608), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 236 vars, 1266 cls (c/v ratio==5.4, grow=0) +c No iterative elimination performed. (vars=236, c/v ratio=5.4) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4800 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=146, hconfls=69, core 29, tier2 11, local 132, 8 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 3, nbFlyRd 32, nbFixedLH 19 +c nbHardens 0 (fixed 66), shorten: 0, prunedLB 6.15, dev 1.47, succRate 0.64, nbSucc 74, lk: 116, shorten: 0, quasiC: 11 (fixed: 66) + +c ends of initiationization by VSIDS at 146 conflicts with init 9854 + +c UB=8 succ, confls=146 and hconfls=69 with 8 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 74, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 64, hardConflicts: 69 +c nbLK: 116, nbSuccLK: 74(63.79%), nbLKup: 18671(452.63%), hardens 0 (fixed 66), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 236 vars, 1266 cls (c/v ratio==5.4, grow=0) +c No iterative elimination performed. (vars=236, c/v ratio=5.4) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4800 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=135, hconfls=83, core 22, tier2 20, local 113, 10 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 26, nbFlyRd 22, nbFixedLH 8 +c nbHardens 6 (fixed 110), shorten: 0, prunedLB 3.04, dev 0.81, succRate 0.74, nbSucc 26, lk: 35, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 135 conflicts with init 9865 + +c UB=10 succ, confls=135 and hconfls=83 with 10 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 26, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 10, maxsat: 62, hardConflicts: 83 +c nbLK: 35, nbSuccLK: 26(74.29%), nbLKup: 2152(44.03%), hardens 6 (fixed 110), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 237 vars, 1266 cls (c/v ratio==5.3, grow=0) +c No iterative elimination performed. (vars=237, c/v ratio=5.3) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4792 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 8 +c provided LB: 1 (search units 1) +c nbFailedLits 0, nbI 0, fixedVarsByFL 0, totalFixedVars 44, nbTested: 237, counter 10184 +c ***** top quasi confl at level 0***** +c ends of initiationization by VSIDS at 5827 conflicts with init 4173 + +c UB=8 fails, cnfls=5827, hcnfls=638, core 3198, tier2 1697, local 2811, quasiC: 1033 (fixed: 17558) +c prunedLB 4.25, dev 1.02, succRate 0.71, nbSucc 5017, nbHardens 228 (fixed 26578), lk: 7043, shorten: 0, pureSo 173, nbFlyRd 148, nbFixedLH 119 +c no feasible solution, hardConflicts: 638 +c nbLK: 7043, nbSuccLK: 5017(71.23%), nbLKup: 1204732(1043.96%), hardens 228 (fixed 26578), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 237 vars, 1266 cls (c/v ratio==5.3, grow=0) +c No iterative elimination performed. (vars=237, c/v ratio=5.3) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4792 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 8 +c provided LB: 1 (search units 1) +c nbFailedLits 0, nbI 0, fixedVarsByFL 0, totalFixedVars 44, nbTested: 237, counter 10184 +c ***** top quasi confl at level 0***** +c ends of initiationization by VSIDS at 5827 conflicts with init 4173 + +c UB=8 fails, cnfls=5827, hcnfls=638, core 3198, tier2 1697, local 2811, quasiC: 1033 (fixed: 17558) +c prunedLB 4.25, dev 1.02, succRate 0.71, nbSucc 5017, nbHardens 228 (fixed 26578), lk: 7043, shorten: 0, pureSo 173, nbFlyRd 148, nbFixedLH 119 +c no feasible solution, hardConflicts: 638 +c nbLK: 7043, nbSuccLK: 5017(71.23%), nbLKup: 1204732(1043.96%), hardens 228 (fixed 26578), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 237 vars, 1266 cls (c/v ratio==5.3, grow=0) +c No iterative elimination performed. (vars=237, c/v ratio=5.3) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4792 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 9 +c provided LB: 1 (search units 1) +c UB=9 succs, confls=15, hconfls=13, core 6, tier2 3, local 6, 8 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 2, nbFlyRd 5, nbFixedLH 0 +c nbHardens 2 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 15 conflicts with init 9985 + +c UB=8 succ, confls=15 and hconfls=13 with 8 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 64, hardConflicts: 13 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 238(40.20%), hardens 2 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 237 vars, 1266 cls (c/v ratio==5.3, grow=0) +c No iterative elimination performed. (vars=237, c/v ratio=5.3) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4792 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 9 +c provided LB: 1 (search units 1) +c UB=9 succs, confls=15, hconfls=13, core 6, tier2 3, local 6, 8 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 2, nbFlyRd 5, nbFixedLH 0 +c nbHardens 2 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 15 conflicts with init 9985 + +c UB=8 succ, confls=15 and hconfls=13 with 8 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 64, hardConflicts: 13 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 238(40.20%), hardens 2 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 237 vars, 1266 cls (c/v ratio==5.3, grow=0) +c No iterative elimination performed. (vars=237, c/v ratio=5.3) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4792 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=15, hconfls=15, core 6, tier2 4, local 5, 8 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 0, nbFlyRd 4, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 15 conflicts with init 9985 + +c UB=8 succ, confls=15 and hconfls=15 with 8 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 64, hardConflicts: 15 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 238(43.91%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 237 vars, 1266 cls (c/v ratio==5.3, grow=0) +c No iterative elimination performed. (vars=237, c/v ratio=5.3) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4792 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=15, hconfls=13, core 6, tier2 3, local 6, 8 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 2, nbFlyRd 4, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 15 conflicts with init 9985 + +c UB=8 succ, confls=15 and hconfls=13 with 8 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 64, hardConflicts: 13 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 238(40.20%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 237 vars, 1266 cls (c/v ratio==5.3, grow=0) +c No iterative elimination performed. (vars=237, c/v ratio=5.3) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4792 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=15, hconfls=15, core 6, tier2 4, local 5, 8 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 0, nbFlyRd 4, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 15 conflicts with init 9985 + +c UB=8 succ, confls=15 and hconfls=15 with 8 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 64, hardConflicts: 15 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 238(43.91%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 237 vars, 1266 cls (c/v ratio==5.3, grow=0) +c No iterative elimination performed. (vars=237, c/v ratio=5.3) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4792 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=15, hconfls=13, core 6, tier2 3, local 6, 8 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 2, nbFlyRd 4, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 15 conflicts with init 9985 + +c UB=8 succ, confls=15 and hconfls=13 with 8 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 64, hardConflicts: 13 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 238(40.20%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 237 vars, 1266 cls (c/v ratio==5.3, grow=0) +c No iterative elimination performed. (vars=237, c/v ratio=5.3) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4792 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=15, hconfls=15, core 6, tier2 4, local 5, 8 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 0, nbFlyRd 4, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 15 conflicts with init 9985 + +c UB=8 succ, confls=15 and hconfls=15 with 8 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 64, hardConflicts: 15 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 238(43.91%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 237 vars, 1266 cls (c/v ratio==5.3, grow=0) +c No iterative elimination performed. (vars=237, c/v ratio=5.3) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4792 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=15, hconfls=13, core 6, tier2 3, local 6, 8 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 2, nbFlyRd 4, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 15 conflicts with init 9985 + +c UB=8 succ, confls=15 and hconfls=13 with 8 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 64, hardConflicts: 13 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 238(40.20%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 237 vars, 1266 cls (c/v ratio==5.3, grow=0) +c No iterative elimination performed. (vars=237, c/v ratio=5.3) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4792 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=15, hconfls=15, core 6, tier2 4, local 5, 8 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 0, nbFlyRd 4, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 15 conflicts with init 9985 + +c UB=8 succ, confls=15 and hconfls=15 with 8 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 64, hardConflicts: 15 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 238(43.91%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 237 vars, 1266 cls (c/v ratio==5.3, grow=0) +c No iterative elimination performed. (vars=237, c/v ratio=5.3) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4792 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=15, hconfls=13, core 6, tier2 3, local 6, 8 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 2, nbFlyRd 4, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 15 conflicts with init 9985 + +c UB=8 succ, confls=15 and hconfls=13 with 8 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 64, hardConflicts: 13 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 238(40.20%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 237 vars, 1266 cls (c/v ratio==5.3, grow=0) +c No iterative elimination performed. (vars=237, c/v ratio=5.3) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4792 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=15, hconfls=15, core 6, tier2 4, local 5, 8 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 0, nbFlyRd 4, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 15 conflicts with init 9985 + +c UB=8 succ, confls=15 and hconfls=15 with 8 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 64, hardConflicts: 15 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 238(43.91%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 237 vars, 1266 cls (c/v ratio==5.3, grow=0) +c No iterative elimination performed. (vars=237, c/v ratio=5.3) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4792 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=15, hconfls=13, core 6, tier2 3, local 6, 8 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 2, nbFlyRd 4, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 15 conflicts with init 9985 + +c UB=8 succ, confls=15 and hconfls=13 with 8 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 64, hardConflicts: 13 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 238(40.20%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 237 vars, 1266 cls (c/v ratio==5.3, grow=0) +c No iterative elimination performed. (vars=237, c/v ratio=5.3) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4792 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=15, hconfls=15, core 6, tier2 4, local 5, 8 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 0, nbFlyRd 4, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 15 conflicts with init 9985 + +c UB=8 succ, confls=15 and hconfls=15 with 8 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 64, hardConflicts: 15 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 238(43.91%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +c Mono: 0, fixed: 0 +c Reduced to 237 vars, 1266 cls (c/v ratio==5.3, grow=0) +c No iterative elimination performed. (vars=237, c/v ratio=5.3) +c nb soft clauses: 72, of which 72 unit, 0 nonUnit and 0 empty +c total nb of literals: 4792 +c conflLits 0, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 44 +c 1 conflict sets found with length 32 +c fixedCost 0, nbSatLits 0, totalFixedVars 44, objForSearch: 72 + +c provided UB: 11 +c provided LB: 1 (search units 1) +c UB=11 succs, confls=15, hconfls=13, core 6, tier2 3, local 6, 8 soft cls unsat (0 at L0), 44 fixed vars at L0, softCnfl 2, nbFlyRd 4, nbFixedLH 0 +c nbHardens 0 (fixed 0), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 1, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 15 conflicts with init 9985 + +c UB=8 succ, confls=15 and hconfls=13 with 8 soft clauses unsat (0 at level 0) and 44 fixed vars at level 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, shortened : 0 +c initCost: 0, fixedBySearch: 0, optimal: 8, maxsat: 64, hardConflicts: 13 +c nbLK: 1, nbSuccLK: 0(0.00%), nbLKup: 238(40.20%), hardens 0 (fixed 0), dynVars 0, shorten: 0 +partG (c) GH-218 dense flags: 32 checks, 0 bad; forced dense on/off probe answers on tier0 TN halves: 8 checks, 0 bad; pilot decisions: 8 runs, 0 not reproducible (kept on 2) +partG (c) GH-218 4-cycle row gate: 224 selections on 16 codes x 2 halves, 0 bad (gated 3964, kept 6224 rows over K >= 0); mutant 3 (overlaps counted instead of pairs) changes 78 selections +partB: 200 CSS codes (52 with a verified dual map, 51 with X-half orbits, 76 with dX != dZ, 54 with all-odd Hz), 8000 driver runs, 0 bad, 0 RESULT -1 +partD (MaxSAT split, -oddcap-skip off/on): 400 runs on 200 codes (56 with an all-odd half), 0 bad +partE (ub-search finder): 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +partE (driver with ub-search): 1600 runs, 0 bad, 39 levels abandoned (U <= w) +GH-146 finder stern2 : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder stern1 : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder dumer2 : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder stern2-l0-fresh : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder dumer1-l2-w1-b3-r5 : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder stern2-l3-w32-b2 : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder mutant 11 (collision mode, no detector check): trivial word returned on 41/41 halves +GH-146 CC driver in collision mode: 600 runs, 0 bad; mutant 11 8/8 runs stopped or wrong; mutant 12 8/8 failed, 8 with a wrong RESULT d OPTIMAL +GH-146 MaxSAT pre-pass in collision mode: 400 runs, 0 bad; mutant 1 200 runs, 0 bad; mutant 2 13/209 runs wrong (codes + surface) +GH-152 partG: 300 relabeled half instances, 365 Tanner generators (235 complete groups), 55 instances with coarser orbits than the GH-75 family, 115200 ladder runs (128 rule subsets x 3 seeds), 0 bad; generators violating the row classes 0; planted map preserved the row sets on 250 (185 with a complete group), missed 0 +GH-152 partH: 150 relabeled codes (100 hypergraph products, 34 with dX != dZ), 100 gain a verified dual map only through -cc-aut, 150 gain coarser X-half orbits; 2700 driver runs with -cc-aut=on, 0 bad; swap maps violating the classes 0 +mutant 13 (Tanner candidates and the cyclic shift i -> i+1 mod n kept without the GF(2) checks): half level 1408/19200 ladders wrong; driver 182/300 runs wrong or stopped +mutant 14 (Tanner swap map, or the identity, used as dual map without the GF(2) check): driver 49/150 runs wrong or stopped +GH-162 partT: 300 half instances (200 with orbits, 100 of them hidden -cc-aut orbits; 118 all-odd; 55 with a weight-2 row in K), 49 where the cut removes a minimum element (8 with orbits), 76800 ladder runs (64 rule subsets with overlap,tiebreak x 4 seeds; charge on seeds 1 and 3), 0 bad +mutant 17 (tiebreak without the first(g) exemption: naive tie cut): 5152/76800 half ladders wrong +mutant 18 (tiebreak order without the seed first: orbit-incompatible): 160/76800 half ladders wrong (160 with orbit seeds) +GH-183 partR: 300 half instances (197 with orbits, 89 with rows unreachable from qubit 0), 384000 ladder runs (64 rule subsets x {-, overlap, overlap+tiebreak} x 4 seeds with roworder bfs, charge on seeds 1 and 3; tiebreak also tbbase asc under bfs and index), 0 bad; bfs orders not using every row 0; instances where bfs changes the node count 66 +mutant 19 (bfs order drops a row): 9088/28800 half ladders wrong +mutant 20 (bfs without restart: unreachable rows dropped): 4656/28800 half ladders wrong +GH-181 partX: 300 half instances (262 with sparse rows, 98 with sparseov rows), 576000 ladder runs (128 base subsets x 15 token subsets; charge, tiebreak and bfs mixed in), 0 bad; runs where the rule acted: spack 62833, sprune 57784, ovtightx 22208, xuforbid 154831, xuforced 135021, xudead 148662 +mutant 22 (GH-181 sparse redundant row with one qubit flipped): 33092/268800 half ladders wrong +mutant 23 (GH-181 xorunit branches on an even unit row): 30919/307200 half ladders wrong +mutant 24 (GH-181 sparseov pair sums of H instead of K): 18602/153600 half ladders wrong +GH-206 auto probe (Part B): 1800 driver runs (forced switch / stay / by time, finder on and off, tbbase asc), 0 bad +mutant 21 (auto probe of level w + 1, an aborted probe taken as refuted): 18/400 driver runs wrong or stopped +mutant 1 (forbidden set not restored): 988/19200 half ladders wrong +mutant 2 (packing prune >=): 4112/19200 half ladders wrong +mutant 3 (orbit seed rule off by one, instances with orbits): 1856/9664 half ladders wrong +mutant 4 (stop rule without other half's lb, forces sequential): schedule requested 58/200 runs wrong; default options 58/200 wrong +mutant 5 (parity rule forced on halves with an even column weight): 6976/11520 half ladders wrong +mutant 6 (leaf budget off by one): 2112/19200 half ladders wrong +mutant 7 (leaf closure without the detector check): 1760/19200 half ladders wrong +mutant 8 (overlap limit off by one): 2880/19200 half ladders wrong +mutant 9 (overlap with the parity checks H as K): 3776/19200 half ladders wrong +mutant 10 (overlap even-|g| tie cut): 2112/19200 half ladders wrong +mutant 11 (ub-search without the detector check; halves/codes where a trivial word is lighter than d): finder returned a trivial word on 33/33 halves; driver 8/8 runs stopped or wrong +mutant 12 (mutant 11 + words reported without verification): 8/8 driver runs failed, 8 of them with a wrong RESULT d OPTIMAL +CC_ENGINE_TESTS PASS +rc 0 diff --git a/optimization/experiments/GH-218/T0/test_cc_flags_66dc5b6.txt b/optimization/experiments/GH-218/T0/test_cc_flags_66dc5b6.txt new file mode 100644 index 00000000..4988bdec --- /dev/null +++ b/optimization/experiments/GH-218/T0/test_cc_flags_66dc5b6.txt @@ -0,0 +1,3 @@ +test_cc_flags: 579 checks, 0 failed +CC_FLAG_TESTS PASS +rc 0 diff --git a/optimization/experiments/GH-218/T0/u0_caps_tier2-4_5seeds.txt b/optimization/experiments/GH-218/T0/u0_caps_tier2-4_5seeds.txt new file mode 100644 index 00000000..95559722 --- /dev/null +++ b/optimization/experiments/GH-218/T0/u0_caps_tier2-4_5seeds.txt @@ -0,0 +1,41 @@ +tier2/TN_108_2_12 -no-card s0 | c ub-pre: U0 after 0.006s (both halves converged; iterations X 17 Z 19, words X 1 Z 0): 12 (X 12, Z -1) | caps 1,1,2,2,4,4,8,8,11,11, | pilot_lines 0 +tier2/TN_108_2_12 -no-card s1 | c ub-pre: U0 after 0.005s (both halves converged; iterations X 19 Z 18, words X 1 Z 1): 12 (X 13, Z 12) | caps 1,1,2,2,4,4,8,8,11,11, | pilot_lines 0 +tier2/TN_108_2_12 -no-card s2 | c ub-pre: U0 after 0.009s (both halves converged; iterations X 19 Z 18, words X 1 Z 0): 12 (X 12, Z -1) | caps 1,1,2,2,4,4,8,8,11,11, | pilot_lines 0 +tier2/TN_108_2_12 -no-card s3 | c ub-pre: U0 after 0.011s (both halves converged; iterations X 20 Z 16, words X 1 Z 0): 12 (X 12, Z -1) | caps 1,1,2,2,4,4,8,8,11,11, | pilot_lines 0 +tier2/TN_108_2_12 -no-card s4 | c ub-pre: U0 after 0.013s (both halves converged; iterations X 18 Z 17, words X 1 Z 0): 12 (X 12, Z -1) | caps 1,1,2,2,4,4,8,8,11,11, | pilot_lines 0 +tier2/TN_108_2_12 -card-mto s0 | c ub-pre: U0 after 0.006s (both halves converged; iterations X 17 Z 19, words X 1 Z 0): 12 (X 12, Z -1) | caps 1,1,2,2,4,4,8,8,11,11, | pilot_lines 0 +tier2/TN_108_2_12 -card-mto s1 | c ub-pre: U0 after 0.009s (both halves converged; iterations X 19 Z 18, words X 1 Z 1): 12 (X 13, Z 12) | caps 1,1,2,2,4,4,8,8,11,11, | pilot_lines 0 +tier2/TN_108_2_12 -card-mto s2 | c ub-pre: U0 after 0.006s (both halves converged; iterations X 19 Z 18, words X 1 Z 0): 12 (X 12, Z -1) | caps 1,1,2,2,4,4,8,8,11,11, | pilot_lines 0 +tier2/TN_108_2_12 -card-mto s3 | c ub-pre: U0 after 0.009s (both halves converged; iterations X 20 Z 16, words X 1 Z 0): 12 (X 12, Z -1) | caps 1,1,2,2,4,4,8,8,11,11, | pilot_lines 0 +tier2/TN_108_2_12 -card-mto s4 | c ub-pre: U0 after 0.003s (both halves converged; iterations X 18 Z 17, words X 1 Z 0): 12 (X 12, Z -1) | caps 1,1,2,2,4,4,8,8,11,11, | pilot_lines 0 +tier2/TN_200_10_10 -no-card s0 | c ub-pre: U0 after 0.175s (both halves converged; iterations X 1001 Z 17, words X 1 Z 1): 10 (X 15, Z 10) | caps 1,1,2,2,4,4,8,8,9,9, | pilot_lines 0 +tier2/TN_200_10_10 -no-card s1 | c ub-pre: U0 after 0.180s (both halves converged; iterations X 1001 Z 18, words X 1 Z 1): 10 (X 14, Z 10) | caps 1,1,2,2,4,4,8,8,9,9, | pilot_lines 0 +tier2/TN_200_10_10 -no-card s2 | c ub-pre: U0 after 0.176s (both halves converged; iterations X 1001 Z 18, words X 1 Z 1): 10 (X 15, Z 10) | caps 1,1,2,2,4,4,8,8,9,9, | pilot_lines 0 +tier2/TN_200_10_10 -no-card s3 | c ub-pre: U0 after 0.180s (both halves converged; iterations X 1001 Z 17, words X 1 Z 1): 10 (X 16, Z 10) | caps 1,1,2,2,4,4,8,8,9,9, | pilot_lines 0 +tier2/TN_200_10_10 -no-card s4 | c ub-pre: U0 after 0.177s (both halves converged; iterations X 1001 Z 17, words X 1 Z 1): 10 (X 16, Z 10) | caps 1,1,2,2,4,4,8,8,9,9, | pilot_lines 0 +tier2/TN_200_10_10 -card-mto s0 | c ub-pre: U0 after 0.163s (both halves converged; iterations X 1001 Z 17, words X 1 Z 1): 10 (X 15, Z 10) | caps 1,1,2,2,4,4,8,8,9,9, | pilot_lines 0 +tier2/TN_200_10_10 -card-mto s1 | c ub-pre: U0 after 0.161s (both halves converged; iterations X 1001 Z 18, words X 1 Z 1): 10 (X 14, Z 10) | caps 1,1,2,2,4,4,8,8,9,9, | pilot_lines 0 +tier2/TN_200_10_10 -card-mto s2 | c ub-pre: U0 after 0.161s (both halves converged; iterations X 1001 Z 18, words X 1 Z 1): 10 (X 15, Z 10) | caps 1,1,2,2,4,4,8,8,9,9, | pilot_lines 0 +tier2/TN_200_10_10 -card-mto s3 | c ub-pre: U0 after 0.165s (both halves converged; iterations X 1001 Z 17, words X 1 Z 1): 10 (X 16, Z 10) | caps 1,1,2,2,4,4,8,8,9,9, | pilot_lines 0 +tier2/TN_200_10_10 -card-mto s4 | c ub-pre: U0 after 0.161s (both halves converged; iterations X 1001 Z 17, words X 1 Z 1): 10 (X 16, Z 10) | caps 1,1,2,2,4,4,8,8,9,9, | pilot_lines 0 +tier3/TN_144_2_13 -no-card s0 | c ub-pre: U0 after 0.013s (both halves converged; iterations X 71 Z 87, words X 2 Z 0): 13 (X 13, Z -1) | caps 1,1,2,2,4,4,8,8,12, | pilot_lines 0 +tier3/TN_144_2_13 -no-card s1 | c ub-pre: U0 after 0.017s (both halves converged; iterations X 126 Z 84, words X 1 Z 2): 13 (X 15, Z 13) | caps 1,1,2,2,4,4,8,8,12,12, | pilot_lines 0 +tier3/TN_144_2_13 -no-card s2 | c ub-pre: U0 after 0.013s (both halves converged; iterations X 70 Z 89, words X 1 Z 0): 13 (X 13, Z -1) | caps 1,1,2,2,4,4,8,8,12,12, | pilot_lines 0 +tier3/TN_144_2_13 -no-card s3 | c ub-pre: U0 after 0.012s (both halves converged; iterations X 60 Z 82, words X 1 Z 0): 13 (X 13, Z -1) | caps 1,1,2,2,4,4,8,8,12, | pilot_lines 0 +tier3/TN_144_2_13 -no-card s4 | c ub-pre: U0 after 0.019s (both halves converged; iterations X 99 Z 135, words X 2 Z 1): 13 (X 13, Z 14) | caps 1,1,2,2,4,4,8,8,12,12, | pilot_lines 0 +tier3/TN_144_2_13 -card-mto s0 | c ub-pre: U0 after 0.014s (both halves converged; iterations X 64 Z 105, words X 1 Z 1): 13 (X 15, Z 13) | caps 1,1,2,2,4,4,8,8,12,12, | pilot_lines 0 +tier3/TN_144_2_13 -card-mto s1 | c ub-pre: U0 after 0.017s (both halves converged; iterations X 126 Z 84, words X 1 Z 2): 13 (X 15, Z 13) | caps 1,1,2,2,4,4,8,8,12,12, | pilot_lines 0 +tier3/TN_144_2_13 -card-mto s2 | c ub-pre: U0 after 0.013s (both halves converged; iterations X 70 Z 89, words X 1 Z 0): 13 (X 13, Z -1) | caps 1,1,2,2,4,4,8,8,12, | pilot_lines 0 +tier3/TN_144_2_13 -card-mto s3 | c ub-pre: U0 after 0.012s (both halves converged; iterations X 60 Z 82, words X 1 Z 0): 13 (X 13, Z -1) | caps 1,1,2,2,4,4,8,8,12,12, | pilot_lines 0 +tier3/TN_144_2_13 -card-mto s4 | c ub-pre: U0 after 0.019s (both halves converged; iterations X 99 Z 135, words X 2 Z 1): 13 (X 13, Z 14) | caps 1,1,2,2,4,4,8,8,12,12, | pilot_lines 0 +tier4/TN_250_10_15 -no-card s0 | c ub-pre: U0 after 0.148s (both halves converged; iterations X 258 Z 345, words X 1 Z 1): 15 (X 19, Z 15) | caps 1,1,2,2,4,4,8,8, | pilot_lines 0 +tier4/TN_250_10_15 -no-card s1 | c ub-pre: U0 after 0.184s (both halves converged; iterations X 280 Z 467, words X 2 Z 1): 15 (X 15, Z 16) | caps 1,1,2,2,4,4,8,8, | pilot_lines 0 +tier4/TN_250_10_15 -no-card s2 | c ub-pre: U0 after 0.194s (both halves converged; iterations X 325 Z 478, words X 2 Z 0): 15 (X 15, Z -1) | caps 1,1,2,2,4,4,8,8, | pilot_lines 0 +tier4/TN_250_10_15 -no-card s3 | c ub-pre: U0 after 0.163s (both halves converged; iterations X 235 Z 444, words X 2 Z 2): 15 (X 15, Z 16) | caps 1,1,2,2,4,4,8,8, | pilot_lines 0 +tier4/TN_250_10_15 -no-card s4 | c ub-pre: U0 after 0.173s (both halves converged; iterations X 311 Z 392, words X 2 Z 0): 15 (X 15, Z -1) | caps 1,1,2,2,4,4,8,8, | pilot_lines 0 +tier4/TN_250_10_15 -card-mto s0 | c ub-pre: U0 after 0.148s (both halves converged; iterations X 258 Z 345, words X 1 Z 1): 15 (X 19, Z 15) | caps 1,1,2,2,4,4,8,8, | pilot_lines 0 +tier4/TN_250_10_15 -card-mto s1 | c ub-pre: U0 after 0.182s (both halves converged; iterations X 280 Z 467, words X 2 Z 1): 15 (X 15, Z 16) | caps 1,1,2,2,4,4,8,8, | pilot_lines 0 +tier4/TN_250_10_15 -card-mto s2 | c ub-pre: U0 after 0.196s (both halves converged; iterations X 325 Z 478, words X 2 Z 0): 15 (X 15, Z -1) | caps 1,1,2,2,4,4,8,8, | pilot_lines 0 +tier4/TN_250_10_15 -card-mto s3 | c ub-pre: U0 after 0.164s (both halves converged; iterations X 235 Z 444, words X 2 Z 2): 15 (X 15, Z 16) | caps 1,1,2,2,4,4,8,8, | pilot_lines 0 +tier4/TN_250_10_15 -card-mto s4 | c ub-pre: U0 after 0.173s (both halves converged; iterations X 311 Z 392, words X 2 Z 0): 15 (X 15, Z -1) | caps 1,1,2,2,4,4,8,8, | pilot_lines 0 +DONE From e2a881490cf80f72bad84c40d6dbb318f10dd22f Mon Sep 17 00:00:00 2001 From: yfc Date: Wed, 4 Nov 2026 22:37:37 +0800 Subject: [PATCH 12/12] GH-218: Tier 5 logs and table; docs point to the experiment directory and the PR Co-Authored-By: Claude Opus 5.5 --- MODIFICATIONS.md | 4 +-- .../experiments/GH-218/T5/t5_logs.tgz | Bin 0 -> 9078 bytes .../experiments/GH-218/T5/t5_table.txt | 24 ++++++++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 optimization/experiments/GH-218/T5/t5_logs.tgz create mode 100644 optimization/experiments/GH-218/T5/t5_table.txt diff --git a/MODIFICATIONS.md b/MODIFICATIONS.md index c6ed6338..48b8c80f 100644 --- a/MODIFICATIONS.md +++ b/MODIFICATIONS.md @@ -591,8 +591,8 @@ the pilot runs on the small Part B codes; also pilot off and one seed); Part G ( a brute-force 4-cycle count on every tier0 code and the tier2 / tier4 TN codes for 7 values of N, the dense flags partition the verified rows, forced with / without dense rows the probe answers agree at caps d - 1 and d on the tier0 TN halves, and pilot decisions are reproducible; test mutant 3 (overlaps counted instead of qubit pairs) changes -selections and is caught. `make test-cc-flags`: values, conflicts, `-v` lines, a pilot line on TN_108_2_12 with -`-ub-pre=off`, none with `-stab-overlap-pilot=0`. *Evidence.* `optimization/experiments/GH-218/REPORT.md`. +selections and is caught. `make test-cc-flags`: values, conflicts, `-v` lines; on TN_108_2_12 with `-ub-pre=off` (caps up to 16) a +`c OVERLAP-DROP X cap 16` line by default and a pilot line with `-stab-overlap-pilot=3`; with `-ub-pre` no line. *Evidence.* `optimization/experiments/GH-218/` and the PR for issue #218. Fix round 1 (S0a): the S0 spec's literal mutants 3 ("orbit seeds without forbidding earlier orbits") and 4 ("stop rule without checking the other half's lower bound") are equivalent mutants as built: the first only drops a diff --git a/optimization/experiments/GH-218/T5/t5_logs.tgz b/optimization/experiments/GH-218/T5/t5_logs.tgz new file mode 100644 index 0000000000000000000000000000000000000000..b5a595bee822ed4fd5a8ec40fed9222617f5187e GIT binary patch literal 9078 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�u12N`%hgiwcNT zE|Ti2-ZABw$rBk;dAe-q6;m04tkJ*_qv*i7#a*hT~S(5nj;E?EGcN%`@1 z=B^%7D&Hk@kXK-_2YnWQ}&_{fcl%7V$u&FDu^5oJb=kE;{C3V)6Wr75~d6$j3FVI0(&0 z1F2pszVZYL+v&qRF6J_``VR@08o73t5ukpmI!sb%4F_Cy>~MQcbm-?F6V)$*K_h}h&FqVRx6)!}USd+p!r@MY&hjyi}SG0x>w?rNkn|loteL5KjRA+&Bef5tDVMhe zFa(wKd@05FuTsx%Wjajc#7U$KK(bJRK_X3=iR@GU3*2AXT1{##^J3z97^Gt!R-$Bz zDHC1o;Ej)IhaUI*D>OSzoUwGnwnnl{Q{PPUOGDPi6)31Y9^>!rA=(@c3QQ<7bRyD91H;jQT7Q z038=3IG8B}$A>K_2j5~7_JF!JB;yjkwuMeSegIiL0rqIx4NYb1PL!<|fD39)O7Te_V%#c=>MQjBNO- z&#@`%Lu$(X%&KOg$)S6B(GdBp0)nYoov^Xf2L69~%J)hkiwAY?D<# ziYX9Of5+13Qh)5MQ_q?mPsx`d$lRW$;rOS1zwZRT$TiSJ79dHs!_pW85R z0pKG!Yo$IoLK+RVzr%arSsgfIOeBMI;m5P`AWCF@;XIGJ=Z~8O6c$}Aa}t1iANUmW z;0lg}N;N#j2(zT-;iIqW4$^@l2}Bt2VihU*B^U|&p7e(qlmu?&nq|r151My+Xd0tnBQ%`RLcl>M9OLgxANc z{+7UEe+p)+cO`rp3CKc`>|tDzn6}vEb!f5>SAU@{77OiHTmcy+7at)G37u{aZTM^J zDQ_`V??^d1&7tO*B3|hIdHL;eMNk0|)mJNLo;0?)h04pFYY``vkMXtN{7iHN`I)es zMeWbaDPPx^JJGb2CkbS_)F%Q4i4W#`(PZ=-UsQLKR3i+yU+P-XSa=+%meg zAOc35k-JOd7f|fQ8N5ePvowdle-3dw(CgE@;c4&i*c%JGM*;`f#vl3cG--3ecA0-u zWNdY?i*wZ{Kb}ZrYuE=SXWL_g?3UBtIN~!8vW9w-@)5v4!EI)bH&n6JLTO~UNG#s7 z7k4+Hhn-r3wUi6zw-&y8!7BDHwMG516l=LG-0eE=eKgJ}C;5`p*E84%Q@#07H+aSG zCJF?i#Bqq2-cLa1+h6d=^%h`m9;;Rnx&+Lduo@D8(824}re3mVGatDf411wGa@)ni z?%0b&Tb8@eoKP&D1?AUt(Vzw)VA>N7)MEPiV_}~a-*8Y;*4tp)*5}q9HC4E*zXjDj zNXthlC&R(Kl)Pe&?K*<;5AF~mV5Hf&V;-p>z#f5m7<+VO z6j(P0=2U{e2QivLL^%cspBqSwZ2kH-#Tp#Z;;D~E-a;7_2AB8j#u}YT|L{T|p|6)< zLaWc1hIl@DY3HAChyIPS-bNpDDyNb)_g3PQJ+=+x`&jRLBW!|+-Sz-(QWQgjvma(i z*Z!T_1Qt=1#kp`Y-)9Mb)=byAr$ODnE@th8lgjIS3fn+-f@lb(gXQRO1%J9XAsF)a zctpg_levxh@+kGvk;4MHz2r%{{`9j7wrbNSAq@w4)upNH_f{x>h0BG%uZc` z>GLc7#UbAksG+3X_02tF1s2+?)&<5UWhQkN-|vH{_q*43-H4DU9LJlc)iz804_jvj zUjA50D>%eAN;F3wJ@>bRmzcHB;nz8?C?=*=(aGT`NiKPSe_JqOCQ4=2 zWXJ21zy_(vs4&k$-#4<7!Xtc3H;TV@Zy�nsMW09PN3cVz|_<=6!S61blAuXpI#$ z>DUs^3rqd6PfDw@^&VdE&!Cj0)*VZ*uv$_88x{l6Q=hNd8xX)Bf9)>#a1XcoL-U&b zf{s?qwGvERvBQXPS|*XNtEdg=URpkjsbJ!8E|j3-tDwofYD-TX9cpF^g*A>XgHutb#C(EgJ;o~}M@8>d~yfjZ`9^`SvJ^CP}(;J%N zKa2RMv96sqS@?8^D-Ij5Ri|gP9|hV|)=l1wV2qA7V9D#UxH%M%Zt%iYXhx0Pz;kw> zhfxsp+|+w?$J3&VVuBWTd~=gX=PKjlyZESmli8Fn!)cP$V@aXec-iV$r66jH)WN#j z6^0_poFXO+3osS$GFVPymZo;0ELng*`N`4+bq^88RphGcHuiAtXaolD8b;vbHauei zwK}8^ru^rB?eAX&#NntIZnn;j;cTJTY`dOUhto&|%(Ww=j_sM!BA|pWO#W_XgtCP; z+A~FbT0?mJdl?r!uzrY=_n!}Ms0Q;V z8g{&$*!VNqh{GfqDrN>H_8d_vs2;qOY2Oqoi(LoTXV6gi*FYUkO05iECZjSv26uj_ zqA#yrqH^C5eF_UqdSc?GoJ@7@Rgy4_kj-CCbhwKDVy&SNf{ zC+!Q=5-oxfgWT-*mNM;T?YsKy)kz`|5gDSH!HLK}nwBPZE8LGdM_Uuvhc)w~75(q? zW^7ujt!ihV$S5Z47k#jzWZmgZw?C$72T7c1Y&Sz@