Skip to content

Commit a1e4614

Browse files
committed
proof(ordinal): last two bplus-on-left rank2-mono primitives <ᵇ-+ψ, <ᵇ-+1
Completes the per-constructor rank2-mono family: all 12 core `_<ᵇ_` constructors now have a primitive. * rank2-mono-+ψ : rank2 x <′ ω-rank-pow (double ν) → rank2 y <′ ω-rank-pow (double ν) → rank2 (bplus x y) <′ rank2 (bpsi ν α) The ψ-block leading power is additive principal (RankPow.additive-principal-ω-rank-pow), so both source summands below it puts the sum below it; the target ψ-rank only adds its argument on the right. * rank2-mono-+1 : rank2 (bplus x₁ x₂) <′ rank2 y₁ → rank2 (bplus x₁ x₂) <′ rank2 (bplus y₁ y₂) The joint-bplus case: if the whole source sum is below the target's head, it is below the target sum (the target tail only adds). Both stated relation-agnostically; the premise discharge (from the WfCNF tail order y ≤ᵇ x and the sub-derivations) is the umbrella's job. Depend only on already-merged content (RankPow, RankDoubledLadderMono), not on the Ω-block additive-principal module. Remaining capstone: the umbrella rank2-mono : WfAdm x → WfAdm y → x <ᵇ y → rank2 x <′ rank2 y (+ a rank2-mono-≤ tail companion) and the wf-<′-transport headline wf-<ᵇ. Build: All.agda + Smoke exit 0 under --safe --without-K, zero postulates. https://claude.ai/code/session_017t53M7W7ubmXpwymveLcCE
1 parent 40e0301 commit a1e4614

3 files changed

Lines changed: 98 additions & 0 deletions

File tree

proofs/agda/All.agda

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ open import Ordinal.Buchholz.RankDoubledLadder
156156
open import Ordinal.Buchholz.RankDoubledLadderMono
157157
open import Ordinal.Buchholz.RankDoubledLadderMonoPlus
158158
open import Ordinal.Buchholz.RankDoubledLadderAddPrincipal
159+
open import Ordinal.Buchholz.RankDoubledLadderMonoPlus2
159160
open import Ordinal.Buchholz.RankMonoUmbrella
160161
open import Ordinal.Buchholz.RankMonoUmbrellaSlice3
161162
open import Ordinal.Buchholz.RankMonoUmbrellaSlice4
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
{-# OPTIONS --safe --without-K #-}
2+
-- SPDX-License-Identifier: MPL-2.0
3+
-- SPDX-FileCopyrightText: 2025-2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
4+
5+
-- Doubled-ladder rank monotonicity — the last two bplus-on-left
6+
-- primitives `<ᵇ-+ψ`, `<ᵇ-+1` (2026-06-14).
7+
--
8+
-- ## Why this exists
9+
--
10+
-- With `<ᵇ-+Ω` closed (`RankDoubledLadderAddPrincipal`), the two
11+
-- remaining bplus-on-left constructors of the core `_<ᵇ_` are:
12+
--
13+
-- * `<ᵇ-+ψ : x <ᵇ bpsi ν α → bplus x y <ᵇ bpsi ν α`
14+
-- * `<ᵇ-+1 : x₁ <ᵇ y₁ → bplus x₁ x₂ <ᵇ bplus y₁ y₂`
15+
--
16+
-- Both ship as relation-agnostic `rank2`-mono primitives — the same
17+
-- discipline as the rest of the family. The genuinely-hard content
18+
-- (discharging the premise bounds from the WfCNF tail order `y ≤ᵇ x`
19+
-- and the sub-derivations) lives in the umbrella that consumes these;
20+
-- the primitives themselves are pure `⊕`-arithmetic:
21+
--
22+
-- * `<ᵇ-+ψ` — the ψ-block leading power `ω-rank-pow (double ν)` is
23+
-- additive principal (`RankPow.additive-principal-ω-rank-pow`), so
24+
-- if BOTH source summands rank below it, their sum does too, and
25+
-- the target ψ-rank only ADDS its argument on the right.
26+
-- * `<ᵇ-+1` — if the WHOLE source sum ranks below the target's HEAD
27+
-- `rank2 y₁`, then it ranks below the target sum (the target's tail
28+
-- only adds).
29+
--
30+
-- ## Completion
31+
--
32+
-- With these two, ALL 12 core `_<ᵇ_` constructors have a `rank2`-mono
33+
-- primitive. The follow-on is the umbrella
34+
-- `rank2-mono : WfAdm x → WfAdm y → x <ᵇ y → rank2 x <′ rank2 y`
35+
-- (structural recursion that discharges each primitive's premises,
36+
-- needing a `rank2-mono-≤` tail-bound companion for `y ≤ᵇ x`) and the
37+
-- `wf-<′`-transport headline `wf-<ᵇ`.
38+
--
39+
-- ## Headlines (pin in `Ordinal/Buchholz/Smoke.agda`)
40+
--
41+
-- * `rank2-mono-+ψ`
42+
-- * `rank2-mono-+1`
43+
44+
module Ordinal.Buchholz.RankDoubledLadderMonoPlus2 where
45+
46+
open import Ordinal.Brouwer.Phase13 using (_<′_; ⊕-left-≤-sum)
47+
open import Ordinal.Brouwer.Arithmetic using (_⊕_)
48+
open import Ordinal.Buchholz.Syntax using (BT; bpsi; bplus)
49+
open import Ordinal.Buchholz.RankPow using (ω-rank-pow; additive-principal-ω-rank-pow)
50+
open import Ordinal.Buchholz.RankDoubledLadder using (rank2; double)
51+
open import Ordinal.Buchholz.RankDoubledLadderMono using (<′-≤′-trans)
52+
53+
----------------------------------------------------------------------
54+
-- `<ᵇ-+ψ` — bplus source against a ψ target
55+
----------------------------------------------------------------------
56+
57+
-- `<ᵇ-+ψ : x <ᵇ bpsi ν α → bplus x y <ᵇ bpsi ν α`. The ψ-block
58+
-- leading power `ω-rank-pow (double ν)` is additive principal, so
59+
-- both source summands ranking below it makes the sum rank below it;
60+
-- the target ψ-rank `ω-rank-pow (double ν) ⊕ rank2 α` then only adds.
61+
-- Premises (supplied by the umbrella): the left bound is the IH on
62+
-- `x <ᵇ bpsi ν α`, the right is the tail bound from `y ≤ᵇ x`.
63+
rank2-mono-+ψ : {x y ν α}
64+
rank2 x <′ ω-rank-pow (double ν)
65+
rank2 y <′ ω-rank-pow (double ν)
66+
rank2 (bplus x y) <′ rank2 (bpsi ν α)
67+
rank2-mono-+ψ {x} {y} {ν} {α} px py =
68+
<′-≤′-trans {rank2 x ⊕ rank2 y} {ω-rank-pow (double ν)}
69+
{ω-rank-pow (double ν) ⊕ rank2 α}
70+
(additive-principal-ω-rank-pow {double ν} px py)
71+
(⊕-left-≤-sum {ω-rank-pow (double ν)} (rank2 α))
72+
73+
----------------------------------------------------------------------
74+
-- `<ᵇ-+1` — joint bplus
75+
----------------------------------------------------------------------
76+
77+
-- `<ᵇ-+1 : x₁ <ᵇ y₁ → bplus x₁ x₂ <ᵇ bplus y₁ y₂`. If the WHOLE
78+
-- source sum ranks below the target's HEAD `rank2 y₁`, it ranks below
79+
-- the target sum (the target tail `rank2 y₂` only adds on the right).
80+
-- The premise — source sum below target head — is what the umbrella
81+
-- derives from `x₁ <ᵇ y₁` plus the tail order `x₂ ≤ᵇ x₁`; this is the
82+
-- joint-bplus discharge the doubled ladder was ultimately built for.
83+
rank2-mono-+1 : {x₁ x₂ y₁ y₂}
84+
rank2 (bplus x₁ x₂) <′ rank2 y₁
85+
rank2 (bplus x₁ x₂) <′ rank2 (bplus y₁ y₂)
86+
rank2-mono-+1 {x₁} {x₂} {y₁} {y₂} p =
87+
<′-≤′-trans {rank2 x₁ ⊕ rank2 x₂} {rank2 y₁} {rank2 y₁ ⊕ rank2 y₂}
88+
p
89+
(⊕-left-≤-sum {rank2 y₁} (rank2 y₂))

proofs/agda/Ordinal/Buchholz/Smoke.agda

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,14 @@ open import Ordinal.Buchholz.RankDoubledLadderAddPrincipal using
503503
; rank2-mono-+Ω
504504
)
505505

506+
-- Doubled-ladder last two bplus-on-left primitives `<ᵇ-+ψ`, `<ᵇ-+1`
507+
-- (own block per CLAUDE.md Working rules) — completes all 12
508+
-- core `_<ᵇ_` constructors' rank2-mono primitives.
509+
open import Ordinal.Buchholz.RankDoubledLadderMonoPlus2 using
510+
( rank2-mono-+ψ
511+
; rank2-mono-+1
512+
)
513+
506514
-- Slice 3 prerequisites (own block per CLAUDE.md Working rules):
507515
-- the left-spine NonBzero predicate, the strict-jump bridge from
508516
-- `μ <Ω ν` to `ω-rank-pow-succ μ ≤′ ω-rank-pow ν`, and the head-Ω

0 commit comments

Comments
 (0)