Skip to main content

🐑 Lamb: A Lambda Calculus Engine

Lamb demo

: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

  1. (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
  2. pip install lamb-engine
  3. lamb

Method 2: Git

  1. Clone this repository.
  2. Make and enter a virtual environment.
  3. cd into this directory
  4. Run pip install .
  5. 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 expansion
  • C: Church expansion
  • H: History expansion
  • F: 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 (via requests, maybe?)
  • Tests

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lamb_engine-1.1.9.tar.gz (31.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lamb_engine-1.1.9-py3-none-any.whl (31.6 kB view details)

Uploaded Python 3

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

Hashes for lamb_engine-1.1.9.tar.gz
Algorithm Hash digest
SHA256 2ef9eb5133f9195d367a37ac58bf3f58adcf271f8f5adc9dae8c388a50de7546
MD5 14a4c88621b39ea1ee8afd93f5841e65
BLAKE2b-256 592f6463a34290d4f72bc4a463943d8061f85c4e1271ea0ec661692b4ab3fd47

See more details on using hashes here.

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

Hashes for lamb_engine-1.1.9-py3-none-any.whl
Algorithm Hash digest
SHA256 68efa3a456b68a98a20322d3bb9d90c85fc80756bb43c443c0bb69d74b72e6cf
MD5 a69b733cd9a7885552769087f8f4679f
BLAKE2b-256 6b08280bf4c84ed52ff38eb45e5c0abcb0870a7c4a1960808d9a6d547a1af932

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.1.9 This release

2 files

1.1.8

2 files

1.1.7

2 files

1.1.6

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page