Skip to main content

An inference engine for extensional lambda-calculus

Project description

Pomagma

Tests PyPI Version

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

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

pomagma-0.3.1.tar.gz (211.8 kB view details)

Uploaded Source

Built Distribution

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

pomagma-0.3.1-py3-none-any.whl (261.3 kB view details)

Uploaded Python 3

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

Hashes for pomagma-0.3.1.tar.gz
Algorithm Hash digest
SHA256 cdb86ff35b42052e28bec0925423528424b762ef806be8495cb8f11f335c3ff4
MD5 bc34064fe4ad5dc4bd5a6ed0de50b130
BLAKE2b-256 104da28518c2ffdf044112e9a970d9d8f6d236d2e1fee190450a4efb9c0e4fd3

See more details on using hashes here.

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

Hashes for pomagma-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 44376c0907c711f2b1837684cf412ff3b5b100b3346d204746698b3b05716618
MD5 f8245b168fb05540e19b62cc15a3417d
BLAKE2b-256 1741eec96bed5983803b30073987b6af6203fe20a46204e4362ca2e4f0b1a2a9

See more details on using hashes here.

Supported by

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