{
  "asset": "A5 \u2014 CEGIS matching lower bound: \u0398(independently-necessary atoms) rounds (optimal)",
  "n_classes": 6,
  "n_classes_adversary_forces_tight_bound": 6,
  "n_batch_guess_refuted": 6,
  "n_classes_with_a_redundant_Z_atom": 0,
  "all_tight": true,
  "per_class": [
    {
      "class": "openssl_heartbeat",
      "k_in_bounds_atoms": 1,
      "independent_atoms_isolated": 1,
      "redundant_atoms_in_Z": 0,
      "simulated_adversary_rounds": 1,
      "synthesizer_state_transitions": 2,
      "adversary_forces_tight_bound": true,
      "batch_guess_refuted": true,
      "n_distractors": 2
    },
    {
      "class": "libxml2_len_overflow",
      "k_in_bounds_atoms": 1,
      "independent_atoms_isolated": 1,
      "redundant_atoms_in_Z": 0,
      "simulated_adversary_rounds": 1,
      "synthesizer_state_transitions": 2,
      "adversary_forces_tight_bound": true,
      "batch_guess_refuted": true,
      "n_distractors": 2
    },
    {
      "class": "zlib_inflate_extra",
      "k_in_bounds_atoms": 2,
      "independent_atoms_isolated": 2,
      "redundant_atoms_in_Z": 0,
      "simulated_adversary_rounds": 2,
      "synthesizer_state_transitions": 3,
      "adversary_forces_tight_bound": true,
      "batch_guess_refuted": true,
      "n_distractors": 2
    },
    {
      "class": "libpng_rfc1123",
      "k_in_bounds_atoms": 2,
      "independent_atoms_isolated": 2,
      "redundant_atoms_in_Z": 0,
      "simulated_adversary_rounds": 2,
      "synthesizer_state_transitions": 3,
      "adversary_forces_tight_bound": true,
      "batch_guess_refuted": true,
      "n_distractors": 2
    },
    {
      "class": "sudo_set_cmnd",
      "k_in_bounds_atoms": 1,
      "independent_atoms_isolated": 1,
      "redundant_atoms_in_Z": 0,
      "simulated_adversary_rounds": 1,
      "synthesizer_state_transitions": 2,
      "adversary_forces_tight_bound": true,
      "batch_guess_refuted": true,
      "n_distractors": 2
    },
    {
      "class": "curl_ntlm_type3",
      "k_in_bounds_atoms": 2,
      "independent_atoms_isolated": 2,
      "redundant_atoms_in_Z": 0,
      "simulated_adversary_rounds": 2,
      "synthesizer_state_transitions": 3,
      "adversary_forces_tight_bound": true,
      "batch_guess_refuted": true,
      "n_distractors": 2
    }
  ],
  "lean": {
    "leanchecker_available": true,
    "kernel_checked": true,
    "false_control_rejected": true
  },
  "theorem": "any counterexample-guided synthesizer needs \u2265 (independently-necessary atoms) rounds (each CE certifies \u2264 1 atom); the repo's synthesizer meets it, so the round complexity is exactly \u0398(independent atoms), matching check_cegis_convergence's upper bound. For all 6 classes that count is now |in_bounds| \u2014 see superseded_z_redundancy_note for the zlib/curl correction.",
  "vacuity_guardrails": "(1) distractors make the pool > target so guessing is impossible; (2) the adversary is ADAPTIVE (chooses each CE vs the current hypothesis), so the bound holds against ANY learner; (3) a batch-guess of the whole pool is refuted as unsound (distractors over-reject) \u2014 no shortcut.",
  "superseded_z_redundancy_note": {
    "previous_claim": "zlib/curl carry a no-wrap atom (off+copy <= UMAX) that is IMPLIED by the capacity atom over the Z domain, so it is not independently necessary \u2014 the adversary correctly forces 1 round, not 2.",
    "status": "WITHDRAWN 2026-08-19 \u2014 the claim was false.",
    "why_it_was_wrong": "domain_full for these classes is only off,copy,cap >= 0; `cap` is NOT bounded by UMAX there, so off+copy <= cap does not bound off+copy by UMAX. The repo's own solver-free decision procedure refutes the implication in BOTH directions: dp._implies(domain_full + [capacity], [no_wrap]) is False and dp._implies(domain_full + [no_wrap], [capacity]) is False, for zlib and curl alike. The old 'independent = 1' verdict was an artefact of the adversary's evaluation grid topping out at 20, which contains no point where off+copy exceeds UMAX, so no counterexample could isolate the no-wrap atom. Widening the grid to the type boundaries (foundry/crs/cegis._grid) fixed the sampling and both atoms are now correctly found independently necessary.",
    "effect_on_the_result": "STRICTLY STRONGER, not weaker: the forced lower bound for zlib and curl rises from 1 round to 2, and n_classes_with_a_redundant_Z_atom falls from 2 to 0. The disclosure is kept here rather than deleted because a withdrawn claim is part of the record.",
    "reproduce": "python3 -c \"import formal.decision_procedure as dp; fs=dp.FRAGMENT_SPECS['zlib_inflate_extra']; ...\" \u2014 see tests/test_cegis_lower_bound.py::test_z_redundancy_withdrawn"
  },
  "honest_scope": "A SUPPORTING footnote, not a headline (corrected after adversarial review): (a) it is a \u0398-ORDER result \u2014 the synthesizer meets the bound only up to a constant (synth transitions \u2265 independent atoms, with a +1 gap generally and up to 3\u00d7 for zlib/curl), NOT a tight equality; (b) the forced bound is the trivial '\u22651 round' for 5/6 classes (independent=1) \u2014 only libpng (independent=2) is non-trivial. The value is that the round complexity is \u0398(independent atoms), not the small constant. The dramatic bound is the \u0398(1/\u03b5) testing separation. Cite Angluin 1988; Jha\u2013Seshia 2017."
}
