You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
proof(L1): choreographic experiment 2 — non-collapsed trace model closes the congruence fork in-model (#332)
## What this is
The next step on the **choreographic re-derivation** route for the
eliminator fork — the single invariant the two open L1 admits
(`step_pop_disjoint_from_type_l1`, `preservation_l1`) share.
Experiment 1 (`formal/L1ChoreoExperiment.v`) returned **"relocates"**
and its own *honest-gaps* §2 prescribed the next move: build a
**non-collapsed** apparatus and aim it at the **congruence** cases
(`S_Let_Step` / `S_App_Step2` / `S_Pair_Step2` / `S_Case_Step` — *inner
pop erased from the outer result type*), **not** the clean `ERegion`
exit (already `Qed`). `formal/L1ChoreoExperiment2.v` does exactly that.
## The model & the decisive result
One region's lifecycle is a `Trace` of `Open`/`Close`/`Use` events
**relative to the subterm structure**, run from `k = cnt rv R`. The
trace keeps the same balance the scalar `cnt rv R` keeps **but also
keeps the order** — which separates two configs the snapshot *conflates*
at the `e1`/`e2` boundary:
- **internal scope** (stepping sibling rv-net-neutral) ⇒ surviving
sibling coherent at the original `k` —
`congruence_internal_scope_carries`;
- **escaping close** (stepping sibling closes an outer `rv` the
surviving sibling still uses) ⇒ **impossible** in a coherent trace: the
post-step balance is forced `>= 1` — `sibling_use_keeps_region_live`.
`sibling_use_keeps_region_live` is **precisely the obligation
`step_pop_disjoint_from_type_l1` relocates to** (`In rv (free_regions T)
-> In rv R -> In rv R'`), proved here as a pure structural fact,
**non-circularly** (no appeal to preservation). The snapshot can't state
it because it carries only the final balance, not the witness that the
`Use` is *ordered after* the stepping sibling.
## Verdict
Congruence verdict upgraded from **"relocates"** to **"closes in the
trace model, reduced to ONE wiring lemma"** (`wiring_obligation`: typing
⇒ `valid` trace at `k = cnt rv R`). Experiment 1's re-entry failure mode
**provably does not recur** (`valid` is defined to permit re-entry). The
wiring lemma is plausibly a *structural induction* on the typing
derivation — that is the precise next target.
## Honest status
**Closes no admit; adds no axiom.** The 3 outer `Admitted.` markers
(legacy `Semantics.v` + `step_pop` + `preservation_l1`) are unchanged.
This is the consolidation/sharpening step that names the next target —
not the closure. Stays fully inside the owner fences (no patching of the
fenced admits, no new `Axiom`, no cross-layer side-conditions).
## Verification (coqc 8.18.0)
- Full `formal/` rebuild green (exit 0).
- `Print Assumptions` on every new lemma → **"Closed under the global
context"** (axiom-free, admit-free).
- Outer `Admitted.` markers unchanged: `Semantics.v:1` +
`Semantics_L1.v:2` = **3** (matches `PROOF-NEEDS.md §4` status-gate
marker).
## Also (doc hygiene)
- `formal/L1-ELIMINATOR-FORK.md`: new **§9** recording experiment 2.
- `formal/L1ChoreoExperiment.v`: forward-reference from honest-gaps §2.
- `PROOF-NEEDS.md §5.4`: route step **2b** added; §1 row corrected.
- `TEST-NEEDS.md` / `PROOF-NEEDS.md §1`: stale admit counts (`4`/`5`)
corrected to verified ground truth (**3** total, **2** in
`Semantics_L1.v` at lines 3315/3336).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01AGFqWzByua4dKbA7W7oVsL
---
_Generated by [Claude
Code](https://claude.ai/code/session_01AGFqWzByua4dKbA7W7oVsL)_
Co-authored-by: Claude <noreply@anthropic.com>
`preservation_l1` — covering 2 internal `admit.` cases at lines
43
+
3315/3336; rebuilt `coqc 8.18.0` ground truth 2026-06-27). Single-
42
44
source breakdown lives in `PROOF-NEEDS.md §4`; `scripts/status-gate.sh`
43
45
reads from there.
44
46
@@ -52,7 +54,7 @@ reads from there.
52
54
- Example programs not verified in CI
53
55
54
56
#### Known issues:
55
-
-4 Admitted markers in Coq (1 in `Semantics.v` — provably-false legacy preservation, sacrosanct; 3 in `Semantics_L1.v`covering 5 inner `admit.` cases — pre-existing L1 structural debt + parallel mirrors per PROOF-NEEDS.md §4)
57
+
-3 Admitted markers in Coq (1 in `Semantics.v` — provably-false legacy preservation, sacrosanct; 2 in `Semantics_L1.v`— `step_pop_disjoint_from_type_l1` + `preservation_l1`, the eliminator-fork invariant + its gated capstone, per PROOF-NEEDS.md §4)
56
58
- 5 remaining tasks (#15-#19) from type checker audit
0 commit comments