Historical internal name "uncommonlisp" retired in favor of the
public name "lumbda" ahead of lumbda.com going live. Scope of
this commit:
Source files renamed:
uncommonlisp.py -> lumbda.py
asm/uncommonlisp.s -> asm/lumbda.s
c/uncommonlisp.h -> c/lumbda.h
whitepaper/uncommonlisp-whitepaper -> whitepaper/lumbda-whitepaper (.rst + .pdf)
Binaries renamed (tracked ones; c/ was always gitignored):
asm/uncommonlisp, asm/uncommonlisp-gc, asm/uncommonlisp.o,
asm/uncommonlisp-gc.o -> asm/lumbda(-gc)(.o)
c/.gitignore -> ignores lumbda
Internal string updates (sed pass ordered longest-first):
asm/uncommonlisp -> asm/lumbda
c/uncommonlisp -> c/lumbda
uncommonlisp.py -> lumbda.py
UNCOMMONLISP_BIN -> LUMBDA_BIN (asm/test.sh env var)
"uncommonlisp> " -> "lumbda> " (asm REPL prompt baked into binary)
UNCOMMONLISP -> LUMBDA (macros, comments)
uncommonlisp -> lumbda (prose)
Binary portal magic updated:
"ULPORTAL" -> "LUMBDAB1" # "Lumbda Binary v1"
Old portal files are not backward-compatible — this is a deliberate
break since it's the rename moment. S-expression portals already
carry their own ";; lumbda-portal v1" header and remain cleanly
versioned.
WHITEPAPER.pdf / WHITEPAPER.rst symlinks repointed to the renamed
files. Makefile's whitepaper target targets lumbda-whitepaper.pdf.
Not changed (intentional, separate phases):
- Filesystem directory /home/fox/git/uncommonlisp itself
(fox renames locally and the gitlab repo URL in a follow-up)
- tests.py hardcoded cwd=/home/fox/git/uncommonlisp
(matches the current on-disk location; will flip when the
directory rename ships)
- Git history (immutable; old commits still say uncommonlisp,
which is correct — that's what they were)
Verified:
137 asm no-GC + 137 asm GC + 571 Python + 83 C + 189 shared
functional tests all pass under the new names.
bench-gc-http (2000 req): all 4 cells behave as expected
(cells 1/2 flat, 3 leaks, 4 bounded at 1 chunk).
Python REPL, C REPL, asm REPL all start cleanly.
49 lines
2 KiB
Markdown
49 lines
2 KiB
Markdown
# EML Proof Friction Benchmark
|
|
|
|
Three approaches to verifying the same claim: `eml(x,y) = exp(x) - ln(y)`
|
|
with constant 1 generates all elementary functions (arXiv:2603.21852v2).
|
|
|
|
## Results
|
|
|
|
| Approach | Time | Guarantee | Friction |
|
|
|----------|------|-----------|----------|
|
|
| Python (numerical) | 0.04s | 1e-10 tolerance | Low |
|
|
| lumbda (numerical) | 59s | 1e-10 tolerance | High |
|
|
| Lean 4 (formal proof) | 1.5s | kernel-verified | Medium |
|
|
|
|
## Analysis
|
|
|
|
**The formal proof is 40x faster than brute-force search and provides
|
|
mathematical certainty instead of floating-point tolerance.**
|
|
|
|
The numerical approaches (Python and lumbda) perform O(N²) pairwise
|
|
enumeration of EML trees, evaluating at transcendental test points and
|
|
comparing against target functions. This is MOAD-0001 at the proof layer:
|
|
quadratic search friction where algebraic reasoning suffices.
|
|
|
|
The Lean proof does 5 rewrites — each one an identity (exp(ln(x))=x,
|
|
ln(exp(x))=x, ln(1)=0). The kernel checks each step in microseconds.
|
|
No search, no tolerance, no conjecture dependency.
|
|
|
|
## The MOAD-0001 in proof methodology
|
|
|
|
| Step | Numerical approach | Algebraic approach |
|
|
|------|-------------------|-------------------|
|
|
| Find exp | O(N²) search | 1 rewrite: eml(x,1) = exp(x) - ln(1) = exp(x) |
|
|
| Find ln | O(N²) search | 3 rewrites: composition + cancel |
|
|
| Find 0 | O(N²) search | Corollary of ln: ln(1) = 0 |
|
|
| Find sub | O(N²) search | 1 rewrite: eml(ln(a), exp(b)) = a - b |
|
|
| Verify | Compare floats | Type checker |
|
|
|
|
The numerical search does redundant work at every step. The algebraic
|
|
proof does each step exactly once. This is the sedimentary defect:
|
|
brute-force where structure exists.
|
|
|
|
## Lesson
|
|
|
|
The fastest path to truth is not computation — it is understanding.
|
|
When you know WHY eml(1, eml(eml(1,x), 1)) = ln(x), you can verify
|
|
it in microseconds. When you don't, you search for hours.
|
|
|
|
Proof assistants eliminate the quadratic friction of verification.
|
|
They are the hash set to numerical analysis's nested loop.
|