A lambda calculus engine
This repository has been archived on 2024-11-05. You can view files and clone it, but cannot push or open issues/pull-requests.
 
 
Go to file
Mark 0c215a5df4
Fixed print method
2022-11-10 08:02:28 -08:00
.vscode Spelling 2022-11-07 19:02:35 -08:00
lamb Fixed print method 2022-11-10 08:02:28 -08:00
misc Updated README 2022-10-28 20:45:39 -07:00
.editorconfig Added metafiles 2022-10-20 11:01:50 -07:00
.gitignore Cleanup & build files 2022-10-21 21:01:06 -07:00
LICENSE Cleanup & build files 2022-10-21 21:01:06 -07:00
README.md Fixed print method 2022-11-10 08:02:28 -08:00
build_bin.py Cleanup & build files 2022-10-21 21:01:06 -07:00
macros.lamb Fixed a macro bug 2022-11-09 21:44:32 -08:00
pyproject.toml File cleanup 2022-11-07 19:58:11 -08:00
setup.py Cleanup & build files 2022-10-21 21:01:06 -07:00

README.md

Lamb: A Lambda Calculus Engine

Lamb screenshot

Installation

Method 1: PyPi (not yet)

  1. Put this on PyPi
  2. Write these instructions

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 python .

Usage

Type lambda 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. Load them with the :load command:

==> :load macros.lamb

Have fun!


Commands

Lamb understands many commands. Prefix them with a : in the prompt.

:help Prints a help message

:clear Clear the screen

:rlimit [int | None] Set maximum reduction limit. :rlimit none sets no limit.

:macros List macros in the current environment.

:mdel [macro] Delete a macro

:clearmacros Delete all macros

: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 (pre-release, in this order):

  • Export will break with :save, fix it.
  • Prevent macro-chaining recursion
  • Full-reduce option (expand all macros)
  • step-by-step reduction
  • Update screenshot
  • Update documentation
  • Write "how it works"
  • PyPi package

Todo:

  • Cleanup warnings
  • Syntax highlight printouts
  • Truncate long expressions in warnings
  • History queue + indexing
  • Show history command
  • Loop detection
  • Optimization: reduction can be slow with large trees.
  • \alpha-equivalence check
  • Command-line options (load a file)
  • Unchurch command: make church numerals human-readable
  • Better Syntax highlighting
  • Complete file names and commands
  • Tests