Commit f60bd53
proof(formal): general linear-coverage theorem — splitLinearCoverage (#85)
## Proof-debt P0 — ephapax (epic standards#124, arm standards#134)
### What
`src/formal/Ephapax/Formal/Qualifier.idr` documented (on `Split`) that
**every linear binding, at any position in the context, appears in
exactly one sub-context**, but only `nonDiminishment` was proved — and
that covers solely a linear binding at the **head** of the context.
This adds **`splitLinearCoverage`**, the general theorem:
```idris
splitLinearCoverage : (s : Split full left right)
-> (b : Binding) -> b.bindQual = Linear
-> Elem b full -> Either (Elem b left) (Elem b right)
```
Pure structural induction over the `Split` derivation. Affine-head /
`SplitAffDrop` cases are discharged via a `private`
`Uninhabited (Affine = Linear)` (the head cannot be the linear `b`);
`SplitNil` via `absurd` on the empty-list `Elem`.
### Oracle
`idris2 0.8.0` build of `src/formal/ephapax-formal.ipkg` — **3/3
modules green** before and after. No `believe_me` / `assert_*` /
holes; `%default total` in force, so the new clauses are
total + covering.
### Scope (deliberately bounded — not over-claimed)
Proves **coverage** (linear bindings are never dropped — the
non-diminishment direction generalised to all positions). It does
**not** assert exclusivity ("exactly one" under value-equal duplicate
bindings) — a distinct, stronger property left as future work and
explicitly NOT claimed in the docstring.
### Out of scope (still OWED on standards#134)
- 14 `idris2/src/*.idr` lacking SPDX headers — owner-gated, not
auto-edited.
- Stale docs (ROADMAP "92%" vs actual; Coq `preservation` is `Qed`
not Admitted) — tracked separately.
- No SPARK seam exists in this repo.
Refs hyperpolymath/standards#134
Refs hyperpolymath/standards#124
(Refs, not Closes — human-gated.)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent d2541f9 commit f60bd53
1 file changed
Lines changed: 61 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| 18 | + | |
18 | 19 | | |
19 | 20 | | |
20 | 21 | | |
| |||
184 | 185 | | |
185 | 186 | | |
186 | 187 | | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
0 commit comments