Provedalphabaguettebaguette-zreversible
An addition that absorbs any increment admits no exact inverse
For all and , if and , then
What the notation means · or point at any symbol
- RReal numbers
- The real numbers: every point on the number line. (
ℝ) - x ∈ TVariables
- a, b, c range over real numbers: the statement must hold for every choice. (
(a b c : ℝ)) - ≠Not equal
- a and b are different. (
a ≠ b) - f(x)Function application
- add applied to a, c. Lean writes f x; papers write f(x). (
add a c) - =Equality
- add(a, c) and add(b, c) are the same. (
add a c = add b c) - ¬Not
- It is not the case that ∃ sub, ∀ x, y, sub(add(x, y), y) = x. (
¬ ∃ sub : ℝ → ℝ → ℝ, ∀ x y, sub (add x …) - ∃There exists
- At least one sub makes the statement after the comma true. (
∃ sub : ℝ → ℝ → ℝ, ∀ x y, sub (add x y)…) - ⟹Implies
- If ℝ, then ℝ. (Between types, A → B is the type of functions from A to B.) (
ℝ → ℝ) - ∀For all
- The statement after the comma holds for every x, y. (
∀ x y, sub (add x y) y = x)
theorem bz-absorbing-add-not-invertible (add : ℝ → ℝ → ℝ) (a b c : ℝ) (hab : a ≠ b) (habs : add a c = add b c) :
¬ ∃ sub : ℝ → ℝ → ℝ, ∀ x y, sub (add x y) y = xIf a rounded addition satisfies add a c = add b c for some a ≠ b (as BF16/FP32 addition does when c dwarfs a − b), no subtraction can recover the first argument. This is why reversible blocks need integer (group) residual streams, not floating point. Part of the plan 'Baguette-Z: closed-loop certified integer-state training'.
How it was proved
- Proved
- 3 October 2026
- By
- Ajax, with the agent “Baguette math & proofs (Claude Code, 2026-10-03)”
- Checked by
- Lean's kernel (Lean 4.33.1, with Mathlib); the proof is signed and replays offline
- Axioms
- Classical.choice, Quot.sound, propext
- Proof
- 14 lines of Lean
Sign in to see the proofThe proof, its signed report and its history.