Commit f21c62f
proof(Slice 3+4 Route A): (b) lex-first primitive + bpsi sub-case discharge (#165)
## Summary
Advances the rank-lex-jb pivot's `(a)+(b)+(c)` assembly plan beyond the
(a) primitive that PR #147 shipped. Three primitives added to
\`Ordinal.Buchholz.RankLexJointBplus\` and pinned in
\`Ordinal/Buchholz/Smoke.agda\`. Zero postulates, \`--safe
--without-K\`, no funext.
## Three primitives
| Primitive | Type | Role |
|---|---|---|
| \`rank-lex-jb-strict-first\` | \`rank-pow (bplus _ _) <′ rank-pow
(bplus _ _) → rank-lex-jb _ <lex rank-lex-jb _\` | Leg (b) primitive;
one-line via \`<lex-first\` |
| \`leftmost-α-strict-from-bpsi-source\` | \`α <ᵇ⁰ β → leftmost-α (bplus
(bpsi ν α) x₂) <′ leftmost-α (bplus (bpsi ν β) y₂)\` | Consumer helper
composing \`leftmost-α-{bplus,bpsi}\` with \`rank-pow-mono-<ᵇ⁰\` |
| \`rank-lex-jb-bpsi-at-equality\` | \`first-eq → α <ᵇ⁰ β → rank-lex-jb
_ <lex rank-lex-jb _\` | Named theorem closing the
bpsi-source-at-equality sub-case at rank-lex-jb level, gated on first-eq
hypothesis |
## Where this sits in the assembly
Per the PR #147 module preamble's \`(a)+(b)+(c)\` plan (see
\`RankLexJointBplus.agda\` preamble):
- **(a) equal-first lex-second leg** — CLOSED in PR #147
(\`rank-lex-jb-strict-second-at-equal-first\`).
- **(b) strict-first lex-first leg** — primitive CLOSED here;
consumer-side derivation of \`rank-pow (bplus _ _) <′ rank-pow (bplus _
_)\` remains the multi-PR ordinal-arithmetic challenge.
- **(c) first-component trichotomy** — STILL OPEN (Ord-valued
decidability bridge in \`Phase13\` not yet attempted).
- **Assembly into full \`<ᵇ-+1\`-at-equal-head headline** = multi-PR
follow-on, still gated on (c).
This slice records that every other discharge step composes cleanly (the
bpsi sub-case now ships as a named theorem under the first-eq
hypothesis); resolving the gating obligations unblocks the headline
mechanically.
## Honest scope (preserved in module preambles)
- The trivial \`<lex-first\` shape of primitive (1) does **not** mean
leg (b) is "done" — the consumer plumbing is the hard part. Both
pre-identified unblock routes (additive-principal closure on a generic
sum, strict-left-mono of \`_⊕_\`) are CHECKED-REFUTED in PR #146.
- Primitive (2) is \`_<ᵇ⁰_\`-parameterised, not \`_<ᵇ_\`-parameterised.
Lifting to full \`_<ᵇ_\` requires the joint-bplus closure that this very
pivot was designed to attack.
- Primitive (3) requires the first-eq hypothesis as input; consumer-side
derivation is the gating obligation.
## Local verification
- \`agda -i proofs/agda
proofs/agda/Ordinal/Buchholz/RankLexJointBplus.agda\` — clean.
- \`agda -i proofs/agda proofs/agda/Ordinal/Buchholz/Smoke.agda\` —
clean, exit 0.
- \`agda -i proofs/agda proofs/agda/Smoke.agda\` — clean, exit 0.
- \`agda -i proofs/agda proofs/agda/All.agda\` — clean, exit 0.
- \`bash tools/check-guardrails.sh proofs/agda\` — 160 modules pass.
- \`sh scripts/kernel-guard.sh\` — PASS.
## Test plan
- [x] All four Agda lanes typecheck locally.
- [x] Three new primitives pinned in Buchholz Smoke.
- [x] Foundation guardrail + kernel-guard pass.
- [ ] CI: \`check\` + \`cold-check\` + governance lanes green.
- [ ] Auto-merge on green.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent 1605fb2 commit f21c62f
2 files changed
Lines changed: 102 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
130 | 130 | | |
131 | 131 | | |
132 | 132 | | |
| 133 | + | |
133 | 134 | | |
134 | 135 | | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
135 | 140 | | |
136 | 141 | | |
137 | 142 | | |
| |||
273 | 278 | | |
274 | 279 | | |
275 | 280 | | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
536 | 536 | | |
537 | 537 | | |
538 | 538 | | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
539 | 542 | | |
540 | 543 | | |
541 | 544 | | |
| |||
0 commit comments