An inference engine for extensional lambda-calculus
Project description
Pomagma
Pomagma is an inference engine for extensional untyped λ-join-calculus, a simple model of computation in which nondeterminism gives rise to an elegant gradual type system.
Pomagma can:
- simplify code fragments expressed in λ-join-calculus
- validate codebases of programs and assertions
- solve systems of inequalities and horn clauses
- synthesize code from sketches and inequality constraints
Pomagma's base theory has been partially verified in Coq (hstar) and Z3 (hstar-z3).
Pomagma's architecture follows a client-server model, where a Python client library performs high-level syntactic tasks, and a shared C++ database server performs low-level inference work.
- Installing
- Quick Start
- Get An E-graph
- Using The Client Library
- Using the PyTorch front end
- Developing
- Philosophy
Installing
The server targets Ubuntu 24.04, and installs in a uv virtual environment
git clone https://github.com/fritzo/pomagma
cd pomagma
. install.sh
make small-test # takes ~5 CPU minutes
make test # takes ~1 CPU hour
The client library supports Python 3.12.
pip install pomagma
Quick Start
Start a local analysis server with the tiny pre-built E-graph
pomagma analyze # starts server, Ctrl-C to quit
Then in another terminal, start an interactive python client session
$ pomagma connect # starts a client session, Ctrl-D to quit
>>> simplify(['APP I I'])
[I]
>>> validate(['I'])
[{'is_bot': False, 'is_top': False}]
>>> solve('x', 'EQUAL x APP x x', max_solutions=4)
['I', 'BOT', 'TOP', 'V']
>>> validate_facts(['EQUAL x TOP', 'LESS x BOT'])
False
Alternatively, connect using the Python client library
python
from pomagma import analyst
with analyst.connect() as db:
print(db.simplify(["APP I I"]))
print(db.validate(["I"]))
print(db.solve('x', 'EQUAL x APP x x', max_solutions=4))
print(db.validate_facts(['EQUAL x TOP', 'LESS x BOT']))
Get an E-graph
Pomagma reasons about large programs by approximately locating code fragments in an E-graph of 103-105 basic programs. The more basic programs in an E-graph, the more accurate pomagma's analysis will be. Pomagma ships with a tiny pre-built E-graph of ~2000 basic programs.
To get a large pre-built E-graph, put your AWS credentials in the environment and
export AWS_ACCESS_KEY_ID=... # put your id here
export AWS_SECRET_ACCESS_KEY=... # put your hey here
pomagma pull # downloads latest E-graph from S3
To start building a custom E-graph from scratch
pomagma make max_size=10000 # kill and restart at any time
Pomagma is parallelized and needs lots of memory to build a large E-graph.
| E-graph Size | Compute Time | Memory Space | Storage Space |
|---|---|---|---|
| 1 000 E-classes | ~1 CPU hour | ~10MB | ~1MB |
| 10 000 E-classes | ~1 CPU week | ~1GB | ~100MB |
| 100 000 E-classes | ~1 CPU year | ~100GB | ~10GB |
License
Copyright (c) 2005-2025 Fritz Obermeyer.
Pomagma is licensed under the Apache 2.0 License.
Pomagma ships with the Google Farmhash library, licensed under the MIT license.
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pomagma-0.3.1.tar.gz.
File metadata
- Download URL: pomagma-0.3.1.tar.gz
- Upload date:
- Size: 211.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cdb86ff35b42052e28bec0925423528424b762ef806be8495cb8f11f335c3ff4
|
|
| MD5 |
bc34064fe4ad5dc4bd5a6ed0de50b130
|
|
| BLAKE2b-256 |
104da28518c2ffdf044112e9a970d9d8f6d236d2e1fee190450a4efb9c0e4fd3
|
File details
Details for the file pomagma-0.3.1-py3-none-any.whl.
File metadata
- Download URL: pomagma-0.3.1-py3-none-any.whl
- Upload date:
- Size: 261.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
44376c0907c711f2b1837684cf412ff3b5b100b3346d204746698b3b05716618
|
|
| MD5 |
f8245b168fb05540e19b62cc15a3417d
|
|
| BLAKE2b-256 |
1741eec96bed5983803b30073987b6af6203fe20a46204e4362ca2e4f0b1a2a9
|