|
| 1 | +// SPDX-License-Identifier: PMPL-1.0-or-later |
| 2 | += Burrower vs. Manual Closeout — `tropical-resource-typing` (2026-04-26) |
| 3 | +:toc: |
| 4 | + |
| 5 | +== Context |
| 6 | + |
| 7 | +Earlier the same day a session closed all 16 Isabelle 2025-1 drift sites in |
| 8 | +`verification-ecosystem/tropical-resource-typing` manually (commits |
| 9 | +`ac851910` … `cab5da8`). The repo was originally chosen to dogfood-test the |
| 10 | +agentic swarm; that signal was spent. This experiment goes back and replays |
| 11 | +the closest-mirror micro-goals through `burrower attempt` to compare |
| 12 | +playbook coverage against the manual fixes. |
| 13 | + |
| 14 | +== Method |
| 15 | + |
| 16 | +* Binary: `proof-burrower/target/debug/burrower` |
| 17 | +* Backend: `echidna prove` (Isabelle, `imports Main` only) |
| 18 | +* Per-attempt timeout: 30 s |
| 19 | +* Ledger: `ledger.jsonl` (this directory), 20 entries |
| 20 | + |
| 21 | +Probe goals were either the exact micro-step Claude wrote in its manual fix, |
| 22 | +or a Main-only mirror where the original goal referenced custom definitions |
| 23 | +(e.g.\ `walk_concat`, `trop_mat_star`). |
| 24 | + |
| 25 | +== Results |
| 26 | + |
| 27 | +[cols="3,3,2", options="header"] |
| 28 | +|=== |
| 29 | +| Goal | Manual fix | Burrower |
| 30 | + |
| 31 | +| `set (tl xs) \<subseteq> set xs` (sub-step inside CNO 539 fix) |
| 32 | +| `by (cases w_mj) auto` |
| 33 | +| ✓ Combinatorialist `induction-list` succeeded — 7 other tactics failed first |
| 34 | + |
| 35 | +| `(a::nat) \<le> b \<Longrightarrow> b \<le> c \<Longrightarrow> a \<le> c` (control) |
| 36 | +| n/a |
| 37 | +| ✓ all 4 OrderTheorist tactics succeeded |
| 38 | + |
| 39 | +| `ws \<noteq> [] \<Longrightarrow> hd ws # tl ws = ws` (control — list) |
| 40 | +| n/a |
| 41 | +| ✗ 0 specialists engaged |
| 42 | + |
| 43 | +| `set xs \<subseteq> S \<Longrightarrow> set ys \<subseteq> S \<Longrightarrow> set (xs @ tl ys) \<subseteq> S` (mirror of CNO 539 top-level) |
| 44 | +| explicit 2-step (`set (tl xs) \<subseteq> set xs`, then `auto`) |
| 45 | +| ✗ all 8 tactics failed |
| 46 | + |
| 47 | +| `walk_concat_nonempty` (CNO 174) |
| 48 | +| `by (induction ws rule: walk_concat.induct) auto` |
| 49 | +| n/a — needs `walk_concat` defn; probe header is fixed at `imports Main` |
| 50 | + |
| 51 | +| `trop_mat_star_idem` real proof gap (CNO 699) |
| 52 | +| Structural change: added `no_pos_cycle n A` assumption + switched lemma application |
| 53 | +| n/a — Burrower has no specialist for "weaken the theorem statement" |
| 54 | +|=== |
| 55 | + |
| 56 | +== Findings (in priority order — dependability first) |
| 57 | + |
| 58 | +. *Burrower's playbook recreates the inner step but not the chain.* It |
| 59 | + proves the singleton `set (tl xs) \<subseteq> set xs` — exactly the |
| 60 | + micro-lemma I introduced by hand inside the CNO 539 fix. But it cannot |
| 61 | + glue that step to the surrounding two-hypothesis goal. The |
| 62 | + Combinatorialist needs a `subset-tail-then-append` composite tactic. |
| 63 | + |
| 64 | +. *No List specialist.* The control goal `hd ws # tl ws = ws` got zero |
| 65 | + engagement. The taxonomy currently has Algebraist / OrderTheorist / |
| 66 | + Combinatorialist; a Listologist (lists, induction by `case (Cons …)`, |
| 67 | + `rev` / `last` / `tl` lemmas) would catch this whole class. |
| 68 | + |
| 69 | +. *Probe headers are not configurable per attempt.* Every probe is |
| 70 | + `imports Main`, so any goal mentioning a project-specific definition |
| 71 | + (e.g.\ `walk_concat`, `trop_mat_star`, `no_pos_cycle`) is unreachable. |
| 72 | + Mechanical drift fixes that *look* trivial — `(induction ws rule: |
| 73 | + walk_concat.induct) auto` — are off-limits until probes can take an |
| 74 | + explicit imports/setup block. |
| 75 | + |
| 76 | +. *No structural-change specialist.* The genuinely interesting site (CNO |
| 77 | + 699) wasn't a tactic-search problem; the manual fix was "this lemma is |
| 78 | + false as stated; add the missing assumption that the rest of the file |
| 79 | + already uses on related lemmas." Burrower's playbook model can't propose |
| 80 | + weakening a theorem statement. This is the gap that justified the |
| 81 | + Algebraist agent in the original spec — it was supposed to read across |
| 82 | + the corpus and notice the pattern — but it didn't fire here, presumably |
| 83 | + because we ran `attempt` (single-goal, no corpus index), not `swarm`. |
| 84 | + |
| 85 | +. *Anti-pattern recording works.* All 7 failed `set (tl xs) \<subseteq> |
| 86 | + set xs` attempts wrote `tactic-fails-generic-failure` learnings to the |
| 87 | + ledger. After this single goal the OrderTheorist now has four recorded |
| 88 | + anti-patterns to skip on subsequent invocations. This is the actual |
| 89 | + dogfood signal worth extracting — the ledger after a real backlog run |
| 90 | + would let us prune playbooks and rank tactics. |
| 91 | + |
| 92 | +== Comparison with manual closeout |
| 93 | + |
| 94 | +Of the 16 sites closed manually: |
| 95 | + |
| 96 | +* *0 sites* would have been closed by Burrower out-of-the-box (the only |
| 97 | + micro-goal it can prove was a sub-step Claude introduced, not an |
| 98 | + original site). |
| 99 | +* *4 mechanical drift sites* (CNO 174/539, plus the `Fun.swap` rewrite |
| 100 | + pattern in Determinants 2x2) could plausibly be reachable with |
| 101 | + per-attempt imports + a `Listologist` specialist. |
| 102 | +* *Type-class regressions* (Det 153/207, the `ordered_ab_semigroup_add` |
| 103 | + instance in `Tropical_v2`) need a specialist that can propose new |
| 104 | + `instance` declarations, not just close existing goals. |
| 105 | +* *The real proof gap* (CNO 699 / `trop_mat_star_idem`) needs an |
| 106 | + Algebraist swarm read of the corpus, not single-goal `attempt`. |
| 107 | + |
| 108 | +== Concrete next-actions for Burrower |
| 109 | + |
| 110 | +. Add a `Listologist` specialist (lists, `tl`, `hd`, `last`, `induction xs |
| 111 | + rule: list.induct`, `induction xs rule: <user-fun>.induct`). |
| 112 | +. Make probe imports + helper lemmas configurable per `attempt` invocation. |
| 113 | +. Add a `set-tail-subset` micro-tactic to the Combinatorialist playbook. |
| 114 | +. Wire `swarm` (corpus-aware) into the comparison rather than `attempt` |
| 115 | + (single-goal); rerun this experiment with the tropical theory files |
| 116 | + indexed. |
| 117 | +. Extend the agent DSL with a "weaken the goal" / "strengthen the |
| 118 | + hypothesis" action so structural fixes are representable. |
| 119 | + |
| 120 | +== Honest framing |
| 121 | + |
| 122 | +Burrower closed *one* of *four* mechanical micro-goals tested here, and |
| 123 | +none of the original sites. The *infrastructure works* — Echidna runs, |
| 124 | +playbooks dispatch, the ledger captures both successes and the much more |
| 125 | +informative failures. The gap is in coverage (specialist taxonomy + |
| 126 | +playbook breadth + probe configurability), not plumbing. That is exactly |
| 127 | +the data the original dogfood-test was meant to surface, and is now |
| 128 | +captured in `ledger.jsonl` next to this report. |
0 commit comments