MCPcopy Index your code
hub / github.com/alcides/aeon

github.com/alcides/aeon @v4.3.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v4.3.1 ↗ · + Follow
4,123 symbols 22,023 edges 351 files 1,217 documented · 30%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

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.
  • Export to Python--export=fun prints a stand-alone, pure-Python version of any function (with its dependencies and FFI bundled, and holes synthesized first).
  • 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:

Core symbols most depended-on inside this repo

get
called by 292
aeon/backend/evaluator.py
text
called by 99
aeon/utils/pprint_helpers.py
rec
called by 99
aeon/sugar/desugar.py
parse_liquid
called by 96
aeon/verification/helpers.py
fresh
called by 88
aeon/utils/name.py
rec
called by 88
aeon/sugar/substitutions.py
parse
called by 85
aeon/facade/driver.py
rec
called by 82
aeon/core/substitutions.py

Shape

Function 2,816
Method 938
Class 369

Languages

Python100%

Modules by API surface

aeon/sugar/parser.py127 symbols
aeon/bindings/learning.py118 symbols
aeon/llvm/llvm_ast.py86 symbols
aeon/sugar/program.py81 symbols
aeon/sugar/desugar.py75 symbols
aeon/facade/api.py73 symbols
aeon/verification/helpers.py54 symbols
aeon/utils/pprint_helpers.py54 symbols
aeon/synthesis/grammar/grammar_generation.py52 symbols
aeon/core/terms.py50 symbols
aeon/core/types.py49 symbols
aeon/verification/smt.py46 symbols

For agents

$ claude mcp add aeon \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact