Provedalphabaguettebaguette-zsoftmax
Softmax is unchanged by subtracting any constant (the running maximum)
For all , , and :
What the notation means · or point at any symbol
- NNatural numbers
- The natural numbers 0, 1, 2, …. In Lean they start at 0. (
ℕ) - Fin
- Fin: a definition from the library, not special notation. Its name is its meaning; open it in Lean to see how it is defined. (
Fin) - f(x)Function application
- Fin applied to n. Lean writes f x; papers write f(x). (
Fin n) - ⟹Implies
- If Fin(n), then ℝ. (Between types, A → B is the type of functions from A to B.) (
Fin n → ℝ) - eˣExponential function
- e raised to the power s(i) − c, where e ≈ 2.718. (
Real.exp (s i - c)) - a/bDivision
- exp(s(i) − c) divided by ∑ j, exp(s(j) − c). In Lean, dividing by 0 gives 0. (
Real.exp (s i - c) / ∑ j, Real.exp (s j…) - =Equality
- exp(s(i) − c)/(∑ j, exp(s(j) − c)) and exp(s(i))/(∑ j, exp(s(j))) are the same. (
Real.exp (s i - c) / ∑ j, Real.exp (s j…) - RReal numbers
- The real numbers: every point on the number line. (
ℝ) - -Subtraction
- s(i) minus c. On ℕ, Lean's subtraction stops at 0: 2 − 5 = 0. (
s i - c) - ∑Summation
- Add up exp(s(j) − c) for every j. (
∑ j, Real.exp (s j - c))
theorem bz-softmax-shift-invariance {n : ℕ} (s : Fin n → ℝ) (c : ℝ) (i : Fin n) :
Real.exp (s i - c) / ∑ j, Real.exp (s j - c) = Real.exp (s i) / ∑ j, Real.exp (s j)exp(sᵢ − c)/Σexp(sⱼ − c) = exp(sᵢ)/Σexp(sⱼ). The integer max-subtraction used to keep exp2 arguments ≤ 0 is exact. 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
- 15 lines of Lean
Sign in to see the proofThe proof, its signed report and its history.