Commit 59b4c51
proofs(P43): port canonical_* forms to the L1 modality-polymorphic judgment (#274)
## Summary
Closes proof-debt **P43** prerequisite from the comprehensive proof
inventory. Prerequisite for **P42** (`progress_l1`) — half of the
conventional type-soundness story.
## What lands
Seven modality-polymorphic canonical-forms lemmas at the end of
`formal/Semantics_L1.v`, mirroring the legacy Linear-only versions at
`formal/Semantics.v:603-630`:
| Lemma | Statement |
|---|---|
| `canonical_unit_l1_m` | `v : TBase TUnit + is_value v → v = EUnit` |
| `canonical_bool_l1_m` | `v : TBase TBool + is_value v → ∃ b, v = EBool
b` |
| `canonical_i32_l1_m` | `v : TBase TI32 + is_value v → ∃ n, v = EI32 n`
|
| `canonical_fun_l1_m` | `v : TFun T1 T2 + is_value v → ∃ body, v = ELam
T1 body` |
| `canonical_prod_l1_m` | `v : TProd T1 T2 + is_value v → ∃ v1 v2, v =
EPair v1 v2 ∧ ...` |
| `canonical_sum_l1_m` | `v : TSum T1 T2 + is_value v → (∃ v0, EInl) ∨
(∃ v0, EInr)` |
| `canonical_string_l1_m` | `v : TString r + is_value v → ∃ l, v = ELoc
l r` |
The `_m` suffix follows the convention established by
`region_shrink_preserves_typing_l1_gen_m` and `subst_typing_gen_l1_m`. A
pre-existing Linear-only `canonical_string_l1` at line 908 is left
untouched (it predates the L2 modality hybrid; the new `_m` version
generalises it).
## Proof shape
All 7 proofs are single-line inversions following the legacy template:
\`\`\`coq
intros; inversion H0; subst; inversion H; subst; <discharge>.
\`\`\`
## Audit
All 7 `Print Assumptions` blocks (added inline) print **`Closed under
the global context`** — these lemmas surface ZERO axioms.
## Next steps
`progress_l1` (P42) builds on these via case analysis on the type of a
closed well-typed value. Stated separately because it requires the step
relation's totality on non-value terms — a larger PR-sized scope.
## Test plan
- [x] `just -f formal/Justfile all` clean
- [x] All 7 Print Assumptions print "Closed under the global context"
- [x] Build oracle confirms zero new admits / axioms
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent a1d569c commit 59b4c51
1 file changed
Lines changed: 83 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3652 | 3652 | | |
3653 | 3653 | | |
3654 | 3654 | | |
| 3655 | + | |
| 3656 | + | |
| 3657 | + | |
| 3658 | + | |
| 3659 | + | |
| 3660 | + | |
| 3661 | + | |
| 3662 | + | |
| 3663 | + | |
| 3664 | + | |
| 3665 | + | |
| 3666 | + | |
| 3667 | + | |
| 3668 | + | |
| 3669 | + | |
| 3670 | + | |
| 3671 | + | |
| 3672 | + | |
| 3673 | + | |
| 3674 | + | |
| 3675 | + | |
| 3676 | + | |
| 3677 | + | |
| 3678 | + | |
| 3679 | + | |
| 3680 | + | |
| 3681 | + | |
| 3682 | + | |
| 3683 | + | |
| 3684 | + | |
| 3685 | + | |
| 3686 | + | |
| 3687 | + | |
| 3688 | + | |
| 3689 | + | |
| 3690 | + | |
| 3691 | + | |
| 3692 | + | |
| 3693 | + | |
| 3694 | + | |
| 3695 | + | |
| 3696 | + | |
| 3697 | + | |
| 3698 | + | |
| 3699 | + | |
| 3700 | + | |
| 3701 | + | |
| 3702 | + | |
| 3703 | + | |
| 3704 | + | |
| 3705 | + | |
| 3706 | + | |
| 3707 | + | |
| 3708 | + | |
| 3709 | + | |
| 3710 | + | |
| 3711 | + | |
| 3712 | + | |
| 3713 | + | |
| 3714 | + | |
| 3715 | + | |
| 3716 | + | |
| 3717 | + | |
| 3718 | + | |
| 3719 | + | |
| 3720 | + | |
| 3721 | + | |
| 3722 | + | |
| 3723 | + | |
| 3724 | + | |
| 3725 | + | |
| 3726 | + | |
| 3727 | + | |
| 3728 | + | |
| 3729 | + | |
| 3730 | + | |
| 3731 | + | |
| 3732 | + | |
| 3733 | + | |
| 3734 | + | |
| 3735 | + | |
| 3736 | + | |
| 3737 | + | |
0 commit comments