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
## Summary
Restores the pre-L2 proof body of
`region_shrink_preserves_typing_l1_gen` as a modality-polymorphic helper
`region_shrink_preserves_typing_l1_gen_m`, mirroring the pattern
established by #187/#188 (`shift_typing_gen_l1_m`,
`subst_typing_gen_l1_m`). The Linear wrapper `_gen` becomes a one-line
derivation.
Net effect: the outer `Admitted` on `_gen` is gone (now Qed via
wrapper); one structural residual remains as an internal `admit` inside
`_gen_m` — the genuine T_Region_Active_L1 [rr = r] shadowed sub-case
(list-vs-multiset bridge), unchanged in substance from the pre-L2
baseline.
## What changed
- New `count_occ_le_l1_m` (m-polymorphic count monotonicity); the
existing Linear `count_occ_le_l1` becomes a 2-line wrapper.
- New `region_shrink_preserves_typing_l1_gen_m` with the 29-bullet proof
body adapted from commit 56f592f. Three new Affine-only constructors
(T_Lam_L1_Affine, T_Case_L1_Affine, T_If_L1_Affine) close identically to
their Linear siblings since region operations are mode-blind.
- `region_shrink_preserves_typing_l1_gen` now derives from `_gen_m` by
`apply (… Linear); auto.` — Qed.
- Design-note comment above the lemma corrected: the earlier suggestion
that the value-restricted wrapper could bypass `_gen_m` by inducting on
`is_value` fails on the VLam case (lambda body's internal `ERegion r'
e'` shadowing); wrapper still goes through `_gen_m`.
## Net debt
`formal/Semantics_L1.v`: 21 Qed + 3 Admitted → **23 Qed + 3 Admitted**.
The 3 Admitted:
1. `region_shrink_preserves_typing_l1_gen_m` — NEW location of the
structural residual; internal `admit` in the T_Region_Active_L1 shadowed
sub-case
2. `region_liveness_at_split_l1_gen` — owner-gated per CLAUDE.md
doctrine; closes at L2 dispatch
3. `preservation_l1` — capstone
## Out of scope
The structural residual itself — closure options listed in
PROOF-NEEDS.md §2 (L2-β follow-up #4).
## Test plan
- [x] `coqc` accepts the file (full Coq tree builds with no errors)
- [x] `Counterexample.v` re-builds cleanly (no regression of the 5
pinned Qed lemmas)
- [x] No new `Axiom` declarations
- [x] No legacy `Semantics.v` / `Typing.v` edits
- [x] No closure attempts on `region_liveness_at_split_l1_gen`
(owner-gated)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
| Close region_shrink_preserves_typing_l1_gen T_Region_Active_L1 case (list-vs-multiset bridge) |`formal/Semantics_L1.v`| structural; deeper than bullet-restoration |
93
+
| ✅ Restore region_shrink_preserves_typing_l1_gen bullet structure via m-polymorphic helper (residual list-vs-multiset structural admit isolated to T_Region_Active_L1 shadowed case inside _gen_m) |`formal/Semantics_L1.v`| done 2026-05-27 (L2-β follow-up #3) |
94
+
| Close T_Region_Active_L1 [rr = r] shadowed sub-case of region_shrink_preserves_typing_l1_gen_m (list-vs-multiset bridge — option (a) L1 perm lemma, (b) multiset reformulation, or (c) T_Region_*_L1 redesign per the case's own note) |`formal/Semantics_L1.v`| structural; non-trivial — investigation owed; lambda-body's shadowing internal ERegion is the obstacle |
94
95
| State and prove `preservation_l1` for both modes |`formal/Semantics_L1.v`| depends on region_shrink + region_liveness narrow admit |
0 commit comments