A lambda calculus engine
Project description
🐑 Lamb: A Lambda Calculus Engine
:brain: What is lambda calculus?
-
video 1: Introduction and boolean logic. The first few minutes are a bit confusing, but it starts to make sense at about
6:50
-
video 2: Continuation of video 1. Features combinators and numerals.
-
blog: Another introduction. Moves slower than the two videos above and doesn't assume CS knowledge. Four-part series.
-
handout: A handout I've written on lambda calculus. Solutions are available somewhere on
git.betalupi.com
. You'll have to find them yourself if you want them.
:package: Installation
Method 1: PyPi
- (Optional but recommended) make and enter a venv
- On Windows, run the following in cmd or powershell:
cd Desktop
python -m venv lamb
.\Scripts\activate
pip install lamb-engine
lamb
Method 2: Git
- Clone this repository.
- Make and enter a virtual environment.
cd
into this directory- Run
pip install .
- Run
lamb
📖 Usage
Type expressions into the prompt, and Lamb will evaluate them.
Use your \
(backslash) key to type a λ
.
To define macros, use =
. For example,
==> T = λab.a
==> F = λab.a
==> NOT = λa.a F T
Note that there are spaces in λa.a F T
. With no spaces, aFT
will be parsed as one variable.
Lambda functions can only take single-letter, lowercase arguments. λA.A
is not valid syntax.
Free variables will be shown with a '
, like a'
.
Macros are case-sensitive. If you define a macro MAC
and accidentally write mac
in the prompt, mac
will become a free variable.
Numbers will automatically be converted to Church numerals. For example, the following line will reduce to T
.
==> 3 NOT F
If an expression takes too long to evaluate, you may interrupt reduction with Ctrl-C
.
Exit the prompt with Ctrl-C
or Ctrl-D
.
There are many useful macros in macros.lamb. Download the file, then load them with the :load
command:
==> :load macros.lamb
You can also pass files to lamb directly to have them loaded at startup:
lamb file1 file2
Use your up/down arrows to recall history.
Have fun!
:card_file_box: Commands
Lamb understands many commands. Prefix them with a :
in the prompt.
:help
Print a help message
:clear
Clear the screen
:rlimit [int | None]
Set maximum reduction limit. :rlimit none
sets no limit.
:macros
List macros.
:mdel [macro]
Delete a macro
:delmac
Delete all macros
:step [yes | no]
Enable or disable step-by-step reduction. Toggle if no argument is given. When reducing by steps, the prompt tells you what kind of reduction was done last:
M
: Macro expansionC
: Church expansionH
: History expansionF
: Function application
:expand [yes | no]
Enable or disable full expansion. Toggle if no argument is given. If full expansion is enabled, ALL macros will be expanded when printing output.
:save [filename]
:load [filename]
Save or load macros from a file.
The lines in a file look exactly the same as regular entries in the prompt, but can only contain macro definitions. See macros.lamb for an example.
Todo:
- Prevent macro-chaining recursion
- Cleanup warnings
- Truncate long expressions in warnings
- Loop detection
- α-equivalence check
- Unchurch command: make church numerals human-readable
- Better syntax highlighting
- Tab-complete file names and commands
- Load default macros without manually downloading
macros.lamb
(viarequests
, maybe?) - Tests
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file lamb_engine-1.1.9.tar.gz
.
File metadata
- Download URL: lamb_engine-1.1.9.tar.gz
- Upload date:
- Size: 31.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2ef9eb5133f9195d367a37ac58bf3f58adcf271f8f5adc9dae8c388a50de7546 |
|
MD5 | 14a4c88621b39ea1ee8afd93f5841e65 |
|
BLAKE2b-256 | 592f6463a34290d4f72bc4a463943d8061f85c4e1271ea0ec661692b4ab3fd47 |
File details
Details for the file lamb_engine-1.1.9-py3-none-any.whl
.
File metadata
- Download URL: lamb_engine-1.1.9-py3-none-any.whl
- Upload date:
- Size: 31.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 68efa3a456b68a98a20322d3bb9d90c85fc80756bb43c443c0bb69d74b72e6cf |
|
MD5 | a69b733cd9a7885552769087f8f4679f |
|
BLAKE2b-256 | 6b08280bf4c84ed52ff38eb45e5c0abcb0870a7c4a1960808d9a6d547a1af932 |