Skip to main content

Language with Refinement Types

Project description

Aeon

Aeon is a statically-typed programming language with native support for Liquid Types (refinement types), developed at LASIGE, University of Lisbon.

Unlike LiquidHaskell or LiquidJava, where refinement types are bolted onto an existing language, Aeon was designed from the ground up around them. The type system lets you express precise properties of values directly in types — for example, "an integer greater than zero" — and the compiler proves these properties hold using the Z3 SMT solver.

Beyond refinement types, Aeon also offers:

  • Python FFI — call any Python function natively, giving you access to the full Python ecosystem.
  • Program synthesis — leave ?holes in your program and let Aeon fill them in using genetic programming, enumerative search, or LLM-backed synthesis.
  • A growing standard library — modules for List, Math, Array, Image, and more.

Aeon is implemented as a Python interpreter and is under active development.

📖 Documentation: https://alcides.github.io/aeon

Installation

Aeon is distributed on PyPI and can be run directly via uvx:

uvx --from aeonlang aeon [file.ae]

Examples

Refinement Types

Refinement types let you attach predicates to base types. Here, sqrt is declared to accept only positive integers — passing a negative value is a compile-time error, not a runtime crash. The native keyword bridges to Python:

def sqrt : (i: {x:Int | x > 0}) -> Float := native "__import__('math').sqrt";

def main (i:Int) : Unit :=
    print (sqrt (-25))   # type-checking error: -25 does not satisfy x > 0

Program Synthesis

Aeon can synthesize code to satisfy a refinement specification. Mark the body with ?hole and Aeon will search for an implementation that meets the type:

@minimize_int(deposit)
def deposit : {d:Int | d > 0 && d * 21900 >= 10000000} := ?hole;

Run with uv run python -m aeon --budget 10 -s gp file.ae to synthesize the minimum annual deposit that reaches a $10,000 goal in 20 years at 1% interest.

More examples — including image processing, machine learning, and probabilistic programming — live in the examples/ directory.

Authors

Aeon has been developed at LASIGE, University of Lisbon by:

Publications

Let us know if your paper uses Aeon, to list it here.

Citation

Please cite as:

Fonseca, Alcides, Paulo Santos, and Sara Silva. "The usability argument for refinement typed genetic programming." International Conference on Parallel Problem Solving from Nature. Cham: Springer International Publishing, 2020.

BibTeX:

@inproceedings{fonseca2020usability,
  title={The usability argument for refinement typed genetic programming},
  author={Fonseca, Alcides and Santos, Paulo and Silva, Sara},
  booktitle={International Conference on Parallel Problem Solving from Nature},
  pages={18--32},
  year={2020},
  organization={Springer}
}

Acknowledgements

This work was supported by Fundação para a Ciência e Tecnologia (FCT) through:

And by Lisboa2020, Compete2020 and FEDER through:

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

aeonlang-4.1.4.tar.gz (351.4 kB view details)

Uploaded Source

Built Distribution

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

aeonlang-4.1.4-py3-none-any.whl (417.8 kB view details)

Uploaded Python 3

File details

Details for the file aeonlang-4.1.4.tar.gz.

File metadata

  • Download URL: aeonlang-4.1.4.tar.gz
  • Upload date:
  • Size: 351.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for aeonlang-4.1.4.tar.gz
Algorithm Hash digest
SHA256 48ddc5adc2e8c233501345dd834fa2e2c5dcff1df7847e34109511b4b200be9a
MD5 54641137361804714481497baa6614e4
BLAKE2b-256 8d451516c1c3bda511f18d254593de0e4df3c8bcf675b11c93e7fdfc46d3fd43

See more details on using hashes here.

File details

Details for the file aeonlang-4.1.4-py3-none-any.whl.

File metadata

  • Download URL: aeonlang-4.1.4-py3-none-any.whl
  • Upload date:
  • Size: 417.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for aeonlang-4.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 8647568b45ed50d6acac5dc6530d0ffac914439429703357ad568c66123eaa40
MD5 84a55b0ad4372125e0f91af4df3ffd1e
BLAKE2b-256 b4a276ab2e5a5885966c76f3f719f53bf36d1972d6a428e6abd566d85ead383a

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