Skip to content

Commit f2b496c

Browse files
hyperpolymathclaude
andcommitted
brouwer(arithmetic): checked refutations of strict-left-mono of _⊕_ and additive-principal closure on generic sums
Promotes the two routes flagged as "structurally blocked" by the RankLexSlice3 design note (and Phase13's `⊕-mono-≤-left` block comment) into CHECKED REFUTATIONS — named `¬`-theorems with explicit counterexamples and irreflexivity-derived ⊥. ## What lands Two new modules under `Ordinal.Brouwer`: * `StrictLeftMonoRefuted` — promotes Phase13's prose counterexample on `α <′ β → α ⊕ γ <′ β ⊕ γ`: - `StrictLeftMonoSum` (hypothesised property as `Set`). - `<′-irrefl` derived from `wf-<′` via Acc-induction (standalone helper, useful downstream). - Per-index dominance helper `osuc-oz-⊕-nat≤osuc-of-oz-⊕-nat` (each branch of the LHS olim equals the next branch of the RHS olim definitionally after osuc-recursion). - Limit-level companion `osuc-oz-⊕-ω≤oz-⊕-ω` (both olims denote ω, so the "larger" side `≤′` the smaller via branch-shifting). - Headline `strict-left-mono-refuted : ¬ StrictLeftMonoSum`, chained via `≤′-trans` + `<′-irrefl` at `α = oz, β = osuc oz, γ = olim nat-to-ord`. * `AdditivePrincipalGenericRefuted` — promotes the RankLexSlice3 design-note claim that "additive-principal closure on generic sums" fails: - `AdditivePrincipalGenericSum` (hypothesised generalisation of `additive-principal-ω-rank-pow` to `α <′ X ⊕ Y → β <′ X ⊕ Y → α ⊕ β <′ X ⊕ Y`). - `ω<′ω⊕ω` (premise witness via branch 1 in the outer olim: `olim nat-to-ord ⊕ nat-to-ord 1 = osuc (olim nat-to-ord)` definitionally). - Headline `additive-principal-generic-sum-refuted` at `X = Y = α = β = olim nat-to-ord`; both premises are `ω<′ω⊕ω`; conclusion `ω ⊕ ω <′ ω ⊕ ω` is refuted by `<′-irrefl` (re-exported from the (b) module — that's why the two ship in one PR despite being independent claims). ## Why this matters These refutations close out the two "open routes" left by `RankLexSlice3.agda`'s in-file design note for the bplus-chain-level extension of the joint-bplus rank-mono primitive. Both routes are now CHECKED dead-ends rather than prose claims — the consumer cannot accidentally "rediscover" them and the next session's follow-up exploration knows exactly which routes are foreclosed. The genuinely open structural route is the parallel-rank refactor (`rank-lex-jb : BT → RankLex` with a richer `bplus`-case second-component) mentioned at the bottom of RankLexSlice3's design note — that one is NOT refuted, just non-local to attempt. ## Build invariant * `StrictLeftMonoRefuted.agda` + `AdditivePrincipalGenericRefuted.agda` both compile standalone under `--safe --without-K`, zero postulates, no funext. * Pinned in `proofs/agda/Smoke.agda` under their own `using` block. * Wired into `proofs/agda/All.agda` adjacent to `OmegaPow`. * `scripts/kernel-guard.sh` PASS. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 1cc2ebc commit f2b496c

4 files changed

Lines changed: 289 additions & 0 deletions

File tree

proofs/agda/All.agda

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@ open import Ordinal.Brouwer
107107
open import Ordinal.Brouwer.Arithmetic
108108
open import Ordinal.Brouwer.Phase13
109109
open import Ordinal.Brouwer.OmegaPow
110+
open import Ordinal.Brouwer.StrictLeftMonoRefuted
111+
open import Ordinal.Brouwer.AdditivePrincipalGenericRefuted
110112
open import Ordinal.Buchholz.Syntax
111113
open import Ordinal.Buchholz.Closure
112114
open import Ordinal.Buchholz.Order
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
{-# OPTIONS --safe --without-K #-}
2+
3+
-- Checked refutation of "additive-principal closure on generic sums".
4+
--
5+
-- The Phase13/RankLexSlice3 design notes flag this as one of two
6+
-- potential unblock routes for the bplus-chain-level extension of
7+
-- the joint-bplus rank-mono primitive — but mark it as "not
8+
-- available", citing that `rank-adm y₁ = ω-rank-pow ν ⊕ rank-pow β`
9+
-- is a generic sum and the existing `additive-principal-ω-rank-pow`
10+
-- only applies to pure ω-powers (single-marker form). This module
11+
-- promotes that prose claim into a CHECKED REFUTATION: the
12+
-- generic-sum form fails outright at the obvious counterexample
13+
-- (X = Y = ω; α = β = ω).
14+
--
15+
-- Concretely, the hypothesised property
16+
--
17+
-- AdditivePrincipalGenericSum :=
18+
-- ∀ {X Y α β} → α <′ X ⊕ Y → β <′ X ⊕ Y → α ⊕ β <′ X ⊕ Y
19+
--
20+
-- would imply `ω ⊕ ω <′ ω ⊕ ω` (irreflexive ⇒ ⊥) at
21+
-- `X = Y = α = β = olim nat-to-ord (= ω)`. Both premises
22+
-- `ω <′ ω ⊕ ω` hold (branch 1 of the limit suffices via
23+
-- `osuc (olim f) ≤′ osuc (olim f ⊕ oz) = osuc (olim f)`); the
24+
-- conclusion contradicts `<′-irrefl`.
25+
--
26+
-- Cited by `Ordinal.Buchholz.RankLexSlice3` as the structural
27+
-- blocker for route (a) of its design-note's open follow-on plan.
28+
-- Promoting prose to a named theorem makes the closure-decision
29+
-- auditable.
30+
--
31+
-- ## What lands
32+
--
33+
-- * `AdditivePrincipalGenericSum` — the hypothesised property.
34+
-- * `ω<′ω⊕ω` — `olim nat-to-ord <′ olim nat-to-ord ⊕ olim nat-to-ord`,
35+
-- concretely via branch index 1 in the outer olim.
36+
-- * `additive-principal-generic-sum-refuted` — the headline
37+
-- `¬ AdditivePrincipalGenericSum`.
38+
--
39+
-- ## Headlines (pin in `Smoke.agda`)
40+
--
41+
-- * `AdditivePrincipalGenericSum`
42+
-- * `additive-principal-generic-sum-refuted`
43+
44+
module Ordinal.Brouwer.AdditivePrincipalGenericRefuted where
45+
46+
open import Data.Nat.Base using (ℕ; zero; suc)
47+
open import Data.Empty using (⊥)
48+
open import Data.Product.Base using (_,_)
49+
open import Relation.Nullary using (¬_)
50+
51+
open import Ordinal.Brouwer using (Ord; oz; osuc; olim)
52+
open import Ordinal.Brouwer.Arithmetic using (_⊕_; nat-to-ord)
53+
open import Ordinal.Brouwer.Phase13 using
54+
( _≤′_
55+
; _<′_
56+
; ≤′-refl
57+
)
58+
open import Ordinal.Brouwer.StrictLeftMonoRefuted using (<′-irrefl)
59+
60+
----------------------------------------------------------------------
61+
-- The hypothesised property
62+
----------------------------------------------------------------------
63+
64+
-- "Additive-principal closure on generic sums": if both summands
65+
-- of `α ⊕ β` are strictly below `X ⊕ Y`, then so is the sum.
66+
-- This generalises `additive-principal-ω-rank-pow` (which holds
67+
-- only when the target is a pure ω-power `ω-rank-pow μ`). REFUTED
68+
-- below.
69+
70+
AdditivePrincipalGenericSum : Set
71+
AdditivePrincipalGenericSum =
72+
{X Y α β} α <′ X ⊕ Y β <′ X ⊕ Y α ⊕ β <′ X ⊕ Y
73+
74+
----------------------------------------------------------------------
75+
-- The counterexample witness: ω <′ ω ⊕ ω
76+
----------------------------------------------------------------------
77+
78+
-- The premise `ω <′ ω ⊕ ω` we need to feed to the refutation chain.
79+
-- Concretely: `osuc (olim nat-to-ord) ≤′ olim nat-to-ord ⊕ olim
80+
-- nat-to-ord = olim (λ n → olim nat-to-ord ⊕ nat-to-ord n)`.
81+
-- The `osuc (olim f) ≤′ olim g` clause of `_≤′_` reduces to
82+
-- `Σ ℕ (λ n → osuc (olim f) ≤′ g n)`; we pick branch n = 1.
83+
--
84+
-- At n = 1: `g 1 = olim nat-to-ord ⊕ nat-to-ord 1
85+
-- = olim nat-to-ord ⊕ osuc oz
86+
-- = osuc (olim nat-to-ord ⊕ oz)
87+
-- = osuc (olim nat-to-ord)` (all definitional).
88+
-- So we need `osuc (olim nat-to-ord) ≤′ osuc (olim nat-to-ord)`,
89+
-- which is `≤′-refl`.
90+
91+
ω<′ω⊕ω : olim nat-to-ord <′ olim nat-to-ord ⊕ olim nat-to-ord
92+
ω<′ω⊕ω = suc zero , ≤′-refl {olim nat-to-ord}
93+
94+
----------------------------------------------------------------------
95+
-- The headline refutation
96+
----------------------------------------------------------------------
97+
98+
-- Instantiating the hypothesised property at X = Y = α = β = ω
99+
-- yields `ω ⊕ ω <′ ω ⊕ ω`; `<′-irrefl` (from the (b) refutation
100+
-- module) refutes it. Both premises are `ω<′ω⊕ω`.
101+
102+
additive-principal-generic-sum-refuted : ¬ AdditivePrincipalGenericSum
103+
additive-principal-generic-sum-refuted apgs =
104+
<′-irrefl {olim nat-to-ord ⊕ olim nat-to-ord}
105+
(apgs {olim nat-to-ord} {olim nat-to-ord}
106+
{olim nat-to-ord} {olim nat-to-ord}
107+
ω<′ω⊕ω ω<′ω⊕ω)
Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
{-# OPTIONS --safe --without-K #-}
2+
3+
-- Checked refutation of strict left-monotonicity of `_⊕_`.
4+
--
5+
-- The Phase13 block comment near `⊕-mono-≤-left` notes that the
6+
-- strict-left-mono claim
7+
--
8+
-- ∀ {α β γ} → α <′ β → α ⊕ γ <′ β ⊕ γ
9+
--
10+
-- is NOT a theorem under Brouwer arithmetic, citing the
11+
-- counterexample at α = oz, β = osuc oz, γ = olim nat-to-ord (= ω):
12+
-- both `α ⊕ γ` and `β ⊕ γ` denote the same ordinal (the limit ω),
13+
-- so a strict inequality cannot hold.
14+
--
15+
-- This module promotes that prose claim into a CHECKED REFUTATION:
16+
-- it states `StrictLeftMonoSum` as a named hypothesis, exhibits the
17+
-- counterexample as a finite chain that derives `⊥`, and packages
18+
-- the result as `strict-left-mono-refuted : ¬ StrictLeftMonoSum`.
19+
--
20+
-- Cited by `Ordinal.Buchholz.RankLexSlice3` as the structural
21+
-- blocker for the bplus-chain-level extension of the joint-bplus
22+
-- rank-mono primitive (route (b) of its design-note's open
23+
-- follow-on plan). Promoting prose to a named theorem makes the
24+
-- closure-decision auditable.
25+
--
26+
-- ## What lands
27+
--
28+
-- * `StrictLeftMonoSum` — the hypothesised property (as a `Set`).
29+
-- * `<′-irrefl` — Brouwer well-foundedness-derived irreflexivity
30+
-- of `_<′_` (small standalone helper; standard derivation from
31+
-- `wf-<′`).
32+
-- * `osuc-oz-⊕-nat≤osuc-oz-⊕-nat` — the structural-recursion
33+
-- helper `osuc oz ⊕ nat-to-ord k ≤′ osuc (oz ⊕ nat-to-ord k)`.
34+
-- * `osuc-oz-⊕-ω≤oz-⊕-ω` — the limit-level companion: both olims
35+
-- denote the same ordinal (ω) so the larger side `≤′` the smaller.
36+
-- * `strict-left-mono-refuted` — the headline `¬ StrictLeftMonoSum`.
37+
--
38+
-- ## Headlines (pin in `Smoke.agda`)
39+
--
40+
-- * `StrictLeftMonoSum`
41+
-- * `strict-left-mono-refuted`
42+
43+
module Ordinal.Brouwer.StrictLeftMonoRefuted where
44+
45+
open import Data.Nat.Base using (ℕ; zero; suc)
46+
open import Data.Empty using (⊥)
47+
open import Data.Product.Base using (_,_)
48+
open import Relation.Nullary using (¬_)
49+
open import Induction.WellFounded using (Acc; acc)
50+
51+
open import Ordinal.Brouwer using (Ord; oz; osuc; olim)
52+
open import Ordinal.Brouwer.Arithmetic using (_⊕_; nat-to-ord)
53+
open import Ordinal.Brouwer.Phase13 using
54+
( _≤′_
55+
; _<′_
56+
; ≤′-refl
57+
; ≤′-trans
58+
; wf-<′
59+
)
60+
61+
----------------------------------------------------------------------
62+
-- The hypothesised property
63+
----------------------------------------------------------------------
64+
65+
-- Strict left-monotonicity of `_⊕_`: if `α <′ β` then for every
66+
-- right addend `γ`, `α ⊕ γ <′ β ⊕ γ`. Refuted below.
67+
68+
StrictLeftMonoSum : Set
69+
StrictLeftMonoSum = {α β γ} α <′ β α ⊕ γ <′ β ⊕ γ
70+
71+
----------------------------------------------------------------------
72+
-- Irreflexivity of `_<′_` from well-foundedness
73+
----------------------------------------------------------------------
74+
75+
-- Standard derivation: structural recursion on `Acc _<′_ α`.
76+
77+
acc-no-self : {α} Acc _<′_ α α <′ α
78+
acc-no-self (acc rec) α<α = acc-no-self (rec α<α) α<α
79+
80+
<′-irrefl : {α} ¬ (α <′ α)
81+
<′-irrefl {α} = acc-no-self (wf-<′ α)
82+
83+
----------------------------------------------------------------------
84+
-- The counterexample: γ = ω (= olim nat-to-ord)
85+
----------------------------------------------------------------------
86+
87+
-- Step a) Per-index dominance: `osuc oz ⊕ nat-to-ord k ≤′ osuc (oz
88+
-- ⊕ nat-to-ord k)`. Each side is a finite stack of osucs over oz;
89+
-- both reduce to `nat-to-ord (suc k)` semantically. Proved by
90+
-- structural recursion on k:
91+
--
92+
-- * k = 0: `osuc oz ⊕ oz = osuc oz` and `osuc (oz ⊕ oz) = osuc oz`
93+
-- (both definitional), so `osuc oz ≤′ osuc oz` is `≤′-refl`.
94+
-- * k = suc k': Both sides reduce one `osuc` step; the `osuc / osuc`
95+
-- clause of `_≤′_` collapses to the inductive hypothesis.
96+
97+
osuc-oz-⊕-nat≤osuc-of-oz-⊕-nat : k
98+
(osuc oz) ⊕ nat-to-ord k ≤′ osuc (oz ⊕ nat-to-ord k)
99+
osuc-oz-⊕-nat≤osuc-of-oz-⊕-nat zero = ≤′-refl {osuc oz}
100+
osuc-oz-⊕-nat≤osuc-of-oz-⊕-nat (suc k) =
101+
osuc-oz-⊕-nat≤osuc-of-oz-⊕-nat k
102+
103+
-- Step b) Branch-selection lemma in the olim: the k-th branch of the
104+
-- "osuc oz" side is bounded by the (suc k)-th branch of the "oz" side,
105+
-- which in turn lives in the limit `oz ⊕ ω`.
106+
--
107+
-- Concretely: `osuc oz ⊕ nat-to-ord k ≤′ oz ⊕ nat-to-ord (suc k)`.
108+
-- Both sides reduce: LHS as `osuc-oz-⊕-nat≤osuc-of-oz-⊕-nat`'s upper
109+
-- bound; RHS by the `_⊕_` definitional clause `α ⊕ osuc β = osuc
110+
-- (α ⊕ β)`, giving exactly `osuc (oz ⊕ nat-to-ord k)`.
111+
112+
osuc-oz-⊕-nat≤oz-⊕-nat-suc : k
113+
(osuc oz) ⊕ nat-to-ord k ≤′ oz ⊕ nat-to-ord (suc k)
114+
osuc-oz-⊕-nat≤oz-⊕-nat-suc k = osuc-oz-⊕-nat≤osuc-of-oz-⊕-nat k
115+
116+
-- Step c) The limit-level companion lemma: `osuc oz ⊕ ω ≤′ oz ⊕ ω`.
117+
-- The "larger" side actually `≤′` the smaller because both olims
118+
-- enumerate the same ordinal ω.
119+
--
120+
-- Per the `olim f ≤′ β` clause of `_≤′_`, we need each branch of
121+
-- the LHS olim to be `≤′` the RHS olim. For branch k, pick branch
122+
-- `suc k` in the RHS olim and apply `osuc-oz-⊕-nat≤oz-⊕-nat-suc`.
123+
124+
osuc-oz-⊕-ω≤oz-⊕-ω :
125+
(osuc oz) ⊕ (olim nat-to-ord) ≤′ oz ⊕ (olim nat-to-ord)
126+
osuc-oz-⊕-ω≤oz-⊕-ω zero = suc zero , osuc-oz-⊕-nat≤oz-⊕-nat-suc zero
127+
osuc-oz-⊕-ω≤oz-⊕-ω (suc k) = suc (suc k) , osuc-oz-⊕-nat≤oz-⊕-nat-suc (suc k)
128+
129+
----------------------------------------------------------------------
130+
-- The headline refutation
131+
----------------------------------------------------------------------
132+
133+
-- If strict-left-mono held, applying it at α = oz, β = osuc oz,
134+
-- γ = ω would produce `oz ⊕ ω <′ osuc oz ⊕ ω`. Combined with
135+
-- `osuc-oz-⊕-ω≤oz-⊕-ω` (the other direction) via `≤′-trans`, we get
136+
-- `oz ⊕ ω <′ oz ⊕ ω`, which `<′-irrefl` refutes.
137+
--
138+
-- The premise `oz <′ osuc oz` is `osuc oz ≤′ osuc oz` (= `oz ≤′ oz`
139+
-- = `⊤`).
140+
141+
strict-left-mono-refuted : ¬ StrictLeftMonoSum
142+
strict-left-mono-refuted slm =
143+
<′-irrefl {oz ⊕ olim nat-to-ord}
144+
(≤′-trans
145+
{osuc (oz ⊕ olim nat-to-ord)}
146+
{osuc oz ⊕ olim nat-to-ord}
147+
{oz ⊕ olim nat-to-ord}
148+
(slm {oz} {osuc oz} {olim nat-to-ord} (≤′-refl {osuc oz}))
149+
osuc-oz-⊕-ω≤oz-⊕-ω)

proofs/agda/Smoke.agda

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1086,6 +1086,37 @@ open import Ordinal.Buchholz.RankBrouwer using
10861086
( rank
10871087
)
10881088

1089+
-- Brouwer-arithmetic CHECKED REFUTATIONS (2026-05-28). Promote
1090+
-- the two prose obstacles from `RankLexSlice3`'s design note and
1091+
-- `Phase13`'s `⊕-mono-≤-left` block comment into named theorems:
1092+
--
1093+
-- (b) strict-left-mono of `_⊕_` is NOT a theorem
1094+
-- (`strict-left-mono-refuted`). Counterexample at α = oz,
1095+
-- β = osuc oz, γ = ω: both sides equal ω, so the strict step
1096+
-- fails. Refutation derives ⊥ from the hypothesis + `<′-irrefl`
1097+
-- (also exposed here for downstream use).
1098+
--
1099+
-- (a) "additive-principal closure on generic sums" is NOT a theorem
1100+
-- (`additive-principal-generic-sum-refuted`). Counterexample
1101+
-- at X = Y = α = β = ω: `ω ⊕ ω <′ ω ⊕ ω` would follow,
1102+
-- refuted by `<′-irrefl`.
1103+
--
1104+
-- These pin the two routes documented as "structurally blocked"
1105+
-- in `Ordinal.Buchholz.RankLexSlice3` as CHECKED dead-ends
1106+
-- rather than prose claims.
1107+
open import Ordinal.Brouwer.StrictLeftMonoRefuted using
1108+
( StrictLeftMonoSum
1109+
; <′-irrefl
1110+
; osuc-oz-⊕-ω≤oz-⊕-ω
1111+
; strict-left-mono-refuted
1112+
)
1113+
1114+
open import Ordinal.Brouwer.AdditivePrincipalGenericRefuted using
1115+
( AdditivePrincipalGenericSum
1116+
; ω<′ω⊕ω
1117+
; additive-principal-generic-sum-refuted
1118+
)
1119+
10891120
-- ω-power rank for Ω-markers and Buchholz terms. Limit-shaped
10901121
-- replacement for `nat-to-ord (suc n)` successor stacks. Compositional
10911122
-- rank-mono primitives (right-mono on `bplus`) reusable across both

0 commit comments

Comments
 (0)