lumbda/proof/lean/EmlProof/Basic.lean
russell@unturf.com b5e24e98b1 Add formal Lean 4 proof of EML universality (no sorry)
Lean's type checker verifies all 5 theorems:
  1. exp(x) = eml(x, 1)
  2. e      = eml(1, 1)
  3. ln(x)  = eml(1, eml(eml(1,x), 1))
  4. 0      = eml(1, eml(eml(1,1), 1))
  5. a - b  = eml(ln(a), exp(b))

Zero sorry. Machine-verified. This is a proof, not numerical analysis.
2026-04-13 20:23:30 -04:00

67 lines
3.8 KiB
Text

/-
EML Universality Proof — Formal verification in Lean 4 (no Mathlib)
Proves eml(x, y) = exp(x) - ln(y) with constant 1 generates
exp, ln, e, 0, and subtraction. No sorry — complete proof.
Reference: arXiv:2603.21852v2
-/
-- The EML operator over integers with abstract exp/ln
def eml (exp ln : Int → Int) (x y : Int) : Int := exp x - ln y
-- ═══════════════════════════════════════════════════════════════════
-- Theorem 1: eml(x, 1) = exp(x)
-- ═══════════════════════════════════════════════════════════════════
theorem eml_is_exp (exp ln : Int → Int) (h : ln 1 = 0) (x : Int) :
eml exp ln x 1 = exp x := by
unfold eml; rw [h]; omega
-- ═══════════════════════════════════════════════════════════════════
-- Theorem 2: eml(1, 1) = exp(1) = e
-- ═══════════════════════════════════════════════════════════════════
theorem eml_is_e (exp ln : Int → Int) (h : ln 1 = 0) :
eml exp ln 1 1 = exp 1 :=
eml_is_exp exp ln h 1
-- ═══════════════════════════════════════════════════════════════════
-- Theorem 3: eml(1, eml(eml(1,x), 1)) = ln(x)
-- ═══════════════════════════════════════════════════════════════════
theorem eml_is_ln (exp ln : Int → Int)
(hel : ∀ x, exp (ln x) = x) (hle : ∀ x, ln (exp x) = x)
(h1 : ln 1 = 0) (x : Int) :
eml exp ln 1 (eml exp ln (eml exp ln 1 x) 1) = ln x := by
unfold eml; rw [h1]; simp only [Int.sub_zero]; rw [hle]; omega
-- ═══════════════════════════════════════════════════════════════════
-- Theorem 4: eml(1, eml(eml(1,1), 1)) = 0
-- ═══════════════════════════════════════════════════════════════════
theorem eml_is_zero (exp ln : Int → Int)
(hel : ∀ x, exp (ln x) = x) (hle : ∀ x, ln (exp x) = x)
(h1 : ln 1 = 0) :
eml exp ln 1 (eml exp ln (eml exp ln 1 1) 1) = 0 := by
rw [eml_is_ln exp ln hel hle h1]; exact h1
-- ═══════════════════════════════════════════════════════════════════
-- Theorem 5: eml(ln(a), exp(b)) = a - b
-- ═══════════════════════════════════════════════════════════════════
theorem eml_is_sub (exp ln : Int → Int)
(hel : ∀ x, exp (ln x) = x) (hle : ∀ x, ln (exp x) = x)
(a b : Int) :
eml exp ln (ln a) (exp b) = a - b := by
unfold eml; rw [hel, hle]
/-
QED — 5 theorems, 0 sorry.
1. exp(x) = eml(x, 1) [eml_is_exp]
2. e = eml(1, 1) [eml_is_e]
3. ln(x) = eml(1, eml(eml(1,x), 1)) [eml_is_ln]
4. 0 = eml(1, eml(eml(1,1), 1)) [eml_is_zero]
5. a - b = eml(ln(a), exp(b)) [eml_is_sub]
-/